void ECGMainPresenter::OnResume(void) {
RootView::GetInstance()->SetOnKeyActListener(this);
- ECGMainView *mainView = ECGMainView::GetInstance();
- if (mainView != nullptr && mainView->GetCurrentViewId() == ECG_MEASURING_VIEW &&
- !measureDataReceived_) {
+ if (measureSessionActive_) {
SetScreenAlwaysOnForEcg(true);
}
}
}
}
-void ECGMainPresenter::OnBottomButtonPressed(ECGMainView *mainView) {
- if (!IsWaitingContact(mainView)) {
- return;
- }
- ShowContactGood(mainView);
-}
-
void ECGMainPresenter::NavigateBack() {
StopMeasureTimer();
NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
return true;
}
int16_t current = mainView->GetCurrentViewId();
- if (current == ECG_MEASURING_VIEW) {
+ if (measureSessionActive_ &&
+ (current == ECG_MEASURING_VIEW || current == ECG_INSTRUCTION_VIEW)) {
StopMeasureTimer();
}
if (current == ECG_ENTRY_VIEW) {
}
void ECGMainPresenter::StartMeasureTimer() {
- StopMeasureTimer();
+ if (measureSessionActive_) {
+ uapi_set_screen_on_api();
+ SetScreenAlwaysOnForEcg(true);
+ return;
+ }
measureDataReceived_ = false;
measureSessionActive_ = true;
pollElapsedMs_ = 0;
}
}
+void ECGMainPresenter::OnEnterMeasuringView() {
+ pollElapsedMs_ = 0;
+}
+
void ECGMainPresenter::StopMeasureTimer() {
SetScreenAlwaysOnForEcg(false);
StopPpgAfibSession();
view->AppendHeartRatePoint(ecgHr);
}
- // if (status == PPG_ECG_AFIB_STATUS_MEASURING && touchFlag == 0) {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[ECG] touch lost during measure");
- // OnMeasureTimeout();
- // return false;
- // }
+ if (status == PPG_ECG_AFIB_STATUS_MEASURING && touchFlag == 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[ECG] touch lost during measure");
+ OnMeasureTimeout();
+ return false;
+ }
if (status == PPG_ECG_AFIB_STATUS_FAILED) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[ECG] measure failed (status=2)");
return false;
}
+void ECGMainPresenter::PollTouchDuringWait() {
+#ifdef SUPPORT_PPG_SERVICE
+ uint8_t ecgHr = 0;
+ uint8_t afibResult = PPG_ECG_AFIB_RESULT_INVALID;
+ uint8_t status = PPG_ECG_AFIB_STATUS_IDLE;
+ uint8_t touchFlag = 0;
+ ppg_get_ecg_afib(&ecgHr, &afibResult, &status, &touchFlag);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[ECG] wait contact touch=%u status=%u", touchFlag, status);
+ if (touchFlag == 1) {
+ ECGMainView *mainView = ECGMainView::GetInstance();
+ if (mainView != nullptr && IsWaitingContact(mainView)) {
+ ShowContactGood(mainView);
+ }
+ }
+#else
+ (void)0;
+#endif
+}
+
/** 测量超时 */
void ECGMainPresenter::OnMeasureTimeout() {
StopMeasureTimer();
}
ECGMainView *mainView = ECGMainView::GetInstance();
+ if (mainView == nullptr) {
+ return;
+ }
+
+ if (mainView->GetCurrentViewId() == ECG_INSTRUCTION_VIEW &&
+ mainView->GetInstructionSubType() == ECG_INSTRUCTION_TYPE_WAIT_CONTACT) {
+ PollTouchDuringWait();
+ return;
+ }
+
ECGMeasuringView *view = ECGMeasuringView::GetInstance();
- if (mainView == nullptr || view == nullptr ||
- mainView->GetCurrentViewId() != ECG_MEASURING_VIEW) {
+ if (view == nullptr || mainView->GetCurrentViewId() != ECG_MEASURING_VIEW) {
return;
}
void ECGMainPresenter::StartMeasureFlow(ECGMainView *mainView) {
ShowWaitContact(mainView);
+ StartMeasureTimer();
}
void ECGMainPresenter::FinishMeasuringFlow(ECGMainView *mainView) {
return true;
}
if (viewId == ECG_CLICK_INSTRUCTION_BACK) {
+ if (measureSessionActive_) {
+ StopMeasureTimer();
+ StopContactGoodTimer();
+ }
mainView->ChangeView(ECG_INSTRUCTION_VIEW, ECG_ENTRY_VIEW);
return true;
}
return true;
}
if (viewId == ECG_CLICK_EXIT) {
- if (current == ECG_MEASURING_VIEW) {
+ if (measureSessionActive_ &&
+ (current == ECG_MEASURING_VIEW || current == ECG_INSTRUCTION_VIEW)) {
StopMeasureTimer();
+ StopContactGoodTimer();
}
mainView->ChangeView(current, ECG_ENTRY_VIEW);
return true;
unsigned short keyState = event.GetState();
ECGMainView *mainView = ECGMainView::GetInstance();
- if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 &&
- mainView != nullptr && mainView->GetCurrentViewId() == ECG_INSTRUCTION_VIEW) {
- OnBottomButtonPressed(mainView);
- return true;
- }
if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 &&
uapi_get_screen_state() == 0) {
HandleSwipeBack();