}\r
}\r
\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
+ static bool is_time_range(const struct tm &curTime, int start_time_hour, int start_time_min, int end_time_hour, int end_time_min)\r
{\r
int start_min = start_time_hour * 60 + start_time_min; /* 开始时间的分钟数 */\r
int end_min = end_time_hour * 60 + end_time_min; /* 结束时间的分钟数 */\r
SetZeroAlarm(); // 重置闹钟\r
}\r
\r
- static void on_time_CallBackProc(void)\r
- {\r
- AlarmClockEventData unuse;\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "on_time_CallBackProc invoked");\r
-\r
- GraphicService::GetInstance()->PostGraphicEvent(\r
- std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ON_TIME, unuse));\r
-\r
- // AlarmTimerEventPublish(TOPIC_EVENT_ON_TIME, unuse);\r
- }\r
-\r
void AlarmScan(void *arg)\r
{\r
struct tm curTime;\r
g_alarmCtrB.callback();\r
}\r
}\r
- \r
- // 未绑定状态下,以下操作不进行\r
- if (OHOS::ConfigModel::GetInstance()->get_configData_bool(OHOS::ConfigModel::CONFIGMODEL_ITEM_FIRSTTIMESTART))\r
- return;\r
\r
- // 整点回调\r
- if (curTime.tm_min == 0 && curTime.tm_sec == 0)\r
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TIMECALL_BACK, nullptr, 0);\r
+ }\r
+\r
+ //每秒回调\r
+ void custom_timer_callback() { \r
+ struct tm curTime;\r
+ int32_t ret = AlarmGetCurrentTimeInfo(&curTime);\r
+ if (ret != ERRCODE_SUCC)\r
{\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time: %d : %d", curTime.tm_hour, curTime.tm_min);\r
- on_time_CallBackProc();\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get current time info, error code: %d", ret);\r
+ return;\r
+ }\r
+\r
+ //绑定判断\r
+ if (HandleIsBind())\r
+ return;\r
+\r
+ HandleAlarmOnTime(&curTime);\r
+ HandleSleepReminder(&curTime);\r
+\r
+ //以下弹窗被控制\r
+ if (HandleCanShowDialog())\r
+ return;\r
+\r
+ HandleWakeUp(&curTime); \r
+ HandleDrinkReminder(&curTime); \r
+ HandleHeartRateDetection(&curTime); \r
+ HandleMusicUpdate();\r
+ }\r
+ \r
+ //判断是否绑定\r
+ bool HandleIsBind(void)\r
+ {\r
+ // 未绑定状态下,以下操作不进行\r
+ if (OHOS::ConfigModel::GetInstance()->get_configData_bool(\r
+ OHOS::ConfigModel::CONFIGMODEL_ITEM_FIRSTTIMESTART)) {\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+\r
+ //判断是否可以弹窗\r
+ bool HandleCanShowDialog(void)\r
+ {\r
+ bool state = false;\r
+\r
+ if (uapi_dev_runtime_get_saveele_status)\r
+ state = true;\r
+ if (uapi_dev_runtime_get_train_status)\r
+ state = true;\r
+\r
+ return state;\r
+ }\r
+ \r
+ //整点回调\r
+ void HandleAlarmOnTime(const struct tm *curTime)\r
+ {\r
+ if (curTime->tm_min == 0 && curTime->tm_sec == 0) {\r
+ AlarmClockEventData unuse;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "on_time_CallBackProc invoked");\r
+ GraphicService::GetInstance()->PostGraphicEvent(\r
+ std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ON_TIME, unuse));\r
}\r
+ }\r
+\r
+ //睡眠提醒\r
+ void HandleSleepReminder(const struct tm *curTime) { \r
// 睡眠总开关\r
if (OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP))\r
{\r
if (OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_REMIND))\r
{\r
// 提醒一次\r
- if ((curTime.tm_hour == sleep_notify_time_hour) && (curTime.tm_min == sleep_notify_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_LOGD(WEARABLE_LOG_MODULE_APP, "It's bedtime in 20 minutes");\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "20分钟后要睡觉啦!");\r
}\r
}\r
// 退出睡眠检测模式并进入小睡检测模式\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
+ 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
- if (curTime.tm_hour == wake_time_hour && curTime.tm_min == wake_time_min && curTime.tm_sec == 0)\r
+ if (curTime->tm_hour == wake_time_hour && curTime->tm_min == wake_time_min && curTime->tm_sec == 0)\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "闹铃!");\r
//退出睡眠模式\r
}\r
}\r
// 进入睡眠检测模式并退出小睡检测模式\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
+ 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
// 设置状态为睡眠\r
OHOS::SleepModel::GetInstance().set_sleep_state(OHOS::SLEEPSTATE::SLEPP);\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_time_hour && curTime->tm_min == sleep_time_min && curTime->tm_sec == 0)\r
{\r
//进入睡眠模式\r
OHOS::SleepModeModel::GetInstance().SetSleepModeEnabled();\r
do_cywee_service_check_msg(CYWEE_SERVICE_CMD_SLEEPING_MODE, NULL); // 算法底层切换睡眠监测模式\r
}\r
}\r
+ }\r
\r
- /*省电模式下,下方弹窗均不开启*/\r
- if (uapi_dev_runtime_get_saveele_status())\r
- return;\r
\r
- // 久坐提醒\r
- if (sedentary_switch)\r
- {\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
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OPEN_SEDENTARY, NULL);\r
- }\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
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CLOSE_SEDENTARY, NULL);\r
- }\r
- }\r
- // 喝水提醒\r
- if (drinkreminder_switch)\r
- {\r
- // 定时提醒\r
- if (drinkreminder_switch == 1) // 每天在指定的时间提醒用户喝水\r
- {\r
- if (curTime.tm_hour == drinkreminder_start_hour &&\r
- curTime.tm_min == drinkreminder_start_min &&\r
- curTime.tm_sec == 0)\r
- {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "该喝水了!!该喝水了!!");\r
- AlarmEventPublish(TOPIC_EVENT_DRINKREMINDER, NULL, 0);\r
- }\r
- }\r
- // 间隔提醒\r
- else if (drinkreminder_switch == 2)\r
- {\r
- // 判断当前时间是否在提醒时间段内\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
- 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
- uapi_dev_runtime_set_drinkremind_status(1);\r
- drinkremind_expectedTime = current_seconds + interval_time_seconds;\r
- if (drinkremind_expectedTime >= hour_24_seconds)\r
- {\r
- drinkremind_expectedTime = drinkremind_expectedTime - hour_24_seconds;\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
- 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 = drinkremind_expectedTime - hour_24_seconds;\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 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
- }\r
- }\r
- // 心率周期检测 [0 1 5 10]\r
- if (OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_DETECTED))\r
- {\r
- if (curTime.tm_min % (OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_DETECTED)) == 0 && curTime.tm_sec == 0)\r
- {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Automatic heart rate detection starts");\r
- /*训练过程中 不需要被动检测*/\r
- if (uapi_dev_runtime_get_train_status() == 1)\r
- return;\r
- // 开启心率检测 如果有其他心率检测在进行,则不会进行检测[低优先级]\r
- OHOS::HeartModel::GetInstance()->Heart_Control(OHOS::HeartState::Start, OHOS::HeartCheck::PASSIVITY);\r
- }\r
- }\r
- \r
- int16_t curviewid = OHOS::NativeAbility::GetInstance().GetCurSliceId();\r
- if (curviewid != VIEW_MAIN && OHOS::PlayersView::GetInstance()) // 如果当前不在主界面且音乐界面不为空\r
- {\r
- OHOS::UICheckBox::UICheckBoxState state = OHOS::PlayersView::GetInstance()->GetPlayerButtonState();\r
- if (state == OHOS::UICheckBox::UICheckBoxState::SELECTED)\r
- {\r
- SendMsgToUIService(UI_UPDATE_PLAYERPROCESS, 0, nullptr, 0);\r
- }\r
+ //喝水提醒\r
+ void HandleDrinkReminder(const struct tm *curTime) { \r
+ if (drinkreminder_switch == 1) { // 定时提醒 \r
+ if (curTime->tm_hour == drinkreminder_start_hour && \r
+ curTime->tm_min == drinkreminder_start_min && \r
+ curTime->tm_sec == 0) { \r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "该喝水了!!该喝水了!!"); \r
+ AlarmEventPublish(TOPIC_EVENT_DRINKREMINDER, NULL, 0); \r
+ } \r
+ } else if (drinkreminder_switch == 2) { // 间隔提醒 \r
+ // 判断当前时间是否在提醒时间段内 \r
+ if (is_time_range(*curTime, drinkreminder_start_hour, drinkreminder_start_min, drinkreminder_end_hour, drinkreminder_end_min)) { \r
+ double interval_time = (drinkreminder_freq == 0) ? 0.5 : drinkreminder_freq; \r
+ int interval_time_seconds = (int)(interval_time * 60) * 60; \r
+ int current_seconds = (curTime->tm_hour * 60 + curTime->tm_min) * 60; \r
+ int hour_24_seconds = 24 * 60 * 60; \r
+ // 进行间隔判断和提醒 \r
+ if (uapi_dev_runtime_get_drinkremind_status() == 0) { \r
+ uapi_dev_runtime_set_drinkremind_status(1); \r
+ drinkremind_expectedTime = current_seconds + interval_time_seconds; \r
+ drinkremind_expectedTime %= hour_24_seconds; // 同时处理24小时循环 \r
+ } else if (current_seconds == drinkremind_expectedTime && curTime->tm_sec == 0) { \r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "该喝水了!!该喝水了!!"); \r
+ drinkremind_expectedTime += interval_time_seconds; \r
+ drinkremind_expectedTime %= hour_24_seconds; // 处理24小时循环 \r
+ AlarmEventPublish(TOPIC_EVENT_DRINKREMINDER, NULL, 0); \r
+ } \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
+ uapi_dev_runtime_set_drinkremind_status(0); \r
+ } \r
+ } \r
+ }\r
+\r
+ //心率周期检测\r
+ void HandleHeartRateDetection(const struct tm *curTime) { \r
+ int heartRateDetectionInterval = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_DETECTED); \r
+ if (heartRateDetectionInterval) { \r
+ if (curTime->tm_min % heartRateDetectionInterval == 0 && curTime->tm_sec == 0) { \r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Automatic heart rate detection starts"); \r
+ // 开启心率检测 \r
+ OHOS::HeartModel::GetInstance()->Heart_Control(OHOS::HeartState::Start, OHOS::HeartCheck::PASSIVITY); \r
+ } \r
}\r
- else if (OHOS::RecordingPlayerView::GetInstance())\r
- {\r
- OHOS::UICheckBox::UICheckBoxState state = OHOS::RecordingPlayerView::GetInstance()->GetPlayerButtonState();\r
- if (state == OHOS::UICheckBox::UICheckBoxState::SELECTED)\r
- {\r
- SendMsgToUIService(UI_UPDATE_RECORDPROCESS, 0, nullptr, 0);\r
- }\r
+ }\r
+\r
+ //音乐更新\r
+ void HandleMusicUpdate() {\r
+ int16_t curviewid = OHOS::NativeAbility::GetInstance().GetCurSliceId(); \r
+ if (curviewid != VIEW_MAIN && OHOS::PlayersView::GetInstance()) { // 当前不在主界面且音乐界面不为空 \r
+ OHOS::UICheckBox::UICheckBoxState state = OHOS::PlayersView::GetInstance()->GetPlayerButtonState(); \r
+ if (state == OHOS::UICheckBox::UICheckBoxState::SELECTED) { \r
+ SendMsgToUIService(UI_UPDATE_PLAYERPROCESS, 0, nullptr, 0); \r
+ } \r
+ } else if (OHOS::RecordingPlayerView::GetInstance()) { \r
+ OHOS::UICheckBox::UICheckBoxState state = OHOS::RecordingPlayerView::GetInstance()->GetPlayerButtonState(); \r
+ if (state == OHOS::UICheckBox::UICheckBoxState::SELECTED) { \r
+ SendMsgToUIService(UI_UPDATE_RECORDPROCESS, 0, nullptr, 0); \r
+ } \r
}\r
}\r
\r
+ \r
static int32_t AlarmCreate(AlarmCtrl *alarmCtrl, AlarmCallBack callback)\r
{\r
if (alarmCtrl == nullptr)\r