From: penglei <1624952103@qq.com> Date: Fri, 10 May 2024 04:29:48 +0000 (+0800) Subject: 优化蓝牙产测,解决cywee I2C异常问题,完善运动模式功能。 X-Git-Tag: release_V1.2.70_20241020_135402~1025^2~7 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=refs%2Fchanges%2F158%2Fhead;p=mirrors%2FFD230.git 优化蓝牙产测,解决cywee I2C异常问题,完善运动模式功能。 --- diff --git a/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c b/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c index 3803d2b51..f13de9001 100644 --- a/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c +++ b/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c @@ -862,7 +862,7 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint //LCD显示颜色 uint8_t send_data = 0x00; char *color_buf[5] ={"0Xffff0000","0xff00ff00","0xff0000ff","0xffffffff","0xff000000"}; - mcu_pm_lcd_on(0,0); + ScreenAlwaysOnCtr(1); switch (*data) { case 1: diff --git a/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h b/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h index 50ece2245..f5b11ab56 100644 --- a/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h +++ b/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h @@ -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); diff --git a/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h b/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h index c30306414..e8ea39f7a 100644 --- a/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h +++ b/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h @@ -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); diff --git a/code/sdk/drivers/peripheral/cywee/service/cywee_service.c b/code/sdk/drivers/peripheral/cywee/service/cywee_service.c index 735823e71..1ac1f7235 100644 --- a/code/sdk/drivers/peripheral/cywee/service/cywee_service.c +++ b/code/sdk/drivers/peripheral/cywee/service/cywee_service.c @@ -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 diff --git a/code/sdk/drivers/peripheral/cywee/src/main_dml.c b/code/sdk/drivers/peripheral/cywee/src/main_dml.c index 772c6ca7b..900570ee6 100644 --- a/code/sdk/drivers/peripheral/cywee/src/main_dml.c +++ b/code/sdk/drivers/peripheral/cywee/src/main_dml.c @@ -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; } diff --git a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c index 7108c5491..613a60634 100644 --- a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c +++ b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c @@ -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 { diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.c b/code/sdk/drivers/peripheral/utils/custom_utils.c index 3e583cfb8..3de235e39 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils.c @@ -28,7 +28,7 @@ #include #include #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); diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.h b/code/sdk/drivers/peripheral/utils/custom_utils.h index b9caa579c..725584b2b 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.h +++ b/code/sdk/drivers/peripheral/utils/custom_utils.h @@ -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 */ diff --git a/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c b/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c index 5e78446fb..56c3fcd5e 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c @@ -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 *)" " }, }; diff --git a/code/sdk/middleware/chips/brandy/pm/pm_adapt/pm_core.c b/code/sdk/middleware/chips/brandy/pm/pm_adapt/pm_core.c index f789842ea..959d333eb 100755 --- a/code/sdk/middleware/chips/brandy/pm/pm_adapt/pm_core.c +++ b/code/sdk/middleware/chips/brandy/pm/pm_adapt/pm_core.c @@ -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)