修改睡眠模式,小睡模式,久坐提醒为时间段触发。 487/1 487/head
authorpenglei <1624952103@qq.com>
Tue, 9 Jul 2024 07:07:41 +0000 (15:07 +0800)
committerpenglei <1624952103@qq.com>
Tue, 9 Jul 2024 07:07:41 +0000 (15:07 +0800)
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/application/wearable/service/msg_center/src/msg_center_customer.cpp
code/sdk/drivers/peripheral/utils/custom_runtime.c
code/sdk/drivers/peripheral/utils/custom_runtime.h

index c386bad..6b00037 100644 (file)
@@ -69,6 +69,8 @@ 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_sedentary_flag(void);\r
 #ifdef __cplusplus\r
 }\r
 #endif\r
index 5ec486d..5754880 100644 (file)
@@ -29,6 +29,7 @@
 #include "heartrate/include/HeartModel.h"\r
 #include "sleep/include/SleepModel.h"\r
 #include "cat1_server_hal.h"\r
+#include "custom_runtime.h"\r
 \r
 #ifdef __cplusplus\r
 extern "C"\r
@@ -46,19 +47,63 @@ extern "C"
     static int sleep_notify_time = 0;\r
     static int sleep_time_hour = 0;\r
     static int sleep_time_min = 0;\r
+    static int wake_time_hour = 0;\r
+    static int wake_time_min = 0;\r
     static int sedentary_switch = 0;\r
     static int sedentary_time = 0;\r
+    static int sedentary_start_hour = 0;\r
+    static int sedentary_start_min = 0;\r
+    static int sedentary_stop_hour = 0;\r
+    static int sedentary_stop_min = 0;\r
+\r
+    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
+\r
     // 设置目标睡眠时间\r
     void set_sleep_and_wake_time(void)\r
     {\r
         sleep_time = get_sleep_time_from_config_model();\r
         wake_up_time = get_wake_up_time_from_config_model();\r
+        sleep_time_hour = (sleep_time & 0xFFFF0000) >> 16;\r
+        sleep_time_min = sleep_time & 0x0000FFFF;\r
+        wake_time_hour = (wake_up_time & 0xFFFF0000) >> 16;\r
+        wake_time_min = wake_up_time & 0x0000FFFF;\r
     }\r
 \r
     void set_sedentary_data(void)\r
     {\r
         sedentary_switch = get_sedentary_switch_from_config_model();\r
         sedentary_time = get_sedentary_time_from_config_model();\r
+        sedentary_start_hour = (sedentary_time & 0XFF000000) >> 24;\r
+        sedentary_start_min = (sedentary_time & 0X00FF0000) >> 16;\r
+        sedentary_stop_hour = (sedentary_time & 0X0000FF00) >> 8;\r
+        sedentary_stop_min = sedentary_time & 0X000000FF;\r
+    }\r
+\r
+    void clean_sleep_flag(void)\r
+    {\r
+        uapi_dev_runtime_set_sleep_status(0);\r
+        uapi_dev_runtime_set_nap_status(0);\r
+    }\r
+\r
+    void clean_sedentary_flag(void)\r
+    {\r
+        uapi_dev_runtime_set_sedentary_status(0);\r
     }\r
 \r
     // 设置睡眠提醒时间\r
@@ -68,17 +113,17 @@ extern "C"
         int goal_min = (sleep_time & 0X0000FFFF);\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "goal_hour:%d goal_min:%d", goal_hour, goal_min);\r
 \r
-        sleep_time_min = (goal_min >= SLEPPNOTIFY) ? goal_min - SLEPPNOTIFY : ((goal_min + 60) - SLEPPNOTIFY); // 避免分钟数为负\r
-        sleep_time_hour = goal_hour;\r
+        sleep_notify_time_min = (goal_min >= SLEPPNOTIFY) ? goal_min - SLEPPNOTIFY : ((goal_min + 60) - SLEPPNOTIFY); // 避免分钟数为负\r
+        sleep_notify_time_hour = goal_hour;\r
         if (goal_min < SLEPPNOTIFY)\r
         {                         // 如果需要借位\r
-            sleep_time_hour -= 1; // 小时减1\r
+            sleep_notify_time_hour -= 1; // 小时减1\r
         }\r
         // 确保小时数正确\r
-        sleep_time_hour = (sleep_time_hour < 0) ? 23 : sleep_time_hour; // 处理从0点前20分钟的情况,变为前一天的23点40分\r
+        sleep_notify_time_hour = (sleep_notify_time_hour < 0) ? 23 : sleep_notify_time_hour; // 处理从0点前20分钟的情况,变为前一天的23点40分\r
 \r
-        sleep_notify_time = (sleep_time_hour << 16) | sleep_time_min;\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleep_time_hour:%d sleep_time_min:%d sleep_notify_time:%d", sleep_time_hour, sleep_time_min, sleep_notify_time);\r
+        sleep_notify_time = (sleep_notify_time_hour << 16) | sleep_notify_time_min;\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleep_time_hour:%d sleep_time_min:%d sleep_notify_time:%d", sleep_notify_time_hour, sleep_notify_time_min, sleep_notify_time);\r
     }\r
     void AlarmEventPublish(uint16_t topic, uint8_t *data, uint32_t size)\r
     {\r
@@ -252,21 +297,44 @@ extern "C"
             if (OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_REMIND))\r
             {\r
                 // 提醒一次\r
-                if ((curTime.tm_hour == sleep_time_hour) && (curTime.tm_min == sleep_time_min) && (curTime.tm_sec == 0))\r
+                if ((curTime.tm_hour == sleep_notify_time_hour) && (curTime.tm_min == sleep_notify_time_min) && (curTime.tm_sec == 0))\r
                 {\r
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "It's bedtime in 20 minutes");\r
-                    printf("20分钟后要睡觉啦!\r\n");\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "20分钟后要睡觉啦!");\r
                     AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE, (uint8_t *)sleep_notify_time, 4);\r
                     // 设置状态为睡眠提醒\r
                     OHOS::SleepModel::GetInstance().set_sleep_state(OHOS::SLEEPSTATE::SLEEPNOTIFY);\r
                 }\r
             }\r
-            // 进入睡眠模式\r
-            if (curTime.tm_hour == ((sleep_time & 0XFFFF0000) >> 16) && curTime.tm_min == (sleep_time & 0X0000FFFF) && curTime.tm_sec == 0)\r
+            // 退出睡眠模式\r
+            if (WAKE_TIME_RANGE && (uapi_dev_runtime_get_nap_status() == 0))\r
             {\r
+                uapi_dev_runtime_set_sleep_status(0);\r
+                uapi_dev_runtime_set_nap_status(1);\r
+                do_cywee_service_check_msg(CYWEE_SERVICE_CMD_GET_SLEEP_DATA, NULL);\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "起床啦!");\r
+                if(curTime.tm_hour == wake_time_hour && curTime.tm_min == wake_time_min && curTime.tm_sec == 0)\r
+                {\r
+                    // 早安提醒\r
+                    AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE, (uint8_t *)sleep_notify_time, 4);\r
+                }\r
+                if(OHOS::ConfigModel::GetInstance()->GetDnotdisturb())\r
+                {\r
+                    OHOS::ConfigModel::GetInstance()->SetDnotdisturb(false);//关闭勿扰\r
+                }\r
+                // 设置状态为小睡\r
+                OHOS::SleepModel::GetInstance().set_sleep_state(OHOS::SLEEPSTATE::WAKE);\r
+                LOS_Msleep(1000);\r
+                do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE, NULL);\r
+            }\r
+             //进入睡眠模式\r
+            else if ((!WAKE_TIME_RANGE) && (uapi_dev_runtime_get_sleep_status() == 0))\r
+            {\r
+                uapi_dev_runtime_set_sleep_status(1);\r
+                uapi_dev_runtime_set_nap_status(0);\r
                 do_cywee_service_check_msg(CYWEE_SERVICE_CMD_GET_SLEEP_DATA, NULL);\r
                 // 睡眠弹窗\r
-                printf("要睡觉啦!\r\n");\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "要睡觉啦!");\r
                 AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE, (uint8_t *)sleep_notify_time, 4);\r
                 // 设置状态为睡眠\r
                 OHOS::SleepModel::GetInstance().set_sleep_state(OHOS::SLEEPSTATE::SLEPP);\r
@@ -274,28 +342,18 @@ extern "C"
                 LOS_Msleep(1000);\r
                 do_cywee_service_check_msg(CYWEE_SERVICE_CMD_SLEEPING_MODE, NULL);\r
             }\r
-            // 退出睡眠模式\r
-            else if (curTime.tm_hour == ((wake_up_time & 0XFFFF0000) >> 16) && curTime.tm_min == (wake_up_time & 0X0000FFFF) && curTime.tm_sec == 0)\r
-            {\r
-                do_cywee_service_check_msg(CYWEE_SERVICE_CMD_GET_SLEEP_DATA, NULL);\r
-                printf("起床啦!\r\n");\r
-                // 早安提醒\r
-                AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE, (uint8_t *)sleep_notify_time, 4);\r
-                // 设置状态为小睡\r
-                OHOS::SleepModel::GetInstance().set_sleep_state(OHOS::SLEEPSTATE::WAKE);\r
-                LOS_Msleep(1000);\r
-                do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE, NULL);\r
-            }\r
         }\r
         // 久坐提醒\r
         if (sedentary_switch)\r
         {\r
-            if (curTime.tm_hour == ((sedentary_time & 0XFF000000) >> 24) && curTime.tm_min == ((sedentary_time & 0X00FF0000) >> 16) && curTime.tm_sec == 0)\r
+            if (SEDENTARY_TIME_RANGE && (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 (curTime.tm_hour == ((sedentary_time & 0X0000FF00) >> 8) && curTime.tm_min == (sedentary_time & 0X000000FF) && curTime.tm_sec == 0)\r
+            else if ((!SEDENTARY_TIME_RANGE) && (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
             }\r
         }\r
index 423cdb2..55dfaf5 100644 (file)
@@ -525,7 +525,7 @@ void set_sedent_param(  msg_sedent_set_param_info_t * data)
     p_ConfigModel->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SEDENTARY_INTERVAL,data->frequenc);
     
     set_sedentary_data();
-
+    clean_sedentary_flag();
     return;
 }
 
@@ -708,6 +708,7 @@ 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 b4d3278..278c72b 100644 (file)
@@ -502,7 +502,7 @@ void MsgCenterNotifyHfpWatchProc(const Topic topic, Request* req)
 
 
 #ifdef SUPPORT_SPO2_NOTIFICATION_TEST
-uint32_t md = PPG_SERVICE_CMD_TYPE_DO_PPG_TEST;
+
 //灰卡测试
 void MsgCenterNotifyCardProc(const Topic topic, Request* req)
 {
index 8c23033..f8a717f 100644 (file)
@@ -69,6 +69,9 @@ typedef struct
     cat1_runtime_status_t cat1_runtime;
     char current_dial_name[32];
     uint8_t time_hour_show_model;
+    uint8_t sleep_status;
+    uint8_t nap_status;
+    uint8_t sedentary_status;
 } runtime_status_t;
 
 
@@ -280,3 +283,31 @@ uint8_t uapi_dev_runtime_get_vibmod(void)
 {
     return g_runtime.vibmod;
 }
+
+void uapi_dev_runtime_set_sleep_status(uint8_t status)
+{
+    g_runtime.sleep_status=status;
+}
+uint8_t uapi_dev_runtime_get_sleep_status(void)
+{
+    return g_runtime.sleep_status;
+}
+
+void uapi_dev_runtime_set_nap_status(uint8_t status)
+{
+    g_runtime.nap_status=status;
+}
+uint8_t uapi_dev_runtime_get_nap_status(void)
+{
+    return g_runtime.nap_status;
+}
+
+void uapi_dev_runtime_set_sedentary_status(uint8_t status)
+{
+    g_runtime.sedentary_status=status;
+}
+uint8_t uapi_dev_runtime_get_sedentary_status(void)
+{
+    return g_runtime.sedentary_status;
+}
+
index ae905a2..dba1418 100644 (file)
@@ -46,6 +46,14 @@ char* uapi_dev_runtime_get_dialname(void);
 void uapi_dev_runtime_set_vibmod(uint8_t vibmod);
 
 uint8_t uapi_dev_runtime_get_vibmod(void);
+
+void uapi_dev_runtime_set_sleep_status(uint8_t status);
+uint8_t uapi_dev_runtime_get_sleep_status(void);
+void uapi_dev_runtime_set_nap_status(uint8_t status);
+uint8_t uapi_dev_runtime_get_nap_status(void);
+void uapi_dev_runtime_set_sedentary_status(uint8_t status);
+uint8_t uapi_dev_runtime_get_sedentary_status(void);
+
 /***************************************cat1 runtime 变量设置获取函数**************************************************/