#include "heartrate/include/HeartRateView.h"\r
#include "heartrate/include/HeartResultPresenter.h"\r
\r
+#include "ConfigModel.h"\r
#include "DialModelHeartRate.h"\r
#include "custom_runtime.h"\r
#include "custom_utils.h"\r
#include "health_service.h"\r
#include "ppg_service.h"\r
+#include "settings/include/SettingModel.h"\r
+#include "uiservice/include/ui_service.h"\r
+#include "wearable_log.h"\r
#include <algorithm>\r
+#include <bleEvent.h>\r
+#include <cmsis_os.h>\r
+#include <cmsis_os2.h>\r
+#include <custom_utils.h>\r
#include <iostream>\r
#include <memory>\r
+#include <ohos_types.h>\r
#include <random>\r
+#include <service/graphic_service.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <sys/stat.h>\r
+#include <unistd.h>\r
\r
#include "battery_hal.h"\r
#include "ui_service.h"\r
uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST;\r
send_ppg_cmd_msg(md);\r
heartstate = false;\r
+ if (checkstate == HeartCheck::CARDCHECK) {\r
+ //重置传感器状态\r
+ sensorstate = false;\r
+ }\r
// 复原检测状态\r
checkstate = HeartCheck::RESTSTSTE;\r
} else if (state == HeartState::Start && heartstate == false) {\r
sensorstate = true;\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始心率检测");\r
// 设置runtime\r
- uapi_dev_runtime_set_heartrate_detect_status(1);\r
+ if (uapi_dev_runtime_get_heartrate_detect_status() == 0) {\r
+ uapi_dev_runtime_set_heartrate_detect_status(1);\r
+ ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);\r
+ // 主动检测的亮屏60s\r
+ heart_start_screen60s_timer();\r
+ }\r
}\r
}\r
\r
return;\r
}\r
\r
+ // 恢复正常亮屏\r
+ HeartModel::GetInstance()->heart_stop_screen60s_timer();\r
+ // 取消常亮屏\r
+ ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);\r
+\r
//设置runtime\r
uapi_dev_runtime_set_heartrate_detect_status(0);\r
\r
- sensorstate = false;\r
Heart_Result(); // 处理结果\r
+\r
+ //为了防止主界面卡片一直重复开传感器\r
+ if (checkstate != HeartCheck::CARDCHECK) {\r
+ //重置传感器状态\r
+ sensorstate = false;\r
+ }\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "本次心率检测结束");\r
}\r
// 保存检测数据\r
check_string.c_str()); // 打印最终检测结果\r
return check_string;\r
}\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_LOGE(\r
+ WEARABLE_LOG_MODULE_APP,\r
+ "HeartModel::heart_start_screen60s_timer_callbackProc,time = %d",\r
+ SCREEN_60S_TIME);\r
+ SCREEN_60S_TIME -= 30;\r
+ WEARABLE_LOGE(\r
+ WEARABLE_LOG_MODULE_APP,\r
+ "HeartModel::heart_start_screen60s_timer_callbackProc,time = %d",\r
+ SCREEN_60S_TIME);\r
+ if (SCREEN_60S_TIME <= 0) {\r
+ // 60s后息屏停止定时\r
+ HeartModel::GetInstance()->heart_stop_screen60s_timer();\r
+ // 取消常亮屏\r
+ ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heart_stop_screen60s_timer");\r
+ }\r
+}\r
+static void heart_start_screen60s_timer_callback(int data) {\r
+ GraphicService::GetInstance()->PostGraphicEvent(\r
+ std::bind(heart_start_screen60s_timer_callbackProc, data));\r
+}\r
+void HeartModel::heart_start_screen60s_timer(uint32_t interval) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
+ "HeartModel::heart_start_screen60s_timer");\r
+ /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回\r
+ * ------------------------- */\r
+ if (g_screen60s_timer != nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer already exists!!");\r
+ return;\r
+ }\r
+ /* --------------------------------- 2.创建定时器\r
+ * -------------------------------- */\r
+ g_screen60s_timer =\r
+ osTimerNew((osTimerFunc_t)heart_start_screen60s_timer_callback,\r
+ osTimerPeriodic, nullptr, nullptr);\r
+ // 检查定时器创建是否成功\r
+ if (g_screen60s_timer == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer create failed!!");\r
+ return;\r
+ }\r
+ /* ----------------------------- 3.将毫秒转换为系统时钟节拍数\r
+ * ---------------------------- */\r
+ int tick = osMs2Tick(interval);\r
+ /* --------------------------------- 4.启动定时器\r
+ * -------------------------------- */\r
+ osStatus_t ret = osTimerStart(g_screen60s_timer, tick);\r
+ /* -------------------- 5.检查定时器启动是否成功,如果启动失败,删除定时器并置为\r
+ * nullptr -------------------- */\r
+ if (ret != osOK) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "osTimerDelete failed, ret = %lx!!",\r
+ ret);\r
+ if (g_screen60s_timer != nullptr) {\r
+ ret = osTimerDelete(g_screen60s_timer);\r
+ }\r
+ g_screen60s_timer = nullptr;\r
+ return;\r
+ }\r
+}\r
+void HeartModel::heart_stop_screen60s_timer(void) {\r
+ // 检查定时器是否存在\r
+ if (g_screen60s_timer != nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
+ "HeartModel::heart_stop_screen60s_timer");\r
+ osTimerStop(g_screen60s_timer);\r
+ // 删除定时器并置为 nullptr\r
+ osStatus_t ret = osTimerDelete(g_screen60s_timer);\r
+ if (ret != osOK) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
+ "osTimerDelete failed, ret = %lx!!", ret);\r
+ }\r
+ g_screen60s_timer = nullptr;\r
+ SCREEN_60S_TIME = 60;\r
+ }\r
+}\r
+void HeartModel::reset_heart_screen60s_timer_time() {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "reset_heart_screen60s_timer_time");\r
+ SCREEN_60S_TIME = 60;\r
+ if (nullptr == g_screen60s_timer) {\r
+ ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 重新常亮屏\r
+ heart_start_screen60s_timer(); // 开启定时器\r
+ }\r
+}\r
+\r
} // namespace OHOS\r