namespace OHOS
{
static HealthService *g_pHealthService = nullptr;
- static constexpr const char *HEALTH_JSON_PATH = "/user/userdata/health/";
+ static constexpr const char *HEALTH_JSON_PATH_HEART = "/user/userdata/health/heart";
+
+ static constexpr const char *HEALTH_JSON_PATH_OXYGEN = "/user/userdata/health/oxygen";
+
std::string GetCurrentDate()
{
time_t now = time(0);
//static char *JSON_F_buf=NULL;
const char *GET_HEALTH_JSON_PATH_C_STR()
{
-
-
- return HEALTH_JSON_PATH;
+ return HEALTH_JSON_PATH_HEART;
}
- cJSON *root = NULL;
+ cJSON *heart_root = NULL;
+ cJSON *oxygen_root = NULL;
HealthService::HealthService()
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HealthService::HealthService");
bool HealthService::CreateHealthFolder()
{
struct stat info;
- if (stat(HEALTH_JSON_PATH, &info) != 0)
+ if (stat(HEALTH_JSON_PATH_HEART, &info) != 0)
+ {
+ if (mkdir(HEALTH_JSON_PATH_HEART, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
+ {
+ return false; // Failed to create folder
+ }
+ }
+ if (stat(HEALTH_JSON_PATH_OXYGEN, &info) != 0)
{
- if (mkdir(HEALTH_JSON_PATH, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
+ if (mkdir(HEALTH_JSON_PATH_OXYGEN, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
return false; // Failed to create folder
}
}
+
return true;
}
/*获取日期*/
/*生成文件*/
- std::string GetJsonFilePath()
+ std::string GetJsonFilePath(uint8_t type)
{
std::string currentDate = GetCurrentDate();
- return std::string(HEALTH_JSON_PATH) + currentDate + ".json";
+ if(type==HEALTH_TYPE_HEART)
+ {
+ return std::string(HEALTH_JSON_PATH_HEART) + currentDate + ".json";
+ }
+ else
+ {
+ return std::string(HEALTH_JSON_PATH_OXYGEN) + currentDate + ".json";
+ }
+
}
- bool HealthService::LoadJsonData()
+
+
+ bool HealthService::LoadJsonData(uint8_t type)
{
// 创建健康数据文件夹
- if (!CreateHealthFolder())
+
+ if(!CreateHealthFolder())
{
return false;
}
+
+
// 获取当天日期对应的JSON文件路径
- std::string jsonFilePath = GetJsonFilePath();
+ std::string jsonFilePath = GetJsonFilePath(type);
std::ifstream inFile(jsonFilePath);
+ cJSON *defaultJson=NULL;
if (!inFile.is_open())
{
// 如果文件不存在,则创建一个包含默认值的JSON文件
- cJSON *defaultJson = cJSON_Parse("{\
- \"spo2_latest_data\": {\
- \"oxygen_value\": 0, \
- \"timestamp\": 0 \
- }, \
- \"spo2_data_list\": [\
- {\
- \"oxygen_value\": 0, \
+ if(type==HEALTH_TYPE_HEART)
+ {
+ defaultJson = cJSON_Parse("{\
+ \"heart_latest_data\": {\
+ \"value\": 0, \
\"timestamp\": 0 \
- }\
- ], \
- \"heart_latest_data\": {\
- \"heart_value\": 0, \
- \"timestamp\": 0 \
- }, \
- \"heart_data_list\": [\
- {\
- \"heart_value\": 0, \
+ }, \
+ \"heart_data_list\": [\
+ {\
+ \"value\": 0, \
+ \"timestamp\": 0 \
+ }\
+ ]\
+ }");
+ }
+ else if(type==HEALTH_TYPE_OXYGEN)
+ {
+ defaultJson = cJSON_Parse("{\
+ \"spo2_latest_data\": {\
+ \"value\": 0, \
\"timestamp\": 0 \
- }\
- ]\
- }");
+ }, \
+ \"spo2_data_list\": [\
+ {\
+ \"value\": 0, \
+ \"timestamp\": 0 \
+ }\
+ ]\
+ }");
+ }
+
std::ofstream outFile(jsonFilePath);
if (!outFile.is_open())
{
// 读取JSON文件内容
std::string jsonDataString((std::istreambuf_iterator<char>(inFile)), std::istreambuf_iterator<char>());
const char *jsonData = jsonDataString.c_str();
- root = cJSON_Parse(jsonData);
+ if(type==HEALTH_TYPE_HEART)
+ {
+ heart_root = cJSON_Parse(jsonData);
+ }
+ if(type==HEALTH_TYPE_OXYGEN)
+ {
+ oxygen_root = cJSON_Parse(jsonData);
+ }
+
+
return true;
}
#endif
BloodOxygenData *HealthService::ReadBloodOxygenData()
{
- LoadJsonData();
+ LoadJsonData(HEALTH_TYPE_OXYGEN);
BloodOxygenData *data = new BloodOxygenData();
- cJSON *latestData = cJSON_GetObjectItem(root, "spo2_latest_data");
- data->SPO2 = cJSON_GetObjectItem(latestData, "oxygen_value")->valueint;
+ cJSON *latestData = cJSON_GetObjectItem(oxygen_root, "spo2_latest_data");
+ data->SPO2 = cJSON_GetObjectItem(latestData, "value")->valueint;
data->timestamp = cJSON_GetObjectItem(latestData, "timestamp")->valuedouble;
- cJSON_Delete(root);
+ cJSON_Delete(oxygen_root);
return data;
}
bool HealthService::UpdateBloodOxygenData(const BloodOxygenData &data)
{
- LoadJsonData();
- cJSON *latestData = cJSON_GetObjectItem(root, "spo2_latest_data");
+ LoadJsonData(HEALTH_TYPE_OXYGEN);
+ cJSON *latestData = cJSON_GetObjectItem(oxygen_root, "spo2_latest_data");
if (latestData == NULL)
{
return false;
}
- cJSON_ReplaceItemInObject(latestData, "oxygen_value", cJSON_CreateNumber(data.SPO2));
+ cJSON_ReplaceItemInObject(latestData, "value", cJSON_CreateNumber(data.SPO2));
cJSON_ReplaceItemInObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp));
// 将数据添加到列表的最后
- cJSON *dataList = cJSON_GetObjectItem(root, "spo2_data_list");
+ cJSON *dataList = cJSON_GetObjectItem(oxygen_root, "spo2_data_list");
if (dataList != NULL && cJSON_IsArray(dataList))
{
cJSON *newData = cJSON_CreateObject();
- cJSON_AddItemToObject(newData, "oxygen_value", cJSON_CreateNumber(data.SPO2));
+ cJSON_AddItemToObject(newData, "value", cJSON_CreateNumber(data.SPO2));
cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp));
cJSON_AddItemToArray(dataList, newData);
}
- if (UpdateJsonData() == false)
+ if (UpdateJsonData(HEALTH_TYPE_OXYGEN) == false)
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdateJsonData is error");
- cJSON_Delete(root);
+ cJSON_Delete(oxygen_root);
return false;
}
- cJSON_Delete(root);
+ cJSON_Delete(oxygen_root);
return true;
}
HeartRateData *HealthService::ReadHeartRateData()
{
- LoadJsonData();
+ LoadJsonData(HEALTH_TYPE_HEART);
HeartRateData *data = new HeartRateData();
- cJSON *latestData = cJSON_GetObjectItem(root, "heart_latest_data");
- data->Heart = cJSON_GetObjectItem(latestData, "heart_value")->valueint;
+ cJSON *latestData = cJSON_GetObjectItem(heart_root, "heart_latest_data");
+ data->Heart = cJSON_GetObjectItem(latestData, "value")->valueint;
data->timestamp = cJSON_GetObjectItem(latestData, "timestamp")->valuedouble;
- cJSON_Delete(root);
+ cJSON_Delete(heart_root);
return data;
}
bool HealthService::UpdateHeartRateData(const HeartRateData &data)
{
- LoadJsonData();
- cJSON *latestData = cJSON_GetObjectItem(root, "heart_latest_data");
+ LoadJsonData(HEALTH_TYPE_HEART);
+ cJSON *latestData = cJSON_GetObjectItem(heart_root, "heart_latest_data");
if (latestData == NULL)
{
return false;
}
- cJSON_ReplaceItemInObject(latestData, "heart_value", cJSON_CreateNumber(data.Heart));
+ cJSON_ReplaceItemInObject(latestData, "value", cJSON_CreateNumber(data.Heart));
cJSON_ReplaceItemInObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp));
// 将数据添加到列表的最后
- cJSON *dataList = cJSON_GetObjectItem(root, "heart_data_list");
+ cJSON *dataList = cJSON_GetObjectItem(heart_root, "heart_data_list");
// 获取当前数据列表长度
int numData = cJSON_GetArraySize(dataList);
// 如果数据列表长度已经达到360个,不再添加新数据
if (numData >= 360)
{
- cJSON_Delete(root);
+ cJSON_Delete(heart_root);
return false;
}
if (dataList != NULL && cJSON_IsArray(dataList))
{
cJSON *newData = cJSON_CreateObject();
- cJSON_AddItemToObject(newData, "heart_value", cJSON_CreateNumber(data.Heart));
+ cJSON_AddItemToObject(newData, "value", cJSON_CreateNumber(data.Heart));
cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp));
cJSON_AddItemToArray(dataList, newData);
}
- if (UpdateJsonData() == false)
+ if (UpdateJsonData(HEALTH_TYPE_HEART) == false)
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdateJsonData is error");
- cJSON_Delete(root);
+ cJSON_Delete(heart_root);
return false;
}
- cJSON_Delete(root);
+ cJSON_Delete(heart_root);
return true;
}
- bool HealthService::UpdateJsonData()
+ bool HealthService::UpdateJsonData( uint8_t type)
{
- std::string jsonFilePath = GetJsonFilePath();
+ std::string jsonFilePath = GetJsonFilePath(type);
std::ofstream outFile(jsonFilePath);
if (!outFile.is_open())
{
return false;
}
- char *jsonData = cJSON_Print(root);
+ char *jsonData=NULL;
+
+ if(type==HEALTH_TYPE_HEART)
+ jsonData = cJSON_Print(heart_root);
+ else
+ jsonData = cJSON_Print(oxygen_root);
+
if (jsonData == NULL)
{
outFile.close();
cJSON_free(jsonData);
return true;
}
+
}
\ No newline at end of file