血氧:增加读写锁状态
authorCaisking <3449750381@qq.com>
Wed, 2 Oct 2024 08:54:39 +0000 (16:54 +0800)
committerSnickerSun <snickersun@163.com>
Thu, 10 Oct 2024 07:08:46 +0000 (15:08 +0800)
code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp
code/sdk/drivers/peripheral/utils/custom_runtime.c

index 2eb5eb0..ddeb375 100644 (file)
@@ -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 <cstdint>
-#include <ctime>
+#include "custom_runtime.h"
 #include <fstream>
 #include <iostream>
 #include <sstream>
 #include <string>
-#include <sys/stat.h>
-namespace OHOS {
-extern "C" {
-void save_heart_data() {
-  printf("save_heart_data\r\n");
-  OHOS::HealthService::GetInstance()->SaveDailyHeartRate();
-  return;
-}
-}
+#include <cstdint>
+#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;  
     }
 
     // 存储心率
index 5d10349..b59b374 100644 (file)
@@ -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;
 }