血压
authorp15692025051 <846603105@qq.com>
Wed, 13 Mar 2024 08:12:39 +0000 (16:12 +0800)
committerp15692025051 <846603105@qq.com>
Wed, 13 Mar 2024 08:12:39 +0000 (16:12 +0800)
2.sdk/sdk/gui/lv_drivers/indev/FR8012HAQ/fr8012haq.c
2.sdk/sdk/gui/lv_drivers/indev/FR8012HAQ/fr8012haq.h

index ff86f73..7012b50 100644 (file)
@@ -30,8 +30,21 @@ 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 const uint32_t my_xm_mfp_cfgs[] = {
+//     MFP_REG(GPIO_85) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE,
+//     MFP_EOC            /*End of configuration, must have */
+// };
+
+static const uint32_t fr8012haq_mfp_cfgs_sleep[] = {
+    MFP_REG(GPIO_32) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_FALL,
+    MFP_EOC            /*End of configuration, must have */
+};
+static const uint32_t fr8012haq_d2_exit_mfp_cfgs[] = {
+    MFP_REG(GPIO_32) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_FALL,
+    MFP_EOC            /*End of configuration, must have */
+};
 static  uint32_t fr8012haq_mfp_cfgs[] = {
      MFP_REG(GPIO_32) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE,
      MFP_REG(GPIO_18) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE,
@@ -40,7 +53,26 @@ static  uint32_t fr8012haq_mfp_cfgs[] = {
      MFP_REG(GPIO_16) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE,
      MFP_EOC
 };
+int fr8012haq_int_gpio_d2_ent_callback(void)
+{
+    mfp_config((uint32_t *)fr8012haq_mfp_cfgs_sleep);
+    return 0;
+}
 
+int fr8012haq_int_gpio_d2_exit_callback(void)
+{
+    mfp_config((uint32_t *)fr8012haq_d2_exit_mfp_cfgs);
+    return 0;
+}
+static void fr8012haq_sleep_suspend(void)
+{
+    Hal_low_power_sleep_suspend(HWD_LOW_POWRE_GSENSOR_1_FLAG);
+}
+
+static void fr8012haq_sleep_resume(void)
+{
+    Hal_low_power_sleep_resume(HWD_LOW_POWRE_GSENSOR_1_FLAG);
+}
 typedef    void*    OS_HISR;
 static OS_HISR     fr8012haq_hisr_ref;
 
@@ -101,7 +133,6 @@ static void fr8012haq_en_gpio_init(void)
     gpio_set_direction(GPIO81, GPIO_OUT);
     gpio_set_direction(GPIO84, GPIO_OUT);
     gpio_set_direction(GPIO16, GPIO_OUT);
-    
 }
 void fr8012haq_delay(uint32_t ms)
 {
@@ -383,35 +414,35 @@ static void fr8012haq_create_hisr(void)
 }
 
 static void * fr8012haq_timer = NULL;
+char fr8012haq_timerout_flag = 0;
 void fr8012haq_timerout_cb(void)
 {
+    if(fr8012haq_timerout_flag == 1)
+        return;
+    fr8012haq_timerout_flag=1;
     //FR8012HAQ_LOG("fr8012haq_timerout_cb\n");
     OS_Activate_HISR(&fr8012haq_hisr_ref);
 }
 void fr8012haq_timer_cfg(bool en)    
 {
-    return ;
+    
     //FR8012HAQ_LOG("fr8012haq_timer_cfg :%d!!!!!!\n\n",en);
     if(en)
     {
         if(fr8012haq_timer == NULL )
             uos_timer_create(&fr8012haq_timer);
             //fr8012haq_timer = Helios_Timer_init( (void* )fr8012haq_timerout_cb, NULL);
-        if(FR8012HAQ_run_mode == WEAR_MODE)
-        {
-            
-            uos_timer_start(fr8012haq_timer, MS_TO_TICKS(3000), MS_TO_TICKS(3000), fr8012haq_timerout_cb, NULL);
-        }else if(FR8012HAQ_run_mode == BP_MODE)//血压150MS
+        if(FR8012HAQ_run_mode == BP_MODE)//血压500MS
         {
             FR8012HAQ_LOG("fr8012haq_timer_cfg:BP_MODE!!!!!\n");
-            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(500), MS_TO_TICKS(500), fr8012haq_timerout_cb, NULL);
+        }else if(FR8012HAQ_run_mode == YYL_MODE)//中医35秒
         {
-            uos_timer_start(fr8012haq_timer, MS_TO_TICKS(10000), MS_TO_TICKS(10000), fr8012haq_timerout_cb, NULL);
+            uos_timer_start(fr8012haq_timer, MS_TO_TICKS(35000), MS_TO_TICKS(35000), fr8012haq_timerout_cb, NULL);
         }else//其他1秒
         {
             
-            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(3000), MS_TO_TICKS(3000), fr8012haq_timerout_cb, NULL);
         }
 
 
@@ -605,8 +636,8 @@ int fr8012haq_parse_returned_data(int timeout)
         // 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("UART4:len:%d data:",len);
+        //my_str_print(UART4_buf,len);//打印
         FR8012HAQ_LOG("\n\n");
         cmd_str_tmp = UART4_buf;
         while(1)
@@ -683,8 +714,8 @@ int fr8012haq_parse_returned_data(int timeout)
                         //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:");
+                        //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));
@@ -698,13 +729,13 @@ int fr8012haq_parse_returned_data(int timeout)
                                 {
                                     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("%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);
+                        //FR8012HAQ_LOG("\n");
+                        FR8012HAQ_LOG("s_FR8012HAQ_blood_data_len:%d\n",s_FR8012HAQ_blood_data_len);
                     }
                     /*情绪*/
                     str_tmp = strstr(cmd_str_tmp,"\"emo_data\":[");
@@ -794,26 +825,26 @@ int fr8012haq_parse_returned_data(int timeout)
                     {    
                         //unsigned char hrs = 0;
                         str_tmp += strlen("\"yyl_data\":\"");
-                        FR8012HAQ_LOG("yyl_data1:!!!\n");
+                        //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");
+                        //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");
+                          //  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");
+                            //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");
+                            //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);
@@ -822,15 +853,15 @@ int fr8012haq_parse_returned_data(int timeout)
                         }
                         if(s_FR8012HAQ_yyl_data)//复制数据
                         {
-                            FR8012HAQ_LOG("yyl_data1.4:!!!\n");
+                            //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("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");
                         
                     }
@@ -870,10 +901,10 @@ int fr8012haq_parse_returned_data(int timeout)
     }
     return ret ;
 }
-char fr8012haq_process_data_flag = 0;
+
 void fr8012haq_process_data(uint32_t *process_data)
 {
-
+    sys_pm_wakeup_no_lcd();
     Timer0_Switch(1);
     
     //FR8012HAQ_LOG("fr8012haq_process_data:%d!!!!\n\n",FR8012HAQ_run_mode);
@@ -881,15 +912,15 @@ void fr8012haq_process_data(uint32_t *process_data)
     {
         case HRS_MODE:
             /* code */
-            //uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"hrs\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"hrs\"}"));
+            uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"hrs\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"hrs\"}"));
             break;
         case SPO2_MODE:
             /* code */
-            //uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"spo2\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"spo2\"}"));
+            uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"spo2\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"spo2\"}"));
             break;
         case BP_MODE:
             /* code */
-            //uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"bp\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"bp\"}"));
+            uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"bp\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"bp\"}"));
             break;
         case WEAR_MODE:
             /* code */
@@ -901,22 +932,26 @@ void fr8012haq_process_data(uint32_t *process_data)
             break;
         case YYL_MODE:
             /* code */
-            //uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"yyl\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"yyl\"}"));
+            uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"yyl\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"yyl\"}"));
             break;
         case TEMP_MODE:
             /* code */
             uart4_send_data("{\"cmd\":\"2\",\"get_data\":\"temp\"}",sizeof("{\"cmd\":\"2\",\"get_data\":\"temp\"}"));
-            UOS_SleepMs(50);
+            
             break;
         default:
             break;
     }
+    UOS_SleepMs(20);
+
     //FR8012HAQ_LOG("fr8012haq_process_data2:%d!!!!\n",FR8012HAQ_run_mode);
     // float tmp = 0x3FE2E147;
     // FR8012HAQ_LOG("float:%f\n",tmp);
     fr8012haq_parse_returned_data(60);
-    uart4_send_data("{\"cmd\":\"0\"}",sizeof("{\"cmd\":\"0\"}"));//保活用
-    fr8012haq_process_data_flag = 0;
+    //uart4_send_data("{\"cmd\":\"0\"}",sizeof("{\"cmd\":\"0\"}"));//保活用
+    // gpio_enable_edge_detect(GPIO32, EDGE_FLAG_RISE);
+    // fr8012haq_sleep_resume();
+    fr8012haq_timerout_flag=0;
 }
 //返回是否激活返回0未激活,联网后判断一次是否激活,没激活需要执行激活参数
 char get_is_HA_activate(void)
@@ -989,10 +1024,9 @@ void HA_lib_init(void)
 }
 static void fr8012haq_isr_callback(void)
 {
-    if(fr8012haq_process_data_flag == 1)
-        return;
-    fr8012haq_process_data_flag = 1;
     sys_pm_wakeup_no_lcd();
+    // gpio_enable_edge_detect(GPIO32, 0);
+    // fr8012haq_sleep_suspend();
     FR8012HAQ_LOG("fr8012haq_isr_callback :!!!!!!!!!!!!\n");
     OS_Activate_HISR(&fr8012haq_hisr_ref);
 }
@@ -1003,9 +1037,9 @@ void hal_fr8012haq_int_init(void)
     
     Timer0_Switch(1);
     mfp_config(fr8012haq_mfp_cfgs);
-    gpio_set_direction(GPIO32, GPIO_IN);
-    gpio_register_int_handler(GPIO32, fr8012haq_isr_callback);
-    gpio_enable_edge_detect(GPIO32, EDGE_FLAG_RISE);
+    // gpio_set_direction(GPIO32, GPIO_IN);
+    // gpio_register_int_handler(GPIO32, fr8012haq_isr_callback);
+    // gpio_enable_edge_detect(GPIO32, EDGE_FLAG_RISE);
     fr8012haq_en_gpio_init();
     UOS_SleepMs(100);
     FR8012HAQ_LOG("FR8012HAQ ID : 0x%02x\n",get_fr8012haq_id());
index 88f3c21..842ce45 100644 (file)
@@ -69,5 +69,6 @@ void fr8012haq_measure_temp_start(void);
 
 void fr8012haq_measure_factory_start(void);
 void fr8012haq_factory_data_get(int *apre_val0,int *apre_val1,int *aps_val);
-
+int fr8012haq_int_gpio_d2_ent_callback(void);
+int fr8012haq_int_gpio_d2_exit_callback(void);
 #endif