From 5960ead4fa46f343a9e4052a51a9dcb5025f4ee2 Mon Sep 17 00:00:00 2001 From: Caisking <3449750381@qq.com> Date: Wed, 2 Oct 2024 16:54:39 +0800 Subject: [PATCH] =?utf8?q?=E8=A1=80=E6=B0=A7=EF=BC=9A=E5=A2=9E=E5=8A=A0?= =?utf8?q?=E8=AF=BB=E5=86=99=E9=94=81=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../health_service/health_service.cpp | 152 ++++++++++-------- .../drivers/peripheral/utils/custom_runtime.c | 4 +- 2 files changed, 90 insertions(+), 66 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp b/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp index 2eb5eb0dc..ddeb3753c 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp @@ -2,24 +2,28 @@ #include "bloodoxygen/include/BloodOxygenModel.h" #include "cJSON.h" #include "custom_utils.h" -#include "heartrate/include/HeartModel.h" -#include "kv_store.h" -#include "wearable_log.h" -#include -#include +#include "custom_runtime.h" #include #include #include #include -#include -namespace OHOS { -extern "C" { -void save_heart_data() { - printf("save_heart_data\r\n"); - OHOS::HealthService::GetInstance()->SaveDailyHeartRate(); - return; -} -} +#include +#include "heartrate/include/HeartModel.h" +#include "bloodoxygen/include/BloodOxygenModel.h" + +namespace OHOS +{ + extern "C" + { + void uapi_dev_runtime_set_bloodoxygen_storage_status(uint8_t status); + + void save_heart_data() + { + printf("save_heart_data\r\n"); + OHOS::HealthService::GetInstance()->SaveDailyHeartRate(); + return; + } + } static HealthService *g_pHealthService = nullptr; /*获取日期*/ @@ -252,67 +256,87 @@ bool HealthService::CreateHealthFolder() { cJSON_Delete(heart_root); return data; } + // 保存血氧数据 - bool HealthService::UpdateHealthData(const BloodOxygenData &data) - { - // 判断文件夹是否存在 - if (!CreateHealthFolder()) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file"); - return false; - } + bool HealthService::UpdateHealthData(const BloodOxygenData &data) + { + // 配置血氧存储状态 + uapi_dev_runtime_set_bloodoxygen_storage_status(1); - // 判断文件是否存在 不存在即创建 并打开以输出模式 - std::ofstream outFile(BLOOD_JSON_PATH, std::ios::trunc); - if (!outFile.is_open()) - { - // 文件创建失败 - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create or open JSON file for writing"); - return false; - } + // 判断文件夹是否存在 + if (!CreateHealthFolder()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file"); + uapi_dev_runtime_set_bloodoxygen_storage_status(0); // 恢复状态 + return false; + } - // 创建一个 JSON 对象 - cJSON *oxygen_root = cJSON_CreateObject(); - if (oxygen_root == NULL) - { - outFile.close(); - return false; - } + // 判断文件是否存在,不存在即创建并打开以输出模式 + std::ofstream outFile(BLOOD_JSON_PATH, std::ios::trunc); + if (!outFile.is_open()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create or open JSON file for writing"); + uapi_dev_runtime_set_bloodoxygen_storage_status(0); // 恢复状态 + return false; + } - cJSON_AddItemToObject(oxygen_root, "value", cJSON_CreateNumber(data.SPO2)); - cJSON_AddItemToObject(oxygen_root, "timestamp", cJSON_CreateNumber(data.timestamp)); + // 创建一个 JSON 对象 + cJSON *oxygen_root = cJSON_CreateObject(); + if (oxygen_root == NULL) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create JSON object"); + outFile.close(); + uapi_dev_runtime_set_bloodoxygen_storage_status(0); // 恢复状态 + return false; + } - char *jsonData = cJSON_Print(oxygen_root); - if (jsonData == NULL) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to generate JSON data"); - cJSON_free(oxygen_root); - outFile.close(); - return false; - } + cJSON_AddItemToObject(oxygen_root, "value", cJSON_CreateNumber(data.SPO2)); + cJSON_AddItemToObject(oxygen_root, "timestamp", cJSON_CreateNumber(data.timestamp)); - // 写入 JSON 数据到文件 - outFile << jsonData; + char *jsonData = cJSON_Print(oxygen_root); + if (jsonData == NULL) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to generate JSON data"); + cJSON_Delete(oxygen_root); // 释放内存 + outFile.close(); + uapi_dev_runtime_set_bloodoxygen_storage_status(0); // 恢复状态 + return false; + } - cJSON_free(oxygen_root); - free(jsonData); - outFile.close(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHealthData SPO2 JSON is ok"); + // 写入 JSON 数据到文件 + outFile << jsonData; - /* 存储bin文件[协议使用] */ - std::string binFilePath = GetBinFilePath(HEALTH_TYPE_OXYGEN); - FILE *fp = fopen(binFilePath.c_str(), "ab+"); - if (fp == NULL) - { - return false; - } + // 释放资源 + cJSON_Delete(oxygen_root); + free(jsonData); + outFile.close(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHealthData SPO2 JSON is ok"); + + /* 存储bin文件[协议使用] */ + std::string binFilePath = GetBinFilePath(HEALTH_TYPE_OXYGEN); + FILE *fp = fopen(binFilePath.c_str(), "ab+"); + if (fp == NULL) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open binary file for writing"); + uapi_dev_runtime_set_bloodoxygen_storage_status(0); // 恢复状态 + return false; + } - fwrite(&data.timestamp, 4, 1, fp); - fwrite(&data.SPO2, 1, 1, fp); + // 写入数据 + if (fwrite(&data.timestamp, sizeof(data.timestamp), 1, fp) != 1 || + fwrite(&data.SPO2, sizeof(data.SPO2), 1, fp) != 1) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to write data to binary file"); + fclose(fp); + uapi_dev_runtime_set_bloodoxygen_storage_status(0); // 恢复状态 + return false; + } - fclose(fp); + fclose(fp); - return true; + + uapi_dev_runtime_set_bloodoxygen_storage_status(0); // 恢复状态 + return true; } // 存储心率 diff --git a/code/sdk/drivers/peripheral/utils/custom_runtime.c b/code/sdk/drivers/peripheral/utils/custom_runtime.c index 5d10349ce..b59b37457 100644 --- a/code/sdk/drivers/peripheral/utils/custom_runtime.c +++ b/code/sdk/drivers/peripheral/utils/custom_runtime.c @@ -493,11 +493,11 @@ uint8_t uapi_dev_runtime_get_heartrate_storage_status(void) return g_runtime.lock_flag_heartrate; } //设置血氧存储 -void uapi_dev_runtime_set_blood_storage_status(uint8_t status) +void uapi_dev_runtime_set_bloodoxygen_storage_status(uint8_t status) { g_runtime.lock_flag_blood = status; } -uint8_t uapi_dev_runtime_get_blood_storage_status(void) +uint8_t uapi_dev_runtime_get_bloodoxygen_storage_status(void) { return g_runtime.lock_flag_blood; } -- 2.17.1