AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE, (uint8_t *)sleep_notify_time, 4);\r
// 设置状态为睡眠\r
OHOS::SleepModel::GetInstance().set_sleep_state(OHOS::SLEEPSTATE::SLEPP);\r
+ OHOS::SleepModel::GetInstance().DeleteSleepData(); // 清空前一天睡眠数据\r
LOS_Msleep(1000);\r
do_cywee_service_check_msg(CYWEE_SERVICE_CMD_SLEEPING_MODE, NULL);\r
}\r
LOS_Msleep(1000);\r
do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE, NULL);\r
}\r
-\r
- if(sedentary_switch)\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
{\r
- if (curTime.tm_hour == ((sedentary_time & 0XFF000000) >> 24) && curTime.tm_min == ((sedentary_time & 0X00FF0000) >> 16) && curTime.tm_sec == 0)\r
- {\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
- {\r
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CLOSE_SEDENTARY, NULL);\r
- }\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
+ {\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CLOSE_SEDENTARY, NULL);\r
}\r
}\r
-\r
// 心率周期检测 [0 1 5 10]\r
if (OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_DETECTED))\r
{\r
{
// 初始化配置睡眠目标
set_sleep_goal();
+ // 刷新数据
+ ReInitData();
+ }
+ SleepModel::~SleepModel() {}
+ SleepModel &SleepModel::GetInstance()
+ {
+ static SleepModel instance;
+ return instance;
+ }
+ void SleepModel::ReInitData()
+ {
// 配置睡眠字符串
SleepDataUI *data = ReadSleepData();
if (data != nullptr)
sleep_total_time = data->totaltime;
}
}
- SleepModel::~SleepModel() {}
- SleepModel &SleepModel::GetInstance()
- {
- static SleepModel instance;
- return instance;
- }
-
static constexpr const char *SLEEP_JSON_PATH = "/user/userdata/health/sleep.json";
// 读取睡眠数据
SleepDataUI *SleepModel::ReadSleepData()
{
+
// 判断文件夹是否存在
if (!HealthService::GetInstance()->CreateHealthFolder())
{
cJSON *sleeptime_item = cJSON_GetObjectItem(sleep_root, "sleeptime");
cJSON *waketime_item = cJSON_GetObjectItem(sleep_root, "waketime");
cJSON *totaltime_item = cJSON_GetObjectItem(sleep_root, "totaltime");
+ cJSON *sleep_timestamp_item = cJSON_GetObjectItem(sleep_root, "sleep_timestamp");
+ cJSON *wake_timestamp_item = cJSON_GetObjectItem(sleep_root, "wake_timestamp");
if (sleeptime_item && waketime_item && totaltime_item)
{
data->sleeptime = sleeptime_item->valuestring;
data->waketime = waketime_item->valuestring;
data->totaltime = totaltime_item->valueint;
+ // 增加时间戳
+ data->sleep_timestamp = sleep_timestamp_item->valueint;
+ data->wake_timestamp = wake_timestamp_item->valueint;
}
else
{
cJSON_Delete(sleep_root);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ReadSleepData is ok!");
+
// 返回结构体
return data;
}
cJSON_AddItemToObject(sleep_root, "sleeptime", cJSON_CreateString(data.sleeptime.c_str()));
cJSON_AddItemToObject(sleep_root, "waketime", cJSON_CreateString(data.waketime.c_str()));
cJSON_AddItemToObject(sleep_root, "totaltime", cJSON_CreateNumber(data.totaltime));
+ cJSON_AddItemToObject(sleep_root, "sleep_timestamp", cJSON_CreateNumber(data.sleep_timestamp));
+ cJSON_AddItemToObject(sleep_root, "wake_timestamp", cJSON_CreateNumber(data.wake_timestamp));
char *jsonData = cJSON_Print(sleep_root);
if (jsonData == NULL)
}
void SleepModel::update_sleep(SLEEP_T *data)
{
- if (data == NULL)
+ if (data == nullptr)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid input data");
return;
}
- // 打印数据
WEARABLE_LOGD(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, wakeStr); // 醒来
+ SleepDataUI *UIdata = ReadSleepData();
+ if (UIdata != nullptr)
+ {
+ // 入睡时间是最早时间
+ if (data->fall_asleep_timestamp < UIdata->sleep_timestamp || UIdata->sleep_timestamp == 0)
+ {
+ UIdata->sleep_timestamp = data->fall_asleep_timestamp;
+ }
+ // 起床时间是最晚时间
+ if (data->wake_up_timestamp > UIdata->wake_timestamp || UIdata->wake_timestamp == 0)
+ {
+ UIdata->wake_timestamp = data->wake_up_timestamp;
+ }
+ // 总时间需要累加
+ UIdata->totaltime += data->total_time;
+
+ update_time_info(UIdata->sleep_timestamp, sleepStr);
+ update_time_info(UIdata->wake_timestamp, wakeStr);
+ sleep_total_time = UIdata->totaltime;
+
+ SaveSleepData(*UIdata);
+ }
+ delete UIdata; // Free memory if dynamically allocated
+ }
- // 更新睡眠总时间
- sleep_total_time = data->total_time; // 睡眠总时长
+ // 清空睡眠数据
+ bool SleepModel::DeleteSleepData()
+ {
+ SleepDataUI data;
+ data.sleeptime = "--";
+ data.waketime = "--";
+ data.totaltime = 0;
+ data.sleep_timestamp = 0;
+ data.wake_timestamp = 0;
+
+ if (SaveSleepData(data))
+ {
+ ReInitData(); // 刷新
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DeleteSleepData is ok");
+ return true;
+ }
- SleepDataUI UIdata;
- UIdata.sleeptime = sleepStr;
- UIdata.waketime = wakeStr;
- UIdata.totaltime = sleep_total_time;
- // 数据存储
- SaveSleepData(UIdata);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DeleteSleepData is error");
+ return false;
}
void SleepModel::update_time_info(uint32_t timestamp, std::string &timeStr)
{
char labelTime[20];
- if (uapi_get_TIME_STR(timestamp, labelTime, '.', ':', DATE_Y_M_D_H_M) != ERRCODE_SUCC)
+ if (uapi_get_TIME_STR(timestamp, labelTime, '.', ':', DATE_H_M) == ERRCODE_SUCC)
{
timeStr = std::string(labelTime);
}