// 将数据添加到列表的最后
cJSON *dataList = cJSON_GetObjectItem(root, "heart_data_list");
+ // 获取当前数据列表长度
+ int numData = cJSON_GetArraySize(dataList);
+
+ // 如果数据列表长度已经达到360个,不再添加新数据
+ if (numData >= 360)
+ {
+ cJSON_Delete(root);
+ return false;
+ }
+
if (dataList != NULL && cJSON_IsArray(dataList))
{
cJSON *newData = cJSON_CreateObject();
BloodOxygenData *ReadBloodOxygenData(); // 读取血氧数据
bool UpdateBloodOxygenData(const BloodOxygenData &data); // 更新血氧数据
HeartRateData *ReadHeartRateData(); // 读取心率数据
+ HeartPoints *ReadHeartRateDataList(); // 读取心率列表
bool UpdateHeartRateData(const HeartRateData &data); // 更新心率数据
bool UpdateJsonData(); // 更新json
private:
std::string bloodoxygenStr = std::to_string(spo2_);\r
bloodLabel->SetText(bloodoxygenStr.c_str());\r
// 更新时间\r
- uint32_t time = BloodOxygenPresenter::GetInstance()->GetCurrentTime();\r
- uint32_t check_time = BloodOxygenModel::GetInstance()->GetCheckTime();\r
+ uint64_t time = BloodOxygenPresenter::GetInstance()->GetCurrentTime();\r
+ uint64_t check_time = BloodOxygenModel::GetInstance()->GetCheckTime();\r
std::string TimeStr = BloodOxygenPresenter::GetInstance()->GetTDOA(time, check_time) + "检测";\r
timeLabel->SetText(TimeStr.c_str());\r
}\r
bool OnClick(UIView &view, const ClickEvent &event) override;
bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
- uint16_t GetCurrentTime();
- std::string GetTDOA(uint16_t new_time, uint16_t old_time);
+ uint64_t GetCurrentTime();
+ std::string GetTDOA(uint64_t new_time, uint64_t old_time);
private:
bool CheckPointersValue(void);
OHOS::HeartModel::GetInstance()->ClearHeartData();\r
}\r
if (request->msgId == TOPIC_EVENT_WEARSTATE_UPDATE)\r
- {\r
- uint32 wearStatus = *((uint32 *)request->data);\r
- if (wearStatus == SENSOR_WEAR_OFF)\r
- {\r
- // OHOS::HeartModel::GetInstance()->SetWearStatus(false);\r
- // OHOS::HeartModel::GetInstance()->SetHeartRatePerSec(0);\r
- // if (OHOS::MainClockView::GetInstance() != nullptr)\r
- // {\r
- // OHOS::MainClockView::GetInstance()->RefreshHeartRate(*(uint16_t *)request->data);\r
- // }\r
- }\r
- else\r
- {\r
- // OHOS::HeartModel::GetInstance()->SetWearStatus(true);\r
- }\r
- }\r
+ {}\r
}\r
\r
#ifdef __cplusplus\r
{\r
// 设置佩戴状态\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartModel Weartest::%d", wear);\r
- if (wear_ != 1 && wear !=1)\r
+ if (wear_ != 1 && wear != 1)\r
{\r
unwear_counter_++; // 佩戴错误计时器计数\r
- }else{\r
+ }\r
+ else\r
+ {\r
unwear_counter_ = 0;\r
}\r
\r
wear_ = wear;\r
\r
-\r
if (unwear_counter_ >= MAX_UNWEAR_COUNT)\r
{\r
wearStatus = false; // 计数达到10次,停止检测\r
{\r
// 结束本次测试,将最后一次有效数作为本次测量结果\r
Heart_Stop();\r
- /* -------------------------------------------------------------------------- */\r
+ // 保存心率数据\r
HeartRateData *data = new HeartRateData;\r
data->Heart = heart;\r
data->timestamp = HeartPresenter::GetInstance()->GetCurrentTime();\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%d %lld", heart, data->timestamp);\r
SetCheckTime(data->timestamp);\r
HealthService::GetInstance()->UpdateHeartRateData(*data);\r
- /* -------------------------------------------------------------------------- */\r
+ // 更新卡片心率值\r
+ //SetHeartRatePerSec(heart);\r
}\r
}\r
\r
static constexpr uint16_t PROGRESS_VALUE_MIN = 0;
static constexpr uint16_t PROGRESS_VALUE_MAX = 10;
- uint16_t HeartPresenter::GetCurrentTime()
+ uint64_t HeartPresenter::GetCurrentTime()
{
time_t now = time(0);
struct tm *tblock = localtime(&now);
- uint16_t current_time = tblock->tm_hour * 60 + tblock->tm_min;
+ uint64_t current_time = tblock->tm_hour * 60 + tblock->tm_min;
return current_time;
}
- std::string HeartPresenter::GetTDOA(uint16_t new_time, uint16_t old_time)
+ std::string HeartPresenter::GetTDOA(uint64_t new_time, uint64_t old_time)
{
if (new_time == old_time || old_time > new_time)
{
Point *rateData = HeartModel::GetInstance()->GetAveHeartRate();\r
uint16_t len = HeartModel::GetInstance()->GetAveHeartRateCount();\r
SetHeartRateData(rateData, sizeof(Point) * len);\r
+ // 展示最大,最小,最近一次心率\r
uint16_t maxRate = HeartModel::GetInstance()->GetHeartRateMax();\r
uint16_t minRate = HeartModel::GetInstance()->GetHeartRateMin();\r
+ uint16_t perRate = HeartModel::GetInstance()->GetHeartdata();\r
RefreshElectrocardiogram();\r
if (maxRate > 0 && maxRate < HEART_RATE_LIMIT_UPPER)\r
{\r
{\r
RefreshHeartRateMin(HeartModel::GetInstance()->GetHeartRateMin());\r
}\r
+ if (perRate > 0 && perRate < HEART_RATE_LIMIT_UPPER)\r
+ {\r
+ HeartModel::GetInstance()->SetHeartRatePerSec(perRate);\r
+ }\r
}\r
\r
// 刷新心率曲线\r
// 刷新每秒上报的心率\r
void HeartRateView::RefreshHeartRatePerSec(uint16_t value)\r
{\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartRateView %d", value);\r
char heartRate[NUM_4] = "--";\r
int32_t ret = 0;\r
\r
void HeartView::UpHeartText()
{
// 更新血氧数据
- uint16_t heart_ = HeartModel::GetInstance()->GetHeartdata();
+ uint64_t heart_ = HeartModel::GetInstance()->GetHeartdata();
std::string heartStr;
std::string TimeStr;
if (heart_ != 0) // 判断是否为默认数据
{
heartStr = std::to_string(heart_);
// 更新时间
- uint16_t time = HeartPresenter::GetInstance()->GetCurrentTime();
- uint16_t check_time = HeartModel::GetInstance()->GetCheckTime();
+ uint64_t time = HeartPresenter::GetInstance()->GetCurrentTime();
+ uint64_t check_time = HeartModel::GetInstance()->GetCheckTime();
TimeStr = HeartPresenter::GetInstance()->GetTDOA(time, check_time) + "检测";
}
else
titleLabel->SetRollSpeed(0);
titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, TITLE_FONT_SIZE);
/* -------------------------------------------------------------------------- */
- uint16_t heart_ = HeartModel::GetInstance()->GetHeartdata();
+ uint64_t heart_ = HeartModel::GetInstance()->GetHeartdata();
std::string heartStr;
std::string TimeStr;
if (heart_ != 0) // 判断是否为默认数据
{
heartStr = std::to_string(heart_);
// 更新时间
- uint16_t time = HeartPresenter::GetInstance()->GetCurrentTime();
- uint16_t check_time = HeartModel::GetInstance()->GetCheckTime();
+ uint64_t time = HeartPresenter::GetInstance()->GetCurrentTime();
+ uint64_t check_time = HeartModel::GetInstance()->GetCheckTime();
TimeStr = HeartPresenter::GetInstance()->GetTDOA(time, check_time) + "检测";
}
else
uint8_t mode; // 0 hrs, 1 spo2,
uint8_t status; // 0 stop, 1 testing data , 2 result
uint16_t hrs; // 心率
- uint16_t spo2; //血氧
+ uint8_t spo2; //血氧
uint64_t timestamp; //上报数据时间戳, 单位ms
}ppg_data_t;