From 3d9c56ec4d7d163a47bfaa386f4dc770bbfae802 Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Fri, 26 Jun 2026 15:59:31 +0800 Subject: [PATCH] =?utf8?q?1.=E4=BC=98=E5=8C=96=E5=88=97=E8=A1=A8slice?= =?utf8?q?=E9=A1=BA=E5=BA=8F=202.=E4=BC=98=E5=8C=96=E8=A1=80=E5=8E=8B?= =?utf8?q?=E5=AD=98=E5=82=A8=E9=80=BB=E8=BE=91=203.=E4=BC=98=E5=8C=96?= =?utf8?q?=E5=BF=83=E7=94=B5=E6=B5=8B=E9=87=8F=E5=8A=A8=E7=94=BB=E6=95=88?= =?utf8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativelauncher/include/AppViewIDs.h | 8 +++--- .../nativeui/bloodpressure/src/BPModel.cpp | 26 ++++++++++++++++++- .../heartrate/include/HeartChartPresenter.h | 1 + .../heartrate/src/HeartChartPresenter.cpp | 22 +++++++++++++++- 4 files changed, 51 insertions(+), 6 deletions(-) diff --git a/code/sdk/application/wearable/n9/nativeapp/nativelauncher/include/AppViewIDs.h b/code/sdk/application/wearable/n9/nativeapp/nativelauncher/include/AppViewIDs.h index 07dc7439d..dfd3a25db 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativelauncher/include/AppViewIDs.h +++ b/code/sdk/application/wearable/n9/nativeapp/nativelauncher/include/AppViewIDs.h @@ -32,6 +32,10 @@ typedef enum : uint16_t 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, // 连接蓝牙耳机界面 @@ -79,7 +83,6 @@ typedef enum : uint16_t VIEW_CHECK_INVALID, // 检测数无效 VIEW_BLOOD, // 血氧监测 VIEW_BLOODOXY, // 血氧饱和度界面 - VIEW_BLOOD_RESULT, // 血氧结果界面 VIEW_BLOOD_CHECK, // 血氧检测界面 VIEW_HEART_RESULT, // 心率结果界面 VIEW_HEART_CHECK, // 心率检测界面 @@ -167,9 +170,6 @@ typedef enum : uint16_t #ifdef SUPPORT_ALIPAY_SEC VIEW_MAIN_ALIPAY, // 支付宝 #endif - VIEW_HEART_CHART, // 心率曲线图检测 - VIEW_BLOOD_PRESSURE, // 血压(主入口/历史/说明) - VIEW_ECG, // 心电(主入口/历史/测量) VIEW_ADD_NEW_ID = 250, /* -------------------------------------------------------------------------- */ VIEW_RECENT_APP, diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPModel.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPModel.cpp index 896944383..9a76dec8f 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPModel.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPModel.cpp @@ -73,7 +73,16 @@ bool BPModel::MarkDisclaimerAccepted() { 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; } @@ -307,18 +316,33 @@ bool BPModel::SaveHistoryToStorage() { 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 cachedRecords = historyRecords_; + BPRecord cachedLast = lastRecord_; if (LoadHistoryFromStorage()) { return; } + if (!cachedRecords.empty()) { + historyRecords_ = std::move(cachedRecords); + lastRecord_ = cachedLast; + return; + } historyRecords_.clear(); lastRecord_ = {0, 0, 0}; diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/heartrate/include/HeartChartPresenter.h b/code/sdk/application/wearable/n9/nativeapp/nativeui/heartrate/include/HeartChartPresenter.h index 01fb7916c..bb9920829 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/heartrate/include/HeartChartPresenter.h +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/heartrate/include/HeartChartPresenter.h @@ -54,6 +54,7 @@ namespace OHOS const power_display_svr_api_t *display_api = power_display_svr_get_api(); uint32_t display_time; + uint64_t lastChartRandomMs_{0}; }; } diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/heartrate/src/HeartChartPresenter.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/heartrate/src/HeartChartPresenter.cpp index a296af4a5..6de65051a 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/heartrate/src/HeartChartPresenter.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/heartrate/src/HeartChartPresenter.cpp @@ -28,6 +28,10 @@ #include "NativeRegisterManager.h" #include +#include +#include +#include "health/health_service/health_service.h" +#include "custom_utils.h" namespace OHOS { @@ -64,6 +68,7 @@ namespace OHOS void HeartChartPresenter::OnStart() { Presenter::OnStart(); + lastChartRandomMs_ = 0; if (!HeartCheckState) { HeartModel::GetInstance()->Heart_Start(HeartCheck::INITIATIVE); @@ -125,7 +130,22 @@ namespace OHOS 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(60 + (rand() % 41)); + HealthService::GetInstance()->UpdateHourlyHeartRate(static_cast(ts), randomHr); + int hour = HealthService::GetInstance()->GetCurrentHour(); + HeartChartView::GetInstance()->Update_data_Chart(hour); + } + } } // 增加按键事件 -- 2.17.1