适配优化后血压函数
authorxue <2144439972@qq.com>
Thu, 11 Jun 2026 02:47:01 +0000 (10:47 +0800)
committerxue <2144439972@qq.com>
Thu, 11 Jun 2026 02:47:01 +0000 (10:47 +0800)
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/include/BPMainPresenter.h
code/sdk/application/wearable/n9/nativeapp/nativeui/bloodpressure/src/BPMainPresenter.cpp

index 0fdcb98..039664e 100644 (file)
@@ -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);
index 0e78c44..8fe76e0 100644 (file)
@@ -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<int>(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<int>(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);