血压更新
authorp15692025051 <846603105@qq.com>
Wed, 17 Jan 2024 10:47:56 +0000 (18:47 +0800)
committerp15692025051 <846603105@qq.com>
Wed, 17 Jan 2024 10:47:56 +0000 (18:47 +0800)
2.sdk/sdk/gui/lv_drivers/indev/FR8012HAQ/fr8012haq.c
2.sdk/sdk/gui/lv_drivers/indev/FR8012HAQ/fr8012haq.h

index eef0493..5ab8125 100644 (file)
@@ -384,15 +384,19 @@ void fr8012haq_timer_cfg(bool en)
         {
             
             uos_timer_start(fr8012haq_timer, MS_TO_TICKS(3000), MS_TO_TICKS(3000), fr8012haq_timerout_cb, NULL);
-            //Helios_Timer_Start(fr8012haq_timer, 3000, 1);
-            //Helios_Timer_Start(fr8012haq_timer, 320, 1);
-        }else
+        }else if(FR8012HAQ_jobs_mode == BP_MODE)//血压150MS
         {
             
             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秒
+        {
+            uos_timer_start(fr8012haq_timer, MS_TO_TICKS(50000), MS_TO_TICKS(50000), fr8012haq_timerout_cb, NULL);
+        }else//其他1秒
+        {
             
-            //Helios_Timer_Start(fr8012haq_timer, 320, 1);
+            uos_timer_start(fr8012haq_timer, MS_TO_TICKS(1000), MS_TO_TICKS(1000), fr8012haq_timerout_cb, NULL);
+        }
+
 
     }
     else
@@ -475,10 +479,10 @@ void FR8012HAQ_test(uint32_t 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;
+            case YYL_MODE:
+                /* code */
+                uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"yyl\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"yyl\"}"));
+                break;
             default:
                 break;
             }
@@ -531,8 +535,8 @@ static void fr8012haq_stop(void)
     //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_run_mode = NULL_MODE;
+    //FR8012HAQ_jobs_mode = NULL_MODE;
     fr8012haq_ppg_timerout_flag = 0;
     fr8012haq_agc_timerout_flag = 0;
     Timer0_Switch(0);
@@ -541,7 +545,9 @@ static void fr8012haq_stop(void)
 //读取并解析返回数据
 #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;
 int fr8012haq_parse_returned_data(int timeout)
 {
     static char *UART4_buf = NULL;
@@ -556,7 +562,6 @@ int fr8012haq_parse_returned_data(int timeout)
         return -1;
     memset(UART4_buf,0,UART4_BUF_LEN);
     len =uart4_recv_data(UART4_buf,UART4_BUF_LEN,timeout);//读串口数据
-    FR8012HAQ_LOG("fr8012haq_parse_returned_data:len:%d!!!!\n",len);
     if(len)
     {
         FR8012HAQ_LOG("UART4:len:%d str:%s",len,UART4_buf);
@@ -573,6 +578,7 @@ int fr8012haq_parse_returned_data(int timeout)
                 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);
@@ -586,6 +592,7 @@ int fr8012haq_parse_returned_data(int timeout)
                 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);
@@ -600,6 +607,7 @@ int fr8012haq_parse_returned_data(int timeout)
                 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);
@@ -627,6 +635,7 @@ int fr8012haq_parse_returned_data(int timeout)
                 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); 
             }
@@ -669,7 +678,97 @@ int fr8012haq_parse_returned_data(int timeout)
                 }
                 memcpy(HA_req_code,str_tmp,num_buf_len);
             }
-            
+            /*中医数据*/
+            str_tmp = strstr(UART4_buf,"\"yyl_data\":\"");
+            if(str_tmp)
+            {    
+                //unsigned char hrs = 0;
+                str_tmp += strlen("\"yyl_data\":\"");
+                //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);
+                yyl_out_data[yyl_out_data_len].timestamp = atof(num_buf); 
+                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);
+                yyl_out_data[yyl_out_data_len].areaUP = atof(num_buf); 
+                FR8012HAQ_LOG("yyl_out_data[areaUP]:%d\n",yyl_out_data[yyl_out_data_len].areaUP);
+                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);
+                yyl_out_data[yyl_out_data_len].areaUPBase = atof(num_buf); 
+                FR8012HAQ_LOG("yyl_out_data[areaUPBase]:%d\n",yyl_out_data[yyl_out_data_len].areaUPBase);
+                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);
+                yyl_out_data[yyl_out_data_len].areaUPHeight = atof(num_buf); 
+                FR8012HAQ_LOG("yyl_out_data[areaUPHeight]:%d\n",yyl_out_data[yyl_out_data_len].areaUPHeight);
+                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);
+                yyl_out_data[yyl_out_data_len].areaDOWN = atof(num_buf); 
+                FR8012HAQ_LOG("yyl_out_data[areaDOWN]:%d\n",yyl_out_data[yyl_out_data_len].areaDOWN);
+                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);
+                yyl_out_data[yyl_out_data_len].areaDOWNBase = atof(num_buf); 
+                FR8012HAQ_LOG("yyl_out_data[areaDOWNBase]:%d\n",yyl_out_data[yyl_out_data_len].areaDOWNBase);
+                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);
+                yyl_out_data[yyl_out_data_len].areaDOWNHeight = atof(num_buf); 
+                FR8012HAQ_LOG("yyl_out_data[areaDOWNHeight]:%d\n",yyl_out_data[yyl_out_data_len].areaDOWNHeight);
+                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);
+                yyl_out_data[yyl_out_data_len].RRI = atof(num_buf); 
+                FR8012HAQ_LOG("yyl_out_data[RRI]:%d\n",yyl_out_data[yyl_out_data_len].RRI);
+                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);
+                yyl_out_data[yyl_out_data_len].motion = atof(num_buf); 
+                FR8012HAQ_LOG("yyl_out_data[motion]:%d\n",yyl_out_data[yyl_out_data_len].motion);
+                str_tmp += num_buf_len+1;
+
+                if(yyl_out_data_len<YYL_OUT_DATA_SIZE-1)
+                    yyl_out_data_len++;
+            }
         }
         if(strstr(UART4_buf,"\"cmd\":\"3\""))
         {  
@@ -727,10 +826,10 @@ void fr8012haq_process_data(uint32_t *process_data)
             /* code */
             //uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"hrv\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"hrv\"}"));
             break;
-        // case YYL_MODE:
-        //     /* code */
-        //     uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"yyl\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"yyl\"}"));
-        //     break;
+        case YYL_MODE:
+            /* code */
+            //uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"yyl\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"yyl\"}"));
+            break;
         default:
             break;
     }
@@ -850,7 +949,9 @@ void Fr8012haq_Init(void)
     //     FR8012HAQ_LOG("Fr8012haq_Init5!!!!\n\n");
     // }
        //fr8012haq_init(WEAR_MODE);//打开佩戴检测
-    
+    // FR8012HAQ_run_mode = YYL_MODE;
+    // fr8012haq_start();
+
 }
 
 uint8_t get_fr8012haq_id(void)
@@ -869,8 +970,6 @@ static bool is_measuring_flag = false;
 void fr8012haq_measure_hr_start(void)
 {
     sys_pm_wakeup_no_lcd();
-    
-
     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);
@@ -891,7 +990,13 @@ void fr8012haq_measure_bp_start(void)
     FR8012HAQ_LOG("fr8012haq_measure_bp_start :FR8012HAQ_run_mode:%d!!!!!!!!\n",FR8012HAQ_run_mode);
     sensor_task_send_message(FR8012HAQ_ID,SENSOR_MSG_START);
 }
-
+void fr8012haq_measure_YYL_start(void)
+{
+    sys_pm_wakeup_no_lcd();
+    FR8012HAQ_run_mode = YYL_MODE      ;
+    FR8012HAQ_LOG("fr8012haq_measure_bp_start :FR8012HAQ_run_mode:%d!!!!!!!!\n",FR8012HAQ_run_mode);
+    sensor_task_send_message(FR8012HAQ_ID,SENSOR_MSG_START);
+}
 void FR8012HAQ_restart(void)
 {
        fr8012haq_en_gpio_enable(false);
@@ -902,7 +1007,8 @@ void FR8012HAQ_restart(void)
 void fr8012haq_measure_stop(void)
 {
     FR8012HAQ_LOG("fr8012haq_measure_stop !!!!!!!!\n");
-    FR8012HAQ_run_mode = close_MODE;
+    FR8012HAQ_run_mode = NULL_MODE;
+    FR8012HAQ_jobs_mode = NULL_MODE;
     sensor_task_send_message(FR8012HAQ_ID,SENSOR_MSG_STOP);
 }
 void FR8012HAQ_close(void)
@@ -987,7 +1093,16 @@ int  *fr8012haq_blood_data_get(int *len)
     *len = s_FR8012HAQ_blood_data_len;
     return s_FR8012HAQ_blood_data;
 }
+//获取云医链中医数据,一分钟产生一个,最多存30个。返回当前存多少个,yyl_data:数据复制缓冲区,必须大于30*sizeof(yylPFE_OutputData)
+//yylPFE_OutputData yyl_out_data
+int  fr8012haq_YYL_data_get(yylPFE_OutputData *yyl_data)
+{
+    int len_tmp = yyl_out_data_len;
+    memcpy(yyl_data,yyl_out_data,yyl_out_data_len);
+    yyl_out_data_len = 0;
+    memset(yyl_out_data,0,YYL_OUT_DATA_SIZE*sizeof(yylPFE_OutputData));
 
+}
 void fr8012haq_hr_bp_bo_value_clear(void)
 {
     s_FR8012HAQ_heart_rate = 0x0;
index 140be93..34e4f72 100644 (file)
 //#include "tyhx_mems.h"
 //#define DEBUG_PPG_ONLY     // 只用IR 判断佩带和非佩戴, 靠近感应功能关闭,  但是FR8012HAQ_PROX.C要合入编译
 
+typedef struct {
+    uint32_t         timestamp;  
+    uint32_t         areaUP;
+    uint16_t         areaUPBase;
+    uint16_t         areaUPHeight;
+    uint32_t         areaDOWN;
+    uint16_t         areaDOWNBase;
+    uint16_t         areaDOWNHeight;
+    uint16_t         RRI;
+    uint16_t         motion;
+}yylPFE_OutputData;
 typedef enum {    
        HRS_MODE, 
        SPO2_MODE,
@@ -20,7 +31,7 @@ typedef enum {
        TEMP_MODE,
        WEAR_MODE,
        HRV_MODE,
-  YYL_MODE,
+       YYL_MODE,
        LIVING_MODE,
        LAB_TEST_MODE,
        FT_LEAK_LIGHT_MODE,