#994 心率界面检测显示有全天心率数据(最大值 ,最小值 )手表重启后,最大值 ,最小值消失显示为--
authorCaisking <3449750381@qq.com>
Wed, 23 Oct 2024 02:06:13 +0000 (10:06 +0800)
committerCaisking <3449750381@qq.com>
Wed, 23 Oct 2024 02:06:13 +0000 (10:06 +0800)
code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp
code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp
code/sdk/drivers/peripheral/utils/custom_utils.c

index 595885f..85786f1 100644 (file)
 
 namespace OHOS
 {
-    extern "C"
-    {
-        void uapi_dev_runtime_set_bloodoxygen_storage_status(uint8_t status);
-        void uapi_dev_runtime_set_heartrate_storage_status(uint8_t status);
-
-        void save_heart_data()
-        {
-            printf("save_heart_data\r\n");
-            OHOS::HealthService::GetInstance()->SaveDailyHeartRate();
-            return;
-        }
-    }
+extern "C" {
+void uapi_dev_runtime_set_bloodoxygen_storage_status(uint8_t status);
+void uapi_dev_runtime_set_heartrate_storage_status(uint8_t status);
+
+void save_heart_data() {
+  printf("save_heart_data\r\n");
+  OHOS::HealthService::GetInstance()->SaveDailyHeartRate();
+  return;
+}
+
+void save_heart_maxmin() {
+  printf("save_heart_maxmin\r\n");
+  uint16_t max_heart_data = OHOS::HeartModel::GetInstance()->GetShowMaxHeartdata();
+  uint16_t min_heart_data = OHOS::HeartModel::GetInstance()->GetShowMinHeartdata();
 
+  OHOS::HealthService::GetInstance()->SaveHeartMaxMin(max_heart_data,
+                                                       min_heart_data);
+  return;
+}
+}
 static HealthService *g_pHealthService = nullptr;
 /*获取日期*/
 std::string GetCurrentDate() {
@@ -574,7 +581,58 @@ bool HealthService::CreateHealthFolder() {
     }
 
     // 获取当前小时
-    uint16_t HealthService::GetCurrentHour() {  
-        return currenthour;  
-    }  
+    uint16_t HealthService::GetCurrentHour() { return currenthour; }
+    /*
+    心率最大最小值存储
+    关机存储
+*/
+#define HEART_MAX_MIN_PATH "/user/userdata/health/heart_max_min.bin"
+// 保存最大最小值
+bool HealthService::SaveHeartMaxMin(uint16_t max, uint16_t min) {
+  std::ofstream outFile(HEART_MAX_MIN_PATH, std::ios::binary | std::ios::trunc);
+  if (!outFile.is_open()) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file");
+    return false;
+  }
+
+  outFile.write(reinterpret_cast<const char *>(&max), sizeof(max));
+  if (!outFile) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to write max value");
+    return false;
+  }
+
+  outFile.write(reinterpret_cast<const char *>(&min), sizeof(min));
+  if (!outFile) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to write min value");
+    return false;
+  }
+
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveHeartMaxMin is ok max %d, min %d",
+                max, min);
+  return true;
+}
+// 加载最大最小值
+void HealthService::LoadHeartMaxMin(uint16_t &max, uint16_t &min) {
+  std::ifstream inFile(HEART_MAX_MIN_PATH, std::ios::binary);
+  if (!inFile.is_open()) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file %s",
+                  HEART_MAX_MIN_PATH);
+    return;
+  }
+
+  inFile.read(reinterpret_cast<char *>(&max), sizeof(max));
+  if (!inFile) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to read max value");
+    return;
+  }
+
+  inFile.read(reinterpret_cast<char *>(&min), sizeof(min));
+  if (!inFile) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to read min value");
+    return;
+  }
+
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadHeartMaxMin is ok max %d, min %d",
+                max, min);
+}
 } // namespace OHOS
index 7aa6a07..e062f5c 100644 (file)
@@ -93,6 +93,8 @@ namespace OHOS
         void ClearHourlyHeartRates();
         uint16_t GetCurrentHour();
 
+        bool SaveHeartMaxMin(uint16_t max, uint16_t min);
+        void LoadHeartMaxMin(uint16_t &max, uint16_t &min);
 
     private:
         static const int MAX_HOURS = 24;
index bbdfd0e..013ef4b 100644 (file)
@@ -70,6 +70,7 @@ Subscriber heartSubscirber = {
 };\r
 static void ProcessHeartRateUpdate(Request *request);\r
 static void RefreshHeartData();\r
+void save_heart_maxmin();\r
 void HeartDataSubscribeTopic(Topic topic) {\r
   BroadcastApi *broadcastApi = nullptr;\r
   IUnknown *api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME,\r
@@ -219,6 +220,9 @@ HeartModel::HeartModel() {
     currentheart = 0;\r
     timestamp_ms = 0;\r
   }\r
+  //读取最大最小值\r
+  HealthService::GetInstance()->LoadHeartMaxMin(displayheart_max,\r
+                                               displayheart_min);\r
   // 配置动态数组\r
   SetArrayData();\r
 }\r
@@ -668,11 +672,11 @@ void HeartModel::UpHeartdata(uint16_t heart) {
   }\r
 \r
   // 检查无效计数器是否达标\r
-  if(uapi_dev_runtime_get_sleep_monitoring_status()) //睡眠监测模式下,增加未佩戴个数最大值,避免误判\r
-      max_valid_count = MAX_DISVALID_HRS_COUNT * 2;\r
+  if (uapi_dev_runtime_get_sleep_monitoring_status()) //睡眠监测模式下,增加未佩戴个数最大值,避免误判\r
+    max_valid_count = MAX_DISVALID_HRS_COUNT * 2;\r
   else\r
-      max_valid_count = MAX_DISVALID_HRS_COUNT;\r
-      \r
+    max_valid_count = MAX_DISVALID_HRS_COUNT;\r
+\r
   if (disvalid_counter_ >= max_valid_count) {\r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
                   "检测结果:无效数达标 disvalid_counter:%d", disvalid_counter_);\r
index 0a3ebde..b9a00e2 100644 (file)
@@ -217,6 +217,7 @@ void shutdown_reboot_prejobs_task(void)
     saveancsdata(); //接收到信息进行保存 暂时不修改
     //保存当天心率数据
     // save_heart_data();//测量完成保存
+    save_heart_maxmin();//存储最大最小状态值
 
     //表盘配置
     // dial_file_save();