增加272HRV
authorxue <2144439972@qq.com>
Sat, 8 Nov 2025 07:34:06 +0000 (15:34 +0800)
committerxue <2144439972@qq.com>
Sat, 8 Nov 2025 07:34:06 +0000 (15:34 +0800)
16 files changed:
code/sdk/application/wearable/fd272/nativeapp/nativelauncher/include/AppViewIDs.h
code/sdk/application/wearable/fd272/nativeapp/nativelauncher/include/ui_resource_string.h
code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/include/HrvModel.h [new file with mode: 0644]
code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/include/HrvPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/include/HrvView.h [new file with mode: 0644]
code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/src/HrvModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/src/HrvPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/src/HrvView.cpp [new file with mode: 0644]
tools/language_tool/Language_xml/input_list_en.txt
tools/language_tool/Language_xml/input_list_zh.txt
tools/language_tool/Language_xml/language_custom.xlsx
tools/language_tool/Language_xml/language_en.xml
tools/language_tool/Language_xml/language_zh.xml
tools/language_tool/font/en.lang
tools/language_tool/font/ui_resource_string.h
tools/language_tool/font/zh.lang

index 846b801..dc2a753 100644 (file)
@@ -170,6 +170,7 @@ typedef enum : uint16_t
   VIEW_MAIN_ALIPAY, // 支付宝
 #endif
   VIEW_HEART_CHART, // 心率曲线图检测
+  VIEW_HRV,         // 心率变异性
   VIEW_ADD_NEW_ID = 250,
   /* -------------------------------------------------------------------------- */
   VIEW_RECENT_APP,
index fb3489c..c95ddaa 100644 (file)
@@ -741,7 +741,13 @@ enum UIResourceTextId : uint16_t {
     STR_STRESS_WARNING = 728,\r
     STR_STRESS_NORMAL = 729,\r
     STR_STRESS_EXCELLENT = 730,\r
-    STR_MAX_ID = 731,\r
+    STR_HRV_LAST_NIGHT_AVG  = 731,\r
+    STR_HRV_BASELINE  = 732,\r
+    STR_HRV_7DAY_AVG  = 733,\r
+    STR_HRV_BALANCED  = 734,\r
+    STR_HRV_UNBALANCED  = 735,\r
+    STR_HRV_TOO_LOW  = 736,\r
+    STR_MAX_ID = 737,\r
 }; // UIResourceTextId\r
 
 enum FontLanguageId : uint8_t {
diff --git a/code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/include/HrvModel.h b/code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/include/HrvModel.h
new file mode 100644 (file)
index 0000000..aec5b3a
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: HrvModel.h
+ * Author:
+ * Create: 2021-10-12
+ */
+#ifndef HRV_MODEL_H
+#define HRV_MODEL_H
+
+namespace OHOS {
+
+class HrvModel {
+public:
+    static HrvModel *GetInstance(void);
+
+private:
+    HrvModel();
+    HrvModel(const HrvModel &);
+    virtual ~HrvModel();
+    
+};
+}
+#endif
diff --git a/code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/include/HrvPresenter.h b/code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/include/HrvPresenter.h
new file mode 100644 (file)
index 0000000..e3105da
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: HrvPresenter.h
+ * Author:
+ * Create: 2021-10-12
+ */
+
+#ifndef HRV_PRESENTER_H
+#define HRV_PRESENTER_H
+
+#include "key/include/KeyInputListener.h"
+#include "Presenter.h"
+#include "ohos_types.h"
+
+#include "cmsis_os.h"
+#include "wearable_log.h"
+#include "UiConfig.h"
+#include "NativeAbility.h"
+
+namespace OHOS {
+class HrvView;
+class HrvPresenter : public Presenter<HrvView>,
+                     public UIView::OnClickListener,
+                     public UIView::OnDragListener,
+                     public RootView::OnKeyActListener
+{
+public:
+    HrvPresenter();
+    ~HrvPresenter() override;
+
+    void OnStart() override;
+    void OnResume() override;
+    static HrvPresenter *GetInstance(void);
+    bool OnClick(UIView &view, const ClickEvent &event) override;
+    bool OnKeyAct(UIView &view, const KeyEvent &event) override;
+    bool OnDragEnd(UIView &view, const DragEvent &event) override;
+    
+private:
+
+};
+}
+#endif
diff --git a/code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/include/HrvView.h b/code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/include/HrvView.h
new file mode 100644 (file)
index 0000000..220be30
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: HrvView.h
+ * Author:
+ * Create: 2021-10-12
+ */
+
+#ifndef HRV_VIEW_H
+#define HRV_VIEW_H
+
+#include "View.h"
+
+#include "components/ui_view_group.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_label_button.h"
+#include "components/ui_list.h"
+#include "components/abstract_adapter.h"
+#include "components/ui_image_view.h"
+
+#include "hrv/include/HrvPresenter.h"
+
+namespace OHOS {
+
+class HrvView : public View<HrvPresenter>
+{
+public:
+    HrvView();
+    ~HrvView();
+
+    void OnStart() override;
+    static HrvView *GetInstance();
+    bool update_hrv_data(int8_t type);
+
+private:
+    bool Label_init();
+    bool Image_init();
+    UIViewGroup *group{nullptr};
+    UIView:: OnDragListener* dragListener{nullptr};
+    //7天平均值提示
+    UILabelExt *hrv_average_reminder_label{nullptr};
+    //7天平均值
+    UILabel *hrv_average_value_label{nullptr};
+    //单位标签
+    UILabel *unit_label{nullptr};
+    //结果标签
+    UILabelExt *result_label{nullptr};
+    //基准线标签
+    UILabelExt *baseline_label{nullptr};
+    //昨晚平均值提示标签
+    UILabelExt *last_average_value_label{nullptr};
+    //昨晚平均值标签
+    UILabelExt *last_average_reminder_value_label{nullptr};
+    //进度条
+    UIImageView *imageview{nullptr};
+    //白点
+    UIImageView *white_point_imageview{nullptr};
+    //绿点
+    UIImageView *green_point_imageview{nullptr};
+
+    UIImageAnimatorView *PullUpAnimatorView{nullptr};   // 上拉动画
+
+    ImageAnimatorInfo PullUpimageAnimatorInfo[70]{0};
+
+    const ImageInfo** PullUpimageAnimator_imageInfo{nullptr};
+    
+    uint32_t current_hrv_value = 0;
+    uint32_t measurement_time = 0;
+};
+
+}
+#endif
diff --git a/code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/src/HrvModel.cpp b/code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/src/HrvModel.cpp
new file mode 100644 (file)
index 0000000..79b7b8a
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: HrvModel.cpp
+ * Author:
+ * Create: 2021-10-12
+ */
+
+#include "hrv/include/HrvModel.h"
+#include "gfx_utils/mem_check.h"
+
+namespace OHOS
+{
+
+static HrvModel *g_pHrvModel = nullptr;
+
+HrvModel::HrvModel()
+{
+    g_pHrvModel = this;
+#ifdef MEM_CHECK
+    MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
+}
+
+HrvModel::~HrvModel()
+{
+    g_pHrvModel = nullptr;
+#ifdef MEM_CHECK
+    MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
+}
+
+HrvModel *HrvModel::GetInstance(void)
+{
+    if (g_pHrvModel == nullptr)
+    {
+        g_pHrvModel = new HrvModel();
+    }
+    return g_pHrvModel;
+}
+}
diff --git a/code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/src/HrvPresenter.cpp b/code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/src/HrvPresenter.cpp
new file mode 100644 (file)
index 0000000..f8ddf70
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: HrvPresenter.cpp
+ * Author:
+ * Create: 2021-10-12
+ */
+
+#include "hrv/include/HrvView.h"
+#include "hrv/include/HrvModel.h"
+#include "gfx_utils/mem_check.h"
+#include "common/key_code.h"
+#include "hrv/include/HrvPresenter.h"
+#include "custom_utils.h"
+#include "NativeRegisterManager.h"
+
+namespace OHOS
+{
+
+REGIST_MENU_PRO(VIEW_HRV, HrvView, HrvPresenter,
+    PNG_APPLIST_HRV_IMAGE_BIG, PNG_APPLIST_HRV_IMAGE, PNG_APPLIST_HRV_IMAGE, "HRV", STR_HRV);
+
+static HrvPresenter *g_pMainView = nullptr;
+HrvPresenter::HrvPresenter()
+{
+    g_pMainView = this;
+#ifdef MEM_CHECK
+    MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
+}
+
+HrvPresenter::~HrvPresenter()
+{
+    g_pMainView = nullptr;
+#ifdef MEM_CHECK
+    MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
+}
+
+HrvPresenter *HrvPresenter::GetInstance(void)
+{
+    return g_pMainView;
+}
+
+void HrvPresenter::OnStart()
+{
+}
+
+void HrvPresenter::OnResume()
+{
+    RootView::GetInstance()->SetOnKeyActListener(this);
+}
+
+bool HrvPresenter::OnClick(UIView &view, const ClickEvent &event)
+{
+    UNUSED(event);
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HrvPresenter::OnClick");
+
+    return false;
+}
+
+bool HrvPresenter::OnDragEnd(OHOS::UIView &view, const OHOS::DragEvent &event)
+{
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HrvPresenter::OnDragEnd");
+    if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)
+    {
+        if (event.GetPreLastPoint().x - event.GetStartPoint().x > 100)
+            NativeAbility::GetInstance().Back();
+    }
+    if (event.GetDragDirection() == DragEvent::DIRECTION_BOTTOM_TO_TOP)
+    {
+        // 上拉更新HRV数据
+        HrvView::GetInstance()->update_hrv_data(1);
+    }
+    if (event.GetDragDirection() == DragEvent::DIRECTION_TOP_TO_BOTTOM)
+    {
+        // 下拉刷新HRV数据
+        HrvView::GetInstance()->update_hrv_data(2);
+    }
+    return true;
+}
+
+bool HrvPresenter::OnKeyAct(UIView &view, const KeyEvent &event)
+{
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HrvPresenter::OnKeyAct");
+    uint16 keyID = event.GetKeyId();
+    uint16_t keyState = event.GetState();
+    // 如果是power键就返回上一级
+    if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 && uapi_get_screen_state() == 0)
+    {
+        uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+        NativeAbility::GetInstance().Back();
+    }
+    return true;
+}
+}
diff --git a/code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/src/HrvView.cpp b/code/sdk/application/wearable/fd272/nativeapp/nativeui/hrv/src/HrvView.cpp
new file mode 100644 (file)
index 0000000..2c646c7
--- /dev/null
@@ -0,0 +1,211 @@
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: HrvView.cpp
+ * Author:
+ * Create: 2021-10-12
+ */
+
+#include "hrv/include/HrvView.h"
+#include "hrv/include/HrvPresenter.h"
+#include "gfx_utils/mem_check.h"
+#include "common/key_code.h"
+#include "custom_utils.h"
+#include "ui_resource_string.h"
+namespace OHOS
+{
+
+static HrvView *g_pHrvView = nullptr;
+
+HrvView::HrvView()
+{
+    g_pHrvView = this;
+#ifdef MEM_CHECK
+    MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
+}
+
+HrvView::~HrvView()
+{
+    g_pHrvView = nullptr;
+#ifdef MEM_CHECK
+    MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
+}
+
+HrvView *HrvView::GetInstance()
+{
+    return g_pHrvView;
+}
+
+void HrvView::OnStart()
+{
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HrvView::OnStart");
+    
+    if (group == nullptr)
+    {
+        group = new UIViewGroup();
+        group->SetPosition(0, 0, 466, 466);
+        group->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
+        group->SetStyle(STYLE_BACKGROUND_OPA, 0xD0);
+        RootView::GetInstance()->Add(group);
+        
+        Label_init();
+        Image_init();
+    }
+}
+
+bool HrvView::Label_init()
+{
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HrvView::Label_init");
+    
+    // 初始化7天平均值提示标签
+    if (hrv_average_reminder_label == nullptr)
+    {
+        hrv_average_reminder_label = new UILabelExt();
+        hrv_average_reminder_label->SetPosition(83, 74, 300, 35);
+        hrv_average_reminder_label->SetTextId(STR_HRV_7DAY_AVG);
+        hrv_average_reminder_label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        hrv_average_reminder_label->SetStyle(STYLE_TEXT_COLOR, 0xFFFFFFFF);
+        hrv_average_reminder_label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        group->Add(hrv_average_reminder_label);
+    }
+    
+    // 初始化7天平均值标签
+    if (hrv_average_value_label == nullptr)
+    {
+        hrv_average_value_label = new UILabel();
+        hrv_average_value_label->SetPosition(149, 115, 96, 97);
+        hrv_average_value_label->SetText("--");
+        hrv_average_value_label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 80);
+        hrv_average_value_label->SetStyle(STYLE_TEXT_COLOR, 0xFFFFFFFF);
+        hrv_average_value_label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        group->Add(hrv_average_value_label);
+    }
+    
+    // 初始化单位标签
+    if (unit_label == nullptr)
+    {
+        unit_label = new UILabel();
+        unit_label->SetPosition(257, 140, 59, 47);
+        unit_label->SetText("ms");
+        unit_label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40);
+        unit_label->SetStyle(STYLE_TEXT_COLOR, 0xFF999999);
+        unit_label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        group->Add(unit_label);
+    }
+    
+    // 初始化结果标签
+    if (result_label == nullptr)
+    {
+        result_label = new UILabelExt();
+        result_label->SetPosition(83, 218, 300, 47);
+        result_label->SetTextId(STR_HRV_BALANCED);
+        result_label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40);
+        result_label->SetStyle(STYLE_TEXT_COLOR, 0xFF00FF00);//根据结果修改
+        result_label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        group->Add(result_label);
+    }
+    
+    // 初始化基准线标签
+    if (baseline_label == nullptr)
+    {
+        baseline_label = new UILabelExt();
+        baseline_label->SetPosition(130, 285, 234, 35);
+        baseline_label->SetTextId(STR_HRV_BASELINE);
+        baseline_label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        baseline_label->SetStyle(STYLE_TEXT_COLOR, 0xFFFFFFFF);
+        baseline_label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        group->Add(baseline_label);
+    }
+    
+    // 初始化昨晚平均值提示标签
+    if (last_average_reminder_value_label == nullptr)
+    {
+        last_average_reminder_value_label = new UILabelExt();
+        last_average_reminder_value_label->SetPosition(83, 340, 300, 35);
+        last_average_reminder_value_label->SetTextId(STR_HRV_LAST_NIGHT_AVG);
+        last_average_reminder_value_label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        last_average_reminder_value_label->SetStyle(STYLE_TEXT_COLOR, 0xFFFFFFFF);
+        last_average_reminder_value_label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        group->Add(last_average_reminder_value_label);
+    }
+    
+    // 初始化昨晚平均值标签
+    if (last_average_value_label == nullptr)
+    {
+        last_average_value_label = new UILabelExt();
+        last_average_value_label->SetPosition(83, 391, 300, 35);
+        last_average_value_label->SetText("-- ms");
+        last_average_value_label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        last_average_value_label->SetStyle(STYLE_TEXT_COLOR, 0xFFFFFFFF);
+        last_average_value_label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        group->Add(last_average_value_label);
+    }
+    
+    return true;
+}
+
+bool HrvView::Image_init()
+{
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HrvView::Image_init");
+    
+    // 初始化进度条图片
+    if (imageview == nullptr)
+    {
+        imageview = new UIImageView();
+        imageview->SetAutoEnable(false);
+        imageview->SetPosition(10, 10, 446, 223);
+        imageview->SetSrc("/user/res/hrv/progress_bar.bin"); // 假设的进度条图片路径
+        imageview->SetResizeMode(UIImageView::ImageResizeMode::CONTAIN);
+        imageview->SetVisible(true);
+        group->Add(imageview);
+    }
+    
+    // 初始化白点图片
+    if (white_point_imageview == nullptr)
+    {
+        white_point_imageview = new UIImageView();
+        white_point_imageview->SetPosition(60, 98, 20, 20);
+        white_point_imageview->SetSrc("/user/res/hrv/white_point.bin"); // 假设的白点图片路径
+        white_point_imageview->SetVisible(true);
+        group->Add(white_point_imageview);
+    }
+    
+    // 初始化绿点图片
+    if (green_point_imageview == nullptr)
+    {
+        green_point_imageview = new UIImageView();
+        green_point_imageview->SetPosition(102, 293, 18, 18);
+        green_point_imageview->SetSrc("/user/res/hrv/green_point.bin"); // 假设的绿点图片路径
+        green_point_imageview->SetVisible(true);
+        group->Add(green_point_imageview);
+    }
+    
+    return true;
+}
+
+bool HrvView::update_hrv_data(int8_t type)
+{
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HrvView::update_hrv_data type=%d", type);
+    
+    switch (type)
+    {
+    case 1:
+    white_point_imageview->SetPosition(30, 170, 20, 20);
+        break;
+    case 2:
+    white_point_imageview->SetPosition(62, 96, 20, 20);
+        break;
+    case 3:
+    white_point_imageview->SetPosition(223, 12, 20, 20);
+        break;
+    case 4:
+    white_point_imageview->SetPosition(410, 139, 20, 20);
+        break;
+    default:
+        break;
+    }
+    
+    return true;
+}
+}
index 10969df..a340900 100644 (file)
@@ -730,4 +730,10 @@ STR_EPHEMERIS_DOWNLOAD$Ephemeris Download
 STR_STRESS_OVERLOAD$The current stress level is too high. It is recommended to pause work and practice breathing exercises or meditation.\r
 STR_STRESS_WARNING$There is slight stress. It is recommended to try 1 minute of deep breathing or look into the distance.\r
 STR_STRESS_NORMAL$The stress level is within the healthy range. It is recommended to continue maintaining a regular schedule, as your condition is good.\r
-STR_STRESS_EXCELLENT$The current stress level is extremely low. It is recommended to maintain your current state and enjoy the relaxing moment.
\ No newline at end of file
+STR_STRESS_EXCELLENT$The current stress level is extremely low. It is recommended to maintain your current state and enjoy the relaxing moment.\r
+STR_HRV_LAST_NIGHT_AVG $Last Night's Average\r
+STR_HRV_BASELINE $Baseline:65-85ms\r
+STR_HRV_7DAY_AVG $7-Day Average HRV\r
+STR_HRV_BALANCED $Balanced\r
+STR_HRV_UNBALANCED $Unbalanced\r
+STR_HRV_TOO_LOW $Too Low
\ No newline at end of file
index 6114eef..0e59039 100644 (file)
@@ -730,4 +730,10 @@ STR_EPHEMERIS_DOWNLOAD$星历下载
 STR_STRESS_OVERLOAD$当前压力过高,建议暂停工作,进行呼吸训练或冥想\r
 STR_STRESS_WARNING$存在轻微压力,建议试试1分钟深呼吸或远眺\r
 STR_STRESS_NORMAL$压力在健康范围,建议继续保持规律作息,状态良好\r
-STR_STRESS_EXCELLENT$当前压力极低,建议保持当前状态,享受放松时刻
\ No newline at end of file
+STR_STRESS_EXCELLENT$当前压力极低,建议保持当前状态,享受放松时刻\r
+STR_HRV_LAST_NIGHT_AVG $昨晚平均值\r
+STR_HRV_BASELINE $基准线65-85ms\r
+STR_HRV_7DAY_AVG $7天平均 HRV\r
+STR_HRV_BALANCED $平衡\r
+STR_HRV_UNBALANCED $不平衡\r
+STR_HRV_TOO_LOW $过低
\ No newline at end of file
index 9624ab3..0849ea3 100644 (file)
Binary files a/tools/language_tool/Language_xml/language_custom.xlsx and b/tools/language_tool/Language_xml/language_custom.xlsx differ
index 9452afc..27a0c35 100644 (file)
        <lanstr id="STR_STRESS_WARNING" value="There is slight stress. It is recommended to try 1 minute of deep breathing or look into the distance."/>
        <lanstr id="STR_STRESS_NORMAL" value="The stress level is within the healthy range. It is recommended to continue maintaining a regular schedule, as your condition is good."/>
        <lanstr id="STR_STRESS_EXCELLENT" value="The current stress level is extremely low. It is recommended to maintain your current state and enjoy the relaxing moment."/>
+       <lanstr id="STR_HRV_LAST_NIGHT_AVG " value="Last Night's Average"/>
+       <lanstr id="STR_HRV_BASELINE " value="Baseline:65-85ms"/>
+       <lanstr id="STR_HRV_7DAY_AVG " value="7-Day Average HRV"/>
+       <lanstr id="STR_HRV_BALANCED " value="Balanced"/>
+       <lanstr id="STR_HRV_UNBALANCED " value="Unbalanced"/>
+       <lanstr id="STR_HRV_TOO_LOW " value="Too Low"/>
 </language>
index aea70c3..8a1e0b3 100644 (file)
        <lanstr id="STR_STRESS_WARNING" value="存在轻微压力,建议试试1分钟深呼吸或远眺"/>
        <lanstr id="STR_STRESS_NORMAL" value="压力在健康范围,建议继续保持规律作息,状态良好"/>
        <lanstr id="STR_STRESS_EXCELLENT" value="当前压力极低,建议保持当前状态,享受放松时刻"/>
+       <lanstr id="STR_HRV_LAST_NIGHT_AVG " value="昨晚平均值"/>
+       <lanstr id="STR_HRV_BASELINE " value="基准线65-85ms"/>
+       <lanstr id="STR_HRV_7DAY_AVG " value="7天平均 HRV"/>
+       <lanstr id="STR_HRV_BALANCED " value="平衡"/>
+       <lanstr id="STR_HRV_UNBALANCED " value="不平衡"/>
+       <lanstr id="STR_HRV_TOO_LOW " value="过低"/>
 </language>
index c64b00b..b5e97ad 100644 (file)
Binary files a/tools/language_tool/font/en.lang and b/tools/language_tool/font/en.lang differ
index fb3489c..c95ddaa 100644 (file)
@@ -741,7 +741,13 @@ enum UIResourceTextId : uint16_t {
     STR_STRESS_WARNING = 728,\r
     STR_STRESS_NORMAL = 729,\r
     STR_STRESS_EXCELLENT = 730,\r
-    STR_MAX_ID = 731,\r
+    STR_HRV_LAST_NIGHT_AVG  = 731,\r
+    STR_HRV_BASELINE  = 732,\r
+    STR_HRV_7DAY_AVG  = 733,\r
+    STR_HRV_BALANCED  = 734,\r
+    STR_HRV_UNBALANCED  = 735,\r
+    STR_HRV_TOO_LOW  = 736,\r
+    STR_MAX_ID = 737,\r
 }; // UIResourceTextId\r
 
 enum FontLanguageId : uint8_t {
index 7f75354..67a43c0 100644 (file)
Binary files a/tools/language_tool/font/zh.lang and b/tools/language_tool/font/zh.lang differ