二次校准,校准分析界面切换逻辑修改 1864/1
authorxue <2144439972@qq.com>
Wed, 18 Jun 2025 08:34:39 +0000 (16:34 +0800)
committerxue <2144439972@qq.com>
Wed, 18 Jun 2025 08:34:39 +0000 (16:34 +0800)
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/BPModel.h
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalibrationErrorView.cpp
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPCalibrationPassView.cpp
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainView.cpp
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPModel.cpp

index af6ede5..357f7a9 100644 (file)
@@ -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();
   //当前状态管理
index f79fec7..3c05a61 100644 (file)
@@ -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;
index fca6f42..d7e6a19 100644 (file)
@@ -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;
index f285aad..020a31a 100644 (file)
@@ -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<std::string, std::pair<int16_t, int16_t>> 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");
index 906b8f5..ac232e0 100644 (file)
@@ -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();
index d0b7fe6..ca12659 100644 (file)
@@ -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();