#include "bloodpressure/include/BPModel.h"
#include "bloodpressure/include/BPMainPresenter.h"
-#include "DialModelSPO2.h"
-#include "wearable_log.h"
#include "heart_blood/health_service/health_service.h"
-#include "custom_utils.h"
+#include "wearable_log.h"
extern "C" errcode_t uapi_get_timestamp_ms(uint32_t *tm);
-#include "custom_utils.h"
-#include "ppg_service.h"
-#include "ConfigModel.h"
#include "AppViewIDs.h"
+#include "ConfigModel.h"
#include "NativeAbility.h"
+
#include "battery_hal.h"
-// #include "heart_blood/BloodCardView.h"
-#include "MainViewSample.h"
+#include "custom_utils.h"
+#include "ppg_service.h"
-#include <custom_save_runtime.h>
#define MAX_UNWARE_COUNT 10
#define MAX_VALID_SPO2_COUNT 30
#define MAX_DISVALID_SPO2_COUNT 100
-namespace OHOS
-{
- /**
- * @brief Constructor for the BPModel class.
- */
- BPModel::BPModel()
- {
- // BPData *data = HealthService::GetInstance()->ReadBPData();
- // if (data)
- // {
- // currentspo2 = data->SPO2;
- // timestamp_ms = data->timestamp;
- // // 更新表盘血氧数据
- // DialModelSPO2::GetInstance()->UpdateSPO2(currentspo2);
- // delete data;
- // }
- // else
- // {
- currentspo2 = 0;
- timestamp_ms = 0;
- // }
- }
- BPModel::~BPModel() {}
- BPModel *BPModel::GetInstance(void)
- {
- static BPModel instance;
- return &instance;
- }
- /* ---------------------------------- 状态检测 ---------------------------------- */
-
- void BPModel::ClearDisplayData()
- {
- // currentspo2 = 0;
- // timestamp_ms = 0;
- // 不需要清空
- }
-
- // 血氧监控
- void BPModel::BP_Control(BPState state)
- {
- // if (state == BPState::End && startspo2 == true)
- // {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startspo2 End");
- // uint16_t md = PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST;
- // send_ppg_cmd_msg(md);
- // startspo2 = false;
- // uapi_save_runtime_log(RUNTIME_LOG_OXYGEN_MEASURE_END);
- // }
- // else if (state == BPState::Start && startspo2 == false)
- // {
- // /*充电状态下不进行检测*/
- // bool isCharging = get_charge_stat(); // 获取充电状态
- // if (isCharging)
- // {
- // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "充电不能检测");
- // return;
- // }
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startspo2 Start");
- // uint16_t md = PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST;
- // send_ppg_cmd_msg(md);
- // startspo2 = true;
-
- // uapi_save_runtime_log(RUNTIME_LOG_OXYGEN_MEASURE);
- // }
- }
-
- uint16_t BPModel::GetSPO2data()
- {
- return currentspo2;
- }
-
- uint16_t BPModel::GetShowSPO2data()
- {
- return displayspo2;
- }
-
- uint32_t BPModel::GetCheckTime()
- {
- return timestamp_ms;
- }
-
- void BPModel::SetCheckTime(uint32_t time)
- {
- timestamp_ms = time;
- }
- void BPModel::SetMain(BPMain result)
- {
- bloodresult_ = result;
- }
- BPMain BPModel::GetMain()
- {
- return bloodresult_;
- }
-
- // 开始检测
- void BPModel::BP_Start()
- {
- // displayspo2 = 0;
- // SetMain(BPMain::NOT_TESTED); // 成功检测
- // // 进行初始化操作
- // if (!sensorstate)
- // {
- // BP_Control(BPState::Start);
- // sensorstate = true;
- // }
- }
-
- // 结束检测
- void BPModel::BP_Stop()
- {
- // valid_counter_ = 0;
- // disvalid_counter_ = 0;
- // unwear_counter_ = 0;
-
- // if (sensorstate)
- // {
- // BP_Control(BPState::End);
- // sensorstate = false;
- // BP_Main(); // 处理结果
- // }
- }
-
- // 保存检测数据
- void BPModel::BP_Save()
- {
-// uint32_t timestamp = BPMainPresenter::GetInstance()->GetCurrentTime();
-// SetCheckTime(timestamp);
-// #if MSG_SAVE_TEST
-// BPData data;
-// data.SPO2 = currentspo2;
-// data.timestamp = timestamp_ms;
-// HealthService::GetInstance()->UpdateHealthData(data);
-// #else
-// HealthService::GetInstance()->send_blood_save();
-// #endif
- }
-
- // 显示检测结果// 显示检测结果
- void BPModel::BP_Main()
- {
- // uint16_t MiniBP = ConfigModel::GetInstance()->get_configData_int(ConfigModel::CONFIGMODEL_ITEM_OXYGEN_THRESHOLD_VALUE);
-
- // // 检查当前血氧值并设置结果 需要检测成功
- // if(bloodresult_ == BPMain::SUCCESS){
- // if (currentspo2 < MiniBP && currentspo2 != 0)
- // {
- // // 测量结果小于最小血氧值
- // bloodresult_ = BPMain::LOW_RESULT;
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 低结果情况, currentspo2 = %d, MiniBP = %d", currentspo2, MiniBP);
- // }
- // }
+/*
+----------------------------
+收缩压:DBP
+舒张压:SBP
+血压:Blood Pressure(BP)
+高血压:Hypertension
+低血压:Hypotension
+----------------------------
+血压测量标准:
+1、正常血压:收缩压(高压)<120 mmHg 且 舒张压(低压)<80 mmHg。
+2、高血压:收缩压≥140 mmHg 或 舒张压≥90 mmHg。
+3、低血压:收缩压<90 mmHg 且 舒张压<60 mmHg。
+----------------------------
+*/
+namespace OHOS {
+/**
+ * @brief Constructor for the BPModel class.
+ */
+BPModel::BPModel() {}
+BPModel::~BPModel() {}
+BPModel *BPModel::GetInstance(void) {
+ static BPModel instance;
+ return &instance;
+}
- // // 根据结果进行处理
- // switch (bloodresult_)
- // {
- // case BPMain::SUCCESS:
- // {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 成功");
- // BP_Save();
- // NativeAbility::GetInstance().Back(); // 成功
- // break;
- // }
- // case BPMain::NOT_WORN: // 未佩戴状态
- // {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 未佩戴状态");
- // NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL);
- // break;
- // }
- // case BPMain::TIMEOUT: // 超时情况
- // {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 超时情况");
- // NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL);
- // break;
- // }
- // case BPMain::LOW_RESULT: // 低结果情况
- // {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 低结果情况");
- // HealthState healthState;
- // healthState.checkType = BP_CHECK;
- // healthState.resultStatus = LOW;
- // healthState.checkMain = MiniBP;
- // HealthService::GetInstance()->SetHealthCurrent(healthState);
- // //保存异常数据
- // BP_Save();
- // NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID);
- // break;
- // }
- // case BPMain::INVALID_DATA: // 无效数据情况
- // {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 无效数据情况");
- // NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL);
- // break;
- // }
- // default:
- // {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 未知状态");
- // break;
- // }
- // }
- }
- // 更新佩戴状态
- void BPModel::SetWearStatus(int32_t wear)
- {
- // // 设置佩戴状态
- // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BPModel Weartest::%d", wear);
- // //开启检测才对佩戴进行监听
- // if (sensorstate)
- // {
- // // 计数更新
- // if (wear_ != 1 && wear != 1)
- // {
- // unwear_counter_++; // 佩戴错误计时器计数
- // }
- // else
- // {
- // unwear_counter_ = 0; // 佩戴正常情况下清零计数器
- // }
- // wear_ = wear;
- // // 检查是否达到了最大未佩戴计数限制
- // if (unwear_counter_ >= MAX_UNWARE_COUNT)
- // {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 未佩戴计数最大 unwear_counter: %d", unwear_counter_);
- // SetMain(BPMain::NOT_WORN);
- // BP_Stop();
- // }
- // }
- }
+//获取当前时间戳字符串
+std::string BPModel::GetCurrentTimeStr() {
+ uint32_t timeStamp = 0;
- // 更新SPO2数据
- void BPModel::UpSPO2data(uint8_t spo2)
- {
- // displayspo2 = spo2;
+ if (uapi_get_timestamp_ms(&timeStamp) != ERRCODE_SUCC) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp");
+ return "----/--/-- /n --/--";
+ }
- // // 处理有效与无效计数
- // if (displayspo2 != 0)
- // {
- // currentspo2 = displayspo2; // 更新 currentspo2
- // valid_counter_++; // 增加有效计数器
- // disvalid_counter_ = 0; // 清空无效计数器
- // }
- // else
- // {
- // disvalid_counter_++; // 增加无效计数器
- // valid_counter_ = 0; // 清零有效计数器
- // }
+ // 将时间戳转换为 time_t 类型
+ time_t rawtime = static_cast<time_t>(timeStamp);
+ struct tm *timeinfo = localtime(&rawtime);
- // // 检查无效计数器是否达标
- // if (disvalid_counter_ >= MAX_DISVALID_SPO2_COUNT)
- // {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 无效数达标 disvalid_counter: %d", disvalid_counter_);
- // SetMain(BPMain::INVALID_DATA); // 无效数达标
- // BP_Stop();
- // }
+ if (timeinfo == NULL) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to convert time");
+ return "----/--/-- /n --/--";
+ }
- // // 检查有效计数器是否达标
- // if (valid_counter_ >= MAX_VALID_SPO2_COUNT)
- // {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 成功 valid_counter: %d currentspo2: %d", valid_counter_, currentspo2);
- // SetMain(BPMain::SUCCESS); // 成功检测
- // BP_Stop();
- // }
- }
+ // 格式化时间为字符串
+ char buffer[20]; // 格式: YYYY-MM-DD HH:MM
+ std::strftime(buffer, sizeof(buffer), "%Y-%m-%d /n %H:%M", timeinfo);
- // 更新血氧数据
- void BPModel::CleanAllData(void)
- {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Nextday!");
- // if (MainViewSample::GetInstance() != nullptr && BPCardView::GetInstance() != nullptr)
- // {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "更新主界面血氧卡片");
- // BPCardView::GetInstance()->UpSPO2Text();
- // }
- if (BPMainView::GetInstance() != nullptr)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "更新测量血氧卡片");
- // BPMainView::GetInstance()->UpSPO2Text();
- }
- }
+ return std::string(buffer);
}
+} // namespace OHOS