3、低血压:收缩压<90 mmHg 且 舒张压<60 mmHg。
----------------------------
*/
-namespace OHOS {
+namespace OHOS
+{
- /**
- * @brief Constructor for the BPModel class.
- */
+ /**
+ * @brief Constructor for the BPModel class.
+ */
#define MAX_UNWARE_COUNT 10
#define MAX_VALID_SPO2_COUNT 30
#define MAX_DISVALID_SPO2_COUNT 100
-static uint16 CalibrationFlag = 0;
-
-// 声明定时器变量
-static osTimerId_t g_timer = nullptr;
-static int Time = 30;
-
-BPModel::BPModel() {}
-BPModel::~BPModel() {}
-BPModel *BPModel::GetInstance(void) {
- static BPModel instance;
- return &instance;
-}
-int16_t BPModel::GetCalibrationFlag() { return CalibrationFlag; }
-
-// 获取当前时间戳字符串
-std::string BPModel::GetCurrentTimeStr() {
- uint32_t timeStamp = 0;
-
- if (uapi_get_timestampe_ss(&timeStamp) != ERRCODE_SUCC) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp");
- return "----/--/-- \n --/--";
+ static uint16 CalibrationFlag = 0;
+
+ // 声明定时器变量
+ static osTimerId_t g_timer = nullptr;
+ static int Time = 30;
+
+ BPModel::BPModel() {}
+ BPModel::~BPModel() {}
+ BPModel *BPModel::GetInstance(void)
+ {
+ static BPModel instance;
+ return &instance;
}
- int16_t BPModel::GetCalibrationFlag()
- {
-
- return CalibrationFlag;
- }
++ int16_t BPModel::GetCalibrationFlag() { return CalibrationFlag; }
- // 将时间戳转换为 time_t 类型
- time_t rawtime = static_cast<time_t>(timeStamp);
- struct tm *timeinfo = localtime(&rawtime);
+ // 获取当前时间戳字符串
+ std::string BPModel::GetCurrentTimeStr()
+ {
+ uint32_t timeStamp = 0;
- if (timeinfo == NULL) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to convert time");
- return "----/--/-- \n --/--";
- }
+ if (uapi_get_timestampe_ss(&timeStamp) != ERRCODE_SUCC)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp");
+ return "----/--/-- \n --/--";
+ }
- // 格式化时间为字符串
- char buffer[20]; // 格式: YYYY-MM-DD HH:MM
- std::strftime(buffer, sizeof(buffer), "%Y-%m-%d \n %H:%M", timeinfo);
+ // 将时间戳转换为 time_t 类型
+ time_t rawtime = static_cast<time_t>(timeStamp);
+ struct tm *timeinfo = localtime(&rawtime);
- return std::string(buffer);
-}
+ if (timeinfo == NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to convert time");
+ return "----/--/-- \n --/--";
+ }
-// 管理当前状态
-void BPModel::BP_SetState(BPState state) { current_state = state; }
-BPState BPModel::GetCurrentState() { return current_state; }
+ // 格式化时间为字符串
+ char buffer[20]; // 格式: YYYY-MM-DD HH:MM
+ std::strftime(buffer, sizeof(buffer), "%Y-%m-%d \n %H:%M", timeinfo);
-// 进行传感器、定时器等控制
-void BPModel::BP_Control(BPState state) {
- if (state == current_state) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
- "BP_Control: Already in current state");
- return;
- }
- switch (state) {
- case BPState::BP_NORMAL: {
- /*
- 关闭定时器
- 关闭传感器
- 关闭常亮
- */
- BP_StopTimer();
- ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
- Time = BP_CHECK_TIME_MAX;
- break;
- }
- case BPState::BP_CALIBRATING_FIRSTTIME:
- case BPState::BP_CALIBRATING_SECONDTIME:
- case BPState::BP_DETECTING: {
- /*
- 开启定时器
- 开启传感器
- 开启常亮
- */
- BP_StartTimer();
- ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
-
- if (Time != BP_CHECK_TIME_MAX)
- Time = BP_CHECK_TIME_MAX; // 重置时间
-
- break;
+ return std::string(buffer);
}
- case BPState::BP_CALIBRATING_ANGLYSIS: {
- BP_StartTimer();
- ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
- if (Time != BP_ANLYSISI_TIME_MAX)
- Time = BP_ANLYSISI_TIME_MAX; // 重置时间
- break;
- }
+ // 管理当前状态
+ void BPModel::BP_SetState(BPState state) { current_state = state; }
+ BPState BPModel::GetCurrentState() { return current_state; }
- default:
- /*未知状态,全部状态重置*/
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BP_Control: Invalid state");
- BP_SetState(BPState::BP_NORMAL);
- BP_StopTimer();
- Time = BP_CHECK_TIME_MAX;
- return;
- }
- // 更新状态
- BP_SetState(state);
-}
-/////////////////////////////////////////////////////////
-// 机器校准收缩压与舒张压的数值
-void BPModel::BP_SetValue(BP_VALUE_TYPE type, bool set_value) {
- if (set_value) {
- if (type == BP_VALUE_TYPE::SBP) {
- if (custom_sbp < 250)
- custom_sbp++;
- } else if (type == BP_VALUE_TYPE::DBP) {
- if (custom_dbp < 150)
- custom_dbp++;
- }
- } else {
- if (type == BP_VALUE_TYPE::SBP) {
- if (custom_sbp > 50)
- custom_sbp--;
- } else if (type == BP_VALUE_TYPE::DBP) {
- if (custom_dbp > 30)
- custom_dbp--;
+ // 进行传感器、定时器等控制
+ void BPModel::BP_Control(BPState state)
+ {
+ if (state == current_state)
+ {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BP_Control: Already in current state");
++ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
++ "BP_Control: Already in current state");
+ return;
}
- }
-}
-int16_t BPModel::GetValue(BP_VALUE_TYPE type) {
- if (type == BP_VALUE_TYPE::SBP)
- return custom_sbp;
- else
- return custom_dbp;
-}
-///////////////////////////////////////////////////////////////////////////////////////
-
-/*定时器到期时的处理*/
-static void BP_TimerCallbackProc(int data) {
-
- // 倒计时
- Time--;
- // 提前检查无效时间
- if (Time < 0) {
- BPModel::GetInstance()->BP_StopTimer();
- BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL);
- if (BPMainView::GetInstance() && CalibrationFlag == 0) // 第一次校准完
+ switch (state)
{
- BPMainView::GetInstance()->ChangeView(BPUNDERCALIBRATIONVIEW,
- BPCALIBRATIONMINDVIEW);
- CalibrationFlag++;
- } else if (BPMainView::GetInstance() &&
- (CalibrationFlag == 1 || CalibrationFlag == 3)) // 分析完
+ case BPState::BP_NORMAL:
{
- // 校准成功
- BPMainView::GetInstance()->ChangeView(BPRESULTANALYSISVIEW,
- BPCALIBRATIONPASSVIEW);
- // 校准失败
-
- if (CalibrationFlag == 1)
- CalibrationFlag++;
- else
- CalibrationFlag = 0;
- } else if (BPMainView::GetInstance() &&
- CalibrationFlag == 2) // 第二次校准完
+ /*
+ 关闭定时器
+ 关闭传感器
+ 关闭常亮
+ */
+ BP_StopTimer();
+ ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
+ Time = BP_CHECK_TIME_MAX;
+ break;
+ }
+ case BPState::BP_CALIBRATING_FIRSTTIME:
+ case BPState::BP_CALIBRATING_SECONDTIME:
+ case BPState::BP_DETECTING:
{
- BPMainView::GetInstance()->ChangeView(BPSECUNDERCALIBRATIONVIEW,
- BPCALIBRATIONMINDVIEW);
- CalibrationFlag++;
- } else if (BPDetectionView::GetInstance()) {
- // 测试成功 -> 进入结果界面
- BPDetectionView::GetInstance()->ChangeView(CALIBRATION_BPVIEW,
- RESULT_BPVIEW);
- // 测试失败 -> 进入错误界面
- // BPDetectionView::GetInstance()->ChangeView(CALIBRATION_BPVIEW,
- // ERROR_BPVIEW);
+ /*
+ 开启定时器
+ 开启传感器
+ 开启常亮
+ */
+ BP_StartTimer();
+ ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
+
+ if (Time != BP_CHECK_TIME_MAX)
+ Time = BP_CHECK_TIME_MAX; // 重置时间
+
+ break;
}
- return;
- }
+ case BPState::BP_CALIBRATING_ANGLYSIS:
+ {
+ BP_StartTimer();
+ ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
- BPState current_state_time = BPModel::GetInstance()->GetCurrentState();
- // 根据状态处理
- switch (current_state_time) {
- case BPState::BP_NORMAL:
- BPModel::GetInstance()->BP_StopTimer();
- BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL);
- return;
-
- case BPState::BP_DETECTING: {
- BPDetectBeginView *view = BPDetectBeginView::GetInstance();
- if (view) {
- view->UpdateTimeText(Time);
+ if (Time != BP_ANLYSISI_TIME_MAX)
+ Time = BP_ANLYSISI_TIME_MAX; // 重置时间
+ break;
}
- break;
- }
- case BPState::BP_CALIBRATING_FIRSTTIME: {
- BPUnderCalibrationView *view = BPUnderCalibrationView::GetInstance();
- if (view) {
- view->UpdateTimeText(Time);
+ default:
+ /*未知状态,全部状态重置*/
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BP_Control: Invalid state");
+ BP_SetState(BPState::BP_NORMAL);
+ BP_StopTimer();
+ Time = BP_CHECK_TIME_MAX;
+ return;
}
- break;
+ // 更新状态
+ BP_SetState(state);
}
- case BPState::BP_CALIBRATING_SECONDTIME: {
- BPSecUnderCalibrationView *view = BPSecUnderCalibrationView::GetInstance();
- if (view) {
- view->UpdateTimeText(Time);
+ /////////////////////////////////////////////////////////
+ // 机器校准收缩压与舒张压的数值
+ void BPModel::BP_SetValue(BP_VALUE_TYPE type, bool set_value)
+ {
+ if (set_value)
+ {
+ if (type == BP_VALUE_TYPE::SBP)
++ {
+ if (custom_sbp < 250)
+ custom_sbp++;
- else if (custom_dbp < 150)
++ }
++ else if (type == BP_VALUE_TYPE::DBP)
++ {
++ if (custom_dbp < 150)
+ custom_dbp++;
++ }
+ }
+ else
+ {
+ if (type == BP_VALUE_TYPE::SBP)
++ {
+ if (custom_sbp > 50)
+ custom_sbp--;
- else if (custom_dbp > 30)
++ }
++ else if (type == BP_VALUE_TYPE::DBP)
++ {
++ if (custom_dbp > 30)
+ custom_dbp--;
++ }
}
- break;
}
- case BPState::BP_CALIBRATING_ANGLYSIS: {
- break;
+ int16_t BPModel::GetValue(BP_VALUE_TYPE type)
+ {
+ if (type == BP_VALUE_TYPE::SBP)
+ return custom_sbp;
+ else
+ return custom_dbp;
}
+ ///////////////////////////////////////////////////////////////////////////////////////
- default:
- BPModel::GetInstance()->BP_StopTimer();
- // 显示错误界面提示
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "current_state is error!!");
- return;
- }
-}
+ /*定时器到期时的处理*/
+ static void BP_TimerCallbackProc(int data)
+ {
-/*
- * @brief 回调函数
- */
-static void BP_TimerCallback(int data) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BP_TimerCallback %d", data);
- GraphicService::GetInstance()->PostGraphicEvent(
- std::bind(BP_TimerCallbackProc, data));
-}
+ // 倒计时
+ Time--;
+ // 提前检查无效时间
- if (Time <= 0)
++ if (Time < 0)
+ {
+ BPModel::GetInstance()->BP_StopTimer();
+ BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL);
+ if (BPMainView::GetInstance() && CalibrationFlag == 0) // 第一次校准完
+ {
+ BPMainView::GetInstance()->ChangeView(BPUNDERCALIBRATIONVIEW, BPCALIBRATIONMINDVIEW);
+ CalibrationFlag++;
+ }
+ else if (BPMainView::GetInstance() && (CalibrationFlag == 1 || CalibrationFlag == 3)) // 分析完
+ {
+ // 校准成功
+ BPMainView::GetInstance()->ChangeView(BPRESULTANALYSISVIEW, BPCALIBRATIONPASSVIEW);
+ // 校准失败
+
+ if (CalibrationFlag == 1)
+ CalibrationFlag++;
+ else
+ CalibrationFlag = 0;
+ }
+ else if (BPMainView::GetInstance() && CalibrationFlag == 2) // 第二次校准完
+ {
+ BPMainView::GetInstance()->ChangeView(BPSECUNDERCALIBRATIONVIEW, BPCALIBRATIONMINDVIEW);
+ CalibrationFlag++;
+ }
+ else if (BPDetectionView::GetInstance())
+ {
+ // 测试成功 -> 进入结果界面
+ BPDetectionView::GetInstance()->ChangeView(CALIBRATION_BPVIEW, RESULT_BPVIEW);
+ // 测试失败 -> 进入错误界面
- // BPDetectionView::GetInstance()->ChangeView(CALIBRATION_BPVIEW, ERROR_BPVIEW);
++ // BPDetectionView::GetInstance()->ChangeView(CALIBRATION_BPVIEW,
++ // ERROR_BPVIEW);
+ }
+ return;
+ }
-/*
- * @brief 开启定时器函数
- * @param interval 时间间隔,单位ms
- */
-void BPModel::BP_StartTimer(uint32_t interval) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPModel::BP_StartTimer");
- /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回
- * ------------------------- */
- if (g_timer != nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer already exists!!");
- return;
+ BPState current_state_time = BPModel::GetInstance()->GetCurrentState();
+ // 根据状态处理
+ switch (current_state_time)
+ {
+ case BPState::BP_NORMAL:
+ BPModel::GetInstance()->BP_StopTimer();
+ BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL);
+ return;
+
+ case BPState::BP_DETECTING:
+ {
+ BPDetectBeginView *view = BPDetectBeginView::GetInstance();
+ if (view)
+ {
+ view->UpdateTimeText(Time);
+ }
+ break;
+ }
+
+ case BPState::BP_CALIBRATING_FIRSTTIME:
+ {
+ BPUnderCalibrationView *view = BPUnderCalibrationView::GetInstance();
+ if (view)
+ {
+ view->UpdateTimeText(Time);
+ }
+ break;
+ }
+ case BPState::BP_CALIBRATING_SECONDTIME:
+ {
+ BPSecUnderCalibrationView *view = BPSecUnderCalibrationView::GetInstance();
+ if (view)
+ {
+ view->UpdateTimeText(Time);
+ }
+ break;
+ }
+ case BPState::BP_CALIBRATING_ANGLYSIS:
+ {
+ break;
+ }
+
+ default:
+ BPModel::GetInstance()->BP_StopTimer();
+ // 显示错误界面提示
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "current_state is error!!");
+ return;
+ }
}
- /* --------------------------------- 2.创建定时器
- * -------------------------------- */
- g_timer = osTimerNew((osTimerFunc_t)BP_TimerCallback, osTimerPeriodic,
- nullptr, nullptr);
- // 检查定时器创建是否成功
- if (g_timer == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer create failed!!");
- return;
+ /*
+ * @brief 回调函数
+ */
+ static void BP_TimerCallback(int data)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BP_TimerCallback %d", data);
+ GraphicService::GetInstance()->PostGraphicEvent(
+ std::bind(BP_TimerCallbackProc, data));
}
- /* ----------------------------- 3.将毫秒转换为系统时钟节拍数
- * ---------------------------- */
- int tick = osMs2Tick(interval);
-
- /* --------------------------------- 4.启动定时器
- * -------------------------------- */
- osStatus_t ret = osTimerStart(g_timer, tick);
- /* -------------------- 5.检查定时器启动是否成功,如果启动失败,删除定时器并置为
- * nullptr -------------------- */
- if (ret != osOK) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "osTimerDelete failed, ret = %lx!!",
- ret);
- if (g_timer != nullptr) {
- ret = osTimerDelete(g_timer);
+ /*
+ * @brief 开启定时器函数
+ * @param interval 时间间隔,单位ms
+ */
+ void BPModel::BP_StartTimer(uint32_t interval)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPModel::BP_StartTimer");
+ /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回
+ * ------------------------- */
+ if (g_timer != nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer already exists!!");
+ return;
+ }
+
+ /* --------------------------------- 2.创建定时器
+ * -------------------------------- */
+ g_timer = osTimerNew((osTimerFunc_t)BP_TimerCallback, osTimerPeriodic,
+ nullptr, nullptr);
+ // 检查定时器创建是否成功
+ if (g_timer == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer create failed!!");
+ return;
+ }
+
+ /* ----------------------------- 3.将毫秒转换为系统时钟节拍数
+ * ---------------------------- */
+ int tick = osMs2Tick(interval);
+
+ /* --------------------------------- 4.启动定时器
+ * -------------------------------- */
+ osStatus_t ret = osTimerStart(g_timer, tick);
+ /* -------------------- 5.检查定时器启动是否成功,如果启动失败,删除定时器并置为
+ * nullptr -------------------- */
+ if (ret != osOK)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "osTimerDelete failed, ret = %lx!!",
+ ret);
+ if (g_timer != nullptr)
+ {
+ ret = osTimerDelete(g_timer);
+ }
+ g_timer = nullptr;
+ return;
}
- g_timer = nullptr;
- return;
}
-}
-/*
- * @brief 停止定时器
- */
-void BPModel::BP_StopTimer(void) {
- // 检查定时器是否存在
- if (g_timer != nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPModel::BP_StopTimer");
- osTimerStop(g_timer);
- // 删除定时器并置为 nullptr
- osStatus_t ret = osTimerDelete(g_timer);
- if (ret != osOK) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
- "osTimerDelete failed, ret = %lx!!", ret);
+ /*
+ * @brief 停止定时器
+ */
+ void BPModel::BP_StopTimer(void)
+ {
+ // 检查定时器是否存在
+ if (g_timer != nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BPModel::BP_StopTimer");
+ osTimerStop(g_timer);
+ // 删除定时器并置为 nullptr
+ osStatus_t ret = osTimerDelete(g_timer);
+ if (ret != osOK)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "osTimerDelete failed, ret = %lx!!", ret);
+ }
+ g_timer = nullptr;
}
- g_timer = nullptr;
}
-}
} // namespace OHOS