Merge branch 'sdk602patch0911' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0...
authorxue <2144439972@qq.com>
Thu, 19 Jun 2025 08:20:22 +0000 (16:20 +0800)
committerxue <2144439972@qq.com>
Thu, 19 Jun 2025 08:20:22 +0000 (16:20 +0800)
1  2 
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPModel.cpp

  3、低血压:收缩压<90 mmHg 且 舒张压<60 mmHg。
  ----------------------------
  */
 -namespace OHOS {
 +namespace OHOS
 +{
-   /**
-    * @brief Constructor for the BPModel class.
-    */
+ /**
+  * @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; }
 -
 -// 获取当前时间戳字符串
 -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 --/--";
 +  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;
-   }
++  int16_t BPModel::GetCalibrationFlag() { return CalibrationFlag; }
  
 -  // 将时间戳转换为 time_t 类型
 -  time_t rawtime = static_cast<time_t>(timeStamp);
 -  struct tm *timeinfo = localtime(&rawtime);
 +  // 获取当前时间戳字符串
 +  std::string BPModel::GetCurrentTimeStr()
 +  {
 +    uint32_t timeStamp = 0;
  
 -  if (timeinfo == NULL) {
 -    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to convert time");
 -    return "----/--/-- \n --/--";
 -  }
 +    if (uapi_get_timestampe_ss(&timeStamp) != ERRCODE_SUCC)
 +    {
 +      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp");
 +      return "----/--/-- \n --/--";
 +    }
  
 -  // 格式化时间为字符串
 -  char buffer[20]; // 格式: YYYY-MM-DD HH:MM
 -  std::strftime(buffer, sizeof(buffer), "%Y-%m-%d  \n %H:%M", timeinfo);
 +    // 将时间戳转换为 time_t 类型
 +    time_t rawtime = static_cast<time_t>(timeStamp);
 +    struct tm *timeinfo = localtime(&rawtime);
  
 -  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; }
 +    // 格式化时间为字符串
 +    char buffer[20]; // 格式: YYYY-MM-DD HH:MM
 +    std::strftime(buffer, sizeof(buffer), "%Y-%m-%d  \n %H:%M", timeinfo);
  
 -// 进行传感器、定时器等控制
 -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;
 +    return std::string(buffer);
    }
 -  case BPState::BP_CALIBRATING_ANGLYSIS: {
 -    BP_StartTimer();
 -    ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
  
 -    if (Time != BP_ANLYSISI_TIME_MAX)
 -      Time = BP_ANLYSISI_TIME_MAX; // 重置时间
 -    break;
 -  }
 +  // 管理当前状态
 +  void BPModel::BP_SetState(BPState state) { current_state = state; }
 +  BPState BPModel::GetCurrentState() { return current_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;
 -  }
 -  // 更新状态
 -  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 (type == BP_VALUE_TYPE::DBP) {
 -      if (custom_dbp > 30)
 -        custom_dbp--;
 +  // 进行传感器、定时器等控制
 +  void BPModel::BP_Control(BPState state)
 +  {
 +    if (state == current_state)
 +    {
-       WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BP_Control: Already in current state");
++      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
++                    "BP_Control: Already in current state");
 +      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();
 -    BPModel::GetInstance()->BP_SetState(BPState::BP_NORMAL);
 -    if (BPMainView::GetInstance() && CalibrationFlag == 0) // 第一次校准完
 +    switch (state)
      {
 -      BPMainView::GetInstance()->ChangeView(BPUNDERCALIBRATIONVIEW,
 -                                            BPCALIBRATIONMINDVIEW);
 -      CalibrationFlag++;
 -    } else if (BPMainView::GetInstance() &&
 -               (CalibrationFlag == 1 || CalibrationFlag == 3)) // 分析完
 +    case BPState::BP_NORMAL:
      {
 -      // 校准成功
 -      BPMainView::GetInstance()->ChangeView(BPRESULTANALYSISVIEW,
 -                                            BPCALIBRATIONPASSVIEW);
 -      // 校准失败
 -
 -      if (CalibrationFlag == 1)
 -        CalibrationFlag++;
 -      else
 -        CalibrationFlag = 0;
 -    } else if (BPMainView::GetInstance() &&
 -               CalibrationFlag == 2) // 第二次校准完
 +      /*
 +       关闭定时器
 +       关闭传感器
 +       关闭常亮
 +     */
 +      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:
      {
 -      BPMainView::GetInstance()->ChangeView(BPSECUNDERCALIBRATIONVIEW,
 -                                            BPCALIBRATIONMINDVIEW);
 -      CalibrationFlag++;
 -    } else if (BPDetectionView::GetInstance()) {
 -      // 测试成功 -> 进入结果界面
 -      BPDetectionView::GetInstance()->ChangeView(CALIBRATION_BPVIEW,
 -                                                 RESULT_BPVIEW);
 -      // 测试失败 -> 进入错误界面
 -      //  BPDetectionView::GetInstance()->ChangeView(CALIBRATION_BPVIEW,
 -      //  ERROR_BPVIEW);
 +      /*
 +        开启定时器
 +        开启传感器
 +        开启常亮
 +      */
 +      BP_StartTimer();
 +      ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
 +
 +      if (Time != BP_CHECK_TIME_MAX)
 +        Time = BP_CHECK_TIME_MAX; // 重置时间
 +
 +      break;
      }
 -    return;
 -  }
 +    case BPState::BP_CALIBRATING_ANGLYSIS:
 +    {
 +      BP_StartTimer();
 +      ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
  
 -  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);
 +      if (Time != BP_ANLYSISI_TIME_MAX)
 +        Time = BP_ANLYSISI_TIME_MAX; // 重置时间
 +      break;
      }
 -    break;
 -  }
  
 -  case BPState::BP_CALIBRATING_FIRSTTIME: {
 -    BPUnderCalibrationView *view = BPUnderCalibrationView::GetInstance();
 -    if (view) {
 -      view->UpdateTimeText(Time);
 +    default:
 +      /*未知状态,全部状态重置*/
 +      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BP_Control: Invalid state");
 +      BP_SetState(BPState::BP_NORMAL);
 +      BP_StopTimer();
 +      Time = BP_CHECK_TIME_MAX;
 +      return;
      }
 -    break;
 +    // 更新状态
 +    BP_SetState(state);
    }
 -  case BPState::BP_CALIBRATING_SECONDTIME: {
 -    BPSecUnderCalibrationView *view = BPSecUnderCalibrationView::GetInstance();
 -    if (view) {
 -      view->UpdateTimeText(Time);
 +  /////////////////////////////////////////////////////////
 +  // 机器校准收缩压与舒张压的数值
 +  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)
++      }
++      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)
++      }
++      else if (type == BP_VALUE_TYPE::DBP)
++      {
++        if (custom_dbp > 30)
 +          custom_dbp--;
++      }
      }
 -    break;
    }
 -  case BPState::BP_CALIBRATING_ANGLYSIS: {
 -    break;
 +  int16_t BPModel::GetValue(BP_VALUE_TYPE type)
 +  {
 +    if (type == BP_VALUE_TYPE::SBP)
 +      return custom_sbp;
 +    else
 +      return custom_dbp;
    }
 +  ///////////////////////////////////////////////////////////////////////////////////////
  
 -  default:
 -    BPModel::GetInstance()->BP_StopTimer();
 -    // 显示错误界面提示
 -    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "current_state is error!!");
 -    return;
 -  }
 -}
 +  /*定时器到期时的处理*/
 +  static void BP_TimerCallbackProc(int data)
 +  {
  
 -/*
 - * @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));
 -}
 +    // 倒计时
 +    Time--;
 +    // 提前检查无效时间
-     if (Time <= 0)
++    if (Time < 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);
++        //  BPDetectionView::GetInstance()->ChangeView(CALIBRATION_BPVIEW,
++        //  ERROR_BPVIEW);
 +      }
 +      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;
 +    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;
 +    }
 +
 +    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;
 +    }
 +
 +    default:
 +      BPModel::GetInstance()->BP_StopTimer();
 +      // 显示错误界面提示
 +      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "current_state is error!!");
 +      return;
 +    }
    }
  
 -  /* --------------------------------- 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 回调函数
 +   */
 +  static void BP_TimerCallback(int data)
 +  {
 +    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BP_TimerCallback %d", data);
 +    GraphicService::GetInstance()->PostGraphicEvent(
 +        std::bind(BP_TimerCallbackProc, data));
    }
  
 -  /* ----------------------------- 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);
 +  /*
 +   *  @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;
 +    }
 +
 +    /* --------------------------------- 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;
 +    }
 +
 +    /* ----------------------------- 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;
      }
 -    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);
 +  /*
 +   * @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;
      }
 -    g_timer = nullptr;
    }
 -}
  
  } // namespace OHOS