解决gsensor fatal error与久坐提醒误报的问题,添加步数保存和午夜清零运动数据功能。 185/1 185/head 186/target/1
authorpenglei <1624952103@qq.com>
Tue, 28 May 2024 10:48:23 +0000 (18:48 +0800)
committerpenglei <1624952103@qq.com>
Tue, 28 May 2024 10:48:23 +0000 (18:48 +0800)
code/sdk/application/wearable/fd230app/nativeui/activity/src/ActivityModel.cpp
code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp
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_at_cmd.c
code/sdk/drivers/peripheral/cywee/service/cywee_service.c
code/sdk/drivers/peripheral/cywee/src/board_yh601s.c
code/sdk/drivers/peripheral/cywee/src/main_dml.c
code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c
code/sdk/drivers/peripheral/utils/custom_utils.c

index fe8dcad..c8a9a98 100644 (file)
@@ -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);
     }
index c068f7a..01bf004 100644 (file)
@@ -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;
index 65b672e..80e1797 100644 (file)
@@ -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()
index e8ea39f..dcb5dc9 100644 (file)
@@ -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);
index 6c2a1ee..a7bdfb0 100644 (file)
@@ -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;
index bf48203..e007f1a 100644 (file)
@@ -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;
index 0054c73..599bd18 100644 (file)
@@ -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)
     {
index 06eb709..8a75043 100644 (file)
@@ -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);
     
index 907034d..94df490 100644 (file)
@@ -43,7 +43,7 @@ int16_t gsen_fifo_x[64]={0};
 int16_t gsen_fifo_y[64]={0};\r
 int16_t gsen_fifo_z[64]={0};\r
 \r
-gsenson_t gsensordata[5];\r
+gsenson_t gsensordata[8];\r
 \r
 #ifdef SPO2_VECTOR\r
 #include "spo2_vec.h"\r
@@ -2765,19 +2765,24 @@ void hx3695_hrs_ppg_Int_handle(void)
     PRINT("*count : %d \r\n",*count);\r
     if(*count < 10)\r
     {\r
-      gsensor_get_n_data(5,gsensordata);\r
+      gsensor_get_n_data(8,gsensordata);\r
        for(ii=0; ii<*count; ii++)\r
        {\r
-              // gsen_fifo_x_send[ii] = (gsensordata[ii*2].x + gsensordata[2*ii + 1].x)/2;\r
-              // gsen_fifo_y_send[ii] = (gsensordata[ii*2].y + gsensordata[2*ii + 1].y)/2;\r
-              // gsen_fifo_z_send[ii] = (gsensordata[ii*2].z + gsensordata[2*ii + 1].z)/2;\r
-              gsen_fifo_x_send[ii] = gsensordata[ii/2].x * 2048;\r
-              gsen_fifo_y_send[ii] = gsensordata[ii/2].y * 2048;\r
-              gsen_fifo_z_send[ii] = gsensordata[ii/2].z * 2048;\r
-\r
+          if(ii == 8)\r
+          {\r
+              gsen_fifo_x_send[ii] = gsen_fifo_x_send[ii - 1];\r
+              gsen_fifo_y_send[ii] = gsen_fifo_y_send[ii - 1];\r
+              gsen_fifo_z_send[ii] = gsen_fifo_z_send[ii - 1];\r
+          }\r
+          else\r
+          {\r
+              gsen_fifo_x_send[ii] = gsensordata[ii].x * 2048;\r
+              gsen_fifo_y_send[ii] = gsensordata[ii].y * 2048;\r
+              gsen_fifo_z_send[ii] = gsensordata[ii].z * 2048;\r
+          }\r
           //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);\r
           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);\r
-          \r
+\r
        }\r
       hrs_wear_status = hx3695_hrs_get_wear_status();\r
       PRINT("hrs_wear_status:    %d !!\r\n", hrs_wear_status);\r
@@ -3223,16 +3228,22 @@ void hx3695_spo2_ppg_Int_handle(void)
     PRINT("*count[%d] \r\n",*count);\r
     if(*count < 10)\r
     {\r
-        gsensor_get_n_data(5,gsensordata);\r
+       gsensor_get_n_data(8,gsensordata);\r
        for(ii=0; ii<*count; ii++)\r
        {\r
  \r
-          // gsen_fifo_x_send[ii] = (gsensordata[ii*2].x + gsensordata[2*ii + 1].x)/2;\r
-          // gsen_fifo_y_send[ii] = (gsensordata[ii*2].y + gsensordata[2*ii + 1].y)/2;\r
-          // gsen_fifo_z_send[ii] = (gsensordata[ii*2].z + gsensordata[2*ii + 1].z)/2;\r
-          gsen_fifo_x_send[ii] = gsensordata[ii/2].x * 2048;\r
-          gsen_fifo_y_send[ii] = gsensordata[ii/2].y * 2048;\r
-          gsen_fifo_z_send[ii] = gsensordata[ii/2].z * 2048;\r
+          if(ii == 8)\r
+          {\r
+              gsen_fifo_x_send[ii] = gsen_fifo_x_send[ii - 1];\r
+              gsen_fifo_y_send[ii] = gsen_fifo_y_send[ii - 1];\r
+              gsen_fifo_z_send[ii] = gsen_fifo_z_send[ii - 1];\r
+          }\r
+          else\r
+          {\r
+              gsen_fifo_x_send[ii] = gsensordata[ii].x * 2048;\r
+              gsen_fifo_y_send[ii] = gsensordata[ii].y * 2048;\r
+              gsen_fifo_z_send[ii] = gsensordata[ii].z * 2048;\r
+          }\r
 \r
           PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n",\r
             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]);\r
index fd80eab..ab49fb6 100644 (file)
@@ -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();