{
uint16_t MiniBlood = ConfigModel::GetInstance()->get_configData_int(ConfigModel::CONFIGMODEL_ITEM_OXYGEN_THRESHOLD_VALUE);
- // 检查当前血氧值并设置结果
- if (currentspo2 < MiniBlood && currentspo2 != 0)
- {
- // 测量结果小于最小血氧值
- bloodresult_ = BloodResult::LOW_RESULT;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 低结果情况, currentspo2 = %d, MiniBlood = %d", currentspo2, MiniBlood);
+ // 检查当前血氧值并设置结果 需要检测成功
+ if(bloodresult_ == BloodResult::SUCCESS){
+ if (currentspo2 < MiniBlood && currentspo2 != 0)
+ {
+ // 测量结果小于最小血氧值
+ bloodresult_ = BloodResult::LOW_RESULT;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 低结果情况, currentspo2 = %d, MiniBlood = %d", currentspo2, MiniBlood);
+ }
}
// 根据结果进行处理
healthState.resultStatus = LOW;
healthState.checkResult = MiniBlood;
HealthService::GetInstance()->SetHealthCurrent(healthState);
+ //保存异常数据
+ Blood_Save();
NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID);
break;
}
#include "uiservice/include/ui_service.h"\r
#include "wearable_log.h"\r
#include <algorithm>\r
+\r
#include <bleEvent.h>\r
#include <cmsis_os.h>\r
#include <cmsis_os2.h>\r
#include "languagecode/LanguageInit.h"\r
#include "ui_service.h"\r
\r
+#include "hx3695.h"\r
+\r
#ifdef __cplusplus\r
extern "C" {\r
#endif\r
Heart_Control(HeartState::End, HeartCheck::PASSIVITY);\r
return;\r
}\r
+ //呼吸训练模式下不进行息屏与保存\r
if (sensorstate && uapi_dev_runtime_get_respiratory_training_status() != 1) {\r
// 恢复正常亮屏\r
HeartModel::GetInstance()->heart_stop_screen60s_timer();\r
}\r
\r
void HeartModel::Heart_Result() {\r
- // 获取心率提醒状态和阈值\r
- heartRemindState = ConfigModel::GetInstance()->get_configData_int(\r
- ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_REMIND);\r
- thresholdValue = ConfigModel::GetInstance()->get_configData_int(\r
- ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_THRESHOLD_VALUE);\r
-\r
- if (heartRemindState) {\r
- // 获取当前心率状态\r
- thresholdState = ConfigModel::GetInstance()->get_configData_int(\r
- ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_MAX_MIN);\r
-\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
+ if (heartresult_ == HeartResult::SUCCESS) {\r
+ // 获取心率提醒状态和阈值\r
+ heartRemindState = ConfigModel::GetInstance()->get_configData_int(\r
+ ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_REMIND);\r
+ thresholdValue = ConfigModel::GetInstance()->get_configData_int(\r
+ ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_THRESHOLD_VALUE);\r
+\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "心率提醒状态:%d,阈值:%d,當前值:%d",\r
+ heartRemindState, thresholdValue, currentheart);\r
+\r
+ if (heartRemindState) {\r
+ // 获取当前心率状态\r
+ thresholdState = ConfigModel::GetInstance()->get_configData_int(\r
+ ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_MAX_MIN);\r
+\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
// 根据结果进行处理\r
handleHeartResult();\r
}\r
break;\r
\r
case HeartResult::LOW_RESULT:\r
+ Heart_Save();\r
handleLowHeartRate();\r
break;\r
\r
case HeartResult::HIGH_RESULT:\r
+ Heart_Save();\r
handleHighHeartRate();\r
break;\r
\r
int get_sedentary_interval_from_config_model(void);
bool get_motion_recognition_from_config_model(void);
int get_config_heart_from_config_model(void);
-//设置睡眠频率
+
+/* ---------------------------------- 健康管理 ---------------------------------- */
+//设置心率周期检测频率
void set_config_heart(int heartRateDetectionFreq);
+//設置心率最高值
+void set_config_heart_max(int heartRateMax);
+//設置心率最低值
+void set_config_heart_min(int heartRateMin);
+//設置血氧最低值
+void set_config_spo2_min(int spo2Min);
+/* -------------------------------------------------------------------------- */
// sleep mode switch
void mmi_sleep_mode_switch_read(void);
wake_up_time = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_GET_UP);
return wake_up_time;
}
-
+// 设置心率检测频率
void set_config_heart(int heartRateDetectionFreq)
{
- // 设置心率检测频率
OHOS::ConfigModel::GetInstance()->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_DETECTED, heartRateDetectionFreq);
}
time = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_DETECTED);
return time;
}
-
+//设置最大心率
+void set_config_heart_max(int heartRateMax) {
+ OHOS::ConfigModel::GetInstance()->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_REMIND, 1);
+ OHOS::ConfigModel::GetInstance()->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_MAX_MIN, 1);
+ OHOS::ConfigModel::GetInstance()->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_THRESHOLD_VALUE, heartRateMax);
+}
+//设置最小心率
+void set_config_heart_min(int heartRateMin) {
+ OHOS::ConfigModel::GetInstance()->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_REMIND, 1);
+ OHOS::ConfigModel::GetInstance()->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_MAX_MIN, 0);
+ OHOS::ConfigModel::GetInstance()->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_THRESHOLD_VALUE, heartRateMin);
+}
+//设置最小血氧
+void set_config_spo2_min(int spo2Min) {
+ OHOS::ConfigModel::GetInstance()->set_condigData_Int(
+ OHOS::ConfigModel::CONFIGMODEL_ITEM_OXYGEN_THRESHOLD_VALUE, spo2Min);
+}
//获取久坐提醒开关
int get_sedentary_switch_from_config_model(void)
{
wstp_print("Restoring Factory Settings...\n");
return ERRCODE_SUCC;
}
-
-#if 1
- /*设置心率检测频率*/
- static uint32_t custom_set_heart(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
- {
- UNUSED(strCommonCmd);
+ static uint32_t custom_set_health(uint8_t *para, uint32_t paraLen, char *strCommonCmd) {
+ UNUSED(strCommonCmd);
uint8_t argv[CUSTOM_UTILS_MAX_ARGC][CUSTOM_UTILS_MAX_ARGV_LEN] = {0};
uint32_t argc = 0;
- int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
- if (ret != CUSTOM_UTILS_SUCCESS)
- {
- wstp_print("CUSTOM_UTILSTEST ATCMD Convert Command Failed\n");
- return ERRCODE_FAIL;
- }
-
- if (argc != 1)
- {
- wstp_print("CUSTOM_UTILSTEST power_test ATCMD Set Parameter Failed argc %d\r\n");
- return ERRCODE_FAIL;
- }
- int heartRateDetectionFreq = atol((char *)argv[0]);
-
- // 设置心率检测频率
- set_config_heart(heartRateDetectionFreq);
-
- wstp_print("heartRateDetectionFreq is %d\n", heartRateDetectionFreq);
- return ERRCODE_SUCC;
+ wstp_print("開始設置健康數據\n");
+
+ int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+ if (ret != CUSTOM_UTILS_SUCCESS) {
+ wstp_print("CUSTOM_UTILSTEST ATCMD 转换命令失败\n");
+ return ERRCODE_FAIL;
+ }
+
+ int set_health_type = atol((char *)argv[0]);
+ int data = atol((char *)argv[1]);
+ wstp_print("設置健康數據 %d %d\n", set_health_type, data);
+
+ switch (set_health_type) {
+ case 0: // 心率检测周期
+ set_config_heart(data);
+ break;
+ case 1: // 心率最高值
+ set_config_heart_max(data);
+ break;
+ case 2: // 心率最低值
+ set_config_heart_min(data);
+ break;
+ case 3: // 血氧最低值
+ set_config_spo2_min(data);
+ break;
+ default:
+ wstp_print("错误:无效的健康类型 %d\n", set_health_type);
+ return ERRCODE_FAIL;
+ }
+
+ return ERRCODE_SUCC; // 成功
}
-#endif
static uint32_t custom_get_cywee_chip_info(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
{
{ (char *)"AT^MEMDEBUG", custom_mem_debug, (char *)" " },
{(char *)"AT^RESTORE", custom_restore_factory_settings, (char *)" "},
- {(char *)"AT^SETHEART", custom_set_heart, (char *)" "},
+ {(char *)"AT^SETHEALTH", custom_set_health, (char *)" "},
+
+
{(char *)"AT^LSFD", custom_lsfd, (char *)" "},
{(char *)"AT^GETMAC", custom_get_bt_addr, (char *)" "},