static constexpr int32_t kMeasureTickMs = 200; // 测量定时器周期
static constexpr int32_t kPollIntervalMs = 1000; // 测量定时器间隔
- bool screenAlwaysOnForEcg_{false}; // 屏幕长亮
- bool measureDataReceived_{false}; // 测量数据是否收到
- int32_t pollElapsedMs_{0}; // 测量定时器流逝时间
+ bool screenAlwaysOnForEcg_{false};//屏幕长亮
+ bool measureDataReceived_{false};//测量数据是否收到
+ bool measureSessionActive_{false};//测量会话是否激活
+ int32_t pollElapsedMs_{0};//测量定时器流逝时间
};
} // namespace OHOS
void ECGMainPresenter::StartMeasureTimer() {
StopMeasureTimer();
measureDataReceived_ = false;
+ measureSessionActive_ = true;
pollElapsedMs_ = 0;
uapi_set_screen_on_api();
SetScreenAlwaysOnForEcg(true);
g_ecgMeasureTimer = nullptr;
}
measureDataReceived_ = false;
+ measureSessionActive_ = false;
pollElapsedMs_ = 0;
}
#ifdef SUPPORT_PPG_SERVICE
uint8_t ecgHr = 0;
uint8_t afibResult = PPG_ECG_AFIB_RESULT_INVALID;
- ppg_get_ecg_afib(&ecgHr, &afibResult);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[ECG] poll hr=%u afib=%u", ecgHr, afibResult);
+ uint8_t status = PPG_ECG_AFIB_STATUS_IDLE;
+ ppg_get_ecg_afib(&ecgHr, &afibResult, &status);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[ECG] poll hr=%u afib=%u status=%u", ecgHr,
+ afibResult, status);
ECGMeasuringView *view = ECGMeasuringView::GetInstance();
if (view != nullptr && ecgHr > 0) {
view->AppendHeartRatePoint(ecgHr);
}
- if (afibResult != PPG_ECG_AFIB_RESULT_INVALID) {
+ if (status == PPG_ECG_AFIB_STATUS_FAILED) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[ECG] measure failed (status=2)");
+ OnMeasureTimeout();
+ return false;
+ }
+
+ if (status == PPG_ECG_AFIB_STATUS_SUCCESS) {
ECGModel *model = ECGModel::GetInstance();
model->SetMeasureResult(ecgHr, afibResult);
model->SaveMeasureRecord(ecgHr, afibResult);
/** 测量定时器回调 */
void ECGMainPresenter::OnMeasureTimerTick() {
- if (measureDataReceived_) {
+ if (measureDataReceived_ || !measureSessionActive_) {
return;
}
FinishMeasuringFlow(mainView);
return;
}
+ if (!measureSessionActive_) {
+ return;
+ }
if (view->OnCountdownSecondTick()) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[ECG] measure timeout without afib result");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[ECG] measure timeout (60s)");
OnMeasureTimeout();
return;
}
group_->Add(chart_);
}
- InitUILabel(countdownLabel_, 183, 300, 100, 50, "ecg_measuring_countdown", "30s",
+ InitUILabel(countdownLabel_, 183, 300, 100, 50, "ecg_measuring_countdown", "60s",
DEFAULT_VECTOR_FONT_FILENAME, 40);
countdownLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);