#endif\r
\r
#define MAX_UNWEAR_COUNT 2\r
-#define MAX_VALID_HRS_COUNT 20\r
-#define MAX_DISVALID_HRS_COUNT 10\r
-#define MIN_DISPLAY_HEART 10\r
+#define MAX_VALID_HRS_COUNT 10 //最大有效数\r
+#define MAX_DISVALID_HRS_COUNT 10 //最大无效数\r
+#define MIN_DISPLAY_HEART 50 //最新心率\r
#define DISPLAY_COUNT 0\r
#define HEARTTEST 1 //[0 开启测试 1 关闭]\r
\r
displayheart = 0;\r
SetResult(HeartResult::NOT_TESTED); // 重置检测\r
Heart_Control(HeartState::Start, HeartCheck::INITIATIVE);\r
- ScreenTurnOn(60 * 1000); // 亮屏操作 600000ms 60秒关闭\r
+ // ScreenTurnOn(60 * 1000); // 亮屏操作 600000ms 60秒关闭\r
sensorstate = true;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始心率检测");\r
}\r
}\r
\r
valid_counter_ = 0;\r
disvalid_counter_ = 0;\r
unwear_counter_ = 0;\r
-\r
// display_counter_ = 0; 取消再次检测的--操作\r
// displayheart = 0;\r
\r
- ScreenTurnOff(); //恢复正常亮屏\r
+ // ScreenTurnOff(); //恢复正常亮屏\r
\r
/*主界面卡片检测 或者 被动检测*/\r
- if (checkstate == HeartCheck::PASSIVITY ||\r
- checkstate == HeartCheck::CARDCHECK) {\r
+ if (checkstate == HeartCheck::PASSIVITY) {\r
if (heartresult_ == HeartResult::SUCCESS) {\r
Heart_Save();\r
/*更新曲线*/\r
return;\r
}\r
\r
- if (sensorstate) {\r
- // Heart_Control(HeartState::End,HeartCheck::INITIATIVE);主动检测心率\r
- // 不需要关闭\r
- sensorstate = false;\r
- Heart_Result(); // 处理结果\r
- }\r
+ sensorstate = false;\r
+ Heart_Result(); // 处理结果\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "本次心率检测结束");\r
}\r
// 保存检测数据\r
void HeartModel::Heart_Save() {\r
data.timestamp);\r
}\r
\r
-// 显示检测结果// 显示检测结果\r
void HeartModel::Heart_Result() {\r
- // 心率提醒(0开 1关)\r
- uint8_t HeartRemindState = ConfigModel::GetInstance()->get_configData_int(\r
+ // 获取心率提醒状态和阈值\r
+ heartRemindState = ConfigModel::GetInstance()->get_configData_int(\r
ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_REMIND);\r
- uint16_t ThresholdValue = ConfigModel::GetInstance()->get_configData_int(\r
+ thresholdValue = ConfigModel::GetInstance()->get_configData_int(\r
ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_THRESHOLD_VALUE);\r
\r
- if (HeartRemindState) {\r
- // 检查当前心率是否高于或低于阈值\r
- uint16_t ThresholdState = ConfigModel::GetInstance()->get_configData_int(\r
+ if (heartRemindState) {\r
+ // 获取当前心率状态\r
+ thresholdState = ConfigModel::GetInstance()->get_configData_int(\r
ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_MAX_MIN);\r
\r
- if (ThresholdState == 0 && currentheart < ThresholdValue &&\r
- currentheart != 0) {\r
- // 当前心率低于阈值\r
- heartresult_ = HeartResult::LOW_RESULT;\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
- "检测结果:低结果情况,currentheart=%d,ThresholdValue=%d",\r
- currentheart, ThresholdValue);\r
- } else if (ThresholdState == 1 && currentheart > ThresholdValue) {\r
- // 当前心率高于阈值\r
- heartresult_ = HeartResult::HIGH_RESULT;\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
- "检测结果:高结果情况,currentheart=%d,ThresholdValue=%d",\r
- currentheart, ThresholdValue);\r
+ if (currentheart != 0) {\r
+ if (thresholdState == 0 && currentheart < thresholdValue) {\r
+ // 当前心率低于阈值\r
+ heartresult_ = HeartResult::LOW_RESULT;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
+ "检测结果:低结果情况,currentheart=%d,ThresholdValue=%d",\r
+ currentheart, thresholdValue);\r
+ } else if (thresholdState == 1 && currentheart > thresholdValue) {\r
+ // 当前心率高于阈值\r
+ heartresult_ = HeartResult::HIGH_RESULT;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
+ "检测结果:高结果情况,currentheart=%d,ThresholdValue=%d",\r
+ currentheart, thresholdValue);\r
+ }\r
}\r
}\r
\r
// 根据结果进行处理\r
+ handleHeartResult();\r
+}\r
+// 处理检测结果\r
+void HeartModel::handleHeartResult() {\r
switch (heartresult_) {\r
case HeartResult::SUCCESS:\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:成功");\r
Heart_Save();\r
- /*更新曲线*/\r
+ // 更新曲线\r
GraphicService::GetInstance()->PostGraphicEvent(\r
std::bind(&HeartModel::Heart_Update_View, HeartModel::GetInstance()));\r
break;\r
\r
- case HeartResult::NOT_WORN: // 未佩戴状态\r
- case HeartResult::TIMEOUT: // 超时情况\r
- case HeartResult::INVALID_DATA: // 无效数据情况\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:%s情况",\r
- heartresult_ == HeartResult::NOT_WORN\r
- ? "未佩戴状态"\r
- : heartresult_ == HeartResult::TIMEOUT ? "超时"\r
- : "无效数据");\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL);\r
+ case HeartResult::NOT_WORN:\r
+ case HeartResult::TIMEOUT:\r
+ case HeartResult::INVALID_DATA:\r
+ logAndChangeSlice(heartresult_);\r
break;\r
\r
case HeartResult::LOW_RESULT:\r
- // 低心率结果处理\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:低结果情况");\r
- HealthState lowHealthState;\r
- lowHealthState.checkType = BLOOD_CHECK;\r
- lowHealthState.resultStatus = LOW;\r
- lowHealthState.checkResult = ThresholdValue;\r
- HealthService::GetInstance()->SetHealthCurrent(lowHealthState);\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID);\r
+ handleLowHeartRate();\r
break;\r
\r
case HeartResult::HIGH_RESULT:\r
- // 高心率结果处理\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:高结果情况");\r
- HealthState highHealthState;\r
- highHealthState.checkType = BLOOD_CHECK;\r
- highHealthState.resultStatus = HIGH;\r
- highHealthState.checkResult = ThresholdValue;\r
- HealthService::GetInstance()->SetHealthCurrent(highHealthState);\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID);\r
+ handleHighHeartRate();\r
break;\r
\r
default:\r
break;\r
}\r
}\r
+//进行日志打印与界面切换\r
+void HeartModel::logAndChangeSlice(HeartResult result) {\r
+ const char *resultMsg =\r
+ (result == HeartResult::NOT_WORN)\r
+ ? "未佩戴状态"\r
+ : (result == HeartResult::TIMEOUT) ? "超时" : "无效数据";\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:%s情况", resultMsg);\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL);\r
+}\r
+// 处理低心率情况\r
+void HeartModel::handleLowHeartRate() {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:低结果情况");\r
+ HealthState lowHealthState = {BLOOD_CHECK, LOW, thresholdValue};\r
+ HealthService::GetInstance()->SetHealthCurrent(lowHealthState);\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID);\r
+}\r
+// 处理高心率情况\r
+void HeartModel::handleHighHeartRate() {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:高结果情况");\r
+ HealthState highHealthState = {BLOOD_CHECK, HIGH, thresholdValue};\r
+ HealthService::GetInstance()->SetHealthCurrent(highHealthState);\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID);\r
+}\r
+// 设置佩戴状态\r
void HeartModel::SetWearStatus() {\r
// 如果处于训练模式,提前返回\r
if (uapi_dev_runtime_get_train_status() == 1)\r