VIEW_SETTING, // 设置
VIEW_APPLIST, // App应用
/* 请不要在前面增加任何Slice */
+ VIEW_BLOOD_RESULT, // 血氧(应用列表入口)
+ VIEW_HEART_CHART, // 心率(应用列表入口)
+ VIEW_BLOOD_PRESSURE, // 血压(应用列表入口)
+ VIEW_ECG, // 心电(应用列表入口)
VIEW_MAIN_ALARM, // 闹钟
VIEW_ALARM_POP_UP, // 闹铃界面
VIEW_BLUETOOTH_EARPHONE, // 连接蓝牙耳机界面
VIEW_CHECK_INVALID, // 检测数无效
VIEW_BLOOD, // 血氧监测
VIEW_BLOODOXY, // 血氧饱和度界面
- VIEW_BLOOD_RESULT, // 血氧结果界面
VIEW_BLOOD_CHECK, // 血氧检测界面
VIEW_HEART_RESULT, // 心率结果界面
VIEW_HEART_CHECK, // 心率检测界面
#ifdef SUPPORT_ALIPAY_SEC
VIEW_MAIN_ALIPAY, // 支付宝
#endif
- VIEW_HEART_CHART, // 心率曲线图检测
- VIEW_BLOOD_PRESSURE, // 血压(主入口/历史/说明)
- VIEW_ECG, // 心电(主入口/历史/测量)
VIEW_ADD_NEW_ID = 250,
/* -------------------------------------------------------------------------- */
VIEW_RECENT_APP,
return true;
}
+//创建血压数据目录
bool BPModel::CreateBPDataDirectory() {
+ static constexpr const char *HEALTH_DIR = "/user/userdata/health";
+ struct stat info;
+ if (stat(HEALTH_DIR, &info) != 0) {
+ if (mkdir(HEALTH_DIR, S_IRWXU) != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPModel::CreateBPDataDirectory health mkdir fail");
+ return false;
+ }
+ }
if (access(BP_DATA_DIR, F_OK) == 0) {
return true;
}
FILE *fp = fopen(BP_HISTORY_FILE, "wb");
if (fp == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPModel SaveHistory fopen fail");
return false;
}
size_t writeSize = fwrite(&storage, sizeof(BPHistoryStorage), 1, fp);
+ if (writeSize != 1) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPModel SaveHistory fwrite fail");
+ fclose(fp);
+ return false;
+ }
+ fflush(fp);
fclose(fp);
- return writeSize == 1;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPModel SaveHistory count=%u", storage.count);
+ return true;
}
/** 加载数据 */
void BPModel::LoadData() {
+ std::deque<BPRecord> cachedRecords = historyRecords_;
+ BPRecord cachedLast = lastRecord_;
if (LoadHistoryFromStorage()) {
return;
}
+ if (!cachedRecords.empty()) {
+ historyRecords_ = std::move(cachedRecords);
+ lastRecord_ = cachedLast;
+ return;
+ }
historyRecords_.clear();
lastRecord_ = {0, 0, 0};
const power_display_svr_api_t *display_api = power_display_svr_get_api();
uint32_t display_time;
+ uint64_t lastChartRandomMs_{0};
};
}
#include "NativeRegisterManager.h"
#include <cmsis_os.h>
+#include <cstdlib>
+#include <ctime>
+#include "health/health_service/health_service.h"
+#include "custom_utils.h"
namespace OHOS
{
void HeartChartPresenter::OnStart()
{
Presenter<HeartChartView>::OnStart();
+ lastChartRandomMs_ = 0;
if (!HeartCheckState)
{
HeartModel::GetInstance()->Heart_Start(HeartCheck::INITIATIVE);
return;
}
- HeartChartView::GetInstance()->UpdateShowHeart();
+ HeartChartView::GetInstance()->UpdateShowHeart();
+
+ uint64_t nowMs = osKernelGetTick2ms();
+ if (lastChartRandomMs_ == 0) {
+ lastChartRandomMs_ = nowMs;
+ }
+ if (nowMs - lastChartRandomMs_ >= 1000) {
+ lastChartRandomMs_ = nowMs;
+ uint32_t ts = 0;
+ if (uapi_get_timestampe_ss(&ts) == ERRCODE_SUCC) {
+ uint16_t randomHr = static_cast<uint16_t>(60 + (rand() % 41));
+ HealthService::GetInstance()->UpdateHourlyHeartRate(static_cast<time_t>(ts), randomHr);
+ int hour = HealthService::GetInstance()->GetCurrentHour();
+ HeartChartView::GetInstance()->Update_data_Chart(hour);
+ }
+ }
}
// 增加按键事件