From 7d5e2af2e48c5115262a3ceb4335a91c762a571c Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Wed, 18 Jun 2025 16:34:39 +0800 Subject: [PATCH] =?utf8?q?=E4=BA=8C=E6=AC=A1=E6=A0=A1=E5=87=86=EF=BC=8C?= =?utf8?q?=E6=A0=A1=E5=87=86=E5=88=86=E6=9E=90=E7=95=8C=E9=9D=A2=E5=88=87?= =?utf8?q?=E6=8D=A2=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativeui/bloodpressure/include/BPModel.h | 6 +- .../src/BPCalibrationErrorView.cpp | 4 +- .../src/BPCalibrationPassView.cpp | 6 +- .../bloodpressure/src/BPMainPresenter.cpp | 23 ++++++- .../nativeui/bloodpressure/src/BPMainView.cpp | 4 ++ .../nativeui/bloodpressure/src/BPModel.cpp | 69 +++++++++++++------ 6 files changed, 83 insertions(+), 29 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 af6ede58c..357f7a96f 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPModel.h @@ -18,6 +18,8 @@ enum class BPState { BP_CALIBRATING_FIRSTTIME, //第二次校准血压中 30s BP_CALIBRATING_SECONDTIME, + //校准分析中 5s + BP_CALIBRATING_ANGLYSIS, //检测血压中 30s BP_DETECTING, //普通状态 @@ -44,12 +46,14 @@ enum class BP_VALUE_TYPE { }; #define BP_CHECK_TIME_MAX 30 +#define BP_ANLYSISI_TIME_MAX 5 class BPModel { public: BPModel(); ~BPModel(); static BPModel *GetInstance(); - + //获取第几次校准 + int16_t GetCalibrationFlag(); //获取当前时间年月日时分字符串 std::string GetCurrentTimeStr(); //当前状态管理 diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalibrationErrorView.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalibrationErrorView.cpp index f79fec735..3c05a61ea 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalibrationErrorView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalibrationErrorView.cpp @@ -85,7 +85,7 @@ namespace OHOS bool BPCalibrationErrorView::InitLable() { - InitLabel(titleLable, 165, 38, 165, 45, "titleLable", "校准失败", DEFAULT_VECTOR_FONT_FILENAME, 36); + InitLabel(titleLable, 145, 38, 165, 45, "titleLable", "校准失败", DEFAULT_VECTOR_FONT_FILENAME, 36); InitLabel(resultremindLable, 64, 113, 337, 70, "resultremindLable", "校准失败,请重新校准", DEFAULT_VECTOR_FONT_FILENAME, 32); resultremindLable->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); resultremindLable->SetTextColor(Color::Red()); @@ -102,7 +102,7 @@ namespace OHOS bool BPCalibrationErrorView::Initbackground() { error = new UIImageView(); - error->SetPosition(125, 160, 200, 200); + error->SetPosition(125, 170, 200, 200); error->SetSrc(BPBACKPATH); group->Add(error); return true; diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalibrationPassView.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalibrationPassView.cpp index fca6f4219..d7e6a19f4 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalibrationPassView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalibrationPassView.cpp @@ -68,7 +68,7 @@ namespace OHOS bool BPCalibrationPassView::AddButton() { InitLabelButton(checkButton, 125, 365, 217, 63, "passcheckButton", "确认", 35); - checkButton->SetViewId("passcheckButton"); + checkButton->SetViewId(PASSCAECKBUTTON); checkButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); // 设置按键颜色 checkButton->SetTextColor(Color::White()); // 设置按键监听 @@ -85,7 +85,7 @@ namespace OHOS bool BPCalibrationPassView::InitLable() { - InitLabel(titleLable, 165, 38, 165, 45, "titleLable", "校准完成", DEFAULT_VECTOR_FONT_FILENAME, 36); + InitLabel(titleLable, 145, 38, 165, 45, "titleLable", "校准完成", DEFAULT_VECTOR_FONT_FILENAME, 36); InitLabel(resultremindLable, 64, 113, 337, 70, "resultremindLable", "校准结果已上传,30天后可重新校准", DEFAULT_VECTOR_FONT_FILENAME, 32); resultremindLable->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); resultremindLable->SetTextColor(Color::Red()); @@ -102,7 +102,7 @@ namespace OHOS bool BPCalibrationPassView::Initbackground() { pass = new UIImageView(); - pass->SetPosition(125, 160, 200, 200); + pass->SetPosition(125, 170, 200, 200); pass->SetSrc(BPBACKPATH); group->Add(pass); return true; diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainPresenter.cpp index f285aad1a..020a31aaf 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainPresenter.cpp @@ -50,6 +50,8 @@ namespace OHOS { static constexpr uint16_t PROGRESS_VALUE_MIN = 0; static constexpr uint16_t PROGRESS_VALUE_MAX = 10; + static uint16_t passflag = 0; //第几次校准成功标志位 + static BPMainPresenter *g_pBPMainPresenter; @@ -123,7 +125,6 @@ namespace OHOS std::map> viewIdMap = { {MINDCHECKBUTTON, {BPCALIBRATIONMINDVIEW, BPVALUEVIEW}}, // 提醒界面到血压值界面 {ERRORCHECKBUTTON, {BPCALIBRATIONERRORVIEW, BPUNDERCALIBRATIONVIEW}}, // 失败界面到校准界面 - {VALUECHECKBUTTON, {BPVALUEVIEW, BPRESULTANALYSISVIEW}}, // 血压值界面到结果分析界面 }; auto it = viewIdMap.find(viewId); @@ -142,12 +143,30 @@ namespace OHOS BPModel::GetInstance()->BP_Control(BPState::BP_CALIBRATING_FIRSTTIME); BPMainView::GetInstance()->ChangeView(BPCALPOSREQVIEW, BPUNDERCALIBRATIONVIEW); } - else if (strcmp(view.GetViewId(),CALIBRATIONBUTTON) == 0) // 上次校准时间界面到二次校准界面 { BPModel::GetInstance()->BP_Control(BPState::BP_CALIBRATING_SECONDTIME); BPMainView::GetInstance()->ChangeView(BPLASTCALIBRATIONTIME, BPSECUNDERCALIBRATIONVIEW); } + else if (strcmp(view.GetViewId(), VALUECHECKBUTTON) == 0) // 血压值界面到结果分析界面 + { + BPModel::GetInstance()->BP_Control(BPState::BP_CALIBRATING_ANGLYSIS); + BPMainView::GetInstance()->ChangeView(BPVALUEVIEW, BPRESULTANALYSISVIEW); + } + else if (strcmp(view.GetViewId(), PASSCAECKBUTTON) == 0) //校准成功界面 + { + if(passflag == 0) + { + BPMainView::GetInstance()->ChangeView(BPCALIBRATIONPASSVIEW, BPLASTCALIBRATIONTIME); + passflag = 1; + } + else + { + //退出 + passflag = 0; + } + + } else if (strcmp(view.GetViewId(), "SBPLeft") == 0) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SBPLeft_BP"); diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainView.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainView.cpp index 906b8f5b1..ac232e0f1 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainView.cpp @@ -21,6 +21,7 @@ #include "bloodpressure/include/BPMainPresenter.h" #include "bloodpressure/include/BPMainView.h" +#include "bloodpressure/include/BPModel.h" #include "wearable_log.h" namespace OHOS { @@ -108,8 +109,11 @@ namespace OHOS container_->SetTouchable(true); container_->SetOnDragListener(presenter_); + if( BPModel::GetInstance()->GetCalibrationFlag() == 0) // 切换到第一个界面 ChangeView(MAX_BPVIEW, BPCALPOSREQVIEW); + else + ChangeView(MAX_BPVIEW, BPLASTCALIBRATIONTIME); // 增加按键监听 RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::BPMainPresenter::GetInstance(); 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 d0b7fe6bb..ca12659e5 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPModel.cpp @@ -45,13 +45,12 @@ namespace OHOS #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) @@ -59,6 +58,11 @@ namespace OHOS static BPModel instance; return &instance; } + int16_t BPModel::GetCalibrationFlag() + { + + return CalibrationFlag; + } // 获取当前时间戳字符串 std::string BPModel::GetCurrentTimeStr() @@ -131,6 +135,16 @@ namespace OHOS break; } + case BPState::BP_CALIBRATING_ANGLYSIS: + { + BP_StartTimer(); + ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别 + + if (Time != BP_ANLYSISI_TIME_MAX) + Time = BP_ANLYSISI_TIME_MAX; // 重置时间 + break; + } + default: /*未知状态,全部状态重置*/ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BP_Control: Invalid state"); @@ -144,26 +158,26 @@ namespace OHOS } ///////////////////////////////////////////////////////// // 机器校准收缩压与舒张压的数值 - void BPModel::BP_SetValue(BP_VALUE_TYPE type, bool set_value) + void BPModel::BP_SetValue(BP_VALUE_TYPE type, bool set_value) { - if(set_value) + if (set_value) { - if(type == BP_VALUE_TYPE::SBP) - custom_sbp++; + if (type == BP_VALUE_TYPE::SBP) + custom_sbp++; else - custom_dbp++; + custom_dbp++; } else { - if(type == BP_VALUE_TYPE::SBP) - custom_sbp--; + if (type == BP_VALUE_TYPE::SBP) + custom_sbp--; else - custom_dbp--; + custom_dbp--; } } - int16_t BPModel::GetValue(BP_VALUE_TYPE type) + int16_t BPModel::GetValue(BP_VALUE_TYPE type) { - if(type == BP_VALUE_TYPE::SBP) + if (type == BP_VALUE_TYPE::SBP) return custom_sbp; else return custom_dbp; @@ -173,7 +187,7 @@ namespace OHOS /*定时器到期时的处理*/ static void BP_TimerCallbackProc(int data) { - static uint16 CalibrationFlag = 0; + // 倒计时 Time--; @@ -182,28 +196,37 @@ namespace OHOS { BPModel::GetInstance()->BP_StopTimer(); BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL); - BPMainView *mainView = BPMainView::GetInstance(); - if (BPMainView::GetInstance() && CalibrationFlag == 0) + if (BPMainView::GetInstance() && CalibrationFlag == 0) // 第一次校准完 { BPMainView::GetInstance()->ChangeView(BPUNDERCALIBRATIONVIEW, BPCALIBRATIONMINDVIEW); CalibrationFlag++; } - else if (BPMainView::GetInstance() && CalibrationFlag == 1) + else if (BPMainView::GetInstance() && ( CalibrationFlag == 1 || CalibrationFlag == 3)) // 分析完 + { + // 校准成功 + BPMainView::GetInstance()->ChangeView(BPRESULTANALYSISVIEW, BPCALIBRATIONPASSVIEW); + // 校准失败 + + if (CalibrationFlag == 1) + CalibrationFlag++; + else + CalibrationFlag = 0; + } + else if (BPMainView::GetInstance() && BPSecUnderCalibrationView::GetInstance() && CalibrationFlag == 2) // 第二次校准完 { BPMainView::GetInstance()->ChangeView(BPSECUNDERCALIBRATIONVIEW, BPCALIBRATIONMINDVIEW); - CalibrationFlag = 0; + 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; } - BPState current_state_time = BPModel::GetInstance()->GetCurrentState(); // 根据状态处理 switch (current_state_time) @@ -241,6 +264,10 @@ namespace OHOS } break; } + case BPState::BP_CALIBRATING_ANGLYSIS: + { + break; + } default: BPModel::GetInstance()->BP_StopTimer(); -- 2.17.1