修改输入校准数无效的bug 1863/target/2 1869/1 1869/head 1870/target/1
authorCaisking <Casiking@zhihuishixun.com>
Thu, 19 Jun 2025 07:25:04 +0000 (15:25 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Thu, 19 Jun 2025 07:25:04 +0000 (15:25 +0800)
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/include/detection/BPDetectBeginView.h
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPModel.cpp

index 36e4378..7043752 100644 (file)
@@ -2,11 +2,11 @@
 #include "bloodpressure/include/BPMainPresenter.h"
 #include "bloodpressure/include/BPMainView.h"
 
-#include "bloodpressure/include/detection/BPDetectionPresenter.h"
-#include "bloodpressure/include/detection/BPDetectionView.h"
+#include "bloodpressure/include/detection/BPDetectBeginView.h"
 #include "bloodpressure/include/detection/BPDetectFirstView.h"
 #include "bloodpressure/include/detection/BPDetectSOSView.h"
-#include "bloodpressure/include/detection/BPDetectBeginView.h"
+#include "bloodpressure/include/detection/BPDetectionPresenter.h"
+#include "bloodpressure/include/detection/BPDetectionView.h"
 // #include "bloodpressure/include/BPDetectResultView.h"
 // #include "bloodpressure/include/BPDetectEndView.h"
 
 3、低血压:收缩压<90 mmHg 且 舒张压<60 mmHg。
 ----------------------------
 */
-namespace OHOS
-{
-  /**
-   * @brief Constructor for the BPModel class.
-   */
+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;
-  }
-  int16_t BPModel::GetCalibrationFlag()
-  {
-
-    return CalibrationFlag;
+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 --/--";
   }
 
-  // 获取当前时间戳字符串
-  std::string BPModel::GetCurrentTimeStr()
-  {
-    uint32_t timeStamp = 0;
+  // 将时间戳转换为 time_t 类型
+  time_t rawtime = static_cast<time_t>(timeStamp);
+  struct tm *timeinfo = localtime(&rawtime);
 
-    if (uapi_get_timestampe_ss(&timeStamp) != ERRCODE_SUCC)
-    {
-      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp");
-      return "----/--/-- \n --/--";
-    }
+  if (timeinfo == NULL) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to convert time");
+    return "----/--/-- \n --/--";
+  }
 
-    // 将时间戳转换为 time_t 类型
-    time_t rawtime = static_cast<time_t>(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);
 
-    if (timeinfo == NULL)
-    {
-      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to convert time");
-      return "----/--/-- \n --/--";
-    }
+  return std::string(buffer);
+}
 
-    // 格式化时间为字符串
-    char buffer[20]; // 格式: YYYY-MM-DD HH:MM
-    std::strftime(buffer, sizeof(buffer), "%Y-%m-%d  \n %H:%M", timeinfo);
+// 管理当前状态
+void BPModel::BP_SetState(BPState state) { current_state = state; }
+BPState BPModel::GetCurrentState() { return current_state; }
 
-    return std::string(buffer);
+// 进行传感器、定时器等控制
+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;
+  }
+  case BPState::BP_CALIBRATING_ANGLYSIS: {
+    BP_StartTimer();
+    ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
 
-  // 管理当前状态
-  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::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:
-    {
-      BP_StartTimer();
-      ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
-
-      if (Time != BP_ANLYSISI_TIME_MAX)
-        Time = BP_ANLYSISI_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);
+  default:
+    /*未知状态,全部状态重置*/
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BP_Control: Invalid state");
+    BP_SetState(BPState::BP_NORMAL);
+    BP_StopTimer();
+    Time = BP_CHECK_TIME_MAX;
+    return;
   }
-  /////////////////////////////////////////////////////////
-  // 机器校准收缩压与舒张压的数值
-  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)
-          custom_dbp++;
+  // 更新状态
+  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 (custom_dbp > 30)
-          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--;
     }
   }
-  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)
+}
+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) // 第一次校准完
     {
-      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);
-      }
-      return;
-    }
-
-    BPState current_state_time = BPModel::GetInstance()->GetCurrentState();
-    // 根据状态处理
-    switch (current_state_time)
+      BPMainView::GetInstance()->ChangeView(BPUNDERCALIBRATIONVIEW,
+                                            BPCALIBRATIONMINDVIEW);
+      CalibrationFlag++;
+    } else if (BPMainView::GetInstance() &&
+               (CalibrationFlag == 1 || CalibrationFlag == 3)) // 分析完
     {
-    case BPState::BP_NORMAL:
-      BPModel::GetInstance()->BP_StopTimer();
-      BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL);
-      return;
+      // 校准成功
+      BPMainView::GetInstance()->ChangeView(BPRESULTANALYSISVIEW,
+                                            BPCALIBRATIONPASSVIEW);
+      // 校准失败
 
-    case BPState::BP_DETECTING:
+      if (CalibrationFlag == 1)
+        CalibrationFlag++;
+      else
+        CalibrationFlag = 0;
+    } else if (BPMainView::GetInstance() &&
+               CalibrationFlag == 2) // 第二次校准完
     {
-      BPDetectBeginView *view = BPDetectBeginView::GetInstance();
-      if (view)
-      {
-        view->UpdateTimeText(Time);
-      }
-      break;
+      BPMainView::GetInstance()->ChangeView(BPSECUNDERCALIBRATIONVIEW,
+                                            BPCALIBRATIONMINDVIEW);
+      CalibrationFlag++;
+    } else if (BPDetectionView::GetInstance()) {
+      // 测试成功 -> 进入结果界面
+      BPDetectionView::GetInstance()->ChangeView(CALIBRATION_BPVIEW,
+                                                 RESULT_BPVIEW);
+      // 测试失败 -> 进入错误界面
+      //  BPDetectionView::GetInstance()->ChangeView(CALIBRATION_BPVIEW,
+      //  ERROR_BPVIEW);
     }
+    return;
+  }
 
-    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;
+  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;
+  }
 
-    default:
-      BPModel::GetInstance()->BP_StopTimer();
-      // 显示错误界面提示
-      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "current_state is error!!");
-      return;
+  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;
   }
 
-  /*
-   * @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));
+  default:
+    BPModel::GetInstance()->BP_StopTimer();
+    // 显示错误界面提示
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "current_state is error!!");
+    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;
-    }
+/*
+ * @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));
+}
 
-    /* --------------------------------- 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 开启定时器函数
+ *  @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;
+  }
 
-    /* ----------------------------- 3.将毫秒转换为系统时钟节拍数
-     * ---------------------------- */
-    int tick = osMs2Tick(interval);
+  /* --------------------------------- 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;
+  }
 
-    /* --------------------------------- 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;
+  /* ----------------------------- 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;
   }
-  /*
-   * @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;
+}
+/*
+ * @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;
   }
+}
 
 } // namespace OHOS