#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"
#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)) {
}
}
+/** 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);