From f3b9048e4c10af86d62669ea0a0938d06a576752 Mon Sep 17 00:00:00 2001 From: Caisking <3449750381@qq.com> Date: Wed, 2 Oct 2024 17:05:01 +0800 Subject: [PATCH] =?utf8?q?=E5=BF=83=E7=8E=87=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 | 134 +++++++++++------- 1 file changed, 80 insertions(+), 54 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 d5c58a975..3024db358 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 @@ -19,6 +19,7 @@ namespace OHOS extern "C" { void uapi_dev_runtime_set_bloodoxygen_storage_status(uint8_t status); + void uapi_dev_runtime_set_heartrate_storage_status(uint8_t status); void save_heart_data() { @@ -362,72 +363,97 @@ namespace OHOS return true; } - // 存储心率 - bool HealthService::UpdateHealthData(const HeartRateData &data) - { - // 判断文件夹是否存在 - if (!CreateHealthFolder()) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file"); - return false; - } + //存储心率 + bool HealthService::UpdateHealthData(const HeartRateData &data) + { + // 配置心率存储状态 + uapi_dev_runtime_set_heartrate_storage_status(1); - // 判断文件是否存在 不存在即创建 并打开以输出模式 - std::ofstream outFile(HEART_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_heartrate_storage_status(0); // 恢复状态 + return false; + } - // 创建一个 JSON 对象 - cJSON *heart_root = cJSON_CreateObject(); - if (heart_root == NULL) - { - outFile.close(); - return false; - } + // 判断文件是否存在,不存在即创建并打开以输出模式 + std::ofstream outFile(HEART_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_heartrate_storage_status(0); // 恢复状态 + return false; + } + + // 创建一个 JSON 对象 + cJSON *heart_root = cJSON_CreateObject(); + if (heart_root == NULL) + { + outFile.close(); + uapi_dev_runtime_set_heartrate_storage_status(0); // 恢复状态 + return false; + } - cJSON_AddItemToObject(heart_root, "value", cJSON_CreateNumber(data.Heart)); - cJSON_AddItemToObject(heart_root, "timestamp", cJSON_CreateNumber(data.timestamp)); + cJSON_AddItemToObject(heart_root, "value", cJSON_CreateNumber(data.Heart)); + cJSON_AddItemToObject(heart_root, "timestamp", cJSON_CreateNumber(data.timestamp)); - char *jsonData = cJSON_Print(heart_root); - if (jsonData == NULL) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to generate JSON data"); - cJSON_free(heart_root); - outFile.close(); - return false; - } + char *jsonData = cJSON_Print(heart_root); + if (jsonData == NULL) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to generate JSON data"); + cJSON_Delete(heart_root); // 使用 cJSON_Delete 释放内存 + outFile.close(); + uapi_dev_runtime_set_heartrate_storage_status(0); // 恢复状态 + return false; + } - // 写入 JSON 数据到文件 - outFile << jsonData; + // 写入 JSON 数据到文件 + outFile << jsonData; - cJSON_free(heart_root); - free(jsonData); - outFile.close(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHealthData Heart JSON is ok"); + // 释放资源 + cJSON_Delete(heart_root); + free(jsonData); + outFile.close(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHealthData Heart JSON is ok"); - // 写入文件到当天历史数据 + // 写入文件到当天历史数据 UpdateHourlyHeartRate(data.timestamp, data.Heart); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHourlyHeartRate is ok"); - SaveDailyHeartRate();//进行心率历史数据文件存储 - /* 存储bin文件[协议使用] */ - std::string binFilePath = GetBinFilePath(HEALTH_TYPE_HEART); - FILE *fp = fopen(binFilePath.c_str(), "ab+"); - if (fp == NULL) - { - return false; - } + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHourlyHeartRate is ok"); + + if (!SaveDailyHeartRate()) // 进行心率历史数据文件存储 + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveDailyHeartRate failed"); + uapi_dev_runtime_set_heartrate_storage_status(0); // 恢复状态 + return false; + } + + /* 存储 bin 文件 [协议使用] */ + std::string binFilePath = GetBinFilePath(HEALTH_TYPE_HEART); + 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_heartrate_storage_status(0); // 恢复状态 + return false; + } - fwrite(&data.timestamp, 4, 1, fp); - fwrite(&data.Heart, 1, 1, fp); + // 写入数据 + if (fwrite(&data.timestamp, sizeof(data.timestamp), 1, fp) != 1 || + fwrite(&data.Heart, sizeof(data.Heart), 1, fp) != 1) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to write data to binary file"); + fclose(fp); + uapi_dev_runtime_set_heartrate_storage_status(0); // 恢复状态 + return false; + } - fclose(fp); + fclose(fp); - return true; + uapi_dev_runtime_set_heartrate_storage_status(0); // 恢复状态 + return true; } // 清空健康数据 bool HealthService::CleanHealthData() -- 2.17.1