#include "bloodpressure/include/BPLastCalibrationTimeView.h"
#include "bloodpressure/include/BPMainPresenter.h"
#include "wearable_log.h"
+#include "ui_resource_image.h"
+#include "uicomponents/UIComponents.h"
namespace OHOS
{
titleLabel->SetPosition((HORIZONTAL_RESOLUTION - 300) / 2, 50, 300, 35);
titleLabel->SetStyle(STYLE_TEXT_FONT, 30);
titleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
- titleLabel->SetText("上次校准时间");
+ titleLabel->SetTextId(STR_LAST_CALIBRATION_TIME);
titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
titleLabel->SetRollSpeed(23);
titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label1->SetPosition((HORIZONTAL_RESOLUTION - 400) / 2, 180, 400, 35);
label1->SetStyle(STYLE_TEXT_FONT, 30);
label1->SetStyle(STYLE_LINE_HEIGHT, 35);
- label1->SetText("建议每个月都重新校准!");
+ label1->SetTextId(STR_CALIBRATION_SUGGESTION);
label1->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
label1->SetRollSpeed(23);
label1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
label2->SetPosition((HORIZONTAL_RESOLUTION - 400) / 2, y1, 400, 35);
label2->SetStyle(STYLE_TEXT_FONT, 30);
label2->SetStyle(STYLE_LINE_HEIGHT, 35);
- label2->SetText("校准路径:设置-血压校准");
+ label2->SetTextId(STR_CALIBRATION_PATH);
label2->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
label2->SetRollSpeed(23);
label2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
calibrationlatterbutton->SetStyle(STYLE_TEXT_FONT, 30);
calibrationlatterbutton->SetStyle(STYLE_LINE_HEIGHT, 35);
calibrationlatterbutton->SetAlign(TEXT_ALIGNMENT_CENTER);
- calibrationlatterbutton->SetText("取消");
+ calibrationlatterbutton->SetTextId(STR_CANCEL);
calibrationlatterbutton->SetViewId(CALIBRATIONLATTERBUTTON);
calibrationlatterbutton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
calibrationlatterbutton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
CalibrationButton->SetStyle(STYLE_TEXT_FONT, 30);
CalibrationButton->SetStyle(STYLE_LINE_HEIGHT, 35);
CalibrationButton->SetAlign(TEXT_ALIGNMENT_CENTER);
- CalibrationButton->SetText("校准");
+ CalibrationButton->SetTextId(STR_CALIBRATE);
CalibrationButton->SetViewId(CALIBRATIONBUTTON);
CalibrationButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffff8a36);
CalibrationButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
#define DECLARE_BP_TIMER 1
#define DECLARE_BP_GETDATA 1
- static uint8_t Time = 30;
+ static int8_t Time = 30;
BPModel::BPModel() {}
BPModel::~BPModel() {}
const BPState StateId; // 视图ID
void (BPModel::*func)(); // 对应的视图切换函数指针
};
- // 初始化控制映射表(移除参数传递)
+ // 初始化控制映射表(移除参数传递
static const BPStateMapper StateMapper[] = {
{BPState::BP_IDLE, &BPModel::BPControlidleState},
{BPState::BP_End, &BPModel::BPControlStopMeasure},
// 使用控制映射表的示例函数(简化调用)
void BPModel::BP_Control(BPState state)
{
+ bool stateFound = false;
// 遍历数组查找匹配项
for (size_t i = 0; i < StateMapperSize; ++i)
{
{
// 调用成员函数
(this->*(entry.func))();
- current_state = entry.StateId; // 更新当前状态
+ BP_SetState(entry.StateId); // 更新当前状态
+ stateFound = true;
break;
}
}
- /*未知状态,全部状态重置*/
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BP_Control: Invalid state");
- BP_SetState(BPState::BP_IDLE);
- BP_StopTimer();
- Time = BP_CHECK_TIME_MAX;
- BP_SetState(state);
+ if (!stateFound)
+ {
+ /*未知状态,全部状态重置*/
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BP_Control: Invalid state");
+ BP_SetState(BPState::BP_IDLE);
+ BP_StopTimer();
+ Time = BP_CHECK_TIME_MAX;
+ }
}
// 空闲状态处理
void BPModel::BPControlidleState()
if (Time != BP_CHECK_TIME_MAX)
Time = BP_CHECK_TIME_MAX; // 重置时间90秒
BP_StartTimer();
+ BP_SetResultState(BPRESULT::NOT_TESTED); // 重置数据状态
ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
"start detecting");
BP_START(); // 底层接口开启血压
- custom_dbp = 0;
- custom_sbp = 0;
}
// 首次校准状态处理
void BPModel::BPControlCalibratingFirstTime()
{
- if (Time != BP_CHECK_TIME_MAX)
- Time = BP_CHECK_TIME_MAX; // 重置时间90秒
+
BP_StartTimer();
+ BP_SetResultState(BPRESULT::NOT_TESTED); // 重置数据状态
ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
"start detecting");
BP_START(); // 底层接口开启血压
- custom_dbp = 0;
- custom_sbp = 0;
+ if (Time != BP_CHECK_TIME_MAX)
+ Time = BP_CHECK_TIME_MAX; // 重置时间90秒
}
// 第二次校准状态处理
if (Time != BP_CHECK_TIME_MAX)
Time = BP_CHECK_TIME_MAX; // 重置时间90秒
BP_StartTimer();
+ BP_SetResultState(BPRESULT::NOT_TESTED); // 重置数据状态
ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
"start detecting");
BP_START(); // 底层接口开启血压
- custom_dbp = 0;
- custom_sbp = 0;
}
// 校准分析状态处理
void BPModel::BPControlCalibratingAnalysis()
{
#ifdef ENABLE_BN02
bp_stop();
+#endif
+ }
+ void BPModel::BP_CALIBTATION(void)
+ {
+#ifdef ENABLE_BN02
+ bp_set_adjust_data(custom_sbp, custom_dbp); // 校准接口
#endif
}
void BPModel::BP_GetData(uint8_t *sbp, uint8_t *dbp)
// time到时的处理
void BPModel::BP_timer_callback_out()
{
-
BP_StopTimer();
// 提前获取各视图实例
{
if (bpMainView)
{
- if (1) // 校准结果判断,后期调用接口
+ if (1) // 获取到数据,成功
{
bpMainView->ChangeView(BPRESULTANALYSISVIEW, BPCALIBRATIONPASSVIEW);
int configValue = static_cast<int>(GetCurrentTime());
{
CalibrationFlag++;
#if defined(BOARD_W9)
- ConfigModel::GetInstance()->set_condigData_Int(ConfigModel::CONFIGMODEL_ITEM_BP_CALIBRATION_FIRST_TIME, configValue);
+ ConfigModel::GetInstance()->set_condigData_Int(ConfigModel::CONFIGMODEL_ITEM_BP_CALIBRATION_FIRST_TIME, configValue);
#endif
}
- else //第二次校准成功,校准完成
+ else // 第二次校准成功,校准完成
{
#if defined(BOARD_W9)
- ConfigModel::GetInstance()->set_condigData_Int(ConfigModel::CONFIGMODEL_ITEM_BP_CALIBRATION_SECOND_TIME, configValue);
+ ConfigModel::GetInstance()->set_condigData_Int(ConfigModel::CONFIGMODEL_ITEM_BP_CALIBRATION_SECOND_TIME, configValue);
#endif
CalibrationFlag = 0;
}
else
{
- bpMainView->ChangeView(BPRESULTANALYSISVIEW, BPCALIBRATIONERRORVIEW);//失败只跳转界面,不做任何处理
+ bpMainView->ChangeView(BPRESULTANALYSISVIEW, BPCALIBRATIONERRORVIEW); // 失败只跳转界面,不做任何处理
}
}
BP_SetState(BPState::BP_IDLE);
// 处理血压检测状态
if (current_state == BPState::BP_DETECTING)
{
- if (bpDetectionView)
- {
- bpDetectionView->ChangeView(CALIBRATION_BPVIEW, RESULT_BPVIEW);
- }
BP_STOP(); // 停止检测
+ BP_SetState(BPState::BP_End); // 分析测量结果
if (bp_resullt == BPRESULT::NOT_TESTED) // 未测量到数据
{
BP_SetResultState(BPRESULT::TIMEOUT); // 测量超时
}
BP_SetState(BPState::BP_IDLE);
+
+ if (bpDetectionView &&
+ (bp_resullt == BPRESULT::HIGH_RESULT ||
+ bp_resullt == BPRESULT::SUCCESS ||
+ bp_resullt == BPRESULT::LOW_RESULT)) // 数据有效
+ {
+ bpDetectionView->ChangeView(CALIBRATION_BPVIEW, RESULT_BPVIEW); // 成功进入结果界面
+ }
+ else
+ {
+ bpDetectionView->ChangeView(CALIBRATION_BPVIEW, FAIL_BPVIEW); // 失败进入结果界面
+ }
+
return;
}
EMOTIONTESTANALYSISVIEW);
}
return;
+ }
- if (current_state == BPState::EMO_ANALYSIS)
+ if (current_state == BPState::EMO_ANALYSIS)
+ {
+ if (emoView)
{
- if (emoView)
- {
- EmoPresenter::GetInstance()->ChangeViewOperator(EMOTIONTESTANALYSISVIEW,
- EMOTIONTESTRESULTVIEW);
- }
- BP_SetState(BPState::BP_IDLE);
- return;
+ EmoPresenter::GetInstance()->ChangeViewOperator(EMOTIONTESTANALYSISVIEW,
+ EMOTIONTESTRESULTVIEW);
}
+ BP_SetState(BPState::BP_IDLE);
+ return;
+ }
- // 处理ECG相关状态
- if (ecgView)
+ // 处理ECG相关状态
+ if (ecgView)
+ {
+ if (current_state == BPState::ECG_REMIND)
{
- if (current_state == BPState::ECG_REMIND)
- {
- EcgPresenter::GetInstance()->ChangeViewOperator(ECGTESTREMINDERVIEW,
- ECGTESTINGVIEW);
- return;
- }
+ EcgPresenter::GetInstance()->ChangeViewOperator(ECGTESTREMINDERVIEW,
+ ECGTESTINGVIEW);
+ return;
+ }
- if (current_state == BPState::ECG_MEASURE)
- {
- EcgPresenter::GetInstance()->ChangeViewOperator(ECGTESTINGVIEW,
- ECGTESTANALYSISVIEW);
- 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)
- {
+ 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_IDLE);
- }
+ EcgPresenter::GetInstance()->ChangeViewOperator(ECGTESTRESULTVIEW,
+ ECGRESETTESTOFSUCCVIEW);
+ BP_SetState(BPState::BP_IDLE);
}
}
}
+
// 每秒的处理
void BPModel::BP_timer_callback_proc(uint8_t data)
{
if (Time > 0 && Time < 30) // 一分钟后获取数据
{
- BP_GetData(&custom_sbp, &custom_dbp);
- if (bp_resullt == BPRESULT::NOT_TESTED && custom_sbp > 0 && custom_dbp > 0) // 检测到数据
+ BP_GetData(&lastData.last_check_sbp_value, &lastData.last_check_dbp_value);
+ if (bp_resullt == BPRESULT::NOT_TESTED && lastData.last_check_sbp_value > 0 && lastData.last_check_dbp_value > 0) // 检测到数据
{
- LAST_CHECK_DATA newData;
- newData.timestamp = BPModel::GetCurrentTime();
- newData.last_check_sbp_value = custom_sbp;
- newData.last_check_dbp_value = custom_dbp;
- lastData = newData;
+ lastData.timestamp = BPModel::GetCurrentTime(); // 获取时间戳
// 测量完成
bp_resullt == BPRESULT::SUCCESS;
}
if (Time > 0 && Time < 30) // 一分钟后获取数据
{
- BP_GetData(&custom_sbp, &custom_dbp);
- if (custom_sbp > 0 && custom_dbp > 0) // 检测到数据
+ BP_GetData(&lastData.last_check_sbp_value, &lastData.last_check_dbp_value);
+ if (bp_resullt == BPRESULT::NOT_TESTED && lastData.last_check_sbp_value > 0 && lastData.last_check_dbp_value > 0) // 检测到数据
{
- LAST_CHECK_DATA newData;
- newData.last_check_sbp_value = custom_sbp; // 测试数据
- newData.last_check_dbp_value = custom_dbp;
- newData.timestamp = BPModel::GetCurrentTime();
- lastData = newData;
+ lastData.timestamp = BPModel::GetCurrentTime(); // 获取时间戳
// 测量完成
bp_resullt == BPRESULT::SUCCESS;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SBP: %d, DBP: %d", custom_sbp, custom_dbp);
}
}
-
break;
}
case BPState::BP_CALIBRATING_SECONDTIME:
{
- BPSecUnderCalibrationView *view =
- BPSecUnderCalibrationView::GetInstance();
+ BPSecUnderCalibrationView *view = BPSecUnderCalibrationView::GetInstance();
if (view)
{
view->UpdateTimeText(data);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Time: %d", Time);
if (Time > 0 && Time < 30) // 一分钟后获取数据
{
- BP_GetData(&custom_sbp, &custom_dbp);
- if (custom_sbp > 0 && custom_dbp > 0) // 检测到数据
+
+ BP_GetData(&lastData.last_check_sbp_value, &lastData.last_check_dbp_value);
+ if (bp_resullt == BPRESULT::NOT_TESTED && lastData.last_check_sbp_value > 0 && lastData.last_check_dbp_value > 0) // 检测到数据
{
- LAST_CHECK_DATA newData;
- newData.last_check_sbp_value = custom_sbp; // 测试数据
- newData.last_check_dbp_value = custom_dbp;
- newData.timestamp = BPModel::GetCurrentTime();
- lastData = newData;
+ lastData.timestamp = BPModel::GetCurrentTime(); // 获取时间戳
// 测量完成
bp_resullt == BPRESULT::SUCCESS;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SBP: %d, DBP: %d", custom_sbp, custom_dbp);
}
}
break;
}
+ case BPState::BP_CALIBRATING_ANGLYSIS:
+ {
+ }
case BPState::ECG_MEASURE:
{
EcgTestingView *view = EcgTestingView::GetInstance();
case BPState::FATIGUE_ANALYSIS:
case BPState::ECG_ANALYSIS:
case BPState::EMO_ANALYSIS:
- case BPState::BP_CALIBRATING_ANGLYSIS:
case BPState::ECG_REMIND:
case BPState::ECG_RESULT:
{