static void DelayInUs(unsigned int us);
void FR8012HAQ_close(void);
TASK_HANDLE * Hsensor_task_id;
+int fr8012haq_parse_returned_data(void);
//字符串里查找最近一个c字符,返回偏移位置
unsigned int find_c(char *data,char c)
{
uos_timer_stop(fr8012haq_http_post_json_timer);
}
-int fr8012haq_http_post_json(char *url,char *post_data,char *read_buf,unsigned int read_buf_max,unsigned int timeout)
+int fr8012haq_http_post_json(char *url,char *token,char *post_data,char *read_buf,unsigned int read_buf_max,unsigned int timeout)
{
int response_code= 0;
int ret = 0;
http_client_setopt(fr8012haq_client, HTTPCLIENT_OPT_POSTLENGTH, strlen(post_data)); /*http context length*/
header = http_client_list_append(header, "Content-Type: application/json\r\n");
header = http_client_list_append(header, "Accept: */*\r\n");
+ if(token)
+ {
+ char * token_buf = malloc(strlen(token)+100);
+ if(!token_buf)
+ {
+ ret = -1;
+ goto EXIT;
+
+ }
+ memset(token_buf,0,strlen(token)+100);
+ snprintf(token_buf,strlen(token)+100,"token: %s\r\n",token_buf);
+ header = http_client_list_append(header, token_buf);
+ free(token_buf);
+ }
+
+
http_client_setopt(fr8012haq_client, HTTPCLIENT_OPT_HTTPHEADER, header);
http_client_getinfo(fr8012haq_client, HTTPCLIENT_GETINFO_TCP_STATE, &response_code);
if(response_code != HTTP_TCP_ESTABLISHED){
UOS_SleepMs(5000);
- //fr8012haq_http_post_json(url,post_data,read_buff,2000,10000);
+ //fr8012haq_http_post_json(url,NULL,post_data,read_buff,2000,10000);
// FR8012HAQ_LOG("fr8012haq_task_callback1!!!!\n");
// client = http_client_init();
//s_FR8012HAQ_wear_status = 0;
s_FR8012HAQ_blood_oxygen = 0x0;
FR8012HAQ_LOG("FR8012HAQ_test1:%d!!!!\n\n",mode);
- if(mode <= close_MODE)
- {
-
- switch (mode)
+ unsigned char count = 5;//重试次数
+ while(count--)
+ {
+ if(mode <= close_MODE)
{
- case HRS_MODE:
- /* code */
- uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"hrs\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"hrs\"}"));
- break;
- case SPO2_MODE:
- /* code */
- uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"spo2\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"spo2\"}"));
- break;
- case BP_MODE:
- /* code */
- if(s_FR8012HAQ_blood_data ==NULL)
+
+ switch (mode)
{
- s_FR8012HAQ_blood_data = malloc(s_FR8012HAQ_blood_data_mxa_len);
- memset(s_FR8012HAQ_blood_data,0,s_FR8012HAQ_blood_data_mxa_len);
+ case HRS_MODE:
+ /* code */
+ uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"hrs\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"hrs\"}"));
+ break;
+ case SPO2_MODE:
+ /* code */
+ uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"spo2\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"spo2\"}"));
+ break;
+ case BP_MODE:
+ /* code */
+ if(s_FR8012HAQ_blood_data ==NULL)
+ {
+ s_FR8012HAQ_blood_data = malloc(s_FR8012HAQ_blood_data_mxa_len);
+ memset(s_FR8012HAQ_blood_data,0,s_FR8012HAQ_blood_data_mxa_len);
+ }
+ s_FR8012HAQ_blood_data_len =0;
+
+ uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"bp\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"bp\"}"));
+ break;
+ case WEAR_MODE:
+ /* code */
+ uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"wear\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"wear\"}"));
+ break;
+ case HRV_MODE:
+ /* code */
+ uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"hrv\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"hrv\"}"));
+ break;
+ // case YYL_MODE:
+ // /* code */
+ // uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"yyl\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"yyl\"}"));
+ // break;
+ default:
+ break;
}
- s_FR8012HAQ_blood_data_len =0;
-
- uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"bp\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"bp\"}"));
- break;
- case WEAR_MODE:
- /* code */
- uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"wear\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"wear\"}"));
- break;
- case HRV_MODE:
- /* code */
- uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"hrv\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"hrv\"}"));
- break;
- // case YYL_MODE:
- // /* code */
- // uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"yyl\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"yyl\"}"));
- // break;
- default:
- break;
}
- }
+ if(fr8012haq_parse_returned_data() == 1)//必须解析到执行成功
+ break;
+
+ }
+
fr8012haq_timer_cfg(true);
FR8012HAQ_LOG("FR8012HAQ_test2:%d!!!!\n\n",mode);
Timer0_Switch(0);
}
-//解析数据
-void fr8012haq_analysis_data(char *data,unsigned int len)
+//读取并解析返回数据
+#define UART4_BUF_LEN 2*1024
+
+int fr8012haq_parse_returned_data(void)
{
+ static char *UART4_buf = NULL;
char *tem_data = NULL;
char num_buf[20] = {0};
unsigned char num_buf_len = 0;
- int i = 0;
- /*心率*/
- tem_data = strstr(data,"\"hrs_data\":\"");
- if(tem_data)
- {
-
- unsigned char hrs = 0;
- tem_data += strlen("\"hrs_data\":\"");
- num_buf_len = find_c(tem_data,'\"');
- if(num_buf_len>=sizeof(num_buf))
- num_buf_len = sizeof(num_buf)-1;
- memcpy(num_buf,tem_data,num_buf_len);
- hrs = atoi(num_buf);
- FR8012HAQ_result_set_heart_rate(hrs);
- }
- /*血氧*/
- tem_data = strstr(data,"\"spo2_data\":\"");
- if(tem_data)
- {
-
- unsigned char spo2 = 0;
- tem_data += strlen("\"spo2_data\":\"");
- num_buf_len = find_c(tem_data,'\"');
- if(num_buf_len>=sizeof(num_buf))
- num_buf_len = sizeof(num_buf)-1;
- memcpy(num_buf,tem_data,num_buf_len);
- spo2 = atoi(num_buf);
- FR8012HAQ_result_set_blood_oxygen(spo2);
- }
- /*血压*/
- tem_data = strstr(data,"\"bp_data\":\"");
- if(tem_data)
+ int i = 0,ret = -1;
+ unsigned int len;
+ if(NULL == UART4_buf)
+ UART4_buf = malloc(UART4_BUF_LEN);
+ if(UART4_buf == NULL)
+ return -1;
+ memset(UART4_buf,0,UART4_BUF_LEN);
+ len =uart4_recv_data(UART4_buf,UART4_BUF_LEN,60);
+ FR8012HAQ_LOG("fr8012haq_parse_returned_data:len:%d!!!!\n",len);
+ if(len)
{
- tem_data += strlen("\"bp_data\":\"");
- num_buf_len = find_c(tem_data,'\"');
- for(i=0;i<num_buf_len;i+=6)
+ FR8012HAQ_LOG("UART4:len:%d str:%s",len,UART4_buf);
+ FR8012HAQ_LOG("%s\n", (char *)UART4_buf+110);
+
+ /*心率*/
+ tem_data = strstr(UART4_buf,"\"hrs_data\":\"");
+ if(tem_data)
{
- memcpy(num_buf,&tem_data[i],6);
- num_buf[6] = 0;
- //FR8012HAQ_LOG("num_buf:0x%s\n",num_buf);
- if(s_FR8012HAQ_blood_data && s_FR8012HAQ_blood_data_len < s_FR8012HAQ_blood_data_mxa_len/4)
+ unsigned char hrs = 0;
+ tem_data += strlen("\"hrs_data\":\"");
+ num_buf_len = find_c(tem_data,'\"');
+ if(num_buf_len>=sizeof(num_buf))
+ num_buf_len = sizeof(num_buf)-1;
+ memcpy(num_buf,tem_data,num_buf_len);
+ hrs = atoi(num_buf);
+ FR8012HAQ_result_set_heart_rate(hrs);
+ ret = 2;
+ }
+ /*血氧*/
+ tem_data = strstr(UART4_buf,"\"spo2_data\":\"");
+ if(tem_data)
+ {
+ unsigned char spo2 = 0;
+ tem_data += strlen("\"spo2_data\":\"");
+ num_buf_len = find_c(tem_data,'\"');
+ if(num_buf_len>=sizeof(num_buf))
+ num_buf_len = sizeof(num_buf)-1;
+ memcpy(num_buf,tem_data,num_buf_len);
+ spo2 = atoi(num_buf);
+ FR8012HAQ_result_set_blood_oxygen(spo2);
+ ret = 2;
+ }
+ /*血压*/
+ tem_data = strstr(UART4_buf,"\"bp_data\":\"");
+ if(tem_data)
+ {
+ tem_data += strlen("\"bp_data\":\"");
+ num_buf_len = find_c(tem_data,'\"');
+ for(i=0;i<num_buf_len;i+=6)
{
- s_FR8012HAQ_blood_data[s_FR8012HAQ_blood_data_len] = strtol(num_buf, NULL, 16);
- //FR8012HAQ_LOG("s_FR8012HAQ_blood_data[%d]:%x\n",s_FR8012HAQ_blood_data_len,s_FR8012HAQ_blood_data[s_FR8012HAQ_blood_data_len]);
- s_FR8012HAQ_blood_data_len++;
- }
-
-
+ memcpy(num_buf,&tem_data[i],6);
+ num_buf[6] = 0;
+ //FR8012HAQ_LOG("num_buf:0x%s\n",num_buf);
+ if(s_FR8012HAQ_blood_data && s_FR8012HAQ_blood_data_len < s_FR8012HAQ_blood_data_mxa_len/4)
+ {
+ s_FR8012HAQ_blood_data[s_FR8012HAQ_blood_data_len] = strtol(num_buf, NULL, 16);
+ //FR8012HAQ_LOG("s_FR8012HAQ_blood_data[%d]:%x\n",s_FR8012HAQ_blood_data_len,s_FR8012HAQ_blood_data[s_FR8012HAQ_blood_data_len]);
+ s_FR8012HAQ_blood_data_len++;
+ }
+ }
+ ret = 2;
}
-
-
- }
- /*体温*/
- tem_data = strstr(data,"\"temper_data\":\"");
- if(tem_data)
- {
-
- //unsigned char hrs = 0;
- tem_data += strlen("\"temper_data\":\"");
- num_buf_len = find_c(tem_data,'\"');
- if(num_buf_len>=sizeof(num_buf))
- num_buf_len = sizeof(num_buf)-1;
- memcpy(num_buf,tem_data,num_buf_len);
- temp = atof(num_buf);
- }
- /*佩戴*/
- tem_data = strstr(data,"\"wear_data\":\"");
- if(tem_data)
- {
-
- //unsigned char hrs = 0;
- tem_data += strlen("\"wear_data\":\"");
- if(*tem_data == '0')
+ /*体温*/
+ tem_data = strstr(UART4_buf,"\"temper_data\":\"");
+ if(tem_data)
{
- FR8012HAQ_result_set_wear_status(0);
- }else
+
+ //unsigned char hrs = 0;
+ tem_data += strlen("\"temper_data\":\"");
+ num_buf_len = find_c(tem_data,'\"');
+ if(num_buf_len>=sizeof(num_buf))
+ num_buf_len = sizeof(num_buf)-1;
+ memcpy(num_buf,tem_data,num_buf_len);
+ temp = atof(num_buf);
+ ret = 2;
+ }
+ /*佩戴*/
+ tem_data = strstr(UART4_buf,"\"wear_data\":\"");
+ if(tem_data)
+ {
+ //unsigned char hrs = 0;
+ tem_data += strlen("\"wear_data\":\"");
+ if(*tem_data == '0')
+ {
+ FR8012HAQ_result_set_wear_status(0);
+ }else
+ {
+ FR8012HAQ_result_set_wear_status(1);
+ }
+ ret = 2;
+ }
+ /*********************************************/
+ /*执行工作模式成功*/
+ tem_data = strstr(UART4_buf,"\"cmd\":\"1\",\"work_mode\":\"1\"");
+ if(tem_data)
{
- FR8012HAQ_result_set_wear_status(1);
+ ret = 1;
}
}
+
+ if(UART4_buf!= NULL)
+ {
+ free(UART4_buf);
+ UART4_buf = NULL;
+ }
+ return ret ;
}
-#define UART4_BUF_LEN 2*1024
+
void fr8012haq_process_data(uint32_t *process_data)
{
- // char data[500] = {0};
- unsigned int len = 0;
+
Timer0_Switch(1);
- void *data = malloc(UART4_BUF_LEN);
- if(data == NULL)
- return;
- memset(data,0,UART4_BUF_LEN);
+
FR8012HAQ_LOG("fr8012haq_process_data:%d!!!!\n\n",FR8012HAQ_jobs_mode);
switch (FR8012HAQ_jobs_mode)
{
default:
break;
}
- FR8012HAQ_LOG("fr8012haq_process_data2:%d!!!!\n\n",FR8012HAQ_jobs_mode);
- len =uart4_recv_data(data,UART4_BUF_LEN,60);
- if(len)
- {
- FR8012HAQ_LOG("UART4:len:%d str:%s",len,data);
- //char *data_tmp = (char *)data+128;
- FR8012HAQ_LOG("%s\n", (char *)data+110);
- fr8012haq_analysis_data(data,len);
- //UOS_SleepMs(100);
- }
-
- free(data);
+ FR8012HAQ_LOG("fr8012haq_process_data2:%d!!!!\n",FR8012HAQ_jobs_mode);
+
+ fr8012haq_parse_returned_data();
+
}
void hal_fr8012haq_int_init(void)
{
sys_pm_wakeup_no_lcd();
- FR8012HAQ_run_mode = BP_MODE;
+ FR8012HAQ_run_mode = HRS_MODE;
FR8012HAQ_LOG("fr8012haq_measure_hr_start :FR8012HAQ_run_mode:%d!!!!!!!!\n",FR8012HAQ_run_mode);
sensor_task_send_message(FR8012HAQ_ID,SENSOR_MSG_START);
}