From: penglei <1624952103@qq.com> Date: Tue, 28 May 2024 10:48:23 +0000 (+0800) Subject: 解决gsensor fatal error与久坐提醒误报的问题,添加步数保存和午夜清零运动数据功能。 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=5e4dc36b76e42945682527e873190a512f397a4d;p=mirrors%2FFD230.git 解决gsensor fatal error与久坐提醒误报的问题,添加步数保存和午夜清零运动数据功能。 --- diff --git a/code/sdk/application/wearable/fd230app/nativeui/activity/src/ActivityModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/activity/src/ActivityModel.cpp index fe8dcad70..c8a9a9820 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/activity/src/ActivityModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/activity/src/ActivityModel.cpp @@ -21,6 +21,7 @@ #include "ActivityWeekView.h" #include "graphic_service.h" #include "DialModelSteps.h" +#include "cywee_service.h" using namespace std; #ifdef __cplusplus @@ -131,6 +132,10 @@ static void Notify(void *args, const Topic topic, Request* request) if (request->msgId == TOPIC_EVENT_NEXTDAY_UPDATE) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "STEP:TOPIC_EVENT_NEXTDAY_UPDATE"); + + //午夜清除运动数据 + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESET_DAILY_DATA,NULL); + uint32_t refreshValue = OHOS::ActivityModel::GetInstance()->ZeroHourStepHandle(); RefreshStepControls(refreshValue, TOPIC_EVENT_NEXTDAY_UPDATE); } diff --git a/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp b/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp index c068f7a1c..01bf0043e 100644 --- a/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp +++ b/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp @@ -867,11 +867,14 @@ void MsgCenterNotifyInactivityProc(const Topic topic, Request *req) switch (cywee_Inactivity_Info->output_number) { case INACTIVITY_MODE_SEDENTARY_OUTPUT: - NotificationManager::GetInstance()->ShowNotify(showSedentaryReminderNotify, (uint16_t)topic, true); - // if(SedentaryReminderViewEventListener::GetInstance().IsReminderTime() == true) - // { - // NotificationManager::GetInstance()->ShowNotify(showSedentaryReminderNotify, (uint16_t)topic, true); - // } + if(cywee_Inactivity_Info->sedentary_status == 3) + { + NotificationManager::GetInstance()->ShowNotify(showSedentaryReminderNotify, (uint16_t)topic, true); + // if(SedentaryReminderViewEventListener::GetInstance().IsReminderTime() == true) + // { + // NotificationManager::GetInstance()->ShowNotify(showSedentaryReminderNotify, (uint16_t)topic, true); + // } + } 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 65b672eac..80e17978e 100644 --- a/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h +++ b/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h @@ -30,8 +30,8 @@ extern int CWM_OS_i2cWrite(uint16_t slaveAddr, uint16_t reg, int regLength, uint extern int CWM_OS_i2cTransfer(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *writeData, int writeDataSize, uint8_t *readData, int readDataSize, int busIndex); extern void* CWM_OS_malloc(int size); extern void CWM_OS_free(void *ptr); -extern void CWM_OS_saveData(uint8_t* data, uint32_t len); -extern void CWM_OS_restoreData(uint8_t* data, uint32_t len); +extern void CWM_OS_saveData(int* data, uint32_t len); +extern void CWM_OS_restoreData(int* data, uint32_t len); /********************CYWEE LIB*************************/ @@ -503,6 +503,7 @@ void cywee_inactivity_mode_change(int mode); void cywee_activity_mode_change(int mode); void cywee_hand_updown_switch(int cmd); void cywee_ar_alert_switch(int cmd); +void cywee_save_data(void); 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 e8ea39f7a..dcb5dc93e 100644 --- a/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h +++ b/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h @@ -76,6 +76,7 @@ extern "C" { #define CYWEE_SERVICE_CMD_RESET_DAILY_DATA 0x2B +#define CYWEE_SERVICE_CMD_SAVE_DATA 0x2C errcode_t uapi_cywee_service_init(void); void uapi_cywee_service_deinit(void); 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 6c2a1eeca..a7bdfb030 100644 --- a/code/sdk/drivers/peripheral/cywee/service/cywee_at_cmd.c +++ b/code/sdk/drivers/peripheral/cywee/service/cywee_at_cmd.c @@ -91,6 +91,9 @@ static uint32_t cywee_do_test(uint8_t *para, uint32_t paraLen, char *strCommonCm } else if (strcmp(mode, "resume") == 0) { PRINT("cywee resume\n"); do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME,NULL); + } else if (strcmp(mode, "reset") == 0) { + PRINT("cywee reset daily data\n"); + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESET_DAILY_DATA,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 bf4820380..e007f1a13 100644 --- a/code/sdk/drivers/peripheral/cywee/service/cywee_service.c +++ b/code/sdk/drivers/peripheral/cywee/service/cywee_service.c @@ -376,6 +376,10 @@ static void cywee_service_check_task(void const *arg) cywee_reset_daily_data(); break; + case CYWEE_SERVICE_CMD_SAVE_DATA: + cywee_save_data(); + break; + default: PRINT("unkonw cmd \r\n"); break; diff --git a/code/sdk/drivers/peripheral/cywee/src/board_yh601s.c b/code/sdk/drivers/peripheral/cywee/src/board_yh601s.c index 0054c7392..599bd1856 100644 --- a/code/sdk/drivers/peripheral/cywee/src/board_yh601s.c +++ b/code/sdk/drivers/peripheral/cywee/src/board_yh601s.c @@ -263,7 +263,7 @@ int CWM_OS_dbgPrintf(const char * format,...) return 0; } #define CWM_DATA_PATH "/system/cyweedata" -void CWM_OS_saveData(uint8_t* data, uint32_t len){ +void CWM_OS_saveData(int* data, uint32_t len){ FILE * fp = fopen(CWM_DATA_PATH,"wb"); if(fp==NULL) @@ -278,7 +278,7 @@ void CWM_OS_saveData(uint8_t* data, uint32_t len){ } fclose(fp); } -void CWM_OS_restoreData(uint8_t* data, uint32_t len){ +void CWM_OS_restoreData(int* data, uint32_t len){ FILE * fp = fopen(CWM_DATA_PATH,"rb"); if(fp==NULL) { diff --git a/code/sdk/drivers/peripheral/cywee/src/main_dml.c b/code/sdk/drivers/peripheral/cywee/src/main_dml.c index 06eb70964..8a75043a4 100644 --- a/code/sdk/drivers/peripheral/cywee/src/main_dml.c +++ b/code/sdk/drivers/peripheral/cywee/src/main_dml.c @@ -41,6 +41,14 @@ static uint8_t hrs = 0; uint8_t hrs_mode_state = 0; +int history_step = 0; +int stepcount = 0; + +void cywee_save_data(void) +{ + CWM_OS_saveData(&stepcount,sizeof(int)); +} + void cywee_ar_alert_switch(int cmd) { memset(&scl, 0, sizeof(scl)); @@ -63,6 +71,7 @@ void cywee_reset_daily_data(void) { memset(&scl, 0, sizeof(scl)); CWM_SettingControl(SCL_RESET_DAILY_INFO, &scl); + history_step = 0; } //INT[1] : 0 立即输出,但不中止睡眠。 1 立即输出且中止睡眠 @@ -604,10 +613,10 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) { (int)sensorEVT->fData[7], (int)sensorEVT->fData[8], (int)sensorEVT->fData[14]); - int stepcount = (int)sensorEVT->fData[1]; + stepcount = (int)sensorEVT->fData[1] + history_step; memset(&c_activity_result_t,0,sizeof(cywee_activity_result_t)); c_activity_result_t.activity_mode = (int)sensorEVT->fData[0]; - c_activity_result_t.steps = (int)sensorEVT->fData[1]; + c_activity_result_t.steps = stepcount; c_activity_result_t.distance = (int)sensorEVT->fData[2]; c_activity_result_t.calories = (int)sensorEVT->fData[3]; c_activity_result_t.step_frequency = (int)sensorEVT->fData[5]; @@ -615,7 +624,6 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) { c_activity_result_t.pace = (int)sensorEVT->fData[7]; c_activity_result_t.hrs = hrs; cywee_func(CYWEE_MSG_TYPE_ACTIVITY_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t)); - CustomEventPublish(TOPIC_EVENT_STEPDATA_UPDATE,&stepcount,sizeof(int)); } break; @@ -673,6 +681,8 @@ void CWM_AP_dmlSensorDataOutput_listen(const dml_sensorData_t * pSdo) { } #endif +// int cm__hs1__init(void); +// int cm__hs1__deinit(void); int cywee_main_dml(void) { @@ -736,9 +746,27 @@ int cywee_main_dml(void) CWM_LibPostInit(CWM_AP_SensorListen); //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); - - //get chip information +#if 0 + memset(&scl, 0, sizeof(scl)); + scl.iData[0] = 1; + scl.iData[1] = 31010100; + CWM_SettingControl(SCL_CHIP_VENDOR_CONFIG, &scl); + + //1.Init data + uint32_t irqMask = 0; + irqMask = osal_irq_lock(); + cm__hs1__init(); + + //2.Init CWM lib + CWM_LibPostInit(CWM_AP_SensorListen); + //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + + //3.Deinit data + cm__hs1__deinit(); + osal_irq_restore(irqMask); +#endif + //get chip information char chipInfo[64]; @@ -784,9 +812,9 @@ int cywee_main_dml(void) scl.iData[7] = 5; //轴向配置 #if 1 scl.iData[3] = 2; - scl.iData[4] = 2; //1 anytime 2 fifo - scl.iData[6] = 15; //先設定5 - scl.iData[8] = 13; // for st sensor(52Hz) + scl.iData[4] = 1; //1 anytime 2 fifo + scl.iData[6] = 25; //先設定5 + scl.iData[8] = 26; // for st sensor(52Hz) #else scl.iData[3] = 2; scl.iData[4] = 1; //1 anytime 2 fifo @@ -896,6 +924,7 @@ int cywee_main_dml(void) // CWM_Sensor_Enable(IDX_ALGO_ANY_MOTIOIN); //CWM_Sensor_Enable(IDX_ALGO_ABSOLUTE_STATIC); //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__); + CWM_OS_restoreData(&history_step,sizeof(int)); cywee_activity_mode_change(SPORT_ACTIVE_MODE_NORMAL); diff --git a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c index 907034d37..94df49022 100644 --- a/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c +++ b/code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c @@ -43,7 +43,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[5]; +gsenson_t gsensordata[8]; #ifdef SPO2_VECTOR #include "spo2_vec.h" @@ -2765,19 +2765,24 @@ void hx3695_hrs_ppg_Int_handle(void) PRINT("*count : %d \r\n",*count); if(*count < 10) { - gsensor_get_n_data(5,gsensordata); + gsensor_get_n_data(8,gsensordata); for(ii=0; ii<*count; ii++) { - // 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; - gsen_fifo_x_send[ii] = gsensordata[ii/2].x * 2048; - gsen_fifo_y_send[ii] = gsensordata[ii/2].y * 2048; - gsen_fifo_z_send[ii] = gsensordata[ii/2].z * 2048; - + 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 * 2048; + gsen_fifo_y_send[ii] = gsensordata[ii].y * 2048; + gsen_fifo_z_send[ii] = gsensordata[ii].z * 2048; + } //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); 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); @@ -3223,16 +3228,22 @@ void hx3695_spo2_ppg_Int_handle(void) PRINT("*count[%d] \r\n",*count); if(*count < 10) { - gsensor_get_n_data(5,gsensordata); + gsensor_get_n_data(8,gsensordata); for(ii=0; ii<*count; ii++) { - // 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; - gsen_fifo_x_send[ii] = gsensordata[ii/2].x * 2048; - gsen_fifo_y_send[ii] = gsensordata[ii/2].y * 2048; - gsen_fifo_z_send[ii] = gsensordata[ii/2].z * 2048; + 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 * 2048; + gsen_fifo_y_send[ii] = gsensordata[ii].y * 2048; + gsen_fifo_z_send[ii] = gsensordata[ii].z * 2048; + } 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_send[ii],gsen_fifo_y_send[ii],gsen_fifo_z_send[ii]); diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.c b/code/sdk/drivers/peripheral/utils/custom_utils.c index fd80eab99..ab49fb64e 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils.c @@ -159,6 +159,9 @@ void uapi_force_reboot(void) } void shutdown_reboot_prejobs_task(void) { + //保存步数 + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_SAVE_DATA,NULL); + addressbookTowrite(); uapi_calendar_store_date();