设置心率检测优先级控制
authorCaisking <3449750381@qq.com>
Mon, 1 Jul 2024 11:50:24 +0000 (19:50 +0800)
committerCaisking <3449750381@qq.com>
Mon, 1 Jul 2024 11:50:24 +0000 (19:50 +0800)
code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.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/main/src/MainPresenterSample.cpp
code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp

index 0283372..91cf57a 100644 (file)
@@ -81,6 +81,14 @@ extern "C"
             End = 0,\r
             Start,\r
         };\r
+        enum class HeartCheck\r
+        {\r
+            RESTSTSTE = 0, // 未检测状态\r
+            PASSIVITY,     // 被动检测心率\r
+            INITIATIVE,    // 主动检测心率\r
+            EXERCISE,      // 运动心率\r
+        };\r
+        // 控制心率检测\r
         typedef struct\r
         {\r
             uint32_t heartRatePerSec;\r
@@ -137,7 +145,7 @@ extern "C"
             void SetCheckTime(uint64_t time); // 设置本次测试完的时间\r
             uint16_t GetIndex();              // 测试点位\r
             void SetIndex(uint16_t index);\r
-            void Heart_Control(HeartState state);\r
+            void Heart_Control(HeartState state, HeartCheck check);\r
 \r
         private:\r
             HealthAllDatas healthDatas;\r
@@ -168,6 +176,8 @@ extern "C"
             uint8_t valid_counter_ = 0;    // 有效数计数器\r
             uint8_t disvalid_counter_ = 0; // 无效数计数器\r
             uint8_t unwear_counter_ = 0;   // 佩戴错误计数器\r
+\r
+            HeartCheck checkstate = HeartCheck::RESTSTSTE; // 目前检测状态\r
         };\r
     }\r
 \r
index 14dc31d..19c0f11 100644 (file)
@@ -474,14 +474,21 @@ namespace OHOS
     /* ---------------------------------- 状态检测 ---------------------------------- */\r
 \r
     // 控制心率检测\r
-    void HeartModel::Heart_Control(HeartState state)\r
+    void HeartModel::Heart_Control(HeartState state, HeartCheck check)\r
     {\r
+        if (check < checkstate)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Higher execution instruction exists");\r
+            return;\r
+        }\r
         if (state == HeartState::End && heartstate == true)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartState End");\r
             uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST;\r
             send_ppg_cmd_msg(md);\r
             heartstate = false;\r
+            // 复原检测状态\r
+            checkstate = HeartCheck::RESTSTSTE;\r
         }\r
         else if (state == HeartState::Start && heartstate == false)\r
         {\r
@@ -640,8 +647,8 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " Save %d %d", data->Heart, data->timestamp);\r
             SetCheckTime(data->timestamp);\r
             HealthService::GetInstance()->UpdateHealthData(*data);\r
-            // 更新卡片心率值\r
-            // SetHeartRatePerSec(heart);\r
+            // 关闭自动检测心率 如果有其他高级心率检测在进行,则不会进行关闭[低优先级]\r
+            HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::PASSIVITY);\r
         }\r
 #endif\r
     }\r
index bc103aa..180bc25 100644 (file)
@@ -143,7 +143,7 @@ namespace OHOS
         if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)
         {
             // 关闭心率检测
-            HeartModel::GetInstance()->Heart_Control(HeartState::End);
+            HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE);
             // 回退
             NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_ZOOM);
         }
@@ -208,7 +208,7 @@ namespace OHOS
                 HeartCheckView::GetInstance()->GetImageAnimator()->Stop();
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus false");
                 // 关闭心率检测
-                HeartModel::GetInstance()->Heart_Control(HeartState::End);
+                HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE);
                 startheart = true;
             }
         }
@@ -225,8 +225,9 @@ namespace OHOS
             if (startheart == true)
             {
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus true");
-                // 开启心率检测
-                HeartModel::GetInstance()->Heart_Control(HeartState::Start);
+                // 开启心率检测 [UI优先级最高直接打断正在检测 重新检测]
+                HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE);
+                HeartModel::GetInstance()->Heart_Control(HeartState::Start,HeartCheck::INITIATIVE);
                 startheart = false;
             }
         }
index 4b0b1dc..d2e7b35 100644 (file)
@@ -353,7 +353,7 @@ namespace OHOS
         if (previousCardId == HEART_RATE && cardId != HEART_RATE)
         {
             // 从心率卡片变为其他卡片时调用关闭心率检测的函数
-            HeartModel::GetInstance()->Heart_Control(HeartState::End);
+            HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE);
         }
 
         // 更新上一个卡片的值
@@ -362,8 +362,9 @@ namespace OHOS
         switch (cardId)
         {
         case HEART_RATE:
-            // 开启心率检测
-            HeartModel::GetInstance()->Heart_Control(HeartState::Start);
+            // 开启心率检测 [UI优先级最高直接打断正在检测 重新检测]
+            HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE);
+            HeartModel::GetInstance()->Heart_Control(HeartState::Start, HeartCheck::INITIATIVE);
             break;
 
         case COMPASS:
index 6d67e86..0b30109 100644 (file)
@@ -57,7 +57,7 @@ namespace OHOS
     {
         Time = 5;
         START_FLAG = false;
-        HeartModel::GetInstance()->Heart_Control(HeartState::End); // 关闭心率检测
+        HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); // 关闭心率检测
     }
     /* -------------------------------------------------------------------------- */
     /*定时器到期时的处理*/
@@ -78,7 +78,7 @@ namespace OHOS
                 RespiratoryTrainingModel::GetInstance().RT_StopTimer();                // 停止定时器
                 RespiratoryTrainingModel::GetInstance().AddRespiratoryTrainingTimes(); // 呼吸训练次数加1
                 p_RespiratoryTrainingView->GetRespiratoryTrainingAnimator_()->Stop();  // 关闭呼吸动画
-                HeartModel::GetInstance()->Heart_Control(HeartState::End);             // 关闭心率检测
+                HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE);             // 关闭心率检测
                 p_RespiratoryTrainingView->ChangeView(RESPIRATORYTRAINING, RESPIRATORYTRAININGCOMPLETED);
             }
             else
@@ -86,7 +86,7 @@ namespace OHOS
                 Time = ONE_MINUTE;
                 p_RespiratoryTrainingView->StartRespiratoryTraining(); // 开始呼吸训练
                 START_FLAG = true;
-                HeartModel::GetInstance()->Heart_Control(HeartState::Start); // 开启心率检测
+                HeartModel::GetInstance()->Heart_Control(HeartState::Start,HeartCheck::INITIATIVE); // 开启心率检测
             }
         }