优化运动服务接收函数,优化血氧驱动,解决测血氧时容易死机的问题,添加抬腕亮屏与马达震动接口 40/1 40/head
authorpenglei <1624952103@qq.com>
Thu, 18 Apr 2024 03:58:41 +0000 (11:58 +0800)
committerpenglei <1624952103@qq.com>
Thu, 18 Apr 2024 03:58:41 +0000 (11:58 +0800)
code/sdk/application/battery/service/battery_service.cpp
code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h
code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h
code/sdk/drivers/peripheral/cywee/service/cywee_service.c
code/sdk/drivers/peripheral/cywee/src/main_dml.c
code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c
code/sdk/drivers/peripheral/utils/custom_utils.c
code/sdk/drivers/peripheral/utils/custom_utils.h
code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c

index 0bc963a..da74324 100644 (file)
@@ -239,7 +239,7 @@ static void battery_check_task(void *arg)
     int32_t ret;
     common_notify_mail_t mail;
     uint32_t msgsize = (uint32_t)sizeof(common_notify_mail_t);
-    
+    int sendbuf[2] = {0};
 
     /**开机初始化电量及充电状态 Start*/
     if(get_charge_stat() == 1)
@@ -300,14 +300,16 @@ static void battery_check_task(void *arg)
         }else if (mail.comm.event == BATTERY_CMD_CHARGE_PLUG) {
             // PRINT("[battery][service] charger_plug_event_ui_sendmsg_toUI plugged \n");
             oncharging_status = 1;
-            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_ONCHARGING_CHANGE,&oncharging_status);
+            sendbuf[0] = oncharging_status;
+            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_ONCHARGING_CHANGE,sendbuf);
                 
             battery_check_chargement();
             charger_plug_event_ui_sendmsg_toUI(1);
         }else if (mail.comm.event == BATTERY_CMD_CHARGE_UNPLUG) {
             // PRINT("[battery][service] charger_plug_event_ui_sendmsg_toUI unplugged \n");
             oncharging_status = 0;
-            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_ONCHARGING_CHANGE,&oncharging_status);
+            sendbuf[0] = oncharging_status;
+            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_ONCHARGING_CHANGE,sendbuf);
             
             disable_charge();
             charger_plug_event_ui_sendmsg_toUI(0);
index 81fd3ff..48f4ee4 100644 (file)
@@ -493,10 +493,6 @@ typedef enum{
     CYWEE_MSG_TYPE_INACTIVITY_EXTRA_INFO_UPDATE,
 } cywee_msg_type_t;
 
-
-#define RAISE_HAND 1
-#define DROP_HAND 2
-
 extern void get_gsonsen_xyz(gsenson_t *t);
 void gsensor_get_n_data(uint8_t cnt,gsenson_t t[]);
 
@@ -508,7 +504,7 @@ void activity_mode_setstatus(int cmd);
 void cywee_oncharging_update(int oncharging_status);
 void cywee_wearstatus_update(int wearstatus);
 void cywee_hrs_wearstatus_update(int hrs_data,int wearstatus);
-
+void cywee_set_user_info(int age,int gender,int weight,int height,int wearing_method);
 
 extern uint8_t hrs_mode_state;
 
index df6c74f..1ccade0 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com
  * @Date: 2024-03-26 20:29:58
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-04-16 15:50:32
+ * @LastEditTime: 2024-04-18 11:43:11
  * @FilePath: /FD230/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h
  * @Description: 
  * 
@@ -65,7 +65,7 @@ void uapi_cywee_service_deinit(void);
 /**
  * 测试指令 参数cmd 选项: ACC_SERVICE_CMD_START_CHECK,ACC_SERVICE_CMD_STOP_CHECK
 */
-void do_cywee_service_check_msg(int cmd,int data[]);
+void do_cywee_service_check_msg(int cmd, int data[2]);
 
 
 #ifdef __cplusplus
index 32eb71c..dfe1c9f 100644 (file)
@@ -228,14 +228,22 @@ void uapi_cywee_service_deinit(void)
     g_bat_timer_is_running = false;
 }
 
-void do_cywee_service_check_msg(int cmd, int data[])
+void do_cywee_service_check_msg(int cmd, int data[2])
 {
     int ret;
 
     cywee_cmd_t mail = {0};
     mail.cmd = cmd;
-    mail.data[0] = data[0];
-    mail.data[1] = data[1];
+    if(data != NULL)
+    {
+        mail.data[0] = data[0];
+        mail.data[1] = data[1];
+    }
+    else
+    {
+        mail.data[0] = 0;
+        mail.data[1] = 0;
+    }
     ret = osal_msg_queue_write_copy(g_cywee_queue, (void *)&mail, sizeof(cywee_cmd_t), 0);
     if (ret != OSAL_SUCCESS)
     {
index 52c2219..4d8ad52 100644 (file)
@@ -45,29 +45,6 @@ uint8_t hrs_mode_state = 0;
 
 static uint8_t mail = 0;
 
-void watch_hand_updown(int fdata)
-{
-    #if defined(SUPPORT_POWER_MANAGER)
-    const power_display_svr_api_t *display_api = power_display_svr_get_api();
-    #endif
-    if (fdata == 2)
-    {
-    #if defined(SUPPORT_POWER_MANAGER)
-        display_api->set_screen_set_keepon_timeout(0);
-        CWM_OS_dbgPrintf("[cwyee] turn_off_screen");
-    #endif
-    }else if (fdata == 1)
-    {
-    #if defined(SUPPORT_POWER_MANAGER)
-        if (display_api->get_screen_state() != SCREEN_ON) {
-            CWM_OS_dbgPrintf("[cwyee] turn_on_screen");
-            display_api->turn_on_screen();
-        }
-        display_api->set_screen_set_keepon_timeout(5000);
-    #endif
-    }
-}
-
 void get_sleep_data(void)
 {
     memset(&scl, 0, sizeof(scl));
@@ -77,13 +54,13 @@ void get_sleep_data(void)
 }
 
 
-void set_user_info(int age,int gender,double weight,int height,int wearing_method)
+void cywee_set_user_info(int age,int gender,int weight,int height,int wearing_method)
 {
     memset(&scl, 0, sizeof(scl));
     scl.iData[0] = 1;
     scl.iData[1] = age;
     scl.iData[2] = gender;
-    scl.iData[3] = (int)weight;
+    scl.iData[3] = weight;
     scl.iData[4] = height;
     scl.iData[5] = wearing_method;
     CWM_SettingControl(SCL_USER_INFO, &scl);
@@ -211,13 +188,6 @@ void cyw_inactivity_mode_change(int mode)
         //久坐和有效站立
         case INACTIVITY_MODE_SEDENTARY:
             CWM_OS_dbgPrintf("INACTIVITY_MODE_SEDENTARY\r\n");
-            //training_mode_init();
-            //配置久坐相关参数
-            memset(&scl, 0, sizeof(scl));
-            scl.iData[0] = 1;
-            scl.iData[2] = 1;
-            scl.iData[3] = 1;
-            CWM_SettingControl(SCL_SEDENTARY, &scl);
             memset(&scl, 0, sizeof(scl));
             scl.iData[0] = 1;
             scl.iData[1] = 1;
@@ -419,12 +389,10 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
              break;
         case IDX_ALGO_SEDENTARY:
             CWM_OS_dbgPrintf("IDX_ALGO_SEDENTARY\n");
-
              break;
         case IDX_ALGO_WATCH_HANDUP:
             CWM_OS_dbgPrintf("HANDUP_DOWN MSG [%d]\n",(int)sensorEVT->fData[1]);
-            watch_hand_updown((int)sensorEVT->fData[1]);
-
+            uapi_take_to_wake((int)sensorEVT->fData[1]);
             break;
         case IDX_ALGO_SLEEP:
             CWM_OS_dbgPrintf("IDX_ALGO_SLEEP\n");
@@ -738,7 +706,7 @@ int cywee_main_dml(int cmd)
 
         CWM_LibPostInit(CWM_AP_SensorListen);
         //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
-
+        
         //get chip information
 
         char chipInfo[64];
@@ -835,50 +803,31 @@ int cywee_main_dml(int cmd)
         scl.iData[0] = 1;
         CWM_SettingControl(SCL_ACTIVITY_CONFIG, &scl);
 
-        memset(&scl, 0, sizeof(scl));
-        scl.iData[0] = 1;
-        CWM_SettingControl(SCL_PEDO_CONFIG, &scl);
-
 
         memset(&scl, 0, sizeof(scl));
         scl.iData[0] = 1;
         CWM_SettingControl(SCL_SLEEP_CONFIG, &scl);
 
-    /*
-    SCL_REQ_SLEEPING_DATA
-    int[0] = 1
-    int[1] = terminate_sleep
-    (0: 立刻輸出狀態,但不中止此段睡眠偵測, 
-    1: 立刻輸出狀態,並中止此段睡眠偵測)
-    */
+
         memset(&scl, 0, sizeof(scl));
         scl.iData[0] = 1;
-        scl.iData[1] = 0;
-        CWM_SettingControl(SCL_REQ_SLEEPING_DATA, &scl);
-
-    /*
-    SCL_INACTIVITY_CONFIG
-    int[0] = 1
-    int[1] = 感測器雜訊度等級 (default: 低雜訊)
-    (0: 低雜訊, 1: 高雜訊)
-    */
+        scl.iData[2] = 1;
+        CWM_SettingControl(SCL_SEDENTARY, &scl);       
+
         memset(&scl, 0, sizeof(scl));
         scl.iData[0] = 1;
         CWM_SettingControl(SCL_INACTIVITY_CONFIG, &scl);
 
-        memset(&scl, 0, sizeof(scl));
-        scl.iData[0] = 1;
-        scl.iData[2] = 1;
-        scl.iData[3] = 1;
-        scl.iData[4] = 3;
-        scl.iData[5] = 1;
-        CWM_SettingControl(SCL_SEDENTARY, &scl);
 
+        // memset(&scl, 0, sizeof(scl));
+        // scl.iData[0] = 1;
+        // scl.iData[3] = 9;
+        // scl.iData[4] = 5;
+        // scl.iData[7] = -1;
+        // CWM_SettingControl(SCL_LOG, &scl); 
         // CWM_SettingControl(SCL_LOG, &scl);
-        
-        
 
-            //呼叫任一個CWM_Sensor_Enable 前呼叫此指令 设置手动或自动模式
+        //呼叫任一個CWM_Sensor_Enable 前呼叫此指令 设置手动或自动模式
         memset(&scl, 0, sizeof(scl));
         scl.iData[0] = 1;
         scl.iData[1] = 1;
@@ -896,7 +845,9 @@ int cywee_main_dml(int cmd)
         // //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
         
         CWM_Sensor_Enable(IDX_ALGO_ACTIVITY_OUTPUT);
-
+        CWM_Sensor_Enable(IDX_ALGO_INACTIVITY_OUTPUT);
+        CWM_Sensor_Enable(IDX_ALGO_SEDENTARY);
+        CWM_Sensor_Enable(IDX_ALGO_SLEEP);
         CWM_Sensor_Enable(IDX_ACCEL);
         //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
         // CWM_Sensor_Enable(IDX_GYRO);
index 14b4af8..9435968 100644 (file)
@@ -118,7 +118,7 @@ uint8_t alg_ram[11 * 1024] __attribute__((aligned(4)));
 //uint8_t alg_ram[10] = {0};\r
 ppg_sensor_data_t ppg_s_data;\r
 \r
-int hrs_data[2] = {0};\r
+int cywee_data[2] = {0};\r
 \r
 int wear_mode_status = 0;\r
 \r
@@ -2801,10 +2801,10 @@ void hx3695_hrs_ppg_Int_handle(void)
 \r
     if(hrs_mode_state)\r
     {\r
-        hrs_data[0] = hrsresult.lastesthrs;\r
-        hrs_data[1] = hrs_wear_status;\r
+        cywee_data[0] = hrsresult.lastesthrs;\r
+        cywee_data[1] = hrs_wear_status;\r
 \r
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE,hrs_data);\r
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE,cywee_data);\r
     }\r
 \r
     if(hrsresult.lastesthrs > 0)\r
@@ -3141,36 +3141,41 @@ void hx3695_spo2_ppg_Int_handle(void)
         DEBUG_PRINTF("\r\n send1  jlink cnt=%d\r\n",*count);   \r
   \r
   /*屏蔽*/\r
-    // for(ii=0; ii<*count; ii++)\r
-    // {\r
-    //     gsen_fifo_x_send[ii] = gsen_fifo_x[32-*count+ii];\r
-    //     gsen_fifo_y_send[ii] = gsen_fifo_y[32-*count+ii];\r
-    //     gsen_fifo_z_send[ii] = gsen_fifo_z[32-*count+ii];\r
-               // PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n",\r
-               //      1+ii,*count,red_buf[ii],ir_buf[ii],green_buf[ii],gsen_fifo_x[ii],gsen_fifo_y[ii],gsen_fifo_z[ii]);\r
-               // //printf("FFF==>spo2  red_buf : %d,  %d,  %d,        %d \n", 1+ii, *count, red_buf[ii], ir_buf[0]);\r
-               \r
+    PRINT("*count[%d] \r\n",*count);\r
+    if(*count < 10)\r
+    {\r
+        for(ii=0; ii<*count; ii++)\r
+        {\r
+            gsen_fifo_x_send[ii] = gsen_fifo_x[32-*count+ii];\r
+            gsen_fifo_y_send[ii] = gsen_fifo_y[32-*count+ii];\r
+            gsen_fifo_z_send[ii] = gsen_fifo_z[32-*count+ii];\r
+            PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n",\r
+            1+ii,*count,red_buf[ii],ir_buf[ii],green_buf[ii],gsen_fifo_x[ii],gsen_fifo_y[ii],gsen_fifo_z[ii]);\r
+          //printf("FFF==>spo2  red_buf : %d,  %d,  %d,        %d \n", 1+ii, *count, red_buf[ii], ir_buf[0]);\r
+          \r
 \r
-    //  }\r
+        }\r
 \r
-//     ft_ppg_iir = spo2_s_dat.red_data[0];\r
-//     hx3695_factory_test_process(NULL, APP_FACTORY_TEST_SPO2_START, &ft_ppg_iir);\r
+      //       ft_ppg_iir = spo2_s_dat.red_data[0];\r
+      //       hx3695_factory_test_process(NULL, APP_FACTORY_TEST_SPO2_START, &ft_ppg_iir);\r
 \r
-       ft_test_result_t result = {0};\r
-       result.gr_data_final = spo2_s_dat.green_data[0];\r
-       result.red_data_final = spo2_s_dat.red_data[0];\r
-       result.ir_data_final = spo2_s_dat.ir_data1[0];\r
-       //hx3695_factory_test_process(NULL, APP_FACTORY_TEST_SPO2_START, &result);\r
+        ft_test_result_t result = {0};\r
+        result.gr_data_final = spo2_s_dat.green_data[0];\r
+        result.red_data_final = spo2_s_dat.red_data[0];\r
+        result.ir_data_final = spo2_s_dat.ir_data1[0];\r
+      //hx3695_factory_test_process(NULL, APP_FACTORY_TEST_SPO2_START, &result);\r
 \r
        \r
-    PRINT("hx3695 current value: %d %d %d %d %d %d\r\n", cal.R_LED, cal.IR_LED1, cal.G_LED, cal.R_LEDDAC, cal.IR_LEDDAC1, cal.G_LEDDAC);\r
-    spo2_wear_status = hx3695_spo2_get_wear_status();\r
-    PRINT("spo2_wear_status : %d\r\n",spo2_wear_status);\r
-    if(spo2_wear_status == MSG_SPO2_WEAR)\r
-    {\r
-        tyhx_spo2_alg_send_data(red_buf, ir_buf, green_buf, cal.R_LEDDAC, cal.IR_LEDDAC1, cal.G_LEDDAC, \r
-                         gsen_fifo_x_send, gsen_fifo_y_send, gsen_fifo_z_send, *count);\r
+        PRINT("hx3695 current value: %d %d %d %d %d %d\r\n", cal.R_LED, cal.IR_LED1, cal.G_LED, cal.R_LEDDAC, cal.IR_LEDDAC1, cal.G_LEDDAC);\r
+        spo2_wear_status = hx3695_spo2_get_wear_status();\r
+        PRINT("spo2_wear_status : %d\r\n",spo2_wear_status);\r
+        if(spo2_wear_status == MSG_SPO2_WEAR)\r
+        {\r
+            tyhx_spo2_alg_send_data(red_buf, ir_buf, green_buf, cal.R_LEDDAC, cal.IR_LEDDAC1, cal.G_LEDDAC, \r
+            gsen_fifo_x_send, gsen_fifo_y_send, gsen_fifo_z_send, *count);\r
+        }\r
     }\r
+    \r
 #endif\r
 \r
     spo2_alg_results = tyhx_spo2_alg_get_results();\r
@@ -3460,7 +3465,8 @@ void hx3695_wear_ppg_Int_handle(void)
     if(wear_mode_status != hx3695_wear_status)\r
     {\r
         wear_mode_status = hx3695_wear_status;\r
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&wear_mode_status);\r
+        cywee_data[0] = wear_mode_status;\r
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&cywee_data);\r
     }\r
 \r
        extern uint8_t notouch_cnt;\r
index 0a916eb..dfb437c 100644 (file)
@@ -889,25 +889,54 @@ errcode_t uapi_get_buildversion(uint8_t *para, uint32_t para_len)
 
 #include "vibrator.h"
 
-
-void vibrator_switch(uint8_t cmd)
-{
-    //g_VibratorFunc_Swtich(cmd);
-}
-
 void vibrator_cyclicity(uint16_t duty , uint16_t cycle_time_ms,uint16_t duration_time_ms)
 {
     g_VibratorFunc(duty,cycle_time_ms,duration_time_ms);
 }
 
-void VibratorFunc_PowerOn(void)
+void uapi_set_vibrator_level(int level)
 {
-     //g_VibratorFunc_PowerOn();
+    uint16_t duty =20;
+    uint16_t cycle_time_ms = 200;
+    uint16_t duration_time_ms = 0;
+    switch(level)
+    {
+        case 1:
+            duration_time_ms = 200;
+            break;
+        case 2:
+            duration_time_ms = 500;
+            break;
+        case 3:
+            duration_time_ms = 1000;
+            break;
+        default:
+            break;
+    }
+    g_VibratorFunc(duty,cycle_time_ms,duration_time_ms);
 }
 
-void VibratorFunc_PowerOff(void)
+void uapi_take_to_wake(int cmd)
 {
-     //g_VibratorFunc_PowerOff();
+    #if defined(SUPPORT_POWER_MANAGER)
+    const power_display_svr_api_t *display_api = power_display_svr_get_api();
+    #endif
+    if (cmd == 2)
+    {
+    #if defined(SUPPORT_POWER_MANAGER)
+        display_api->set_screen_set_keepon_timeout(0);
+        PRINT("[cwyee] turn_off_screen");
+    #endif
+    }else if (cmd == 1)
+    {
+    #if defined(SUPPORT_POWER_MANAGER)
+        if (display_api->get_screen_state() != SCREEN_ON) {
+            PRINT("[cwyee] turn_on_screen");
+            display_api->turn_on_screen();
+        }
+        display_api->set_screen_set_keepon_timeout(5000);
+    #endif
+    }
 }
 
 
index 92e87c5..daa077c 100644 (file)
@@ -73,8 +73,11 @@ errcode_t uapi_get_buildversion(uint8_t *para, uint32_t para_len);
  * @}
  */
 
+//抬腕亮屏
+void uapi_take_to_wake(int cmd);
+
 //开关马达
-void vibrator_switch(uint8_t cmd);
+void uapi_set_vibrator_level(int level);
 void vibrator_cyclicity(uint16_t duty , uint16_t cycle_time_ms,uint16_t duration_time_ms);
 
 //获取lcd id
index 0d31d7a..546ec99 100644 (file)
@@ -296,26 +296,6 @@ static uint32_t custom_enter_recovery(uint8_t *para, uint32_t paraLen, char *str
     return ERRCODE_SUCC;
 }
 
-static uint32_t custom_vibrator_on(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
-{
-
-    UNUSED(strCommonCmd);
-
-    //VibratorFunc_PowerOn();
-
-    return ERRCODE_SUCC;
-}
-
-static uint32_t custom_vibrator_off(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
-{
-
-    UNUSED(strCommonCmd);
-
-    //VibratorFunc_PowerOff();
-
-    return ERRCODE_SUCC;
-}
-
 #include "cywee_hal.h"
 #include "hx3695_hrs_agc.h"
 static uint32_t custom_gsensor_getdata(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
@@ -377,11 +357,6 @@ static const at_cmd_table_t g_custom_utils_cmd[] = {
     { (char *)"AT^CUSTOM_SN_REQ",  custom_utils_getsn, (char *)" " },
     { (char *)"AT^DOWNLOADOTA",  custom_start_ota_download, (char *)" " },
     { (char *)"AT^STARTOTA",      custom_start_ota, (char *)" " },
-
-    { (char *)"AT^VIBRATORON",      custom_vibrator_on, (char *)" " },
-
-    { (char *)"AT^VIBRATOROFF",      custom_vibrator_off, (char *)" " },
-
     { (char *)"AT^LCDID",      custom_lcd_getid, (char *)" " },
 
     { (char *)"AT^TOUCHID",      custom_touch_getid, (char *)" " },