Merge #1465 into sdk602patch0911 from refs/changes/1465/head 1467/target/1
author袁清梦 <3449750381@qq.com>
Tue, 26 Nov 2024 14:10:38 +0000 (14:10 +0000)
committer袁清梦 <3449750381@qq.com>
Tue, 26 Nov 2024 14:10:38 +0000 (14:10 +0000)
心率:優化心率最高最低值提醒

* refs/changes/1465/head: (2 commits squashed)

  - 心率:優化心率最高最低值提醒

  - 心率:優化心率異常處理

Signed-off-by: Caisking <3449750381@qq.com>
Reviewed-by: Caisking <3449750381@qq.com>
Reviewed-by: 罗正 <1732036298@qq.com>
Reviewed-by: aliyun8003852482 <1224667075@qq.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Reviewed-by: aliyun6865282430 <1624952103@qq.com>
Merged-by: Caisking <3449750381@qq.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/1465
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp

index 138f46f..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
@@ -584,20 +584,23 @@ void HeartModel::logAndChangeSlice(HeartResult result) {
           ? "未佩戴状态"\r
           : (result == HeartResult::TIMEOUT) ? "超时" : "无效数据";\r
   WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:%s情况", resultMsg);\r
+  uapi_set_screen_on_api(); // 亮屏\r
   NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL);\r
 }\r
 // 处理低心率情况\r
 void HeartModel::handleLowHeartRate() {\r
   WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:低结果情况");\r
-  HealthState lowHealthState = {BLOOD_CHECK, LOW, thresholdValue};\r
+  HealthState lowHealthState = {HEART_CHECK, LOW, thresholdValue};\r
   HealthService::GetInstance()->SetHealthCurrent(lowHealthState);\r
+  uapi_set_screen_on_api(); // 亮屏\r
   NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID);\r
 }\r
 // 处理高心率情况\r
 void HeartModel::handleHighHeartRate() {\r
   WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:高结果情况");\r
-  HealthState highHealthState = {BLOOD_CHECK, HIGH, thresholdValue};\r
+  HealthState highHealthState = {HEART_CHECK, HIGH, thresholdValue};\r
   HealthService::GetInstance()->SetHealthCurrent(highHealthState);\r
+  uapi_set_screen_on_api(); // 亮屏\r
   NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID);\r
 }\r
 // 设置佩戴状态\r
@@ -782,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
index 58526bb..51c7982 100644 (file)
@@ -188,7 +188,7 @@ bool TraingCardPresenter::ControlSensor(ExerciseState state) {
     // 退出进入普通模式\r
     do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE, NULL);\r
     opensensorstuats = false; // 恢复标志位\r
-    StopAndResetTimer();           // 关闭计时器\r
+    StopAndResetTimer();      // 关闭计时器\r
     break;\r
   case ExerciseState::Pause:\r
     do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE, 0);\r
@@ -294,7 +294,7 @@ void TraingCardPresenter::UpdateDataView() {
       &TrainingDataView::UpdataTime, TrainingDataView::GetInstance()));\r
 \r
   TraingModel::GetInstance()->updata_goal();\r
-  \r
+\r
   // 刷新训练数据:心率、卡路里、距离、步数、训练强度、目标完成度\r
   SportData *sportdata = TraingModel::GetInstance()->GetSportdata();\r
   RefreshData(sportdata);\r
@@ -391,7 +391,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) {
         m_sportTag = cmd->sportTag / 1000;\r
       } else {\r
         m_sportTag = cmd->sportTag;\r
-        }\r
+      }\r
       TraingModel::GetInstance()->SetSportTag(\r
           static_cast<ExerciseTag>(cmd->sportTagType), m_sportTag);\r
       WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "目标设置成功!\r\n");\r
@@ -413,7 +413,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) {
   if (cmdstate == ExerciseState::Start) {\r
     if ((currentState == ExerciseState::General)) {\r
       if (TraingCardView::GetInstance() == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble 开启运动");\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble 开启运动");\r
         uapi_set_screen_on_api(); // 亮屏\r
         NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD);\r
         // 设置目标类型和项目有且只有一次\r
@@ -440,7 +440,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) {
       handleStartState();\r
       return true;\r
     } else {\r
-      \r
+\r
       reply_APP_OpenSportModeCmd(false);\r
       // return false;\r
     }\r
@@ -449,7 +449,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) {
   if (cmdstate == ExerciseState::Pause) {\r
     if (currentState == ExerciseState::Start ||\r
         currentState == ExerciseState::Continue) {\r
-      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble 暂停运动");\r
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble 暂停运动");\r
       reply_APP_SportPasueResetCmd(TraingModel::GetInstance()->GetSportTime());\r
       handlePauseState();\r
       return true;\r
@@ -459,7 +459,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) {
   // 仅在暂停状态下允许恢复运动\r
   if (cmdstate == ExerciseState::Continue &&\r
       currentState == ExerciseState::Pause) {\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble 恢复运动");\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble 恢复运动");\r
     reply_APP_SportPasueResetCmd(TraingModel::GetInstance()->GetSportTime());\r
     handleContinueState();\r
     return true;\r
@@ -470,7 +470,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) {
       (currentState == ExerciseState::Start ||\r
        currentState == ExerciseState::Continue ||\r
        currentState == ExerciseState::Pause)) {\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble 结束运动");\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble 结束运动");\r
     uint32_t sport_time = TraingModel::GetInstance()->GetSportTime();\r
     reply_APP_SportStopModeCmd(sport_time);\r
     handleEndState();\r
@@ -520,6 +520,7 @@ void TraingCardPresenter::handleEndState() {
 \r
 /*训练暂停*/\r
 void TraingCardPresenter::handlePauseState() {\r
+  uapi_set_screen_on_api(); // 亮屏\r
   TrainingControlView::GetInstance()->GetLabel()->SetTextId(STR_RESUME);\r
   TrainingControlView::GetInstance()->GetButton()->SetImageSrc(\r
       SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE);\r
@@ -530,6 +531,7 @@ void TraingCardPresenter::handlePauseState() {
 \r
 /*训练继续*/\r
 void TraingCardPresenter::handleContinueState() {\r
+  uapi_set_screen_on_api(); // 亮屏\r
   TrainingControlView::GetInstance()->GetLabel()->SetTextId(STR_PAUSE);\r
   TrainingControlView::GetInstance()->GetButton()->SetImageSrc(\r
       SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE);\r