{
time_t now = time(0);
tm *ltm = localtime(&now);
- char date[20];
- strftime(date, sizeof(date), "%Y%m%d", ltm);
+
+ char date[9]; // MM/DD/YYYY format
+ strftime(date, sizeof(date), "%m%d%Y", ltm); // Use "%m%d%Y" for MMDDYYYY format
return std::string(date);
}
// static char *JSON_F_buf=NULL;
cJSON *oxygen_root = NULL;
HealthService::HealthService()
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HealthService::HealthService");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HealthService::HealthService");
g_pHealthService = this;
}
HealthService::~HealthService()
{
if (mkdir(HEALTH_JSON_PATH, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH is error");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH is error");
return false; // Failed to create folder
}
}
{
if (mkdir(HEALTH_JSON_PATH_HEART, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH_HEART is error");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH_HEART is error");
return false; // Failed to create folder
}
}
{
if (mkdir(HEALTH_JSON_PATH_OXYGEN, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH_OXYGEN is error");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH_OXYGEN is error");
return false; // Failed to create folder
}
}
std::string GetJsonFilePath(uint8_t type)
{
std::string currentDate = GetCurrentDate();
+ const char *healthTypePath = (type == HEALTH_TYPE_HEART) ? HEALTH_JSON_PATH_HEART : HEALTH_JSON_PATH_OXYGEN;
- if (type == HEALTH_TYPE_HEART)
- {
- return std::string(HEALTH_JSON_PATH_HEART) + currentDate + ".json";
- }
- else
- {
- return std::string(HEALTH_JSON_PATH_OXYGEN) + currentDate + ".json";
- }
+ return healthTypePath + currentDate + ".json";
}
const char *GET_HEALTH_JSON_PATH_C_STR_HEART()
{
}
// 获取当天日期对应的JSON文件路径
std::string jsonFilePath = GetJsonFilePath(type);
+ printf("GetJsonFilePath:%s\r\n", jsonFilePath.c_str());
std::ifstream inFile(jsonFilePath);
- cJSON *defaultJson = NULL;
- if (!inFile.is_open())
- {
-#if 0
- // 如果文件不存在,则创建一个包含默认值的JSON文件
- if (type == HEALTH_TYPE_HEART)
- {
- defaultJson = cJSON_Parse("{\
- \"heart_latest_data\": {\
- \"value\": 0, \
- \"timestamp\": 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())
- {
- return false; // 无法创建文件
- }
- char *defaultJsonString = cJSON_Print(defaultJson);
- outFile << defaultJsonString; // 写入包含默认值的JSON对象
- outFile.close();
- cJSON_free(defaultJsonString);
- cJSON_Delete(defaultJson);
- inFile.open(jsonFilePath); // 重新打开文件
-#endif
- }
+
// 读取JSON文件内容
std::string jsonDataString((std::istreambuf_iterator<char>(inFile)), std::istreambuf_iterator<char>());
const char *jsonData = jsonDataString.c_str();
+ printf("jsonData:%s\r\n", jsonData);
if (type == HEALTH_TYPE_HEART)
{
heart_root = cJSON_Parse(jsonData);
return true;
}
-#if 0
- bool HealthService::LoadJsonData()
- {
- std::ifstream inFile(HEALTH_JSON_PATH);
- if (!inFile.is_open())
- {
- return -1;
- }
- std::string jsonDataString((std::istreambuf_iterator<char>(inFile)), std::istreambuf_iterator<char>());
- const char *jsonData = jsonDataString.c_str();
- root = cJSON_Parse(jsonData);
- return true;
- }
-#endif
+
BloodOxygenData *HealthService::ReadBloodOxygenData()
{
LoadJsonData(HEALTH_TYPE_OXYGEN);
}
if (UpdateJsonData(HEALTH_TYPE_OXYGEN) == false)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdateJsonData is error");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateJsonData is error");
cJSON_Delete(oxygen_root);
return false;
}
cJSON_Delete(oxygen_root);
return true;
}
+
HeartRateData *HealthService::ReadHeartRateData()
{
- LoadJsonData(HEALTH_TYPE_HEART);
+ if (!LoadJsonData(HEALTH_TYPE_HEART) && (heart_root == nullptr))
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData heart_root is error ");
+ return nullptr;
+ }
HeartRateData *data = new HeartRateData();
cJSON *latestData = cJSON_GetObjectItem(heart_root, "heart_latest_data");
+ // 读取心率值
data->Heart = cJSON_GetObjectItem(latestData, "value")->valueint;
- data->timestamp = cJSON_GetObjectItem(latestData, "timestamp")->valueint;
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData: value %d timestamp%d", data->Heart, data->timestamp);
+ // 读取时间戳,并转换为 uint32_t 类型
+ data->timestamp = static_cast<uint32_t>(cJSON_GetObjectItem(latestData, "timestamp")->valueint);
+ // 打印 JSON 数据
+ char *jsonStr = cJSON_Print(heart_root);
+ if (jsonStr != NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartRootJSONData: %s", jsonStr);
+ cJSON_free(jsonStr);
+ }
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData: value %d timestamp %d", data->Heart, data->timestamp);
cJSON_Delete(heart_root);
return data;
}
cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp));
cJSON_AddItemToArray(dataList, newData);
}
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateJsonData");
if (UpdateJsonData(HEALTH_TYPE_HEART) == false)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdateJsonData is error");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateJsonData is error");
cJSON_Delete(heart_root);
return false;
}
std::ofstream outFile(jsonFilePath);
if (!outFile.is_open())
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file %s", jsonFilePath.c_str());
return false;
}
- char *jsonData = NULL;
- if (type == HEALTH_TYPE_HEART)
- jsonData = cJSON_Print(heart_root);
- else
- jsonData = cJSON_Print(oxygen_root);
+ char *jsonData = NULL;
+ cJSON *root = (type == HEALTH_TYPE_HEART) ? heart_root : oxygen_root;
+ if (root == NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JSON root is NULL");
+ outFile.close();
+ return false;
+ }
+ jsonData = cJSON_Print(root);
+ printf("jsonData:%s\r\n", jsonData);
if (jsonData == NULL)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to generate JSON data");
outFile.close();
return false;
}
+
outFile << jsonData;
outFile.close();
+
cJSON_free(jsonData);
return true;
}
return;\r
}\r
int ret = broadcastApi->SubscribeTopic((IUnknown *)broadcastApi, topic, &heartSubscirber);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartSubscribeTopic ret = %d, topic = %u", ret, topic);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartSubscribeTopic ret = %d, topic = %u", ret, topic);\r
broadcastApi->Release((IUnknown *)broadcastApi);\r
}\r
\r
\r
HeartModel::HeartModel()\r
{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartModel::HeartModel()");\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartModel::HeartModel()");\r
HeartView = false;\r
BandoffView = false;\r
CheckView = false;\r
ResultView = false;\r
CheckStatus = false;\r
wearStatus = true;\r
- // 初始化心率值\r
- HeartRateData *data;\r
- data = HealthService::GetInstance()->ReadHeartRateData();\r
- Heart_ = data->Heart;\r
- TIME_ = data->timestamp;\r
- delete data;\r
}\r
\r
HeartModel::~HeartModel()\r
{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartModel::~HeartModel()");\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartModel::~HeartModel()");\r
HearDatatUnsubscribeTopic(TOPIC_EVENT_HEARTRATE_UPDATA);\r
HearDatatUnsubscribeTopic(TOPIC_EVENT_NEXTDAY_UPDATE);\r
HearDatatUnsubscribeTopic(TOPIC_EVENT_UTCTIME_UPDATE);\r
HeartRateData *data = new HeartRateData;\r
data->Heart = heart;\r
data->timestamp = HeartPresenter::GetInstance()->GetCurrentTime();\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%d %d", heart, data->timestamp);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " Save %d %d", data->Heart, data->timestamp);\r
SetCheckTime(data->timestamp);\r
HealthService::GetInstance()->UpdateHeartRateData(*data);\r
// 更新卡片心率值\r