实现喝水提醒功能(隔天的还有问题)
authorluozheng <1732036298@qq.com>
Fri, 19 Jul 2024 03:19:24 +0000 (11:19 +0800)
committerluozheng <1732036298@qq.com>
Fri, 19 Jul 2024 03:19:24 +0000 (11:19 +0800)
code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp
code/sdk/drivers/peripheral/utils/custom_runtime.c
code/sdk/drivers/peripheral/utils/custom_runtime.h

index 1d6a055..2e9a112 100644 (file)
@@ -65,13 +65,16 @@ extern "C"
     static int drinkreminder_end_min = 0;    /*喝水提醒结束分钟*/\r
     static int drinkreminder_freq = 0;       /*喝水提醒频率*/\r
     static int drinkreminder_goal = 0;       /*喝水提醒目标ml*/\r
-    static int drinkremind_cnt = 0;          // 喝水提醒计数器\r
+    static int drinkremind_expectedTime = 0;\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 DRINKREMIND_TIME_RANGE (((curTime.tm_hour > drinkreminder_start_hour) || (curTime.tm_hour == drinkreminder_start_hour && curTime.tm_min >= drinkreminder_start_min)) && \\r
+                              ((curTime.tm_hour < drinkreminder_end_hour) || (curTime.tm_hour == drinkreminder_end_hour && curTime.tm_min < drinkreminder_end_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
@@ -423,38 +426,42 @@ extern "C"
             else if (drinkreminder_switch == 2)\r
             {\r
                 // 判断当前时间是否在提醒时间段内\r
-                bool isInReminderPeriod = (curTime.tm_hour > drinkreminder_start_hour ||\r
-                                           (curTime.tm_hour == drinkreminder_start_hour && curTime.tm_min >= drinkreminder_start_min)) &&\r
-                                          (curTime.tm_hour < drinkreminder_end_hour ||\r
-                                           (curTime.tm_hour == drinkreminder_end_hour && curTime.tm_min < drinkreminder_end_min));\r
-\r
-                if (isInReminderPeriod)\r
+                if (DRINKREMIND_TIME_RANGE)\r
                 {\r
-                    double interval_time = (drinkreminder_freq == 0) ? 0.5 : drinkreminder_freq;      // 频率设置\r
-                    int currentMinutes = curTime.tm_hour * 60 + curTime.tm_min;                       // 当前时间的分钟数\r
-                    int start_time_Minutes = drinkreminder_start_hour * 60 + drinkreminder_start_min; // 开始时间的分钟数\r
-                    int drinkremind_max_cnt = (drinkreminder_end_hour * 60 + drinkreminder_end_min - start_time_Minutes) / (interval_time * 60);\r
-\r
-                    // 检查提醒次数\r
-                    if (drinkremind_cnt < drinkremind_max_cnt)\r
+                    double interval_time = (drinkreminder_freq == 0) ? 0.5 : drinkreminder_freq;             // 频率设置\r
+                    int interval_time_seconds = static_cast<int>(interval_time * 60) * 60;                   // 设置的间隔时间秒数\r
+                    int start_time_seconds = (drinkreminder_start_hour * 60 + drinkreminder_start_min) * 60; // 开始时间秒数\r
+                    int current_seconds = (curTime.tm_hour * 60 + curTime.tm_min) * 60;                      // 当前时间的秒数\r
+                    int hour_24_seconds = 24 * 60 * 60;\r
+                    if (uapi_dev_runtime_get_drinkremind_status() == 0)\r
                     {\r
-                        int expectedTime = start_time_Minutes + static_cast<int>(interval_time * 60 * drinkremind_cnt);\r
-                        if (currentMinutes == expectedTime && curTime.tm_sec == 0)\r
+                        uapi_dev_runtime_set_drinkremind_status(1);\r
+                        drinkremind_expectedTime = start_time_seconds + interval_time_seconds;\r
+                        if (drinkremind_expectedTime >= hour_24_seconds)\r
+                        {\r
+                            drinkremind_expectedTime = hour_24_seconds - drinkremind_expectedTime;\r
+                        }\r
+                    }\r
+                    else\r
+                    {\r
+                        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "current_seconds = %d,drinkremind_expectedTime = %d", current_seconds, drinkremind_expectedTime);\r
+                        if (current_seconds == drinkremind_expectedTime && curTime.tm_sec == 0)\r
                         {\r
                             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "该喝水了!!该喝水了!!");\r
-                            drinkremind_cnt++; // 增加提醒计数\r
-                            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "drinkremind_max_cnt = %d , drinkremind_cnt = %d", drinkremind_max_cnt, drinkremind_cnt);\r
                             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "curTime:%d:%d", curTime.tm_hour, curTime.tm_min);\r
+                            drinkremind_expectedTime = current_seconds + interval_time_seconds;\r
+                            if (drinkremind_expectedTime >= hour_24_seconds)\r
+                            {\r
+                                drinkremind_expectedTime = hour_24_seconds - drinkremind_expectedTime;\r
+                            }\r
+                            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "current_seconds = %d,drinkremind_expectedTime = %d", current_seconds, drinkremind_expectedTime);\r
                             AlarmEventPublish(TOPIC_EVENT_DRINKREMINDER, NULL, 0);\r
                         }\r
                     }\r
                 }\r
-                else\r
+                else if (!DRINKREMIND_TIME_RANGE && uapi_dev_runtime_get_drinkremind_status() == 1)\r
                 {\r
-                    if (drinkremind_cnt > 0) // 只有在计数器大于0时才重置\r
-                    {\r
-                        drinkremind_cnt = 0; // 重置计数器\r
-                    }\r
+                    uapi_dev_runtime_set_drinkremind_status(0);\r
                 }\r
             }\r
         }\r
index f8a717f..1e74fca 100644 (file)
@@ -72,6 +72,7 @@ typedef struct
     uint8_t sleep_status;
     uint8_t nap_status;
     uint8_t sedentary_status;
+    uint8_t drinkremind_status;
 } runtime_status_t;
 
 
@@ -311,3 +312,11 @@ uint8_t uapi_dev_runtime_get_sedentary_status(void)
     return g_runtime.sedentary_status;
 }
 
+void uapi_dev_runtime_set_drinkremind_status(uint8_t status)
+{
+    g_runtime.drinkremind_status=status;
+}
+uint8_t uapi_dev_runtime_get_drinkremind_status(void)
+{
+    return g_runtime.drinkremind_status;
+}
index dba1418..109ef63 100644 (file)
@@ -53,7 +53,8 @@ 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);
-
+void uapi_dev_runtime_set_drinkremind_status(uint8_t status);
+uint8_t uapi_dev_runtime_get_drinkremind_status(void);
 /***************************************cat1 runtime 变量设置获取函数**************************************************/