心率:優化心率異常處理 1465/2 1465/head
authorCaisking <3449750381@qq.com>
Tue, 26 Nov 2024 13:37:23 +0000 (21:37 +0800)
committerCaisking <3449750381@qq.com>
Tue, 26 Nov 2024 13:37:23 +0000 (21:37 +0800)
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp

index 55b37f1..38ac39b 100644 (file)
@@ -37,8 +37,8 @@
 #include <unistd.h>\r
 \r
 #include "battery_hal.h"\r
-#include "ui_service.h"\r
 #include "languagecode/LanguageInit.h"\r
+#include "ui_service.h"\r
 \r
 #ifdef __cplusplus\r
 extern "C" {\r
@@ -396,9 +396,7 @@ void HeartModel::Heart_Control(HeartState state, HeartCheck check) {
     uapi_dev_runtime_set_hrs_passivity(1);\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,\r
                   "uapi_dev_runtime_set_hrs_passivity(1)");\r
-  }\r
-  else\r
-  {\r
+  } else {\r
     uapi_dev_runtime_set_hrs_passivity(0);\r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
                   "uapi_dev_runtime_set_hrs_passivity(0)");\r
@@ -418,6 +416,7 @@ void HeartModel::Heart_Control(HeartState state, HeartCheck check) {
     if (checkstate == HeartCheck::CARDCHECK) {\r
       //重置传感器状态\r
       sensorstate = false;\r
+      uapi_dev_runtime_set_heartrate_detect_status(0);\r
     }\r
     // 复原检测状态\r
     checkstate = HeartCheck::RESTSTSTE;\r
@@ -482,13 +481,14 @@ void HeartModel::Heart_Stop() {
     // 取消常亮屏\r
     ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);\r
     //设置runtime\r
-    uapi_dev_runtime_set_heartrate_detect_status(0);\r
+\r
     Heart_Result(); // 处理结果\r
 \r
     //为了防止主界面卡片一直重复开传感器\r
     if (checkstate != HeartCheck::CARDCHECK) {\r
       //重置传感器状态\r
       sensorstate = false;\r
+      uapi_dev_runtime_set_heartrate_detect_status(0);\r
     }\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "本次心率检测结束");\r
   }\r
@@ -785,74 +785,82 @@ uint16_t *HeartModel::GetArrayData() { return dynamic_heartrate; }
 // 获取检测字符串\r
 // 获取检测字符串\r
 // TODO: 适配多国语言\r
-std::string HeartModel::GetCheckString() {  \r
-    std::string check_string = "检测结果未知"; \r
-\r
-    // 获取检测数据  \r
-    if (currentheart == 0) {  \r
-        if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {  \r
-            check_string = "暂无检测数据";\r
-        } else {  \r
-            check_string = "No detection data is available";  \r
-        }  \r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "检测数据:%s", check_string.c_str());\r
-        return check_string; \r
-    }  \r
-\r
-    // 获取目前的时间戳  \r
-    uint32_t currentTime;  \r
-    if (uapi_get_timestampe_ss(&currentTime) != ERRCODE_SUCC) {  \r
-        if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {  \r
-            check_string = "获取当前时间失败"; \r
-        } else {  \r
-            check_string = "Get time failed"; \r
-        }  \r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "获取当前时间失败");  \r
-        return check_string; \r
-    }  \r
-\r
-    // 检查时间戳是否有效  \r
-    if (timestamp_ms == 0) {  \r
-        if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {  \r
-            check_string = std::to_string(currentheart) + " " + "时间无效,无法检测";\r
-        } else {  \r
-            check_string = std::to_string(currentheart) + " " + "Invalid time, cannot detect"; \r
-        }  \r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "时间戳无效,无法检测:%s", check_string.c_str());  \r
-        return check_string; \r
-    }  \r
-\r
-    // 进行时间戳相减计算  \r
-    uint32_t diff = currentTime - timestamp_ms;  \r
-    uint32_t diff_min = diff / 60;     \r
-    uint32_t diff_hour = diff_min / 60;  \r
-\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "当前时间:%d, 上次检测时间:%d", currentTime, timestamp_ms); \r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "时间差(秒):%d, 时间差(分钟):%d, 时间差(小时):%d", diff, diff_min, diff_hour); \r
-\r
-    // 根据时间差生成检测字符串  \r
-    if (diff_min < 1) {  \r
-        if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {  \r
-            check_string = std::to_string(currentheart) + "次/分 " + "刚刚检测"; // \r
-        } else {  \r
-            check_string = std::to_string(currentheart) + " bpm " + "Just detected"; \r
-        }  \r
-    } else if (diff_hour < 1) { // Within one hour  \r
-        if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {  \r
-            check_string = std::to_string(currentheart) + "次/分 " + std::to_string(diff_min) + "分钟前"; \r
-        } else {  \r
-            check_string = std::to_string(currentheart) + " bpm " + std::to_string(diff_min) + " minutes ago"; \r
-        }  \r
-    } else {  \r
-        if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {  \r
-            check_string = std::to_string(currentheart) + "次/分 " + "超过一个小时前"; \r
-        } else {  \r
-            check_string = std::to_string(currentheart) + " bpm " + "More than an hour ago"; \r
-        }  \r
-    }  \r
-\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "检测结果:%s", check_string.c_str()); \r
-    return check_string; // Return the final string  \r
+std::string HeartModel::GetCheckString() {\r
+  std::string check_string = "检测结果未知";\r
+\r
+  // 获取检测数据\r
+  if (currentheart == 0) {\r
+    if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {\r
+      check_string = "暂无检测数据";\r
+    } else {\r
+      check_string = "No detection data is available";\r
+    }\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "检测数据:%s", check_string.c_str());\r
+    return check_string;\r
+  }\r
+\r
+  // 获取目前的时间戳\r
+  uint32_t currentTime;\r
+  if (uapi_get_timestampe_ss(&currentTime) != ERRCODE_SUCC) {\r
+    if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {\r
+      check_string = "获取当前时间失败";\r
+    } else {\r
+      check_string = "Get time failed";\r
+    }\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "获取当前时间失败");\r
+    return check_string;\r
+  }\r
+\r
+  // 检查时间戳是否有效\r
+  if (timestamp_ms == 0) {\r
+    if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {\r
+      check_string = std::to_string(currentheart) + " " + "时间无效,无法检测";\r
+    } else {\r
+      check_string =\r
+          std::to_string(currentheart) + " " + "Invalid time, cannot detect";\r
+    }\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "时间戳无效,无法检测:%s",\r
+                  check_string.c_str());\r
+    return check_string;\r
+  }\r
+\r
+  // 进行时间戳相减计算\r
+  uint32_t diff = currentTime - timestamp_ms;\r
+  uint32_t diff_min = diff / 60;\r
+  uint32_t diff_hour = diff_min / 60;\r
+\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "当前时间:%d, 上次检测时间:%d",\r
+                currentTime, timestamp_ms);\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,\r
+                "时间差(秒):%d, 时间差(分钟):%d, 时间差(小时):%d", diff,\r
+                diff_min, diff_hour);\r
+\r
+  // 根据时间差生成检测字符串\r
+  if (diff_min < 1) {\r
+    if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {\r
+      check_string = std::to_string(currentheart) + "次/分 " + "刚刚检测"; //\r
+    } else {\r
+      check_string = std::to_string(currentheart) + " bpm " + "Just detected";\r
+    }\r
+  } else if (diff_hour < 1) { // Within one hour\r
+    if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {\r
+      check_string = std::to_string(currentheart) + "次/分 " +\r
+                     std::to_string(diff_min) + "分钟前";\r
+    } else {\r
+      check_string = std::to_string(currentheart) + " bpm " +\r
+                     std::to_string(diff_min) + " minutes ago";\r
+    }\r
+  } else {\r
+    if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) {\r
+      check_string = std::to_string(currentheart) + "次/分 " + "超过一个小时前";\r
+    } else {\r
+      check_string =\r
+          std::to_string(currentheart) + " bpm " + "More than an hour ago";\r
+    }\r
+  }\r
+\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "检测结果:%s", check_string.c_str());\r
+  return check_string; // Return the final string\r
 }\r
 \r
 // 声明定时器变量\r