血压模组添加工厂模式
authorp15692025051 <846603105@qq.com>
Tue, 27 Feb 2024 03:10:54 +0000 (11:10 +0800)
committerp15692025051 <846603105@qq.com>
Tue, 27 Feb 2024 03:10:54 +0000 (11:10 +0800)
2.sdk/sdk/gui/lv_drivers/indev/FR8012HAQ/fr8012haq.c
2.sdk/sdk/gui/lv_drivers/indev/FR8012HAQ/fr8012haq.h

index 9085334..9bafda2 100644 (file)
@@ -28,6 +28,8 @@ unsigned char HA_key_code[128+1] = {0};
 unsigned char HA_req_code[128+1] = {0};
 char fr8012haq_agc_timerout_flag = 0;
 static void * fr8012haq_agc_timer = NULL;
+int factory_apre_val[2];
+int factory_aps_val;
 /************************simware add start***********************************/
 /************************simware add start***********************************/
 static  uint32_t fr8012haq_mfp_cfgs[] = {
@@ -130,8 +132,9 @@ static void fr8012haq_en_gpio_enable(bool param)
         gpio_set_value(GPIO18, GPIO_HIGH);
         gpio_set_value(GPIO81, GPIO_HIGH);
         gpio_set_value(GPIO84, GPIO_LOW);
-        gpio_set_value(GPIO16, GPIO_HIGH);
-        //gpio_set_value(GPIO7, GPIO_LOW);
+        gpio_set_value(GPIO16, GPIO_HIGH);//vbat ldo
+        //gpio_set_value(GPIO16, GPIO_LOW);
+
         // while(1)
         // {
         //     UOS_SleepMs(1000);
@@ -139,6 +142,7 @@ static void fr8012haq_en_gpio_enable(bool param)
         //     FR8012HAQ_LOG("fr8012haq_en_gpio_enable2!!!!\n\n");
         // }
     } else {
+        gpio_set_value(GPIO16, GPIO_LOW);
         gpio_set_value(GPIO18, GPIO_LOW);
         gpio_set_value(GPIO81, GPIO_LOW);
         //gpio_set_value(GPIO7, GPIO_LOW);
@@ -399,8 +403,8 @@ void fr8012haq_timer_cfg(bool en)
         }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_run_mode == YYL_MODE)//中医30秒
+            uos_timer_start(fr8012haq_timer, MS_TO_TICKS(1000), MS_TO_TICKS(1000), fr8012haq_timerout_cb, NULL);
+        }else if(FR8012HAQ_run_mode == YYL_MODE)//中医10秒
         {
             uos_timer_start(fr8012haq_timer, MS_TO_TICKS(10000), MS_TO_TICKS(10000), fr8012haq_timerout_cb, NULL);
         }else//其他1秒
@@ -452,57 +456,60 @@ void FR8012HAQ_test(uint32_t mode)
             
             switch (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)
-                {
-                    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;    
+                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 EMO_MODE:
-                /* code */
-                if(s_FR8012HAQ_emo_data ==NULL)
-                {
-                    s_FR8012HAQ_emo_data = malloc(s_FR8012HAQ_emo_data_mxa_len);
-                    memset(s_FR8012HAQ_emo_data,0,s_FR8012HAQ_emo_data_mxa_len);
-                }
-                s_FR8012HAQ_emo_data_len =0;    
+                    uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"bp\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"bp\"}"));
+                    break;
+                case EMO_MODE:
+                    /* code */
+                    if(s_FR8012HAQ_emo_data ==NULL)
+                    {
+                        s_FR8012HAQ_emo_data = malloc(s_FR8012HAQ_emo_data_mxa_len);
+                        memset(s_FR8012HAQ_emo_data,0,s_FR8012HAQ_emo_data_mxa_len);
+                    }
+                    s_FR8012HAQ_emo_data_len =0;    
 
-                uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"emo\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"emo\"}"));
-                break;
-             case TEMP_MODE:
-                /* code */
-  
+                    uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"emo\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"emo\"}"));
+                    break;
+                case FACTORY_MODE:
+                    uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"factory\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"factory\"}"));
+                    break;
+                case TEMP_MODE:
+                    /* code */
+    
 
-                uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"temp\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"temp\"}"));
-                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;
+                    uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"temp\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"temp\"}"));
+                    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(100) == 1)//必须解析到执行成功
@@ -567,20 +574,24 @@ static void fr8012haq_stop(void)
 //读取并解析返回数据
 #define DATA_HANDLE (1<<24)
 #define UART4_BUF_LEN 4*1024
-
+#define my_str_print_on 1
 void my_str_print(char *data,int len)
 {
+#if my_str_print_on
     for(int i = 0;i<len;i++)
         FR8012HAQ_LOG("%c",data[i]);
+#endif
 }
 int fr8012haq_parse_returned_data(int timeout)
 {
     static char *UART4_buf = NULL;
     char *str_tmp = NULL;
+    char *cmd_str_tmp = NULL;
     char num_buf[20] = {0};
     unsigned int num_buf_len = 0;
     int i = 0,ret = -1;
     unsigned int len;
+    unsigned char count = 0 ;
     if(NULL == UART4_buf)
         UART4_buf = malloc(UART4_BUF_LEN);
     if(UART4_buf == NULL)
@@ -591,216 +602,263 @@ int fr8012haq_parse_returned_data(int timeout)
     {
         // FR8012HAQ_LOG("UART4:len:%d str:%s",len,UART4_buf);
         // FR8012HAQ_LOG("%s\n", (char *)UART4_buf+110);
+        
         int print_len_tmp = len ;
         FR8012HAQ_LOG("UART4:len:%d ",len);
         my_str_print(UART4_buf,len);//打印
         FR8012HAQ_LOG("\n\n");
-
-        if(strstr(UART4_buf,"\"cmd\":\"2\""))
+        cmd_str_tmp = UART4_buf;
+        while(1)
         {
-            ret = 2;
-            /*心率*/
-            str_tmp = strstr(UART4_buf,"\"hrs_data\":\"");
-            if(str_tmp)
-            {
-                unsigned char hrs = 0;
-                str_tmp += strlen("\"hrs_data\":\"");
-                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);
-                hrs = atoi(num_buf);
-                FR8012HAQ_result_set_heart_rate(hrs);
-            }
-            /*血氧*/
-            str_tmp = strstr(UART4_buf,"\"spo2_data\":\"");
-            if(str_tmp)
-            {  
-                unsigned char spo2 = 0;
-                str_tmp += strlen("\"spo2_data\":\"");
-                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);
-                spo2 = atoi(num_buf);
-                FR8012HAQ_result_set_blood_oxygen(spo2);
-            }
-            /*血压*/
-            str_tmp = strstr(UART4_buf,"\"bp_data\":\"");
-            if(str_tmp)
+            count++;
+            if(count >30)
+                break;
+            cmd_str_tmp = strstr(cmd_str_tmp,"{\"");
+            if(cmd_str_tmp)
             {
-                str_tmp += strlen("\"bp_data\":\"");
-                num_buf_len = find_c(str_tmp,'\"');
-                FR8012HAQ_LOG("bp:hex_str:%s\n",str_tmp);
-                FR8012HAQ_LOG("bp:int:");
-                for(i=0;i<num_buf_len;i+=6)
+                if(strstr(cmd_str_tmp,"\"cmd\":\"2\""))
                 {
-                    memset(num_buf,0,sizeof(num_buf));
-                    memcpy(num_buf,&str_tmp[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)
+                    ret = 2;
+                    /*心率*/
+                    str_tmp = strstr(cmd_str_tmp,"\"hrs_data\":\"");
+                    if(str_tmp)
+                    {
+                        unsigned char hrs = 0;
+                        str_tmp += strlen("\"hrs_data\":\"");
+                        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);
+                        hrs = atoi(num_buf);
+                        FR8012HAQ_result_set_heart_rate(hrs);
+                    }
+                    /*血氧*/
+                    str_tmp = strstr(cmd_str_tmp,"\"spo2_data\":\"");
+                    if(str_tmp)
+                    {  
+                        unsigned char spo2 = 0;
+                        str_tmp += strlen("\"spo2_data\":\"");
+                        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);
+                        spo2 = atoi(num_buf);
+                        FR8012HAQ_result_set_blood_oxygen(spo2);
+                    }
+                    /*工厂模式*/
+                    str_tmp = strstr(cmd_str_tmp,"\"factory_data\":\"");
+                    if(str_tmp)
+                    {  
+                        str_tmp += strlen("\"factory_data\":\"");
+                        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);
+                        factory_apre_val[0] = atoi(num_buf);
+
+                        str_tmp += num_buf_len+1;
+                        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);
+                        factory_apre_val[1] = atoi(num_buf);
+                        
+                        str_tmp += num_buf_len+1;
+                        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);
+                        factory_aps_val = atoi(num_buf);
+                    }
+                    /*血压*/
+                    str_tmp = strstr(cmd_str_tmp,"\"bp_data\":\"");
+                    if(str_tmp)
+                    {
+                        //FR8012HAQ_LOG("bp:str_tmp:%s\n",str_tmp);
+                        str_tmp += strlen("\"bp_data\":\"");
+                        num_buf_len = find_c(str_tmp,'\"');
+                        printf("bp:hex_str:%s\n",str_tmp);
+                        FR8012HAQ_LOG("bp:int:");
+                        for(i=0;i<num_buf_len;i+=6)
+                        {
+                            memset(num_buf,0,sizeof(num_buf));
+                            memcpy(num_buf,&str_tmp[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);
+                                if(s_FR8012HAQ_blood_data[s_FR8012HAQ_blood_data_len]>=DATA_HANDLE/2)
+                                {
+                                    s_FR8012HAQ_blood_data[s_FR8012HAQ_blood_data_len]-=DATA_HANDLE;
+                                }
+                                FR8012HAQ_LOG("%d ",s_FR8012HAQ_blood_data[s_FR8012HAQ_blood_data_len]);
+                                //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++;
+                            }
+                        }  
+                        FR8012HAQ_LOG("\n");
+                        printf("fr8012haq_parse_returned_data:bp_data:%d\n",s_FR8012HAQ_blood_data_len);
+                    }
+                    /*情绪*/
+                    str_tmp = strstr(cmd_str_tmp,"\"emo_data\":[");
+                    if(str_tmp)
                     {
-                        s_FR8012HAQ_blood_data[s_FR8012HAQ_blood_data_len] = strtol(num_buf, NULL, 16);
-                        if(s_FR8012HAQ_blood_data[s_FR8012HAQ_blood_data_len]>=DATA_HANDLE/2)
+                        str_tmp += strlen("\"emo_data\":[");
+                        char *emo_str_tmp = strstr(str_tmp,"]]");
+                        num_buf_len = emo_str_tmp+1-str_tmp;
+                        FR8012HAQ_LOG("emo_data:num_buf_len:%d\n",num_buf_len);
+                        if(s_FR8012HAQ_emo_data_len+num_buf_len+1 < s_FR8012HAQ_emo_data_mxa_len)
                         {
-                            s_FR8012HAQ_blood_data[s_FR8012HAQ_blood_data_len]-=DATA_HANDLE;
+                            if(s_FR8012HAQ_emo_data_len != 0)//加逗号
+                            {
+                                s_FR8012HAQ_emo_data[s_FR8012HAQ_emo_data_len] = ',';
+                                s_FR8012HAQ_emo_data_len++;
+                            }
+                            memcpy(&s_FR8012HAQ_emo_data[s_FR8012HAQ_emo_data_len],str_tmp,num_buf_len);
+                            FR8012HAQ_LOG("emo_data one:%s\n",&s_FR8012HAQ_emo_data[s_FR8012HAQ_emo_data_len]);
+                            s_FR8012HAQ_emo_data_len+=num_buf_len;
                         }
-                        FR8012HAQ_LOG("%d ",s_FR8012HAQ_blood_data[s_FR8012HAQ_blood_data_len]);
-                        //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++;
+
+                        FR8012HAQ_LOG("emo_data!!!:%s",s_FR8012HAQ_emo_data);
+                        FR8012HAQ_LOG("%s",(char *)s_FR8012HAQ_emo_data+255-12);
+                        FR8012HAQ_LOG("%s",s_FR8012HAQ_emo_data+255+255-12);
+                        FR8012HAQ_LOG("\n");
+                        FR8012HAQ_LOG("emo_data:len:%d\n",s_FR8012HAQ_emo_data_len);
+                        
                     }
-                }  
-                FR8012HAQ_LOG("\n");
-            }
-            /*情绪*/
-            str_tmp = strstr(UART4_buf,"\"emo_data\":[");
-            if(str_tmp)
-            {
-                str_tmp += strlen("\"emo_data\":[");
-                char *emo_str_tmp = strstr(str_tmp,"]]");
-                num_buf_len = emo_str_tmp+1-str_tmp;
-                FR8012HAQ_LOG("emo_data:num_buf_len:%d\n",num_buf_len);
-                if(s_FR8012HAQ_emo_data_len+num_buf_len+1 < s_FR8012HAQ_emo_data_mxa_len)
-                {
-                    if(s_FR8012HAQ_emo_data_len != 0)//加逗号
+                    /*体温*/
+                    str_tmp = strstr(cmd_str_tmp,"\"temp_data\":\"");
+                    if(str_tmp)
                     {
-                        s_FR8012HAQ_emo_data[s_FR8012HAQ_emo_data_len] = ',';
-                        s_FR8012HAQ_emo_data_len++;
+                        
+                        //unsigned char hrs = 0;
+                        str_tmp += strlen("\"temp_data\":\"");
+                        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);
+                        temp = atof(num_buf);
+                        //FR8012HAQ_LOG("temp:str_tmp:%s\n",str_tmp); 
+                        FR8012HAQ_LOG("temp:%f\n",temp);
                     }
-                    memcpy(&s_FR8012HAQ_emo_data[s_FR8012HAQ_emo_data_len],str_tmp,num_buf_len);
-                    FR8012HAQ_LOG("emo_data one:%s\n",&s_FR8012HAQ_emo_data[s_FR8012HAQ_emo_data_len]);
-                    s_FR8012HAQ_emo_data_len+=num_buf_len;
-                }
+                    /*佩戴*/
+                    str_tmp = strstr(cmd_str_tmp,"\"wear_data\":\"");
+                    if(str_tmp)
+                    {    
+                        //unsigned char hrs = 0;
+                        str_tmp += strlen("\"wear_data\":\"");
+                        if(*str_tmp == '0')
+                        {
+                            FR8012HAQ_result_set_wear_status(0);
+                        }else
+                        {
+                            FR8012HAQ_result_set_wear_status(1);
+                        }
+                    }
+                    /*恒爱算法库是否激活*/
+                    str_tmp = strstr(cmd_str_tmp,"\"is_HA_activate\":\"");
+                    if(str_tmp)
+                    {    
+                        //unsigned char hrs = 0;
+                        str_tmp += strlen("\"is_HA_activate\":\"");
+                        if(*str_tmp == '1')
+                            is_HA_activate = 1;
+                        else
+                            is_HA_activate = 0;
+                    }
+                    /*恒爱算法库请求码返回*/
+                    str_tmp = strstr(cmd_str_tmp,"\"HA_req_code\":\"");
+                    if(str_tmp)
+                    {    
+                        //unsigned char hrs = 0;
+                        memset(HA_req_code,0,sizeof(HA_req_code));
+                        str_tmp += strlen("\"HA_req_code\":\"");
+                        num_buf_len = find_c(str_tmp,'\"');
+                        if(num_buf_len >= sizeof(HA_req_code))
+                        {
+                            num_buf_len = sizeof(HA_req_code)-1;
+                        }
+                        memcpy(HA_req_code,str_tmp,num_buf_len);
+                    }
+                    /*中医数据*/
+                    str_tmp = strstr(cmd_str_tmp,"\"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\":\"");
+                        FR8012HAQ_LOG("yyl_data1:!!!\n");
+                        unsigned int yyl_data_len = 0;
+                        yyl_data_len = find_c(str_tmp,'\"');
+                        FR8012HAQ_LOG("yyl_data1.0.0:!!!\n");
+                        if(s_FR8012HAQ_yyl_data!= NULL && s_FR8012HAQ_yyl_data_len ==0)//统一线程释放,避免上层应用释放导致dump
+                        {
+                            FR8012HAQ_LOG("yyl_data1.0:!!!\n");
+                            free(s_FR8012HAQ_yyl_data);
+                            s_FR8012HAQ_yyl_data = NULL;
+                        }
+                        
+                        if(s_FR8012HAQ_yyl_data == NULL)//第一次用
+                        {
+                            FR8012HAQ_LOG("yyl_data1.1:!!!\n");
+                            s_FR8012HAQ_yyl_data = malloc(yyl_data_len);
+                            s_FR8012HAQ_yyl_data_len = 0;
 
-                FR8012HAQ_LOG("emo_data!!!:%s",s_FR8012HAQ_emo_data);
-                FR8012HAQ_LOG("%s",(char *)s_FR8012HAQ_emo_data+255-12);
-                FR8012HAQ_LOG("%s",s_FR8012HAQ_emo_data+255+255-12);
-                FR8012HAQ_LOG("\n");
-                FR8012HAQ_LOG("emo_data:len:%d\n",s_FR8012HAQ_emo_data_len);
-                
-            }
-            /*体温*/
-            str_tmp = strstr(UART4_buf,"\"temp_data\":\"");
-            if(str_tmp)
-            {
-                
-                //unsigned char hrs = 0;
-                str_tmp += strlen("\"temp_data\":\"");
-                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);
-                temp = atof(num_buf);
-                //FR8012HAQ_LOG("temp:str_tmp:%s\n",str_tmp); 
-                FR8012HAQ_LOG("temp:%f\n",temp);
-            }
-            /*佩戴*/
-            str_tmp = strstr(UART4_buf,"\"wear_data\":\"");
-            if(str_tmp)
-            {    
-                //unsigned char hrs = 0;
-                str_tmp += strlen("\"wear_data\":\"");
-                if(*str_tmp == '0')
-                {
-                    FR8012HAQ_result_set_wear_status(0);
-                }else
-                {
-                    FR8012HAQ_result_set_wear_status(1);
-                }
-            }
-            /*恒爱算法库是否激活*/
-            str_tmp = strstr(UART4_buf,"\"is_HA_activate\":\"");
-            if(str_tmp)
-            {    
-                //unsigned char hrs = 0;
-                str_tmp += strlen("\"is_HA_activate\":\"");
-                if(*str_tmp == '1')
-                    is_HA_activate = 1;
-                else
-                    is_HA_activate = 0;
-            }
-            /*恒爱算法库请求码返回*/
-            str_tmp = strstr(UART4_buf,"\"HA_req_code\":\"");
-            if(str_tmp)
-            {    
-                //unsigned char hrs = 0;
-                memset(HA_req_code,0,sizeof(HA_req_code));
-                str_tmp += strlen("\"HA_req_code\":\"");
-                num_buf_len = find_c(str_tmp,'\"');
-                if(num_buf_len >= sizeof(HA_req_code))
-                {
-                    num_buf_len = sizeof(HA_req_code)-1;
-                }
-                memcpy(HA_req_code,str_tmp,num_buf_len);
-            }
-            /*中医数据*/
-            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\":\"");
-                FR8012HAQ_LOG("yyl_data1:!!!\n");
-                unsigned int yyl_data_len = 0;
-                yyl_data_len = find_c(str_tmp,'\"');
-                FR8012HAQ_LOG("yyl_data1.0.0:!!!\n");
-                if(s_FR8012HAQ_yyl_data!= NULL && s_FR8012HAQ_yyl_data_len ==0)//统一线程释放,避免上层应用释放导致dump
-                {
-                    FR8012HAQ_LOG("yyl_data1.0:!!!\n");
-                    free(s_FR8012HAQ_yyl_data);
-                    s_FR8012HAQ_yyl_data = NULL;
-                }
-                
-                if(s_FR8012HAQ_yyl_data == NULL)//第一次用
-                {
-                    FR8012HAQ_LOG("yyl_data1.1:!!!\n");
-                    s_FR8012HAQ_yyl_data = malloc(yyl_data_len);
-                    s_FR8012HAQ_yyl_data_len = 0;
+                        }else
+                        {
+                            FR8012HAQ_LOG("yyl_data1.3:!!!\n");
+                            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;
 
-                }else
-                {
-                    FR8012HAQ_LOG("yyl_data1.3:!!!\n");
-                    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(s_FR8012HAQ_yyl_data)//复制数据
+                        {
+                            FR8012HAQ_LOG("yyl_data1.4:!!!\n");
+                            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_data2:len:%d\n",s_FR8012HAQ_yyl_data_len);
+                        FR8012HAQ_LOG("yyl_data2:len:%d\n",s_FR8012HAQ_yyl_data_len);
+                        FR8012HAQ_LOG("yyl_data3:");
+                        my_str_print(s_FR8012HAQ_yyl_data,s_FR8012HAQ_yyl_data_len);//打印
+                        FR8012HAQ_LOG("\n\n");
+                        
+                    }
+                }
 
+                if(strstr(cmd_str_tmp,"\"cmd\":\"3\""))
+                {  
+                    ret = 3;
+                    if(strstr(cmd_str_tmp,"\"HA_activate\":\"1\""))
+                    {
+                        ret = 3;
+                    }
+                    if(strstr(cmd_str_tmp,"\"HA_activate\":\"0\""))
+                    {
+                        ret = -3;
+                    }
                 }
-                if(s_FR8012HAQ_yyl_data)//复制数据
+                /*********************************************/
+                /*执行工作模式成功*/
+                str_tmp = strstr(cmd_str_tmp,"\"cmd\":\"1\",\"work_mode\":\"1\"");
+                if(str_tmp)
                 {
-                    FR8012HAQ_LOG("yyl_data1.4:!!!\n");
-                    memcpy(&s_FR8012HAQ_yyl_data[s_FR8012HAQ_yyl_data_len],str_tmp,yyl_data_len);
-                    s_FR8012HAQ_yyl_data_len+=yyl_data_len;
-                    
+                    ret = 1;
                 }
-                FR8012HAQ_LOG("yyl_data2:len:%d\n",s_FR8012HAQ_yyl_data_len);
-                FR8012HAQ_LOG("yyl_data3:");
-                my_str_print(s_FR8012HAQ_yyl_data,s_FR8012HAQ_yyl_data_len);//打印
-                FR8012HAQ_LOG("\n\n");
-                
-            }
-        }
-        if(strstr(UART4_buf,"\"cmd\":\"3\""))
-        {  
-            ret = 3;
-            if(strstr(UART4_buf,"\"HA_activate\":\"1\""))
-            {
-                ret = 3;
-            }
-            if(strstr(UART4_buf,"\"HA_activate\":\"0\""))
+            }else
             {
-                ret = -3;
+                break;
             }
-        }
-        /*********************************************/
-        /*执行工作模式成功*/
-        str_tmp = strstr(UART4_buf,"\"cmd\":\"1\",\"work_mode\":\"1\"");
-        if(str_tmp)
-        {
-            ret = 1;
+            cmd_str_tmp += strlen("{\"");
         }
     }
     
@@ -856,7 +914,7 @@ void fr8012haq_process_data(uint32_t *process_data)
     // float tmp = 0x3FE2E147;
     // FR8012HAQ_LOG("float:%f\n",tmp);
     fr8012haq_parse_returned_data(60);
-   
+    uart4_send_data("{\"cmd\":\"0\"}",sizeof("{\"cmd\":\"0\"}"));//保活用
 }
 //返回是否激活返回0未激活,联网后判断一次是否激活,没激活需要执行激活参数
 char get_is_HA_activate(void)
@@ -1027,6 +1085,13 @@ void fr8012haq_measure_YYL_start(void)
     FR8012HAQ_LOG("fr8012haq_measure_YYL_start :FR8012HAQ_run_mode:%d!!!!!!!!\n",FR8012HAQ_run_mode);
     sensor_task_send_message(FR8012HAQ_ID,SENSOR_MSG_START);
 }
+void fr8012haq_measure_factory_start(void)
+{
+    sys_pm_wakeup_no_lcd();
+    FR8012HAQ_run_mode = FACTORY_MODE;
+    FR8012HAQ_LOG("fr8012haq_measure_factory_start :FR8012HAQ_run_mode:%d!!!!!!!!\n",FR8012HAQ_run_mode);
+    sensor_task_send_message(FR8012HAQ_ID,SENSOR_MSG_START);
+}
 void fr8012haq_measure_temp_start(void)
 {
     sys_pm_wakeup_no_lcd();
@@ -1134,11 +1199,22 @@ void fr8012haq_hr_bp_bo_value_get(uint16_t *hr, uint16_t *bp_high, uint16_t *bp_
     if(bo != NULL)
         *bo = s_FR8012HAQ_blood_oxygen;
 }
+//获取工厂模式数据,
+void fr8012haq_factory_data_get(int *apre_val0,int *apre_val1,int *aps_val)
+{
+    *apre_val0 = factory_apre_val[0];
+    *apre_val1 = factory_apre_val[1];
+    *aps_val = factory_aps_val;
+
+    FR8012HAQ_LOG("fr8012haq_factory_data_get apre_val0:%d,apre_val1%d,aps_cal:%d\n",*apre_val0,*apre_val1,*aps_val);
+       return s_FR8012HAQ_yyl_data;
+}
 //获取1分钟血压数据,总共81*60个int数组,返回数据数组,len:长度返回,当长度等于81*60时表示存够数据
 int  *fr8012haq_blood_data_get(int *len)
 { 
     //memcpy(blood_buf,s_FR8012HAQ_blood_data,sizeof(s_FR8012HAQ_blood_data));
     *len = s_FR8012HAQ_blood_data_len;
+    printf("fr8012haq_parse_returned_data:bp_data:%d",s_FR8012HAQ_blood_data_len);
     return s_FR8012HAQ_blood_data;
 }
 //获取1分钟情绪数据,返回数据数组,已封装好string,可当参数返回给服务器,len:长度返回
index c890ee6..5619e56 100644 (file)
@@ -34,6 +34,7 @@ typedef enum {
        WEAR_MODE,
        HRV_MODE,
        YYL_MODE,
+       FACTORY_MODE,
        LIVING_MODE,
        LAB_TEST_MODE,
        FT_LEAK_LIGHT_MODE,