int32_t SetAlarm(AlarmType type, uint8_t week, uint8_t hour, uint8_t minute);\r
int32_t AlarmGetCurrentTimeInfo(struct tm *timeInfo);\r
void set_sleep_and_wake_time(void);\r
+void get_sleep_time_notify(void);\r
#ifdef __cplusplus\r
}\r
#endif\r
+/***\r
+ * @Date: 2024-06-29 15:06:13\r
+ * @LastEditors: Caisking 3449750381@qq.com\r
+ * @LastEditTime: 2024-07-01 17:31:58\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp\r
+ */\r
/*\r
* Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
* Description: AlarmClockTimer\r
#include "AlarmClockTimerConfig.h"\r
#include "cywee_service.h"\r
#include "ConfigModelC.h"\r
+#include "ConfigModel.h"\r
+#include "heartrate/include/HeartModel.h"\r
\r
#ifdef __cplusplus\r
-extern "C" {\r
+extern "C"\r
+{\r
#endif\r
\r
-static AlarmCtrl g_alarmCtrA;\r
-static AlarmCtrl g_alarmCtrB;\r
-static osTimerId_t g_AlarmHandle = nullptr;\r
+ static AlarmCtrl g_alarmCtrA;\r
+ static AlarmCtrl g_alarmCtrB;\r
+ static osTimerId_t g_AlarmHandle = nullptr;\r
\r
-static int sleep_time = 0;\r
-static int wake_up_time = 0;\r
+#define SLEPPNOTIFY 20\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
-}\r
+ static int sleep_time = 0;\r
+ static int wake_up_time = 0;\r
+ static int sleep_time_hour = 0;\r
+ static int sleep_time_min = 0;\r
\r
-void AlarmTimerEventPublish(uint16 topic, AlarmClockEventData data)\r
-{\r
- int32 ret;\r
- uint32 size = sizeof(AlarmClockEventData);\r
- Request *request = nullptr;\r
- BroadcastApi *broadcastApi = nullptr;\r
- IUnknown *api = nullptr;\r
-\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish topic=%u!!", topic);\r
-\r
- /* alloc request */\r
- request = SAMGR_AllocRequestMsg(0, PLATFORM_CORE, BROADCAST_SVR_ID, size);\r
- if (request == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SAMGR_AllocRequestMsg failed");\r
- return;\r
- }\r
- request->msgId = topic;\r
- ret = memcpy_s(request->data, size, (const void *)&data, size);\r
- if (ret != EOK) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret);\r
- return;\r
- }\r
- request->len = size;\r
- request->msgValue = 0;\r
-\r
- /* public request */\r
- api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME);\r
- if (api == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetFeatureApi failed");\r
- SAMGR_FreeRequestMsg(request);\r
- return;\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
}\r
- ret = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);\r
- if (ret != 0 || broadcastApi == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "QueryInterface failed");\r
- SAMGR_FreeRequestMsg(request);\r
- return;\r
+ // 设置睡眠提醒时间\r
+ void get_sleep_time_notify(void)\r
+ {\r
+ int goal_hour = sleep_time >> 16;\r
+ int goal_min = (sleep_time & 0X00FF);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "goal_hour:%d goal_min:%d", goal_hour, goal_min);\r
+ if ((goal_min - SLEPPNOTIFY) >= 0)\r
+ {\r
+ sleep_time_hour = goal_hour;\r
+ sleep_time_min = goal_min - SLEPPNOTIFY;\r
+ }\r
+ else\r
+ {\r
+ sleep_time_hour = goal_hour - 1;\r
+ sleep_time_min = goal_min - SLEPPNOTIFY + 60;\r
+ }\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleep_time_hour:%d sleep_time_min:%d", sleep_time_hour, sleep_time_min);\r
}\r
- broadcastApi->PublishTopic((IUnknown *)broadcastApi, request);\r
- broadcastApi->Release((IUnknown *)broadcastApi);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish end!!");\r
-\r
- return;\r
-}\r
-\r
-static void AlarmCallBackProcA(void)\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmCallBackProcA");\r
- AlarmClockEventData unuse;\r
- GraphicService::GetInstance()->PostGraphicEvent(\r
- std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ALARM_RING, unuse));\r
-}\r
+ void AlarmTimerEventPublish(uint16 topic, AlarmClockEventData data)\r
+ {\r
+ int32 ret;\r
+ uint32 size = sizeof(AlarmClockEventData);\r
+ Request *request = nullptr;\r
+ BroadcastApi *broadcastApi = nullptr;\r
+ IUnknown *api = nullptr;\r
\r
-static void AlarmCallBackProcB(void)\r
-{\r
- AlarmClockEventData unuse;\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmCallBackProcB");\r
- GraphicService::GetInstance()->PostGraphicEvent(\r
- std::bind(AlarmTimerEventPublish, TOPIC_EVENT_NEXTDAY_UPDATE, unuse));\r
- GraphicService::GetInstance()->PostGraphicEvent(SetZeroAlarm);\r
-}\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish topic=%u!!", topic);\r
\r
-static void on_time_CallBackProc(void)\r
-{\r
- AlarmClockEventData unuse;\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "on_time_CallBackProc");\r
- GraphicService::GetInstance()->PostGraphicEvent(\r
- std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ON_TIME, unuse));\r
-}\r
+ /* alloc request */\r
+ request = SAMGR_AllocRequestMsg(0, PLATFORM_CORE, BROADCAST_SVR_ID, size);\r
+ if (request == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SAMGR_AllocRequestMsg failed");\r
+ return;\r
+ }\r
+ request->msgId = topic;\r
+ ret = memcpy_s(request->data, size, (const void *)&data, size);\r
+ if (ret != EOK)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret);\r
+ return;\r
+ }\r
+ request->len = size;\r
+ request->msgValue = 0;\r
\r
+ /* public request */\r
+ api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME);\r
+ if (api == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetFeatureApi failed");\r
+ SAMGR_FreeRequestMsg(request);\r
+ return;\r
+ }\r
+ ret = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);\r
+ if (ret != 0 || broadcastApi == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "QueryInterface failed");\r
+ SAMGR_FreeRequestMsg(request);\r
+ return;\r
+ }\r
+ broadcastApi->PublishTopic((IUnknown *)broadcastApi, request);\r
+ broadcastApi->Release((IUnknown *)broadcastApi);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish end!!");\r
\r
-void AlarmScan(void *arg)\r
-{\r
- struct tm curTime;\r
- int32_t ret = AlarmGetCurrentTimeInfo(&curTime);\r
- if (ret != ERRCODE_SUCC) {\r
return;\r
}\r
\r
- if (g_alarmCtrA.state == ALARM_STATUS_RUNNING) {\r
- if ((g_alarmCtrA.callback != nullptr) &&\r
- (g_alarmCtrA.info.hour == curTime.tm_hour) &&\r
- (g_alarmCtrA.info.minute == curTime.tm_min)) {\r
- g_alarmCtrA.callback();\r
- g_alarmCtrA.state = ALARM_STATUS_CREATED;\r
- }\r
+ static void AlarmCallBackProcA(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmCallBackProcA");\r
+ AlarmClockEventData unuse;\r
+ GraphicService::GetInstance()->PostGraphicEvent(\r
+ std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ALARM_RING, unuse));\r
}\r
\r
- if (g_alarmCtrB.state == ALARM_STATUS_RUNNING) {\r
- if ((g_alarmCtrB.callback != NULL) &&\r
- //(g_alarmCtrB.info.week == curTime.tm_wday) &&\r
- (g_alarmCtrB.info.hour == curTime.tm_hour) &&\r
- (g_alarmCtrB.info.minute == curTime.tm_min) &&\r
- (g_alarmCtrB.info.second == curTime.tm_sec)) {\r
- g_alarmCtrB.callback();\r
- g_alarmCtrB.state = ALARM_STATUS_CREATED;\r
- }\r
- }\r
- if(curTime.tm_min==0 && curTime.tm_sec==0)\r
+ static void AlarmCallBackProcB(void)\r
{\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time: %d : %d",curTime.tm_hour,curTime.tm_min);\r
- on_time_CallBackProc();\r
+ AlarmClockEventData unuse;\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmCallBackProcB");\r
+ GraphicService::GetInstance()->PostGraphicEvent(\r
+ std::bind(AlarmTimerEventPublish, TOPIC_EVENT_NEXTDAY_UPDATE, unuse));\r
+ GraphicService::GetInstance()->PostGraphicEvent(SetZeroAlarm);\r
}\r
- else if(curTime.tm_hour == ( ( sleep_time & 0XFF00) >> 16 ) && curTime.tm_min == ( sleep_time & 0X00FF ))\r
+\r
+ static void on_time_CallBackProc(void)\r
{\r
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_SLEEPING_MODE,NULL);\r
+ AlarmClockEventData unuse;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "on_time_CallBackProc");\r
+ GraphicService::GetInstance()->PostGraphicEvent(\r
+ std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ON_TIME, unuse));\r
}\r
- else if(curTime.tm_hour == ( ( wake_up_time & 0XFF00) >> 16 ) && curTime.tm_min == ( wake_up_time & 0X00FF ))\r
+\r
+ void AlarmScan(void *arg)\r
{\r
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE,NULL);\r
- }\r
-}\r
+ struct tm curTime;\r
+ int32_t ret = AlarmGetCurrentTimeInfo(&curTime);\r
+ if (ret != ERRCODE_SUCC)\r
+ {\r
+ return;\r
+ }\r
\r
-static int32_t AlarmCreate(AlarmCtrl *alarmCtrl, AlarmCallBack callback)\r
-{\r
- if (alarmCtrl == nullptr) {\r
- return ERRCODE_FAIL;\r
- }\r
- if (alarmCtrl->state == ALARM_STATUS_UNUSED) {\r
- alarmCtrl->state = ALARM_STATUS_CREATED;\r
- alarmCtrl->callback = callback;\r
- }\r
- return ERRCODE_SUCC;\r
-}\r
+ if (g_alarmCtrA.state == ALARM_STATUS_RUNNING)\r
+ {\r
+ if ((g_alarmCtrA.callback != nullptr) &&\r
+ (g_alarmCtrA.info.hour == curTime.tm_hour) &&\r
+ (g_alarmCtrA.info.minute == curTime.tm_min))\r
+ {\r
+ g_alarmCtrA.callback();\r
+ g_alarmCtrA.state = ALARM_STATUS_CREATED;\r
+ }\r
+ }\r
\r
-int32_t AlarmTimerInit(void)\r
-{\r
- int32_t timerStatus;\r
- int32_t ret;\r
-\r
- g_alarmCtrA.state = ALARM_STATUS_UNUSED;\r
- g_alarmCtrB.state = ALARM_STATUS_UNUSED;\r
- g_AlarmHandle = osTimerNew(AlarmScan, osTimerPeriodic, nullptr, nullptr);\r
- if (g_AlarmHandle == nullptr) {\r
- return ERRCODE_FAIL;\r
- }\r
- timerStatus = osTimerStart(g_AlarmHandle, ALARM_INTERVAL_MS);\r
- if (timerStatus != osOK) {\r
- return ERRCODE_FAIL;\r
+ if (g_alarmCtrB.state == ALARM_STATUS_RUNNING)\r
+ {\r
+ if ((g_alarmCtrB.callback != NULL) &&\r
+ //(g_alarmCtrB.info.week == curTime.tm_wday) &&\r
+ (g_alarmCtrB.info.hour == curTime.tm_hour) &&\r
+ (g_alarmCtrB.info.minute == curTime.tm_min) &&\r
+ (g_alarmCtrB.info.second == curTime.tm_sec))\r
+ {\r
+ g_alarmCtrB.callback();\r
+ g_alarmCtrB.state = ALARM_STATUS_CREATED;\r
+ }\r
+ }\r
+ // 整点回调\r
+ if (curTime.tm_min == 0 && curTime.tm_sec == 0)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time: %d : %d", curTime.tm_hour, curTime.tm_min);\r
+ on_time_CallBackProc();\r
+ }\r
+ // 进入睡眠模式\r
+ if (curTime.tm_hour == ((sleep_time >> 16) && curTime.tm_min == (sleep_time & 0X00FF)))\r
+ {\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_SLEEPING_MODE, NULL);\r
+ }\r
+ // 退出睡眠模式\r
+ if (curTime.tm_hour == ((wake_up_time >> 16) && curTime.tm_min == (wake_up_time & 0X00FF)))\r
+ {\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE, NULL);\r
+ }\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
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "It's bedtime in 20 minutes");\r
+ printf("20分钟后要睡觉啦!\r\n");\r
+ }\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
+ OHOS::HeartModel::GetInstance()->Heart_Control(OHOS::HeartState::Start, OHOS::HeartCheck::PASSIVITY);\r
+ }\r
+ }\r
}\r
- ret = AlarmCreate(&g_alarmCtrA, AlarmCallBackProcA);\r
- if (ret != ERRCODE_SUCC) {\r
- return ERRCODE_FAIL;\r
+\r
+ static int32_t AlarmCreate(AlarmCtrl *alarmCtrl, AlarmCallBack callback)\r
+ {\r
+ if (alarmCtrl == nullptr)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ if (alarmCtrl->state == ALARM_STATUS_UNUSED)\r
+ {\r
+ alarmCtrl->state = ALARM_STATUS_CREATED;\r
+ alarmCtrl->callback = callback;\r
+ }\r
+ return ERRCODE_SUCC;\r
}\r
- ret = AlarmCreate(&g_alarmCtrB, AlarmCallBackProcB);\r
- if (ret != ERRCODE_SUCC) {\r
- return ERRCODE_FAIL;\r
+\r
+ int32_t AlarmTimerInit(void)\r
+ {\r
+ int32_t timerStatus;\r
+ int32_t ret;\r
+\r
+ g_alarmCtrA.state = ALARM_STATUS_UNUSED;\r
+ g_alarmCtrB.state = ALARM_STATUS_UNUSED;\r
+ g_AlarmHandle = osTimerNew(AlarmScan, osTimerPeriodic, nullptr, nullptr);\r
+ if (g_AlarmHandle == nullptr)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ timerStatus = osTimerStart(g_AlarmHandle, ALARM_INTERVAL_MS);\r
+ if (timerStatus != osOK)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ ret = AlarmCreate(&g_alarmCtrA, AlarmCallBackProcA);\r
+ if (ret != ERRCODE_SUCC)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ ret = AlarmCreate(&g_alarmCtrB, AlarmCallBackProcB);\r
+ if (ret != ERRCODE_SUCC)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ set_sleep_and_wake_time();\r
+ get_sleep_time_notify();\r
+ return ERRCODE_SUCC;\r
}\r
- set_sleep_and_wake_time();\r
- return ERRCODE_SUCC;\r
-}\r
\r
-int32_t SetAlarm(AlarmType type, uint8_t week, uint8_t hour, uint8_t minute)\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetAlarm %d %d %d %d", type, week, hour, minute);\r
- if (type == ALARM_A) {\r
- g_alarmCtrA.state = ALARM_STATUS_RUNNING;\r
- g_alarmCtrA.info.hour = hour;\r
- g_alarmCtrA.info.minute = minute;\r
- } else if (type == ALARM_B) {\r
- g_alarmCtrB.state = ALARM_STATUS_RUNNING;\r
- g_alarmCtrB.info.week = week;\r
- g_alarmCtrB.info.hour = hour;\r
- g_alarmCtrB.info.minute = minute;\r
- g_alarmCtrB.info.second = 1;\r
- } else {\r
- return ERRCODE_FAIL;\r
+ int32_t SetAlarm(AlarmType type, uint8_t week, uint8_t hour, uint8_t minute)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetAlarm %d %d %d %d", type, week, hour, minute);\r
+ if (type == ALARM_A)\r
+ {\r
+ g_alarmCtrA.state = ALARM_STATUS_RUNNING;\r
+ g_alarmCtrA.info.hour = hour;\r
+ g_alarmCtrA.info.minute = minute;\r
+ }\r
+ else if (type == ALARM_B)\r
+ {\r
+ g_alarmCtrB.state = ALARM_STATUS_RUNNING;\r
+ g_alarmCtrB.info.week = week;\r
+ g_alarmCtrB.info.hour = hour;\r
+ g_alarmCtrB.info.minute = minute;\r
+ g_alarmCtrB.info.second = 1;\r
+ }\r
+ else\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ return ERRCODE_SUCC;\r
}\r
- return ERRCODE_SUCC;\r
-}\r
\r
-int32_t SetZeroAlarm(void)\r
-{\r
- struct tm curTime;\r
- int32_t ret = AlarmGetCurrentTimeInfo(&curTime);\r
- if (ret != ERRCODE_SUCC) {\r
- return ERRCODE_FAIL;\r
+ int32_t SetZeroAlarm(void)\r
+ {\r
+ struct tm curTime;\r
+ int32_t ret = AlarmGetCurrentTimeInfo(&curTime);\r
+ if (ret != ERRCODE_SUCC)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ int32_t weekday = (++curTime.tm_wday) % 7;\r
+ return SetAlarm(ALARM_B, weekday, 0, 0);\r
}\r
- int32_t weekday = (++curTime.tm_wday) % 7;\r
- return SetAlarm(ALARM_B, weekday, 0, 0);\r
-}\r
\r
-int32_t AlarmGetCurrentTimeInfo(struct tm *timeInfo)\r
-{\r
- if (timeInfo == nullptr) {\r
- return ERRCODE_FAIL;\r
+ int32_t AlarmGetCurrentTimeInfo(struct tm *timeInfo)\r
+ {\r
+ if (timeInfo == nullptr)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ time_t sec = time(nullptr);\r
+ localtime_r(&sec, timeInfo);\r
+ return ERRCODE_SUCC;\r
}\r
- time_t sec = time(nullptr);\r
- localtime_r(&sec, timeInfo);\r
- return ERRCODE_SUCC;\r
-}\r
\r
#ifdef __cplusplus\r
}\r
End = 0,\r
Start,\r
};\r
+ enum class HeartCheck\r
+ {\r
+ RESTSTSTE = 0, // 未检测状态\r
+ PASSIVITY, // 被动检测心率\r
+ INITIATIVE, // 主动检测心率\r
+ EXERCISE, // 运动心率\r
+ };\r
+ // 控制心率检测\r
typedef struct\r
{\r
uint32_t heartRatePerSec;\r
void SetCheckTime(uint64_t time); // 设置本次测试完的时间\r
uint16_t GetIndex(); // 测试点位\r
void SetIndex(uint16_t index);\r
- void Heart_Control(HeartState state);\r
+ void Heart_Control(HeartState state, HeartCheck check);\r
\r
private:\r
HealthAllDatas healthDatas;\r
uint8_t valid_counter_ = 0; // 有效数计数器\r
uint8_t disvalid_counter_ = 0; // 无效数计数器\r
uint8_t unwear_counter_ = 0; // 佩戴错误计数器\r
+\r
+ HeartCheck checkstate = HeartCheck::RESTSTSTE; // 目前检测状态\r
};\r
}\r
\r
/* ---------------------------------- 状态检测 ---------------------------------- */\r
\r
// 控制心率检测\r
- void HeartModel::Heart_Control(HeartState state)\r
+ void HeartModel::Heart_Control(HeartState state, HeartCheck check)\r
{\r
+ if (check < checkstate)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Higher execution instruction exists");\r
+ return;\r
+ }\r
if (state == HeartState::End && heartstate == true)\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartState End");\r
uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST;\r
send_ppg_cmd_msg(md);\r
heartstate = false;\r
+ // 复原检测状态\r
+ checkstate = HeartCheck::RESTSTSTE;\r
}\r
else if (state == HeartState::Start && heartstate == false)\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " Save %d %d", data->Heart, data->timestamp);\r
SetCheckTime(data->timestamp);\r
HealthService::GetInstance()->UpdateHealthData(*data);\r
- // 更新卡片心率值\r
- // SetHeartRatePerSec(heart);\r
+ // 关闭自动检测心率 如果有其他高级心率检测在进行,则不会进行关闭[低优先级]\r
+ HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::PASSIVITY);\r
}\r
#endif\r
}\r
if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)
{
// 关闭心率检测
- HeartModel::GetInstance()->Heart_Control(HeartState::End);
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE);
// 回退
NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_ZOOM);
}
HeartCheckView::GetInstance()->GetImageAnimator()->Stop();
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus false");
// 关闭心率检测
- HeartModel::GetInstance()->Heart_Control(HeartState::End);
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE);
startheart = true;
}
}
if (startheart == true)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus true");
- // 开启心率检测
- HeartModel::GetInstance()->Heart_Control(HeartState::Start);
+ // 开启心率检测 [UI优先级最高直接打断正在检测 重新检测]
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE);
+ HeartModel::GetInstance()->Heart_Control(HeartState::Start,HeartCheck::INITIATIVE);
startheart = false;
}
}
if (previousCardId == HEART_RATE && cardId != HEART_RATE)
{
// 从心率卡片变为其他卡片时调用关闭心率检测的函数
- HeartModel::GetInstance()->Heart_Control(HeartState::End);
+ HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE);
}
// 更新上一个卡片的值
switch (cardId)
{
case HEART_RATE:
- // 开启心率检测
- HeartModel::GetInstance()->Heart_Control(HeartState::Start);
+ // 开启心率检测 [UI优先级最高直接打断正在检测 重新检测]
+ HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE);
+ HeartModel::GetInstance()->Heart_Control(HeartState::Start, HeartCheck::INITIATIVE);
break;
case COMPASS:
#define MESSAGE_JSON_FILE "user/userdata/message/ancs.json"
#define PRINTFDATA 1
-extern "C" errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds);
+extern "C" errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds, bool include_year);
namespace OHOS
{
MessageData message_;
uint32 timestamp = cJSON_GetObjectItem(item, "time")->valueint;
messagedata.timestamp = timestamp;
char labelTime[20];
- if (uapi_get_TIME_STR(timestamp, labelTime, '.', false) != ERRCODE_SUCC)
+ if (uapi_get_TIME_STR(timestamp, labelTime, '.', false, false) != ERRCODE_SUCC)
{
messagedata.labelTime = std::string("2024.1.1 00:00");
}
{
Time = 5;
START_FLAG = false;
- HeartModel::GetInstance()->Heart_Control(HeartState::End); // 关闭心率检测
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); // 关闭心率检测
}
/* -------------------------------------------------------------------------- */
/*定时器到期时的处理*/
RespiratoryTrainingModel::GetInstance().RT_StopTimer(); // 停止定时器
RespiratoryTrainingModel::GetInstance().AddRespiratoryTrainingTimes(); // 呼吸训练次数加1
p_RespiratoryTrainingView->GetRespiratoryTrainingAnimator_()->Stop(); // 关闭呼吸动画
- HeartModel::GetInstance()->Heart_Control(HeartState::End); // 关闭心率检测
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); // 关闭心率检测
p_RespiratoryTrainingView->ChangeView(RESPIRATORYTRAINING, RESPIRATORYTRAININGCOMPLETED);
}
else
Time = ONE_MINUTE;
p_RespiratoryTrainingView->StartRespiratoryTraining(); // 开始呼吸训练
START_FLAG = true;
- HeartModel::GetInstance()->Heart_Control(HeartState::Start); // 开启心率检测
+ HeartModel::GetInstance()->Heart_Control(HeartState::Start,HeartCheck::INITIATIVE); // 开启心率检测
}
}
}
return ERRCODE_SUCC;
}
- static uint32_t rtc_restore_factory_settings(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
- {
- UNUSED(para);
- UNUSED(paraLen);
- UNUSED(strCommonCmd);
-
- // 执行恢复出厂设置的操作
- uapi_restore_factory_setting();
- PRINT("Restoring Factory Settings...\n");
- return ERRCODE_SUCC;
- }
static const at_cmd_table_t g_rtc_cmd[] = {
{(char *)"AT^RTCTEST", rtc_do_test, (char *)"enable"},
- {(char *)"AT^RESTORE", rtc_restore_factory_settings, NULL},
};
at_cmd_table_t *get_rtc_cmd_table(uint32_t *cmd_count)
* @LastEditors: penglei 1624952103@qq.com
* @LastEditTime: 2024-06-28 15:51:01
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepModel.h
- * @Description:
- *
- * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
+ * @Description:
+ *
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
*/
/***
* @Date: 2024-06-25 10:34:10
#include <cstdint>
#include <map>
-//#include "AppViewIDs.h"
-//#include "UiConfig.h"
-//#include "sleep/include/SleepView.h"
-//#include "sleep/include/SleepControlPresenter.h"
+// #include "AppViewIDs.h"
+// #include "UiConfig.h"
+// #include "sleep/include/SleepView.h"
+// #include "sleep/include/SleepControlPresenter.h"
#include "string"
-
#define SLEEP_PATH "user/userdata/sleep/%s/sleep_%d.bin"
#define SLEEP_DIR_PATH "user/userdata/sleep/%s"
-
namespace OHOS
{
- #pragma pack(1)
+#pragma pack(1)
typedef struct
{
- uint32_t fall_asleep_timestamp; //入睡
- uint32_t wake_up_timestamp; //出睡
- uint16_t total_time; //总时长
+ uint32_t fall_asleep_timestamp; // 入睡
+ uint32_t wake_up_timestamp; // 出睡
+ uint16_t total_time; // 总时长
} NAP_T;
typedef struct
{
uint32_t timestamp; //
- uint8_t stat; //状态
-
+ uint8_t stat; // 状态
+
} SLEEP_STATE_T;
typedef struct
{
SLEEP_STATE_T sleep_status[20];
uint8_t status_num;
- uint32_t fall_asleep_timestamp; //入睡
- uint32_t wake_up_timestamp; //出睡
- uint16_t total_time; //总时长
- uint16_t total_deep_sleep_time;//深睡
- uint16_t total_mild_sleep_time;//浅睡
- uint16_t total_rem_sleep_time;//清醒
- uint16_t total_wake_time;//动眼
+ uint32_t fall_asleep_timestamp; // 入睡
+ uint32_t wake_up_timestamp; // 出睡
+ uint16_t total_time; // 总时长
+ uint16_t total_deep_sleep_time; // 深睡
+ uint16_t total_mild_sleep_time; // 浅睡
+ uint16_t total_rem_sleep_time; // 清醒
+ uint16_t total_wake_time; // 动眼
} SLEEP_T;
-
- #pragma pack()
- bool save_nap_data(NAP_T *data);
+#pragma pack()
- uint32_t read_sleep_nap_data(char *data,uint32_t size,FILE *fp);
-
+ bool save_nap_data(NAP_T *data);
+ uint32_t read_sleep_nap_data(char *data, uint32_t size, FILE *fp);
void set_nap_data(NAP_T *data);
-
void set_sleep_data(SLEEP_T *data);
-
bool save_sleep_data(SLEEP_T *data);
class SleepModel
{
public:
static SleepModel &GetInstance(void);
- void GetSleepTime(); // 获取睡眠时间
- std::string GetSleepStr(); // 解析睡眠时间
- void GetRestTime(); // 获取入睡时间
- std::string GetRestStr(); // 解析入睡时间
- void GetWalkTime(); // 获取醒来时间
- std::string GetWalkStr(); // 解析醒来时间
- void GetGoalTime(); // 获取目标休息时间(xx-xx)
- std::string GetGoalStr(); // 解析目标休息时间
+ void update_time_info(uint32_t timestamp, std::string &timeStr);
+ void update_sleep(SLEEP_T *data);
+ void set_sleep_goal();
+
+ int get_sleep_hour();
+ int get_sleep_min();
+ int get_sleep_goal();
+ int get_sleep_total();
+ std::string get_rest_str(); // 解析入睡时间
+ std::string get_walk_str(); // 解析醒来时间
+ std::string get_goal_str(); // 解析目标休息时间
private:
SleepModel();
SleepModel &operator=(const SleepModel &);
virtual ~SleepModel();
- std::string sleepStr;
- std::string restStr;
- std::string walkStr;
- std::string goalsleepStr;
- std::string goalwalkStr;
+ std::string sleepStr{"--"};
+ std::string walkStr{"--"};
+ std::string goalStr{"--"};
+
+ uint8_t sleep_total_time = 0;
+ uint8_t goal_total_time = 0;
};
}
+/***
+ * @Date: 2024-06-25 14:50:26
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-01 15:10:12
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepTimeView.h
+ */
/***
* @Date: 2024-06-25 14:50:26
* @LastEditors: Caisking 3449750381@qq.com
UILabelExt *sleeptitle{nullptr}; // 入睡时间标题
UILabelExt *walktitle{nullptr}; // 醒来标题
UILabelExt *apptitle{nullptr}; // 详情
- UILabelExt *rest{nullptr}; // 作息时间
+ UILabelExt *goal{nullptr}; // 作息时间
UILabelExt *sleep{nullptr}; // 入睡时间
UILabelExt *walk{nullptr}; // 醒来时间
UIImageView *transverseline_1{nullptr}; // 横线1
* @LastEditors: penglei 1624952103@qq.com
* @LastEditTime: 2024-06-28 16:52:58
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepModel.cpp
- * @Description:
- *
- * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
+ * @Description:
+ *
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
*/
#include "sleep/include/SleepModel.h"
#include "sleep/include/SleepControlPresenter.h"
#include "custom_utils.h"
#include <sys/stat.h>
-
-
-
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include "samgr_lite.h"
+#include <vector>
+#include <sstream>
+#include <iomanip>
+#include <fstream>
+#include <iostream>
+#include <string>
+#include "wearable_log.h"
+#include "ConfigModel.h"
+
+extern "C" errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds, bool include_year);
+extern "C" int get_sleep_time_from_config_model(void);
+extern "C" int get_wake_up_time_from_config_model();
namespace OHOS
{
- static NAP_T nap_data = {0};
- static SLEEP_T sleep_data = {0};
- static SLEEP_STATE_T sleep_status = {0};
+
+ static NAP_T nap_data = {0};
+ static SLEEP_T sleep_data = {0};
+ static SLEEP_STATE_T sleep_status = {0};
+
bool save_nap_data(NAP_T *data)
{
struct stat info;
- char dir_path[64]={0};
- char file_path[64]={0};
- char day[12]={0};
- uapi_get_YYMMDD_Time(day,'\0');
+ char dir_path[64] = {0};
+ char file_path[64] = {0};
+ char day[12] = {0};
+ uapi_get_YYMMDD_Time(day, '\0');
- sprintf_s(dir_path,64,SLEEP_DIR_PATH,day);
+ sprintf_s(dir_path, 64, SLEEP_DIR_PATH, day);
if (stat("user/userdata/sleep", &info) != 0)
{
if (mkdir("user/userdata/sleep", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
if (mkdir(dir_path, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir fail %s",dir_path);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir fail %s", dir_path);
return false; // Failed to create folder
}
}
uint32_t creationTime;
- int ret =uapi_get_timestampe_ss(&creationTime);
+ int ret = uapi_get_timestampe_ss(&creationTime);
- sprintf_s(file_path,64,SLEEP_PATH,day,creationTime);
+ sprintf_s(file_path, 64, SLEEP_PATH, day, creationTime);
FILE *fp;
- fp=fopen(file_path,"wb+");
- if(fp==NULL)
+ fp = fopen(file_path, "wb+");
+ if (fp == NULL)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "save_nap_sleep_data fopen fail");
return false;
}
- uint8_t sleep_type=0;
- fwrite(&sleep_type,1,1,fp);
+ uint8_t sleep_type = 0;
+ fwrite(&sleep_type, 1, 1, fp);
uint32_t fall_asleep_timestamp = data->fall_asleep_timestamp;
- fwrite(&fall_asleep_timestamp,1,4,fp);
+ fwrite(&fall_asleep_timestamp, 1, 4, fp);
uint32_t wake_up_timestamp = data->wake_up_timestamp;
- fwrite(&wake_up_timestamp,1,4,fp);
-
- uint16_t total_time=data->total_time;
- fwrite(&total_time,1,2,fp);
+ fwrite(&wake_up_timestamp, 1, 4, fp);
+ uint16_t total_time = data->total_time;
+ fwrite(&total_time, 1, 2, fp);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "save_nap_sleep_data succ");
fclose(fp);
return true;
-
}
void set_nap_data(NAP_T *data)
- {
- memset(&nap_data,0,sizeof(NAP_T));
- memcpy_s(&nap_data,sizeof(NAP_T),data,sizeof(NAP_T));
+ {
+ memset(&nap_data, 0, sizeof(NAP_T));
+ memcpy_s(&nap_data, sizeof(NAP_T), data, sizeof(NAP_T));
save_nap_data(&nap_data);
}
- uint32_t read_sleep_nap_data(char *data,uint32_t size,FILE *fp)
+ uint32_t read_sleep_nap_data(char *data, uint32_t size, FILE *fp)
{
- return fread(data,1,size,fp);
+ return fread(data, 1, size, fp);
}
-
+
bool save_sleep_data(SLEEP_T *data)
{
struct stat info;
- char dir_path[64]={0};
- char file_path[64]={0};
- char day[12]={0};
- uapi_get_YYMMDD_Time(day,'\0');
+ char dir_path[64] = {0};
+ char file_path[64] = {0};
+ char day[12] = {0};
+ uapi_get_YYMMDD_Time(day, '\0');
- sprintf_s(dir_path,64,SLEEP_DIR_PATH,day);
+ sprintf_s(dir_path, 64, SLEEP_DIR_PATH, day);
if (stat("user/userdata/sleep", &info) != 0)
{
if (mkdir("user/userdata/sleep", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
if (mkdir(dir_path, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir fail %s",dir_path);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir fail %s", dir_path);
return false; // Failed to create folder
}
}
-
+
uint32_t creationTime;
- int ret =uapi_get_timestampe_ss(&creationTime);
+ int ret = uapi_get_timestampe_ss(&creationTime);
- sprintf_s(file_path,64,SLEEP_PATH,day,creationTime);
+ sprintf_s(file_path, 64, SLEEP_PATH, day, creationTime);
FILE *fp;
- fp=fopen(file_path,"wb+");
- if(fp==NULL)
+ fp = fopen(file_path, "wb+");
+ if (fp == NULL)
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "save_nap_sleep_data fopen fail");
return false;
}
uint8_t sleep_type = 1;
- fwrite(&sleep_type,1,1,fp);
+ fwrite(&sleep_type, 1, 1, fp);
uint32_t fall_asleep_timestamp = data->fall_asleep_timestamp;
- fwrite(&fall_asleep_timestamp,1,4,fp);
+ fwrite(&fall_asleep_timestamp, 1, 4, fp);
uint32_t wake_up_timestamp = data->wake_up_timestamp;
- fwrite(&wake_up_timestamp,1,4,fp);
+ fwrite(&wake_up_timestamp, 1, 4, fp);
- uint16_t total_time=data->total_time;
- fwrite(&total_time,1,2,fp);
+ uint16_t total_time = data->total_time;
+ fwrite(&total_time, 1, 2, fp);
- uint16_t total_deep_sleep_time=data->total_deep_sleep_time;
- fwrite(&total_deep_sleep_time,1,2,fp);
+ uint16_t total_deep_sleep_time = data->total_deep_sleep_time;
+ fwrite(&total_deep_sleep_time, 1, 2, fp);
- uint16_t total_mild_sleep_time=data->total_mild_sleep_time;
- fwrite(&total_mild_sleep_time,1,2,fp);
+ uint16_t total_mild_sleep_time = data->total_mild_sleep_time;
+ fwrite(&total_mild_sleep_time, 1, 2, fp);
- uint16_t total_rem_sleep_time=data->total_rem_sleep_time;
- fwrite(&total_rem_sleep_time,1,2,fp);
+ uint16_t total_rem_sleep_time = data->total_rem_sleep_time;
+ fwrite(&total_rem_sleep_time, 1, 2, fp);
- uint16_t total_wake_time=data->total_wake_time;
- fwrite(&total_wake_time,1,2,fp);
+ uint16_t total_wake_time = data->total_wake_time;
+ fwrite(&total_wake_time, 1, 2, fp);
- fwrite(data->sleep_status,sizeof(SLEEP_STATE_T),data->status_num,fp);
+ fwrite(data->sleep_status, sizeof(SLEEP_STATE_T), data->status_num, fp);
fclose(fp);
return true;
}
void set_sleep_data(SLEEP_T *data)
- {
- memset(&sleep_data,0,sizeof(SLEEP_T));
- memcpy_s(&sleep_data,sizeof(SLEEP_T),data,sizeof(SLEEP_T));
+ {
+ memset(&sleep_data, 0, sizeof(SLEEP_T));
+ memcpy_s(&sleep_data, sizeof(SLEEP_T), data, sizeof(SLEEP_T));
save_sleep_data(&sleep_data);
+ // 刷新model里面的数据
+ SleepModel::GetInstance().update_sleep(&sleep_data);
+ }
+ SleepModel::SleepModel()
+ {
+ set_sleep_goal();
}
-
- SleepModel::SleepModel() {}
SleepModel::~SleepModel() {}
SleepModel &SleepModel::GetInstance()
{
static SleepModel instance;
return instance;
}
+
+ void SleepModel::update_sleep(SLEEP_T *data)
+ {
+ if (data == NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid input data");
+ return;
+ }
+
+ // 打印数据
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fall_asleep_timestamp:%d wake_up_timestamp:%d total_time:%d",
+ data->fall_asleep_timestamp, data->wake_up_timestamp, data->total_time);
+
+ update_time_info(data->fall_asleep_timestamp, sleepStr);
+ update_time_info(data->wake_up_timestamp, walkStr);
+
+ // 更新睡眠总时间
+ sleep_total_time = data->total_time;
+
+ // 更新一下配置
+ set_sleep_goal();
+ }
+
+ void SleepModel::update_time_info(uint32_t timestamp, std::string &timeStr)
+ {
+ char labelTime[20];
+ if (uapi_get_TIME_STR(timestamp, labelTime, '.', false, false) == ERRCODE_SUCC)
+ {
+ timeStr = std::string(labelTime);
+ }
+ else
+ {
+ timeStr = "--";
+ }
+ }
+
+ /*
+ 设置睡眠目标
+ 前2个字节是显示睡眠小时
+ 后2个字节显示睡眠分钟
+ 需要单独解析出来。
+ */
+ void SleepModel::set_sleep_goal()
+ {
+ int goal_sleep = get_sleep_time_from_config_model();
+ int goal_walk = get_wake_up_time_from_config_model();
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "goal_sleep:%d goal_walk:%d", goal_sleep, goal_walk);
+
+ // 提取小时部分(前2字节)
+ int goal_sleep_hour = goal_sleep >> 16;
+ // 提取分钟部分(后2字节)
+ int goal_sleep_min = goal_sleep & 0x00FF;
+
+ std::ostringstream sleeposs;
+ sleeposs << std::setfill('0') << std::setw(2) << goal_sleep_hour << ":" << std::setw(2) << goal_sleep_min;
+
+ std::string goalsleepStr = sleeposs.str();
+
+ // 提取小时部分(前2字节)
+ int goal_walk_hour = goal_walk >> 16;
+ // 提取分钟部分(后2字节)
+ int goal_walk_min = goal_walk & 0x00FF;
+
+ std::ostringstream walkoss;
+ walkoss << std::setfill('0') << std::setw(2) << goal_walk_hour << ":" << std::setw(2) << goal_walk_min;
+
+ std::string goalwalkStr = walkoss.str();
+
+ goalStr = goalsleepStr + "-" + goalwalkStr;
+ goal_total_time = goal_walk_hour * 60 + goal_walk_min;
+ }
+ // 获取睡眠总时长(小时)
+ int SleepModel::get_sleep_hour()
+ {
+ return sleep_total_time / 60;
+ }
+ // 获取睡眠总时长(分钟)
+ int SleepModel::get_sleep_min()
+ {
+ return sleep_total_time % 60;
+ }
+ // 获取睡眠总时长(目标)
+ int SleepModel::get_sleep_goal()
+ {
+ return goal_total_time;
+ }
+ // 获取睡眠总时长(实际)
+ int SleepModel::get_sleep_total()
+ {
+ return sleep_total_time;
+ }
+ // 解析入睡时间
+ std::string SleepModel::get_rest_str()
+ {
+ return sleepStr;
+ }
+ // 解析醒来时间
+ std::string SleepModel::get_walk_str()
+ {
+ return walkStr;
+ }
+ // 解析目标休息时间
+ std::string SleepModel::get_goal_str()
+ {
+ return goalStr;
+ }
}
\ No newline at end of file
void SleepTimeView::SleepDataRefresh()
{
-#if 0
- rest->SetText();
- sleep->SetText();
- walk->SetText();
-#endif
+ sleep->SetText((SleepModel::GetInstance().get_rest_str()).c_str());
+ walk->SetText((SleepModel::GetInstance().get_walk_str()).c_str());
+ goal->SetText((SleepModel::GetInstance().get_goal_str()).c_str());
}
void SleepTimeView::ClearAll()
delete apptitle;
apptitle = nullptr;
}
- if (rest != nullptr)
+ if (goal != nullptr)
{
- delete rest;
- rest = nullptr;
+ delete goal;
+ goal = nullptr;
}
if (sleep != nullptr)
apptitle->SetTextColor(Color::Gray());
/* ------------------------------- 数据label初始化 ------------------------------- */
restStr = "--";
- InitLabelAdapt(rest, 211, 95, 230, 47, "restlabel", restStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 30);
- rest->SetTextColor(Color::Gray());
+ InitLabelAdapt(goal, 117, 95, 300, 50, "restlabel", restStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 40);
+ // goal->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
+ goal->SetTextColor(Color::Gray());
sleepStr = "--";
InitLabelAdapt(sleep, 99, 238, 230, 47, "sleeplabel", sleepStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 30);
sleep->SetTextColor(Color::Purple());
Add(sleeptitle);
Add(walktitle);
Add(apptitle);
- Add(rest);
+ Add(goal);
Add(sleep);
Add(walk);
Add(transverseline_1);
}
SetDraggable(true);
SetTouchable(true);
+ SleepDataRefresh();
return true;
}
g_pSleepView = nullptr;
}
+ // 刷新UI数据
void SleepView::SleepDataRefresh()
{
-#if 0
- time_minute->SetText(SleepModel::GetInstance().getstepnew());
- time_hour->SetText(SleepModel::GetInstance().getstepSleep());
- circleProgress_->SetValue(SleepModel::GetInstance().getstepvalue());
-#endif
- Invalidate();
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Updata SleppTime!");
- RootView::GetInstance()->Invalidate();
+ int sleep_hour = SleepModel::GetInstance().get_sleep_hour();
+ int sleep_min = SleepModel::GetInstance().get_sleep_min();
+ // 有数据则刷新
+ if (sleep_hour != 0 || sleep_min != 0)
+ {
+ time_hour->SetText(std::to_string(sleep_hour).c_str());
+ time_minute->SetText(std::to_string(sleep_min).c_str());
+
+ int value = (float(SleepModel::GetInstance().get_sleep_total()) / float(SleepModel::GetInstance().get_sleep_goal())) * 100;
+ circleProgress_->SetValue(value);
+ Invalidate();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Updata SleppTime!");
+ RootView::GetInstance()->Invalidate();
+ }
}
void SleepView::ClearAll()
circleProgress_->SetRadius(205);
circleProgress_->SetStartAngle(320);
circleProgress_->SetEndAngle(40);
- circleProgress_->SetValue(50);
+ circleProgress_->SetValue(0);
circleProgress_->SetBackgroundImagePosition(36, 26);
/* -------------------------------- 将组件添加到根视图 ------------------------------- */
Add(progress_image);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SleepView::InitPage fail");
return false;
}
+ SleepDataRefresh(); // 刷新数据
SetDraggable(true);
SetTouchable(true);
return true;
${ROOT_DIR}/application/wearable/nativeapp/nativeui/heartrate/include
${ROOT_DIR}/application/wearable/fd230app/nativeui/weather/include
${ROOT_DIR}/application/wearable/fd230app/nativeui/heart_blood/health_service
+${ROOT_DIR}/application/wearable/fd230app/nativeui/sleep/include/
${ROOT_DIR}/application/wearable/fd230app/nativeui/phone/include
${ROOT_DIR}/application/wearable/fd230app/nativeui/language/include
${ROOT_DIR}/application/wearable/fd230app/nativeui/language
#ifdef FD230
#include "TraingModel.h"
#include "WeatherModel.h"
+#include "SleepModel.h"
#endif
#include "AlmmgrAlarmClockManage.h"
+#include "AlarmClockTimerConfig.h"
#include "AlarmClockManage.h"
#include "SetDialModel.h"
printf("睡前提醒 %d\r\n",data.bedtime_alarm);
p_ConfigModel->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_REMIND,data.bedtime_alarm);
+
+ //更新睡眠配置
+ OHOS::SleepModel::GetInstance().set_sleep_goal();
+ set_sleep_and_wake_time();
+ get_sleep_time_notify();
}
return;
}
int get_sleep_time_from_config_model(void);
int get_wake_up_time_from_config_model(void);
+//设置睡眠频率
+void set_config_heart(int heartRateDetectionFreq);
+
#ifdef __cplusplus
#if __cplusplus
}
user_info[3] = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_CUSTOM_DATA_HEIGHT);
user_info[4] = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_CUSTOM_DATA_WEARING_MODE);
}
+
+//获取睡眠目标[入睡时间]
int get_sleep_time_from_config_model(void)
{
int sleep_time = 0;
sleep_time = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_BEDTIME);
return sleep_time;
}
+//获取睡眠目标[醒来时间]
int get_wake_up_time_from_config_model(void)
{
int wake_up_time = 0;
wake_up_time = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_GET_UP);
return wake_up_time;
}
+void set_config_heart(int heartRateDetectionFreq)
+{
+ // 设置心率检测频率
+ OHOS::ConfigModel::GetInstance()->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_DETECTED, heartRateDetectionFreq);
+}
#ifdef __cplusplus
#if __cplusplus
}
/**
* @param {uint32_t} time 时间戳
* @param {char} *p_time 字符串
- * @param {bool} *include_seconds 是否包含秒
- * @param {char} 隔断符
+ * @param {bool} include_seconds 是否包含秒
+ * @param {bool} include_year 是否包含年份
+ * * @param {char} 隔断符
* @brief 通过时间戳获取日期
*/
-errcode_t uapi_get_TIME_STR(uint32_t time,char *p_time, char separator, bool include_seconds)
+errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds, bool include_year)
{
if (p_time == NULL)
{
// 根据需要格式化日期时间字符串,包括时分秒和分隔符
if (include_seconds)
{
- sprintf(p_time, "%04d%c%02d%c%02d %02d%c%02d", timeinfo->tm_year + 1900, separator, timeinfo->tm_mon + 1, separator,
- timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min);
+ if (include_year)
+ {
+ sprintf(p_time, "%04d%c%02d%c%02d %02d%c%02d", timeinfo->tm_year + 1900, separator, timeinfo->tm_mon + 1, separator,
+ timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min);
+ }
+ else
+ {
+ sprintf(p_time, "%02d%c%02d %02d%c%02d", timeinfo->tm_mon + 1, separator,
+ timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min);
+ }
}
else
{
- sprintf(p_time, "%04d%c%02d%c%02d %02d%c%02d", timeinfo->tm_year + 1900, separator, timeinfo->tm_mon + 1, separator,
- timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min);
+ if (include_year)
+ {
+ sprintf(p_time, "%04d%c%02d%c%02d %02d%c%02d", timeinfo->tm_year + 1900, separator, timeinfo->tm_mon + 1, separator,
+ timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min);
+ }
+ else
+ {
+ sprintf(p_time, "%02d%c%02d %02d%c%02d", timeinfo->tm_mon + 1, separator,
+ timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min);
+ }
}
return ERRCODE_SUCC;
}
+
/**
* @param {char} *p_time
* @param {char} 隔断符
/**获取日期*/
errcode_t uapi_get_yyyymmddhhmmss_Date(char *date);
-
-/*获取日期*/
-errcode_t uapi_get_YYMMDD_Time(char *p_time, char separator);
-
/*获取日期扩展版*/
errcode_t uapi_get_YYMMDD_Time_extend(char *p_time, char separator,uint8_t day);
-
+/*获取日期*/
+errcode_t uapi_get_YYMMDD_Time(char *p_time, char separator);
/*获取时间*/
errcode_t uapi_get_HHMMSS_Time(char *p_time, char separator, bool include_seconds);
/*获取星期*/
/*设置屏幕亮屏*/
void uapi_set_screen_on_api(void);
/*通过时间戳解析时间字符串*/
-errcode_t uapi_get_TIME_STR(uint32_t time,char *p_time, char separator, bool include_seconds);
+errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds, bool include_year);
char *uapi_get_local_yyyymmdd_date(void);
#include "debug_print.h"
#include "custom_runtime.h"
#include "lwip/altcp_tls.h"
+#include "ConfigModelC.h"
#define ARRAY_COUNT(array) (sizeof(array) / sizeof(array[0]))
#define CUSTOM_UTILS_MAX_ARGC 8
return ERRCODE_SUCC;
}
+ /*恢复出厂设置*/
+ static uint32_t custom_restore_factory_settings(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+ {
+ UNUSED(para);
+ UNUSED(paraLen);
+ UNUSED(strCommonCmd);
+
+ // 执行恢复出厂设置的操作
+ uapi_restore_factory_setting();
+
+ PRINT("Restoring Factory Settings...\n");
+ return ERRCODE_SUCC;
+ }
+
+#if 1
+ /*设置心率检测频率*/
+ static uint32_t custom_set_heart(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+ {
+ UNUSED(strCommonCmd);
+
+ uint8_t argv[CUSTOM_UTILS_MAX_ARGC][CUSTOM_UTILS_MAX_ARGV_LEN] = {0};
+ uint32_t argc = 0;
+
+ int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+ if (ret != CUSTOM_UTILS_SUCCESS)
+ {
+ PRINT("CUSTOM_UTILSTEST ATCMD Convert Command Failed\n");
+ return ERRCODE_FAIL;
+ }
+
+ if (argc != 1)
+ {
+ PRINT("CUSTOM_UTILSTEST power_test ATCMD Set Parameter Failed argc %d\r\n");
+ return ERRCODE_FAIL;
+ }
+ int heartRateDetectionFreq = atol((char *)argv[0]);
+
+ // 设置心率检测频率
+ set_config_heart(heartRateDetectionFreq);
+
+ PRINT("heartRateDetectionFreq is %d\n", heartRateDetectionFreq);
+ return ERRCODE_SUCC;
+ }
+#endif
+
+
static const at_cmd_table_t g_custom_utils_cmd[] = {
{ (char *)"AT^CUSTOM_SN", custom_utils_setsn, (char *)"123456789ABCDEF2345678" },
{ (char *)"AT^CUSTOM_SN_REQ", custom_utils_getsn, (char *)" " },
{ (char *)"AT^EFUSEWRITE", custom_uapi_efuse_test_write, (char *)" " },
{ (char *)"AT^SCHEDDEBUG", custom_task_sched_debug, (char *)" " },
{ (char *)"AT^MEMDEBUG", custom_mem_debug, (char *)" " },
-
+
+ {(char *)"AT^RESTORE", custom_restore_factory_settings, (char *)" "},
+ {(char *)"AT^SETHEART", custom_set_heart, (char *)" "},
};