From: penglei <1624952103@qq.com> Date: Thu, 18 Apr 2024 03:58:41 +0000 (+0800) Subject: 优化运动服务接收函数,优化血氧驱动,解决测血氧时容易死机的问题,添加抬腕亮屏与马达震动接口 X-Git-Tag: release_V1.2.70_20241020_135402~1162^2~11^2~1 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=7b77a39079cfbb54348eb844434345fd39c05f0b;p=mirrors%2FFD230.git 优化运动服务接收函数,优化血氧驱动,解决测血氧时容易死机的问题,添加抬腕亮屏与马达震动接口 --- diff --git a/code/sdk/application/battery/service/battery_service.cpp b/code/sdk/application/battery/service/battery_service.cpp index 0bc963a95..da743245a 100644 --- a/code/sdk/application/battery/service/battery_service.cpp +++ b/code/sdk/application/battery/service/battery_service.cpp @@ -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); diff --git a/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h b/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h index 81fd3ff73..48f4ee4af 100644 --- a/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h +++ b/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h @@ -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; diff --git a/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h b/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h index df6c74ff5..1ccade082 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-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 diff --git a/code/sdk/drivers/peripheral/cywee/service/cywee_service.c b/code/sdk/drivers/peripheral/cywee/service/cywee_service.c index 32eb71cee..dfe1c9fdb 100644 --- a/code/sdk/drivers/peripheral/cywee/service/cywee_service.c +++ b/code/sdk/drivers/peripheral/cywee/service/cywee_service.c @@ -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) { diff --git a/code/sdk/drivers/peripheral/cywee/src/main_dml.c b/code/sdk/drivers/peripheral/cywee/src/main_dml.c index 52c22191a..4d8ad52b1 100644 --- a/code/sdk/drivers/peripheral/cywee/src/main_dml.c +++ b/code/sdk/drivers/peripheral/cywee/src/main_dml.c @@ -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); diff --git a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c index 14b4af831..9435968e3 100644 --- a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c +++ b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c @@ -118,7 +118,7 @@ uint8_t alg_ram[11 * 1024] __attribute__((aligned(4))); //uint8_t alg_ram[10] = {0}; ppg_sensor_data_t ppg_s_data; -int hrs_data[2] = {0}; +int cywee_data[2] = {0}; int wear_mode_status = 0; @@ -2801,10 +2801,10 @@ void hx3695_hrs_ppg_Int_handle(void) if(hrs_mode_state) { - hrs_data[0] = hrsresult.lastesthrs; - hrs_data[1] = hrs_wear_status; + cywee_data[0] = hrsresult.lastesthrs; + cywee_data[1] = hrs_wear_status; - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE,hrs_data); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE,cywee_data); } if(hrsresult.lastesthrs > 0) @@ -3141,36 +3141,41 @@ void hx3695_spo2_ppg_Int_handle(void) DEBUG_PRINTF("\r\n send1 jlink cnt=%d\r\n",*count); /*屏蔽*/ - // for(ii=0; ii<*count; ii++) - // { - // gsen_fifo_x_send[ii] = gsen_fifo_x[32-*count+ii]; - // gsen_fifo_y_send[ii] = gsen_fifo_y[32-*count+ii]; - // gsen_fifo_z_send[ii] = gsen_fifo_z[32-*count+ii]; - // PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n", - // 1+ii,*count,red_buf[ii],ir_buf[ii],green_buf[ii],gsen_fifo_x[ii],gsen_fifo_y[ii],gsen_fifo_z[ii]); - // //printf("FFF==>spo2 red_buf : %d, %d, %d, %d \n", 1+ii, *count, red_buf[ii], ir_buf[0]); - + PRINT("*count[%d] \r\n",*count); + if(*count < 10) + { + for(ii=0; ii<*count; ii++) + { + gsen_fifo_x_send[ii] = gsen_fifo_x[32-*count+ii]; + gsen_fifo_y_send[ii] = gsen_fifo_y[32-*count+ii]; + gsen_fifo_z_send[ii] = gsen_fifo_z[32-*count+ii]; + PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n", + 1+ii,*count,red_buf[ii],ir_buf[ii],green_buf[ii],gsen_fifo_x[ii],gsen_fifo_y[ii],gsen_fifo_z[ii]); + //printf("FFF==>spo2 red_buf : %d, %d, %d, %d \n", 1+ii, *count, red_buf[ii], ir_buf[0]); + - // } + } -// ft_ppg_iir = spo2_s_dat.red_data[0]; -// hx3695_factory_test_process(NULL, APP_FACTORY_TEST_SPO2_START, &ft_ppg_iir); + // ft_ppg_iir = spo2_s_dat.red_data[0]; + // hx3695_factory_test_process(NULL, APP_FACTORY_TEST_SPO2_START, &ft_ppg_iir); - ft_test_result_t result = {0}; - result.gr_data_final = spo2_s_dat.green_data[0]; - result.red_data_final = spo2_s_dat.red_data[0]; - result.ir_data_final = spo2_s_dat.ir_data1[0]; - //hx3695_factory_test_process(NULL, APP_FACTORY_TEST_SPO2_START, &result); + ft_test_result_t result = {0}; + result.gr_data_final = spo2_s_dat.green_data[0]; + result.red_data_final = spo2_s_dat.red_data[0]; + result.ir_data_final = spo2_s_dat.ir_data1[0]; + //hx3695_factory_test_process(NULL, APP_FACTORY_TEST_SPO2_START, &result); - 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); - spo2_wear_status = hx3695_spo2_get_wear_status(); - PRINT("spo2_wear_status : %d\r\n",spo2_wear_status); - if(spo2_wear_status == MSG_SPO2_WEAR) - { - tyhx_spo2_alg_send_data(red_buf, ir_buf, green_buf, cal.R_LEDDAC, cal.IR_LEDDAC1, cal.G_LEDDAC, - gsen_fifo_x_send, gsen_fifo_y_send, gsen_fifo_z_send, *count); + 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); + spo2_wear_status = hx3695_spo2_get_wear_status(); + PRINT("spo2_wear_status : %d\r\n",spo2_wear_status); + if(spo2_wear_status == MSG_SPO2_WEAR) + { + tyhx_spo2_alg_send_data(red_buf, ir_buf, green_buf, cal.R_LEDDAC, cal.IR_LEDDAC1, cal.G_LEDDAC, + gsen_fifo_x_send, gsen_fifo_y_send, gsen_fifo_z_send, *count); + } } + #endif spo2_alg_results = tyhx_spo2_alg_get_results(); @@ -3460,7 +3465,8 @@ void hx3695_wear_ppg_Int_handle(void) if(wear_mode_status != hx3695_wear_status) { wear_mode_status = hx3695_wear_status; - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&wear_mode_status); + cywee_data[0] = wear_mode_status; + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&cywee_data); } extern uint8_t notouch_cnt; diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.c b/code/sdk/drivers/peripheral/utils/custom_utils.c index 0a916eb95..dfb437c0f 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils.c @@ -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 + } } diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.h b/code/sdk/drivers/peripheral/utils/custom_utils.h index 92e87c551..daa077c8a 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.h +++ b/code/sdk/drivers/peripheral/utils/custom_utils.h @@ -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 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 0d31d7ab5..546ec999c 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c @@ -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 *)" " },