From: Caisking <3449750381@qq.com> Date: Mon, 1 Jul 2024 11:50:24 +0000 (+0800) Subject: 设置心率检测优先级控制 X-Git-Tag: release_V1.2.70_20241020_135402~906 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=4b99979b0cf41e970339c162dc0ae079088c0d74;p=mirrors%2FFD230.git 设置心率检测优先级控制 --- 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 028337283..91cf57ae7 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h @@ -81,6 +81,14 @@ extern "C" End = 0, Start, }; + enum class HeartCheck + { + RESTSTSTE = 0, // 未检测状态 + PASSIVITY, // 被动检测心率 + INITIATIVE, // 主动检测心率 + EXERCISE, // 运动心率 + }; + // 控制心率检测 typedef struct { uint32_t heartRatePerSec; @@ -137,7 +145,7 @@ extern "C" void SetCheckTime(uint64_t time); // 设置本次测试完的时间 uint16_t GetIndex(); // 测试点位 void SetIndex(uint16_t index); - void Heart_Control(HeartState state); + void Heart_Control(HeartState state, HeartCheck check); private: HealthAllDatas healthDatas; @@ -168,6 +176,8 @@ extern "C" uint8_t valid_counter_ = 0; // 有效数计数器 uint8_t disvalid_counter_ = 0; // 无效数计数器 uint8_t unwear_counter_ = 0; // 佩戴错误计数器 + + HeartCheck checkstate = HeartCheck::RESTSTSTE; // 目前检测状态 }; } 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 14dc31d3b..19c0f1110 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp @@ -474,14 +474,21 @@ namespace OHOS /* ---------------------------------- 状态检测 ---------------------------------- */ // 控制心率检测 - void HeartModel::Heart_Control(HeartState state) + void HeartModel::Heart_Control(HeartState state, HeartCheck check) { + if (check < checkstate) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Higher execution instruction exists"); + return; + } if (state == HeartState::End && heartstate == true) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartState End"); uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST; send_ppg_cmd_msg(md); heartstate = false; + // 复原检测状态 + checkstate = HeartCheck::RESTSTSTE; } else if (state == HeartState::Start && heartstate == false) { @@ -640,8 +647,8 @@ namespace OHOS WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " Save %d %d", data->Heart, data->timestamp); SetCheckTime(data->timestamp); HealthService::GetInstance()->UpdateHealthData(*data); - // 更新卡片心率值 - // SetHeartRatePerSec(heart); + // 关闭自动检测心率 如果有其他高级心率检测在进行,则不会进行关闭[低优先级] + HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::PASSIVITY); } #endif } diff --git a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp index bc103aa5c..180bc2550 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp @@ -143,7 +143,7 @@ namespace OHOS if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0) { // 关闭心率检测 - HeartModel::GetInstance()->Heart_Control(HeartState::End); + HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); // 回退 NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_ZOOM); } @@ -208,7 +208,7 @@ namespace OHOS HeartCheckView::GetInstance()->GetImageAnimator()->Stop(); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus false"); // 关闭心率检测 - HeartModel::GetInstance()->Heart_Control(HeartState::End); + HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); startheart = true; } } @@ -225,8 +225,9 @@ namespace OHOS if (startheart == true) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus true"); - // 开启心率检测 - HeartModel::GetInstance()->Heart_Control(HeartState::Start); + // 开启心率检测 [UI优先级最高直接打断正在检测 重新检测] + HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); + HeartModel::GetInstance()->Heart_Control(HeartState::Start,HeartCheck::INITIATIVE); startheart = false; } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp b/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp index 4b0b1dc1c..d2e7b35ea 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp @@ -353,7 +353,7 @@ namespace OHOS if (previousCardId == HEART_RATE && cardId != HEART_RATE) { // 从心率卡片变为其他卡片时调用关闭心率检测的函数 - HeartModel::GetInstance()->Heart_Control(HeartState::End); + HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE); } // 更新上一个卡片的值 @@ -362,8 +362,9 @@ namespace OHOS switch (cardId) { case HEART_RATE: - // 开启心率检测 - HeartModel::GetInstance()->Heart_Control(HeartState::Start); + // 开启心率检测 [UI优先级最高直接打断正在检测 重新检测] + HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE); + HeartModel::GetInstance()->Heart_Control(HeartState::Start, HeartCheck::INITIATIVE); break; case COMPASS: diff --git a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp index 6d67e862c..0b30109f0 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp @@ -57,7 +57,7 @@ namespace OHOS { Time = 5; START_FLAG = false; - HeartModel::GetInstance()->Heart_Control(HeartState::End); // 关闭心率检测 + HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); // 关闭心率检测 } /* -------------------------------------------------------------------------- */ /*定时器到期时的处理*/ @@ -78,7 +78,7 @@ namespace OHOS RespiratoryTrainingModel::GetInstance().RT_StopTimer(); // 停止定时器 RespiratoryTrainingModel::GetInstance().AddRespiratoryTrainingTimes(); // 呼吸训练次数加1 p_RespiratoryTrainingView->GetRespiratoryTrainingAnimator_()->Stop(); // 关闭呼吸动画 - HeartModel::GetInstance()->Heart_Control(HeartState::End); // 关闭心率检测 + HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); // 关闭心率检测 p_RespiratoryTrainingView->ChangeView(RESPIRATORYTRAINING, RESPIRATORYTRAININGCOMPLETED); } else @@ -86,7 +86,7 @@ namespace OHOS Time = ONE_MINUTE; p_RespiratoryTrainingView->StartRespiratoryTraining(); // 开始呼吸训练 START_FLAG = true; - HeartModel::GetInstance()->Heart_Control(HeartState::Start); // 开启心率检测 + HeartModel::GetInstance()->Heart_Control(HeartState::Start,HeartCheck::INITIATIVE); // 开启心率检测 } }