#include "custom_utils.h"\r
\r
#include "heart_blood/health_service/health_service.h"\r
+#include <cstdint>\r
\r
#ifdef SUPPORT_PPG_SERVICE\r
+#include "ppg_hal.h"\r
#include "ppg_service.h"\r
+\r
#endif\r
\r
#include "settings/include/SettingModel.h"\r
#include "languagecode/LanguageInit.h"\r
#include "ui_service.h"\r
\r
-\r
#include <custom_save_runtime.h>\r
\r
#ifdef __cplusplus\r
#define MIN_DISPLAY_HEART 50 //最新心率\r
#define DISPLAY_COUNT 0\r
#define HEARTTEST 1 //[0 开启测试 1 关闭]\r
+#define KEEP_SCREEN_ON_HEART 1\r
+#define HEART_TIMER_DATA 1\r
\r
/*佩戴检测结果*/\r
enum {\r
#ifdef SUPPORT_PPG_SERVICE\r
uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST;\r
errcode_t ret = send_ppg_cmd_msg(md);\r
- if(ret != ERRCODE_SUCC)\r
- {\r
- send_ppg_cmd_msg(md);\r
+ if (ret != ERRCODE_SUCC) {\r
+ send_ppg_cmd_msg(md);\r
}\r
#endif\r
heartstate = false;\r
uapi_save_runtime_log(RUNTIME_LOG_HEART_MEASURE);\r
}\r
}\r
-\r
}\r
// 开始检测\r
void HeartModel::Heart_Start(HeartCheck check) {\r
Heart_Control(HeartState::Start, check);\r
// ScreenTurnOn(60 * 1000); // 亮屏操作 600000ms 60秒关闭\r
sensorstate = true;\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "开始心率检测");\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始心率检测");\r
// 设置runtime\r
if (uapi_dev_runtime_get_heartrate_detect_status() == 0) {\r
uapi_dev_runtime_set_heartrate_detect_status(1);\r
// 主动检测的亮屏60s\r
heart_start_screen60s_timer();\r
}\r
+ heart_data_timer(); // 开始检测\r
}\r
}\r
\r
valid_counter_ = 0;\r
disvalid_counter_ = 0;\r
unwear_counter_ = 0;\r
- // display_counter_ = 0; 取消再次检测的--操作\r
- // displayheart = 0;\r
\r
- // ScreenTurnOff(); //恢复正常亮屏\r
+ heart_stop_data_timer(); //关闭数据获取\r
\r
/*主界面卡片检测 或者 被动检测*/\r
if (checkstate == HeartCheck::PASSIVITY) {\r
sensorstate = false;\r
uapi_dev_runtime_set_heartrate_detect_status(0);\r
}\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "本次心率检测结束");\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "本次心率检测结束");\r
}\r
}\r
// 保存检测数据\r
}\r
//进行日志打印与界面切换\r
void HeartModel::logAndChangeSlice(HeartResult result) {\r
- const char *resultMsg =\r
- (result == HeartResult::NOT_WORN)\r
- ? "未佩戴状态"\r
- : (result == HeartResult::TIMEOUT) ? "超时" : "无效数据";\r
+ const char *resultMsg = (result == HeartResult::NOT_WORN) ? "未佩戴状态"\r
+ : (result == HeartResult::TIMEOUT) ? "超时"\r
+ : "无效数据";\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果:%s情况", resultMsg);\r
uapi_set_screen_on_api(); // 亮屏\r
//需要先判断界面 心率卡片界面\r
return check_string; // Return the final string\r
}\r
\r
+#if KEEP_SCREEN_ON_HEART\r
+/////////////////////////////////////////亮屏定时器////////////////////////////////////////////\r
// 声明定时器变量\r
static osTimerId_t g_screen60s_timer = nullptr;\r
static uint16_t SCREEN_60S_TIME = 60;\r
-\r
static void heart_start_screen60s_timer_callbackProc(int data) {\r
WEARABLE_LOGD(\r
WEARABLE_LOG_MODULE_APP,\r
heart_start_screen60s_timer(); // 开启定时器\r
}\r
}\r
+#endif\r
+//////////////////////////////////////////////////////////////////////////////////\r
+#if HEART_TIMER_DATA\r
+// 声明定时器变量\r
+static osTimerId_t g_data_timer = nullptr;\r
\r
+static void heart_data_callbackProc(int data) {\r
+ //更新佩戴\r
+ uint8_t wear = 1;\r
+#ifdef SUPPORT_PPG_SERVICE\r
+ wear = ppg_get_wear_status(); \r
+ wear = 1;//暂时屏蔽\r
+ // printf("heart_data_callbackProc::wear = %d\n", wear);\r
+#endif\r
+ if (wear == 0) {\r
+ OHOS::HeartModel::GetInstance()->SetWearStatus();\r
+ }\r
+ //更新心率\r
+ uint8_t hrs = 0;\r
+#ifdef SUPPORT_PPG_SERVICE\r
+ hrs = ppg_get_hrs();\r
+ printf("heart_data_callbackProc::hrs = %d\n", hrs);\r
+#endif\r
+ OHOS::HeartModel::GetInstance()->UpHeartdata(hrs);\r
+}\r
+static void heart_data_timer_callback(int data) {\r
+ GraphicService::GetInstance()->PostGraphicEvent(\r
+ std::bind(heart_data_callbackProc, data));\r
+}\r
+void HeartModel::heart_data_timer(uint32_t interval) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,\r
+ "HeartModel::heart_start_screen60s_timer");\r
+ if (g_data_timer != nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Timer already exists!!");\r
+ return;\r
+ }\r
+ g_data_timer = osTimerNew((osTimerFunc_t)heart_data_timer_callback,\r
+ osTimerPeriodic, nullptr, nullptr);\r
+ if (g_data_timer == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer create failed!!");\r
+ return;\r
+ }\r
+ int tick = osMs2Tick(interval);\r
+ osStatus_t ret = osTimerStart(g_data_timer, tick);\r
+ if (ret != osOK) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "osTimerDelete failed, ret = %lx!!",\r
+ ret);\r
+ if (g_data_timer != nullptr) {\r
+ ret = osTimerDelete(g_data_timer);\r
+ }\r
+ g_data_timer = nullptr;\r
+ return;\r
+ }\r
+}\r
+void HeartModel::heart_stop_data_timer(void) {\r
+ // 检查定时器是否存在\r
+ if (g_data_timer != nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
+ "HeartModel::heart_stop_screen60s_timer");\r
+ osTimerStop(g_data_timer);\r
+ // 删除定时器并置为 nullptr\r
+ osStatus_t ret = osTimerDelete(g_data_timer);\r
+ if (ret != osOK) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
+ "osTimerDelete failed, ret = %lx!!", ret);\r
+ }\r
+ g_data_timer = nullptr;\r
+ }\r
+}\r
+#endif\r
} // namespace OHOS\r