From c6114a245891dd92ca2c6aba00e46efbc74e6fdb Mon Sep 17 00:00:00 2001 From: Caisking Date: Thu, 26 Jun 2025 11:15:26 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96=E5=81=A5=E5=BA=B7model?= =?utf8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativeui/bloodpressure/include/BPModel.h | 167 +++-- .../nativeui/bloodpressure/src/BPModel.cpp | 600 +++++++++--------- .../nativeui/ecg/src/EcgPresenter.cpp | 3 +- .../nativeui/emotion/src/EmoPresenter.cpp | 1 - .../fatiguelevel/src/FatiguePresenter.cpp | 2 - .../nativeui/stress/src/StressPresenter.cpp | 2 - 6 files changed, 393 insertions(+), 382 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPModel.h b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPModel.h index 5b400b0bc..64132df1d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPModel.h @@ -8,97 +8,94 @@ #define SBP_VALUE 120 #define DBP_VALUE 80 -namespace OHOS -{ - // 检测状态 - enum class BPState - { - // 结束检测 - BP_End = 0, - // 第一次校准血压中 30s - BP_CALIBRATING_FIRSTTIME, - // 第二次校准血压中 30s - BP_CALIBRATING_SECONDTIME, - // 校准分析中 5s - BP_CALIBRATING_ANGLYSIS, - // 检测血压中 30s - BP_DETECTING, - // 压力测量中 - STRESS_MEASURE, - // 疲劳度测量中 - FATIGUE_MEASURE, - // ECG提示中 - ECG_REMIND, - // ECG测量中 - ECG_MEASURE, - // 情绪测量中 - EMO_MEASURE, - // 压力分析中 - STRESS_ANALYSIS, - // 疲劳度分析中 - FATIGUE_ANALYSIS, - // ECG分析中 - ECG_ANALYSIS, - // ECG结果中 - ECG_RESULT, - // 情绪分析中 - EMO_ANALYSIS, - // 普通状态 - BP_NORMAL, - // 暂停检测 - BP_PAUSE, +namespace OHOS { +// 检测状态 +enum class BPState { + // 结束检测 + BP_End = 0, + // 第一次校准血压中 30s + BP_CALIBRATING_FIRSTTIME, + // 第二次校准血压中 30s + BP_CALIBRATING_SECONDTIME, + // 校准分析中 5s + BP_CALIBRATING_ANGLYSIS, + // 检测血压中 30s + BP_DETECTING, + // 压力测量中 + STRESS_MEASURE, + // 疲劳度测量中 + FATIGUE_MEASURE, + // ECG提示中 + ECG_REMIND, + // ECG测量中 + ECG_MEASURE, + // 情绪测量中 + EMO_MEASURE, + // 压力分析中 + STRESS_ANALYSIS, + // 疲劳度分析中 + FATIGUE_ANALYSIS, + // ECG分析中 + ECG_ANALYSIS, + // ECG结果中 + ECG_RESULT, + // 情绪分析中 + EMO_ANALYSIS, + // 普通状态 + BP_NORMAL, + // 暂停检测 + BP_PAUSE, - BP_STATE_MAX, - }; - // 血压检测结果 - enum class BPRESULT - { - NOT_TESTED = 0, // 未检测 - SUCCESS, // 检测成功 - NOT_WORN, // 未佩戴检测 - TIMEOUT, // 检测超时 - HIGH_RESULT, // 检测结果过高 - LOW_RESULT, // 检测结果过低 - INVALID_DATA // 无效数据 - }; + BP_STATE_MAX, +}; +// 血压检测结果 +enum class BPRESULT { + NOT_TESTED = 0, // 未检测 + SUCCESS, // 检测成功 + NOT_WORN, // 未佩戴检测 + TIMEOUT, // 检测超时 + HIGH_RESULT, // 检测结果过高 + LOW_RESULT, // 检测结果过低 + INVALID_DATA // 无效数据 +}; - enum class BP_VALUE_TYPE - { - SBP = 0, - DBP, - }; +enum class BP_VALUE_TYPE { + SBP = 0, + DBP, +}; -#define BP_CHECK_TIME_MAX 30 //测量所需时间 +#define BP_CHECK_TIME_MAX 30 //测量所需时间 #define BP_ANLYSISI_TIME_MAX 5 //分析所需时间 -#define BP_REMIND_TIME_MAX 5 //提醒所需时间 - class BPModel - { - public: - BPModel(); - ~BPModel(); - static BPModel *GetInstance(); - // 获取第几次校准 - int16_t GetCalibrationFlag(); - void SetCalibrationFlag(int value); - // 获取当前时间年月日时分字符串 - std::string GetCurrentTimeStr(); - // 当前状态管理 - void BP_SetState(BPState state); - BPState GetCurrentState(); - // 控制血压检测 - void BP_Control(BPState state); - void BP_SetValue(BP_VALUE_TYPE type, bool set_value); - int16_t GetValue(BP_VALUE_TYPE type); +#define BP_REMIND_TIME_MAX 5 //提醒所需时间 +class BPModel { +public: + BPModel(); + ~BPModel(); + static BPModel *GetInstance(); + // 获取第几次校准 + int16_t GetCalibrationFlag(); + void SetCalibrationFlag(int value); + // 获取当前时间年月日时分字符串 + std::string GetCurrentTimeStr(); + // 当前状态管理 + void BP_SetState(BPState state); + BPState GetCurrentState(); + // 控制血压检测 + void BP_Control(BPState state); + void BP_SetValue(BP_VALUE_TYPE type, bool set_value); + int16_t GetValue(BP_VALUE_TYPE type); + void BP_timer_callback_out(); + void BP_timer_callback_proc(int data); - /////////////////////////////////////////////// - void BP_StartTimer(uint32_t interval = 1 * 1000); // 1s定时器 - void BP_StopTimer(void); + /////////////////////////////////////////////// + void BP_StartTimer(uint32_t interval = 1 * 1000); // 1s定时器 + void BP_StopTimer(void); - private: - BPState current_state = BPState::BP_NORMAL; - int16_t custom_sbp = SBP_VALUE; - int16_t custom_dbp = DBP_VALUE; - }; +private: + BPState current_state = BPState::BP_NORMAL; + int16_t custom_sbp = SBP_VALUE; + int16_t custom_dbp = DBP_VALUE; +}; } // namespace OHOS #endif diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPModel.cpp index 251a07651..bc485138c 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPModel.cpp @@ -10,15 +10,15 @@ // #include "bloodpressure/include/BPDetectResultView.h" // #include "bloodpressure/include/BPDetectEndView.h" -#include "stress/include/StressMainView.h" -#include "stress/include/StressAnalysisView.h" -#include "fatiguelevel/include/FatigueMainView.h" -#include "fatiguelevel/include/FatigueAnalysisView.h" -#include "emotion/include/EmoView.h" -#include "emotion/include/EmoPresenter.h" -#include "ecg/include/EcgView.h" #include "ecg/include/EcgPresenter.h" #include "ecg/include/EcgTestingView.h" +#include "ecg/include/EcgView.h" +#include "emotion/include/EmoPresenter.h" +#include "emotion/include/EmoView.h" +#include "fatiguelevel/include/FatigueAnalysisView.h" +#include "fatiguelevel/include/FatigueMainView.h" +#include "stress/include/StressAnalysisView.h" +#include "stress/include/StressMainView.h" #include "wearable_log.h" #include @@ -47,317 +47,335 @@ 3、低血压:收缩压<90 mmHg 且 舒张压<60 mmHg。 ---------------------------- */ -namespace OHOS -{ +namespace OHOS { /** * @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; +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; +} +// 获取当前时间戳字符串 +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 --/--"; } - int16_t BPModel::GetCalibrationFlag() { return CalibrationFlag; } - void BPModel::SetCalibrationFlag(int value) { CalibrationFlag = value; } - - // 获取当前时间戳字符串 - 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 --/--"; - } - // 将时间戳转换为 time_t 类型 - time_t rawtime = static_cast(timeStamp); - struct tm *timeinfo = localtime(&rawtime); - - if (timeinfo == NULL) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to convert time"); - return "----/--/-- \n --/--"; - } + // 将时间戳转换为 time_t 类型 + time_t rawtime = static_cast(timeStamp); + struct tm *timeinfo = localtime(&rawtime); - // 格式化时间为字符串 - char buffer[20]; // 格式: YYYY-MM-DD HH:MM - std::strftime(buffer, sizeof(buffer), "%Y-%m-%d \n %H:%M", timeinfo); - - 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; } - - // 进行传感器、定时器等控制 - 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::STRESS_MEASURE: - case BPState::FATIGUE_MEASURE: - case BPState::ECG_MEASURE: - case BPState::EMO_MEASURE: - case BPState::BP_DETECTING: - { - /* - 开启定时器 - 开启传感器 - 开启常亮 - */ - BP_StartTimer(); - ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别 - - if (Time != BP_CHECK_TIME_MAX) - Time = BP_CHECK_TIME_MAX; // 重置时间 - - break; - } - case BPState::BP_CALIBRATING_ANGLYSIS: - case BPState::STRESS_ANALYSIS: - case BPState::FATIGUE_ANALYSIS: - case BPState::ECG_ANALYSIS: - case BPState::EMO_ANALYSIS: - { - BP_StartTimer(); - ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别 + // 格式化时间为字符串 + char buffer[20]; // 格式: YYYY-MM-DD HH:MM + std::strftime(buffer, sizeof(buffer), "%Y-%m-%d \n %H:%M", timeinfo); + + return std::string(buffer); +} +/////////////////////////状态管理////////////////////////////////////////// +int16_t BPModel::GetCalibrationFlag() { return CalibrationFlag; } +void BPModel::SetCalibrationFlag(int value) { CalibrationFlag = value; } + +// 管理当前状态 +void BPModel::BP_SetState(BPState state) { current_state = state; } +BPState BPModel::GetCurrentState() { return current_state; } + +// 进行传感器、定时器等控制 +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::STRESS_MEASURE: + case BPState::FATIGUE_MEASURE: + case BPState::ECG_MEASURE: + case BPState::EMO_MEASURE: + case BPState::BP_DETECTING: { + /* + 开启定时器 + 开启传感器 + 开启常亮 + */ + BP_StartTimer(); + ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别 + + if (Time != BP_CHECK_TIME_MAX) + Time = BP_CHECK_TIME_MAX; // 重置时间 + + break; + } + case BPState::BP_CALIBRATING_ANGLYSIS: + case BPState::STRESS_ANALYSIS: + case BPState::FATIGUE_ANALYSIS: + case BPState::ECG_ANALYSIS: + case BPState::EMO_ANALYSIS: { + BP_StartTimer(); + ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别 + + if (Time != BP_ANLYSISI_TIME_MAX) + Time = BP_ANLYSISI_TIME_MAX; // 重置时间 + break; + } + case BPState::ECG_REMIND: + case BPState::ECG_RESULT: { + BP_StartTimer(); + ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别 + + if (Time != BP_REMIND_TIME_MAX) + Time = BP_REMIND_TIME_MAX; // 重置时间 + break; + } - if (Time != BP_ANLYSISI_TIME_MAX) - Time = BP_ANLYSISI_TIME_MAX; // 重置时间 - break; + 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++; } - case BPState::ECG_REMIND: - case BPState::ECG_RESULT: - { - BP_StartTimer(); - ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别 - - if (Time != BP_REMIND_TIME_MAX) - Time = BP_REMIND_TIME_MAX; // 重置时间 - break; + } 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--; } - - default: - /*未知状态,全部状态重置*/ - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BP_Control: Invalid state"); + } +} +int16_t BPModel::GetValue(BP_VALUE_TYPE type) { + if (type == BP_VALUE_TYPE::SBP) + return custom_sbp; + else + return custom_dbp; +} +//////////////////////////////////time处理//////////////////////////////////// +// time到时的处理 + void BPModel::BP_timer_callback_out() { + + BP_StopTimer(); + + // 提前获取各视图实例 + auto *bpMainView = BPMainView::GetInstance(); + auto *bpDetectionView = BPDetectionView::GetInstance(); + auto *stressMainView = StressMainView::GetInstance(); + auto *stressAnalysisView = StressAnalysisView::GetInstance(); + auto *fatigueMainView = FatigueMainView::GetInstance(); + auto *fatigueAnalysisView = FatigueAnalysisView::GetInstance(); + auto *emoView = EmoView::GetInstance(); + auto *ecgView = EcgView::GetInstance(); + + // 处理血压校准相关状态 + if (current_state == BPState::BP_CALIBRATING_FIRSTTIME || + current_state == BPState::BP_CALIBRATING_SECONDTIME) { + if (bpMainView) { + bpMainView->ChangeView(current_state == BPState::BP_CALIBRATING_FIRSTTIME + ? BPUNDERCALIBRATIONVIEW + : BPSECUNDERCALIBRATIONVIEW, + BPCALIBRATIONMINDVIEW); + } BP_SetState(BPState::BP_NORMAL); - BP_StopTimer(); - Time = BP_CHECK_TIME_MAX; + CalibrationFlag++; 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++; + // 处理血压分析状态 + if (current_state == BPState::BP_CALIBRATING_ANGLYSIS) { + if (bpMainView) { + bpMainView->ChangeView(BPRESULTANALYSISVIEW, BPCALIBRATIONPASSVIEW); } + BP_SetState(BPState::BP_NORMAL); + if (CalibrationFlag == 1) + CalibrationFlag++; + else + CalibrationFlag = 0; + return; } - 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--; + // 处理血压检测状态 + if (current_state == BPState::BP_DETECTING) { + if (bpDetectionView) { + bpDetectionView->ChangeView(CALIBRATION_BPVIEW, RESULT_BPVIEW); } + BP_SetState(BPState::BP_NORMAL); + 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(); - if (BPMainView::GetInstance() && BPModel::GetInstance()->GetCurrentState() == BPState::BP_CALIBRATING_FIRSTTIME) // 血压第一次校准完 - { - BPMainView::GetInstance()->ChangeView(BPUNDERCALIBRATIONVIEW, BPCALIBRATIONMINDVIEW); - BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL); - CalibrationFlag++; - } - else if (BPMainView::GetInstance() && BPModel::GetInstance()->GetCurrentState() == BPState::BP_CALIBRATING_ANGLYSIS) // 血压分析完 - { - // 校准成功 - BPMainView::GetInstance()->ChangeView(BPRESULTANALYSISVIEW, BPCALIBRATIONPASSVIEW); - BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL); - // 校准失败 - - if (CalibrationFlag == 1) - CalibrationFlag++; - else - CalibrationFlag = 0; - } - else if (BPMainView::GetInstance() && BPModel::GetInstance()->GetCurrentState() == BPState::BP_CALIBRATING_SECONDTIME) // 血压第二次校准完 - { - BPMainView::GetInstance()->ChangeView(BPSECUNDERCALIBRATIONVIEW, BPCALIBRATIONMINDVIEW); - BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL); - CalibrationFlag++; - } - else if (BPDetectionView::GetInstance() && BPModel::GetInstance()->GetCurrentState() == BPState::BP_DETECTING) // 血压检测完 - { - // 测试成功 -> 进入结果界面 - BPDetectionView::GetInstance()->ChangeView(CALIBRATION_BPVIEW, RESULT_BPVIEW); - BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL); - // 测试失败 -> 进入错误界面 - // BPDetectionView::GetInstance()->ChangeView(CALIBRATION_BPVIEW, - // ERROR_BPVIEW); + // 处理压力检测与分析 + if (current_state == BPState::STRESS_MEASURE) { + if (stressMainView) { + stressMainView->ChangeView(STRESSUNDERMEASUREVIEW, STRESSANALYSISEVIEW); } - else if (StressMainView::GetInstance() && BPModel::GetInstance()->GetCurrentState() == BPState::STRESS_MEASURE) // 压力检测完 - { - BPModel::GetInstance()->BP_Control(BPState::STRESS_ANALYSIS); - StressMainView::GetInstance()->ChangeView(STRESSUNDERMEASUREVIEW, STRESSANALYSISEVIEW); - StressAnalysisView::GetInstance()->startorstopAnalysisAni(true); + BP_Control(BPState::STRESS_ANALYSIS); + if (stressAnalysisView) { + stressAnalysisView->startorstopAnalysisAni(true); } - else if (StressMainView::GetInstance() && BPModel::GetInstance()->GetCurrentState() == BPState::STRESS_ANALYSIS) // 压力分析完 - { - StressMainView::GetInstance()->ChangeView(STRESSANALYSISEVIEW, STRESSRESULTVIEW); - BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL); - StressAnalysisView::GetInstance()->startorstopAnalysisAni(false); + return; + } + if (current_state == BPState::STRESS_ANALYSIS) { + if (stressMainView) { + stressMainView->ChangeView(STRESSANALYSISEVIEW, STRESSRESULTVIEW); } - else if (FatigueMainView::GetInstance() && BPModel::GetInstance()->GetCurrentState() == BPState::FATIGUE_MEASURE) // 疲劳度检测完 - { - BPModel::GetInstance()->BP_Control(BPState::FATIGUE_ANALYSIS); - FatigueMainView::GetInstance()->ChangeView(FATIGUEUNDERMEASUREVIEW, FATIGUEANALYSISEVIEW); - FatigueAnalysisView::GetInstance()->startorstopAnalysisAni(true); + BP_SetState(BPState::BP_NORMAL); + if (stressAnalysisView) { + stressAnalysisView->startorstopAnalysisAni(false); } - else if (FatigueMainView::GetInstance() && BPModel::GetInstance()->GetCurrentState() == BPState::FATIGUE_ANALYSIS) // 疲劳度分析完 - { - FatigueMainView::GetInstance()->ChangeView(FATIGUEANALYSISEVIEW, FATIGUERESULTVIEW); - BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL); - FatigueAnalysisView::GetInstance()->startorstopAnalysisAni(false); + return; + } + + // 处理疲劳度检测与分析 + if (current_state == BPState::FATIGUE_MEASURE) { + if (fatigueMainView) { + fatigueMainView->ChangeView(FATIGUEUNDERMEASUREVIEW, + FATIGUEANALYSISEVIEW); } - else if (EmoView::GetInstance() && BPModel::GetInstance()->GetCurrentState() == BPState::EMO_MEASURE) // 情绪检测完 - { - EmoPresenter::GetInstance()->ChangeViewOperator(EMOTIONTESTVIEW, EMOTIONTESTANALYSISVIEW); + BP_Control(BPState::FATIGUE_ANALYSIS); + if (fatigueAnalysisView) { + fatigueAnalysisView->startorstopAnalysisAni(true); } - else if (EmoView::GetInstance() && BPModel::GetInstance()->GetCurrentState() == BPState::EMO_ANALYSIS) // 情绪分析完 - { - EmoPresenter::GetInstance()->ChangeViewOperator(EMOTIONTESTANALYSISVIEW, EMOTIONTESTRESULTVIEW); - BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL); + return; + } + if (current_state == BPState::FATIGUE_ANALYSIS) { + if (fatigueMainView) { + fatigueMainView->ChangeView(FATIGUEANALYSISEVIEW, FATIGUERESULTVIEW); } - else if (EcgView::GetInstance() && BPModel::GetInstance()->GetCurrentState() == BPState::ECG_REMIND) // ECG提示完 - { - EcgPresenter::GetInstance()->ChangeViewOperator(ECGTESTREMINDERVIEW, ECGTESTINGVIEW); + BP_SetState(BPState::BP_NORMAL); + if (fatigueAnalysisView) { + fatigueAnalysisView->startorstopAnalysisAni(false); } - else if (EcgView::GetInstance() && BPModel::GetInstance()->GetCurrentState() == BPState::ECG_MEASURE) // ECG测量完 - { - EcgPresenter::GetInstance()->ChangeViewOperator(ECGTESTINGVIEW, ECGTESTANALYSISVIEW); + return; + } + + // 处理情绪检测与分析 + if (current_state == BPState::EMO_MEASURE) { + if (emoView) { + EmoPresenter::GetInstance()->ChangeViewOperator(EMOTIONTESTVIEW, + EMOTIONTESTANALYSISVIEW); } - else if (EcgView::GetInstance() && BPModel::GetInstance()->GetCurrentState() == BPState::ECG_ANALYSIS) // ECG分析完 - { - EcgPresenter::GetInstance()->ChangeViewOperator(ECGTESTANALYSISVIEW, ECGTESTRESULTVIEW); + return; + + if (current_state == BPState::EMO_ANALYSIS) { + if (emoView) { + EmoPresenter::GetInstance()->ChangeViewOperator(EMOTIONTESTANALYSISVIEW, + EMOTIONTESTRESULTVIEW); + } + BP_SetState(BPState::BP_NORMAL); + return; } - else if (EcgView::GetInstance() && BPModel::GetInstance()->GetCurrentState() == BPState::ECG_RESULT) // ECG结果显示完 - { - EcgPresenter::GetInstance()->ChangeViewOperator(ECGTESTRESULTVIEW, ECGRESETTESTOFSUCCVIEW); - BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL); + + // 处理ECG相关状态 + if (ecgView) { + if (current_state == BPState::ECG_REMIND) { + EcgPresenter::GetInstance()->ChangeViewOperator(ECGTESTREMINDERVIEW, + ECGTESTINGVIEW); + return; + } + + if (current_state == BPState::ECG_MEASURE) { + EcgPresenter::GetInstance()->ChangeViewOperator(ECGTESTINGVIEW, + ECGTESTANALYSISVIEW); + return; + } + + if (current_state == BPState::ECG_ANALYSIS) { + EcgPresenter::GetInstance()->ChangeViewOperator(ECGTESTANALYSISVIEW, + ECGTESTRESULTVIEW); + return; + } + if (current_state == BPState::ECG_RESULT) { + + EcgPresenter::GetInstance()->ChangeViewOperator(ECGTESTRESULTVIEW, + ECGRESETTESTOFSUCCVIEW); + BP_SetState(BPState::BP_NORMAL); + } } - return; } + } + //每秒的处理 + void BPModel::BP_timer_callback_proc(int data) { - BPState current_state_time = BPModel::GetInstance()->GetCurrentState(); // 根据状态处理 - switch (current_state_time) - { + switch (current_state) { case BPState::BP_NORMAL: - BPModel::GetInstance()->BP_StopTimer(); - BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL); + BP_StopTimer(); + BP_SetState(BPState::BP_NORMAL); return; - case BPState::BP_DETECTING: - { + case BPState::BP_DETECTING: { BPDetectBeginView *view = BPDetectBeginView::GetInstance(); - if (view) - { - view->UpdateTimeText(Time); + if (view) { + view->UpdateTimeText(data); } break; } - case BPState::BP_CALIBRATING_FIRSTTIME: - { + case BPState::BP_CALIBRATING_FIRSTTIME: { BPUnderCalibrationView *view = BPUnderCalibrationView::GetInstance(); - if (view) - { - view->UpdateTimeText(Time); + if (view) { + view->UpdateTimeText(data); } break; } - case BPState::BP_CALIBRATING_SECONDTIME: - { - BPSecUnderCalibrationView *view = BPSecUnderCalibrationView::GetInstance(); - if (view) - { - view->UpdateTimeText(Time); + case BPState::BP_CALIBRATING_SECONDTIME: { + BPSecUnderCalibrationView *view = + BPSecUnderCalibrationView::GetInstance(); + if (view) { + view->UpdateTimeText(data); } break; } - case BPState::ECG_MEASURE: - { - EcgTestingView::GetInstance()->UpdateTimeLabel(Time); + case BPState::ECG_MEASURE: { + EcgTestingView *view = EcgTestingView::GetInstance(); + if (view) { + view->UpdateTimeLabel(Time); + } + break; } case BPState::STRESS_MEASURE: @@ -369,24 +387,34 @@ namespace OHOS case BPState::EMO_ANALYSIS: case BPState::BP_CALIBRATING_ANGLYSIS: case BPState::ECG_REMIND: - case BPState::ECG_RESULT: - { + case BPState::ECG_RESULT: { break; } default: - BPModel::GetInstance()->BP_StopTimer(); + BP_StopTimer(); // 显示错误界面提示 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "current_state is error!!"); return; } } + /////////////////////////////////////定时器处理 不要修改////////////////////////////////////////////////// + /*定时器到期时的处理*/ + static void BP_TimerCallbackProc(int data) { + // 倒计时 + Time--; + // 到时的处理 + if (Time < 0) { + BPModel::GetInstance()->BP_timer_callback_out(); + return; + } + BPModel::GetInstance()->BP_timer_callback_proc(Time); + } /* * @brief 回调函数 */ - static void BP_TimerCallback(int data) - { + static void BP_TimerCallback(int data) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BP_TimerCallback %d", data); GraphicService::GetInstance()->PostGraphicEvent( std::bind(BP_TimerCallbackProc, data)); @@ -396,13 +424,11 @@ namespace OHOS * @brief 开启定时器函数 * @param interval 时间间隔,单位ms */ - void BPModel::BP_StartTimer(uint32_t interval) - { + void BPModel::BP_StartTimer(uint32_t interval) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPModel::BP_StartTimer"); /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回 * ------------------------- */ - if (g_timer != nullptr) - { + if (g_timer != nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer already exists!!"); return; } @@ -412,8 +438,7 @@ namespace OHOS g_timer = osTimerNew((osTimerFunc_t)BP_TimerCallback, osTimerPeriodic, nullptr, nullptr); // 检查定时器创建是否成功 - if (g_timer == nullptr) - { + if (g_timer == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer create failed!!"); return; } @@ -427,12 +452,10 @@ namespace OHOS 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) - { + 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; @@ -442,17 +465,14 @@ namespace OHOS /* * @brief 停止定时器 */ - void BPModel::BP_StopTimer(void) - { + void BPModel::BP_StopTimer(void) { // 检查定时器是否存在 - if (g_timer != nullptr) - { + 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) - { + if (ret != osOK) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "osTimerDelete failed, ret = %lx!!", ret); } diff --git a/code/sdk/application/wearable/fd230app/nativeui/ecg/src/EcgPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/ecg/src/EcgPresenter.cpp index 95829a3a8..3120540d3 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/ecg/src/EcgPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/ecg/src/EcgPresenter.cpp @@ -59,7 +59,6 @@ namespace OHOS WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "EcgPresenter::OnStop"); Presenter::OnStop(); BPModel::GetInstance()->BP_Control(BPState::BP_NORMAL); - BPModel::GetInstance()->BP_StopTimer(); } void EcgPresenter::ChangeViewOperator(int16_t hideView, int16_t showView) @@ -108,7 +107,7 @@ namespace OHOS } else if (hideView == ECGTESTRESULTVIEW) { - BPModel::GetInstance()->BP_StopTimer(); + BPModel::GetInstance()->BP_Control(BPState::ECG_RESULT); } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/emotion/src/EmoPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/emotion/src/EmoPresenter.cpp index 63acc73dc..8140cec7d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/emotion/src/EmoPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/emotion/src/EmoPresenter.cpp @@ -59,7 +59,6 @@ namespace OHOS WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "EmoPresenter::OnStop"); Presenter::OnStop(); BPModel::GetInstance()->BP_Control(BPState::BP_NORMAL); - BPModel::GetInstance()->BP_StopTimer(); } void EmoPresenter::ChangeViewOperator(int16_t hideView, int16_t showView) diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatiguePresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatiguePresenter.cpp index 707ac9342..405b3a743 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatiguePresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatiguePresenter.cpp @@ -87,7 +87,6 @@ namespace OHOS if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) { BPModel::GetInstance()->BP_Control(BPState::BP_NORMAL); - BPModel::GetInstance()->BP_StopTimer(); NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS); return true; } @@ -102,7 +101,6 @@ namespace OHOS keyState == 1 && uapi_get_screen_state() == 0) { BPModel::GetInstance()->BP_Control(BPState::BP_NORMAL); - BPModel::GetInstance()->BP_StopTimer(); NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS); } return true; diff --git a/code/sdk/application/wearable/fd230app/nativeui/stress/src/StressPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/stress/src/StressPresenter.cpp index fb6888420..f95ad6fe9 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/stress/src/StressPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/stress/src/StressPresenter.cpp @@ -87,7 +87,6 @@ namespace OHOS if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) { BPModel::GetInstance()->BP_Control(BPState::BP_NORMAL); - BPModel::GetInstance()->BP_StopTimer(); NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS); return true; } @@ -102,7 +101,6 @@ namespace OHOS keyState == 1 && uapi_get_screen_state() == 0) { BPModel::GetInstance()->BP_Control(BPState::BP_NORMAL); - BPModel::GetInstance()->BP_StopTimer(); NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS); } return true; -- 2.17.1