1.UI接通血氧检测流程,可以开启服务;2.更新星空表盘,KUMI表盘
authorCaisking <3449750381@qq.com>
Wed, 28 Feb 2024 11:00:21 +0000 (19:00 +0800)
committerCaisking <3449750381@qq.com>
Wed, 28 Feb 2024 11:00:21 +0000 (19:00 +0800)
code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h
code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenView.cpp
code/sdk/application/wearable/fd230app/nativeui/screennotify/src/ui_screennotify.cpp
code/sdk/application/wearable/service/broadcast/include/broadcast_feature.h
code/sdk/application/wearable/service/broadcast/src/broadcast_implement.c
code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/KUMI.bin
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/galaxy.bin
code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp

index a68e953..41701dd 100644 (file)
@@ -65,7 +65,7 @@ typedef enum : uint16_t
     /* ---------------------------------- 测试界面 ---------------------------------- */
     VIEW_DIAL,       // 切换表盘
     VIEW_MESSAGE,    // 信息通知
-    VIEW_BLOODO,     // 血氧监测
+    VIEW_BLOOD,     // 血氧监测
     VIEW_ROTATE,     // 模拟表冠
     /* -------------------------------------------------------------------------- */
     VIEW_MAIN_TEMP,     // 体温界面(暂时不用)
index 0949112..fd3303f 100644 (file)
 #include "components/ui_label.h"
 #include "BloodBandoffView.h"
 #include "ChangeSliceListener.h"
+#include "broadcast_service.h"
+#include <fstream>
+#include "iostream"
+#include <sstream>
+#include <string>
+#include <cstdlib>
+#include <ctime>
+#include "wearable_log.h"
+#include "cmsis_os.h"
+#include "securec.h"
+#include "broadcast_service.h"
+#include "graphic_service.h"
+#include <chrono>
+#include <thread>
+#include "ppg_service.h"
+
+namespace OHOS
+{
+    static BloodOxygenPresenter *g_pMainView = nullptr;
+    static constexpr uint16_t PROGRESS_VALUE_MIN = 0;
+    static constexpr uint16_t PROGRESS_VALUE_MAX = 100;
 
-namespace OHOS {
-static BloodOxygenPresenter *g_pMainView = nullptr;
-static constexpr uint16_t PROGRESS_VALUE_MIN = 0;
-static constexpr uint16_t PROGRESS_VALUE_MAX = 100;
+    BloodOxygenPresenter::BloodOxygenPresenter()
+    {
+        count = PROGRESS_VALUE_MAX;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::new BloodOxygenPresenter");
+        g_pMainView = this;
+    }
 
-BloodOxygenPresenter::BloodOxygenPresenter()
-{
-    count = PROGRESS_VALUE_MAX;
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::new BloodOxygenPresenter");
-    g_pMainView = this;
-}
+    BloodOxygenPresenter::~BloodOxygenPresenter()
+    {
+        g_pMainView = nullptr;
+    }
 
-BloodOxygenPresenter::~BloodOxygenPresenter()
-{
-    g_pMainView = nullptr;
-}
+    BloodOxygenPresenter *BloodOxygenPresenter::GetInstance()
+    {
+        return g_pMainView;
+    }
 
-BloodOxygenPresenter* BloodOxygenPresenter::GetInstance()
-{
-    return g_pMainView;
-}
+    void BloodOxygenPresenter::OnStart()
+    {
+        Presenter<BloodOxygenView>::OnStart();
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::On Start ");
+    }
 
-void BloodOxygenPresenter::OnStart()
-{
-    Presenter<BloodOxygenView>::OnStart();
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::On Start ");
-}
+    void BloodOxygenPresenter::OnPause(void) {}
 
-void BloodOxygenPresenter::OnPause(void) {}
+    void BloodOxygenPresenter::OnResume(void) {}
 
-void BloodOxygenPresenter::OnResume(void) {}
+    void BloodOxygenPresenter::OnStop(void) {}
 
-void BloodOxygenPresenter::OnStop(void) {}
+    bool BloodOxygenPresenter::CheckPointersValue()
+    {
+        if (BloodOxygenView::GetInstance() == nullptr)
+        {
+            return false;
+        }
 
-bool BloodOxygenPresenter::CheckPointersValue()
-{
-    if (BloodOxygenView::GetInstance() == nullptr) {
-        return false;
-    }
+        if (BloodBandoffView::GetInstance() == nullptr)
+        {
+            return false;
+        }
 
-    if (BloodBandoffView::GetInstance() == nullptr) {
-        return false;
+        if (BloodOxygenModel::GetInstance() == nullptr)
+        {
+            return false;
+        }
+        return true;
     }
 
-    if (BloodOxygenModel::GetInstance() == nullptr) {
+    bool BloodOxygenPresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+        UNUSED(view);
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)
+        {
+            BloodOxygenModel::GetInstance()->SetBloodOxygenViewStatus(false);
+            BloodOxygenView::GetInstance()->GetTestButton()->SetTouchable(true);
+            NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+        }
         return false;
     }
-    return true;
-}
-
 
-bool BloodOxygenPresenter::OnDrag(UIView& view, const DragEvent& event)
-{
-    UNUSED(view);
-    if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) {
-        BloodOxygenModel::GetInstance()->SetBloodOxygenViewStatus(false);
-        BloodOxygenView::GetInstance()->GetTestButton()->SetTouchable(true);
-        NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+    bool BloodOxygenPresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        UNUSED(view);
+        UNUSED(event);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::OnClick");
+        if (CheckPointersValue() == false)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::Pointers is empty");
+            return false;
+        }
+        BloodOxygenView::GetInstance()->GetPercent()->SetText("");
+        BloodOxygenView::GetInstance()->GetBloodOxygenGroup()->SetVisible(false);
+        BloodBandoffView::GetInstance()->GetBandoffViewGroup()->SetVisible(true);
+        BloodBandoffView::GetInstance()->GetImageAnimator()->Stop();
+#ifdef SUPPORT_SPO2_NOTIFICATION
+        uint32_t md = PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST;
+        send_ppg_cmd_msg(md);
+        // 增加测试时间,大概20秒,测试期间,循环播放
+        BloodBandoffView::GetInstance()->GetImageAnimator()->SetRepeatTimes(20);
+#else
+        BloodBandoffView::GetInstance()->GetImageAnimator()->SetRepeatTimes(1);
+#endif
+        BloodBandoffView::GetInstance()->GetImageAnimator()->Start();
+        BloodOxygenModel::GetInstance()->SetBloodBandoffViewStatus(true);
+        BloodOxygenView::GetInstance()->GetTestButton()->SetTouchable(false);
+        return true;
     }
-    return false;
-}
-
 
-bool BloodOxygenPresenter::OnClick(UIView& view, const ClickEvent& event)
-{
-    UNUSED(view);
-    UNUSED(event);
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::OnClick");
-    if (CheckPointersValue() == false) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::Pointers is empty");
-        return false;
-    }
-    BloodOxygenView::GetInstance()->GetPercent()->SetText("");
-    BloodOxygenView::GetInstance()->GetBloodOxygenGroup()->SetVisible(false);
-    BloodBandoffView::GetInstance()->GetBandoffViewGroup()->SetVisible(true);
-    BloodBandoffView::GetInstance()->GetImageAnimator()->Stop();
-    BloodBandoffView::GetInstance()->GetImageAnimator()->SetRepeat(false);
-    BloodBandoffView::GetInstance()->GetImageAnimator()->Start();
-    BloodOxygenModel::GetInstance()->SetBloodBandoffViewStatus(true);
-    BloodOxygenView::GetInstance()->GetTestButton()->SetTouchable(false);
-    return true;
-}
-
-//增加按键事件
-bool BloodOxygenPresenter::OnKeyAct(UIView& view, const KeyEvent& event)
-{
-    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))
+    // 增加按键事件
+    bool BloodOxygenPresenter::OnKeyAct(UIView &view, const KeyEvent &event)
     {
-        //uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
-        NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
-    }
-    return true;
-}
-void BloodOxygenPresenter::ProgressNotify(void)
-{
-    if (CheckPointersValue() == false) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::Pointers is empty");
-        return;
+        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))
+        {
+            // uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+            NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+        }
+        return true;
     }
-
-    if (BloodOxygenModel::GetInstance()->GetBloodOxygenViewStatus() == true) {
-        count--;
-        BloodOxygenView::GetInstance()->GetCircleProgress()->SetValue(count);
-        if (count == PROGRESS_VALUE_MIN) {
-            BloodOxygenView::GetInstance()->GetPercent()->SetText("98%");
-            BloodOxygenModel::GetInstance()->SetBloodOxygenViewStatus(false);
-            count = PROGRESS_VALUE_MAX;
+    void BloodOxygenPresenter::ProgressNotify(void)
+    {
+        if (CheckPointersValue() == false)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::Pointers is empty");
+            return;
+        }
+        if (BloodOxygenModel::GetInstance()->GetBloodOxygenViewStatus() == true)
+        {
+            count--;
             BloodOxygenView::GetInstance()->GetCircleProgress()->SetValue(count);
-            BloodOxygenView::GetInstance()->GetTestButton()->SetTouchable(true);
+            if (count == PROGRESS_VALUE_MIN)
+            {
+                BloodOxygenView::GetInstance()->GetPercent()->SetText("98%");
+                BloodOxygenModel::GetInstance()->SetBloodOxygenViewStatus(false);
+                count = PROGRESS_VALUE_MAX;
+                BloodOxygenView::GetInstance()->GetCircleProgress()->SetValue(count);
+                BloodOxygenView::GetInstance()->GetTestButton()->SetTouchable(true);
+            }
         }
     }
-}
 
-void BloodOxygenPresenter::ReturnInterface()
-{
-    if (BloodOxygenModel::GetInstance()->GetBloodBandoffViewStatus() == true) {
-        if (BloodBandoffView::GetInstance()->GetImageAnimator()->GetState() == false) {
-            BloodOxygenModel::GetInstance()->SetBloodBandoffViewStatus(false);
-            BloodOxygenModel::GetInstance()->SetBloodOxygenViewStatus(true);
-
-            BloodBandoffView::GetInstance()->GetBandoffViewGroup()->SetVisible(false);
-            BloodOxygenView::GetInstance()->GetBloodOxygenGroup()->SetVisible(true);
+    void BloodOxygenPresenter::ReturnInterface()
+    {
+        if (BloodOxygenModel::GetInstance()->GetBloodBandoffViewStatus() == true)
+        {
+            if (BloodBandoffView::GetInstance()->GetImageAnimator()->GetState() == false)
+            {
+                BloodOxygenModel::GetInstance()->SetBloodBandoffViewStatus(false);
+                BloodOxygenModel::GetInstance()->SetBloodOxygenViewStatus(true);
+
+                BloodBandoffView::GetInstance()->GetBandoffViewGroup()->SetVisible(false);
+                BloodOxygenView::GetInstance()->GetBloodOxygenGroup()->SetVisible(true);
+#ifdef SUPPORT_SPO2_NOTIFICATION
+                uint32_t md = PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST;
+                send_ppg_cmd_msg(md);
+#endif
+            }
         }
     }
-}
 
-void BloodOxygenPresenter::Notify(void)
-{
-    ProgressNotify();
-    ReturnInterface();
-}
+    void BloodOxygenPresenter::Notify(void)
+    {
+        ProgressNotify();
+        ReturnInterface();
+    }
 }
\ No newline at end of file
index 2695759..a8eb34a 100644 (file)
@@ -1,421 +1,3 @@
-/*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: bloodOxygen view
- * Author:
- * Create: 2021-08-01
- */
-#if 0
-#include "BloodOxygenView.h"
-#include "BloodOxygenModel.h"
-
-namespace OHOS
-{
-    // 按钮设置
-    static constexpr uint16_t TESTBUTTON_ZERO = 0;
-    static constexpr uint16_t TESTBUTTON_X = 118;
-    static constexpr uint16_t TESTBUTTON_Y = 336;
-
-    // 进度条参数设置
-    static constexpr uint16_t CIRCLE_PROGRESS_VALUE = 100;
-    static constexpr uint16_t CIRCLE_PROGRESS_RADIUS = 43;
-    static constexpr uint16_t CIRCLE_PROGRESS_STARTANGLE = 360;
-    static constexpr uint16_t CIRCLE_PROGRESS_ENDANGLE = 0;
-    static constexpr uint16_t CIRCLE_PROGRESS_WIDTH = 10;
-    static constexpr uint16_t CIRCLE_PROGRESS_POSITION_X = 10;
-    static constexpr uint16_t CIRCLE_PROGRESS_POSITION_Y = 10;
-    static constexpr uint16_t CIRCLE_PROGRESS_CENTER_X = 195;
-    static constexpr uint16_t CIRCLE_PROGRESS_CENTER_Y = 37;
-    static constexpr uint16_t CIRCLE_PROGRESS_POSITION_WIDTH = 275;
-    static constexpr uint16_t CIRCLE_PROGRESS_POSITION_HEIGHT = 130;
-    static constexpr uint16_t CIRCLE_PROGRESS_LEFT = 10;
-    static constexpr uint16_t CIRCLE_PROGRESS_TOP = 5;
-
-    // 动态刷新设置
-    static constexpr uint16_t IMAGE_SIZE = 60;
-    static constexpr uint16_t IMAGE_POSITION_X = 186;
-    static constexpr uint16_t IMAGE_POSITION_Y = 23;
-    static constexpr uint16_t IMAGEANIMATORVIEW_SIZE = 31;
-    static constexpr uint16_t IMAGEANIMATORVIEW_SPEED = 40;
-
-    // 血氧主图设置
-    static constexpr uint16_t IMAGE_PROGRESS_POSITION_X = 176;
-    static constexpr uint16_t IMAGE_PROGRESS_POSITION_Y = 13;
-
-    // 血氧%显示
-    static constexpr uint16_t LABEL_PERCENT_POSITION_X = 258;
-    static constexpr uint16_t LABEL_PERCENT_POSITION_Y = 40;
-
-    // 血氧柱状图
-    static constexpr int16 VIEW_MAX_X = 415;
-    static constexpr int16 VIEW_MIN_X = 35;
-    static constexpr int16 VIEW_MAX_Y = 150;
-    static constexpr int16 VIEW_MIN_Y = 0;
-    static constexpr int16 VIEW_WIDTH = 7;
-    static constexpr int16 VIEW_HEIGHT = 300;
-    static constexpr uint16_t VIEW_BACKGROUND_OPA = 127;
-    static constexpr uint16_t VIEW_BORDER_RADIUS = 5;
-    static constexpr uint16_t BORDER_OPA = 127;
-    static constexpr uint16_t BORDER_WIDTH = 20;
-
-    static constexpr uint16_t TITLE_LABEL_DEFAULT_HEIGHT = 30;
-    static constexpr uint16_t FONT_DEFAULT_SIZE = 20;
-    static constexpr uint16_t VIEW_DISTANCE_TO_LEFT_SIDE = 48;
-    static constexpr uint16_t TEXT_DISTANCE_TO_LEFT_SIDE = 50;
-    static constexpr uint16_t TEXT_DISTANCE_TO_TOP_SIDE = 11;
-    static constexpr uint16_t BUTTON_LABEL_SIZE = 26;
-    static constexpr uint8_t BUTTON_STYLE_BORDER_RADIUS_VALUE = 20;
-    static constexpr uint32 BUTTON_STYLE_BACKGROUND_COLOR_VALUE = 0xff0b1928;
-    static constexpr uint16_t BUTTON_WIDHT2 = 230;
-    static constexpr uint16_t BUTTON_HEIGHT2 = 80;
-
-    // 字体大小
-    static constexpr uint16_t PERCENT_FONT_SIZE = 25;
-
-    static constexpr uint16_t MATH_ZERO = 0;
-
-    static BloodOxygenView *g_pMainView = nullptr;
-    static ImageAnimatorInfo g_imageAnimatorInfo_new[31] = {
-        {PNG_BLOOD_FLOW_IMAGE_0, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_1, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_2, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_3, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_4, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_5, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_6, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_7, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_8, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_9, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_24, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_25, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_26, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_27, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_28, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_29, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-        {PNG_BLOOD_FLOW_IMAGE_30, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    };
-
-    BloodOxygenView::BloodOxygenView()
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::BloodOxygenView");
-        imageViewMain = nullptr;
-        imageViewProgress = nullptr;
-        group = nullptr;
-        percent = nullptr;
-        testButton = nullptr;
-        circleProgress = nullptr;
-        imageAnimator = nullptr;
-        g_pMainView = this;
-        bloodbandoff = new BloodBandoffView();
-        if (bloodbandoff == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new BloodBandoffView fail");
-        }
-    }
-
-    BloodOxygenView::~BloodOxygenView()
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::~BloodOxygenView");
-        group->RemoveAll();
-        delete imageViewMain;
-        delete imageViewProgress;
-        delete group;
-        delete testButton;
-        delete percent;
-        delete circleProgress;
-        delete imageAnimator;
-        delete bloodbandoff;
-        imageViewMain = nullptr;
-        imageViewProgress = nullptr;
-        group = nullptr;
-        percent = nullptr;
-        testButton = nullptr;
-        circleProgress = nullptr;
-        imageAnimator = nullptr;
-        g_pMainView = nullptr;
-        bloodbandoff = nullptr;
-    }
-
-    BloodOxygenView *BloodOxygenView::GetInstance(void)
-    {
-        return g_pMainView;
-    }
-
-    UILabel *BloodOxygenView::GetPercent()
-    {
-        return percent;
-    }
-
-    UIViewGroup *BloodOxygenView::GetBloodOxygenGroup()
-    {
-        return group;
-    }
-
-    UILabelButton *BloodOxygenView::GetTestButton()
-    {
-        return testButton;
-    }
-
-    UICircleProgress *BloodOxygenView::GetCircleProgress()
-    {
-        return circleProgress;
-    }
-
-    UILabelButton *BloodOxygenView::CreateAndSetUIButton(const char *title)
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::CreateAndSetUIButton");
-        UILabelButton *btn = new UILabelButton();
-        if (btn == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UILabelButton fail");
-            return nullptr;
-        }
-        btn->SetPosition(TESTBUTTON_X, TESTBUTTON_Y, BUTTON_WIDHT2, BUTTON_HEIGHT2);
-        btn->SetText(title);
-        btn->SetTextColor(Color::White());
-        btn->SetFont(DEFAULT_VECTOR_FONT_FILENAME, BUTTON_LABEL_SIZE);
-        btn->SetAlign(TEXT_ALIGNMENT_CENTER);
-        btn->SetStyle(STYLE_BACKGROUND_COLOR, 0xffCD492C);
-        btn->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::INACTIVE);
-#if 0
-        btn->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::RELEASED);
-        btn->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::PRESSED);
-        btn->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::INACTIVE);
-        btn->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::RELEASED);
-        btn->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::PRESSED);
-#endif
-        UIView::OnClickListener *clickLeftListener = (UIView::OnClickListener *)OHOS::BloodOxygenPresenter::GetInstance();
-        if (clickLeftListener == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new clickLeftListener fail");
-            return nullptr;
-        }
-        btn->SetOnClickListener(clickLeftListener);
-        return btn;
-    }
-
-    bool BloodOxygenView::SetOnDragListener()
-    {
-        UIView::OnDragListener *dragListener = (UIView::OnDragListener *)OHOS::BloodOxygenPresenter::GetInstance();
-        if (dragListener == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnDragListener fail");
-            return false;
-        }
-        group->SetDraggable(true);
-        group->SetTouchable(true);
-        group->SetOnDragListener(dragListener);
-        return true;
-    }
-
-    UIView *BloodOxygenView::CreateAndSetUIView(int16 x, int16 y) const
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::CreateAndSetUIView");
-        UIView *view = new UIView();
-        if (view == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new View fail");
-            return nullptr;
-        }
-        if (x > VIEW_MAX_X || x < VIEW_MIN_X)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::X error");
-            return nullptr;
-        }
-        if (y < VIEW_MIN_Y || y > VIEW_MAX_Y)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::Y error");
-            return nullptr;
-        }
-        view->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full);
-        view->SetStyle(STYLE_BACKGROUND_OPA, VIEW_BACKGROUND_OPA); // 127 : background opacity
-        view->SetStyle(STYLE_BORDER_RADIUS, VIEW_BORDER_RADIUS);   // 5 : radius value
-        view->SetStyle(STYLE_BORDER_COLOR, Color::Gray().full);
-        view->SetStyle(STYLE_BORDER_OPA, BORDER_OPA);     // 127 : border opacity
-        view->SetStyle(STYLE_BORDER_WIDTH, BORDER_WIDTH); // 20 : border width
-        view->SetStyle(STYLE_PADDING_LEFT, MATH_ZERO);
-        view->SetStyle(STYLE_PADDING_RIGHT, MATH_ZERO);
-        view->SetStyle(STYLE_PADDING_TOP, MATH_ZERO);
-        view->SetStyle(STYLE_PADDING_BOTTOM, MATH_ZERO);
-        view->SetStyle(STYLE_MARGIN_LEFT, MATH_ZERO);
-        view->SetStyle(STYLE_MARGIN_RIGHT, MATH_ZERO);
-        view->SetStyle(STYLE_MARGIN_TOP, MATH_ZERO);
-        view->SetStyle(STYLE_MARGIN_BOTTOM, MATH_ZERO);
-
-        view->SetPosition(x, VIEW_HEIGHT - y);
-        view->SetStyle(STYLE_BORDER_WIDTH, MATH_ZERO);
-        view->SetStyle(STYLE_BORDER_RADIUS, MATH_ZERO); // 2 : half width 10 : offset
-        view->Resize(VIEW_WIDTH, y);
-        return view;
-    }
-
-    UICircleProgress *BloodOxygenView::CreateAndSetUICircleProgress()
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::CreateAndSetUICircleProgress");
-        UICircleProgress *circle = new UICircleProgress();
-        circle->SetPosition(CIRCLE_PROGRESS_POSITION_X, CIRCLE_PROGRESS_POSITION_Y,
-                            CIRCLE_PROGRESS_POSITION_WIDTH, CIRCLE_PROGRESS_POSITION_HEIGHT);
-        circle->SetCenterPosition(CIRCLE_PROGRESS_CENTER_X, CIRCLE_PROGRESS_CENTER_Y);
-        circle->SetRadius(CIRCLE_PROGRESS_RADIUS);
-        circle->SetValue(CIRCLE_PROGRESS_VALUE);
-        circle->SetBackgroundStyle(STYLE_LINE_WIDTH,
-                                   circle->GetBackgroundStyle(STYLE_LINE_WIDTH) + CIRCLE_PROGRESS_WIDTH);
-        circle->SetForegroundStyle(STYLE_LINE_WIDTH,
-                                   circle->GetForegroundStyle(STYLE_LINE_WIDTH) + CIRCLE_PROGRESS_WIDTH);
-        circle->SetStyle(STYLE_PADDING_LEFT, CIRCLE_PROGRESS_LEFT);
-        circle->SetStyle(STYLE_PADDING_TOP, CIRCLE_PROGRESS_TOP);
-        circle->SetStartAngle(CIRCLE_PROGRESS_STARTANGLE);
-        circle->SetEndAngle(CIRCLE_PROGRESS_ENDANGLE);
-        circle->SetImage(nullptr, PNG_PROGRESS_BAR_TMAGE);
-        circle->SetLineColor(Color::Black());
-
-        return circle;
-    }
-
-    bool BloodOxygenView::InitImageDisplay()
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::InitImageDisplay");
-        imageViewMain = new UIImageView();
-        if (imageViewMain == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UIImageView fail");
-            return false;
-        }
-        imageViewMain->SetPosition(MATH_ZERO, MATH_ZERO); // 30 :  offset
-        imageViewMain->SetSrc(PNG_BLOODOXYGEN_IMAGE_PATH);
-        group->Add(imageViewMain);
-
-        imageAnimator = new UIImageAnimatorView();
-        if (imageAnimator == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UIImageAnimatorView fail");
-            return false;
-        }
-        imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_new, IMAGEANIMATORVIEW_SIZE, IMAGEANIMATORVIEW_SPEED);
-        imageAnimator->Start();
-        imageAnimator->SetRepeat(true);
-        group->Add(imageAnimator);
-
-        imageViewProgress = new UIImageView();
-        if (imageViewProgress == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UIImageView fail");
-            return false;
-        }
-        imageViewProgress->SetPosition(IMAGE_PROGRESS_POSITION_X, IMAGE_PROGRESS_POSITION_Y); // 30 :  offset
-        imageViewProgress->SetSrc(PNG_PROGRESS_BAR_TMAGE);
-        group->Add(imageViewProgress);
-
-        return true;
-    }
-
-    void BloodOxygenView::OnStart()
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnStart");
-        View<BloodOxygenPresenter>::OnStart();
-
-        group = new UIViewGroup();
-        if (group == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new group fail");
-            return;
-        }
-        group->SetPosition(MATH_ZERO, MATH_ZERO);
-        group->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);
-
-        // 增加按键监听
-        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::BloodOxygenPresenter::GetInstance();
-        RootView::GetInstance()->SetOnKeyActListener(keyactListener);
-
-        if (InitImageDisplay() == false)
-        {
-            return;
-        }
-
-        if (SetOnDragListener() == false)
-        {
-            return;
-        }
-
-        circleProgress = CreateAndSetUICircleProgress();
-        if (circleProgress == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new circleProgress fail");
-            return;
-        }
-        group->Add(circleProgress);
-
-        percent = new UILabel();
-        if (percent == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new Label fail");
-            return;
-        }
-        percent->SetPosition(LABEL_PERCENT_POSITION_X, LABEL_PERCENT_POSITION_Y,
-                             VIEW_DISTANCE_TO_LEFT_SIDE, TITLE_LABEL_DEFAULT_HEIGHT);
-        percent->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
-        percent->SetText("%97");
-        percent->SetFont(DEFAULT_VECTOR_FONT_FILENAME, PERCENT_FONT_SIZE);
-        percent->SetTextColor(Color::White());
-        group->Add(percent);
-
-        testButton = CreateAndSetUIButton("开始检测");
-        if (testButton == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new Button fail");
-            return;
-        }
-        group->Add(testButton);
-
-        if (OHOS::BloodOxygenModel::GetInstance()->GetBloodOxygenViewStatus() == true)
-        {
-            testButton->SetTouchable(false);
-            percent->SetText("");
-        }
-
-        BloodBandoffView::GetInstance()->CreateUIViewGroup();
-
-        RootView::GetInstance()->Add(group);
-        RootView::GetInstance()->Add(BloodBandoffView::GetInstance()->GetBandoffViewGroup());
-        BloodBandoffView::GetInstance()->GetBandoffViewGroup()->SetVisible(false);
-    }
-
-    void BloodOxygenView::OnSetUpView()
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnSetUpView");
-        View<BloodOxygenPresenter>::OnSetUpView();
-        Draw();
-    }
-
-    void BloodOxygenView::OnTearDownView()
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnTearDownView");
-        View<BloodOxygenPresenter>::OnTearDownView();
-        return;
-    }
-
-    void BloodOxygenView::OnStop()
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnStop");
-        View<BloodOxygenPresenter>::OnStop();
-        RootView::GetInstance()->RemoveAll();
-        return;
-    }
-}
-#endif
 /*
  * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
  * Description: bloodOxygen view
index d5afbdc..315e034 100644 (file)
@@ -22,6 +22,7 @@ uint16_t ignore_slice_ids[] = {
     VIEW_INVALID,
     VIEW_SETTING,
     VIEW_UISAMPLE,
+    VIEW_BLOODOXY,//血氧功能
 #ifdef SUPPORT_ALIPAY_SEC
     // VIEW_MAIN_ALIPAY,
 #endif
index f219075..b7889fe 100755 (executable)
@@ -51,6 +51,10 @@ typedef enum {
 #endif
 #ifdef SUPPORT_SPO2_NOTIFICATION
     TOPIC_EVENT_SPO2_UPDATE,
+    TOPIC_EVENT_START_HRS_MONITORING,
+    TOPIC_EVENT_STOP_HRS_MONITORING,
+    TOPIC_EVENT_START_SPO2_MONITORING,
+    TOPIC_EVENT_STOP_SPO2_MONITORING,
 #endif
 #ifdef SUPPORT_CAT1_MODEM
     TOPIC_EVENT_CAT1_INCOMMING,
index 7f4cc37..bd4bac0 100755 (executable)
@@ -28,6 +28,10 @@ static const TopicToCore topicToCoreArray[] = {
     {TOPIC_EVENT_HEARTRATE_UPDATA, A_CORE_MASK, 1},
 #ifdef SUPPORT_SPO2_NOTIFICATION
     {TOPIC_EVENT_SPO2_UPDATE, A_CORE_MASK, 1},
+    {TOPIC_EVENT_START_HRS_MONITORING, A_CORE_MASK, 1},
+    {TOPIC_EVENT_STOP_HRS_MONITORING, A_CORE_MASK, 1},
+    {TOPIC_EVENT_START_SPO2_MONITORING, A_CORE_MASK, 1},
+    {TOPIC_EVENT_STOP_SPO2_MONITORING, A_CORE_MASK, 1},
 #endif
     {TOPIC_EVENT_HFP_INCOMMING, A_CORE_MASK, 1},
     {TOPIC_EVENT_HFP_PHONE_ACTIVE, A_CORE_MASK, 1},
index e79fde6..e9b5b5a 100755 (executable)
@@ -19,6 +19,7 @@
 #include "DialModelCharge.h"
 #include "DialModelHeartRate.h"
 #include "DialModelSPO2.h"
+#include "ppg_service.h"
 #include "CallerLogModel.h"
 #include "notification_manager.h"
 #include "NativeAbility.h"
@@ -59,6 +60,10 @@ const PriorityMapper g_pri_mapper[] = {
 #ifdef SUPPORT_SPO2_NOTIFICATION
     {TOPIC_EVENT_SPO2_UPDATE, PRIORITY_TWO},
     {TOPIC_EVENT_HEARTRATE_UPDATA, PRIORITY_TWO},
+    {TOPIC_EVENT_START_HRS_MONITORING, PRIORITY_TWO},
+    {TOPIC_EVENT_STOP_HRS_MONITORING, PRIORITY_TWO},
+    {TOPIC_EVENT_START_SPO2_MONITORING, PRIORITY_TWO},
+    {TOPIC_EVENT_STOP_SPO2_MONITORING, PRIORITY_TWO},
 #endif
 };
 
@@ -97,6 +102,10 @@ void MsgCenterSubscribe()
     MsgCenterSubscribeTopic(TOPIC_EVENT_SPO2_UPDATE);
     MsgCenterSubscribeTopic(TOPIC_EVENT_HEARTRATE_UPDATA);
     MsgCenterSubscribeTopic(TOPIC_EVENT_WEARSTATE_UPDATE);
+    MsgCenterSubscribeTopic(TOPIC_EVENT_START_HRS_MONITORING);
+    MsgCenterSubscribeTopic(TOPIC_EVENT_STOP_HRS_MONITORING);
+    MsgCenterSubscribeTopic(TOPIC_EVENT_START_SPO2_MONITORING);
+    MsgCenterSubscribeTopic(TOPIC_EVENT_STOP_SPO2_MONITORING);
 #endif
 #ifdef SUPPORT_CAT1_MODEM
     MsgCenterSubscribeTopic(TOPIC_EVENT_CAT1_INCOMMING);
@@ -201,7 +210,7 @@ void MsgCenterNotifyHfpWatchProc(const Topic topic, Request* req)
     }
 }
 #ifdef SUPPORT_SPO2_NOTIFICATION_TEST
-
+uint32_t md = PPG_SERVICE_CMD_TYPE_DO_PPG_TEST;
 //血氧
 void MsgCenterNotifySPO2hProc(const Topic topic, Request* req)
 {
@@ -209,8 +218,8 @@ void MsgCenterNotifySPO2hProc(const Topic topic, Request* req)
     unused(req);
     if (topic == TOPIC_EVENT_SPO2_UPDATE && req != nullptr && req->data != nullptr)
     {
-        //u_int8_t sp02 = *((u_int8_t*)(req->data)); // 进行类型转换
-        //DialModelSPO2::::GetInstance()->UpdateSPO2(sp02);
+        u_int8_t sp02 = *((u_int8_t*)(req->data)); // 进行类型转换
+        DialModelSPO2::GetInstance()->UpdateSPO2(sp02);
     }
 }
 //穿戴状态
@@ -228,12 +237,57 @@ void MsgCenterNotifyHeartRateProc(const Topic topic, Request* req)
 {
     unused(topic);
     unused(req);
-    if (topic == TOPIC_EVENT_HEARTRATE_UPDATA && req != nullptr && req->data != nullptr)
+    if (topic == TOPIC_EVENT_HEARTRATE_UPDATA)
+    {
+        u_int8_t heart = *((u_int8_t*)(req->data)); // 进行类型转换
+        DialModelHeartRate::GetInstance()->UpdateHeartRate(heart);
+    }
+}
+//开始检测心率
+void MsgCenterNotifyStartHRMonitoringProc(const Topic topic, Request* req)
+{
+    unused(topic);
+    unused(req);
+    if (topic == TOPIC_EVENT_START_HRS_MONITORING)
+    {
+        md = PPG_SERVICE_CMD_TYPE_DO_PPG_TEST;
+        send_ppg_cmd_msg(md);
+    }
+}
+//结束检测心率
+void MsgCenterNotifyStopHRMonitoringProc(const Topic topic, Request* req)
+{
+    unused(topic);
+    unused(req);
+    if (topic == TOPIC_EVENT_STOP_HRS_MONITORING)
     {
-        //u_int8_t heart = *((u_int8_t*)(req->data)); // 进行类型转换
-        //DialModelHeartRate::GetInstance()->UpdateHeartRate(heart);
+        md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST;
+        send_ppg_cmd_msg(md);
     }
 }
+//开始检测血氧
+void MsgCenterNotifyStartSPO2MonitoringProc(const Topic topic, Request* req)
+{
+    unused(topic);
+    unused(req);
+    if (topic == TOPIC_EVENT_START_SPO2_MONITORING)
+    {
+        md = PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST;
+        send_ppg_cmd_msg(md);
+    }
+}
+//结束检测血氧
+void MsgCenterNotifyStopSPO2MonitoringProc(const Topic topic, Request* req)
+{
+    unused(topic);
+    unused(req);
+    if (topic == TOPIC_EVENT_STOP_SPO2_MONITORING && req != nullptr && req->data != nullptr)
+    {
+        md = PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST;
+        send_ppg_cmd_msg(md);
+    }
+}
+
 #endif
 #ifdef SUPPORT_CAT1_MODEM
 void MsgCenterNotifyCatIncomingCallProc(const Topic topic, Request* req)
@@ -285,6 +339,10 @@ static msg_center_notify_table_t g_msg_center_notify_table[] = {
     {TOPIC_EVENT_SPO2_UPDATE,           MsgCenterNotifySPO2hProc},
     {TOPIC_EVENT_WEARSTATE_UPDATE,      MsgCenterNotifyWearStateProc},
     {TOPIC_EVENT_HEARTRATE_UPDATA,      MsgCenterNotifyHeartRateProc},
+    {TOPIC_EVENT_START_HRS_MONITORING,  MsgCenterNotifyStartHRMonitoringProc},
+    {TOPIC_EVENT_STOP_HRS_MONITORING,   MsgCenterNotifyStopHRMonitoringProc},
+    {TOPIC_EVENT_START_SPO2_MONITORING, MsgCenterNotifyStartSPO2MonitoringProc},
+    {TOPIC_EVENT_STOP_SPO2_MONITORING,  MsgCenterNotifyStopSPO2MonitoringProc},
 #endif
 #ifdef SUPPORT_CAT1_MODEM
     {TOPIC_EVENT_CAT1_INCOMMING,      MsgCenterNotifyCatIncomingCallProc},
index a1b6c79..05fdb0b 100644 (file)
Binary files a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/KUMI.bin and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/KUMI.bin differ
index 3ee99ef..48af26f 100644 (file)
Binary files a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/galaxy.bin and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/galaxy.bin differ
index 5686319..0a4545f 100644 (file)
@@ -109,10 +109,9 @@ void CustomEventPublish(uint16_t topic, uint8_t *data , uint32_t size)
 }
 
 
-
+//血氧
 errcode_t update_spo2_event_notify(uint8_t spo2)
 {
-
     CustomEventPublish(TOPIC_EVENT_SPO2_UPDATE,(uint8_t*)&spo2,sizeof(spo2));
     return 0;
 }
@@ -123,31 +122,45 @@ errcode_t update_spo2_event_sendmsg_toUI(uint8_t spo2)
     return ERRCODE_SUCC;
 }
 
+//心率
+errcode_t update_hrs_event_notify(uint8_t hrs)
+{
+    CustomEventPublish(TOPIC_EVENT_HEARTRATE_UPDATA,(uint8_t*)&hrs,sizeof(hrs));
+    return 0;
+}
+errcode_t update_hrs_event_sendmsg_toUI(uint8_t hrs)
+{
+    /**通过UI事件发送Notify*/
+    GraphicService::GetInstance()->PostGraphicEvent(std::bind(update_hrs_event_notify, hrs));
+    return ERRCODE_SUCC;
+}
+
 #include "hx3695_hal.h"
 
 void hx3695_msg_callback(uint8_t msg_type, uint8_t *msg_data, int32_t msg_datalen)
 {
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "hx3695_msg_callback");
     FT_CUSTOM_RESULTS_t sensor_data; // 使用更通用的名称 sensor_data
+#if 1
+    if (msg_datalen < sizeof(FT_CUSTOM_RESULTS_t)) {
+        // 数据长度不足以填充整个结构体
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid data length for SPO2 update");
+        //return;
+    }
+#endif
+    memcpy(&sensor_data, msg_data, sizeof(FT_CUSTOM_RESULTS_t));
     switch(msg_type)
     {
         case HX3695_MSG_TYPE_HRS_UPDATE:
+           //每秒心率
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HX3695_MSG_TYPE_HRS_UPDATE = %d", sensor_data.lastesthrs);
+            update_hrs_event_sendmsg_toUI(sensor_data.lastesthrs);
             break;
         case HX3695_MSG_TYPE_HRV_UPDATE:
             break;
         case HX3695_MSG_TYPE_SPO2_UPDATE:
-            {
-                #if 1
-                if (msg_datalen < sizeof(FT_CUSTOM_RESULTS_t)) {
-                    // 数据长度不足以填充整个结构体
-                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid data length for SPO2 update");
-                    break;
-                }
-                #endif
-                memcpy(&sensor_data, msg_data, sizeof(FT_CUSTOM_RESULTS_t));
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HX3695_MSG_TYPE_SPO2_UPDATE = %d", sensor_data.lastestspo2);
-                update_spo2_event_sendmsg_toUI(sensor_data.lastestspo2);
-            }
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HX3695_MSG_TYPE_SPO2_UPDATE = %d", sensor_data.lastestspo2);
+            update_spo2_event_sendmsg_toUI(sensor_data.lastestspo2);
             break;
         case HX3695_MSG_TYPE_LEAKLIGHT_UPDATE:
             break;
@@ -156,6 +169,7 @@ void hx3695_msg_callback(uint8_t msg_type, uint8_t *msg_data, int32_t msg_datale
         case HX3695_MSG_TYPE_WEARSTAT_UPDATE:
             break;
         default:
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Unknown sensor message type");
             break;
     }
 }