#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
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
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
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
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