From 98082637e2a5d34d50421f9c0dbc9ec53b5ffa6c Mon Sep 17 00:00:00 2001 From: Caisking <3449750381@qq.com> Date: Sat, 12 Oct 2024 20:37:13 +0800 Subject: [PATCH] =?utf8?q?=E5=BF=83=E7=8E=87=EF=BC=9A=E4=BC=98=E5=8C=96?= =?utf8?q?=E5=BF=83=E7=8E=87=E6=95=B0=E6=8D=AE=E7=9A=84=E5=AD=98=E5=82=A8?= =?utf8?q?=E4=BB=A5=E5=8F=8A=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativeui/heartrate/include/HeartModel.h | 13 +- .../nativeui/heartrate/src/HeartModel.cpp | 125 +++++++++--------- .../nativeui/traing/src/TraingModel.cpp | 3 - 3 files changed, 76 insertions(+), 65 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h b/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h index f6bb63b87..ea1cf6354 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h @@ -150,6 +150,11 @@ public: uint16_t *GetArrayData(); void SetArrayData(); + void handleHeartResult(); + void logAndChangeSlice(HeartResult result); + void handleLowHeartRate(); + void handleHighHeartRate(); + private: HealthAllDatas healthDatas; uint16_t pretime{0}; @@ -164,8 +169,8 @@ private: bool wearStatus{true}; uint16_t index_ = 0; - uint16_t displayheart; // 显示心率 - uint16_t currentheart; // 保存心率 + uint16_t displayheart = 0; // 显示心率 + uint16_t currentheart = 0; // 保存心率 uint16_t displayheart_max = 0; // 显示最大心率 uint16_t displayheart_min = 0; // 显示最小心率 @@ -186,6 +191,10 @@ private: HeartCheck checkstate = HeartCheck::RESTSTSTE; // 目前检测状态 uint16_t dynamic_heartrate[5]; //动态心率配置项 + + uint8_t heartRemindState{0}; + uint16_t thresholdValue{160}; + uint16_t thresholdState{1}; }; } // namespace OHOS 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 2c17fa1c9..73d443ae6 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp @@ -29,9 +29,9 @@ extern "C" { #endif #define MAX_UNWEAR_COUNT 2 -#define MAX_VALID_HRS_COUNT 20 -#define MAX_DISVALID_HRS_COUNT 10 -#define MIN_DISPLAY_HEART 10 +#define MAX_VALID_HRS_COUNT 10 //最大有效数 +#define MAX_DISVALID_HRS_COUNT 10 //最大无效数 +#define MIN_DISPLAY_HEART 50 //最新心率 #define DISPLAY_COUNT 0 #define HEARTTEST 1 //[0 开启测试 1 关闭] @@ -429,8 +429,9 @@ void HeartModel::Heart_Start() { displayheart = 0; SetResult(HeartResult::NOT_TESTED); // 重置检测 Heart_Control(HeartState::Start, HeartCheck::INITIATIVE); - ScreenTurnOn(60 * 1000); // 亮屏操作 600000ms 60秒关闭 + // ScreenTurnOn(60 * 1000); // 亮屏操作 600000ms 60秒关闭 sensorstate = true; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始心率检测"); } } @@ -439,15 +440,13 @@ void HeartModel::Heart_Stop() { valid_counter_ = 0; disvalid_counter_ = 0; unwear_counter_ = 0; - // display_counter_ = 0; 取消再次检测的--操作 // displayheart = 0; - ScreenTurnOff(); //恢复正常亮屏 + // ScreenTurnOff(); //恢复正常亮屏 /*主界面卡片检测 或者 被动检测*/ - if (checkstate == HeartCheck::PASSIVITY || - checkstate == HeartCheck::CARDCHECK) { + if (checkstate == HeartCheck::PASSIVITY) { if (heartresult_ == HeartResult::SUCCESS) { Heart_Save(); /*更新曲线*/ @@ -459,12 +458,9 @@ void HeartModel::Heart_Stop() { return; } - if (sensorstate) { - // Heart_Control(HeartState::End,HeartCheck::INITIATIVE);主动检测心率 - // 不需要关闭 - sensorstate = false; - Heart_Result(); // 处理结果 - } + sensorstate = false; + Heart_Result(); // 处理结果 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "本次心率检测结束"); } // 保存检测数据 void HeartModel::Heart_Save() { @@ -478,76 +474,61 @@ void HeartModel::Heart_Save() { data.timestamp); } -// 显示检测结果// 显示检测结果 void HeartModel::Heart_Result() { - // 心率提醒(0开 1关) - uint8_t HeartRemindState = ConfigModel::GetInstance()->get_configData_int( + // 获取心率提醒状态和阈值 + heartRemindState = ConfigModel::GetInstance()->get_configData_int( ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_REMIND); - uint16_t ThresholdValue = ConfigModel::GetInstance()->get_configData_int( + thresholdValue = ConfigModel::GetInstance()->get_configData_int( ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_THRESHOLD_VALUE); - if (HeartRemindState) { - // 检查当前心率是否高于或低于阈值 - uint16_t ThresholdState = ConfigModel::GetInstance()->get_configData_int( + if (heartRemindState) { + // 获取当前心率状态 + thresholdState = ConfigModel::GetInstance()->get_configData_int( ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_MAX_MIN); - if (ThresholdState == 0 && currentheart < ThresholdValue && - currentheart != 0) { - // 当前心率低于阈值 - heartresult_ = HeartResult::LOW_RESULT; - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, - "检测结果:低结果情况,currentheart=%d,ThresholdValue=%d", - currentheart, ThresholdValue); - } else if (ThresholdState == 1 && currentheart > ThresholdValue) { - // 当前心率高于阈值 - heartresult_ = HeartResult::HIGH_RESULT; - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, - "检测结果:高结果情况,currentheart=%d,ThresholdValue=%d", - currentheart, ThresholdValue); + if (currentheart != 0) { + if (thresholdState == 0 && currentheart < thresholdValue) { + // 当前心率低于阈值 + heartresult_ = HeartResult::LOW_RESULT; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "检测结果:低结果情况,currentheart=%d,ThresholdValue=%d", + currentheart, thresholdValue); + } else if (thresholdState == 1 && currentheart > thresholdValue) { + // 当前心率高于阈值 + heartresult_ = HeartResult::HIGH_RESULT; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "检测结果:高结果情况,currentheart=%d,ThresholdValue=%d", + currentheart, thresholdValue); + } } } // 根据结果进行处理 + handleHeartResult(); +} +// 处理检测结果 +void HeartModel::handleHeartResult() { switch (heartresult_) { case HeartResult::SUCCESS: WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:成功"); Heart_Save(); - /*更新曲线*/ + // 更新曲线 GraphicService::GetInstance()->PostGraphicEvent( std::bind(&HeartModel::Heart_Update_View, HeartModel::GetInstance())); break; - case HeartResult::NOT_WORN: // 未佩戴状态 - case HeartResult::TIMEOUT: // 超时情况 - case HeartResult::INVALID_DATA: // 无效数据情况 - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:%s情况", - heartresult_ == HeartResult::NOT_WORN - ? "未佩戴状态" - : heartresult_ == HeartResult::TIMEOUT ? "超时" - : "无效数据"); - NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL); + case HeartResult::NOT_WORN: + case HeartResult::TIMEOUT: + case HeartResult::INVALID_DATA: + logAndChangeSlice(heartresult_); break; case HeartResult::LOW_RESULT: - // 低心率结果处理 - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:低结果情况"); - HealthState lowHealthState; - lowHealthState.checkType = BLOOD_CHECK; - lowHealthState.resultStatus = LOW; - lowHealthState.checkResult = ThresholdValue; - HealthService::GetInstance()->SetHealthCurrent(lowHealthState); - NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID); + handleLowHeartRate(); break; case HeartResult::HIGH_RESULT: - // 高心率结果处理 - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:高结果情况"); - HealthState highHealthState; - highHealthState.checkType = BLOOD_CHECK; - highHealthState.resultStatus = HIGH; - highHealthState.checkResult = ThresholdValue; - HealthService::GetInstance()->SetHealthCurrent(highHealthState); - NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID); + handleHighHeartRate(); break; default: @@ -555,6 +536,30 @@ void HeartModel::Heart_Result() { break; } } +//进行日志打印与界面切换 +void HeartModel::logAndChangeSlice(HeartResult result) { + const char *resultMsg = + (result == HeartResult::NOT_WORN) + ? "未佩戴状态" + : (result == HeartResult::TIMEOUT) ? "超时" : "无效数据"; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:%s情况", resultMsg); + NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL); +} +// 处理低心率情况 +void HeartModel::handleLowHeartRate() { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:低结果情况"); + HealthState lowHealthState = {BLOOD_CHECK, LOW, thresholdValue}; + HealthService::GetInstance()->SetHealthCurrent(lowHealthState); + NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID); +} +// 处理高心率情况 +void HeartModel::handleHighHeartRate() { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:高结果情况"); + HealthState highHealthState = {BLOOD_CHECK, HIGH, thresholdValue}; + HealthService::GetInstance()->SetHealthCurrent(highHealthState); + NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID); +} +// 设置佩戴状态 void HeartModel::SetWearStatus() { // 如果处于训练模式,提前返回 if (uapi_dev_runtime_get_train_status() == 1) diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp index cf111bee3..98abd868c 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp @@ -129,9 +129,6 @@ static void Training_Notify(void *args, const Topic topic, Request *request) { } //增加训练runtime控制 if (uapi_dev_runtime_get_train_status() == 0) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, - "uapi_dev_runtime_get_train_status %d", - uapi_dev_runtime_get_train_status()); return; } //训练基本信息更新 -- 2.17.1