From 3a44a7b6dea651391a9965ebf8b7d2c0f678efdc Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Thu, 11 Jun 2026 10:47:01 +0800 Subject: [PATCH] =?utf8?q?=E9=80=82=E9=85=8D=E4=BC=98=E5=8C=96=E5=90=8E?= =?utf8?q?=E8=A1=80=E5=8E=8B=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../bloodpressure/include/BPMainPresenter.h | 1 + .../bloodpressure/src/BPMainPresenter.cpp | 36 +++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/include/BPMainPresenter.h b/code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/include/BPMainPresenter.h index 0fdcb98d3..039664eea 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/include/BPMainPresenter.h +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/include/BPMainPresenter.h @@ -53,6 +53,7 @@ private: void StopProgressSession(); void OnProgressTick(); void OnProgressTimeout(); + void OnWeakSignalDetected(); void UpdateProgressUi(int percent); void CompleteCalibrationFlow(uint8_t sbp, uint8_t dbp); void CompleteMeasureFlow(uint8_t sbp, uint8_t dbp); diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPMainPresenter.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPMainPresenter.cpp index 0e78c4416..8fe76e054 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPMainPresenter.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPMainPresenter.cpp @@ -7,6 +7,7 @@ #include "bloodpressure/include/BPViewClickIds.h" #include "bloodpressure/include/BPCalibStopView.h" #include "bloodpressure/include/BPMeasuringView.h" +#include "bloodpressure/include/BPAbnormalView.h" #include "bloodpressure/include/BPCalibratingView.h" #include "bloodpressure/include/BPAbnormalView.h" #include "NativeRegisterManager.h" @@ -220,9 +221,16 @@ bool BPMainPresenter::PollPpgResult() { #ifdef SUPPORT_PPG_SERVICE int sbp = 0; int dbp = 0; + uint8_t status = 0; // ppg_get_bp(&sbp, &dbp); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[BP] PollPpgResult mode=%d sbp=%d dbp=%d", - static_cast(progressMode_), sbp, dbp); + ppg_get_ecg_bp(&sbp, &dbp, &status); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[BP] PollPpgResult mode=%d status=%u sbp=%d dbp=%d", + static_cast(progressMode_), status, sbp, dbp); + + if (status == PPG_ECG_BP_STATUS_WEAK_SIGNAL) { + OnWeakSignalDetected(); + return true; + } if (progressMode_ == BPProgressMode::Measure) { if (!IsValidBpReading(sbp, dbp)) { @@ -322,6 +330,30 @@ void BPMainPresenter::OnProgressTimeout() { } } +/** ECG 信号弱:停止采集并进入异常页,保留模式供重试 */ +void BPMainPresenter::OnWeakSignalDetected() { + if (progressMode_ == BPProgressMode::None) { + return; + } + lastTimeoutMode_ = progressMode_; + StopProgressSession(); + progressDataReceived_ = true; + + BPMainView *mainView = BPMainView::GetInstance(); + if (mainView == nullptr) { + return; + } + int16_t current = mainView->GetCurrentViewId(); + if (current == BP_CALIB_STOP_VIEW && stopReturnView_ < MAX_BPVIEW) { + current = stopReturnView_; + } + if (current != BP_MEASURING_VIEW && current != BP_CALIBRATING_VIEW) { + WEARABLE_LOGW(WEARABLE_LOG_MODULE_APP, "[BP] weak signal ignored on view=%d", current); + return; + } + mainView->ChangeView(current, BP_ABNORMAL_VIEW, BP_ABNORMAL_TYPE_MEASURE_TIMEOUT); +} + void BPMainPresenter::CompleteCalibrationFlow(uint8_t sbp, uint8_t dbp) { UNUSED(sbp); UNUSED(dbp); -- 2.17.1