Merge #893 into sdk602patch0626 from refs/changes/893/head
author彭磊 <1624952103@qq.com>
Fri, 6 Sep 2024 08:53:28 +0000 (08:53 +0000)
committersnickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Fri, 6 Sep 2024 08:53:28 +0000 (08:53 +0000)
Code review from 彭磊

* refs/changes/893/head: (3 commits squashed)

  - 修复睡眠数据存储bug

  - 优化睡眠模式参数初始化过程
    修复运动模式卡路里不增加的BUG

  - Merge branch &#39;sdk602patch0626&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0626

Signed-off-by: aliyun6865282430 <1624952103@qq.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Merged-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/893
code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/include/AlarmClockTimerConfig.h
code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp
code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp
code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h
code/sdk/drivers/peripheral/cywee/service/cywee_service.c
code/sdk/drivers/peripheral/cywee/src/main_dml.c
code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c
code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c
code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp
code/sdk/drivers/peripheral/utils/custom_utils.c
code/sdk/drivers/peripheral/utils/custom_utils.h

index aa93b63..c063a8b 100644 (file)
@@ -1,8 +1,8 @@
 /*\r
  * @Author: penglei 1624952103@qq.com\r
  * @Date: 2024-06-07 11:18:25\r
- * @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-07-17 09:56:10\r
+ * @LastEditors: penglei 1624952103@qq.com\r
+ * @LastEditTime: 2024-09-06 11:34:44\r
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/include/AlarmClockTimerConfig.h\r
  * @Description: \r
  * \r
@@ -69,7 +69,7 @@ int32_t AlarmGetCurrentTimeInfo(struct tm *timeInfo);
 void set_sleep_and_wake_time(void);\r
 void set_sedentary_data(void);\r
 void get_sleep_time_notify(void);\r
-void clean_sleep_flag(void);\r
+void clean_sleep_monitoring_flag(void);\r
 void clean_sedentary_flag(void);\r
 void set_drinkreminder_data(void);\r
 #ifdef __cplusplus\r
index 5523af3..e34dcc8 100644 (file)
@@ -76,20 +76,20 @@ extern "C"
     static int sleep_notify_time_min = 0;\r
     static int sleep_notify_time_hour = 0;\r
 \r
-#define SEDENTARY_TIME_RANGE (((curTime.tm_hour > sedentary_start_hour) || (curTime.tm_hour == sedentary_start_hour && curTime.tm_min >= sedentary_start_min)) && \\r
-                              ((curTime.tm_hour < sedentary_stop_hour) || (curTime.tm_hour == sedentary_stop_hour && curTime.tm_min < sedentary_stop_min)))\r
-\r
-#define WAKE_TIME_RANGE (((wake_time_hour < sleep_time_hour) &&                                              \\r
-                          ((curTime.tm_hour > wake_time_hour) ||                                             \\r
-                           (curTime.tm_hour == wake_time_hour && curTime.tm_min >= wake_time_min)) &&        \\r
-                          ((curTime.tm_hour < sleep_time_hour) ||                                            \\r
-                           (curTime.tm_hour == sleep_time_hour && curTime.tm_min < sleep_time_min))) ||      \\r
-                         ((wake_time_hour >= sleep_time_hour) &&                                             \\r
-                              (((curTime.tm_hour > wake_time_hour) ||                                        \\r
-                                (curTime.tm_hour == wake_time_hour && curTime.tm_min >= wake_time_min)) ||   \\r
-                               ((curTime.tm_hour < sleep_time_hour) ||                                       \\r
-                                (curTime.tm_hour == sleep_time_hour && curTime.tm_min < sleep_time_min))) || \\r
-                          ((curTime.tm_hour > wake_time_hour) && (curTime.tm_hour < sleep_time_hour))))\r
+// #define SEDENTARY_TIME_RANGE (((curTime.tm_hour > sedentary_start_hour) || (curTime.tm_hour == sedentary_start_hour && curTime.tm_min >= sedentary_start_min)) && \\r
+//                               ((curTime.tm_hour < sedentary_stop_hour) || (curTime.tm_hour == sedentary_stop_hour && curTime.tm_min < sedentary_stop_min)))\r
+\r
+// #define WAKE_TIME_RANGE (((wake_time_hour < sleep_time_hour) &&                                              \\r
+//                           ((curTime.tm_hour > wake_time_hour) ||                                             \\r
+//                            (curTime.tm_hour == wake_time_hour && curTime.tm_min >= wake_time_min)) &&        \\r
+//                           ((curTime.tm_hour < sleep_time_hour) ||                                            \\r
+//                            (curTime.tm_hour == sleep_time_hour && curTime.tm_min < sleep_time_min))) ||      \\r
+//                          ((wake_time_hour >= sleep_time_hour) &&                                             \\r
+//                               (((curTime.tm_hour > wake_time_hour) ||                                        \\r
+//                                 (curTime.tm_hour == wake_time_hour && curTime.tm_min >= wake_time_min)) ||   \\r
+//                                ((curTime.tm_hour < sleep_time_hour) ||                                       \\r
+//                                 (curTime.tm_hour == sleep_time_hour && curTime.tm_min < sleep_time_min))) || \\r
+//                           ((curTime.tm_hour > wake_time_hour) && (curTime.tm_hour < sleep_time_hour))))\r
 \r
     // 设置目标睡眠时间\r
     void set_sleep_and_wake_time(void)\r
@@ -101,6 +101,7 @@ extern "C"
         sleep_time_min = sleep_time & 0x0000FFFF;\r
         wake_time_hour = (wake_up_time & 0xFFFF0000) >> 16;\r
         wake_time_min = wake_up_time & 0x0000FFFF;\r
+        clean_sleep_monitoring_flag();\r
         // 解析结束时间\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleep_time_hour:%d sleep_time_min:%d wake_time_hour:%d wake_time_min:%d", sleep_time_hour, sleep_time_min, wake_time_hour, wake_time_min);\r
     }\r
@@ -120,6 +121,7 @@ extern "C"
         sedentary_stop_hour = (sedentary_time & 0X00FF0000) >> 16;\r
         sedentary_start_min = (sedentary_time & 0X0000FF00) >> 8;\r
         sedentary_start_hour = sedentary_time & 0X000000FF;\r
+        clean_sedentary_flag();\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "set_sedentary_data:%d:%d~%d:%d", sedentary_start_hour, sedentary_start_min, sedentary_stop_hour, sedentary_stop_min);\r
     }\r
 \r
@@ -150,32 +152,31 @@ extern "C"
         }\r
     }\r
 \r
-    static bool is_drinkremind_time_range(struct tm &curTime)\r
+    static bool is_time_range(struct tm &curTime,int start_time_hour,int start_time_min,int end_time_hour,int end_time_min)\r
     {\r
-        int drinkreminder_start_time_min = drinkreminder_start_hour * 60 + drinkreminder_start_min; /* 开始时间的分钟数 */\r
-        int drinkreminder_end_time_min = drinkreminder_end_hour * 60 + drinkreminder_end_min;       /* 结束时间的分钟数 */\r
+        int start_min = start_time_hour * 60 + start_time_min; /* 开始时间的分钟数 */\r
+        int end_min = end_time_hour * 60 + end_time_min;       /* 结束时间的分钟数 */\r
         int cur_time_min = curTime.tm_hour * 60 + curTime.tm_min;                                   /* 当前时间的分钟数 */\r
 \r
         // 处理非跨天的情况\r
-        if (drinkreminder_end_time_min > drinkreminder_start_time_min)\r
+        if (end_min > start_min)\r
         {\r
-            if (cur_time_min >= drinkreminder_start_time_min && cur_time_min <= drinkreminder_end_time_min)\r
+            if (cur_time_min >= start_min && cur_time_min <= end_min)\r
             {\r
                 return true;\r
             }\r
         }\r
         else // 处理跨天的情况\r
         {\r
-            if (cur_time_min >= drinkreminder_start_time_min || cur_time_min <= drinkreminder_end_time_min)\r
+            if (cur_time_min >= start_min || cur_time_min <= end_min)\r
             {\r
                 return true;\r
             }\r
         }\r
-\r
         return false;\r
     }\r
 \r
-    void clean_sleep_flag(void)\r
+    void clean_sleep_monitoring_flag(void)\r
     {\r
         uapi_dev_runtime_set_sleep_monitoring_status(0);\r
         uapi_dev_runtime_set_nap_monitoring_status(0);\r
@@ -411,11 +412,11 @@ extern "C"
                 }\r
             }\r
             // 退出睡眠检测模式并进入小睡检测模式\r
-            if (WAKE_TIME_RANGE && (uapi_dev_runtime_get_nap_monitoring_status() == 0))\r
+            if (!is_time_range(curTime,sleep_time_hour,sleep_time_min,wake_time_hour,wake_time_min) && (uapi_dev_runtime_get_nap_monitoring_status() == 0))\r
             {\r
                 // uapi_dev_runtime_set_sleep_status(0);\r
                 //  do_cywee_service_check_msg(CYWEE_SERVICE_CMD_GET_SLEEP_DATA, NULL);\r
-                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "起床啦!");\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "起床啦!");\r
 \r
                 if (curTime.tm_hour == wake_time_hour && curTime.tm_min == wake_time_min && curTime.tm_sec == 0)\r
                 {\r
@@ -441,15 +442,16 @@ extern "C"
                 }\r
             }\r
             // 进入睡眠检测模式并退出小睡检测模式\r
-            else if ((!WAKE_TIME_RANGE) && (uapi_dev_runtime_get_sleep_monitoring_status() == 0))\r
+            else if (is_time_range(curTime,sleep_time_hour,sleep_time_min,wake_time_hour,wake_time_min) && (uapi_dev_runtime_get_sleep_monitoring_status() == 0))\r
             {\r
+                int cmd = 1;\r
                 uapi_dev_runtime_set_sleep_status(0); // 清零睡眠状态\r
                 uapi_dev_runtime_set_absolute_static_status(0); // 清零绝对静止状态\r
                 OHOS::clean_sleep_data(); // 清零睡眠文件存储数据\r
                 uapi_dev_runtime_set_sleep_monitoring_status(1);\r
                 uapi_dev_runtime_set_nap_monitoring_status(0);\r
                 set_keep_in_wear_det_mode(0); //关闭小睡佩戴监测\r
-                do_cywee_service_check_msg(CYWEE_SERVICE_CMD_GET_SLEEP_DATA, NULL); // 强制获取小睡数据,结束小睡\r
+                do_cywee_service_check_msg(CYWEE_SERVICE_CMD_GET_SLEEP_DATA, &cmd); // 强制获取小睡数据,结束小睡\r
                 // 睡眠弹窗\r
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "要睡觉啦!");\r
                 // 设置状态为睡眠\r
@@ -468,12 +470,12 @@ extern "C"
         // 久坐提醒\r
         if (sedentary_switch)\r
         {\r
-            if (SEDENTARY_TIME_RANGE && (uapi_dev_runtime_get_sedentary_status() == 0))\r
+            if (is_time_range(curTime,sedentary_start_hour,sedentary_start_min,sedentary_stop_hour,sedentary_stop_min) && (uapi_dev_runtime_get_sedentary_status() == 0))\r
             {\r
                 uapi_dev_runtime_set_sedentary_status(1);\r
                 do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OPEN_SEDENTARY, NULL);\r
             }\r
-            else if ((!SEDENTARY_TIME_RANGE) && (uapi_dev_runtime_get_sedentary_status() == 1))\r
+            else if (!is_time_range(curTime,sedentary_start_hour,sedentary_start_min,sedentary_stop_hour,sedentary_stop_min) && (uapi_dev_runtime_get_sedentary_status() == 1))\r
             {\r
                 uapi_dev_runtime_set_sedentary_status(0);\r
                 do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CLOSE_SEDENTARY, NULL);\r
@@ -497,7 +499,7 @@ extern "C"
             else if (drinkreminder_switch == 2)\r
             {\r
                 // 判断当前时间是否在提醒时间段内\r
-                if (is_drinkremind_time_range(curTime))\r
+                if (is_time_range(curTime,drinkreminder_start_hour,drinkreminder_start_min,drinkreminder_end_hour,drinkreminder_end_min))\r
                 {\r
                     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " curTime.tm_sec = %d", curTime.tm_sec);\r
                     double interval_time = (drinkreminder_freq == 0) ? 0.5 : drinkreminder_freq;             // 频率设置\r
@@ -531,7 +533,7 @@ extern "C"
                         }\r
                     }\r
                 }\r
-                else if (!is_drinkremind_time_range(curTime) && uapi_dev_runtime_get_drinkremind_status() == 1)\r
+                else if (!is_time_range(curTime,drinkreminder_start_hour,drinkreminder_start_min,drinkreminder_end_hour,drinkreminder_end_min) && uapi_dev_runtime_get_drinkremind_status() == 1)\r
                 {\r
                     uapi_dev_runtime_set_drinkremind_status(0);\r
                 }\r
@@ -591,6 +593,11 @@ extern "C"
         int32_t timerStatus;\r
         int32_t ret;\r
 \r
+        set_sleep_and_wake_time();\r
+        set_sedentary_data();\r
+        set_drinkreminder_data();\r
+        get_sleep_time_notify();\r
+\r
         g_alarmCtrA.state = ALARM_STATUS_UNUSED;\r
         g_alarmCtrB.state = ALARM_STATUS_UNUSED;\r
         g_AlarmHandle = osTimerNew(AlarmScan, osTimerPeriodic, nullptr, nullptr);\r
@@ -613,10 +620,7 @@ extern "C"
         {\r
             return ERRCODE_FAIL;\r
         }\r
-        set_sleep_and_wake_time();\r
-        set_sedentary_data();\r
-        set_drinkreminder_data();\r
-        get_sleep_time_notify();\r
+\r
         return ERRCODE_SUCC;\r
     }\r
 \r
index a508aca..ef2d264 100644 (file)
@@ -751,7 +751,6 @@ void set_sedent_param(  msg_sedent_set_param_info_t * data)
     printf("久坐提醒时间间隔(单位小时):%d\r\n",data->frequenc);
     
     set_sedentary_data();
-    clean_sedentary_flag();
     return;
 }
 
@@ -1203,7 +1202,6 @@ void ble_set_sleep_remind(msg_get_sleep_param_info_t data)
         //更新睡眠配置
         OHOS::SleepModel::GetInstance().set_sleep_goal();
         set_sleep_and_wake_time();
-        clean_sleep_flag();
         get_sleep_time_notify();
     }  
     return;
index b62bb36..61bf003 100644 (file)
@@ -522,7 +522,7 @@ void cywee_oncharging_update(int oncharging_status);
 void cywee_wearstatus_update(int wearstatus);
 void cywee_hrs_update(int hrs_data);
 void cywee_set_user_info(void);
-void cywee_get_sleep_data(void);
+void cywee_get_sleep_data(int cmd);
 void cywee_reset_daily_data(void);
 void cywee_inactivity_mode_change(int mode);
 void cywee_activity_mode_change(int mode);
index 7a7b732..ca12517 100644 (file)
@@ -366,7 +366,7 @@ static void cywee_service_check_task(void const *arg)
             break;
 
             case CYWEE_SERVICE_CMD_GET_SLEEP_DATA:
-                cywee_get_sleep_data();
+                cywee_get_sleep_data(mail.data);
             break;
 
             case CYWEE_SERVICE_CMD_RESET_DAILY_DATA:
index 68d9486..5ae711c 100644 (file)
@@ -395,12 +395,12 @@ void cywee_reset_daily_data(void)
 }
 
 //INT[1] : 0 立即输出,但不中止睡眠。 1 立即输出且中止睡眠
-void cywee_get_sleep_data(void)
+void cywee_get_sleep_data(int cmd)
 {
     CWM_OS_dbgPrintf("cywee_get_sleep_data\n");
     memset(&scl, 0, sizeof(scl));
     scl.iData[0] = 1;
-    scl.iData[1] = 1;
+    scl.iData[1] = cmd;
     CWM_SettingControl(SCL_REQ_SLEEPING_DATA, &scl);
 }
 
@@ -873,9 +873,9 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
                 c_inactivity_result_t.minute = (int)sensorEVT->fData[6];
 
                 if(c_inactivity_result_t.status == 0)
-                    uapi_dev_runtime_set_sleep_status(1);
+                    uapi_dev_runtime_set_nap_status(1);
                 else if(c_inactivity_result_t.status == 14)
-                    uapi_dev_runtime_set_sleep_status(0);
+                    uapi_dev_runtime_set_nap_status(0);
 
                 cywee_func(CYWEE_MSG_TYPE_INACTIVITY_UPDATE,&c_inactivity_result_t,sizeof(cywee_inactivity_result_t));
 
@@ -970,7 +970,7 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
                 if((abs_static_timestampe - asleep_timestampe) >= 60 * 90)
                 {
                     uapi_dev_runtime_set_absolute_static_status(1);
-                    cywee_get_sleep_data();
+                    cywee_get_sleep_data(1);
                 }  
                 else
                 {
index 79975e1..af79088 100644 (file)
@@ -2720,14 +2720,11 @@ static void get_avg_hrs(int32_t hrs)
 \r
 void hx3695_wearstatus_update(void)\r
 {\r
-    if(uapi_dev_runtime_get_sleep_monitoring_status())//处于睡眠监测 上报活体佩戴\r
+    if(wear_status != hrsresult.wearstatus)\r
     {\r
-        if(wear_status != hrsresult.wearstatus)\r
-        {\r
-            wear_status = hrsresult.wearstatus;\r
-            cywee_data = wear_status;\r
-            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&cywee_data);\r
-        }\r
+        wear_status = hrsresult.wearstatus;\r
+        cywee_data = wear_status;\r
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&cywee_data);\r
     }\r
 }\r
 \r
@@ -2888,8 +2885,9 @@ void hx3695_hrs_ppg_Int_handle(void)
 \r
     if(hrs_wear_status == MSG_HRS_WEAR && hrsresult.hr_living == MSG_LIVING_TRUE)\r
     {\r
-        if(hrsresult.lastesthrs > 60 || hrsresult.lastesthrs == 0)\r
+        if(hrsresult.lastesthrs > 60 && hrsresult.lastesthrs < 220)\r
                      get_avg_hrs(hrsresult.lastesthrs);\r
+\r
         hrsresult.wearstatus = MSG_HRS_WEAR;\r
     }\r
     else\r
@@ -2900,7 +2898,7 @@ void hx3695_hrs_ppg_Int_handle(void)
     hx3695_msg_callback_t func =  hx3695_get_send_msg_callback_func();\r
     if(func != NULL)\r
     {\r
-      PRINT("hrsresult.lastesthrs : %d \n",hrsresult.lastesthrs);\r
+      //PRINT("hrsresult.lastesthrs : %d \n",hrsresult.lastesthrs);\r
       func(HX3695_MSG_TYPE_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
       if(uapi_get_cywee_static_state())\r
       {\r
@@ -2909,6 +2907,10 @@ void hx3695_hrs_ppg_Int_handle(void)
       func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
     }\r
 \r
+    if(uapi_dev_runtime_get_train_status())\r
+    {\r
+        hx3695_wearstatus_update();\r
+    }\r
 \r
     //PRINT("hx3695 data_cnt: %d,  hr_living: %d, hr_living_qu: %d, hr_living_std: %d, hr_result:%d \r\n",\r
                //alg_results.data_cnt,  hrsresult.hr_living, hrsresult.hr_living_qu, hrsresult.hr_living_std, hrsresult.lastesthrs);\r
index a0f4d17..4c34ab2 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com
  * @Date: 2024-03-13 15:08:38
  * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-08-30 11:36:03
+ * @LastEditTime: 2024-09-06 14:14:16
  * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c
  * @Description: 
  * 
@@ -76,10 +76,6 @@ void ppg_send_cmd_to_driver(char* mode, uint8_t enable)
         {
 #ifdef HRS_ALG_LIB   
             hx3695_hrs_disable();
-            if(md == HRS_MODE && enable == 0)
-            {
-                hx3695_wearstatus_update();
-            }
 #endif
         }else  if(md == HRV_MODE)
         {
index dc6c63d..7c7c21c 100644 (file)
@@ -47,6 +47,7 @@ extern "C" {
 #include "custom_utils.h"
 #include "cywee_hal.h"
 #include "cywee_service.h"
+#include "custom_runtime.h"
 
 static bool g_ppg_service_initialled = false;
 
@@ -314,6 +315,10 @@ static void ppg_service_check_task(void  *arg)
             wear_mode_state = 0;
         }else if (mail == PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST){
             //do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CLOSE_GET_ACC,NULL);
+            if(uapi_dev_runtime_get_sleep_monitoring_status())//处于睡眠监测 上报活体佩戴
+            {
+                hx3695_wearstatus_update();            
+            }
             cmd = "hrs";
             enable = 0;
             uapi_pm_remove_sleep_veto(PM_ID_HEART);
index ab5be31..c992d7a 100644 (file)
@@ -2353,13 +2353,6 @@ void uapi_exit_power_saving_mode(void)
     uapi_dev_runtime_set_saveele_status(0);
 }
 
-
-//cywee获取睡眠数据
-void uapi_cywee_get_sleep_data(void)
-{
-    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_GET_SLEEP_DATA,NULL);
-}
-
 //cywee清空每日数据
 void uapi_cywee_reset_daily_data(void)
 {
index 943d4b6..0171836 100644 (file)
@@ -237,7 +237,6 @@ uint32_t custom_i2c_resume(void);
 void uapi_cywee_get_id(uint8_t *id);
 int custom_exit_lpm(void);
 
-void uapi_cywee_get_sleep_data(void);
 void uapi_cywee_time_sync(void);
 void uapi_cywee_get_chipinfo(char *databuf,uint8_t len);
 void uapi_cywee_get_version(char *databuf,uint8_t len);