From b91c772eeba4c44da4b6bef7e484fcf4e1b8ff86 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E8=A2=81=E6=B8=85=E6=A2=A6?= <3449750381@qq.com> Date: Tue, 26 Nov 2024 14:10:38 +0000 Subject: [PATCH] Merge #1465 into sdk602patch0911 from refs/changes/1465/head MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 心率:優化心率最高最低值提醒 * 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 Reviewed-by: aliyun6865282430 <1624952103@qq.com> Merged-by: Caisking <3449750381@qq.com> CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/1465 --- .../nativeui/heartrate/src/HeartModel.cpp | 161 ++++++++++-------- .../training_card/src/TraingCardPresenter.cpp | 18 +- 2 files changed, 96 insertions(+), 83 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp index 138f46f07..38ac39b37 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp @@ -37,8 +37,8 @@ #include #include "battery_hal.h" -#include "ui_service.h" #include "languagecode/LanguageInit.h" +#include "ui_service.h" #ifdef __cplusplus extern "C" { @@ -396,9 +396,7 @@ void HeartModel::Heart_Control(HeartState state, HeartCheck check) { uapi_dev_runtime_set_hrs_passivity(1); WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uapi_dev_runtime_set_hrs_passivity(1)"); - } - else - { + } else { uapi_dev_runtime_set_hrs_passivity(0); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_dev_runtime_set_hrs_passivity(0)"); @@ -418,6 +416,7 @@ void HeartModel::Heart_Control(HeartState state, HeartCheck check) { if (checkstate == HeartCheck::CARDCHECK) { //重置传感器状态 sensorstate = false; + uapi_dev_runtime_set_heartrate_detect_status(0); } // 复原检测状态 checkstate = HeartCheck::RESTSTSTE; @@ -482,13 +481,14 @@ void HeartModel::Heart_Stop() { // 取消常亮屏 ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); //设置runtime - uapi_dev_runtime_set_heartrate_detect_status(0); + Heart_Result(); // 处理结果 //为了防止主界面卡片一直重复开传感器 if (checkstate != HeartCheck::CARDCHECK) { //重置传感器状态 sensorstate = false; + uapi_dev_runtime_set_heartrate_detect_status(0); } WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "本次心率检测结束"); } @@ -584,20 +584,23 @@ void HeartModel::logAndChangeSlice(HeartResult result) { ? "未佩戴状态" : (result == HeartResult::TIMEOUT) ? "超时" : "无效数据"; WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:%s情况", resultMsg); + uapi_set_screen_on_api(); // 亮屏 NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL); } // 处理低心率情况 void HeartModel::handleLowHeartRate() { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:低结果情况"); - HealthState lowHealthState = {BLOOD_CHECK, LOW, thresholdValue}; + HealthState lowHealthState = {HEART_CHECK, LOW, thresholdValue}; HealthService::GetInstance()->SetHealthCurrent(lowHealthState); + uapi_set_screen_on_api(); // 亮屏 NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID); } // 处理高心率情况 void HeartModel::handleHighHeartRate() { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:高结果情况"); - HealthState highHealthState = {BLOOD_CHECK, HIGH, thresholdValue}; + HealthState highHealthState = {HEART_CHECK, HIGH, thresholdValue}; HealthService::GetInstance()->SetHealthCurrent(highHealthState); + uapi_set_screen_on_api(); // 亮屏 NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID); } // 设置佩戴状态 @@ -782,74 +785,82 @@ uint16_t *HeartModel::GetArrayData() { return dynamic_heartrate; } // 获取检测字符串 // 获取检测字符串 // TODO: 适配多国语言 -std::string HeartModel::GetCheckString() { - std::string check_string = "检测结果未知"; - - // 获取检测数据 - if (currentheart == 0) { - if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) { - check_string = "暂无检测数据"; - } else { - check_string = "No detection data is available"; - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "检测数据:%s", check_string.c_str()); - return check_string; - } - - // 获取目前的时间戳 - uint32_t currentTime; - if (uapi_get_timestampe_ss(¤tTime) != ERRCODE_SUCC) { - if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) { - check_string = "获取当前时间失败"; - } else { - check_string = "Get time failed"; - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "获取当前时间失败"); - return check_string; - } - - // 检查时间戳是否有效 - if (timestamp_ms == 0) { - if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) { - check_string = std::to_string(currentheart) + " " + "时间无效,无法检测"; - } else { - check_string = std::to_string(currentheart) + " " + "Invalid time, cannot detect"; - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "时间戳无效,无法检测:%s", check_string.c_str()); - return check_string; - } - - // 进行时间戳相减计算 - uint32_t diff = currentTime - timestamp_ms; - uint32_t diff_min = diff / 60; - uint32_t diff_hour = diff_min / 60; - - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "当前时间:%d, 上次检测时间:%d", currentTime, timestamp_ms); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "时间差(秒):%d, 时间差(分钟):%d, 时间差(小时):%d", diff, diff_min, diff_hour); - - // 根据时间差生成检测字符串 - if (diff_min < 1) { - if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) { - check_string = std::to_string(currentheart) + "次/分 " + "刚刚检测"; // - } else { - check_string = std::to_string(currentheart) + " bpm " + "Just detected"; - } - } else if (diff_hour < 1) { // Within one hour - if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) { - check_string = std::to_string(currentheart) + "次/分 " + std::to_string(diff_min) + "分钟前"; - } else { - check_string = std::to_string(currentheart) + " bpm " + std::to_string(diff_min) + " minutes ago"; - } - } else { - if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) { - check_string = std::to_string(currentheart) + "次/分 " + "超过一个小时前"; - } else { - check_string = std::to_string(currentheart) + " bpm " + "More than an hour ago"; - } - } - - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "检测结果:%s", check_string.c_str()); - return check_string; // Return the final string +std::string HeartModel::GetCheckString() { + std::string check_string = "检测结果未知"; + + // 获取检测数据 + if (currentheart == 0) { + if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) { + check_string = "暂无检测数据"; + } else { + check_string = "No detection data is available"; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "检测数据:%s", check_string.c_str()); + return check_string; + } + + // 获取目前的时间戳 + uint32_t currentTime; + if (uapi_get_timestampe_ss(¤tTime) != ERRCODE_SUCC) { + if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) { + check_string = "获取当前时间失败"; + } else { + check_string = "Get time failed"; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "获取当前时间失败"); + return check_string; + } + + // 检查时间戳是否有效 + if (timestamp_ms == 0) { + if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) { + check_string = std::to_string(currentheart) + " " + "时间无效,无法检测"; + } else { + check_string = + std::to_string(currentheart) + " " + "Invalid time, cannot detect"; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "时间戳无效,无法检测:%s", + check_string.c_str()); + return check_string; + } + + // 进行时间戳相减计算 + uint32_t diff = currentTime - timestamp_ms; + uint32_t diff_min = diff / 60; + uint32_t diff_hour = diff_min / 60; + + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "当前时间:%d, 上次检测时间:%d", + currentTime, timestamp_ms); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, + "时间差(秒):%d, 时间差(分钟):%d, 时间差(小时):%d", diff, + diff_min, diff_hour); + + // 根据时间差生成检测字符串 + if (diff_min < 1) { + if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) { + check_string = std::to_string(currentheart) + "次/分 " + "刚刚检测"; // + } else { + check_string = std::to_string(currentheart) + " bpm " + "Just detected"; + } + } else if (diff_hour < 1) { // Within one hour + if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) { + check_string = std::to_string(currentheart) + "次/分 " + + std::to_string(diff_min) + "分钟前"; + } else { + check_string = std::to_string(currentheart) + " bpm " + + std::to_string(diff_min) + " minutes ago"; + } + } else { + if (ConfigModel::GetInstance()->GetLanguage() == ZH_CN) { + check_string = std::to_string(currentheart) + "次/分 " + "超过一个小时前"; + } else { + check_string = + std::to_string(currentheart) + " bpm " + "More than an hour ago"; + } + } + + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "检测结果:%s", check_string.c_str()); + return check_string; // Return the final string } // 声明定时器变量 diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp index 58526bbfb..51c798220 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp @@ -188,7 +188,7 @@ bool TraingCardPresenter::ControlSensor(ExerciseState state) { // 退出进入普通模式 do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE, NULL); opensensorstuats = false; // 恢复标志位 - StopAndResetTimer(); // 关闭计时器 + StopAndResetTimer(); // 关闭计时器 break; case ExerciseState::Pause: do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE, 0); @@ -294,7 +294,7 @@ void TraingCardPresenter::UpdateDataView() { &TrainingDataView::UpdataTime, TrainingDataView::GetInstance())); TraingModel::GetInstance()->updata_goal(); - + // 刷新训练数据:心率、卡路里、距离、步数、训练强度、目标完成度 SportData *sportdata = TraingModel::GetInstance()->GetSportdata(); RefreshData(sportdata); @@ -391,7 +391,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) { m_sportTag = cmd->sportTag / 1000; } else { m_sportTag = cmd->sportTag; - } + } TraingModel::GetInstance()->SetSportTag( static_cast(cmd->sportTagType), m_sportTag); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "目标设置成功!\r\n"); @@ -413,7 +413,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) { if (cmdstate == ExerciseState::Start) { if ((currentState == ExerciseState::General)) { if (TraingCardView::GetInstance() == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble 开启运动"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble 开启运动"); uapi_set_screen_on_api(); // 亮屏 NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD); // 设置目标类型和项目有且只有一次 @@ -440,7 +440,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) { handleStartState(); return true; } else { - + reply_APP_OpenSportModeCmd(false); // return false; } @@ -449,7 +449,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) { if (cmdstate == ExerciseState::Pause) { if (currentState == ExerciseState::Start || currentState == ExerciseState::Continue) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble 暂停运动"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble 暂停运动"); reply_APP_SportPasueResetCmd(TraingModel::GetInstance()->GetSportTime()); handlePauseState(); return true; @@ -459,7 +459,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) { // 仅在暂停状态下允许恢复运动 if (cmdstate == ExerciseState::Continue && currentState == ExerciseState::Pause) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble 恢复运动"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble 恢复运动"); reply_APP_SportPasueResetCmd(TraingModel::GetInstance()->GetSportTime()); handleContinueState(); return true; @@ -470,7 +470,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) { (currentState == ExerciseState::Start || currentState == ExerciseState::Continue || currentState == ExerciseState::Pause)) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ble 结束运动"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble 结束运动"); uint32_t sport_time = TraingModel::GetInstance()->GetSportTime(); reply_APP_SportStopModeCmd(sport_time); handleEndState(); @@ -520,6 +520,7 @@ void TraingCardPresenter::handleEndState() { /*训练暂停*/ void TraingCardPresenter::handlePauseState() { + uapi_set_screen_on_api(); // 亮屏 TrainingControlView::GetInstance()->GetLabel()->SetTextId(STR_RESUME); TrainingControlView::GetInstance()->GetButton()->SetImageSrc( SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE); @@ -530,6 +531,7 @@ void TraingCardPresenter::handlePauseState() { /*训练继续*/ void TraingCardPresenter::handleContinueState() { + uapi_set_screen_on_api(); // 亮屏 TrainingControlView::GetInstance()->GetLabel()->SetTextId(STR_PAUSE); TrainingControlView::GetInstance()->GetButton()->SetImageSrc( SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE); -- 2.17.1