#define s_FR8012HAQ_emo_data_mxa_len 8*1024 //60秒存的字节数大小
char * s_FR8012HAQ_emo_data = NULL;//情绪数据
int s_FR8012HAQ_emo_data_len = 0;//情绪的血压数据长度
+
+#define s_FR8012HAQ_yyl_data_mxa_len 20*1024 //最大缓冲区
+char * s_FR8012HAQ_yyl_data = NULL;//中医数据
+int s_FR8012HAQ_yyl_data_len = 0;//中医数据长度
+
static unsigned char s_FR8012HAQ_blood_oxygen = 0x0;//血氧
static unsigned char s_FR8012HAQ_HRV = 0x0;//hrv
unsigned char s_FR8012HAQ_wear_status = 1;//佩戴状态
unsigned char s_FR8012HAQ_heart_rate_buff[HEART_RATE_BUFF_LEN]={0};
unsigned short s_FR8012HAQ_heart_rate_buff_count = 0;
uint32_t FR8012HAQ_run_mode = NULL_MODE;
-uint32_t FR8012HAQ_jobs_mode = NULL_MODE;
+
int ir_wear = 0;//红外佩戴状态
int cap_wear = 1;//电容佩戴状态
char is_open_sar = 1;//是否打开sar检测
if(fr8012haq_timer == NULL )
uos_timer_create(&fr8012haq_timer);
//fr8012haq_timer = Helios_Timer_init( (void* )fr8012haq_timerout_cb, NULL);
- if(FR8012HAQ_jobs_mode == WEAR_MODE)
+ if(FR8012HAQ_run_mode == WEAR_MODE)
{
uos_timer_start(fr8012haq_timer, MS_TO_TICKS(3000), MS_TO_TICKS(3000), fr8012haq_timerout_cb, NULL);
- }else if(FR8012HAQ_jobs_mode == BP_MODE)//血压150MS
+ }else if(FR8012HAQ_run_mode == BP_MODE)//血压150MS
{
-
+ FR8012HAQ_LOG("fr8012haq_timer_cfg:BP_MODE!!!!!\n");
uos_timer_start(fr8012haq_timer, MS_TO_TICKS(150), MS_TO_TICKS(150), fr8012haq_timerout_cb, NULL);
- }else if(FR8012HAQ_jobs_mode == YYL_MODE)//中医50秒
+ }else if(FR8012HAQ_run_mode == YYL_MODE)//中医30秒
{
- uos_timer_start(fr8012haq_timer, MS_TO_TICKS(50000), MS_TO_TICKS(50000), fr8012haq_timerout_cb, NULL);
+ uos_timer_start(fr8012haq_timer, MS_TO_TICKS(10000), MS_TO_TICKS(10000), fr8012haq_timerout_cb, NULL);
}else//其他1秒
{
break;
}
}
- if(fr8012haq_parse_returned_data(60) == 1)//必须解析到执行成功
+ if(fr8012haq_parse_returned_data(100) == 1)//必须解析到执行成功
+ break;
+ UOS_SleepMs(100);
+ }
+ char send_data[100] = {0};
+ int send_data_len = 0;
+ unsigned int time = 0;
+ Hal_Rtc_Gettime_Count(&time);
+ count = 5;//重试次数
+ UOS_SleepMs(100);
+ while(count--)
+ {
+ send_data_len = snprintf(send_data,sizeof(send_data),"{\"cmd\":\"3\",\"set_time\":\"%d\"}\n",time);//发送时间戳
+ uart4_send_data(send_data,send_data_len);
+ if(fr8012haq_parse_returned_data(100) == 3)//必须解析到执行成功
break;
UOS_SleepMs(100);
}
-
fr8012haq_timer_cfg(true);
FR8012HAQ_LOG("FR8012HAQ_test2:%d!!!!\n\n",mode);
hal_fr8012haq_int_init();
- if(FR8012HAQ_jobs_mode != NULL_MODE)//没关闭就打开其他模式,先关闭一次
- {
- // FR8012HAQ_close();
- // fr8012haq_delay(20);
- // FR8012HAQ_jobs_mode = NULL_MODE;
- }
- // else
- // FR8012HAQ_restart();
+
FR8012HAQ_test(FR8012HAQ_run_mode);
- FR8012HAQ_jobs_mode = FR8012HAQ_run_mode;
- FR8012HAQ_run_mode = NULL_MODE;
+
// hal_gh30x_int_init();
// fr8012haq_en_gpio_enable(false);
FR8012HAQ_close();
//FR8012HAQ_LOG("FR8012HAQ_irq_cb: 1111111111111!!!!!!!!\r\n");
//FR8012HAQ_run_mode = NULL_MODE;
- //FR8012HAQ_jobs_mode = NULL_MODE;
fr8012haq_ppg_timerout_flag = 0;
fr8012haq_agc_timerout_flag = 0;
Timer0_Switch(0);
}
//读取并解析返回数据
#define DATA_HANDLE (1<<24)
-#define UART4_BUF_LEN 2*1024
-#define YYL_OUT_DATA_SIZE 30
-yylPFE_OutputData yyl_out_data[YYL_OUT_DATA_SIZE]={0};
-int yyl_out_data_len = 0;
+#define UART4_BUF_LEN 4*1024
+
+void my_str_print(char *data,int len)
+{
+ for(int i = 0;i<len;i++)
+ FR8012HAQ_LOG("%c",data[i]);
+}
int fr8012haq_parse_returned_data(int timeout)
{
static char *UART4_buf = NULL;
char *str_tmp = NULL;
char num_buf[20] = {0};
- unsigned char num_buf_len = 0;
+ unsigned int num_buf_len = 0;
int i = 0,ret = -1;
unsigned int len;
if(NULL == UART4_buf)
memcpy(HA_req_code,str_tmp,num_buf_len);
}
/*中医数据*/
- str_tmp = strstr(UART4_buf,"\"yyl_data\":[");
- if(str_tmp)
+ str_tmp = strstr(UART4_buf,"\"yyl_data\":\"");
+ if(str_tmp && s_FR8012HAQ_yyl_data_len < s_FR8012HAQ_yyl_data_mxa_len)
{
//unsigned char hrs = 0;
- str_tmp += strlen("\"yyl_data\":[");
+ str_tmp += strlen("\"yyl_data\":\"");
//time
+ unsigned int yyl_data_len = 0;
+
+ yyl_data_len = find_c(str_tmp,'\"');
+ if(s_FR8012HAQ_yyl_data!= NULL && s_FR8012HAQ_yyl_data_len ==0)//统一线程释放,避免上层应用释放导致dump
+ {
+ free(s_FR8012HAQ_yyl_data);
+ s_FR8012HAQ_yyl_data = NULL;
+ }
- Hal_Rtc_Gettime_Count(&yyl_out_data[yyl_out_data_len].time);
- //timestamp
- num_buf_len = find_c(str_tmp,',');
- if(num_buf_len>=sizeof(num_buf))
- num_buf_len = sizeof(num_buf)-1;
- memset(num_buf,0,sizeof(num_buf));
- memcpy(num_buf,str_tmp,num_buf_len);
- int int_tmp = atoi(num_buf);
- yyl_out_data[yyl_out_data_len].timestamp = int_tmp;
- FR8012HAQ_LOG("yyl_out_data[timestamp]:%d\n",yyl_out_data[yyl_out_data_len].timestamp);
- str_tmp += num_buf_len+1;
- //areaUP
- num_buf_len = find_c(str_tmp,',');
- if(num_buf_len>=sizeof(num_buf))
- num_buf_len = sizeof(num_buf)-1;
- memset(num_buf,0,sizeof(num_buf));
- memcpy(num_buf,str_tmp,num_buf_len);
- int_tmp = atoi(num_buf);
- yyl_out_data[yyl_out_data_len].areaUP = int_tmp;
- FR8012HAQ_LOG("yyl_out_data[areaUP]:%d\n",yyl_out_data[yyl_out_data_len].areaUP);
- FR8012HAQ_LOG("num_buf[%d]:%s\n",num_buf_len,num_buf);
- str_tmp += num_buf_len+1;
- //areaUPBase
- num_buf_len = find_c(str_tmp,',');
- if(num_buf_len>=sizeof(num_buf))
- num_buf_len = sizeof(num_buf)-1;
- memset(num_buf,0,sizeof(num_buf));
- memcpy(num_buf,str_tmp,num_buf_len);
- int_tmp = atoi(num_buf);
- yyl_out_data[yyl_out_data_len].areaUPBase = int_tmp;
- FR8012HAQ_LOG("yyl_out_data[areaUPBase]:%d\n",yyl_out_data[yyl_out_data_len].areaUPBase);
- FR8012HAQ_LOG("num_buf[%d]:%s\n",num_buf_len,num_buf);
- str_tmp += num_buf_len+1;
- //areaUPHeight
- num_buf_len = find_c(str_tmp,',');
- if(num_buf_len>=sizeof(num_buf))
- num_buf_len = sizeof(num_buf)-1;
- memset(num_buf,0,sizeof(num_buf));
- memcpy(num_buf,str_tmp,num_buf_len);
- int_tmp = atoi(num_buf);
- yyl_out_data[yyl_out_data_len].areaUPHeight = int_tmp;
- FR8012HAQ_LOG("yyl_out_data[areaUPHeight]:%d\n",yyl_out_data[yyl_out_data_len].areaUPHeight);
- FR8012HAQ_LOG("num_buf[%d]:%s\n",num_buf_len,num_buf);
- str_tmp += num_buf_len+1;
- //areaDOWN
- num_buf_len = find_c(str_tmp,',');
- if(num_buf_len>=sizeof(num_buf))
- num_buf_len = sizeof(num_buf)-1;
- memset(num_buf,0,sizeof(num_buf));
- memcpy(num_buf,str_tmp,num_buf_len);
- int_tmp = atoi(num_buf);
- yyl_out_data[yyl_out_data_len].areaDOWN = int_tmp;
- FR8012HAQ_LOG("yyl_out_data[areaDOWN]:%d\n",yyl_out_data[yyl_out_data_len].areaDOWN);
- FR8012HAQ_LOG("num_buf[%d]:%s\n",num_buf_len,num_buf);
- str_tmp += num_buf_len+1;
- //areaDOWNBase
- num_buf_len = find_c(str_tmp,',');
- if(num_buf_len>=sizeof(num_buf))
- num_buf_len = sizeof(num_buf)-1;
- memset(num_buf,0,sizeof(num_buf));
- memcpy(num_buf,str_tmp,num_buf_len);
- int_tmp = atoi(num_buf);
- yyl_out_data[yyl_out_data_len].areaDOWNBase = int_tmp;
- FR8012HAQ_LOG("yyl_out_data[areaDOWNBase]:%d\n",yyl_out_data[yyl_out_data_len].areaDOWNBase);
- FR8012HAQ_LOG("num_buf[%d]:%s\n",num_buf_len,num_buf);
- str_tmp += num_buf_len+1;
- //areaDOWNHeight
- num_buf_len = find_c(str_tmp,',');
- if(num_buf_len>=sizeof(num_buf))
- num_buf_len = sizeof(num_buf)-1;
- memset(num_buf,0,sizeof(num_buf));
- memcpy(num_buf,str_tmp,num_buf_len);
- int_tmp = atoi(num_buf);
- yyl_out_data[yyl_out_data_len].areaDOWNHeight = int_tmp;
- FR8012HAQ_LOG("yyl_out_data[areaDOWNHeight]:%d\n",yyl_out_data[yyl_out_data_len].areaDOWNHeight);
- FR8012HAQ_LOG("num_buf[%d]:%s\n",num_buf_len,num_buf);
- str_tmp += num_buf_len+1;
- //RRI
- num_buf_len = find_c(str_tmp,',');
- if(num_buf_len>=sizeof(num_buf))
- num_buf_len = sizeof(num_buf)-1;
- memset(num_buf,0,sizeof(num_buf));
- memcpy(num_buf,str_tmp,num_buf_len);
- int_tmp = atoi(num_buf);
- yyl_out_data[yyl_out_data_len].RRI = int_tmp;
- FR8012HAQ_LOG("yyl_out_data[RRI]:%d\n",yyl_out_data[yyl_out_data_len].RRI);
- FR8012HAQ_LOG("num_buf[%d]:%s\n",num_buf_len,num_buf);
- str_tmp += num_buf_len+1;
- //motion
- num_buf_len = find_c(str_tmp,']');
- if(num_buf_len>=sizeof(num_buf))
- num_buf_len = sizeof(num_buf)-1;
- memset(num_buf,0,sizeof(num_buf));
- memcpy(num_buf,str_tmp,num_buf_len);
- int_tmp = atoi(num_buf);
- yyl_out_data[yyl_out_data_len].motion = int_tmp;
- FR8012HAQ_LOG("yyl_out_data[motion]:%d\n",yyl_out_data[yyl_out_data_len].motion);
- FR8012HAQ_LOG("num_buf[%d]:%s\n",num_buf_len,num_buf);
- str_tmp += num_buf_len+1;
+ if(s_FR8012HAQ_yyl_data == NULL)//第一次用
+ {
+ s_FR8012HAQ_yyl_data = malloc(yyl_data_len);
+ s_FR8012HAQ_yyl_data_len = 0;
+
+ }else
+ {
+ char *s_FR8012HAQ_yyl_data_tmp = malloc(yyl_data_len+s_FR8012HAQ_yyl_data_len);
+ memcpy(s_FR8012HAQ_yyl_data_tmp,s_FR8012HAQ_yyl_data,s_FR8012HAQ_yyl_data_len);
+ free(s_FR8012HAQ_yyl_data);
+ s_FR8012HAQ_yyl_data = s_FR8012HAQ_yyl_data_tmp;
- if(yyl_out_data_len<YYL_OUT_DATA_SIZE-1)
- yyl_out_data_len++;
+ }
+ if(s_FR8012HAQ_yyl_data)//复制数据
+ {
+ memcpy(&s_FR8012HAQ_yyl_data[s_FR8012HAQ_yyl_data_len],str_tmp,yyl_data_len);
+ s_FR8012HAQ_yyl_data_len+=yyl_data_len;
+
+ }
+ FR8012HAQ_LOG("yyl_data:len:%d\n",s_FR8012HAQ_yyl_data_len);
+ FR8012HAQ_LOG("yyl_data:");
+ my_str_print(s_FR8012HAQ_yyl_data,s_FR8012HAQ_yyl_data_len);//打印
+ FR8012HAQ_LOG("\n\n");
+ FR8012HAQ_LOG("yyl_data:len:%d",s_FR8012HAQ_yyl_data_len);
}
}
if(strstr(UART4_buf,"\"cmd\":\"3\""))
{
+ ret = 3;
if(strstr(UART4_buf,"\"HA_activate\":\"1\""))
{
ret = 3;
Timer0_Switch(1);
- //FR8012HAQ_LOG("fr8012haq_process_data:%d!!!!\n\n",FR8012HAQ_jobs_mode);
- switch (FR8012HAQ_jobs_mode)
+ //FR8012HAQ_LOG("fr8012haq_process_data:%d!!!!\n\n",FR8012HAQ_run_mode);
+ switch (FR8012HAQ_run_mode)
{
case HRS_MODE:
/* code */
default:
break;
}
- //FR8012HAQ_LOG("fr8012haq_process_data2:%d!!!!\n",FR8012HAQ_jobs_mode);
+ //FR8012HAQ_LOG("fr8012haq_process_data2:%d!!!!\n",FR8012HAQ_run_mode);
// float tmp = 0x3FE2E147;
// FR8012HAQ_LOG("float:%f\n",tmp);
fr8012haq_parse_returned_data(60);
{
// code implement by user
// must register func hal_gh30x_int_handler as callback
+
Timer0_Switch(1);
mfp_config(fr8012haq_mfp_cfgs);
fr8012haq_en_gpio_init();
+ UOS_SleepMs(100);
FR8012HAQ_LOG("FR8012HAQ ID : 0x%02x\n",get_fr8012haq_id());
}
void Fr8012haq_Init(void)
FR8012HAQ_LOG("Fr8012haq_Init4!!!!\n\n");
FR8012HAQ_restart();
uart4_debug();
- UOS_SleepMs(100);
+ UOS_SleepMs(5);
HA_lib_init();
// while(1)
// {
fr8012haq_delay(50);
fr8012haq_en_gpio_enable(true);
fr8012haq_delay(100);
+
+
+ FR8012HAQ_LOG("FR8012HAQ_restart!!!\n");
}
void fr8012haq_measure_stop(void)
{
FR8012HAQ_LOG("fr8012haq_measure_stop !!!!!!!!\n");
- FR8012HAQ_run_mode = NULL_MODE;
- FR8012HAQ_jobs_mode = NULL_MODE;
+ FR8012HAQ_run_mode = close_MODE;
sensor_task_send_message(FR8012HAQ_ID,SENSOR_MSG_STOP);
}
void FR8012HAQ_close(void)
FR8012HAQ_LOG("FR8012HAQ_close !!!!!!!!\n");
watch_set_sleep_lcd_only(false);
is_measuring_flag = false;
+
if(s_FR8012HAQ_blood_data!= NULL)
{
free(s_FR8012HAQ_blood_data);
uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"close\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"close\"}"));
fr8012haq_timer_cfg(false);
//fr8012haq_hrs_disable
- // if(FR8012HAQ_jobs_mode == HRS_MODE)
+ // if(FR8012HAQ_run_mode == HRS_MODE)
// {
// //fr8012haq_hrs_disable();
- // }else if(FR8012HAQ_jobs_mode == SPO2_MODE)
+ // }else if(FR8012HAQ_run_mode == SPO2_MODE)
// {
// //fr8012haq_spo2_disable();
- // }else if(FR8012HAQ_jobs_mode == HRV_MODE)
+ // }else if(FR8012HAQ_run_mode == HRV_MODE)
// {
// //fr8012haq_hrv_disable();
// }
*len = s_FR8012HAQ_emo_data_len;
return s_FR8012HAQ_emo_data;
}
-//获取云医链中医数据,一分钟产生一个,最多存30个。返回当前存多少个,yyl_data:数据复制缓冲区,必须大于30*sizeof(yylPFE_OutputData)
-//yylPFE_OutputData yyl_out_data
-int fr8012haq_YYL_data_get(yylPFE_OutputData *yyl_data)
+//获取云医链中医数据,一分钟产生30-40组结构体数据,将结构体转str后保存。返回数据字符串,yyl_data_len:字符串长度
+char* fr8012haq_YYL_data_get(int *yyl_data_len)
{
- int len_tmp = yyl_out_data_len;
- memcpy(yyl_data,yyl_out_data,yyl_out_data_len*sizeof(yylPFE_OutputData));
- yyl_out_data_len = 0;
- memset(yyl_out_data,0,YYL_OUT_DATA_SIZE*sizeof(yylPFE_OutputData));
- return len_tmp;
+ FR8012HAQ_LOG("fr8012haq_YYL_data_get start\n");
+ *yyl_data_len = s_FR8012HAQ_yyl_data_len;
+
+ return s_FR8012HAQ_yyl_data;
+}
+//清空数据缓冲区,获取数据处理完后要执行清空数据
+void fr8012haq_YYL_data_clean(void)
+{
+ s_FR8012HAQ_yyl_data_len = 0;
+
+ FR8012HAQ_LOG("fr8012haq_YYL_data_clean\n");
}
void fr8012haq_hr_bp_bo_value_clear(void)
{