血压模组死机问题处理
authorp15692025051 <846603105@qq.com>
Fri, 29 Dec 2023 02:58:01 +0000 (10:58 +0800)
committerp15692025051 <846603105@qq.com>
Fri, 29 Dec 2023 02:58:01 +0000 (10:58 +0800)
2.sdk/sdk/gui/lv_drivers/indev/FR8012HAQ/fr8012haq.c

index 0983b79..fe32e01 100644 (file)
@@ -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<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)
     {
@@ -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);
 }