From: Caisking <3449750381@qq.com> Date: Wed, 28 Feb 2024 02:18:36 +0000 (+0800) Subject: 1.增加星空表盘,验证表盘血氧心率数据;2.更正血氧Slice,可以正常进入 X-Git-Tag: release_V1.2.70_20241020_135402~1298^2~2^2~1 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=d806190a4d7fb8ef73fbf9d48e3cc1f88eaf03fb;p=mirrors%2FFD230.git 1.增加星空表盘,验证表盘血氧心率数据;2.更正血氧Slice,可以正常进入 --- diff --git a/code/sdk/application/wearable/fd230app/CMakeLists.txt b/code/sdk/application/wearable/fd230app/CMakeLists.txt index 6de8e8b47..add4a7402 100644 --- a/code/sdk/application/wearable/fd230app/CMakeLists.txt +++ b/code/sdk/application/wearable/fd230app/CMakeLists.txt @@ -131,6 +131,7 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/dial/DialModelSteps.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/dial/DialModelPower.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/dial/DialModelCharge.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/dial/DialModelSPO2.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodoxygen/src/BloodOxygenView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodoxygen/src/BloodBandoffView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodoxygen/src/BloodOxygenPresenter.cpp diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h b/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h index 9b8eef279..db8bfe557 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h +++ b/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h @@ -30,6 +30,8 @@ typedef enum : uint16_t VIEW_MAIN = 1, // 主界面 VIEW_SETTING, // 设置 VIEW_APPLIST, // App应用 + VIEW_DIALUPDATE, // 更新表盘ID ,请不要在前面增加任何Slice + /* -------------------------------------------------------------------------- */ VIEW_MAIN_ALARM, // 闹钟 VIEW_ALARM_POP_UP, // 闹铃界面 VIEW_BLUETOOTH_EARPHONE, // 连接蓝牙耳机界面 @@ -66,7 +68,6 @@ typedef enum : uint16_t VIEW_MESSAGE, // 信息通知 VIEW_BLOODO, // 血氧监测 VIEW_ROTATE, // 模拟表冠 - VIEW_DIALUPDATE, // 更新表盘 /* -------------------------------------------------------------------------- */ VIEW_MAIN_TEMP, // 体温界面(暂时不用) VIEW_OFFLINEVOICE, // 语音助手界面(暂时不用) diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/include/UiConfig.h b/code/sdk/application/wearable/fd230app/nativelauncher/include/UiConfig.h index 8114e243c..d284cf1a8 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/include/UiConfig.h +++ b/code/sdk/application/wearable/fd230app/nativelauncher/include/UiConfig.h @@ -96,6 +96,31 @@ namespace OHOS static constexpr const char *PNG_BLOOD_FLOW_IMAGE_29 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_31.bin"; static constexpr const char *PNG_BLOOD_FLOW_IMAGE_30 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_32.bin"; /* -------------------------------- 血氧动画 ------------------------------------------------- */ + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_0 = APP_RES_PATH"/COUNTDOWN_IMAGE_01.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_1 = APP_RES_PATH"/COUNTDOWN_IMAGE_02.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_2 = APP_RES_PATH"/COUNTDOWN_IMAGE_03.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_3 = APP_RES_PATH"/COUNTDOWN_IMAGE_04.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_4 = APP_RES_PATH"/COUNTDOWN_IMAGE_05.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_5 = APP_RES_PATH"/COUNTDOWN_IMAGE_06.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_6 = APP_RES_PATH"/COUNTDOWN_IMAGE_07.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_7 = APP_RES_PATH"/COUNTDOWN_IMAGE_08.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_8 = APP_RES_PATH"/COUNTDOWN_IMAGE_09.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_9 = APP_RES_PATH"/COUNTDOWN_IMAGE_10.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_10 = APP_RES_PATH"/COUNTDOWN_IMAGE_11.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_11 = APP_RES_PATH"/COUNTDOWN_IMAGE_12.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_12 = APP_RES_PATH"/COUNTDOWN_IMAGE_13.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_13 = APP_RES_PATH"/COUNTDOWN_IMAGE_14.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_14 = APP_RES_PATH"/COUNTDOWN_IMAGE_15.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_15 = APP_RES_PATH"/COUNTDOWN_IMAGE_16.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_16 = APP_RES_PATH"/COUNTDOWN_IMAGE_17.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_17 = APP_RES_PATH"/COUNTDOWN_IMAGE_18.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_18 = APP_RES_PATH"/COUNTDOWN_IMAGE_19.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_19 = APP_RES_PATH"/COUNTDOWN_IMAGE_20.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_20 = APP_RES_PATH"/COUNTDOWN_IMAGE_21.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_21 = APP_RES_PATH"/COUNTDOWN_IMAGE_22.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_22 = APP_RES_PATH"/COUNTDOWN_IMAGE_23.bin"; + static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_23 = APP_RES_PATH"/COUNTDOWN_IMAGE_24.bin"; +#if 0 static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_0 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_1.bin"; static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_1 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_2.bin"; static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_2 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_3.bin"; @@ -186,7 +211,7 @@ namespace OHOS static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_87 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_88.bin"; static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_88 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_89.bin"; static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_89 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_90.bin"; - +#endif /* -------------------------------------------------------------------------- */ static constexpr const char *PNG_APPLIST_ALIPAY_IMAGE = APP_RES_PATH "/alipay/alipay_logo.bin"; // 支付宝 static constexpr const char *PNG_ALIPAY_BIND_FAILURE = APP_RES_PATH "/alipay/ALIPAY_BIND_FAILURE.bin"; diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodBandoffView.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodBandoffView.cpp index 6fec8f0bd..871577688 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodBandoffView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodBandoffView.cpp @@ -1,9 +1,11 @@ + /* * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. * Description: bloodBandoff view * Author: * Create: 2021-08-01 */ +#if 0 #include "UiConfig.h" #include "wearable_log.h" #include "BloodBandoffView.h" @@ -230,3 +232,156 @@ namespace OHOS return group; } } +#endif + +/* + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. + * Description: bloodBandoff view + * Author: + * Create: 2021-08-01 + */ +#include "UiConfig.h" +#include "wearable_log.h" +#include "BloodBandoffView.h" +#include "BloodOxygenModel.h" + +namespace OHOS +{ + // 动态显示图片设置 + static constexpr uint16_t IMAGE_SIZE = 96; + static constexpr uint16_t IMAGE_POSITION_Y = 276; + static constexpr uint16_t IMAGE_POSITION_X = 179; + static constexpr uint16_t IMAGEANIMATOERVIEW_SIZE = 24; + static constexpr uint16_t IMAGEANIMATOERVIEW_SPEED = 40; + + // 标签设置 + static constexpr uint16_t LABEL_POSITION_X = 87; + static constexpr uint16_t LABEL_POSITION_Y = 200; + static constexpr uint16_t LABEL_POSITION_WIDTH = 288; + static constexpr uint16_t LABEL_POSITION_HEIGHT = 50; + + // 图片设置 + static constexpr uint16_t IMAGE_ENTER_POSITION_X = 131; + static constexpr uint16_t IMAGE_ENTER_POSITION_Y = 70; + + static constexpr uint16_t TITLE_LABEL_DEFAULT_HEIGHT = 30; + static constexpr uint16_t FONT_DEFAULT_SIZE = 25; + 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 ImageAnimatorInfo g_imageAnimatorInfo_Time[IMAGEANIMATOERVIEW_SIZE] = { + {PNG_COUNTDOWN_TIME_IMAGE_0, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_1, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_2, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_3, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_4, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_5, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_6, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_7, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_8, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_9, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + {PNG_COUNTDOWN_TIME_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH}, + }; + static BloodBandoffView *g_pMainView = nullptr; + BloodBandoffView::BloodBandoffView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::BloodBandoffView"); + label = nullptr; + imageView = nullptr; + group = nullptr; + imageAnimator = nullptr; + g_pMainView = this; + } + + BloodBandoffView::~BloodBandoffView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::~BloodBandoffView"); + group->RemoveAll(); + delete label; + delete imageView; + delete group; + delete imageAnimator; + label = nullptr; + imageView = nullptr; + group = nullptr; + imageAnimator = nullptr; + g_pMainView = nullptr; + } + + BloodBandoffView *BloodBandoffView::GetInstance(void) + { + return g_pMainView; + } + + UIViewGroup *BloodBandoffView::GetBandoffViewGroup() + { + return group; + } + + UIImageAnimatorView *BloodBandoffView::GetImageAnimator() + { + return imageAnimator; + } + + UIViewGroup *BloodBandoffView::CreateUIViewGroup() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::CreateUIViewGroup"); + group = new UIViewGroup(); + if (group == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new group fail"); + return nullptr; + } + group->SetPosition(0, 0); + group->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION); + + label = new UILabel(); + if (label == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new Label fail"); + return nullptr; + } + group->Add(label); + label->SetPosition(LABEL_POSITION_X, LABEL_POSITION_Y, LABEL_POSITION_WIDTH, LABEL_POSITION_HEIGHT); + label->SetText("偏紧佩戴,保持静止"); + label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE); + label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + + imageAnimator = new UIImageAnimatorView(); + if (imageAnimator == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new UIImageAnimatorView fail"); + return nullptr; + } + imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_Time, IMAGEANIMATOERVIEW_SIZE, IMAGEANIMATOERVIEW_SPEED); + imageAnimator->Start(); + imageAnimator->SetRepeat(false); + group->Add(imageAnimator); + + imageView = new UIImageView(); + if (imageView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new UIImageView fail"); + return nullptr; + } + imageView->SetPosition(IMAGE_ENTER_POSITION_X, IMAGE_ENTER_POSITION_Y); // 30 : offset + imageView->SetSrc(PNG_BLOOD_ICON_ENTER); + group->Add(imageView); + + return group; + } +} diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenModel.cpp index 9a7c3a129..9e2eea3c4 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenModel.cpp @@ -7,36 +7,37 @@ #include "BloodOxygenModel.h" -namespace OHOS { -BloodOxygenModel::BloodOxygenModel() +namespace OHOS { - OxygenView = false; - BandoffView = false; -} + BloodOxygenModel::BloodOxygenModel() + { + OxygenView = false; + BandoffView = false; + } -bool BloodOxygenModel::GetBloodOxygenViewStatus(void) -{ - return OxygenView; -} + bool BloodOxygenModel::GetBloodOxygenViewStatus(void) + { + return OxygenView; + } -bool BloodOxygenModel::GetBloodBandoffViewStatus(void) -{ - return BandoffView; -} + bool BloodOxygenModel::GetBloodBandoffViewStatus(void) + { + return BandoffView; + } -void BloodOxygenModel::SetBloodBandoffViewStatus(bool bandoffViewStatus) -{ - BandoffView = bandoffViewStatus; -} + void BloodOxygenModel::SetBloodBandoffViewStatus(bool bandoffViewStatus) + { + BandoffView = bandoffViewStatus; + } -void BloodOxygenModel::SetBloodOxygenViewStatus(bool oxygenViewStatus) -{ - OxygenView = oxygenViewStatus; -} + void BloodOxygenModel::SetBloodOxygenViewStatus(bool oxygenViewStatus) + { + OxygenView = oxygenViewStatus; + } -BloodOxygenModel *BloodOxygenModel::GetInstance(void) -{ - static BloodOxygenModel instance; - return &instance; -} + BloodOxygenModel *BloodOxygenModel::GetInstance(void) + { + static BloodOxygenModel instance; + return &instance; + } } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenView.cpp b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenView.cpp index 064601917..269575950 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenView.cpp @@ -4,7 +4,7 @@ * Author: * Create: 2021-08-01 */ - +#if 0 #include "BloodOxygenView.h" #include "BloodOxygenModel.h" @@ -415,3 +415,414 @@ namespace OHOS return; } } +#endif +/* + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved. + * Description: bloodOxygen view + * Author: + * Create: 2021-08-01 + */ + +#include "BloodOxygenView.h" +#include "BloodOxygenModel.h" + +namespace OHOS +{ + // 按钮设置 + static constexpr uint16_t TESTBUTTON_ZERO = 0; + static constexpr uint16_t TESTBUTTON_X = 167; + static constexpr uint16_t TESTBUTTON_Y = 360; + + // 进度条参数设置 + 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 = 40; + static constexpr uint8_t BUTTON_STYLE_BORDER_RADIUS_VALUE = 20; + static constexpr uint32 BUTTON_STYLE_BACKGROUND_COLOR_VALUE = 0xFFFFFF; + static constexpr uint16_t BUTTON_WIDHT2 = 120; + static constexpr uint16_t BUTTON_HEIGHT2 = 60; + + // 字体大小 + 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::Red()); + btn->SetFont(DEFAULT_VECTOR_FONT_FILENAME, BUTTON_LABEL_SIZE); + btn->SetAlign(TEXT_ALIGNMENT_CENTER); + 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); + btn->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::INACTIVE); + 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::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); + + 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::Red()); + 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::OnSetUpView(); + Draw(); + } + + void BloodOxygenView::OnTearDownView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnTearDownView"); + View::OnTearDownView(); + return; + } + + void BloodOxygenView::OnStop() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnStop"); + View::OnStop(); + RootView::GetInstance()->RemoveAll(); + return; + } +} diff --git a/code/sdk/application/wearable/fd230app/nativeui/dialupdate/include/DialUpdateModel.h b/code/sdk/application/wearable/fd230app/nativeui/dialupdate/include/DialUpdateModel.h index 1b662df8a..85879b0ab 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/dialupdate/include/DialUpdateModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/dialupdate/include/DialUpdateModel.h @@ -19,7 +19,7 @@ namespace OHOS DialUpdateModel &operator=(const DialUpdateModel &); virtual ~DialUpdateModel(); - std::string dialConfigPath = "user/res/dials/dog.bin";; // Member variable to store the dial configuration path + std::string dialConfigPath = "user/res/dials/galaxy.bin";; // Member variable to store the dial configuration path }; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/include/dial/DialDataBase.h b/code/sdk/application/wearable/fd230app/nativeui/main/include/dial/DialDataBase.h index 4ff6081a0..545d6ef63 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/main/include/dial/DialDataBase.h +++ b/code/sdk/application/wearable/fd230app/nativeui/main/include/dial/DialDataBase.h @@ -31,8 +31,10 @@ enum class DialDataType DATA_TYPE_TIME_WEEK, // 星期 DATA_TYPE_TIME_MONTH, // 月份 DATA_TYPE_TIME_YEAR, // 年份 - DATA_TYPE_CHARGE, // 充电状态 - DATA_TYPE_DIALPATH, // 表盘路径 + /* ------------------------------- 在下面增加新数据类型 ------------------------------- */ + DATA_TYPE_CHARGE, // 充电状态 + DATA_TYPE_DIALPATH, // 表盘路径 + DATA_TYPE_SPO2, // 血氧 DATA_TYPE_MULTI_FLOAT_BASE = 0x2fff, // 多个浮点数据类型基值 diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/include/dial/DialModelSPO2.h b/code/sdk/application/wearable/fd230app/nativeui/main/include/dial/DialModelSPO2.h new file mode 100644 index 000000000..0da9a5278 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/main/include/dial/DialModelSPO2.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) CompanyNameMagicTag 2023. All rights reserved. + * Description: DialModelSPO2 + * Author: + * Create: 2023-12 + */ + +#ifndef DIAL_MODEL_SPO2_H +#define DIAL_MODEL_SPO2_H + +#include "DialBaseModel.h" + +namespace OHOS +{ + class DialModelSPO2 : public DialBaseModel + { + public: + DialModelSPO2() {} + virtual ~DialModelSPO2() {} + static DialModelSPO2 *GetInstance() + { + static DialModelSPO2 instance; + return &instance; + } + bool GetDialFloatData(DialDataType &type, float &out) override; + void UpdateSPO2(int16_t SPO2); + + private: + float SPO2_ = 97.0; // 97.0: default SPO2 value as reference + }; +} +#endif diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelPower.cpp b/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelPower.cpp index 3dea6b550..9f8adde63 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelPower.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelPower.cpp @@ -20,17 +20,18 @@ namespace OHOS bool DialModelPower::GetDialFloatData(DialDataType &type, float &out) { (void)type; -#if 0 +#if 1 if (power_ == 0) { UpdatePower(); + return true; } #endif // 获取电池电压值 float voltage = 0.0F; - power_ = battery_get_voltage(&voltage);//进度条0.1~1;电量1~100 + power_ = battery_get_voltage(&voltage); // 进度条0.1~1;电量1~100 out = static_cast(power_); - //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetDialFloatData %d", power_); + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetDialFloatData %d", power_); return true; } void DialModelPower::UpdatePower() diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelSPO2.cpp b/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelSPO2.cpp new file mode 100644 index 000000000..006091642 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelSPO2.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (c) CompanyNameMagicTag 2023. All rights reserved. + * Description: DialModelSPO2 + * Author: + * Create: 2023-12 + */ + +#include "RegisterDialModel.h" +#include "DialModelSPO2.h" + +REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_SPO2, OHOS::DialModelSPO2::GetInstance()); + +namespace OHOS +{ + bool DialModelSPO2::GetDialFloatData(DialDataType &type, float &out) + { + (void)type; + out = SPO2_; + return true; + } + + void DialModelSPO2::UpdateSPO2(int16_t SPO2) + { + SPO2_ = static_cast(SPO2); + if (onChangeListener_ != nullptr) + { + onChangeListener_->OnDialFloatDataUpdate(DialDataType::DATA_TYPE_SPO2, SPO2_); + } + } +} diff --git a/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp b/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp index 3125dbbd3..ff999c935 100755 --- a/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp +++ b/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp @@ -18,6 +18,7 @@ #include "AlarmPopUpPresenter.h" #include "DialModelCharge.h" #include "DialModelHeartRate.h" +#include "DialModelSPO2.h" #include "CallerLogModel.h" #include "notification_manager.h" #include "NativeAbility.h" @@ -185,17 +186,18 @@ void MsgCenterNotifyHfpWatchProc(const Topic topic, Request* req) } #ifdef SUPPORT_SPO2_NOTIFICATION_TEST - +//血氧 void MsgCenterNotifySPO2hProc(const Topic topic, Request* req) { unused(topic); unused(req); if (topic == TOPIC_EVENT_SPO2_UPDATE && req != nullptr && req->data != nullptr) { - u_int8_t sp02 = *((u_int8_t*)(req->data)); // 进行类型转换 - DialModelHeartRate::GetInstance()->UpdateHeartRate(sp02); + //u_int8_t sp02 = *((u_int8_t*)(req->data)); // 进行类型转换 + //DialModelSPO2::::GetInstance()->UpdateSPO2(sp02); } } +//穿戴状态 void MsgCenterNotifyWearStateProc(const Topic topic, Request* req) { unused(topic); @@ -205,19 +207,15 @@ void MsgCenterNotifyWearStateProc(const Topic topic, Request* req) // req->msgId } } +//心率 void MsgCenterNotifyHeartRateProc(const Topic topic, Request* req) { unused(topic); unused(req); - if ( topic == TOPIC_EVENT_HEARTRATE_UPDATA) + if (topic == TOPIC_EVENT_HEARTRATE_UPDATA && req != nullptr && req->data != nullptr) { - #if 0 - // req->msgId - if (OHOS::DialModelHeartRate::GetInstance()!=NULL) - { - OHOS::DialModelHeartRate::GetInstance()->UpdateHeartRate(); - } - #endif + //u_int8_t heart = *((u_int8_t*)(req->data)); // 进行类型转换 + //DialModelHeartRate::GetInstance()->UpdateHeartRate(heart); } } #endif diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/KUMI.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/KUMI.bin index b775322fe..a1b6c792a 100644 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 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/dog.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/dog.bin index ffefc9758..70ec05041 100644 Binary files a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/dog.bin and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/dog.bin differ diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/galaxy.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/galaxy.bin new file mode 100644 index 000000000..3ee99efe9 Binary files /dev/null and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/dials/galaxy.bin differ diff --git a/code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp b/code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp index 891b0ab1e..c2a3a8834 100644 --- a/code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp +++ b/code/sdk/drivers/peripheral/ppg/service/ppg_service.cpp @@ -112,7 +112,7 @@ 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; }