From: p15692025051 <846603105@qq.com> Date: Fri, 29 Dec 2023 02:58:01 +0000 (+0800) Subject: 血压模组死机问题处理 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=2b68fe2a0d7e068348ebb60863d1b8cdf5cd3b23;p=mirrors%2FASR3603_Z5.git 血压模组死机问题处理 --- diff --git a/2.sdk/sdk/gui/lv_drivers/indev/FR8012HAQ/fr8012haq.c b/2.sdk/sdk/gui/lv_drivers/indev/FR8012HAQ/fr8012haq.c index 0983b79f..fe32e01d 100644 --- a/2.sdk/sdk/gui/lv_drivers/indev/FR8012HAQ/fr8012haq.c +++ b/2.sdk/sdk/gui/lv_drivers/indev/FR8012HAQ/fr8012haq.c @@ -65,6 +65,7 @@ char is_open_sar = 1;//是否打开sar检测 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) { @@ -171,7 +172,7 @@ void fr8012haq_http_post_json_cb(unsigned int p) 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; @@ -193,6 +194,22 @@ int fr8012haq_http_post_json(char *url,char *post_data,char *read_buf,unsigned i 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){ @@ -261,7 +278,7 @@ static void fr8012haq_task_callback(VOID * argv) 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(); @@ -409,46 +426,54 @@ void FR8012HAQ_test(uint32_t mode) //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); @@ -499,103 +524,128 @@ static void fr8012haq_stop(void) 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=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=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) { @@ -626,18 +676,10 @@ void fr8012haq_process_data(uint32_t *process_data) 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) { @@ -701,7 +743,7 @@ void fr8012haq_measure_hr_start(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); }