主界面:优化主界面心率脱腕的响应速度 1182/1 1182/head 1183/target/1
authorCaisking <3449750381@qq.com>
Mon, 14 Oct 2024 06:43:07 +0000 (14:43 +0800)
committerCaisking <3449750381@qq.com>
Mon, 14 Oct 2024 06:43:07 +0000 (14:43 +0800)
code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartChartPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartDetectionPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp
code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp

index ea1cf63..94cbc63 100644 (file)
@@ -136,7 +136,7 @@ public:
   void SetResult(HeartResult result);\r
   HeartResult GetResult();\r
 \r
-  void Heart_Start(void);\r
+  void Heart_Start(HeartCheck check);\r
   void Heart_Stop(void);\r
   void Heart_Save(void);\r
   void Heart_Result(void);\r
@@ -174,8 +174,7 @@ private:
   uint16_t displayheart_max = 0; // 显示最大心率\r
   uint16_t displayheart_min = 0; // 显示最小心率\r
 \r
-  uint32\r
-      timestamp_ms; // 检测时间(存(时、分),大于24小时,改为1天前,小于1分钟为刚刚)\r
+  uint32 timestamp_ms; // 检测时间(存(时、分),大于24小时,改为1天前,小于1分钟为刚刚)\r
 \r
   bool initstatus = true;\r
   bool heartstate = false;\r
index 730528b..2c2570c 100644 (file)
@@ -60,7 +60,7 @@ namespace OHOS
         Presenter<HeartChartView>::OnStart();
         if (!HeartCheckState)
         {
-            HeartModel::GetInstance()->Heart_Start();
+            HeartModel::GetInstance()->Heart_Start(HeartCheck::INITIATIVE);
             HeartCheckState = true;
         }
     }
index 8406d01..268e980 100644 (file)
@@ -50,7 +50,7 @@ namespace OHOS
         Presenter<HeartDetectionView>::OnStart();
         if (!HeartCheckState)
         {
-            HeartModel::GetInstance()->Heart_Start();
+            HeartModel::GetInstance()->Heart_Start(HeartCheck::INITIATIVE);
             HeartCheckState = true;
         }
     }
index 73d443a..f35d8df 100644 (file)
@@ -424,14 +424,16 @@ void HeartModel::Heart_Control(HeartState state, HeartCheck check) {
   }\r
 }\r
 // 开始检测\r
-void HeartModel::Heart_Start() {\r
+void HeartModel::Heart_Start(HeartCheck check) {\r
   if (!sensorstate) {\r
     displayheart = 0;\r
     SetResult(HeartResult::NOT_TESTED); // 重置检测\r
-    Heart_Control(HeartState::Start, HeartCheck::INITIATIVE);\r
+    Heart_Control(HeartState::Start, check);\r
     // ScreenTurnOn(60 * 1000); // 亮屏操作 600000ms 60秒关闭\r
     sensorstate = true;\r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始心率检测");\r
+    // 设置runtime\r
+    uapi_dev_runtime_set_heartrate_detect_status(1);\r
   }\r
 }\r
 \r
@@ -458,6 +460,9 @@ void HeartModel::Heart_Stop() {
     return;\r
   }\r
 \r
+  //设置runtime\r
+  uapi_dev_runtime_set_heartrate_detect_status(0);\r
+\r
   sensorstate = false;\r
   Heart_Result(); // 处理结果\r
   WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "本次心率检测结束");\r
@@ -561,12 +566,33 @@ void HeartModel::handleHighHeartRate() {
 }\r
 // 设置佩戴状态\r
 void HeartModel::SetWearStatus() {\r
+\r
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "佩戴状态 %d %d",\r
+                uapi_dev_runtime_get_heartrate_detect_status(),\r
+                unwear_counter_);\r
+\r
   // 如果处于训练模式,提前返回\r
-  if (uapi_dev_runtime_get_train_status() == 1)\r
+  if (uapi_dev_runtime_get_train_status() == 1 ||\r
+      uapi_dev_runtime_get_heartrate_detect_status() == 0)\r
     return;\r
+\r
+  unwear_counter_++;\r
+\r
   // 设置佩戴状态\r
-  SetResult(HeartResult::NOT_WORN);\r
-  Heart_Stop();\r
+  if (checkstate == HeartCheck::CARDCHECK) {\r
+    if (unwear_counter_ > MAX_UNWEAR_COUNT) {\r
+      if (MainViewSample::GetInstance()) {\r
+        //只有在心率卡片界面才触发\r
+        if (MainViewSample::GetInstance()->GetHorCurrentCard() == HEART_RATE) {\r
+          SetResult(HeartResult::NOT_WORN);\r
+          Heart_Stop();\r
+        }\r
+      }\r
+    }\r
+  } else {\r
+    SetResult(HeartResult::NOT_WORN);\r
+    Heart_Stop();\r
+  }\r
 }\r
 \r
 void HeartModel::UpHeartdata(uint16_t heart) {\r
index 21ec2c8..0f86863 100644 (file)
@@ -481,7 +481,7 @@ namespace OHOS
 #if HEART_RATE_CHECK_TIMEOUT
     HeartModel::GetInstance()->Heart_Control(HeartState::Start,HeartCheck::CARDCHECK);
 #else
-    HeartModel::GetInstance()->Heart_Start();
+    HeartModel::GetInstance()->Heart_Start(HeartCheck::CARDCHECK);
 #endif
     }
     /*主表盘*/