From: xue <2144439972@qq.com> Date: Fri, 11 Jul 2025 11:47:17 +0000 (+0800) Subject: 完善校准血压计值逻辑 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=14e14362236141c1325e73057c8dda4079d14850;p=mirrors%2FFD230.git 完善校准血压计值逻辑 --- 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 8bb7c2465..e3a423b63 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPMainPresenter.cpp @@ -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); 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 563d5358f..a329e6422 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodpressure/src/BPModel.cpp @@ -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(temp_sbp); + *sbp = temp_sbp; } else { - *sbp = 0; // 默认值 + *sbp = 0; } if (temp_dbp >= 0 && temp_dbp <= UINT8_MAX) { - *dbp = static_cast(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(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();