完善校准血压计值逻辑
authorxue <2144439972@qq.com>
Fri, 11 Jul 2025 11:47:17 +0000 (19:47 +0800)
committerxue <2144439972@qq.com>
Fri, 11 Jul 2025 11:47:17 +0000 (19:47 +0800)
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPModel.cpp

index 8bb7c24..e3a423b 100644 (file)
@@ -148,10 +148,11 @@ namespace OHOS
         }
         else if (strcmp(view.GetViewId(), ERRORCHECKBUTTON) == 0) // 失败界面到提醒界面
         {
-             BPMainView::GetInstance()->ChangeView(BPCALIBRATIONMINDVIEW, BPRESULTANALYSISVIEW);
+            BPMainView::GetInstance()->ChangeView(BPCALIBRATIONMINDVIEW, BPRESULTANALYSISVIEW);
         }
         else if (strcmp(view.GetViewId(), VALUECHECKBUTTON) == 0) // 血压值界面到校准界面
         {
+            BPModel::GetInstance()->BP_CALIBTATION(); // 参数值传入接口
             if (BPModel::GetInstance()->GetCalibrationFlag() == 0) // 第一次校准
             {
                 BPModel::GetInstance()->BP_Control(BPState::BP_CALIBRATING_FIRSTTIME);
index 563d535..a329e64 100644 (file)
@@ -407,23 +407,26 @@ namespace OHOS
   // 测量结束状态处理
   void BPModel::BPControlStopMeasure()
   {
-    if (lastData.last_check_sbp_value >= 140 || lastData.last_check_dbp_value >= 90) // 高血压:收缩压≥140 mmHg 或 舒张压≥90 mmHg。
+    if (bp_resullt == BPRESULT::SUCCESS)
     {
-      BP_SetResultState(BPRESULT::HIGH_RESULT);
-      UpdateHealthData(lastData, BP_STORAGE_TYPE::TODAY_DATA);        // 存储到文件
-      UpdateHealthData(lastData, BP_STORAGE_TYPE::LAST_MEASURE_DATA); // 存储上次测量数据
-    }
-    else if (lastData.last_check_sbp_value < 90 || lastData.last_check_dbp_value < 60) // 低血压:收缩压<90 mmHg 且 舒张压<60 mmHg。
-    {
-      BP_SetResultState(BPRESULT::LOW_RESULT);
-      UpdateHealthData(lastData, BP_STORAGE_TYPE::TODAY_DATA);
-      UpdateHealthData(lastData, BP_STORAGE_TYPE::LAST_MEASURE_DATA);
-    }
-    else if (lastData.last_check_sbp_value < 120 || lastData.last_check_dbp_value < 80) // 正常血压:收缩压(高压)<120 mmHg 且 舒张压(低压)<80 mmHg。
-    {
-      BP_SetResultState(BPRESULT::SUCCESS);
-      UpdateHealthData(lastData, BP_STORAGE_TYPE::TODAY_DATA);
-      UpdateHealthData(lastData, BP_STORAGE_TYPE::LAST_MEASURE_DATA);
+      if (lastData.last_check_sbp_value >= 140 || lastData.last_check_dbp_value >= 90) // 高血压:收缩压≥140 mmHg 或 舒张压≥90 mmHg。
+      {
+        BP_SetResultState(BPRESULT::HIGH_RESULT);
+        UpdateHealthData(lastData, BP_STORAGE_TYPE::TODAY_DATA);        // 存储到文件
+        UpdateHealthData(lastData, BP_STORAGE_TYPE::LAST_MEASURE_DATA); // 存储上次测量数据
+      }
+      else if (lastData.last_check_sbp_value < 90 || lastData.last_check_dbp_value < 60) // 低血压:收缩压<90 mmHg 且 舒张压<60 mmHg。
+      {
+        BP_SetResultState(BPRESULT::LOW_RESULT);
+        UpdateHealthData(lastData, BP_STORAGE_TYPE::TODAY_DATA);
+        UpdateHealthData(lastData, BP_STORAGE_TYPE::LAST_MEASURE_DATA);
+      }
+      else if (lastData.last_check_sbp_value < 120 || lastData.last_check_dbp_value < 80) // 正常血压:收缩压(高压)<120 mmHg 且 舒张压(低压)<80 mmHg。
+      {
+        BP_SetResultState(BPRESULT::SUCCESS);
+        UpdateHealthData(lastData, BP_STORAGE_TYPE::TODAY_DATA);
+        UpdateHealthData(lastData, BP_STORAGE_TYPE::LAST_MEASURE_DATA);
+      }
     }
     else // 数据异常
     {
@@ -472,15 +475,17 @@ namespace OHOS
   // 校准分析状态处理
   void BPModel::BPControlCalibratingAnalysis()
   {
-    BP_StartTimer();
-    ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
     if (Time != BP_ANLYSISI_TIME_MAX)
       Time = BP_ANLYSISI_TIME_MAX; // 重置时间
+    CalibrationresultFlag = false; // 重置校准结果判断标志位
+    BP_StartTimer();
+    ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
   }
   // 压力测量状态处理
   void BPModel::BPControlStressMeasure()
   {
     BP_StartTimer();
+    BP_SetResultState(BPRESULT::NOT_TESTED);  // 重置测量结果标志位
     ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
 
     if (Time != BP_CHECK_TIME_MAX)
@@ -635,29 +640,43 @@ namespace OHOS
   void BPModel::BP_GetData(uint8_t *sbp, uint8_t *dbp)
   {
 #ifdef ENABLE_BN02
+    // 打印指针地址(调试用)
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BP_GetData: input pointers - sbp=%p, dbp=%p", sbp, dbp);
+
     if (sbp && dbp)
     {
+      // 打印调用前的值(如果有)
+      WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BP_GetData: before call - sbp=%d, dbp=%d", *sbp, *dbp);
+
       int temp_sbp = 0, temp_dbp = 0;
       bp_get_data(&temp_sbp, &temp_dbp);
 
-      // 添加范围检查,避免数据截断
+      // 范围检查与赋值
       if (temp_sbp >= 0 && temp_sbp <= UINT8_MAX)
       {
-        *sbp = static_cast<uint8_t>(temp_sbp);
+        *sbp = temp_sbp;
       }
       else
       {
-        *sbp = 0; // 默认值
+        *sbp = 0;
       }
 
       if (temp_dbp >= 0 && temp_dbp <= UINT8_MAX)
       {
-        *dbp = static_cast<uint8_t>(temp_dbp);
+        *dbp = temp_dbp;
       }
       else
       {
         *dbp = 0;
       }
+
+      // 打印处理后的值
+      WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BP_GetData: after call - sbp=%d, dbp=%d", *sbp, *dbp);
+    }
+    else
+    {
+      // 记录错误:调用者传入了空指针
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BP_GetData: invalid input! sbp=%p, dbp=%p", sbp, dbp);
     }
 #endif
   }
@@ -750,11 +769,11 @@ namespace OHOS
         bpMainView->ChangeView(current_state == BPState::BP_CALIBRATING_FIRSTTIME
                                    ? BPUNDERCALIBRATIONVIEW
                                    : BPSECUNDERCALIBRATIONVIEW,
-                               BPCALIBRATIONMINDVIEW);
+                               BPRESULTANALYSISVIEW);
       }
       BP_STOP();
-      BP_SetState(BPState::BP_IDLE);
       CalibrationFlag++;
+      BP_Control(BPState::BP_CALIBRATING_ANGLYSIS);
       return;
     }
     // 处理校准分析状态
@@ -762,7 +781,7 @@ namespace OHOS
     {
       if (bpMainView)
       {
-        if (1) // 获取到数据,成功
+        if (CalibrationresultFlag) // 获取到数据,成功
         {
           bpMainView->ChangeView(BPRESULTANALYSISVIEW, BPCALIBRATIONPASSVIEW);
           int configValue = static_cast<int>(GetCurrentTime());
@@ -955,16 +974,9 @@ namespace OHOS
         uint8_t sbp = 0;
         uint8_t dbp = 0;
         BP_GetData(&sbp, &dbp);
-        if (Time == 1) // 测试数据用于验证
-        {
-          lastData.timestamp = BPModel::GetCurrentTime(); // 获取时间戳
-          lastData.last_check_sbp_value = rand() % 40 + 90;
-          lastData.last_check_dbp_value = rand() % 40 + 60;
-          // 测量完成
-          bp_resullt == BPRESULT::SUCCESS;
-        }
         if (bp_resullt == BPRESULT::NOT_TESTED && sbp > 0 && dbp > 0) // 检测到数据
         {
+          WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPDetectBeginViewData  sbp:%d,dbp:%d", sbp, dbp);
           lastData.timestamp = BPModel::GetCurrentTime(); // 获取时间戳
           lastData.last_check_sbp_value = sbp;
           lastData.last_check_dbp_value = dbp;
@@ -991,10 +1003,12 @@ namespace OHOS
         BP_GetData(&sbp, &dbp);
         if (bp_resullt == BPRESULT::NOT_TESTED && sbp > 0 && dbp > 0) // 检测到数据
         {
+          WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPUnderCalibrationViewData  sbp:%d,dbp:%d", sbp, dbp);
           lastData.timestamp = BPModel::GetCurrentTime(); // 获取时间戳
           lastData.last_check_sbp_value = sbp;
           lastData.last_check_dbp_value = dbp;
           // 测量完成
+          CalibrationresultFlag = true;
           bp_resullt == BPRESULT::SUCCESS;
         }
       }
@@ -1015,10 +1029,12 @@ namespace OHOS
         BP_GetData(&sbp, &dbp);
         if (bp_resullt == BPRESULT::NOT_TESTED && sbp > 0 && dbp > 0) // 检测到数据
         {
+          WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPSecUnderCalibrationViewData  sbp:%d,dbp:%d", sbp, dbp);
           lastData.timestamp = BPModel::GetCurrentTime(); // 获取时间戳
           lastData.last_check_sbp_value = sbp;
-          lastData.last_check_dbp_value = dbp;
+          lastData.last_check_dbp_value = sbp;
           // 测量完成
+          CalibrationresultFlag = true;
           bp_resullt == BPRESULT::SUCCESS;
         }
       }
@@ -1431,14 +1447,6 @@ namespace OHOS
       {
         lastData = data; // 加载上次测量时间
       }
-#if 1
-      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-                    "timestamp:%d", data.timestamp);
-      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-                    "last_check_sbp_value:%d", data.last_check_sbp_value);
-      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-                    "last_check_dbp_value:%d", data.last_check_dbp_value);
-#endif
     }
     // 关闭文件
     ifs.close();