统一时间戳为uint64_t
authorCaisking <3449750381@qq.com>
Tue, 19 Mar 2024 09:13:38 +0000 (17:13 +0800)
committerCaisking <3449750381@qq.com>
Tue, 19 Mar 2024 09:13:38 +0000 (17:13 +0800)
code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp
code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h
code/sdk/application/wearable/fd230app/nativeui/heart_blood/src/BloodCardView.cpp
code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartPresenter.h
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartRateView.cpp
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartView.cpp
code/sdk/drivers/peripheral/ppg/service/ppg_service.h

index 6fa2f26..f1bd27e 100644 (file)
@@ -101,6 +101,16 @@ namespace OHOS
 
         // 将数据添加到列表的最后
         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();
index d780804..a23c399 100644 (file)
@@ -47,6 +47,7 @@ namespace OHOS
         BloodOxygenData *ReadBloodOxygenData();                  // 读取血氧数据
         bool UpdateBloodOxygenData(const BloodOxygenData &data); // 更新血氧数据
         HeartRateData *ReadHeartRateData();                      // 读取心率数据
+        HeartPoints *ReadHeartRateDataList();                    // 读取心率列表
         bool UpdateHeartRateData(const HeartRateData &data);     // 更新心率数据
         bool UpdateJsonData();                                   // 更新json
     private:
index e73b2b9..467a930 100644 (file)
@@ -47,8 +47,8 @@ namespace OHOS
             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
index 0de7636..8e403a4 100644 (file)
@@ -49,8 +49,8 @@ namespace OHOS
         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);
index c69c9c4..c0ebb22 100644 (file)
@@ -136,22 +136,7 @@ extern "C"
             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
@@ -493,16 +478,17 @@ namespace OHOS
     {\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
@@ -605,14 +591,15 @@ namespace OHOS
         {\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
index f7b09ea..ef2fcdb 100644 (file)
@@ -36,16 +36,16 @@ namespace OHOS
     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)
         {
index d10236d..4cf64b2 100644 (file)
@@ -642,8 +642,10 @@ namespace OHOS
         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
@@ -653,6 +655,10 @@ namespace OHOS
         {\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
@@ -751,6 +757,7 @@ namespace OHOS
     // 刷新每秒上报的心率\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
index 1480c11..ba9f44b 100644 (file)
@@ -81,15 +81,15 @@ namespace OHOS
     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
@@ -152,15 +152,15 @@ namespace OHOS
         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
index 545e813..7869655 100644 (file)
@@ -60,7 +60,7 @@ typedef struct {
     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;