From: penglei <1624952103@qq.com> Date: Tue, 16 Apr 2024 10:08:53 +0000 (+0800) Subject: 优化心率驱动,解决佩戴模式不能正确获取佩戴状态的问题,添加动态心率,优化运动模式切换流程 X-Git-Tag: release_V1.2.70_20241020_135402~1188 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=refs%2Fchanges%2F16%2Fhead;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 62c22afa4..af7841c07 100644 --- a/code/sdk/application/battery/service/battery_service.cpp +++ b/code/sdk/application/battery/service/battery_service.cpp @@ -43,6 +43,8 @@ extern "C" { #include "custom_utils.h" +#include "cywee_service.h" + bool batteryservice_get_voltage_by_channel(float *voltage, uint8_t channel); battery_info_t *get_current_battery_info(void); static bool g_batter_service_initialled = false; @@ -81,6 +83,8 @@ static unsigned long g_app_queue; static uint8_t g_check_count = 0; +static int oncharging_status = 0; + 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); @@ -166,8 +170,15 @@ static void battery_check_chargement(void) uint8_t percent = batteryservice_get_voltage(&voltage); //获取电池温度 batteryservice_get_battery_temp(&bat_temp); - - if(get_charge_stat() == 1){ + + int status = get_charge_stat(); + if(oncharging_status != status) + { + oncharging_status = status; + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_ONCHARGING_CHANGE,&status); + } + + if(status == 1){ PRINT("charging enable charge ! bat-temp %.2f Vs highest temp value %.2f !\n",bat_temp,BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE); /** diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenPresenter.cpp index 5f162a3b0..7b18e1097 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenPresenter.cpp @@ -32,6 +32,7 @@ #include "displaybrightness/include/DisplayBrightnessModel.h" #include "power_display_service.h" #include "custom_utils.h" +#include "cywee_service.h" extern "C" errcode_t uapi_get_timestampe_ms(uint64_t *tm); #define BLOODKEYABLE 0 @@ -233,6 +234,7 @@ namespace OHOS uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST; send_ppg_cmd_msg(md); startspo2 = true; + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE,NULL); } } if (BloodOxygenModel::GetInstance()->GetBloodCheckViewStatus() == false) @@ -246,6 +248,7 @@ namespace OHOS BloodCheckView::GetInstance()->UpShowBloodText(); // 更新检测界面 if (startspo2 == true) { + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT,NULL); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : true"); uint8_t md = PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST; send_ppg_cmd_msg(md); diff --git a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp index c6f22d18f..75868207c 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp @@ -26,6 +26,7 @@ #include "heartrate/include/HeartCheckView.h" #include "heartrate/include/HeartBandoffView.h" #include "health_service.h" +#include "cywee_service.h" #define HEARTKEYABLE 0 @@ -222,6 +223,7 @@ namespace OHOS uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST; send_ppg_cmd_msg(md); startheart = true; + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE,NULL); } } @@ -236,6 +238,7 @@ namespace OHOS HeartCheckView::GetInstance()->UpShowHeartText(); // 更新检测界面 if (startheart == true) { + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT,NULL); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : true"); uint8_t md = PPG_SERVICE_CMD_TYPE_DO_PPG_TEST; send_ppg_cmd_msg(md); diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp index 87be72ba7..bac9ee6d8 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp @@ -14,7 +14,7 @@ #include #include -extern "C" void do_cywee_service_check_msg(int cmd); +extern "C" void do_cywee_service_check_msg(int cmd,int data[]); extern "C" { @@ -111,26 +111,26 @@ namespace OHOS { // 根据不同的运动项目进行不同的运动 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardPresenter::OpenSensor!!"); - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT,NULL); switch (type) { case ExerciseClass::NORMAL: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE,NULL); break; case ExerciseClass::TREADMILL: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE,NULL); break; case ExerciseClass::OUTDOOR: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE,NULL); break; case ExerciseClass::INDOOR: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE,NULL); break; case ExerciseClass::FITNESS_PEDOMETER: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE,NULL); break; case ExerciseClass::FREE_TRAINING: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE,NULL); break; default: break; @@ -149,10 +149,10 @@ namespace OHOS OpenSensor(ExerciseClass::NORMAL); break; case ExerciseState::Pause: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE,0); break; case ExerciseState::Continue: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME,0); break; default: break; diff --git a/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h b/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h index 31a214bc8..3c475d25e 100644 --- a/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h +++ b/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h @@ -504,8 +504,14 @@ typedef void (*cywee_msg_callback_t)(uint8_t msg_type, uint8_t *msg_data, int32_ uint32_t cywee_register_msg_callback(cywee_msg_callback_t func); cywee_msg_callback_t cywee_get_send_msg_callback_func(void); -void activity_setstatus(int cmd); -void activity_exit(void); +void activity_mode_setstatus(int cmd); +void activity_mode_exit(void); +void cywee_oncharging_update(int oncharging_status); +void cywee_wearstatus_update(int wearstatus); +void cywee_hrs_wearstatus_update(int hrs_data,int wearstatus); + + +extern uint8_t hrs_mode_state; #pragma pack() diff --git a/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h b/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h index 6f80326d2..a904ff93f 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-11 19:01:22 + * @LastEditTime: 2024-04-16 15:50:32 * @FilePath: /FD230/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h * @Description: * @@ -57,13 +57,17 @@ extern "C" { #define CYWEE_SERVICE_CMD_EXIT 0x1E +#define CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE 0x1F +#define CYWEE_SERVICE_CMD_ONCHARGING_CHANGE 0x20 +#define CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE 0x21 + errcode_t uapi_cywee_service_init(void); 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); +void do_cywee_service_check_msg(int cmd,int data[]); #ifdef __cplusplus diff --git a/code/sdk/drivers/peripheral/cywee/service/cywee_at_cmd.c b/code/sdk/drivers/peripheral/cywee/service/cywee_at_cmd.c index 6e5de789b..583fce187 100644 --- a/code/sdk/drivers/peripheral/cywee/service/cywee_at_cmd.c +++ b/code/sdk/drivers/peripheral/cywee/service/cywee_at_cmd.c @@ -60,42 +60,42 @@ static uint32_t cywee_do_test(uint8_t *para, uint32_t paraLen, char *strCommonCm if (strcmp(mode, "start") == 0) { PRINT("cywee start\n"); - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK,NULL); } else if (strcmp(mode, "stop") == 0) { PRINT("cywee stop\n"); - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_STOP_CHECK); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_STOP_CHECK,NULL); } else if (strcmp(mode, "test") == 0) { PRINT("cywee test\n"); - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TEST); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TEST,NULL); } else if (strcmp(mode, "normal") == 0) { PRINT("cywee normal mode\n"); - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE,NULL); } else if (strcmp(mode, "treadmill") == 0) { PRINT("cywee treadmill mode\n"); - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE,NULL); } else if (strcmp(mode, "outdoor") == 0) { PRINT("cywee outdoor running mode\n"); - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE,NULL); } else if (strcmp(mode, "indoor") == 0) { PRINT("cywee indoor running mode\n"); - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE,NULL); } else if (strcmp(mode, "pedometer") == 0) { PRINT("cywee fitness pedometer mode\n"); - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE,NULL); } else if (strcmp(mode, "free") == 0) { PRINT("cywee free training mode\n"); - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE,NULL); } else if (strcmp(mode, "pause") == 0) { PRINT("cywee pause\n"); - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE,NULL); } else if (strcmp(mode, "resume") == 0) { PRINT("cywee resume\n"); - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME,NULL); } else if (strcmp(mode, "exit") == 0) { PRINT("cywee exit\n"); - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT); - } + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT,NULL); + } return ERRCODE_SUCC; } diff --git a/code/sdk/drivers/peripheral/cywee/service/cywee_service.c b/code/sdk/drivers/peripheral/cywee/service/cywee_service.c index 9f4abd43b..02d479fb9 100644 --- a/code/sdk/drivers/peripheral/cywee/service/cywee_service.c +++ b/code/sdk/drivers/peripheral/cywee/service/cywee_service.c @@ -41,6 +41,7 @@ typedef struct { uint8_t cmd; + uint8_t data[2]; } cywee_cmd_t; /*** * 其他cmd在Header里定义,对外开放 @@ -207,7 +208,7 @@ static void cywee_service_check_timer_callback(void * data) unused(data); g_bat_timer_is_running = false; if(cywee_service_running_stat == true){ - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TIMER_CHECK); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TIMER_CHECK,NULL); // cywee_service_timer_start_check(CYWEE_CHECK_MS); } } @@ -226,12 +227,14 @@ void uapi_cywee_service_deinit(void) -void do_cywee_service_check_msg(int cmd) +void do_cywee_service_check_msg(int cmd,int data[]) { int ret; cywee_cmd_t mail = {0}; mail.cmd = cmd; + mail.data[0] = data[0]; + mail.data[1] = data[1]; ret = osal_msg_queue_write_copy(g_cywee_queue, (void *)&mail, sizeof(cywee_cmd_t), 0); if (ret != OSAL_SUCCESS) { PRINT("Error cywee Check MSG 0x%02X send failed! err=0x%x! \r\n",cmd, ret); @@ -296,13 +299,22 @@ static void cywee_service_check_task(void const *arg) cywee_main_dml(SPORT_ACTIVE_MODE_AR_ALERT); cywee_service_timer_start_check(CYWEE_CHECK_MS); }else if(mail.cmd == CYWEE_SERVICE_CMD_PAUSE){ - activity_setstatus(1); + activity_mode_setstatus(1); }else if(mail.cmd == CYWEE_SERVICE_CMD_RESUME){ - activity_setstatus(0); + activity_mode_setstatus(0); }else if(mail.cmd == CYWEE_SERVICE_CMD_EXIT){ cywee_service_running_stat = false; if (g_cywee_service_timer != NULL) osTimerStop(g_cywee_service_timer); - activity_exit(); + activity_mode_exit(); + }else if(mail.cmd == CYWEE_SERVICE_CMD_ONCHARGING_CHANGE) + { + cywee_oncharging_update(mail.data[0]); + }else if(mail.cmd == CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE) + { + cywee_wearstatus_update(mail.data[0]); + }else if(mail.cmd == CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE) + { + cywee_hrs_wearstatus_update(mail.data[0],mail.data[1]); } } } @@ -338,7 +350,7 @@ errcode_t uapi_cywee_service_init(void) g_cywee_service_timer = osTimerNew((osTimerFunc_t)cywee_service_check_timer_callback, osTimerPeriodic, NULL, NULL); cywee_register_msg_callback(cywee_msg_callback); - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK,NULL); return ERRCODE_SUCC; } diff --git a/code/sdk/drivers/peripheral/cywee/src/main_dml.c b/code/sdk/drivers/peripheral/cywee/src/main_dml.c index 41ad59a4e..5fa1a437a 100644 --- a/code/sdk/drivers/peripheral/cywee/src/main_dml.c +++ b/code/sdk/drivers/peripheral/cywee/src/main_dml.c @@ -19,9 +19,6 @@ #define AP_ENABLE_DML_SDO_LISTEN -int16_t gsensor_x[24] = {0}; -int16_t gsensor_y[24] = {0}; -int16_t gsensor_z[24] = {0}; #define GSENSON_MSG_COUNT 16 static gsenson_t gxyz_t; @@ -38,25 +35,12 @@ cywee_activity_result_t c_activity_result_t; cywee_inactivity_result_t c_inactivity_result_t; static uint8_t cywee_installized = 0 ; -static osTimerId_t g_cywee_hrs_timer; - -static osTimerId_t g_cywee_wearstatus_timer; - -static osTimerId_t g_cywee_oncharging_timer; - CustomSensorData csd; - - static uint8_t hrs = 0; -static uint8_t wearstatus = 0; -static uint8_t wearstatus_tmp = 0; -static uint8_t oncharging_tmp = 0; - -static unsigned long g_cywee_mode_init_queue; -static uint8_t hrs_mode_state = 0; +uint8_t hrs_mode_state = 0; static uint8_t wear_mode_state = 0; static uint8_t mail = 0; @@ -126,54 +110,42 @@ void time_sync(void) CWM_SettingControl(SCL_DATE_TIME, &scl); } -void cywee_hrs_check_timer_callback(void) +void cywee_hrs_wearstatus_update(int hrs_data,int wearstatus) { - get_hrs_wearstatus(&hrs,&wearstatus); + 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 + 15; + csd.fData[0] = hrs; CWM_CustomSensorInput(&csd); - if(wearstatus_tmp != wearstatus) - { - wearstatus_tmp = wearstatus; - CWM_OS_dbgPrintf("222wearstatus : %d\r\n",wearstatus); - //CWM_OS_dbgPrintf("tmp : %d \r\n",tmp); - memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT)); - csd.sensorType = CUSTOM_OFFBODY_DETECT; - csd.fData[0] = wearstatus; - CWM_CustomSensorInput(&csd); - } + + memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT)); + csd.sensorType = CUSTOM_OFFBODY_DETECT; + csd.fData[0] = wear_status; + CWM_CustomSensorInput(&csd); + } -void cywee_oncharging_check_timer_callback(void) +void cywee_oncharging_update(int oncharging_status) { - bool oncharging_status = uapi_get_charger_plug_status(); - if(oncharging_tmp != oncharging_status) - { - oncharging_tmp = oncharging_status; - CWM_OS_dbgPrintf("oncharging_status : %d\r\n",oncharging_status); - memset(&csd, 0, sizeof(CUSTOM_ON_CHARGING)); - csd.sensorType = CUSTOM_ON_CHARGING; - csd.fData[0] = oncharging_status; - CWM_CustomSensorInput(&csd); - } + CWM_OS_dbgPrintf("oncharging : %d\r\n",oncharging_status); + memset(&csd, 0, sizeof(CUSTOM_ON_CHARGING)); + csd.sensorType = CUSTOM_ON_CHARGING; + csd.fData[0] = oncharging_status; + CWM_CustomSensorInput(&csd); } -void cywee_wearstatus_check_timer_callback(void) +void cywee_wearstatus_update(int wearstatus) { - get_wearstatus(&wearstatus); - //CWM_OS_dbgPrintf("tmp : %d \r\n",tmp); - if(wearstatus_tmp != wearstatus) - { - wearstatus_tmp = wearstatus; - CWM_OS_dbgPrintf("111wearstatus : %d\r\n",wearstatus); - //CWM_OS_dbgPrintf("tmp : %d \r\n",tmp); - memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT)); - csd.sensorType = CUSTOM_OFFBODY_DETECT; - csd.fData[0] = wearstatus; - CWM_CustomSensorInput(&csd); - } + CWM_OS_dbgPrintf("111wearstatus : %d\r\n",wearstatus); + memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT)); + csd.sensorType = CUSTOM_OFFBODY_DETECT; + csd.fData[0] = wearstatus; + CWM_CustomSensorInput(&csd); } void activity_mode_task(void) @@ -181,13 +153,11 @@ void activity_mode_task(void) if(hrs_mode_state == 1) { ppg_send_cmd_to_driver("hrs",0); - //osTimerStop(g_cywee_hrs_timer); hrs_mode_state = 0; } if(wear_mode_state == 1) { ppg_send_cmd_to_driver("wear",0); - osTimerStop(g_cywee_wearstatus_timer); wear_mode_state = 0; } if(mail == 1 && hrs_mode_state == 0) @@ -198,7 +168,6 @@ void activity_mode_task(void) else if(mail == 2 && wear_mode_state == 0) { ppg_send_cmd_to_driver("wear",1); - osTimerStart(g_cywee_wearstatus_timer,400); wear_mode_state = 1; } } @@ -206,11 +175,9 @@ void activity_mode_task(void) void activity_mode_exit() { ppg_send_cmd_to_driver("wear",0); - osTimerStop(g_cywee_wearstatus_timer); wear_mode_state = 0; } - errcode_t activity_mode_init(void) { app_task_definition_t taskcfg={0}; @@ -388,7 +355,7 @@ void gsensor_get_n_data(uint8_t cnt,gsenson_t t[]) // CWM_OS_dbgPrintf("get_gsonsen_xyz_fail\n"); // return; // } - CWM_OS_dbgPrintf("x : %d , y : %d , z : %d\n", gxyz_t_queue[left_falg].x, gxyz_t_queue[left_falg].y, gxyz_t_queue[left_falg].z); + //CWM_OS_dbgPrintf("x : %d , y : %d , z : %d\n", gxyz_t_queue[left_falg].x, gxyz_t_queue[left_falg].y, gxyz_t_queue[left_falg].z); t[i].x= gxyz_t_queue[left_falg].x; t[i].y= gxyz_t_queue[left_falg].y; t[i].z= gxyz_t_queue[left_falg].z; @@ -423,7 +390,6 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) { gxyz_t_queue[right_falg].x= sensorEVT->fData[0]; gxyz_t_queue[right_falg].y= sensorEVT->fData[1]; gxyz_t_queue[right_falg].z= sensorEVT->fData[2]; - } else { @@ -435,7 +401,7 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) { gxyz_t_queue[right_falg].x= sensorEVT->fData[0]; gxyz_t_queue[right_falg].y= sensorEVT->fData[1]; gxyz_t_queue[right_falg].z= sensorEVT->fData[2]; - CWM_OS_dbgPrintf("write: x=%d, y=%d, z=%d\n", gxyz_t_queue[right_falg].x ,gxyz_t_queue[right_falg].y ,gxyz_t_queue[right_falg].z); + //CWM_OS_dbgPrintf("write: x=%d, y=%d, z=%d\n", gxyz_t_queue[right_falg].x ,gxyz_t_queue[right_falg].y ,gxyz_t_queue[right_falg].z); } @@ -487,14 +453,7 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) { csd.sensorType = CUSTOM_OFFBODY_DETECT; csd.fData[0] = 0; CWM_CustomSensorInput(&csd); - //if(mail == 2) - //osTimerStart(g_cywee_wearstatus_timer,20); - // else - // osTimerStop(g_cywee_wearstatus_timer); - } - // else if((int)sensorEVT->fData[2] == 0) - // osTimerStop(g_cywee_wearstatus_timer); - + } } if((int)sensorEVT->fData[1] == CUSTOM_ON_CHARGING) { @@ -503,21 +462,13 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) { { memset(&csd, 0, sizeof(CUSTOM_ON_CHARGING)); csd.sensorType = CUSTOM_ON_CHARGING; - csd.fData[0] = 0; + csd.fData[0] = 1; CWM_CustomSensorInput(&csd); - osTimerStart(g_cywee_oncharging_timer,400); } - else - osTimerStop(g_cywee_oncharging_timer); - } if((int)sensorEVT->fData[1] == CUSTOM_HEARTRATE) { CWM_OS_dbgPrintf("CUSTOM_HEARTRATE !!! \r\n"); - if((int)sensorEVT->fData[2] == 1) - osTimerStart(g_cywee_hrs_timer,400); - else - osTimerStop(g_cywee_hrs_timer); } break; case IDX_ALGO_SHAKE: @@ -936,9 +887,7 @@ int cywee_main_dml(int cmd) // CWM_SettingControl(SCL_LOG, &scl); - g_cywee_hrs_timer = osTimerNew((osTimerFunc_t)cywee_hrs_check_timer_callback, osTimerPeriodic, NULL, NULL); - g_cywee_wearstatus_timer = osTimerNew((osTimerFunc_t)cywee_wearstatus_check_timer_callback, osTimerPeriodic, NULL, NULL); - g_cywee_oncharging_timer = osTimerNew((osTimerFunc_t)cywee_oncharging_check_timer_callback, osTimerPeriodic, NULL, NULL); + //呼叫任一個CWM_Sensor_Enable 前呼叫此指令 设置手动或自动模式 memset(&scl, 0, sizeof(scl)); @@ -973,7 +922,6 @@ int cywee_main_dml(int cmd) if(cmd == SPORT_ACTIVE_MODE_NORMAL) { cyw_inactivity_mode_change(INACTIVITY_MODE_SEDENTARY); - CWM_Sensor_Enable(IDX_ALGO_INACTIVITY_OUTPUT); } // memset(&scl, 0, sizeof(scl)); // scl.iData[0] = 1; diff --git a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c index aa4a45da0..14b4af831 100644 --- a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c +++ b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c @@ -33,6 +33,7 @@ // #include "app_task.h" #include "cywee_hal.h" +#include "cywee_service.h" FT_CUSTOM_RESULTS_t hrsresult ={0}; @@ -40,7 +41,7 @@ int16_t gsen_fifo_x[64]={0}; int16_t gsen_fifo_y[64]={0}; int16_t gsen_fifo_z[64]={0}; -gsenson_t gsensordata[8]; +gsenson_t gsensordata[16]; #ifdef SPO2_VECTOR #include "spo2_vec.h" @@ -117,10 +118,9 @@ uint8_t alg_ram[11 * 1024] __attribute__((aligned(4))); //uint8_t alg_ram[10] = {0}; ppg_sensor_data_t ppg_s_data; -uint8_t free_trainning_hrs = 0; -uint8_t free_trainning_wearstatus = 0; +int hrs_data[2] = {0}; -uint8_t wear_mode_status = 0; +int wear_mode_status = 0; //////// spo2 para and switches const uint8_t COUNT_BLOCK_NUM = 25; //delay the block of some single good signal after a series of bad signal @@ -162,17 +162,6 @@ static int32_t ir_jump_delta = 0; static int32_t cali_data_cnt = 0; #endif -void get_hrs_wearstatus(uint8_t *hrs,uint8_t *wearstatus) -{ - *hrs = free_trainning_hrs; - *wearstatus = free_trainning_wearstatus; -} - -void get_wearstatus(uint8_t *wearstatus) -{ - *wearstatus = wear_mode_status; -} - // us 延时函数, 客户需填写 void hx3695_delay_us(uint32_t us) { @@ -2744,34 +2733,35 @@ void hx3695_hrs_ppg_Int_handle(void) // result.gr_data_final = hrs_s_dat.green_data[0]; // result.ir_data_final = hrs_s_dat.ir_data[0]; // hx3695_factory_test_process(NULL, APP_FACTORY_TEST_HR_START, &result); - - //gsensor_get_n_data(1,gsensordata); - - for(ii=0; ii<*count; ii++) - { - // if(ii == 8) - // { - // gsen_fifo_x_send[ii] = gsen_fifo_x_send[ii - 1]; - // gsen_fifo_y_send[ii] = gsen_fifo_y_send[ii - 1]; - // gsen_fifo_z_send[ii] = gsen_fifo_z_send[ii - 1]; - // } - // else - // { - // gsen_fifo_x_send[ii] = gsensordata[ii].x; - // gsen_fifo_y_send[ii] = gsensordata[ii].y; - // gsen_fifo_z_send[ii] = gsensordata[ii].z; - // } - - //PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsen_fifo_x[ii],gsen_fifo_y[ii],gsen_fifo_z[ii],ppg_s_data.green_cur); - } - - hrs_wear_status = hx3695_hrs_get_wear_status(); - PRINT("hrs_wear_status: %d !!\r\n", hrs_wear_status); - - if(hrs_wear_status == MSG_HRS_WEAR) + PRINT("*count : %d \r\n",*count); + if(*count < 10) { - tyhx_hrs_alg_send_data(PPG_buf, *count, gsen_fifo_x_send, gsen_fifo_y_send, - gsen_fifo_z_send, cal.Group1_Ledidac); + gsensor_get_n_data(16,gsensordata); + for(ii=0; ii<*count; ii++) + { + if(ii == 8) + { + gsen_fifo_x_send[ii] = gsen_fifo_x_send[ii - 1]; + gsen_fifo_y_send[ii] = gsen_fifo_y_send[ii - 1]; + gsen_fifo_z_send[ii] = gsen_fifo_z_send[ii - 1]; + } + else + { + gsen_fifo_x_send[ii] = (gsensordata[ii*2].x + gsensordata[2*ii + 1].x)/2; + gsen_fifo_y_send[ii] = (gsensordata[ii*2].y + gsensordata[2*ii + 1].y)/2; + gsen_fifo_z_send[ii] = (gsensordata[ii*2].z + gsensordata[2*ii + 1].z)/2; + } + 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); + } + + hrs_wear_status = hx3695_hrs_get_wear_status(); + PRINT("hrs_wear_status: %d !!\r\n", hrs_wear_status); + + if(hrs_wear_status == MSG_HRS_WEAR) + { + tyhx_hrs_alg_send_data(PPG_buf, *count, gsen_fifo_x_send, gsen_fifo_y_send, + gsen_fifo_z_send, cal.Group1_Ledidac); + } } #endif @@ -2809,9 +2799,13 @@ void hx3695_hrs_ppg_Int_handle(void) PRINT("hx3695 data_cnt: %d, hr_living: %d, hr_living_qu: %d, hr_living_std: %d, hr_result:%d \r\n", alg_results.data_cnt, hrsresult.hr_living, hrsresult.hr_living_qu, hrsresult.hr_living_std, hrsresult.lastesthrs); - free_trainning_hrs = hrsresult.lastesthrs; - free_trainning_wearstatus = hrs_wear_status; + if(hrs_mode_state) + { + hrs_data[0] = hrsresult.lastesthrs; + hrs_data[1] = hrs_wear_status; + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE,hrs_data); + } if(hrsresult.lastesthrs > 0) { @@ -3463,8 +3457,12 @@ void hx3695_wear_ppg_Int_handle(void) hx3695_check_touch_read(&ppg_s_data); hx3695_wear_status = hx3695_check_touch_send_data(ir_buf,*count); hrsresult.wearstatus = hx3695_wear_status; - wear_mode_status = hx3695_wear_status; - //PRINT("wear_mode_status : %d \r\n",wear_mode_status); + 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); + } + extern uint8_t notouch_cnt; extern uint8_t touch_cnt; diff --git a/code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp b/code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp index fa7e7d85a..eb733d178 100644 --- a/code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp +++ b/code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp @@ -45,6 +45,8 @@ extern "C" { #include "hx3695_hal.h" #include "custom_utils.h" +#include "cywee_hal.h" + static bool g_ppg_service_initialled = false; uint8_t card_databuf[64] = {0}; @@ -55,7 +57,7 @@ uint8_t light_databuf[64] = {0}; #define PPG_SERVICE_MSG_COUNT 16 -#define PPG_SERVICE_TASK_SIZE 0x800 +#define PPG_SERVICE_TASK_SIZE 0x900 #define PPG_SERVICE_TASK_PRIO 5 #define MAG_CHECK_MS 20