血压模组
authorp15692025051 <846603105@qq.com>
Thu, 28 Dec 2023 08:17:58 +0000 (16:17 +0800)
committerp15692025051 <846603105@qq.com>
Thu, 28 Dec 2023 08:17:58 +0000 (16:17 +0800)
2.sdk/sdk/gui/lv_drivers/indev/FR8012HAQ/fr8012haq.c
2.sdk/sdk/gui/lv_drivers/indev/FR8012HAQ/fr8012haq.h

index 6ff0184..8915f4c 100644 (file)
@@ -46,7 +46,10 @@ static unsigned char is_open_FR8012HAQ = 0; //是否打开测试
 static unsigned char s_FR8012HAQ_heart_rate = 0x0;//心律
 static unsigned char s_FR8012HAQ_high_blood = 0x0;//血压/高压
 static unsigned char s_FR8012HAQ_low_blood = 0x0;//血压/低压
-unsigned char s_FR8012HAQ_blood_data[48*2] = {0};//血压数据
+#define s_FR8012HAQ_blood_freq 81
+#define s_FR8012HAQ_blood_data_mxa_len s_FR8012HAQ_blood_freq*4*60  //60秒存的字节数大小
+int * s_FR8012HAQ_blood_data = NULL;//血压数据
+int s_FR8012HAQ_blood_data_len = 0;//接收的血压数据长度
 static unsigned char s_FR8012HAQ_blood_oxygen = 0x0;//血氧
 static unsigned char s_FR8012HAQ_HRV = 0x0;//hrv
 unsigned char s_FR8012HAQ_wear_status = 1;//佩戴状态
@@ -367,7 +370,7 @@ void fr8012haq_timer_cfg(bool en)    //320ms
         }else
         {
             
-            uos_timer_start(fr8012haq_timer, MS_TO_TICKS(1000), MS_TO_TICKS(1000), fr8012haq_timerout_cb, NULL);
+            uos_timer_start(fr8012haq_timer, MS_TO_TICKS(150), MS_TO_TICKS(150), fr8012haq_timerout_cb, NULL);
         }
             
             //Helios_Timer_Start(fr8012haq_timer, 320, 1);
@@ -402,7 +405,6 @@ void FR8012HAQ_test(uint32_t mode)
        s_FR8012HAQ_heart_rate_buff_count = 0; 
        s_FR8012HAQ_high_blood = 0x0;
        s_FR8012HAQ_low_blood = 0x0;
-    memset(s_FR8012HAQ_blood_data,0,sizeof(s_FR8012HAQ_blood_data));
        s_FR8012HAQ_HRV = 0;
        //s_FR8012HAQ_wear_status = 0;
        s_FR8012HAQ_blood_oxygen = 0x0;
@@ -422,6 +424,13 @@ void FR8012HAQ_test(uint32_t mode)
             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:
@@ -496,6 +505,7 @@ void fr8012haq_analysis_data(char *data,unsigned int len)
     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)
@@ -528,13 +538,23 @@ void fr8012haq_analysis_data(char *data,unsigned int len)
     tem_data = strstr(data,"\"bp_data\":\"");
     if(tem_data)
     {
-        
-        unsigned char spo2 = 0;
         tem_data += strlen("\"bp_data\":\"");
         num_buf_len = find_c(tem_data,'\"');
-        if(num_buf_len>sizeof(s_FR8012HAQ_blood_data))
-            num_buf_len = sizeof(s_FR8012HAQ_blood_data);
-        memcpy(s_FR8012HAQ_blood_data,tem_data,num_buf_len);
+        for(i=0;i<num_buf_len;i+=6)
+        {
+            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++;
+            }
+            
+            
+        }
+        
         
     }
     /*体温*/
@@ -607,7 +627,7 @@ void fr8012haq_process_data(uint32_t *process_data)
             break;
     }
     FR8012HAQ_LOG("fr8012haq_process_data2:%d!!!!\n\n",FR8012HAQ_jobs_mode);
-    len =uart4_recv_data(data,UART4_BUF_LEN,10000);
+    len =uart4_recv_data(data,UART4_BUF_LEN,60);
     if(len)
     {
         FR8012HAQ_LOG("UART4:len:%d str:%s",len,data);
@@ -617,7 +637,6 @@ void fr8012haq_process_data(uint32_t *process_data)
         //UOS_SleepMs(100);
     }
         
-
     free(data);
 }
 void hal_fr8012haq_int_init(void)
@@ -721,6 +740,11 @@ void FR8012HAQ_close(void)
     FR8012HAQ_LOG("FR8012HAQ_close !!!!!!!!\n");
     watch_set_sleep_lcd_only(false);
     is_measuring_flag = false;
+    if(s_FR8012HAQ_blood_data!= NULL)
+    {
+        free(s_FR8012HAQ_blood_data);
+        s_FR8012HAQ_blood_data = NULL;
+    }
     uart4_send_data("{\"cmd\":\"1\",\"work_mode\":\"close\"}",sizeof("{\"cmd\":\"1\",\"work_mode\":\"close\"}"));
     fr8012haq_timer_cfg(false);
     //fr8012haq_hrs_disable
@@ -751,7 +775,6 @@ static void fr8012haq_hr_bp_bo_value_update(uint16_t hr, uint16_t bp_high, uint1
     s_FR8012HAQ_blood_oxygen = bo;
     s_FR8012HAQ_high_blood = bp_high ;
     s_FR8012HAQ_low_blood = bp_low ;
-    memset(s_FR8012HAQ_blood_data,0,sizeof(s_FR8012HAQ_blood_data));
 
     // if(hr > 0) {
     //     fr8012haq_hr_bp_bo_value.hr = hr;
@@ -787,10 +810,12 @@ 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;
 }
-//获取48字节aslcc码的十六进制血压数据到blood_buf,注意:blood_buf长度要大于等于48*2字节
-void fr8012haq_blood_data_get(char *blood_buf)
+//获取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));
+    //memcpy(blood_buf,s_FR8012HAQ_blood_data,sizeof(s_FR8012HAQ_blood_data));
+    *len = s_FR8012HAQ_blood_data_len;
+    return s_FR8012HAQ_blood_data;
 }
 
 void fr8012haq_hr_bp_bo_value_clear(void)
@@ -799,10 +824,10 @@ void fr8012haq_hr_bp_bo_value_clear(void)
        s_FR8012HAQ_heart_rate_buff_count = 0; 
        s_FR8012HAQ_high_blood = 0x0;
        s_FR8012HAQ_low_blood = 0x0;
-    memset(s_FR8012HAQ_blood_data,0,sizeof(s_FR8012HAQ_blood_data));
        s_FR8012HAQ_HRV = 0;
        //s_FR8012HAQ_wear_status = 0;
        s_FR8012HAQ_blood_oxygen = 0x0;
+    s_FR8012HAQ_blood_data_len = 0;
     //memset(&fr8012haq_hr_bp_bo_value, 0, sizeof(fr8012haq_hr_bp_bo_value));
 
 }
@@ -822,9 +847,9 @@ void FR8012HAQ_result_set_heart_rate(unsigned char heart_rate)
    //s_FR8012HAQ_heart_rate = heart_rate; 
    if(s_FR8012HAQ_heart_rate_buff_count >=  HEART_RATE_BUFF_LEN)
       s_FR8012HAQ_heart_rate_buff_count = 0;
-   s_FR8012HAQ_high_blood = (uint8_t)(heart_rate * 1.5);
+//    s_FR8012HAQ_high_blood = (uint8_t)(heart_rate * 1.5);
    
-   s_FR8012HAQ_low_blood = (uint8_t)(heart_rate * 0.95);
+//    s_FR8012HAQ_low_blood = (uint8_t)(heart_rate * 0.95);
 }
 void FR8012HAQ_result_set_wear_status(unsigned char wear_status)
 {
index 6155b60..fbfcd76 100644 (file)
@@ -47,5 +47,5 @@ void FR8012HAQ_result_set_wear_status(unsigned char wear_status);
 unsigned char FR8012HAQ_result_get_wear_status(void);
 void FR8012HAQ_close(void);
 void fr8012haq_measure_stop(void);
-void fr8012haq_blood_data_get(char *blood_buf);
+int  *fr8012haq_blood_data_get(int *len);
 #endif