End = 0,\r
Start,\r
};\r
+ enum class HeartCheck\r
+ {\r
+ RESTSTSTE = 0, // 未检测状态\r
+ PASSIVITY, // 被动检测心率\r
+ INITIATIVE, // 主动检测心率\r
+ EXERCISE, // 运动心率\r
+ };\r
+ // 控制心率检测\r
typedef struct\r
{\r
uint32_t heartRatePerSec;\r
void SetCheckTime(uint64_t time); // 设置本次测试完的时间\r
uint16_t GetIndex(); // 测试点位\r
void SetIndex(uint16_t index);\r
- void Heart_Control(HeartState state);\r
+ void Heart_Control(HeartState state, HeartCheck check);\r
\r
private:\r
HealthAllDatas healthDatas;\r
uint8_t valid_counter_ = 0; // 有效数计数器\r
uint8_t disvalid_counter_ = 0; // 无效数计数器\r
uint8_t unwear_counter_ = 0; // 佩戴错误计数器\r
+\r
+ HeartCheck checkstate = HeartCheck::RESTSTSTE; // 目前检测状态\r
};\r
}\r
\r
/* ---------------------------------- 状态检测 ---------------------------------- */\r
\r
// 控制心率检测\r
- void HeartModel::Heart_Control(HeartState state)\r
+ void HeartModel::Heart_Control(HeartState state, HeartCheck check)\r
{\r
+ if (check < checkstate)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Higher execution instruction exists");\r
+ return;\r
+ }\r
if (state == HeartState::End && heartstate == true)\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartState End");\r
uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST;\r
send_ppg_cmd_msg(md);\r
heartstate = false;\r
+ // 复原检测状态\r
+ checkstate = HeartCheck::RESTSTSTE;\r
}\r
else if (state == HeartState::Start && heartstate == false)\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " Save %d %d", data->Heart, data->timestamp);\r
SetCheckTime(data->timestamp);\r
HealthService::GetInstance()->UpdateHealthData(*data);\r
- // 更新卡片心率值\r
- // SetHeartRatePerSec(heart);\r
+ // 关闭自动检测心率 如果有其他高级心率检测在进行,则不会进行关闭[低优先级]\r
+ HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::PASSIVITY);\r
}\r
#endif\r
}\r
if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)
{
// 关闭心率检测
- HeartModel::GetInstance()->Heart_Control(HeartState::End);
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE);
// 回退
NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_ZOOM);
}
HeartCheckView::GetInstance()->GetImageAnimator()->Stop();
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus false");
// 关闭心率检测
- HeartModel::GetInstance()->Heart_Control(HeartState::End);
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE);
startheart = true;
}
}
if (startheart == true)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus true");
- // 开启心率检测
- HeartModel::GetInstance()->Heart_Control(HeartState::Start);
+ // 开启心率检测 [UI优先级最高直接打断正在检测 重新检测]
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE);
+ HeartModel::GetInstance()->Heart_Control(HeartState::Start,HeartCheck::INITIATIVE);
startheart = false;
}
}
if (previousCardId == HEART_RATE && cardId != HEART_RATE)
{
// 从心率卡片变为其他卡片时调用关闭心率检测的函数
- HeartModel::GetInstance()->Heart_Control(HeartState::End);
+ HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE);
}
// 更新上一个卡片的值
switch (cardId)
{
case HEART_RATE:
- // 开启心率检测
- HeartModel::GetInstance()->Heart_Control(HeartState::Start);
+ // 开启心率检测 [UI优先级最高直接打断正在检测 重新检测]
+ HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE);
+ HeartModel::GetInstance()->Heart_Control(HeartState::Start, HeartCheck::INITIATIVE);
break;
case COMPASS:
{
Time = 5;
START_FLAG = false;
- HeartModel::GetInstance()->Heart_Control(HeartState::End); // 关闭心率检测
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); // 关闭心率检测
}
/* -------------------------------------------------------------------------- */
/*定时器到期时的处理*/
RespiratoryTrainingModel::GetInstance().RT_StopTimer(); // 停止定时器
RespiratoryTrainingModel::GetInstance().AddRespiratoryTrainingTimes(); // 呼吸训练次数加1
p_RespiratoryTrainingView->GetRespiratoryTrainingAnimator_()->Stop(); // 关闭呼吸动画
- HeartModel::GetInstance()->Heart_Control(HeartState::End); // 关闭心率检测
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); // 关闭心率检测
p_RespiratoryTrainingView->ChangeView(RESPIRATORYTRAINING, RESPIRATORYTRAININGCOMPLETED);
}
else
Time = ONE_MINUTE;
p_RespiratoryTrainingView->StartRespiratoryTraining(); // 开始呼吸训练
START_FLAG = true;
- HeartModel::GetInstance()->Heart_Control(HeartState::Start); // 开启心率检测
+ HeartModel::GetInstance()->Heart_Control(HeartState::Start,HeartCheck::INITIATIVE); // 开启心率检测
}
}