增加活体检测以优化佩戴检测,关闭纯佩戴检测模式.
authorpenglei <1624952103@qq.com>
Tue, 13 Aug 2024 12:14:25 +0000 (20:14 +0800)
committerpenglei <1624952103@qq.com>
Tue, 13 Aug 2024 12:14:25 +0000 (20:14 +0800)
使用心率数据辅助睡眠监测.
添加音量设置AT指令.
添加马达测试蓝牙指令.
优化创建线程执行顺序.延后mag cywee ppg task 创建时间.

16 files changed:
code/sdk/application/battery/service/battery_service.cpp
code/sdk/application/brandy/brandy_standard/thread_pri_init.c
code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c
code/sdk/drivers/peripheral/cywee/CMakeLists.txt
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/board_yh601s.c
code/sdk/drivers/peripheral/cywee/src/main_dml.c
code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c
code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp
code/sdk/drivers/peripheral/utils/custom_cmd_service.c
code/sdk/drivers/peripheral/utils/custom_utils.h
code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c
code/sdk/drivers/peripheral/utilscpp/custom_utilscpp.cpp
code/sdk/drivers/peripheral/utilscpp/custom_utilscpp.h

index 4f18e21..f181915 100644 (file)
@@ -90,8 +90,6 @@ static unsigned long g_app_queue;
 
 static uint8_t g_check_count = 0;
 
-static int oncharging_status = -1;
-
 static void battery_check_timer_callback(void* data);
 errcode_t charger_plug_event_notify(uint8_t plugged);
 errcode_t charger_plug_event_ui_sendmsg_toUI(uint8_t plugged);
@@ -291,8 +289,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};
-
+    int oncharging_status = 0;
     #ifdef DISABLE_VBUS_CHECK
     disable_charge();
     uapi_tcxo_delay_ms(1000);
@@ -359,16 +356,14 @@ 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;
-            sendbuf[0] = oncharging_status;
-            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_ONCHARGING_CHANGE,sendbuf);
+            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_ONCHARGING_CHANGE,&oncharging_status);
                 
             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;
-            sendbuf[0] = oncharging_status;
-            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_ONCHARGING_CHANGE,sendbuf);
+            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_ONCHARGING_CHANGE,&oncharging_status);
             #ifndef DISABLE_VBUS_CHECK
             disable_charge();
             #endif
index 90c422c..2c3062d 100755 (executable)
@@ -434,30 +434,6 @@ uapi_pm_remove_sleep_veto(PM_ID_DEBUG);
     uapi_battery_init();\r
 #endif\r
 \r
-#ifdef ENABLE_CUSTOM_I2C\r
-    errcode_t result = custom_iic_init();\r
-    if(result != SUCC)\r
-        PRINT("custom_iic_init failed !!! \r\n");\r
-    else\r
-    {\r
-        PRINT("custom_iic_init succed !!! \r\n");\r
-        #ifdef MAG_MMC5603\r
-            uapi_mag_service_init();\r
-        #endif\r
-\r
-        #ifdef SUPPORT_PPG_SERVICE\r
-            uapi_ppg_service_init();\r
-        #endif\r
-\r
-        #ifdef ENABLE_CYWEE\r
-            uapi_cywee_service_init();\r
-        #endif \r
-\r
-    }\r
-\r
-#endif\r
-\r
-\r
 #ifdef ACC_LIS2DOC\r
     // uapi_acc_service_init();\r
 #endif\r
@@ -481,6 +457,28 @@ uapi_pm_remove_sleep_veto(PM_ID_DEBUG);
     \r
     start_custom_ble_service();\r
 \r
+#ifdef ENABLE_CUSTOM_I2C\r
+    errcode_t result = custom_iic_init();\r
+    if(result != SUCC)\r
+        PRINT("custom_iic_init failed !!! \r\n");\r
+    else\r
+    {\r
+        PRINT("custom_iic_init succed !!! \r\n");\r
+        #ifdef MAG_MMC5603\r
+            uapi_mag_service_init();\r
+        #endif\r
+\r
+        #ifdef SUPPORT_PPG_SERVICE\r
+            uapi_ppg_service_init();\r
+        #endif\r
+\r
+        #ifdef ENABLE_CYWEE\r
+            uapi_cywee_service_init();\r
+        #endif \r
+\r
+    }\r
+#endif\r
+\r
 #ifdef SUPPORT_ALIPAY_SEC\r
 #if !defined(A5133_DEMO_SERVER) && !defined(A5133_DEMO_CLIENT)\r
     uapi_alipay_svr_init();\r
index f7c9e88..5fdacdb 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com\r
  * @Date: 2024-06-17 14:31:08\r
  * @LastEditors: penglei 1624952103@qq.com\r
- * @LastEditTime: 2024-07-26 16:46:54\r
+ * @LastEditTime: 2024-08-13 09:47:02\r
  * @FilePath: /FD230/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c\r
  * @Description: \r
  * \r
@@ -603,11 +603,9 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
             {\r
                 //打开周期性马达\r
                 uint8_t send_data = 0x00;\r
-\r
-                g_ble_vibrator_timer = osTimerNew((osTimerFunc_t)ble_vibrator_check_timer_callback, osTimerPeriodic, NULL, NULL);\r
-\r
-                osTimerStart(g_ble_vibrator_timer,1000);\r
-\r
+                // g_ble_vibrator_timer = osTimerNew((osTimerFunc_t)ble_vibrator_check_timer_callback, osTimerPeriodic, NULL, NULL);\r
+                // osTimerStart(g_ble_vibrator_timer,1000);\r
+                do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_VIBRATOR_TEST,NULL,0);\r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_VIBRATOR,\r
                         0x03,\r
@@ -618,9 +616,11 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
             {\r
                 //关闭周期性马达\r
                 uint8_t send_data = 0x00;\r
-                osTimerStop(g_ble_vibrator_timer);\r
-                osTimerDelete(g_ble_vibrator_timer);\r
-\r
+                if(g_ble_vibrator_timer != NULL)\r
+                {\r
+                    osTimerStop(g_ble_vibrator_timer);\r
+                    osTimerDelete(g_ble_vibrator_timer);\r
+                }\r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_VIBRATOR,\r
                         0x04,\r
index aa4808b..3b96e97 100644 (file)
@@ -14,6 +14,7 @@ set(SOURCES ${SOURCES}
     ${CMAKE_CURRENT_SOURCE_DIR}/service/cywee_service.c
     ${CMAKE_CURRENT_SOURCE_DIR}/service/cywee_at_cmd.c
     ${CMAKE_CURRENT_SOURCE_DIR}/service/cywee_hal.c
+    ${CMAKE_CURRENT_SOURCE_DIR}/service/cywee_ble_Service.c
 
     # ${CMAKE_CURRENT_SOURCE_DIR}/../acc/lis2doc_STdC/examples/lis2doc_read_data_single.c
     # ${CMAKE_CURRENT_SOURCE_DIR}/../acc/lis2doc_STdC/lis2doc_porting.c
@@ -30,7 +31,7 @@ set(PRIVATE_DEFINES
 )
 
 set(PUBLIC_DEFINES
-SUPPORT_AT_CYWEE
+
 )
 
 # use this when you want to add ccflags like -include xxx
index ad6b1fb..2e05d19 100644 (file)
@@ -520,7 +520,7 @@ cywee_msg_callback_t cywee_get_send_msg_callback_func(void);
 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_hrs_update(int hrs_data);
 void cywee_set_user_info(void);
 void cywee_get_sleep_data(void);
 void cywee_reset_daily_data(void);
index 04227ab..5a4d01b 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-07-05 18:11:57
+ * @LastEditTime: 2024-08-12 12:08:23
  * @FilePath: /FD230/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h
  * @Description: 
  * 
@@ -58,7 +58,7 @@ extern "C" {
 
 #define CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE 0x1F
 #define CYWEE_SERVICE_CMD_ONCHARGING_CHANGE 0x20
-#define CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE 0x21
+#define CYWEE_SERVICE_CMD_HRS_CHANGE 0x21
 
 #define CYWEE_SERVICE_CMD_SEDENTARY_MODE 0x22
 #define CYWEE_SERVICE_CMD_NAP_MODE 0x32
@@ -99,7 +99,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[2]);
+void do_cywee_service_check_msg(int cmd, int *data);
 void cywee_int_callback(pin_t pin, uintptr_t param);
 
 #ifdef __cplusplus
index 68169f5..2849854 100644 (file)
@@ -41,7 +41,7 @@
 typedef struct
 {
     uint8_t cmd;
-    uint8_t data[2];
+    uint8_t data;
 } cywee_cmd_t;
 /***
  * 其他cmd在Header里定义,对外开放
@@ -218,7 +218,7 @@ void uapi_cywee_service_deinit(void)
 }
 static unsigned long g_cywee_queue = 0xFFFFFFFF;
 static uint8_t g_cywee_queue_created = 0;
-void do_cywee_service_check_msg(int cmd, int data[2])
+void do_cywee_service_check_msg(int cmd, int *data)
 {
     int ret;
     
@@ -228,15 +228,10 @@ void do_cywee_service_check_msg(int cmd, int data[2])
     cywee_cmd_t mail = {0};
     mail.cmd = cmd;
     if (data != NULL)
-    {
-        mail.data[0] = data[0];
-        mail.data[1] = data[1];
-    }
+        mail.data = *data;
     else
-    {
-        mail.data[0] = 0;
-        mail.data[1] = 0;
-    }
+        mail.data = 0;
+ 
     ret = osal_msg_queue_write_copy(g_cywee_queue, (void *)&mail, sizeof(cywee_cmd_t), 0);
     if (ret != OSAL_SUCCESS)
     {
@@ -324,15 +319,15 @@ static void cywee_service_check_task(void const *arg)
             break;
 
             case CYWEE_SERVICE_CMD_ONCHARGING_CHANGE:
-                cywee_oncharging_update(mail.data[0]);
+                cywee_oncharging_update(mail.data);
             break;
 
             case CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE:
-                cywee_wearstatus_update(mail.data[0]);
+                cywee_wearstatus_update(mail.data);
             break;
 
-            case CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE:
-                cywee_hrs_wearstatus_update(mail.data[0], mail.data[1]);
+            case CYWEE_SERVICE_CMD_HRS_CHANGE:
+                cywee_hrs_update(mail.data);
             break;
 
             case CYWEE_SERVICE_CMD_SEDENTARY_MODE:
@@ -383,7 +378,7 @@ static void cywee_service_check_task(void const *arg)
             break;
 
             case CYWEE_SERVICE_CMD_SET_SEDENTARY_INTERVAL:
-                cywee_set_sedentary_interval(mail.data[0]);
+                cywee_set_sedentary_interval(mail.data);
             break;
 
             case CYWEE_SERVICE_CMD_SET_USER_INFO:
index 5bde834..957803b 100644 (file)
@@ -239,7 +239,9 @@ void CWM_OS_free(void *ptr)
 int CWM_OS_dbgOutput(const char * format)
 {
     PRINT("%s", format); 
+#if 0
     ble_cywee_server_send_input_report((uint8_t *)format,strlen(format));
+#endif
     return 0;
 }
 
index 80d7e6d..930b49f 100644 (file)
@@ -381,24 +381,14 @@ void cywee_time_sync(void)
     CWM_SettingControl(SCL_DATE_TIME, &scl);
 }
 
-void cywee_hrs_wearstatus_update(int hrs_data,int wearstatus)
+void cywee_hrs_update(int hrs_data)
 {
-    uint8_t wear_status = 0;
     hrs = hrs_data;
-    wear_status = wearstatus;
     CWM_OS_dbgPrintf("hrs : %d\r\n",hrs);
-    CWM_OS_dbgPrintf("wear_status : %d\r\n",wear_status);
-
     memset(&csd, 0, sizeof(CUSTOM_HEARTRATE));
     csd.sensorType = CUSTOM_HEARTRATE;
     csd.fData[0] = hrs;
-    CWM_CustomSensorInput(&csd);
-
-    memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT));
-    csd.sensorType = CUSTOM_OFFBODY_DETECT;
-    csd.fData[0] = wear_status;
-    CWM_CustomSensorInput(&csd);
-    
+    CWM_CustomSensorInput(&csd); 
 }
 
 void cywee_oncharging_update(int oncharging_status)
@@ -464,6 +454,13 @@ void cywee_inactivity_mode_change(int mode)
         //睡眠
         case INACTIVITY_MODE_SLEEPING:
             CWM_OS_dbgPrintf("INACTIVITY_MODE_SLEEPING\r\n");  
+            
+            //设置睡眠
+            memset(&scl, 0, sizeof(scl));
+            scl.iData[0] = 1;
+            scl.iData[2] = 1; // 0.不使用心率 1.使用心率
+            CWM_SettingControl(SCL_SLEEP_CONFIG, &scl);
+
             memset(&scl, 0, sizeof(scl));
             scl.iData[0] = 1;
             scl.iData[1] = 2;
@@ -1110,10 +1107,6 @@ int cywee_main_dml(void)
     scl.iData[0] = 1;
     CWM_SettingControl(SCL_ACTIVITY_CONFIG, &scl);
 
-    //设置睡眠
-    memset(&scl, 0, sizeof(scl));
-    scl.iData[0] = 1;
-    CWM_SettingControl(SCL_SLEEP_CONFIG, &scl);
 
     //设置久坐
     memset(&scl, 0, sizeof(scl));
@@ -1132,13 +1125,14 @@ int cywee_main_dml(void)
     scl.iData[1] = 1;// 0 关闭运动识别  1 打开运动识别
     CWM_SettingControl(SCL_AR_ALERT_CONFIG, &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); 
-
+#if 0
+    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); 
+#endif
 
     //呼叫任一個CWM_Sensor_Enable 前呼叫此指令 设置手动或自动模式
     memset(&scl, 0, sizeof(scl));
index ba94083..29d3cc8 100644 (file)
@@ -123,8 +123,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 cywee_data[2] = {0};\r
-\r
+static int cywee_data = 0;\r
 int wear_mode_status = -1;\r
 \r
 static uint8_t hx3695_chip_id = 0;\r
@@ -2706,26 +2705,23 @@ static void get_avg_hrs(int32_t hrs)
                 max_hrs = hrs_data[i];\r
         }\r
         avg_hrs = (sum_hrs - max_hrs - min_hrs) / (hrs_num - 2);\r
-    }\r
-\r
-    hx3695_msg_callback_t func =  hx3695_get_send_msg_callback_func();\r
-    if(func != NULL)\r
-    {\r
-      hrsresult.lastesthrs = avg_hrs;\r
-      func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
-      func(HX3695_MSG_TYPE_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
-      if(uapi_get_cywee_static_state())\r
-      {\r
-          func(HX3695_MSG_TYPE_STATIC_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
-      }\r
-    }\r
-    \r
-    if(hrs_mode_state)\r
-    {\r
-        cywee_data[0] = hrsresult.lastesthrs;\r
-        cywee_data[1] = hrsresult.wearstatus;\r
-\r
-        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE,cywee_data);\r
+        //PRINT("max_hrs[%d],min_hrs[%d],avg_hrs[%d]\n",max_hrs,min_hrs,avg_hrs);\r
+        hx3695_msg_callback_t func =  hx3695_get_send_msg_callback_func();\r
+        if(func != NULL)\r
+        {\r
+          hrsresult.lastesthrs = avg_hrs;\r
+          func(HX3695_MSG_TYPE_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
+          if(uapi_get_cywee_static_state())\r
+          {\r
+              func(HX3695_MSG_TYPE_STATIC_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
+          }\r
+        }\r
+        \r
+        if(hrs_mode_state || uapi_dev_runtime_get_sleep_status() == 1)\r
+        {\r
+            cywee_data = hrsresult.lastesthrs;\r
+            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_HRS_CHANGE,&cywee_data);\r
+        }\r
     }\r
 }\r
 \r
@@ -2802,38 +2798,39 @@ void hx3695_hrs_ppg_Int_handle(void)
        // result.ir_data_final = hrs_s_dat.ir_data[0];\r
        // hx3695_factory_test_process(NULL, APP_FACTORY_TEST_HR_START, &result);\r
     //PRINT("*count : %d \r\n",*count);\r
-    if(*count < 10)\r
+    if(*count < 7 || *count > 9)\r
     {\r
-        memset(gsensordata,0.0f,sizeof(gsenson_t) * 8);\r
+        return;\r
+    }\r
+    memset(gsensordata,0.0f,sizeof(gsenson_t) * 8);\r
 \r
-        gsensor_get_n_data(8,gsensordata);  \r
+    gsensor_get_n_data(8,gsensordata);  \r
 \r
-       for(ii=0; ii<*count; ii++)\r
-       {\r
-          if(ii == 8)\r
-          {\r
-              gsen_fifo_x_send[ii] = gsen_fifo_x_send[ii - 1];\r
-              gsen_fifo_y_send[ii] = gsen_fifo_y_send[ii - 1];\r
-              gsen_fifo_z_send[ii] = gsen_fifo_z_send[ii - 1];\r
-          }\r
-          else\r
-          {\r
-              gsen_fifo_x_send[ii] = gsensordata[ii].x * 4096 / 10;\r
-              gsen_fifo_y_send[ii] = gsensordata[ii].y * 4096 / 10;\r
-              gsen_fifo_z_send[ii] = gsensordata[ii].z * 4096 / 10;\r
-          }\r
-          //PRINT("hxdata:%d/%d %d %d %.3f %.3f %.3f %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsen_fifo_x_send[ii],gsen_fifo_y_send[ii],gsen_fifo_z_send[ii],ppg_s_data.green_cur);\r
-          //PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsen_fifo_x_send[ii],gsen_fifo_y_send[ii],gsen_fifo_z_send[ii],ppg_s_data.green_cur);\r
-\r
-       }\r
-      hrs_wear_status = hx3695_hrs_get_wear_status();\r
-      //PRINT("hrs_wear_status:    %d !!\r\n", hrs_wear_status);\r
-    \r
-      if(hrs_wear_status == MSG_HRS_WEAR)\r
+    for(ii=0; ii<*count; ii++)\r
+    {\r
+      if(ii == 8)\r
       {\r
-          tyhx_hrs_alg_send_data(PPG_buf, *count, gsen_fifo_x_send, gsen_fifo_y_send, \r
-          gsen_fifo_z_send, cal.Group1_Ledidac);\r
+          gsen_fifo_x_send[ii] = gsen_fifo_x_send[ii - 1];\r
+          gsen_fifo_y_send[ii] = gsen_fifo_y_send[ii - 1];\r
+          gsen_fifo_z_send[ii] = gsen_fifo_z_send[ii - 1];\r
       }\r
+      else\r
+      {\r
+          gsen_fifo_x_send[ii] = gsensordata[ii].x * 4096 / 10;\r
+          gsen_fifo_y_send[ii] = gsensordata[ii].y * 4096 / 10;\r
+          gsen_fifo_z_send[ii] = gsensordata[ii].z * 4096 / 10;\r
+      }\r
+      //PRINT("hxdata:%d/%d %d %d %.3f %.3f %.3f %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsen_fifo_x_send[ii],gsen_fifo_y_send[ii],gsen_fifo_z_send[ii],ppg_s_data.green_cur);\r
+      //PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsen_fifo_x_send[ii],gsen_fifo_y_send[ii],gsen_fifo_z_send[ii],ppg_s_data.green_cur);\r
+\r
+    }\r
+    hrs_wear_status = hx3695_hrs_get_wear_status();\r
+    //PRINT("hrs_wear_status:    %d !!\r\n", hrs_wear_status);\r
+\r
+    if(hrs_wear_status == MSG_HRS_WEAR)\r
+    {\r
+        tyhx_hrs_alg_send_data(PPG_buf, *count, gsen_fifo_x_send, gsen_fifo_y_send, \r
+        gsen_fifo_z_send, cal.Group1_Ledidac);\r
     }\r
 #endif\r
 \r
@@ -2859,8 +2856,8 @@ void hx3695_hrs_ppg_Int_handle(void)
 //        #endif\r
 //        }\r
        \r
-       uint8_t curr_wear = 1;\r
-       //uint8_t last_wear = cwm_get_wear_status();\r
+    uint8_t curr_wear = 1;\r
+    //uint8_t last_wear = cwm_get_wear_status();\r
 \r
     alg_results = tyhx_hrs_alg_get_results();\r
     hrsresult.lastesthrs = alg_results.hr_result;\r
@@ -2868,8 +2865,27 @@ void hx3695_hrs_ppg_Int_handle(void)
     hrsresult.hr_living_qu = alg_results.hr_result_qual;\r
     hrsresult.hr_living_std = alg_results.hr_result_std;\r
     hrsresult.wearstatus = hrs_wear_status;\r
-    if(hrsresult.lastesthrs > 50)\r
-                   get_avg_hrs(hrsresult.lastesthrs);\r
+\r
+    if(hrs_wear_status == MSG_HRS_WEAR && hrsresult.hr_living == MSG_LIVING_TRUE)\r
+    {\r
+        if(hrsresult.lastesthrs > 50)\r
+                     get_avg_hrs(hrsresult.lastesthrs);\r
+        hrsresult.wearstatus = MSG_HRS_WEAR;\r
+    }\r
+    else\r
+    {\r
+        hrsresult.wearstatus = MSG_HRS_NO_WEAR;\r
+    }\r
+    hx3695_msg_callback_t func =  hx3695_get_send_msg_callback_func();\r
+    if(func != NULL)\r
+        func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
+\r
+    if(wear_mode_status != hrsresult.wearstatus)\r
+    {\r
+        wear_mode_status = hrsresult.wearstatus;\r
+        cywee_data = wear_mode_status;\r
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&cywee_data);\r
+    }\r
     //PRINT("hx3695 data_cnt: %d,  hr_living: %d, hr_living_qu: %d, hr_living_std: %d, hr_result:%d \r\n",\r
                //alg_results.data_cnt,  hrsresult.hr_living, hrsresult.hr_living_qu, hrsresult.hr_living_std, hrsresult.lastesthrs);\r
 \r
@@ -3238,51 +3254,52 @@ void hx3695_spo2_ppg_Int_handle(void)
 #ifndef GSEN_40MS_TIMMER\r
 //    readFifoByHrsModule();\r
 #endif\r
-        DEBUG_PRINTF("\r\n send1  jlink cnt=%d\r\n",*count);   \r
+        //DEBUG_PRINTF("\r\n send1  jlink cnt=%d\r\n",*count); \r
   \r
   /*屏蔽*/\r
     //("*count[%d] \r\n",*count);\r
-    if(*count < 10)\r
+    if(*count < 7 || *count > 9)\r
+    {\r
+        return;\r
+    }\r
+    //gsensor_get_n_data(8,gsensordata);\r
+    for(ii=0; ii<*count; ii++)\r
     {\r
-       //gsensor_get_n_data(8,gsensordata);\r
-       for(ii=0; ii<*count; ii++)\r
-       {\r
- \r
-          // if(ii == 8)\r
-          // {\r
-          //     gsen_fifo_x_send[ii] = gsen_fifo_x_send[ii - 1];\r
-          //     gsen_fifo_y_send[ii] = gsen_fifo_y_send[ii - 1];\r
-          //     gsen_fifo_z_send[ii] = gsen_fifo_z_send[ii - 1];\r
-          // }\r
-          // else\r
-          // {\r
-          //     gsen_fifo_x_send[ii] = gsensordata[ii].x * 2048;\r
-          //     gsen_fifo_y_send[ii] = gsensordata[ii].y * 2048;\r
-          //     gsen_fifo_z_send[ii] = gsensordata[ii].z * 2048;\r
-          // }\r
-          //("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_send[ii],gsen_fifo_y_send[ii],gsen_fifo_z_send[ii]);\r
-          //printf("FFF==>spo2  red_buf : %d,  %d,  %d,        %d \n", 1+ii, *count, red_buf[ii], ir_buf[0]);\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
-\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
-        //("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
+      // if(ii == 8)\r
+      // {\r
+      //     gsen_fifo_x_send[ii] = gsen_fifo_x_send[ii - 1];\r
+      //     gsen_fifo_y_send[ii] = gsen_fifo_y_send[ii - 1];\r
+      //     gsen_fifo_z_send[ii] = gsen_fifo_z_send[ii - 1];\r
+      // }\r
+      // else\r
+      // {\r
+      //     gsen_fifo_x_send[ii] = gsensordata[ii].x * 2048;\r
+      //     gsen_fifo_y_send[ii] = gsensordata[ii].y * 2048;\r
+      //     gsen_fifo_z_send[ii] = gsensordata[ii].z * 2048;\r
+      // }\r
+      //("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_send[ii],gsen_fifo_y_send[ii],gsen_fifo_z_send[ii]);\r
+      //printf("FFF==>spo2  red_buf : %d,  %d,  %d,    %d \n", 1+ii, *count, red_buf[ii], ir_buf[0]);\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
+\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
+    //("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
 #endif\r
@@ -3625,12 +3642,11 @@ void hx3695_wear_ppg_Int_handle(void)
        \r
     hx3695_check_touch_read(&ppg_s_data);\r
     hx3695_wear_status = hx3695_check_touch_send_data(ir_buf,*count);\r
-    hrsresult.wearstatus = hx3695_wear_status;\r
     // PRINT("hx3695_wear_status : %d \r\n",hx3695_wear_status);\r
     if(wear_mode_status != hx3695_wear_status)\r
     {\r
         wear_mode_status = hx3695_wear_status;\r
-        cywee_data[0] = wear_mode_status;\r
+        cywee_data = wear_mode_status;\r
         do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&cywee_data);\r
     }\r
 \r
index 202688d..cacb663 100644 (file)
@@ -68,7 +68,7 @@ static bool ppg_service_running_stat = false;
 static bool ppg_sensor_exist = false;
 
 static uint8_t wear_mode_state = 0;
-static uint8_t keep_in_wear_det_mod = 1; //持续坚持 佩戴检测模式
+static uint8_t keep_in_wear_det_mod = 0; //持续坚持 佩戴检测模式
 
 
 void set_keep_in_wear_det_mode(uint8_t mod)
index 8353b9b..ca43334 100644 (file)
@@ -191,6 +191,9 @@ static void custom_cmd_service_check_task(void const *arg)
                 uapi_factorytest_enter_test_view(0);
             }
             break;
+        case CUSTOM_CMD_MSG_TYPE_VIBRATOR_TEST:
+            uapi_vibrator_test(2 * 60 * 60);
+            break;
         default:
             PRINT("Unknown CUSTOM_CMD_MSG cmd 0x%02X \r\n", mail.cmd);
             break;
index 9514c42..0ad7f73 100644 (file)
@@ -203,6 +203,7 @@ uint32_t uapi_calendar_store_date(void);
 #define CUSTOM_CMD_MSG_TYPE_LCD_COLOR_TEST 0x08
 #define CUSTOM_CMD_MSG_TYPE_TP_TEST 0x09
 #define CUSTOM_CMD_MSG_TYPE_CROWN_TEST 0x0A
+#define CUSTOM_CMD_MSG_TYPE_VIBRATOR_TEST 0x0B
 
 errcode_t uapi_custom_cmd_service_init(void);
 void do_custom_cmd_service_check_msg(int cmd, void *params, int paramlen);
index 3519938..a81a165 100644 (file)
@@ -1049,6 +1049,32 @@ static uint32_t BLE_TEST(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
     case 0:
        //delete_before_file(atoi( (char *)argv[1]));
         break;
+    case 1:
+        uapi_reconnect();
+        break;
+    // case 2:
+    //     custom_ble_service_start();
+    //     break;
+    case 3:
+        custom_ble_service_start_(atoi( (char *)argv[1]));
+        break;
+    case 4:
+        uapi_a2dp_snk_connect();
+        break;
+    // case 5:
+    //     svr_ble_adv_stop();
+    //     break;
+    // case 6:
+    //     uapi_disconnect_remote_device();
+    //     break;
+    // case 7:
+    //     uapi_ble_disconnect_device();
+    //     break;
+        
+    //  case 3:
+    //     gap_br_set_bt_scan_mode(GAP_SCAN_MODE_NONE, 20);;
+    //     break;
+     
     default:
         break;
     }
@@ -1057,6 +1083,33 @@ static uint32_t BLE_TEST(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
     return ERRCODE_SUCC;
 }
 
+static uint32_t custom_volume_test(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+
+    UNUSED(strCommonCmd);
+    uint8_t argv[CUSTOM_UTILS_MAX_ARGC][CUSTOM_UTILS_MAX_ARGV_LEN] = { 0 };
+    uint32_t argc = 0;
+    uint8_t send_data[8] = {0};
+
+
+    int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+    if (ret != CUSTOM_UTILS_SUCCESS) {
+        wstp_print("CUSTOM_UTILSTEST ATCMD Convert Command Failed\n");
+        return ERRCODE_FAIL;
+    }
+
+    if (argc != 2) {
+        wstp_print("CUSTOM_UTILSTEST power_test ATCMD Set Parameter Failed argc %d\r\nPM_DSP_POWER_UP_AND_RUN=2  PM_DSP_POWER_OFF=3\r\n",argc);
+        return ERRCODE_FAIL;
+    }
+
+    uint8_t channel = atol((char*)argv[0]);
+    int32_t sounding = atol((char*)argv[1]);
+
+    custom_set_volume(channel,sounding);
+
+    return ERRCODE_SUCC;
+}
 
 static const at_cmd_table_t g_custom_utils_cmd[] = {
     { (char *)"AT^CUSTOM_SN",      custom_utils_setsn, (char *)"123456789ABCDEF2345678" },
@@ -1131,6 +1184,7 @@ static const at_cmd_table_t g_custom_utils_cmd[] = {
     { (char *)"AT^PBAP_PULL",      PBAP_PULL, (char *)" " },
     { (char *)"AT^PBAP_LS",      PBAP_LS, (char *)" " },
     { (char *)"AT^BLE_TEST",      BLE_TEST, (char *)" " },
+    { (char *)"AT^SETVOLUME",      custom_volume_test, (char *)" " },
 };
 
 
index 61bc663..ecad631 100644 (file)
@@ -19,6 +19,9 @@
 // #include "thread_adapter.h"
 #include "graphic_service.h"
 
+#include "audio_manager.h"
+#include "audio_base_type.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
@@ -62,6 +65,8 @@ extern "C" {
 
 #include "upg_alloc.h"
 
+
+
 #define IN_BUF_SIZE (1 << 8)
 #define OUT_BUF_SIZE (1 << 8)
 
@@ -297,6 +302,31 @@ void CustomEventPublish(uint16_t topic, uint8_t *data , uint32_t size)
     return;
 }
 
+void custom_set_volume(uint8_t channel,int32_t sounding)
+{
+      WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "audio volume = %d", sounding);
+      AudioStreamType stream;
+      switch(channel)
+      {
+          case 0:
+            stream = AUDIO_STREAM_A2DP_MUSIC;
+            break;
+          case 1:
+            stream = AUDIO_STREAM_VOICE_CALL_VOLTE;
+            break;
+          case 2:
+            stream = AUDIO_STREAM_VOICE_CALL;
+            break;
+          case 3:
+            stream = AUDIO_STREAM_VOICE_CALL_BT_SCO;
+          default:
+            break;
+      }
+      Audio::AudioManager::GetInstance().SetVolume(stream, sounding); // 本地音量设置
+}
+
+
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
\ No newline at end of file
index 410b688..b418686 100644 (file)
@@ -1,3 +1,13 @@
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2024-07-09 20:22:54
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2024-08-10 12:13:13
+ * @FilePath: /FD230/code/sdk/drivers/peripheral/utilscpp/custom_utilscpp.h
+ * @Description: 
+ * 
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. 
+ */
 /**
  * Copyright (c) @CompanyNameMagicTag 2023-2023. All rights reserved. \n
  *
@@ -18,6 +28,7 @@ errcode_t uapi_dial_pkg_decompress(const char* dial_pkg_path,char* dial_bin_path
 void uapi_dump_meminfo(void);
 
 void CustomEventPublish(uint16_t topic, uint8_t *data , uint32_t size);
+void custom_set_volume(uint8_t channel,int32_t sounding);
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */