优化蓝牙产测,解决cywee I2C异常问题,完善运动模式功能。 158/1 158/head 159/target/1 160/target/1 161/target/1 162/target/1 163/target/1
authorpenglei <1624952103@qq.com>
Fri, 10 May 2024 04:29:48 +0000 (12:29 +0800)
committerpenglei <1624952103@qq.com>
Fri, 10 May 2024 04:29:48 +0000 (12:29 +0800)
code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c
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_hal.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
code/sdk/middleware/chips/brandy/pm/pm_adapt/pm_core.c

index 3803d2b..f13de90 100644 (file)
@@ -862,7 +862,7 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                 //LCD显示颜色\r
                 uint8_t send_data = 0x00;\r
                 char *color_buf[5] ={"0Xffff0000","0xff00ff00","0xff0000ff","0xffffffff","0xff000000"};\r
-                mcu_pm_lcd_on(0,0);\r
+                ScreenAlwaysOnCtr(1);\r
                 switch (*data)\r
                 {\r
                     case 1:\r
index 50ece22..f5b11ab 100644 (file)
@@ -501,8 +501,13 @@ 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);
+void cywee_set_user_info(int user_info[5]);
 void cywee_get_sleep_data(void);
+void cywee_reset_daily_data(void);
+void cyw_inactivity_mode_change(int mode);
+void cyw_activity_mode_change(int mode);
+void cywee_hand_updown_switch(int cmd);
+void cywee_ar_alert_switch(int cmd);
 
 extern uint8_t hrs_mode_state;
 
@@ -526,14 +531,6 @@ extern uint8_t hrs_mode_state;
 int cywee_main_dml(void);
 void cywee_int_handler(void);
 
-void cywee_set_user_info(int age,int gender,int weight,int height,int wearing_method);
-void cywee_reset_daily_data(void);
-void cywee_get_sleep_data(void);
-
-void cyw_inactivity_mode_change(int mode);
-void cyw_activity_mode_change(int mode);
-
-void hand_updown_switch(int cmd);
 
 
 
index c303064..e8ea39f 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-22 21:02:15
+ * @LastEditTime: 2024-05-10 12:22:41
  * @FilePath: /FD230/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h
  * @Description: 
  * 
@@ -67,6 +67,16 @@ extern "C" {
 #define CYWEE_SERVICE_CMD_OPEN_HAND_UPDOWN 0x25
 #define CYWEE_SERVICE_CMD_CLOSE_HAND_UPDOWN 0x26
 
+#define CYWEE_SERVICE_CMD_OPEN_AR_ALERT 0x27
+#define CYWEE_SERVICE_CMD_CLOSE_AR_ALERT 0x28
+
+#define CYWEE_SERVICE_CMD_TIME_SYNC 0x29
+
+#define CYWEE_SERVICE_CMD_GET_SLEEP_DATA 0x2A
+
+#define CYWEE_SERVICE_CMD_RESET_DAILY_DATA 0x2B
+
+
 errcode_t uapi_cywee_service_init(void);
 void uapi_cywee_service_deinit(void);
 
index 735823e..1ac1f72 100644 (file)
@@ -355,12 +355,33 @@ static void cywee_service_check_task(void const *arg)
         }
         else if (mail.cmd == CYWEE_SERVICE_CMD_OPEN_HAND_UPDOWN)
         {
-            hand_updown_switch(1);
+            cywee_hand_updown_switch(1);
         }
         else if (mail.cmd == CYWEE_SERVICE_CMD_CLOSE_HAND_UPDOWN)
         {
-            hand_updown_switch(0);
+            cywee_hand_updown_switch(0);
         }
+        else if (mail.cmd == CYWEE_SERVICE_CMD_OPEN_AR_ALERT)
+        {
+            cywee_ar_alert_switch(1);
+        }
+        else if (mail.cmd == CYWEE_SERVICE_CMD_CLOSE_AR_ALERT)
+        {
+            cywee_ar_alert_switch(0);
+        }
+        else if (mail.cmd == CYWEE_SERVICE_CMD_TIME_SYNC)
+        {
+            cywee_time_sync();
+        }
+        else if (mail.cmd == CYWEE_SERVICE_CMD_GET_SLEEP_DATA)
+        {
+            cywee_get_sleep_data();
+        }
+        else if (mail.cmd == CYWEE_SERVICE_CMD_RESET_DAILY_DATA)
+        {
+            cywee_reset_daily_data();
+        }
+        
     }
 }
 #define CYWEE_APP_BOARD_MSG_COUNT 50
index 772c6ca..900570e 100644 (file)
@@ -41,7 +41,16 @@ static uint8_t hrs = 0;
 
 uint8_t hrs_mode_state = 0;
 
-void hand_updown_switch(int cmd)
+void cywee_ar_alert_switch(int cmd)
+{
+    memset(&scl, 0, sizeof(scl));
+    scl.iData[0] = 1;
+    scl.iData[1] = cmd;
+    CWM_SettingControl(SCL_AR_ALERT_CONFIG, &scl);
+}
+
+
+void cywee_hand_updown_switch(int cmd)
 {
     if(cmd == 1)
         CWM_Sensor_Enable(IDX_ALGO_WATCH_HANDUP);
@@ -56,27 +65,35 @@ void cywee_reset_daily_data(void)
     CWM_SettingControl(SCL_RESET_DAILY_INFO, &scl);
 }
 
-
+//INT[1] : 0 立即输出,但不中止睡眠。 1 立即输出且中止睡眠
 void cywee_get_sleep_data(void)
 {
     memset(&scl, 0, sizeof(scl));
     scl.iData[0] = 1;
-    scl.iData[1] = 0; //0 立即输出,但不中止睡眠。 1 立即输出且中止睡眠
+    scl.iData[1] = 0;
     CWM_SettingControl(SCL_REQ_SLEEPING_DATA, &scl);
 }
 
-void cywee_set_user_info(int age,int gender,int weight,int height,int wearing_method)
+void cywee_set_user_info(int user_info[5])
 {
     memset(&scl, 0, sizeof(scl));
     scl.iData[0] = 1;
-    scl.iData[1] = age;
-    scl.iData[2] = gender;
-    scl.iData[3] = weight;
-    scl.iData[4] = height;
-    scl.iData[5] = wearing_method;
+    scl.iData[1] = user_info[0];
+    scl.iData[2] = user_info[1];
+    scl.iData[3] = user_info[2];
+    scl.iData[4] = user_info[3];
+    scl.iData[5] = user_info[4];
     CWM_SettingControl(SCL_USER_INFO, &scl);
 }
 
+/*
+    int year ;// int[1] = year     (1900 - 2100)
+    int month;// int[2] = month  (1 - 12)
+    int day;// int[3] = day      (1 - 31)
+    int hour;// int[4] = hour     (0 - 23)
+    int minute;// int[5] = minute (0 - 59)
+    int second;// int[6] = second (0 - 59)
+*/
 void cywee_time_sync(void)
 {
     time_t rawtime;
@@ -150,7 +167,7 @@ void cyw_inactivity_mode_change(int mode)
     cywee_time_sync();
     switch (mode)
     {
-        //無作用
+        //无作用
         case INACTIVITY_MODE_NOTHING:
             memset(&scl, 0, sizeof(scl));
             scl.iData[0] = 1;
@@ -169,6 +186,7 @@ void cyw_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[1] = 2;
@@ -177,6 +195,7 @@ void cyw_inactivity_mode_change(int mode)
 
         //久坐、有效站立和小睡
         case INACTIVITY_MODE_SEDENTARY_AND_NAP:
+            CWM_OS_dbgPrintf("INACTIVITY_MODE_SEDENTARY_AND_NAP\r\n");
             memset(&scl, 0, sizeof(scl));
             scl.iData[0] = 1;
             scl.iData[1] = 3;
@@ -185,6 +204,7 @@ void cyw_inactivity_mode_change(int mode)
 
         //小睡
         case INACTIVITY_MODE_NAP:
+            CWM_OS_dbgPrintf("INACTIVITY_MODE_NAP\r\n");
             memset(&scl, 0, sizeof(scl));
             scl.iData[0] = 1;
             scl.iData[1] = 4;
@@ -211,7 +231,7 @@ void cyw_activity_mode_change(int mode)
 
         //跑步机
         case SPORT_ACTIVE_MODE_TREADMILL:
-              PRINT("SPORT_ACTIVE_MODE_TREADMILL\r\n");
+            PRINT("SPORT_ACTIVE_MODE_TREADMILL\r\n");
             memset(&scl, 0, sizeof(scl));
             scl.iData[0] = 1;
             scl.iData[1] = SPORT_ACTIVE_MODE_TREADMILL;
@@ -220,7 +240,7 @@ void cyw_activity_mode_change(int mode)
 
         //户外跑步
         case SPORT_ACTIVE_MODE_OUTDOOR_RUNNING:
-              PRINT("SPORT_ACTIVE_MODE_OUTDOOR_RUNNING\r\n");
+            PRINT("SPORT_ACTIVE_MODE_OUTDOOR_RUNNING\r\n");
             memset(&scl, 0, sizeof(scl));
             scl.iData[0] = 1;
             scl.iData[1] = SPORT_ACTIVE_MODE_OUTDOOR_RUNNING;
@@ -229,7 +249,7 @@ void cyw_activity_mode_change(int mode)
 
         //室内跑步
         case SPORT_ACTIVE_MODE_INDOOR_RUNNING:
-              PRINT("SPORT_ACTIVE_MODE_INDOOR_RUNNING\r\n");
+            PRINT("SPORT_ACTIVE_MODE_INDOOR_RUNNING\r\n");
             memset(&scl, 0, sizeof(scl));
             scl.iData[0] = 1;
             scl.iData[1] = SPORT_ACTIVE_MODE_INDOOR_RUNNING;
@@ -246,7 +266,7 @@ void cyw_activity_mode_change(int mode)
 
         //自由运动
         case SPORT_ACTIVE_MODE_FREE_TRAINING:
-              PRINT("SPORT_ACTIVE_MODE_FREE_TRAINING\r\n");
+            PRINT("SPORT_ACTIVE_MODE_FREE_TRAINING\r\n");
             memset(&scl, 0, sizeof(scl));
             scl.iData[0] = 1;
             scl.iData[1] = SPORT_ACTIVE_MODE_FREE_TRAINING;
@@ -392,9 +412,22 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
             {
                 CWM_OS_dbgPrintf("CUSTOM_OFFBODY_DETECT !!! \r\n");
                 if((int)sensorEVT->fData[2] == 1)
+                {
+                    memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT));
+                    csd.sensorType = CUSTOM_OFFBODY_DETECT;
+                    csd.fData[0] = 1;
+                    CWM_CustomSensorInput(&csd);
                     send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_WEAR_MODE_TEST); 
+                }
                 else
+                {
+                    memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT));
+                    csd.sensorType = CUSTOM_OFFBODY_DETECT;
+                    csd.fData[0] = 0;
+                    CWM_CustomSensorInput(&csd);
                     send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_WEAR_MODE_TEST); 
+                }
+
             }
             if((int)sensorEVT->fData[1] == CUSTOM_ON_CHARGING)
             {
@@ -405,7 +438,14 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
                     csd.sensorType = CUSTOM_ON_CHARGING;
                     csd.fData[0] = 0;
                     CWM_CustomSensorInput(&csd);
-                }   
+                }  
+                else
+                {
+                    memset(&csd, 0, sizeof(CUSTOM_ON_CHARGING));
+                    csd.sensorType = CUSTOM_ON_CHARGING;
+                    csd.fData[0] = 1;
+                    CWM_CustomSensorInput(&csd);
+                }
             }
             if((int)sensorEVT->fData[1] == CUSTOM_HEARTRATE)
             {
@@ -825,6 +865,10 @@ int cywee_main_dml(void)
     scl.iData[0] = 1;
     CWM_SettingControl(SCL_INACTIVITY_CONFIG, &scl);
 
+    memset(&scl, 0, sizeof(scl));
+    scl.iData[0] = 1;
+    scl.iData[1] = 1;
+    CWM_SettingControl(SCL_AR_ALERT_CONFIG, &scl);
 
     // memset(&scl, 0, sizeof(scl));
     // scl.iData[0] = 1;
@@ -863,6 +907,8 @@ int cywee_main_dml(void)
     
     cyw_inactivity_mode_change(INACTIVITY_MODE_SEDENTARY);
 
+    //cyw_inactivity_mode_change(INACTIVITY_MODE_SLEEPING);
+
     return 0;
 }
 
index 7108c54..613a606 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com
  * @Date: 2024-03-13 15:08:38
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-04-30 09:36:27
+ * @LastEditTime: 2024-05-10 12:19:56
  * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c
  * @Description: 
  * 
@@ -66,7 +66,7 @@ void ppg_send_cmd_to_driver(char* mode, uint8_t enable)
         // ppg_service_running_stat = true;
         uapi_pm_control(PM_APP_WAKE_NEEDED);
         tyhx_poweron();
-        custom_i2c_reset();
+        //custom_i2c_reset();
         hx3695_init(md);
     } else {
 
index 3e583cf..3de235e 100644 (file)
@@ -28,7 +28,7 @@
 #include <dirent.h>
 #include <unistd.h>
 #include "custom_runtime.h"
-
+#include "pm_definition.h"
 
 #define SUPPORT_NV
 
@@ -1602,11 +1602,14 @@ errcode_t custom_iic_init(void)
 
 errcode_t custom_i2c_read_regs(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *readData, int readDataSize, int busIndex)
 {
+   
+    uapi_pm_add_sleep_veto(PM_ID_GSENSOR);
+    
     errcode_t ret;
     uint32_t retry;
     i2c_data_t data;
     uint8_t *write_data = NULL;
-    // custom_iic_init();
+    // custom_i2c_init();
 
     write_data = (uint8_t *)osal_kmalloc(regLength, OSAL_GFP_KERNEL);
     if (write_data == NULL) {
@@ -1639,11 +1642,15 @@ errcode_t custom_i2c_read_regs(uint16_t slaveAddr, uint16_t reg, int regLength,
     }
     osal_kfree(write_data);
 error:
+
+    uapi_pm_remove_sleep_veto(PM_ID_GSENSOR);
+    
     return (ret>0) ? ret*-1: ret;
 }
 
 errcode_t custom_i2c_write_reg(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *writeData, int writeDataSize, int busIndex)
 {
+    uapi_pm_add_sleep_veto(PM_ID_GSENSOR);
     errcode_t ret;
     uint32_t retry;
     i2c_data_t data;
@@ -1652,7 +1659,7 @@ errcode_t custom_i2c_write_reg(uint16_t slaveAddr, uint16_t reg, int regLength,
     uint8_t *data_buf=writeData;
     uint16_t data_len=writeDataSize;
     
-    //custom_iic_init();
+    //custom_i2c_init();
     send_len = data_len + regLength;
     write_data = (uint8_t *)osal_kmalloc(send_len, OSAL_GFP_KERNEL);
     if (write_data == NULL) {
@@ -1690,9 +1697,11 @@ errcode_t custom_i2c_write_reg(uint16_t slaveAddr, uint16_t reg, int regLength,
 free_mem:
     osal_kfree(write_data);
 error:
+    uapi_pm_remove_sleep_veto(PM_ID_GSENSOR);
     return (ret>0) ? ret*-1: ret;
 }
 
+
 errcode_t custom_i2c_transfer(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *writeData, int writeDataSize, uint8_t *readData, int readDataSize, int busIndex)
 {
     errcode_t ret;
@@ -1787,12 +1796,39 @@ void uapi_exit_power_saving_mode(void)
     
 }
 
-void uapi_get_sleeping_data(void)
+
+//cywee获取睡眠数据
+void uapi_cywee_get_sleep_data(void)
+{
+    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_GET_SLEEP_DATA,NULL);
+}
+
+/*
+cywee设置用户信息
+0:gender;
+1:weight;
+2:height;
+3:Wearing_method;
+4:Wearing method (配戴方式) (default: 左手) (0: 左手  1: 右手) 
+*/
+void uapi_cywee_set_user_info(int user_info[5])
+{
+    cywee_set_user_info(user_info);
+}
+
+//cywee清空每日数据
+void uapi_cywee_reset_daily_data(void)
+{
+    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESET_DAILY_DATA,NULL);
+}
+
+//cywee时间更新
+void uapi_cywee_time_sync(void)
 {
-    cywee_get_sleep_data();
+    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TIME_SYNC,NULL);
 }
 
-void cywee_get_id(void)
+void uapi_cywee_get_id(void)
 {
     uint8_t id = 0;
     custom_i2c_read_regs(0x19,0x0FU,1,&id,1,I2C_BUS_2);
index b9caa57..725584b 100644 (file)
@@ -165,14 +165,12 @@ errcode_t custom_i2c_transfer(uint16_t slaveAddr, uint16_t reg, int regLength, u
 uint32_t custom_i2c_suspend(void);
 uint32_t custom_i2c_resume(void);
 
-void uapi_get_sleeping_data(void);
-void cywee_get_id(void);
+void uapi_cywee_get_id(void);
 int custom_exit_lpm(void);
 
-void uapi_exit_power_saving_mode(void);
-void uapi_enter_power_saving_mode(void);
-
-
+void uapi_cywee_get_sleep_data(void);
+void uapi_cywee_set_user_info(int user_info[5]);
+void uapi_cywee_time_sync(void);
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 5e78446..56c3fcd 100644 (file)
@@ -393,18 +393,17 @@ static uint32_t custom_iic_reset(uint8_t *para, uint32_t paraLen, char *strCommo
 }
 
 
-
 static uint32_t custom_get_cywee_id(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
 {
 
     UNUSED(strCommonCmd);
 
-    cywee_get_id();
+    uapi_cywee_get_id();
  
     return ERRCODE_SUCC;
 }
 
-static uint32_t custom_alipay_exit_test(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+static uint32_t custom_alipay_test(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
 {
 
     UNUSED(strCommonCmd);
@@ -414,7 +413,25 @@ static uint32_t custom_alipay_exit_test(uint8_t *para, uint32_t paraLen, char *s
     return ERRCODE_SUCC;
 }
 
+static uint32_t custom_cywee_time_sync(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+
+    UNUSED(strCommonCmd);
+
+    uapi_cywee_time_sync();
 
+    return ERRCODE_SUCC;
+}
+
+static uint32_t custom_cywee_get_sleep_data(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+
+    UNUSED(strCommonCmd);
+
+    uapi_cywee_get_sleep_data();
+
+    return ERRCODE_SUCC;
+}
 static const at_cmd_table_t g_custom_utils_cmd[] = {
     { (char *)"AT^CUSTOM_SN",      custom_utils_setsn, (char *)"123456789ABCDEF2345678" },
     { (char *)"AT^CUSTOM_SN_REQ",  custom_utils_getsn, (char *)" " },
@@ -452,7 +469,11 @@ static const at_cmd_table_t g_custom_utils_cmd[] = {
 
     { (char *)"AT^GETCYWEEID",      custom_get_cywee_id, (char *)" " },
 
-    { (char *)"AT^EXITLPM",      custom_alipay_exit_test, (char *)" " },
+    { (char *)"AT^ALIPAYTEST",      custom_alipay_test, (char *)" " },
+
+    { (char *)"AT^CYWEETIMESYNC",      custom_cywee_time_sync, (char *)" " },
+
+    { (char *)"AT^CYWEEGETSLEEPDATA",      custom_cywee_get_sleep_data, (char *)" " },
 
 };
 
index f789842..959d333 100755 (executable)
@@ -113,13 +113,14 @@ void pm_core_wait_uart_tx_idle(void)
 void pm_sikey_suspend(void) {
     //心率,马达,加速计外设的I2C通道寄存器保存,关中断
     
+    custom_i2c_suspend();
     //ADD alipay I2C3 suspend, 
     alipay_suspend();
 }
 
 void pm_sikey_resume(void){
     //心率,马达,加速计外设的I2C通道寄存器的恢复,关中断,重新配置pinmux,重新初始化。
-    
+    custom_i2c_resume();
     alipay_resume();
 }
 void pm_core_suspend(void)