血氧增加按键控制
authorCaisking <3449750381@qq.com>
Sat, 29 Jun 2024 09:25:12 +0000 (17:25 +0800)
committerCaisking <3449750381@qq.com>
Sat, 29 Jun 2024 09:25:12 +0000 (17:25 +0800)
code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodOxygenModel.h
code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenModel.cpp
code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenView.cpp

index 1052289..01228ae 100644 (file)
@@ -1,3 +1,9 @@
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-29 16:47:41
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodOxygenModel.h
+ */
 #ifndef BLOOD_OXYGEN_MODEL_H
 #define BLOOD_OXYGEN_MODEL_H
 
@@ -6,6 +12,12 @@
 
 namespace OHOS
 {
+    // 血氧检测状态
+    enum class BloodState
+    {
+        End = 0,
+        Start,
+    };
     class BloodOxygenModel
     {
     public:
@@ -43,6 +55,8 @@ namespace OHOS
         void Blood_Stop();
         void Blood_Start();
 
+        void Blood_Control(BloodState state);
+
     private:
         bool OxygenView;
         bool BandoffView;
@@ -54,6 +68,7 @@ namespace OHOS
         uint16_t SPO2_;
         uint64_t timestamp_ms;
         int32_t wear_;
+        bool startspo2{false};
 
         uint8_t unwear_counter_;
         uint8_t valid_counter_;
index c0b2796..f02ca0f 100644 (file)
@@ -6,6 +6,8 @@
 #include "heart_blood/health_service/health_service.h"
 #include "custom_utils.h"
 extern "C" errcode_t uapi_get_timestamp_ms(uint64_t *tm);
+#include "custom_utils.h"
+#include "ppg_service.h"
 
 #define MAX_UNWARE_COUNT 30
 #define MAX_VALID_HRS_COUNT 30
@@ -38,6 +40,24 @@ namespace OHOS
     }
     /* ---------------------------------- 状态检测 ---------------------------------- */
 
+    // 血氧监控
+    void BloodOxygenModel::Blood_Control(BloodState state)
+    {
+        if (state == BloodState::End && startspo2 == true)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startspo2 End");
+            uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST;
+            send_ppg_cmd_msg(md);
+            startspo2 = false;
+        }
+        else if (state == BloodState::Start && startspo2 == false)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startspo2 Start");
+            uint8_t md = PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST;
+            send_ppg_cmd_msg(md);
+            startspo2 = true;
+        }
+    }
     void BloodOxygenModel::Blood_Start()
     {
         // 进行初始化操作
@@ -180,4 +200,5 @@ namespace OHOS
             /* -------------------------------------------------------------------------- */
         }
     }
+
 }
index 8847d76..ad78066 100644 (file)
@@ -36,7 +36,7 @@
 #include "custom_utils.h"
 #include "cywee_service.h"
 
-#define BLOODKEYABLE 0
+#define BLOODKEYABLE 1
 namespace OHOS
 {
     static constexpr uint16_t PROGRESS_VALUE_MIN = 0;
@@ -77,13 +77,6 @@ namespace OHOS
 
     BloodOxygenPresenter::~BloodOxygenPresenter()
     {
-#if BLOODKEYABLE
-        if (keyActListenr != nullptr)
-        {
-            delete keyActListenr;
-            keyActListenr = nullptr;
-        }
-#endif
         g_pMainView = nullptr;
     }
     BloodOxygenPresenter *BloodOxygenPresenter::GetInstance()
@@ -95,20 +88,6 @@ namespace OHOS
     {
         Presenter<BloodOxygenView>::OnStart();
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::On Start ");
-#if BLOODKEYABLE
-        if (keyActListenr == nullptr)
-        {
-            keyActListenr = new KeyInputListener();
-            if (keyActListenr != nullptr)
-            {
-                RootView::GetInstance()->SetOnKeyActListener(keyActListenr);
-            }
-            else
-            {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::OnStart: new KeyInputListener fail");
-            }
-        }
-#endif
     }
 
     void BloodOxygenPresenter::OnPause(void) {}
@@ -151,17 +130,18 @@ namespace OHOS
     bool BloodOxygenPresenter::OnKeyAct(UIView &view, const KeyEvent &event)
     {
 #if BLOODKEYABLE
-        WEARABLE_LOGD("", "into the view is: %s\n", typeid(view).name());
-        uint16 keyID = event.GetKeyId();
-        WEARABLE_LOGD("", "into key! keyID %u\n", keyID);
-        // 如果是power键就返回上一级
-        if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER))
+        unsigned short keyID = event.GetKeyId();
+        unsigned short keyState = event.GetState();
+        // 如果是power键,且是亮屏状态,按键释放就返回上一级
+        if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)
         {
-            // uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
-            NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+            // 关闭血氧检测
+            BloodOxygenModel::GetInstance()->Blood_Control(BloodState::End);
+            // 回退
+            NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_ZOOM);
         }
-#endif
         return true;
+#endif
     }
     /* ---------------------------------- 状态监听 ---------------------------------- */
     bool BloodOxygenPresenter::OnClick(UIView &view, const ClickEvent &event)
@@ -219,8 +199,9 @@ namespace OHOS
             {
                 BloodCheckView::GetInstance()->GetImageAnimator()->Stop();
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : false");
-                uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST;
-                send_ppg_cmd_msg(md);
+                // 关闭血氧检测
+                BloodOxygenModel::GetInstance()->Blood_Control(BloodState::End);
+
                 startspo2 = true;
             }
         }
@@ -236,8 +217,9 @@ namespace OHOS
             if (startspo2 == true)
             {
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : true");
-                uint8_t md = PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST;
-                send_ppg_cmd_msg(md);
+                // 开启血氧检测
+                BloodOxygenModel::GetInstance()->Blood_Control(BloodState::Start);
+
                 startspo2 = false;
             }
         }
@@ -300,6 +282,7 @@ namespace OHOS
             BloodOxygenModel::GetInstance()->Blood_Stop();
         }
     }
+
     void BloodOxygenPresenter::Notify(void)
     {
         ProgressNotify();
index d75edf6..5e8b9f4 100644 (file)
@@ -397,11 +397,15 @@ namespace OHOS
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnStart");
         display_time = DisplayBrightnessModel::GetInstance()->GetScreenDurationTime();
         display_api->set_screen_auto_off_timeout(300 * 1000); // 设置常亮
+
         View<BloodOxygenPresenter>::OnStart();
         if (!InitBloodView())
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::InitBloodView fail");
         }
+        // 增加按键监听
+        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::BloodOxygenPresenter::GetInstance();
+        RootView::GetInstance()->SetOnKeyActListener(keyactListener);
     }
 
     void BloodOxygenView::OnSetUpView()