From 0a024399106efaf7e86eec981173d05ea67daffc Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Sun, 4 Jan 2026 11:08:55 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96=E6=98=9F=E5=8E=86=E4=B8=8B?= =?utf8?q?=E8=BD=BD=EF=BC=8C=E5=90=88=E5=B9=B6=E6=98=9F=E5=8E=86=E7=9B=B8?= =?utf8?q?=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../include/EphemerisDownloadPresenter.h | 5 +- .../include/EphemerisDownloadView.h | 26 +- .../src/EphemerisDownloadModel.cpp | 34 +- .../src/EphemerisDownloadPresenter.cpp | 99 +- .../src/EphemerisDownloadView.cpp | 229 ++- .../msg_center/src/notify/transmitting.cpp | 1426 +++++++++-------- .../uicomponents/UIComponents.cpp | 18 +- .../ble_service/bleservice/bleEvent.c | 339 +++- .../ble_service/bleservice/bleEvent.h | 3 +- .../services/gnss/src/gnss_http_server.c | 9 +- code/sdk/zhihui/utils/custom_runtime.c | 45 + code/sdk/zhihui/utils/custom_runtime.h | 25 + code/sdk/zhihui/utilscpp/custom_utilscpp.cpp | 60 +- 13 files changed, 1450 insertions(+), 868 deletions(-) diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadPresenter.h b/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadPresenter.h index f498e7d9b..73b9c5bc1 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadPresenter.h +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadPresenter.h @@ -28,8 +28,8 @@ namespace OHOS ~EphemerisDownloadPresenter(); EphemerisDownloadPresenter(const EphemerisDownloadPresenter &) = delete; EphemerisDownloadPresenter &operator=(const EphemerisDownloadPresenter &) = delete; + void OnStart() override; void OnResume() override; - void OnStop() override; bool OnClick(UIView &view, const ClickEvent &event) override; bool OnDrag(UIView &view, const DragEvent &event) override; bool OnKeyAct(UIView &view, const KeyEvent &event) override; @@ -39,6 +39,9 @@ namespace OHOS // 供Model调用的回调函数 void UpdateDownloadStatus(); + + private: + int16_t currentView_{0}; // EPHEMERIS_VIEW_MAIN or EPHEMERIS_VIEW_BT_DISCONNECT }; } // OHOS diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadView.h b/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadView.h index 876caf0e8..c84add8cd 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadView.h +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadView.h @@ -21,16 +21,24 @@ namespace OHOS { class EphemerisDownloadPresenter; class EphemerisDownloadView : public View { public: + // 蓝牙未连接页关闭按钮 Id + static constexpr const char * EPHEMERIS_BT_DISCONNECT_CLOSE_ID = "ephemeris_bt_close"; + // 子界面索引(与 MainAlarmView 的切换逻辑一致) + static constexpr int16_t EPHEMERIS_VIEW_MAIN = 0; + static constexpr int16_t EPHEMERIS_VIEW_BT_DISCONNECT = 1; + static constexpr int16_t EPHEMERIS_VIEW_MAX = 2; + EphemerisDownloadView(); ~EphemerisDownloadView() override; EphemerisDownloadView(const EphemerisDownloadView &) = delete; EphemerisDownloadView &operator=(const EphemerisDownloadView &) = delete; static EphemerisDownloadView *GetInstance(void); - void OnStart() override; bool EphemerisDownloadInit(); void OnClick(UIView &view); + // 切换子界面(与 MainAlarmView::ChangeView 逻辑一致) + void ChangeView(int16_t hideView, int16_t showView); //获取下载的label UILabelExt *GetDownloadLabel(); //获取有效期的label @@ -41,16 +49,26 @@ public: void UpdateValidityPeriod(); //更新下载按钮状态 void UpdateDownloadButton(); - + +private: + bool InitBtDisconnectView(); + private: + UIViewGroup *group{nullptr}; + UIViewGroup *container_[EPHEMERIS_VIEW_MAX]{nullptr}; UILabelExt *labelTitle_{nullptr}; UILabelExt *labelStatus_{nullptr}; - UILabelExt *labelStatusValue_{nullptr}; // 新增:状态值标签 + UILabelExt *labelStatusValue_{nullptr}; UILabelExt *labelValidity_{nullptr}; - UILabelExt *labelValidityValue_{nullptr}; // 新增:有效期值标签 + UILabelExt *labelValidityValue_{nullptr}; UILabelButtonExt *btnDownload_{nullptr}; UILabelButtonExt *btnBack_{nullptr}; UILabelExt *labelNote_{nullptr}; + // 蓝牙未连接页组件(排版与 VIEW_FIND_PHONE 未连接时一致,无查找手机逻辑) + UILabelExt *labelTitleBt_{nullptr}; + UIImageView *imageViewBt_{nullptr}; + UILabelExt *labelHintBt_{nullptr}; + UILabelButtonExt *btnCloseBt_{nullptr}; }; } // OHOS diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadModel.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadModel.cpp index b1bfef38d..81124e3bb 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadModel.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadModel.cpp @@ -7,17 +7,27 @@ #include "wearable_log.h" #include "cmsis_os.h" #include "service/graphic_service.h" +#include "ConfigModel.h" #if defined(SUPPORT_GNSS) #include "gnss_http_server.h" #endif -//最长的有效期 目前为2天 -#define MAX_VALIDITY_PERIOD 2 * 24 * 60 +//最长的有效期 目前为7天 +#define MAX_VALIDITY_PERIOD 7 * 24 * 60 namespace OHOS { -EphemerisDownloadModel::EphemerisDownloadModel() {} +EphemerisDownloadModel::EphemerisDownloadModel() + : ephemerisDownloadStatus(EphemerisDownloadStatus::NOT_DOWNLOADED) { + // 初始化时检查星历数据是否有效,如果有效则更新状态 +#if defined(SUPPORT_GNSS) + if (GetValidityPeriod()) { + ephemerisDownloadStatus = EphemerisDownloadStatus::DOWNLOADED; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "EphemerisDownloadModel: 检测到有效星历数据,状态设置为已下载"); + } +#endif +} EphemerisDownloadModel::~EphemerisDownloadModel() {} @@ -99,11 +109,21 @@ std::string EphemerisDownloadModel::GetEphemerisValidityPeriod() { int days = validityPeriod / (24 * 60); int hours = (validityPeriod % (24 * 60)) / 60; int minutes = validityPeriod % 60; - ephemerisValidityPeriod = std::to_string(days) + "天" + - std::to_string(hours) + "小时" + - std::to_string(minutes) + "分钟"; + //根据语言选择显示格式 + if(ConfigModel::GetInstance()->GetLanguage() == 0) + ephemerisValidityPeriod = std::to_string(days) + "天" + + std::to_string(hours) + "小时" + + std::to_string(minutes) + "分钟"; + else + ephemerisValidityPeriod = std::to_string(days) + " d " + + std::to_string(hours) + " h " + + std::to_string(minutes) + " m"; } else { - ephemerisValidityPeriod = "无星历数据"; + //根据语言选择显示格式 + if(ConfigModel::GetInstance()->GetLanguage() == 0) + ephemerisValidityPeriod = "无优化数据"; + else + ephemerisValidityPeriod = "No Opt Data"; } #endif return ephemerisValidityPeriod; diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadPresenter.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadPresenter.cpp index 0e3d28aed..40cdde73a 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadPresenter.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadPresenter.cpp @@ -4,6 +4,7 @@ #include "common/key_code.h" #include "custom_utils.h" +#include "custom_runtime.h" #include "key/include/KeyInputListener.h" #include "AppViewIDs.h" @@ -11,6 +12,8 @@ #include "NativeRegisterManager.h" #include "wearable_log.h" +#include "ui_resource_string.h" +#include "ConfigModel.h" #ifdef SUPPORT_BLE_SERVICE #include "bleEvent.h" @@ -29,11 +32,11 @@ EphemerisDownloadPresenter::EphemerisDownloadPresenter() { EphemerisDownloadPresenter::~EphemerisDownloadPresenter() {} -void EphemerisDownloadPresenter::OnResume() { - RootView::GetInstance()->SetOnKeyActListener(this); +void EphemerisDownloadPresenter::OnStart() { } -void EphemerisDownloadPresenter::OnStop() { +void EphemerisDownloadPresenter::OnResume() { + RootView::GetInstance()->SetOnKeyActListener(this); } EphemerisDownloadPresenter* EphemerisDownloadPresenter::GetInstance() { @@ -44,13 +47,52 @@ bool EphemerisDownloadPresenter::OnClick(UIView &view, const ClickEvent &event) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "EphemerisDownloadPresenter::OnClick"); UNUSED(event); + // 蓝牙未连接页的关闭按钮:切回主界面 + if (strcmp(view.GetViewId(), EphemerisDownloadView::EPHEMERIS_BT_DISCONNECT_CLOSE_ID) == 0) { + EphemerisDownloadView *v = EphemerisDownloadView::GetInstance(); + if (v != nullptr) { + v->ChangeView(EphemerisDownloadView::EPHEMERIS_VIEW_BT_DISCONNECT, + EphemerisDownloadView::EPHEMERIS_VIEW_MAIN); + currentView_ = EphemerisDownloadView::EPHEMERIS_VIEW_MAIN; + } + return true; + } //点击下载按键 if (strcmp(view.GetViewId(), DOWNLOAD_ID) == 0) { - //进行下载 + + //检差有效期,如果是有效的,则不能下载 + if(EphemerisDownloadModel::GetInstance().GetValidityPeriod()) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "有效期有效,不能下载"); + return true; + } + + //检查蓝牙连接状态 + uint8_t ble_connect_stat = uapi_dev_runtime_get_ble_connect_stat(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ble phone connect stat = %d", ble_connect_stat); + + if (ble_connect_stat == 0) { + //蓝牙未连接,跳转到查找手机Slice显示蓝牙未连接提示 + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Bluetooth not connected, jump to find phone slice"); + NativeAbility::GetInstance().EnterSlice(VIEW_FIND_PHONE); + return true; + } + + //蓝牙已连接,进行下载 // EphemerisDownloadModel::GetInstance().DownloadEphemeris(); #ifdef SUPPORT_BLE_SERVICE ble_request_epo_file(); #endif + + // 蓝牙未连接,在当前 Slice 内切换到蓝牙未连接提示页(与 MainAlarmView 切换逻辑一致) + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Bluetooth not connected, show BT disconnect view"); + EphemerisDownloadView *view = EphemerisDownloadView::GetInstance(); + if (view != nullptr) { + view->ChangeView(EphemerisDownloadView::EPHEMERIS_VIEW_MAIN, + EphemerisDownloadView::EPHEMERIS_VIEW_BT_DISCONNECT); + currentView_ = EphemerisDownloadView::EPHEMERIS_VIEW_BT_DISCONNECT; + } + return true; } //点击返回按键 else if (strcmp(view.GetViewId(), BACK_ID) == 0) { @@ -65,7 +107,16 @@ bool EphemerisDownloadPresenter::OnDrag(UIView &view, const DragEvent &event) { if ((event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) && (event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) { - NativeAbility::GetInstance().Back(); + if (currentView_ == EphemerisDownloadView::EPHEMERIS_VIEW_BT_DISCONNECT) { + EphemerisDownloadView *v = EphemerisDownloadView::GetInstance(); + if (v != nullptr) { + v->ChangeView(EphemerisDownloadView::EPHEMERIS_VIEW_BT_DISCONNECT, + EphemerisDownloadView::EPHEMERIS_VIEW_MAIN); + currentView_ = EphemerisDownloadView::EPHEMERIS_VIEW_MAIN; + } + } else { + NativeAbility::GetInstance().Back(); + } } return true; } @@ -76,14 +127,24 @@ bool EphemerisDownloadPresenter::OnKeyAct(UIView &view, const KeyEvent &event) { // 如果是power键,且是亮屏状态,按键释放就返回上一级 if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 && uapi_get_screen_state() == 0) { - // 回退 - NativeAbility::GetInstance().Back(); + if (currentView_ == EphemerisDownloadView::EPHEMERIS_VIEW_BT_DISCONNECT) { + EphemerisDownloadView *v = EphemerisDownloadView::GetInstance(); + if (v != nullptr) { + v->ChangeView(EphemerisDownloadView::EPHEMERIS_VIEW_BT_DISCONNECT, + EphemerisDownloadView::EPHEMERIS_VIEW_MAIN); + currentView_ = EphemerisDownloadView::EPHEMERIS_VIEW_MAIN; + } + } else { + NativeAbility::GetInstance().Back(); + } } return true; } void EphemerisDownloadPresenter::UpdateDownloadStatus() { + + RootView::GetInstance()->SetOnKeyActListener(this); //根据下载状态更新视图 switch (EphemerisDownloadModel::GetInstance().GetEphemerisDownloadStatus()) { case EphemerisDownloadStatus::DOWNLOADING: @@ -95,12 +156,17 @@ void EphemerisDownloadPresenter::UpdateDownloadStatus() { //显示下载进度等 if(EphemerisDownloadModel::GetInstance().GetEphemerisDownloadProgress() == -1) { - EphemerisDownloadView::GetInstance()->GetDownloadLabel()->SetText( - "下载失败"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + EphemerisDownloadView::GetInstance()->GetDownloadLabel()->SetText("优化失败"); + else + EphemerisDownloadView::GetInstance()->GetDownloadLabel()->SetText("Optimization Failed"); } else if(EphemerisDownloadModel::GetInstance().GetEphemerisDownloadProgress() == 0) { - EphemerisDownloadView::GetInstance()->GetDownloadLabel()->SetText("正在链接网络"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + EphemerisDownloadView::GetInstance()->GetDownloadLabel()->SetText("正在链接网络"); + else + EphemerisDownloadView::GetInstance()->GetDownloadLabel()->SetText("Connecting to Network"); //设置下载按键 EphemerisDownloadView::GetInstance()->UpdateDownloadButton(); } @@ -112,7 +178,7 @@ void EphemerisDownloadPresenter::UpdateDownloadStatus() { { progress = 100; } - std::string progress_str = "正在下载"+std::to_string(progress)+"%"; + std::string progress_str = "正在优化"+std::to_string(progress)+"%"; EphemerisDownloadView::GetInstance()->GetDownloadLabel()->SetText(progress_str.c_str()); //设置下载按键 EphemerisDownloadView::GetInstance()->UpdateDownloadButton(); @@ -131,8 +197,10 @@ void EphemerisDownloadPresenter::UpdateDownloadStatus() { case EphemerisDownloadStatus::DOWNLOADED: if (EphemerisDownloadView::GetInstance()) { if (EphemerisDownloadView::GetInstance()->GetDownloadLabel()) { - EphemerisDownloadView::GetInstance()->GetDownloadLabel()->SetText( - "下载成功"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + EphemerisDownloadView::GetInstance()->GetDownloadLabel()->SetText("优化成功"); + else + EphemerisDownloadView::GetInstance()->GetDownloadLabel()->SetText("Opt Success"); //设置下载按键 EphemerisDownloadView::GetInstance()->UpdateDownloadButton(); } @@ -146,7 +214,10 @@ void EphemerisDownloadPresenter::UpdateDownloadStatus() { case EphemerisDownloadStatus::FAILED: if (EphemerisDownloadView::GetInstance()) { if (EphemerisDownloadView::GetInstance()->GetDownloadLabel()) { - EphemerisDownloadView::GetInstance()->GetDownloadLabel()->SetText("下载失败"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + EphemerisDownloadView::GetInstance()->GetDownloadLabel()->SetText("优化失败"); + else + EphemerisDownloadView::GetInstance()->GetDownloadLabel()->SetText("Opt Failed"); } //设置下载按键 EphemerisDownloadView::GetInstance()->UpdateDownloadButton(); diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadView.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadView.cpp index c21482e02..cb0875cd3 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadView.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadView.cpp @@ -8,6 +8,8 @@ #include "wearable_log.h" #include "UiConfig.h" #include "uicomponents/UIComponents.h" +#include "ConfigModel.h" + namespace OHOS { @@ -20,6 +22,14 @@ EphemerisDownloadView::EphemerisDownloadView() { } EphemerisDownloadView::~EphemerisDownloadView() { + + if (group!=nullptr) + { + group->RemoveAll(); + delete group; + group = nullptr; + } + if (labelTitle_!=nullptr) { delete labelTitle_; @@ -60,6 +70,16 @@ EphemerisDownloadView::~EphemerisDownloadView() { delete labelNote_; labelNote_ = nullptr; } + // 蓝牙未连接页容器及子控件 + if (container_[EPHEMERIS_VIEW_BT_DISCONNECT] != nullptr) { + container_[EPHEMERIS_VIEW_BT_DISCONNECT]->RemoveAll(); + if (labelTitleBt_ != nullptr) { delete labelTitleBt_; labelTitleBt_ = nullptr; } + if (imageViewBt_ != nullptr) { delete imageViewBt_; imageViewBt_ = nullptr; } + if (labelHintBt_ != nullptr) { delete labelHintBt_; labelHintBt_ = nullptr; } + if (btnCloseBt_ != nullptr) { delete btnCloseBt_; btnCloseBt_ = nullptr; } + delete container_[EPHEMERIS_VIEW_BT_DISCONNECT]; + container_[EPHEMERIS_VIEW_BT_DISCONNECT] = nullptr; + } g_pEphemerisDownloadView = nullptr; //停止定时器 EphemerisDownloadModel::GetInstance().ephemeris_stop_data_timer(); @@ -69,12 +89,6 @@ void EphemerisDownloadView::OnStart() { if (!EphemerisDownloadInit()) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "EphemerisDownloadView::EphemerisDownloadInit fail"); } - - GetRootContainer()->SetDraggable(true); - GetRootContainer()->SetPosition(0, 0, 466, 466); - GetRootContainer()->SetOnDragListener(presenter_); - - GetRootContainer()->SetTouchable(true); } EphemerisDownloadView *EphemerisDownloadView::GetInstance() { @@ -82,6 +96,20 @@ EphemerisDownloadView *EphemerisDownloadView::GetInstance() { } bool EphemerisDownloadView::EphemerisDownloadInit() { + group = new UIViewGroup(); + if (group == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[FindPhoneViewInit_BlueToothConnected] group new fail!!"); + return false; + } + group->SetPosition(0, 0, 466, 466); + group->SetStyle(STYLE_BACKGROUND_OPA, 0); + group->SetTouchable(true); + group->SetDraggable(true); + group->SetOnDragListener(presenter_); + container_[EPHEMERIS_VIEW_MAIN] = group; + AddViewToRootContainer(container_[EPHEMERIS_VIEW_MAIN]); + // 初始化标题 - 居中显示 labelTitle_ = new UILabelExt(); if (labelTitle_ == nullptr) { @@ -90,11 +118,14 @@ bool EphemerisDownloadView::EphemerisDownloadInit() { } labelTitle_->SetPosition(83, 50, 300, 50); labelTitle_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - labelTitle_->SetText("星历下载"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + labelTitle_->SetText("定位优化"); + else + labelTitle_->SetText("Location Optimization"); labelTitle_->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); labelTitle_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); labelTitle_->SetTextColor(Color::White()); - AddViewToRootContainer(labelTitle_); + group->Add(labelTitle_); // 初始化状态标签 - 左对齐,带圆点前缀 labelStatus_ = new UILabelExt(); @@ -105,9 +136,12 @@ bool EphemerisDownloadView::EphemerisDownloadInit() { labelStatus_->SetPosition(50, 120, 360, 70); labelStatus_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); labelStatus_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER); - labelStatus_->SetText("● 下载状态:"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + labelStatus_->SetText("● 优化状态:"); + else + labelStatus_->SetText("● Opt Status:"); labelStatus_->SetTextColor(Color::Yellow());//黄色 - AddViewToRootContainer(labelStatus_); + group->Add(labelStatus_); // 初始化状态值标签 - 显示具体状态 labelStatusValue_ = new UILabelExt(); @@ -115,10 +149,13 @@ bool EphemerisDownloadView::EphemerisDownloadInit() { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "labelStatusValue_ new failed"); return false; } - labelStatusValue_->SetPosition(220, 120, 360, 70); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + labelStatusValue_->SetPosition(220, 120, 360, 70); + else + labelStatusValue_->SetPosition(240, 120, 360, 70); labelStatusValue_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 28); labelStatusValue_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER); - AddViewToRootContainer(labelStatusValue_); + group->Add(labelStatusValue_); // 初始化有效期标签 - 左对齐,带圆点前缀 labelValidity_ = new UILabelExt(); @@ -129,9 +166,12 @@ bool EphemerisDownloadView::EphemerisDownloadInit() { labelValidity_->SetPosition(50, 170, 360, 70); labelValidity_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); labelValidity_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER); - labelValidity_->SetText("● 有效期:"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + labelValidity_->SetText("● 有效期:"); + else + labelValidity_->SetText("● Expiry Date:"); labelValidity_->SetTextColor(Color::Green());//绿色 - AddViewToRootContainer(labelValidity_); + group->Add(labelValidity_); // 初始化有效期值标签 - 显示具体有效期 labelValidityValue_ = new UILabelExt(); @@ -139,10 +179,13 @@ bool EphemerisDownloadView::EphemerisDownloadInit() { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "labelValidityValue_ new failed"); return false; } - labelValidityValue_->SetPosition(220, 170, 360, 70); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + labelValidityValue_->SetPosition(220, 170, 360, 70); + else + labelValidityValue_->SetPosition(250, 170, 360, 70); labelValidityValue_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 28); labelValidityValue_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER); - AddViewToRootContainer(labelValidityValue_); + group->Add(labelValidityValue_); // 初始化说明标签 - 居中显示,灰色文字 labelNote_ = new UILabelExt(); @@ -153,31 +196,125 @@ bool EphemerisDownloadView::EphemerisDownloadInit() { labelNote_->SetPosition(50, 230, 366, 80); labelNote_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20); labelNote_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - labelNote_->SetText("注:请打开4G,需要在网络连接状态下才可以下载"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + labelNote_->SetText("注:需要在网络连接状态下并且有效期失效时才可以下载"); + else + labelNote_->SetText("Note: You can only download when the network is connected and the expiration date is invalid."); labelNote_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff)); // 灰色 //修改为靠左对齐 labelNote_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER); - AddViewToRootContainer(labelNote_); + group->Add(labelNote_); InitButtonExt(btnDownload_, 58, 320, 170, 90, DOWNLOAD_ID, STR_EPHEMERIS_DOWNLOAD, 30); + printf("btnDownload_ 初始化完成\n"); btnDownload_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); // 设置按键颜色 - btnDownload_->SetText("下载"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + btnDownload_->SetText("优化"); + else + btnDownload_->SetText("Optimized"); btnDownload_->SetOnClickListener(presenter_); InitButtonExt(btnBack_, 238, 320, 170, 90, BACK_ID, STR_CANCEL, 30); + printf("btnBack_ 初始化完成\n"); btnBack_->SetStyle(STYLE_BACKGROUND_COLOR, 0xffFF8A36); // 设置按键颜色 btnBack_->SetOnClickListener(presenter_); - AddViewToRootContainer(btnDownload_); - AddViewToRootContainer(btnBack_); + group->Add(btnDownload_); + group->Add(btnBack_); // 初始化完成后更新所有状态 UpdateDownloadStatus(); UpdateValidityPeriod(); UpdateDownloadButton(); - + // 蓝牙未连接页(排版与 VIEW_FIND_PHONE 未连接时一致) + if (!InitBtDisconnectView()) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "EphemerisDownloadView::InitBtDisconnectView fail"); + return false; + } + + return true; +} + +bool EphemerisDownloadView::InitBtDisconnectView() { + container_[EPHEMERIS_VIEW_BT_DISCONNECT] = new UIViewGroup(); + if (container_[EPHEMERIS_VIEW_BT_DISCONNECT] == nullptr) { + return false; + } + container_[EPHEMERIS_VIEW_BT_DISCONNECT]->SetPosition(0, 0, 466, 466); + container_[EPHEMERIS_VIEW_BT_DISCONNECT]->SetStyle(STYLE_BACKGROUND_OPA, 0); + container_[EPHEMERIS_VIEW_BT_DISCONNECT]->SetTouchable(true); + container_[EPHEMERIS_VIEW_BT_DISCONNECT]->SetDraggable(true); + container_[EPHEMERIS_VIEW_BT_DISCONNECT]->SetOnDragListener(presenter_); + + // 标题 - 与 FindPhone 未连接页排版一致(83, 50, 300, 35) + labelTitleBt_ = new UILabelExt(); + if (labelTitleBt_ == nullptr) return false; + labelTitleBt_->SetPosition(83, 50, 300, 35); + labelTitleBt_->SetStyle(STYLE_TEXT_FONT, 30); + labelTitleBt_->SetStyle(STYLE_LINE_HEIGHT, 35); + if (ConfigModel::GetInstance()->GetLanguage() == 0) { + labelTitleBt_->SetText("定位优化"); + } else { + labelTitleBt_->SetText("Location Optimization"); + } + labelTitleBt_->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); + labelTitleBt_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + labelTitleBt_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + labelTitleBt_->SetTextColor(Color::White()); + container_[EPHEMERIS_VIEW_BT_DISCONNECT]->Add(labelTitleBt_); + + // 图标 - 与「正在优化定位速度」界面的下载动图第一张一致(transmitting 使用 /user/res/down/ 24 帧) + imageViewBt_ = new UIImageView(); + if (imageViewBt_ == nullptr) return false; + imageViewBt_->SetPosition(183, 140, 100, 100); + imageViewBt_->SetSrc("/user/res/down/23.bin"); + container_[EPHEMERIS_VIEW_BT_DISCONNECT]->Add(imageViewBt_); + + // 提示文案 - 蓝牙未连接(83, 270, 300, 35) + labelHintBt_ = new UILabelExt(); + if (labelHintBt_ == nullptr) return false; + labelHintBt_->SetPosition(83, 270, 300, 35); + labelHintBt_->SetStyle(STYLE_TEXT_FONT, 30); + labelHintBt_->SetStyle(STYLE_LINE_HEIGHT, 35); + if (ConfigModel::GetInstance()->GetLanguage() == 0) { + labelHintBt_->SetText("正在等待APP下载资源包,请稍等"); + } else { + labelHintBt_->SetText("Waiting for the APP"); + } + labelHintBt_->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); + labelHintBt_->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff)); + labelHintBt_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + labelHintBt_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + container_[EPHEMERIS_VIEW_BT_DISCONNECT]->Add(labelHintBt_); + + // 关闭按钮 - 与 FindPhone 未连接页一致(0, 366, 466, 100) + btnCloseBt_ = new UILabelButtonExt(); + if (btnCloseBt_ == nullptr) return false; + btnCloseBt_->SetPosition(0, 366, 466, 100); + btnCloseBt_->SetViewId(EPHEMERIS_BT_DISCONNECT_CLOSE_ID); + btnCloseBt_->SetImageSrc(PNG_BUTTON_466x100_IMAGE, PNG_BUTTON_466x100_IMAGE); + btnCloseBt_->SetTextId(STR_CLOSE); + btnCloseBt_->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff)); + btnCloseBt_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + btnCloseBt_->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED); + btnCloseBt_->SetOnClickListener(presenter_); + container_[EPHEMERIS_VIEW_BT_DISCONNECT]->Add(btnCloseBt_); + + AddViewToRootContainer(container_[EPHEMERIS_VIEW_BT_DISCONNECT]); + container_[EPHEMERIS_VIEW_BT_DISCONNECT]->SetVisible(false); return true; } +void EphemerisDownloadView::ChangeView(int16_t hideView, int16_t showView) { + if (hideView >= EPHEMERIS_VIEW_MAX || showView >= EPHEMERIS_VIEW_MAX || + container_[hideView] == nullptr || container_[showView] == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "EphemerisDownloadView::ChangeView invalid view %d -> %d", hideView, showView); + return; + } + container_[hideView]->SetVisible(false); + container_[showView]->SetVisible(true); + Draw(); +} + UILabelExt *EphemerisDownloadView::GetDownloadLabel() { return labelStatusValue_; } @@ -189,14 +326,33 @@ UILabelExt *EphemerisDownloadView::GetValidityPeriodLabel() { // 更新下载状态显示 void EphemerisDownloadView::UpdateDownloadStatus() { if (labelStatusValue_ == nullptr) return; - //如果有效期大于0,则显示下载成功 + + // 先同步状态:如果有效期有效,确保状态为已下载 if(EphemerisDownloadModel::GetInstance().GetValidityPeriod()) { - labelStatusValue_->SetText("数据有效"); + // 如果有效期有效,但状态不是已下载,则更新状态 + if(EphemerisDownloadModel::GetInstance().GetEphemerisDownloadStatus() != EphemerisDownloadStatus::DOWNLOADED) + { + EphemerisDownloadModel::GetInstance().SetEphemerisDownloadStatus(EphemerisDownloadStatus::DOWNLOADED); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdateDownloadStatus: 同步状态为已下载"); + } + if(ConfigModel::GetInstance()->GetLanguage() == 0) + labelStatusValue_->SetText("已优化"); + else + labelStatusValue_->SetText("Optimized"); } else { - labelStatusValue_->SetText("未下载"); + // 如果有效期无效,但状态是已下载,则更新状态 + if(EphemerisDownloadModel::GetInstance().GetEphemerisDownloadStatus() == EphemerisDownloadStatus::DOWNLOADED) + { + EphemerisDownloadModel::GetInstance().SetEphemerisDownloadStatus(EphemerisDownloadStatus::NOT_DOWNLOADED); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdateDownloadStatus: 同步状态为未下载"); + } + if(ConfigModel::GetInstance()->GetLanguage() == 0) + labelStatusValue_->SetText("未优化"); + else + labelStatusValue_->SetText("Not Optimized"); } } @@ -206,7 +362,10 @@ void EphemerisDownloadView::UpdateValidityPeriod() { std::string period = EphemerisDownloadModel::GetInstance().GetEphemerisValidityPeriod(); if (period.empty()) { - labelValidityValue_->SetText("无数据"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + labelValidityValue_->SetText("未优化"); + else + labelValidityValue_->SetText("Not Optimized"); } else { labelValidityValue_->SetText(period.c_str()); } @@ -221,18 +380,28 @@ void EphemerisDownloadView::UpdateDownloadButton() { switch (status) { case EphemerisDownloadStatus::NOT_DOWNLOADED: case EphemerisDownloadStatus::FAILED: - btnDownload_->SetText("未下载"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + btnDownload_->SetText("点击优化"); + else + btnDownload_->SetText("Optimize"); btnDownload_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Blue().full); // 蓝色 btnDownload_->SetStyleForState(STYLE_BACKGROUND_COLOR, Color::GetColorFromRGBA(0xcc, 0x70, 0x00, 0xff).full, UIButton::PRESSED); break; case EphemerisDownloadStatus::DOWNLOADING: - btnDownload_->SetText("下载中"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + btnDownload_->SetText("优化中"); + else + btnDownload_->SetText("Optimizing"); btnDownload_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Gray().full); // 灰色 btnDownload_->SetStyleForState(STYLE_BACKGROUND_COLOR, Color::GetColorFromRGBA(0x44, 0x44, 0x44, 0xff).full, UIButton::PRESSED); break; case EphemerisDownloadStatus::DOWNLOADED: - btnDownload_->SetText("已下载"); - btnDownload_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full); // 绿色 + if(ConfigModel::GetInstance()->GetLanguage() == 0) + btnDownload_->SetText("已优化"); + else + btnDownload_->SetText("Optimized"); + // btnDownload_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full); // 绿色 + btnDownload_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Gray().full); // 灰色 btnDownload_->SetStyleForState(STYLE_BACKGROUND_COLOR, Color::GetColorFromRGBA(0x44, 0x44, 0x44, 0xff).full, UIButton::PRESSED); break; } diff --git a/code/sdk/application/wearable/n9/service/msg_center/src/notify/transmitting.cpp b/code/sdk/application/wearable/n9/service/msg_center/src/notify/transmitting.cpp index dd7685f01..e83fa686c 100644 --- a/code/sdk/application/wearable/n9/service/msg_center/src/notify/transmitting.cpp +++ b/code/sdk/application/wearable/n9/service/msg_center/src/notify/transmitting.cpp @@ -5,7 +5,7 @@ #include "components/ui_image_view.h" #include "components/ui_label.h" #include "components/ui_label_ext.h" -#include "components/ui_label_button_ext.h" +#include "components/ui_label_button_ext.h" #ifdef SUPPORT_BLE_SERVICE // #include "battery_service.h" #include "bleEvent.h" @@ -30,39 +30,43 @@ namespace OHOS { static UIImageView *imageCharge = nullptr; - static UIViewGroup *UIViewGroup_transmitting = nullptr; + static UIViewGroup *UIViewGroup_transmitting=nullptr; - static UIImageView *transmitting_img = nullptr; + static UIImageView *transmitting_img=nullptr; - static UISlider *updatasider = nullptr; + static UISlider *updatasider=nullptr; - static UILabelExt *Title = nullptr; + static UILabelExt *Title=nullptr; - static UILabelExt *label_ = nullptr; + static UILabelExt *label_=nullptr; - static UIImageAnimatorView *downImageAnimatorView = nullptr; + static UIImageAnimatorView *downImageAnimatorView=nullptr; - static constexpr char *ShutDownPaths = "/user/res/down/"; - static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES = 24; // 图片帧数 - static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_TIME = 150; // 图片更新间隔 + static constexpr char *ShutDownPaths = "/user/res/down/"; + static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES = 24; // 图片帧数 + static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_TIME = 150; // 图片更新间隔 static ImageAnimatorInfo ImageInfo_animator[SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES]; // 关机图像的信息 static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_X = 183; static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_Y = 140; static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_W = 100; static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_H = 100; - const ImageInfo **imageInfo_dwon{nullptr}; // 关机图片路径数组 + const ImageInfo **imageInfo_dwon{nullptr}; // 关机图片路径数组 -#define TRANSMITTING_SUCC_PATH PNG_SUCC_IMAGE; -#define TRANSMITTING_FAIL_PATH PNG_ATTENTION_IMAGE; -#define TRANSMITTING_OTA_DOWN "/user/res/system/FOOINGLOGO.bin" + #define TRANSMITTING_SUCC_PATH PNG_SUCC_IMAGE; + #define TRANSMITTING_FAIL_PATH PNG_ATTENTION_IMAGE; + #define TRANSMITTING_OTA_DOWN "/user/system/FOOINGOTALOGO.bin" + -#define LOW_POWER_BUTTON "LOW_POWER_BUTTON" - static void CreatetransmittingAnimator(void) + #define LOW_POWER_BUTTON "LOW_POWER_BUTTON" + + + + static void CreatetransmittingAnimator(void) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShutDownAnimatorView::ShowUpShutDownAnimatorView"); - imageInfo_dwon = CreateImageInfoArray(ShutDownPaths, SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES, "bin"); + imageInfo_dwon = CreateImageInfoArray(ShutDownPaths,SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES, "bin"); if (downImageAnimatorView == nullptr) { @@ -87,102 +91,141 @@ namespace OHOS downImageAnimatorView->SetImageAnimatorSrc(ImageInfo_animator, SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES, 100); downImageAnimatorView->SetRepeat(true); downImageAnimatorView->SetRepeatTimes(1); + } downImageAnimatorView->SetVisible(true); downImageAnimatorView->Start(); - // downImageAnimatorView->Start(); - - return; + //downImageAnimatorView->Start(); + + return ; } + + + - static uint8_t Transmitting_falg = 1; + static uint8_t Transmitting_falg=1; void set_transmittingShow_falg(uint8_t falg) { - Transmitting_falg = falg; + Transmitting_falg=falg; } - static osTimerId_t transmitting_timer = NULL; + static osTimerId_t transmitting_timer= NULL; - void Freetransmitting(void) + void Freetransmitting(void) { - if (UIViewGroup_transmitting != nullptr) - { - UIViewGroup_transmitting->RemoveAll(); + if (UIViewGroup_transmitting != nullptr) + { + UIViewGroup_transmitting->RemoveAll(); - if (transmitting_img) - { - delete transmitting_img; - transmitting_img = nullptr; - } - if (Title) - { - delete Title; - Title = nullptr; - } - if (label_) - { - delete label_; - label_ = nullptr; - } - if (downImageAnimatorView) - { - FreeImageInfoArray(imageInfo_dwon, ShutDownPaths, SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES, "bin"); - delete downImageAnimatorView; - downImageAnimatorView = nullptr; - } - if (updatasider) - { - delete updatasider; - updatasider = nullptr; - } - if (transmitting_timer) - { - - osTimerStop(transmitting_timer); - osStatus_t ret = osTimerDelete(transmitting_timer); - if (ret != osOK) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Disatransmitting_timer failed ret = %lx!", ret); - // return; - } - transmitting_timer = nullptr; - } - - const power_display_svr_api_t *display_api = power_display_svr_get_api(); - if (display_api->get_screen_state() != SCREEN_ON) - { - display_api->turn_on_screen(); + if(transmitting_img) + { + delete transmitting_img; + transmitting_img = nullptr; + } + if(Title) + { + delete Title; + Title = nullptr; + } + if(label_) + { + delete label_; + label_ = nullptr; + } + if(downImageAnimatorView) + { + FreeImageInfoArray(imageInfo_dwon,ShutDownPaths, SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES,"bin"); + delete downImageAnimatorView; + downImageAnimatorView = nullptr; + } + if(updatasider) + { + delete updatasider; + updatasider = nullptr; + } + if(transmitting_timer) + { + + osTimerStop(transmitting_timer); + osStatus_t ret = osTimerDelete(transmitting_timer); + if (ret != osOK) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Disatransmitting_timer failed ret = %lx!", ret); + //return; } - display_api->set_auto_timeout_function(true); + transmitting_timer = nullptr; + } + const power_display_svr_api_t *display_api = power_display_svr_get_api(); + if (display_api->get_screen_state() != SCREEN_ON) + { + display_api->turn_on_screen(); + } + display_api->set_auto_timeout_function(true); + #ifdef SUPPORT_CYWEE_SERVICE - cywee_hand_wake_switch(1); // 关闭抬腕亮屏,和息屏 + cywee_hand_wake_switch(1); // 关闭抬腕亮屏,和息屏 #endif - RootView::GetInstance()->Remove(UIViewGroup_transmitting); - delete UIViewGroup_transmitting; - UIViewGroup_transmitting = nullptr; + RootView::GetInstance()->Remove(UIViewGroup_transmitting); + delete UIViewGroup_transmitting; + UIViewGroup_transmitting = nullptr; - uapi_dev_runtime_set_transmitting_status(0); + uapi_dev_runtime_set_transmitting_status(0); } } - static uint8_t timer_falg_low_power = 5; + static uint8_t timer_falg_low_power=5; - static uint8_t test_flag = 0; + static uint8_t transmitting_ota_timeout = 10; // 10秒超时计数(每秒减1) + static uint32_t cur_recv_value = 0; // 当前接收值 + static uint32_t last_recv_value = 0; // 上一次接收值 + static bool is_ota_data_stop = false; // 标记是否停止传输 + static bool is_first_check = true; // 首次检测标记(避免初始值误判) static void OTATimerCallBackProc(int data) - { -#ifdef SUPPORT_BLE_SERVICE -#if 0 + { + #ifdef SUPPORT_BLE_SERVICE if(updatasider) - updatasider->SetValue(test_flag++); -#else - if (updatasider) - updatasider->SetValue(get_OTA_recv_value()); -#endif - if (updatasider) + { + cur_recv_value = get_OTA_recv_value(); // 获取当前接收值 + updatasider->SetValue(cur_recv_value); updatasider->Invalidate(); -#endif + + // ===== 核心检测逻辑 ===== + // 首次检测:初始化上一次值,不做判断 + if (is_first_check) + { + last_recv_value = cur_recv_value; + is_first_check = false; + return; + } + + // 非首次检测:对比当前值与上一次值 + if (cur_recv_value == last_recv_value) + { + // 值无变化,超时计数减1 + transmitting_ota_timeout--; + if (transmitting_ota_timeout == 0) + { + // 10秒值未变化,判定APP停止传输 + is_ota_data_stop = true; + transmitting_ota_timeout = 10; // 重置计数(可选,根据业务需求) + is_first_check = true; // 重置首次检测标记(可选) + + // 【此处添加停止传输后的业务逻辑】 + // 示例:打印日志、停止OTA定时器、通知上层等 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OTA传输停止:10秒未收到新数据"); + NotificationManager::GetInstance()->StopNotify(); + } + } + else + { + // 值有变化,重置超时计数和上一次值 + transmitting_ota_timeout = 10; + last_recv_value = cur_recv_value; + is_ota_data_stop = false; + } + } + #endif } void OTATimerCallBack(int data) @@ -192,43 +235,66 @@ namespace OHOS void dialtimerCallBack(int data) { - NotificationManager::GetInstance()->StopNotify(); + NotificationManager::GetInstance()->StopNotify(); } - void creat_down_OTA() + static uint8_t epo_timer_falg=20; + void epo_timerCallBack(int data) { + //给15s时间,等待EPO文件解压完成,超过15s不管成功与否,都停止通知 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "epo_timerCallBack epo_timer_falg = %d", epo_timer_falg); + if(epo_timer_falg<=0) + { + epo_timer_falg=20; + NotificationManager::GetInstance()->StopNotify(); + } + else + { + //如果EPO文件解压成功,停止通知 + if(uapi_dev_runtime_get_epo_file_extracted_status() == 1) + { + NativeAbility::GetInstance().ChangeSlice(VIEW_EPHEMERIS_DOWNLOAD); + NotificationManager::GetInstance()->StopNotify(); + } + } + epo_timer_falg--; + } + + + + void creat_down_OTA() + { + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "OTA 界面创建"); if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(83, 50); // widget's left position and top position - Title->Resize(300, 35); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(83, 50); + Title->Resize(300, 35); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property Title->SetText("OTA下载中"); - Title->SetTextId(STR_OTA_DOWNLOAD); - + Title->SetTextId (STR_OTA_DOWNLOAD); Title->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView UIViewGroup_transmitting->Add(Title); - if (updatasider == nullptr) { updatasider = new UISlider(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView new fail"); + if(updatasider == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "updatasider new fail"); + } } - updatasider->SetSliderColor(Color::Gray(), Color::Silver()); updatasider->SetPosition(63, 317, 340, 50); updatasider->SetViewId("SystemUpdateView_updatasider"); - updatasider->SetRange(0, 100); - + updatasider->SetRange(100, 0); updatasider->SetStyle(STYLE_BORDER_RADIUS, 100); updatasider->SetBackgroundStyle(STYLE_LINE_CAP, CapType::CAP_ROUND); updatasider->SetForegroundStyle(STYLE_LINE_CAP, CapType::CAP_ROUND); @@ -238,17 +304,18 @@ namespace OHOS updatasider->SetTouchable(false); updatasider->SetValue(0); UIViewGroup_transmitting->Add(updatasider); - - if (label_ == nullptr) + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 220); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 220); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property label_->SetText("软件正在更新"); label_->SetTextId(STR_OTA_DOWNLOADING); label_->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); @@ -256,129 +323,123 @@ namespace OHOS label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView UIViewGroup_transmitting->Add(label_); - - // Add ImageView to App - + /* -------------------------------------------------------------------------- */ if (transmitting_img == nullptr) { transmitting_img = new UIImageView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::FOOINGLOGOImage new fail!"); + if(transmitting_img == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "transmitting_img new fail"); + } } - transmitting_img->SetPosition(117, 87, 230, 160); + transmitting_img->SetPosition(193, 130, 80, 88); const char *imagesPath = TRANSMITTING_OTA_DOWN; transmitting_img->SetSrc(imagesPath); UIViewGroup_transmitting->Add(transmitting_img); uint32_t tick; osStatus_t retTimer; - -#ifdef SUPPORT_BLE_SERVICE + + #ifdef SUPPORT_BLE_SERVICE Set_OTA_recv_value(); -#endif - if (transmitting_timer != NULL) + transmitting_ota_timeout = 10; + #endif + if(transmitting_timer!=NULL) { osTimerStop(transmitting_timer); osTimerDelete(transmitting_timer); transmitting_timer = NULL; } transmitting_timer = osTimerNew((osTimerFunc_t)OTATimerCallBack, osTimerPeriodic, NULL, NULL); - tick = 500; // osMs2Tick(1000); + tick =500;// osMs2Tick(1000); retTimer = osTimerStart(transmitting_timer, tick); - if (retTimer != osOK && transmitting_timer != NULL) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StartCallTimer osTimerStart failed, ret = %lx!!", retTimer); + if (retTimer != osOK && transmitting_timer != NULL) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"StartCallTimer osTimerStart failed, ret = %lx!!", retTimer); osTimerDelete(transmitting_timer); transmitting_timer = NULL; - return; + return ; } } - static upg_result_t upg_result; - static uint32_t last_image_index; + static upg_result_t upg_result; + static uint32_t last_image_index; - static char updata_fail_str[32] = {0}; + static char updata_fail_str[32]={0}; static uint8_t TRANSMIT_DATA; void get_updatafail_data(void) { -#ifdef SUPPORT_BLE_SERVICE + #ifdef SUPPORT_BLE_SERVICE errcode_t ret; ret = uapi_upg_get_result(&upg_result, &last_image_index); - if (ret != ERRCODE_SUCC) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_upg_get_result error = 0x%x\r\n", ret); - } - else - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "upg_result = %d, last_image_index:%d\r\n", upg_result, last_image_index); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_upg_get_result OK!!\r\n"); - if (upg_result != UPG_RESULT_UPDATE_SUCCESS) - { - sprintf_s(updata_fail_str, 32, "%d_%d", (int)upg_result, last_image_index); - TRANSMIT_DATA = OTA_UPDATA_FAIL; - if (ConfigModel::GetInstance()->get_configData_int(ConfigModel::CONFIGMODEL_ITEM_OTA_UPGRADE)) + if (ret != ERRCODE_SUCC) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"uapi_upg_get_result error = 0x%x\r\n", ret); + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"upg_result = %d, last_image_index:%d\r\n", upg_result, last_image_index); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"uapi_upg_get_result OK!!\r\n"); + if(upg_result!=UPG_RESULT_UPDATE_SUCCESS) + { + sprintf_s(updata_fail_str,32,"%d_%d",(int)upg_result,last_image_index); + TRANSMIT_DATA=OTA_UPDATA_FAIL; + if(ConfigModel::GetInstance()->get_configData_int(ConfigModel::CONFIGMODEL_ITEM_OTA_UPGRADE)) { - CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT, &TRANSMIT_DATA, 1); - ConfigModel::GetInstance()->set_condigData_Int(ConfigModel::CONFIGMODEL_ITEM_OTA_UPGRADE, 0); + CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1); + ConfigModel::GetInstance()->set_condigData_Int(ConfigModel::CONFIGMODEL_ITEM_OTA_UPGRADE,0); } - } + } + } -#endif + #endif } void Creat_OTA_Updata_FAIL() { - if (Title == nullptr) + + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(83, 50); // widget's left position and top position - Title->Resize(300, 35); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(83, 50); + Title->Resize(300, 35); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property Title->SetText("OTA upgrade failure"); Title->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 30); - UIViewGroup_transmitting->Add(Title); - - if (label_ == nullptr) + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); + label_->SetViewId("label2"); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property - char fail_str[128] = {0}; - sprintf_s(fail_str, 128, "ota升级失败,请尝试重启设备"); - + char fail_str[128]={0}; + sprintf_s(fail_str,128,"ota升级失败,请尝试重启设备"); label_->SetText(fail_str); label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff)); label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 30); - UIViewGroup_transmitting->Add(label_); - - // Add ImageView to App - if (transmitting_img == nullptr) { transmitting_img = new UIImageView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::FOOINGLOGOImage new fail!"); } - transmitting_img->SetPosition(193, 150, 80, 80); + transmitting_img->SetPosition(193, 150,80, 80); const char *imagesPath = TRANSMITTING_FAIL_PATH; transmitting_img->SetSrc(imagesPath); UIViewGroup_transmitting->Add(transmitting_img); @@ -386,52 +447,52 @@ namespace OHOS void Creat_CAT1_OTA_Updata() { - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(83, 50); // widget's left position and top position - Title->Resize(300, 35); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(83, 50); + Title->Resize(300, 35); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property Title->SetText("CAT1 OTA upgradeing"); Title->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 30); - UIViewGroup_transmitting->Add(Title); - - if (label_ == nullptr) + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property - label_->SetText("4G模块OTA升级中,请勿操作,升级成功后会自动重启"); label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff)); label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 30); - UIViewGroup_transmitting->Add(label_); - - // Add ImageView to App - + /* -------------------------------------------------------------------------- */ if (transmitting_img == nullptr) { transmitting_img = new UIImageView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::FOOINGLOGOImage new fail!"); + if(transmitting_img == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "transmitting_img new fail"); + } } - transmitting_img->SetPosition(193, 150, 80, 80); + transmitting_img->SetPosition(193, 150,80, 80); const char *imagesPath = TRANSMITTING_FAIL_PATH; transmitting_img->SetSrc(imagesPath); UIViewGroup_transmitting->Add(transmitting_img); @@ -439,91 +500,87 @@ namespace OHOS void creat_down_OTA_FAIL() { - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(143, 51); // widget's left position and top position - Title->Resize(800, 88); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(143, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property Title->SetText("OTA下载失败"); - Title->SetTextId(STR_OTA_DOWNLOADFIAL); + Title->SetTextId (STR_OTA_DOWNLOADFIAL); Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView + /* -------------------------------------------------------------------------- */ UIViewGroup_transmitting->Add(Title); - if (label_ == nullptr) + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property label_->SetText("下载升级包失败,请退出或者重新下载"); label_->SetTextId(STR_OTA_DOWNLOADFIAL_TRY); - label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff)); label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - UIViewGroup_transmitting->Add(label_); - - // Add ImageView to App - if (transmitting_img == nullptr) { transmitting_img = new UIImageView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::FOOINGLOGOImage new fail!"); } - transmitting_img->SetPosition(117, 87, 230, 160); + transmitting_img->SetPosition(193, 130, 80, 88); const char *imagesPath = TRANSMITTING_OTA_DOWN; transmitting_img->SetSrc(imagesPath); UIViewGroup_transmitting->Add(transmitting_img); } void creat_down_OTA_SUCC() - { - if (Title == nullptr) + { + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(143, 51); // widget's left position and top position - Title->Resize(800, 88); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(143, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property Title->SetText("OTA下载成功"); - Title->SetTextId(STR_OTA_DOWNLOADSUCC); + Title->SetTextId (STR_OTA_DOWNLOADSUCC); Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView UIViewGroup_transmitting->Add(Title); - if (label_ == nullptr) + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property label_->SetText("下载升级包成功,可以开始升级手表"); label_->SetTextId(STR_OTA_DOWNLOADSUCC_UPDATA); label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); @@ -531,56 +588,54 @@ namespace OHOS label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView UIViewGroup_transmitting->Add(label_); - - // Add ImageView to App - if (transmitting_img == nullptr) { transmitting_img = new UIImageView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::FOOINGLOGOImage new fail!"); + if(transmitting_img == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "transmitting_img new fail"); + } } - transmitting_img->SetPosition(117, 87, 230, 160); + transmitting_img->SetPosition(193, 130, 80, 88); const char *imagesPath = TRANSMITTING_OTA_DOWN; transmitting_img->SetSrc(imagesPath); UIViewGroup_transmitting->Add(transmitting_img); } - + void creat_down_Dial() { - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(158, 51); // widget's left position and top position - Title->Resize(800, 88); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(158, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property Title->SetText("表盘安装中"); - Title->SetTextId(STR_DIAL_DOWNLOADING_TITLE); + Title->SetTextId (STR_DIAL_DOWNLOADING_TITLE); Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView UIViewGroup_transmitting->Add(Title); Title->SetVisible(true); - - if (label_ == nullptr) + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property label_->SetText("正在安装表盘,请不要做其他操作或关闭手表"); label_->SetTextId(STR_DIAL_DOWNLOADING_LABEL); label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); @@ -588,51 +643,46 @@ namespace OHOS label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView UIViewGroup_transmitting->Add(label_); label_->SetVisible(true); - CreatetransmittingAnimator(); - // UIViewGroup_transmitting->Add(updatasider); - UIViewGroup_transmitting->Add(downImageAnimatorView); } + void creat_down_MP3() { - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(158, 51); // widget's left position and top position - Title->Resize(800, 88); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(158, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property Title->SetText("音乐传输中"); - Title->SetTextId(STR_MUSIC_TRANSMIT); - + Title->SetTextId (STR_MUSIC_TRANSMIT); Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView - UIViewGroup_transmitting->Add(Title); Title->SetVisible(true); - - if (label_ == nullptr) + UIViewGroup_transmitting->Add(Title); + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property label_->SetText("正在传输音乐,请不要做其他操作或关闭手表"); label_->SetTextId(STR_MUSIC_TRANSMIT_NOTE); label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); @@ -640,51 +690,45 @@ namespace OHOS label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView - UIViewGroup_transmitting->Add(label_); label_->SetVisible(true); - + UIViewGroup_transmitting->Add(label_); CreatetransmittingAnimator(); - // UIViewGroup_transmitting->Add(updatasider); - UIViewGroup_transmitting->Add(downImageAnimatorView); } void creat_down_BIN() { - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(158, 51); // widget's left position and top position - Title->Resize(800, 88); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(158, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property Title->SetText("数据传输中"); // Title->SetTextId (STR_MUSIC_TRANSMIT); - Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView - UIViewGroup_transmitting->Add(Title); Title->SetVisible(true); - - if (label_ == nullptr) + UIViewGroup_transmitting->Add(Title); + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property label_->SetText("正在下载应用,请不要做其他操作或关闭手表"); // label_->SetTextId(STR_MUSIC_TRANSMIT_NOTE); label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); @@ -692,50 +736,45 @@ namespace OHOS label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView - UIViewGroup_transmitting->Add(label_); label_->SetVisible(true); - + UIViewGroup_transmitting->Add(label_); CreatetransmittingAnimator(); - // UIViewGroup_transmitting->Add(updatasider); - UIViewGroup_transmitting->Add(downImageAnimatorView); } + void creat_down_MP3_succ() { - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(173, 51); // widget's left position and top position - Title->Resize(800, 88); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(173, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property Title->SetText("传输成功"); - Title->SetTextId(STR_MP3_SUCC_TITLE); + Title->SetTextId (STR_MP3_SUCC_TITLE); Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView - UIViewGroup_transmitting->Add(Title); Title->SetVisible(true); - - if (label_ == nullptr) + UIViewGroup_transmitting->Add(Title); + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property label_->SetText("音乐传输成功正在校验,请稍等"); label_->SetTextId(STR_MUSIC_TRANSMIT_SUCCESS_NOTE); label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); @@ -743,74 +782,70 @@ namespace OHOS label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - + label_->SetVisible(true); + UIViewGroup_transmitting->Add(label_); + /* -------------------------------------------------------------------------- */ if (transmitting_img == nullptr) { transmitting_img = new UIImageView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::FOOINGLOGOImage new fail!"); + if(transmitting_img == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "transmitting_img new fail"); + } } - transmitting_img->SetPosition(193, 150, 80, 80); + transmitting_img->SetPosition(193, 150,80, 80); const char *imagesPath = TRANSMITTING_SUCC_PATH; transmitting_img->SetSrc(imagesPath); UIViewGroup_transmitting->Add(transmitting_img); - + /* -------------------------------------------------------------------------- */ uint32_t tick; osStatus_t retTimer; - if (transmitting_timer != NULL) + if(transmitting_timer!=NULL) { osTimerStop(transmitting_timer); osTimerDelete(transmitting_timer); transmitting_timer = NULL; } transmitting_timer = osTimerNew((osTimerFunc_t)dialtimerCallBack, osTimerPeriodic, NULL, NULL); - tick = 2000; // osMs2Tick(1000); + tick =2000;// osMs2Tick(1000); retTimer = osTimerStart(transmitting_timer, tick); - if (retTimer != osOK && transmitting_timer != NULL) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StartCallTimer osTimerStart failed, ret = %lx!!", retTimer); + if (retTimer != osOK && transmitting_timer != NULL) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"StartCallTimer osTimerStart failed, ret = %lx!!", retTimer); osTimerDelete(transmitting_timer); transmitting_timer = NULL; - return; + return ; } - - // Add to rootView - UIViewGroup_transmitting->Add(label_); - label_->SetVisible(true); } + void creat_down_BIN_succ() { - if (Title == nullptr) - { - Title = new UILabelExt(); + if (Title == nullptr) { + Title = new UILabelExt(); } - Title->SetPosition(173, 51); // widget's left position and top position - Title->Resize(800, 88); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(173, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property Title->SetText("传输成功"); // Title->SetTextId (STR_MP3_SUCC_TITLE); Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView - UIViewGroup_transmitting->Add(Title); Title->SetVisible(true); - - if (label_ == nullptr) + UIViewGroup_transmitting->Add(Title); + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property label_->SetText("应用安装中,请稍等"); // label_->SetTextId(STR_MUSIC_TRANSMIT_SUCCESS_NOTE); label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); @@ -818,74 +853,70 @@ namespace OHOS label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - + label_->SetVisible(true); + UIViewGroup_transmitting->Add(label_); + /* -------------------------------------------------------------------------- */ if (transmitting_img == nullptr) { transmitting_img = new UIImageView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::FOOINGLOGOImage new fail!"); } - transmitting_img->SetPosition(193, 150, 80, 80); + transmitting_img->SetPosition(193, 150,80, 80); const char *imagesPath = TRANSMITTING_SUCC_PATH; transmitting_img->SetSrc(imagesPath); UIViewGroup_transmitting->Add(transmitting_img); - + /* -------------------------------------------------------------------------- */ uint32_t tick; osStatus_t retTimer; - if (transmitting_timer != NULL) + if(transmitting_timer!=NULL) { osTimerStop(transmitting_timer); osTimerDelete(transmitting_timer); transmitting_timer = NULL; } transmitting_timer = osTimerNew((osTimerFunc_t)dialtimerCallBack, osTimerPeriodic, NULL, NULL); - tick = 2000; // osMs2Tick(1000); + tick =2000;// osMs2Tick(1000); retTimer = osTimerStart(transmitting_timer, tick); - if (retTimer != osOK && transmitting_timer != NULL) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StartCallTimer osTimerStart failed, ret = %lx!!", retTimer); + if (retTimer != osOK && transmitting_timer != NULL) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"StartCallTimer osTimerStart failed, ret = %lx!!", retTimer); osTimerDelete(transmitting_timer); transmitting_timer = NULL; - return; + return ; } - - // Add to rootView - UIViewGroup_transmitting->Add(label_); - label_->SetVisible(true); } void creat_down_Dial_succ() { - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(173, 51); // widget's left position and top position - Title->Resize(800, 88); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(173, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property Title->SetText("安装成功"); - Title->SetTextId(STR_DIAL_SUCC_TITLE); + Title->SetTextId (STR_DIAL_SUCC_TITLE); Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView - UIViewGroup_transmitting->Add(Title); Title->SetVisible(true); - - if (label_ == nullptr) + UIViewGroup_transmitting->Add(Title); + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property label_->SetText("表盘安装成功正在更新表盘,请稍等"); label_->SetTextId(STR_DIAL_SUCC_LABEL); label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); @@ -893,253 +924,242 @@ namespace OHOS label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - + label_->SetVisible(true); + UIViewGroup_transmitting->Add(label_); + /* -------------------------------------------------------------------------- */ if (transmitting_img == nullptr) { transmitting_img = new UIImageView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::FOOINGLOGOImage new fail!"); + if(transmitting_img == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "transmitting_img new fail"); + } } - transmitting_img->SetPosition(193, 150, 80, 80); + transmitting_img->SetPosition(193, 150,80, 80); const char *imagesPath = TRANSMITTING_SUCC_PATH; transmitting_img->SetSrc(imagesPath); UIViewGroup_transmitting->Add(transmitting_img); - + /* -------------------------------------------------------------------------- */ uint32_t tick; osStatus_t retTimer; - if (transmitting_timer != NULL) + if(transmitting_timer!=NULL) { osTimerStop(transmitting_timer); osTimerDelete(transmitting_timer); transmitting_timer = NULL; } - transmitting_timer = osTimerNew((osTimerFunc_t)dialtimerCallBack, osTimerPeriodic, NULL, NULL); - tick = 2000; // osMs2Tick(1000); + transmitting_timer = osTimerNew((osTimerFunc_t)dialtimerCallBack, osTimerOnce, NULL, NULL); + tick =2000;// osMs2Tick(1000); retTimer = osTimerStart(transmitting_timer, tick); - if (retTimer != osOK && transmitting_timer != NULL) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StartCallTimer osTimerStart failed, ret = %lx!!", retTimer); + if (retTimer != osOK && transmitting_timer != NULL) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"StartCallTimer osTimerStart failed, ret = %lx!!", retTimer); osTimerDelete(transmitting_timer); transmitting_timer = NULL; - return; + return ; } - - // Add to rootView - UIViewGroup_transmitting->Add(label_); - label_->SetVisible(true); } void creat_down_max_Dial_fail() { - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(173, 51); // widget's left position and top position - Title->Resize(800, 88); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(173, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property - Title->SetTextId(STR_OPERAT_FAIL); // TODO:多国语言 - // Title->SetTextId (STR_DIAL_FAIL_TITLE); + Title->SetTextId(STR_OPERAT_FAIL);//TODO:多国语言 Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView - UIViewGroup_transmitting->Add(Title); Title->SetVisible(true); - - if (label_ == nullptr) + UIViewGroup_transmitting->Add(Title); + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property - - label_->SetTextId(STR_DIAL_NOTE); // TODO:多国语言 - + label_->SetTextId(STR_DIAL_NOTE);//TODO:多国语言 label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff)); label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - + label_->SetVisible(true); + UIViewGroup_transmitting->Add(label_); + /* -------------------------------------------------------------------------- */ if (transmitting_img == nullptr) { transmitting_img = new UIImageView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::FOOINGLOGOImage new fail!"); } - transmitting_img->SetPosition(193, 150, 80, 80); + transmitting_img->SetPosition(193, 150,80, 80); const char *imagesPath = TRANSMITTING_FAIL_PATH; transmitting_img->SetSrc(imagesPath); UIViewGroup_transmitting->Add(transmitting_img); - - // Add to rootView - UIViewGroup_transmitting->Add(label_); - label_->SetVisible(true); } void creat_down_max_MP3_fail() { - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(173, 51); // widget's left position and top position - Title->Resize(800, 88); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(173, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property - Title->SetTextId(STR_OPERAT_FAIL); // TODO:多国语言 - // Title->SetTextId (STR_DIAL_FAIL_TITLE); + Title->SetTextId(STR_OPERAT_FAIL);//TODO:多国语言 Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView - UIViewGroup_transmitting->Add(Title); Title->SetVisible(true); - - if (label_ == nullptr) + UIViewGroup_transmitting->Add(Title); + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property - - // label_->SetTextId(STR_DIAL_NOTE);//TODO:多国语言 - // - // - // if(ConfigModel::GetInstance()->GetLanguage() == ZH_CN) label_->SetText("本地下载音乐已达到存储上限;请先删除部分歌曲再进行上传"); - // else - // label_->SetText( - // "The storage capacity of locally downloaded music has reached the upper limit.\ - // Please delete some songs before uploading"); - label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff)); label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - + label_->SetVisible(true); + UIViewGroup_transmitting->Add(label_); + /* -------------------------------------------------------------------------- */ if (transmitting_img == nullptr) { transmitting_img = new UIImageView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::FOOINGLOGOImage new fail!"); + if(transmitting_img == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "transmitting_img new fail"); + } } - transmitting_img->SetPosition(193, 150, 80, 80); + transmitting_img->SetPosition(193, 150,80, 80); const char *imagesPath = TRANSMITTING_FAIL_PATH; transmitting_img->SetSrc(imagesPath); UIViewGroup_transmitting->Add(transmitting_img); - - // Add to rootView - UIViewGroup_transmitting->Add(label_); - label_->SetVisible(true); } void creat_down_Dial_fail() { - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(173, 51); // widget's left position and top position - Title->Resize(800, 88); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(173, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property - Title->SetText("安装失败"); - Title->SetTextId(STR_DIAL_FAIL_TITLE); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + Title->SetText("安装失败"); + else + Title->SetText("Install Failed"); + Title->SetTextId (STR_DIAL_FAIL_TITLE); Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView - UIViewGroup_transmitting->Add(Title); Title->SetVisible(true); - - if (label_ == nullptr) + UIViewGroup_transmitting->Add(Title); + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property - label_->SetTextId(STR_DIAL_FAIL_LABEL); - label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff)); label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - + label_->SetVisible(true); + UIViewGroup_transmitting->Add(label_); + /* -------------------------------------------------------------------------- */ if (transmitting_img == nullptr) { transmitting_img = new UIImageView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::FOOINGLOGOImage new fail!"); + if(transmitting_img == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "transmitting_img new fail"); + } } - transmitting_img->SetPosition(193, 150, 80, 80); + transmitting_img->SetPosition(193, 150,80, 80); const char *imagesPath = TRANSMITTING_FAIL_PATH; transmitting_img->SetSrc(imagesPath); UIViewGroup_transmitting->Add(transmitting_img); - - // Add to rootView - UIViewGroup_transmitting->Add(label_); - label_->SetVisible(true); } void creat_down_MP3_fail() { - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(173, 51); // widget's left position and top position - Title->Resize(800, 88); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(173, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property - Title->SetText("传输失败"); - Title->SetTextId(STR_MP3_FAIL_TITL); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + Title->SetText("传输失败"); + else + Title->SetText("Transfer Failed"); + Title->SetTextId (STR_MP3_FAIL_TITL); Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView - UIViewGroup_transmitting->Add(Title); Title->SetVisible(true); - - if (label_ == nullptr) + UIViewGroup_transmitting->Add(Title); + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property label_->SetText("音乐传输失败,请退出或重新安装"); label_->SetTextId(STR_MP3_FAIL_LABEL); label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); @@ -1147,343 +1167,374 @@ namespace OHOS label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - + label_->SetVisible(true); + UIViewGroup_transmitting->Add(label_); + /* -------------------------------------------------------------------------- */ if (transmitting_img == nullptr) { transmitting_img = new UIImageView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::FOOINGLOGOImage new fail!"); } - transmitting_img->SetPosition(193, 150, 80, 80); + transmitting_img->SetPosition(193, 150,80, 80); const char *imagesPath = TRANSMITTING_FAIL_PATH; transmitting_img->SetSrc(imagesPath); UIViewGroup_transmitting->Add(transmitting_img); - - // Add to rootView - UIViewGroup_transmitting->Add(label_); - label_->SetVisible(true); } void creat_down_BIN_fail() { - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(173, 51); // widget's left position and top position - Title->Resize(800, 88); // widget's width and height - Title->SetViewId("label1"); // Set style + Title->SetPosition(173, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property - Title->SetText("传输失败"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + Title->SetText("传输失败"); + else + Title->SetText("Transfer Failed"); // Title->SetTextId (STR_MP3_FAIL_TITL); Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView UIViewGroup_transmitting->Add(Title); Title->SetVisible(true); - - if (label_ == nullptr) + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); // widget's left position and top position - label_->Resize(345, 101); // widget's width and height - label_->SetViewId("label2"); // Set style + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property - label_->SetText("app安装失败,请退出或重新安装"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + label_->SetText("app安装失败,请退出或重新安装"); + else + label_->SetText("App install failed, please exit or reinstall"); // label_->SetTextId(STR_MP3_FAIL_LABEL); label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff)); label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - + UIViewGroup_transmitting->Add(label_); + label_->SetVisible(true); + /* -------------------------------------------------------------------------- */ if (transmitting_img == nullptr) { transmitting_img = new UIImageView(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::FOOINGLOGOImage new fail!"); + if(transmitting_img == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "transmitting_img new fail"); + } } - transmitting_img->SetPosition(193, 150, 80, 80); + transmitting_img->SetPosition(193, 150,80, 80); const char *imagesPath = TRANSMITTING_FAIL_PATH; transmitting_img->SetSrc(imagesPath); UIViewGroup_transmitting->Add(transmitting_img); - - // Add to rootView - UIViewGroup_transmitting->Add(label_); - label_->SetVisible(true); } + void creat_down_EPO() { - printf("creat_down_EPO\n"); - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(158, 51); - Title->Resize(800, 88); + Title->SetPosition(108, 51); + Title->Resize(300, 88); Title->SetViewId("label1"); Title->SetStyle(STYLE_TEXT_FONT, 30); - - Title->SetText("星历下载中"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + Title->SetText("正在优化定位速度"); + else + Title->SetText("Optimizing"); Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView - UIViewGroup_transmitting->Add(Title); + Title->SetX((466 - Title->GetWidth()) / 2); Title->SetVisible(true); - - if (label_ == nullptr) + UIViewGroup_transmitting->Add(Title); + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); - label_->Resize(345, 101); + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - // Set additional property - label_->SetText("正在下载星历,请不要做其他操作或关闭手表"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + label_->SetText("请稍等..."); + else + label_->SetText("Please wait..."); label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff)); label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to rootView UIViewGroup_transmitting->Add(label_); label_->SetVisible(true); - + /* -------------------------------------------------------------------------- */ CreatetransmittingAnimator(); - UIViewGroup_transmitting->Add(downImageAnimatorView); } void creat_down_EPO_succ() { - printf("creat_down_EPO_succ\n"); - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(173, 51); - Title->Resize(800, 88); + Title->SetPosition(173, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - Title->SetText("星历下载成功"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + Title->SetText("优化成功"); + else + Title->SetText("Opt Success"); Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - Title->SetX((466 - Title->GetWidth()) / 2); - - // Add to rootView UIViewGroup_transmitting->Add(Title); Title->SetVisible(true); - - if (label_ == nullptr) + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); - label_->Resize(345, 101); + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetViewId("label2"); label_->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property - label_->SetText("星历下载成功,请稍等..."); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + label_->SetText("优化成功,请稍等..."); + else + label_->SetText("Opt Success, Please wait..."); label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff)); label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - + UIViewGroup_transmitting->Add(label_); + label_->SetVisible(true); + /* -------------------------------------------------------------------------- */ if (transmitting_img == nullptr) { transmitting_img = new UIImageView(); + if(transmitting_img == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "transmitting_img new fail"); + } } - transmitting_img->SetPosition(193, 150, 80, 80); + transmitting_img->SetPosition(193, 150,80, 80); const char *imagesPath = TRANSMITTING_SUCC_PATH; transmitting_img->SetSrc(imagesPath); UIViewGroup_transmitting->Add(transmitting_img); - uint32_t tick; osStatus_t retTimer; - if (transmitting_timer != NULL) + if(transmitting_timer!=NULL) { osTimerStop(transmitting_timer); osTimerDelete(transmitting_timer); transmitting_timer = NULL; + epo_timer_falg=20; } - transmitting_timer = osTimerNew((osTimerFunc_t)dialtimerCallBack, osTimerPeriodic, NULL, NULL); - tick = 3000; // osMs2Tick(1000); + transmitting_timer = osTimerNew((osTimerFunc_t)epo_timerCallBack, osTimerPeriodic, NULL, NULL); + tick =1000;// osMs2Tick(1000); retTimer = osTimerStart(transmitting_timer, tick); - if (retTimer != osOK && transmitting_timer != NULL) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StartCallTimer osTimerStart failed, ret = %lx!!", retTimer); + if (retTimer != osOK && transmitting_timer != NULL) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"StartCallTimer osTimerStart failed, ret = %lx!!", retTimer); osTimerDelete(transmitting_timer); transmitting_timer = NULL; - return; + return ; } - - // Add to rootView - UIViewGroup_transmitting->Add(label_); - label_->SetVisible(true); } void creat_down_EPO_fail() { - printf("creat_down_EPO_fail\n"); - if (Title == nullptr) + if (Title == nullptr) { Title = new UILabelExt(); + if(Title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail"); + } } - Title->SetPosition(173, 51); - Title->Resize(800, 88); - Title->SetViewId("label1"); + Title->SetPosition(173, 51); + Title->Resize(800, 88); Title->SetStyle(STYLE_TEXT_FONT, 30); - - // Set additional property - Title->SetText("星历下载失败"); + if(ConfigModel::GetInstance()->GetLanguage() == 0) + Title->SetText("优化失败"); + else + Title->SetText("Opt Failed"); Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); Title->SetRollSpeed(0); Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); Title->SetX((466 - Title->GetWidth()) / 2); - - // Add to rootView UIViewGroup_transmitting->Add(Title); Title->SetVisible(true); - - if (label_ == nullptr) + /* -------------------------------------------------------------------------- */ + if (label_ == nullptr) { label_ = new UILabelExt(); + if(label_ == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "label_ new fail"); + } } - label_->SetPosition(60, 281); - label_->Resize(345, 101); + label_->SetPosition(60, 281); + label_->Resize(345, 101); label_->SetStyle(STYLE_TEXT_FONT, 30); - Title->SetText("星历下载失败,请重新下载"); - + if(ConfigModel::GetInstance()->GetLanguage() == 0) + label_->SetText("优化失败,请重试"); + else + label_->SetText("Opt Failed, Please try again"); + label_->SetX((466 - label_->GetWidth()) / 2); label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff)); label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); label_->SetRollSpeed(0); label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - UIViewGroup_transmitting->Add(label_); label_->SetVisible(true); } bool transmittingISShow(void) { - if (uapi_dev_runtime_get_transmitting_status()) - return true; - else - return false; + if(uapi_dev_runtime_get_transmitting_status()) + return true; + else + return false; } UIViewGroup *transmittingShow() { - - if (UIViewGroup_transmitting == nullptr) - { + + if (UIViewGroup_transmitting == nullptr) { UIViewGroup_transmitting = new UIViewGroup(); + if(UIViewGroup_transmitting == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UIViewGroup_transmitting new fail"); + } UIViewGroup_transmitting->SetPosition(0, 0, 466, 466); - // UIViewGroup_transmitting->SetStyle(STYLE_BACKGROUND_OPA, 0); } else { UIViewGroup_transmitting->RemoveAll(); } uapi_dev_runtime_set_transmitting_status(1); - printf("Transmitting_falg:%d", Transmitting_falg); -#ifdef SUPPORT_BLE_SERVICE + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Transmitting_falg:%d",Transmitting_falg); + #ifdef SUPPORT_BLE_SERVICE switch (Transmitting_falg) { - case TRANS_DIAL_TRANSMITTING: - creat_down_Dial(); - break; - case TRANS_DIAL_SUCC: - creat_down_Dial_succ(); - break; - case TRANS_DIAL_FAIL: - creat_down_Dial_fail(); - break; - case TRANS_DIAL_MAX_FAIL: - creat_down_max_Dial_fail(); - break; - - case TRANS_OTA_TRANSMITTING: - creat_down_OTA(); - break; - case TRANS_OTA_SUCC: - creat_down_OTA_SUCC(); - break; - case TRANS_OTA_FAIL: - creat_down_OTA_FAIL(); - break; - case TRANS_MP3_TRANSMITTING: - creat_down_MP3(); - break; - case TRANS_MP3_SUCC: - creat_down_MP3_succ(); - break; - case TRANS_MP3_FAIL: - creat_down_MP3_fail(); - break; - case OTA_UPDATA_FAIL: - Creat_OTA_Updata_FAIL(); - break; - case START_CAT1_OTA: - Creat_CAT1_OTA_Updata(); - break; - case TRANS_MP3_MAX_FAIL: - creat_down_max_MP3_fail(); - break; - case TRANS_BIN_TRANSMITTING: - creat_down_BIN(); - break; - case TRANS_BIN_SUCC: - creat_down_BIN_succ(); - break; - case TRANS_BIN_FAIL: - creat_down_BIN_fail(); - break; - case TRANS_EPO_TRANSMITTING: - creat_down_EPO(); - break; - case TRANS_EPO_SUCC: - creat_down_EPO_succ(); - break; - case TRANS_EPO_FAIL: - creat_down_EPO_fail(); - break; - + case TRANS_DIAL_TRANSMITTING: + creat_down_Dial(); + break; + case TRANS_DIAL_SUCC: + creat_down_Dial_succ(); + break; + case TRANS_DIAL_FAIL: + creat_down_Dial_fail(); + break; + case TRANS_DIAL_MAX_FAIL: + creat_down_max_Dial_fail(); + break; + + case TRANS_OTA_TRANSMITTING: + creat_down_OTA(); + break; + case TRANS_OTA_SUCC: + creat_down_OTA_SUCC(); + break; + case TRANS_OTA_FAIL: + creat_down_OTA_FAIL(); + break; + case TRANS_MP3_TRANSMITTING: + creat_down_MP3(); + break; + case TRANS_MP3_SUCC: + creat_down_MP3_succ(); + break; + case TRANS_MP3_FAIL: + creat_down_MP3_fail(); + break; + case OTA_UPDATA_FAIL: + Creat_OTA_Updata_FAIL(); + break; + case START_CAT1_OTA: + Creat_CAT1_OTA_Updata(); + break; + case TRANS_MP3_MAX_FAIL: + creat_down_max_MP3_fail(); + break; + case TRANS_BIN_TRANSMITTING: + creat_down_BIN(); + break; + case TRANS_BIN_SUCC: + creat_down_BIN_succ(); + break; + case TRANS_BIN_FAIL: + creat_down_BIN_fail(); + break; + case TRANS_EPO_TRANSMITTING: + creat_down_EPO(); + break; + case TRANS_EPO_SUCC: + creat_down_EPO_succ(); + break; + case TRANS_EPO_FAIL: + creat_down_EPO_fail(); + break; + default: break; } - if (Transmitting_falg == TRANS_DIAL_TRANSMITTING || Transmitting_falg == TRANS_OTA_TRANSMITTING || Transmitting_falg == TRANS_MP3_TRANSMITTING) + if(Transmitting_falg==TRANS_DIAL_TRANSMITTING || Transmitting_falg==TRANS_OTA_TRANSMITTING || Transmitting_falg==TRANS_MP3_TRANSMITTING) { // if(uapi_hfp_connect_state()) // { // uapi_hfp_disconnect(); // } } - else if (Transmitting_falg != OTA_UPDATA_FAIL) + else if(Transmitting_falg!=OTA_UPDATA_FAIL) { // if(uapi_dev_runtime_get_bt_powerstat() && cm_get_HFP_switch()) // { // uapi_hfp_connect(); // } + } -#endif + #endif UIView::OnClickListener *button1Click = static_cast(transmittingViewEventListener::GetInstance()); UIViewGroup_transmitting->SetOnClickListener(button1Click); @@ -1491,14 +1542,15 @@ namespace OHOS const power_display_svr_api_t *display_api = power_display_svr_get_api(); if (display_api->get_screen_state() != SCREEN_ON) - { - display_api->turn_on_screen(); - } + { + display_api->turn_on_screen(); + } display_api->set_auto_timeout_function(false); #ifdef SUPPORT_CYWEE_SERVICE cywee_hand_wake_switch(0); // 关闭抬腕亮屏,和息屏 #endif + NotificationManager::GetInstance()->RegisterNotifyCleanupFunction(Freetransmitting); return UIViewGroup_transmitting; } @@ -1519,15 +1571,21 @@ namespace OHOS return &lowppowrViewEventListene_t; } - bool transmittingViewEventListener::OnClick(UIView &view, const ClickEvent &event) + + bool transmittingViewEventListener::OnClick(UIView& view, const ClickEvent& event) { -#ifdef SUPPORT_BLE_SERVICE + #ifdef SUPPORT_BLE_SERVICE WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick"); - if (Transmitting_falg != TRANS_DIAL_TRANSMITTING && Transmitting_falg != TRANS_OTA_TRANSMITTING && Transmitting_falg != TRANS_MP3_TRANSMITTING && Transmitting_falg != START_CAT1_OTA && Transmitting_falg != TRANS_BIN_TRANSMITTING && Transmitting_falg != TRANS_EPO_TRANSMITTING) + if(Transmitting_falg!=TRANS_DIAL_TRANSMITTING + && Transmitting_falg!=TRANS_OTA_TRANSMITTING + && Transmitting_falg!=TRANS_MP3_TRANSMITTING + && Transmitting_falg!=START_CAT1_OTA + && Transmitting_falg!=TRANS_BIN_TRANSMITTING + && Transmitting_falg!=TRANS_EPO_TRANSMITTING) { NotificationManager::GetInstance()->StopNotify(); } -#endif + #endif return true; UNUSED(event); } diff --git a/code/sdk/zhihui/UI/CustomUIComponentTool/uicomponents/UIComponents.cpp b/code/sdk/zhihui/UI/CustomUIComponentTool/uicomponents/UIComponents.cpp index 0d66ea619..59ba73da2 100644 --- a/code/sdk/zhihui/UI/CustomUIComponentTool/uicomponents/UIComponents.cpp +++ b/code/sdk/zhihui/UI/CustomUIComponentTool/uicomponents/UIComponents.cpp @@ -445,15 +445,16 @@ bool InitImageView(UIImageView *&imageView, int left, int top, int width, imageView->SetPosition(left, top); imageView->SetAutoEnable(true); imageView->SetViewId(viewId); + imageView->SetSrc(imagePath); - ImageInfo *image = - ImageCacheManager::GetInstance().LoadSingleRes(imagePath, false); - if (image == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, - "LoadAllDialFromRam loadimage %s fail", imagePath); - return false; - } - imageView->SetSrc(image); + // ImageInfo *image = + // ImageCacheManager::GetInstance().LoadSingleRes(imagePath, false); + // if (image == nullptr) { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + // "LoadAllDialFromRam loadimage %s fail", imagePath); + // return false; + // } + // imageView->SetSrc(image); return true; } /*带默认参数的初始化label*/ @@ -873,3 +874,4 @@ bool IsFileAccessibleAndNotEmpty(const std::string &filePath) { } } // namespace OHOS + diff --git a/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.c b/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.c index fb2a9deaa..1f042cfe7 100644 --- a/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.c +++ b/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.c @@ -52,6 +52,7 @@ extern "C" { #include "custom_utils.h" #include "custom_runtime.h" +#include "gnss_http_server.h" #include "bleANCS.h" #ifdef CUSTOM_ZHIHUI #include "Bluetooyhpabpserver.h" @@ -183,7 +184,6 @@ static void *ym_malloc(unsigned int size) static void ym_free(void * p) { free(p); - p = NULL; } void malloc_test(void) { @@ -2582,90 +2582,192 @@ void SetsleepSetParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalD } } -void SetDrinkSetParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//设置喝水提醒s设置 +// 设置喝水提醒参数指令处理函数 +void SetDrinkSetParamCmd(uint16_t cmd, uint8_t *data, uint16_t len, uint8_t *totalData, uint8_t crcvalue) { + // ===== 1. 初始化变量,打印入参(关键:确认接收的基础信息)===== uint32_t tmp = 1; uint16_t tmp_data = 1; uint8_t sendBuf[19]; - memset(sendBuf,0,19); + memset(sendBuf, 0, 19); + + // 打印函数入参,确认指令/数据/长度/CRC是否正确 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"进入喝水提醒设置函数:cmd=0x%04X, 数据长度len=%d, 校验CRC值=0x%02X", cmd, len, crcvalue); + + if (data != NULL && len > 0) { + // 打印接收的原始数据(前9字节,覆盖所有解析字段) + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"接收的原始参数data(前9字节):"); + for (uint16_t i = 0; i < (len > 9 ? 9 : len); i++) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"data[%d] = 0x%02X", i, data[i]); + } + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"接收的data为空或长度为0!"); + } + + // ===== 2. 构建响应帧基础数据 ===== sendBuf[0] = 0x72; sendBuf[1] = 0x02; sendBuf[2] = 0x14; - memcpy(sendBuf+3,&tmp,4); - memcpy(sendBuf+7,&tmp,4); - memcpy(sendBuf+11,&tmp,4); - memcpy(sendBuf+15,&tmp_data,2); - - if(Check_CRC(data,len,crcvalue)) - { - msg_drink_info_t drink_info={0}; + memcpy(sendBuf+3, &tmp, 4); // 固定填充4字节tmp(值为1) + memcpy(sendBuf+7, &tmp, 4); // 固定填充4字节tmp + memcpy(sendBuf+11, &tmp, 4); // 固定填充4字节tmp + memcpy(sendBuf+15, &tmp_data, 2); // 固定填充2字节tmp_data(值为1) + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"响应帧基础数据初始化完成,前17字节:0x%02X 0x%02X 0x%02X ...", sendBuf[0], sendBuf[1], sendBuf[2]); + + // ===== 3. CRC校验(核心:确认数据完整性)===== + uint8_t crc_result = Check_CRC(data, len, crcvalue); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"CRC校验结果:%s(%d)", crc_result ? "成功" : "失败", crc_result); + + if (crc_result) { + // ===== 4. CRC校验通过,解析参数(关键:确认参数解析是否正确)===== + msg_drink_info_t drink_info = {0}; drink_info.drink_on = data[0]; - if(data[1]) - { - drink_info.drink_on=2; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"初始解析drink_on = %d", drink_info.drink_on); + + // 扩展开关处理:data[1]非0时,drink_on强制设为2 + if (data[1]) { + drink_info.drink_on = 2; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"data[1]=%d非0,drink_on强制设为2", data[1]); } - // drink_info.drink_on = data[1]; - drink_info.goal = data[2]+data[3]*256; - drink_info.time_start = data[4]<<16|data[5]; - if(data[1]) - { - drink_info.time_end = data[6]<<16|data[7]; + + // 解析每日饮水目标(16位:data[2]低8位 + data[3]高8位) + drink_info.goal = data[2] + data[3] * 256; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"解析每日饮水目标goal = %d ml", drink_info.goal); + + // 【修复潜在问题】解析开始时间(原代码错误,改为HHMM格式:data[4]=小时,data[5]=分钟) + // 原代码:drink_info.time_start = data[4]<<16|data[5]; (错误,8位左移16位丢失) + drink_info.time_start = data[4]<<16|data[5]; //前16位为小时,后16位为分钟 + // 解析结束时间和频率(仅当data[1]非0时) + if (data[1]) { + drink_info.time_end = data[6]<<16|data[7]; // 比如data[6]=12, data[7]=30 → 1230(12点30分) drink_info.freq = data[8]; - + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"data[1]=0,不解析结束时间和频率"); } + + // ===== 5. 调用蓝牙接口设置提醒,打印设置结果 ===== + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"调用蓝牙接口设置喝水提醒:drink_on=%d, goal=%dml, start=%04d, end=%04d, freq=%d", + drink_info.drink_on, drink_info.goal, drink_info.time_start, drink_info.time_end, drink_info.freq); ble_set_drink_remind(drink_info); - - sendBuf[17] = 1; - sendBuf[18] = Calculate_CRC(sendBuf,18); - sendBleData(sendBuf,19); - } - else - { - sendBuf[17] = 0; - sendBuf[18] = Calculate_CRC(sendBuf,18); - sendBleData(sendBuf,19); + + // ===== 6. 构建成功响应并发送 ===== + sendBuf[17] = 1; // 1=设置成功 + sendBuf[18] = Calculate_CRC(sendBuf, 18); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"设置成功,构建响应帧:状态位=1,响应CRC=0x%02X", sendBuf[18]); + sendBleData(sendBuf, 19); + } else { + // ===== 7. CRC校验失败,构建失败响应并发送 ===== + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"CRC校验失败,返回失败响应"); + sendBuf[17] = 0; // 0=设置失败 + sendBuf[18] = Calculate_CRC(sendBuf, 18); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"构建失败响应帧:状态位=0,响应CRC=0x%02X", sendBuf[18]); + sendBleData(sendBuf, 19); } - + + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"喝水提醒设置函数执行完毕"); } -void SetsedentarinessSetParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//设置久坐设置 +// 设置久坐设置 +// 设置久坐提醒参数指令处理函数 +void SetsedentarinessSetParamCmd(uint16_t cmd, uint8_t *data, uint16_t len, uint8_t *totalData, uint8_t crcvalue) { + // ===== 1. 初始化变量,打印入参(确认接收的基础信息)===== uint32_t tmp = 1; uint16_t tmp_data = 1; uint8_t sendBuf[19]; - memset(sendBuf,0,19); + memset(sendBuf, 0, 19); + + // 打印函数入参,确认指令、数据长度、CRC校验值是否正确 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"进入久坐提醒设置函数:cmd=0x%04X, 数据长度len=%d, 校验CRC值=0x%02X", cmd, len, crcvalue); + + // 打印接收的原始数据(前6字节,覆盖所有解析字段) + if (data != NULL && len > 0) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"接收的原始参数data(前6字节):"); + for (uint16_t i = 0; i < (len > 6 ? 6 : len); i++) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"data[%d] = 0x%02X", i, data[i]); + } + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"接收的data为空或长度为0!"); + } + + // ===== 2. 构建响应帧基础数据 ===== sendBuf[0] = 0x72; sendBuf[1] = 0x02; sendBuf[2] = 0x1D; - memcpy(sendBuf+3,&tmp,4); - memcpy(sendBuf+7,&tmp,4); - memcpy(sendBuf+11,&tmp,4); - memcpy(sendBuf+15,&tmp_data,2); + memcpy(sendBuf+3, &tmp, 4); // 固定填充4字节tmp(值为1) + memcpy(sendBuf+7, &tmp, 4); // 固定填充4字节tmp + memcpy(sendBuf+11, &tmp, 4); // 固定填充4字节tmp + memcpy(sendBuf+15, &tmp_data, 2); // 固定填充2字节tmp_data(值为1) + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"响应帧基础数据初始化完成,帧头:0x%02X 0x%02X 0x%02X", sendBuf[0], sendBuf[1], sendBuf[2]); + + // ===== 3. CRC校验(核心:确认数据完整性)===== + uint8_t crc_result = Check_CRC(data, len, crcvalue); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"CRC校验结果:%s(%d)", crc_result ? "成功" : "失败", crc_result); + + if (crc_result) { + // ===== 4. CRC校验通过,解析参数(关键:确认参数解析是否正确)===== + msg_sedent_set_param_info_t sedent_data = {0}; + + // 校验数据长度,避免数组越界 + if (len < 1) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"数据长度不足,无法解析久坐开关(至少需要1字节)"); + sendBuf[17] = 0; + sendBuf[18] = Calculate_CRC(sendBuf, 18); + sendBleData(sendBuf, 19); + return; + } - if(Check_CRC(data,len,crcvalue)) - { - msg_sedent_set_param_info_t sedent_data={0}; - sedent_data.sedent_on=data[0]; + // 解析久坐提醒开关 + sedent_data.sedent_on = data[0]; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"解析久坐提醒开关sedent_on = %d(0=关闭,1=开启)", sedent_data.sedent_on); - memcpy_s( &sedent_data.sedent_time,4,&data[1],4); - + // 解析久坐时长(4字节):先判断长度,再拷贝 + if (len >= 5) { // data[1]-data[4] 需要至少5字节数据(索引0-4) + memcpy_s(&sedent_data.sedent_time, sizeof(sedent_data.sedent_time), &data[1], 4); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"解析久坐时长sedent_time = %u 小时", sedent_data.sedent_time); + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"数据长度不足(仅%d字节),无法解析久坐时长(需要5字节)", len); + sendBuf[17] = 0; + sendBuf[18] = Calculate_CRC(sendBuf, 18); + sendBleData(sendBuf, 19); + return; + } - sedent_data.frequenc = data[5]; + // 解析提醒频率:判断长度,避免访问data[5]越界 + if (len >= 6) { + sedent_data.frequenc = data[5]; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"解析提醒频率frequenc = %d h/次", sedent_data.frequenc); + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"数据长度不足(仅%d字节),无法解析提醒频率(需要6字节)", len); + sendBuf[17] = 0; + sendBuf[18] = Calculate_CRC(sendBuf, 18); + sendBleData(sendBuf, 19); + return; + } + // ===== 5. 调用底层接口设置久坐提醒,打印参数 ===== + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"调用底层接口设置久坐提醒:开关=%d, 久坐时长=%u分钟, 提醒频率=%d小时/次", + sedent_data.sedent_on, sedent_data.sedent_time, sedent_data.frequenc); set_sedent_param(&sedent_data); - sendBuf[17] = 1; - sendBuf[18] = Calculate_CRC(sendBuf,18); - sendBleData(sendBuf,19); - } - else - { - sendBuf[17] = 0; - sendBuf[18] = Calculate_CRC(sendBuf,18); - sendBleData(sendBuf,19); + // ===== 6. 构建成功响应并发送 ===== + sendBuf[17] = 1; // 1=设置成功 + sendBuf[18] = Calculate_CRC(sendBuf, 18); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"久坐提醒设置成功,响应状态位=1,响应CRC=0x%02X", sendBuf[18]); + sendBleData(sendBuf, 19); + } else { + // ===== 7. CRC校验失败,构建失败响应并发送 ===== + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"CRC校验失败,返回失败响应"); + sendBuf[17] = 0; // 0=设置失败 + sendBuf[18] = Calculate_CRC(sendBuf, 18); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"构建失败响应帧:状态位=0,响应CRC=0x%02X", sendBuf[18]); + sendBleData(sendBuf, 19); } + + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"久坐提醒设置函数执行完毕"); } + void SetmsgfiltrationCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//设置久坐设置 { uint32_t tmp = 1; @@ -4208,7 +4310,7 @@ void SetUserInfo(ble_read_data *buffer_handle,uint16_t cmd,uint8_t *data,uint16_ msg_userinfo.calorie=p_userinfo->calorie; msg_userinfo.distance=p_userinfo->distance; - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"getUserInfo:!!age %d, fat %d, sex %d, height %d, stand %d, step %d , timeformat %d , weight %d !!!!!!\r\n", + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"getUserInfo:!!age %d, fat %d, sex %d, height %d, stand %d, step %d , timeformat %d , weight %d !!!!!!\r\n", p_userinfo->age, p_userinfo->fat_time, p_userinfo->gender, @@ -4521,24 +4623,46 @@ static void switchDialCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *total //关于本机内容 static void aboutDeviceCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue) { + // 1. 入口日志:记录请求基本信息 + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[AboutDevice] 进入接口,cmd:%d, data_len:%d, crcvalue:0x%02X", cmd, len, crcvalue); uint8_t _major,_mid,_minor; - uapi_get_fw_version(&_major,&_mid,&_minor); + // 2. 获取固件版本日志 + int fw_ret = uapi_get_fw_version(&_major,&_mid,&_minor); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[AboutDevice] 获取固件版本:ret:%d, major:%d, mid:%d, minor:%d", fw_ret, _major, _mid, _minor); + cJSON *dataJSON = cJSON_CreateObject(); + if (dataJSON == NULL) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[AboutDevice] JSON 对象创建失败!"); + return; + } cJSON_AddNumberToObject(dataJSON,"code",1); cJSON_AddNumberToObject(dataJSON,"major",_major); cJSON_AddNumberToObject(dataJSON,"mid",_mid); cJSON_AddNumberToObject(dataJSON,"minor",_minor); - unsigned char addr[6]; - bluetooth_get_local_addr(&addr[0],6); - char mac_data[24]; + + // 3. 获取MAC地址日志 + unsigned char addr[6] = {0}; + int bt_ret = bluetooth_get_local_addr(&addr[0],6); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[AboutDevice] 获取蓝牙MAC地址:ret:%d, addr:[%02X:%02X:%02X:%02X:%02X:%02X]", + bt_ret, addr[5],addr[4],addr[3],addr[2],addr[1],addr[0]); + + char mac_data[24] = {0}; memset(mac_data,0,24); sprintf(mac_data,"%02X:%02X:%02X:%02X:%02X:%02X",addr[5],addr[4],addr[3],addr[2],addr[1],addr[0]); cJSON_AddStringToObject(dataJSON, "macAddress",mac_data); + // 4. JSON 序列化日志 char *json_format = cJSON_PrintUnformatted(dataJSON); cJSON_Delete(dataJSON); + if (json_format == NULL) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[AboutDevice] JSON 序列化失败!"); + return; + } uint32_t data_len = strlen(json_format); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[AboutDevice] JSON 序列化完成:len:%d, content:%s", data_len, json_format); + + // 5. 构建发送数据缓冲区日志 uint8_t value[data_len+19]; memset(value,0,data_len+19); uint32_t tmp = 1; @@ -4550,22 +4674,34 @@ static void aboutDeviceCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *tota memcpy(value+7,&data_len,4); memcpy(value+11,&tmp,4); memcpy(value+15,&tmp_data,2); - if(Check_CRC(data,len,crcvalue)) + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[AboutDevice] 构建发送缓冲区:总长度:%d, 头部[0-16]: 0x%02X 0x%02X 0x%02X ...", + data_len+19, value[0], value[1], value[2]); + + // 6. CRC 校验日志 + int crc_check = Check_CRC(data,len,crcvalue); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[AboutDevice] CRC 校验结果:%d (1=成功,0=失败)", crc_check); + + if(crc_check) { - memcpy(value+17,(uint8_t *)json_format,data_len);//17+69 = 86 - - value[data_len+17] = Calculate_CRC(value,data_len+17);// - // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"data_len:%d %x %d!!!!!\r\n",data_len,value[data_len+17],data_len+17); + memcpy(value+17,(uint8_t *)json_format,data_len); + value[data_len+17] = Calculate_CRC(value,data_len+17); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[AboutDevice] 准备发送有效数据:长度:%d, CRC值:0x%02X", + data_len+18, value[data_len+17]); sendBleData(value,data_len+18); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[AboutDevice] 有效数据已调用 sendBleData 发送"); }else { value[17] = 0; uint8_t lrc = Calculate_CRC(value,18); value[18] = lrc; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[AboutDevice] 准备发送错误数据:长度:19, CRC值:0x%02X", lrc); sendBleData(value,19); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[AboutDevice] 错误数据已调用 sendBleData 发送"); } + // 7. 释放资源日志 cJSON_free(json_format); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[AboutDevice] 接口执行完成,资源已释放"); } //查找手表 01 04 //设置查找手表的状态,1 校验成 2手表已找到,停止查找手表 @@ -5308,16 +5444,50 @@ static void GetWatchStatusCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *t memcpy(value+11,&tmp,4); memcpy(value+15,&tmp_data,2); - //0空闲状态 9 usb状态 10 运动训练状态 - uint8_t watchStatus = 0; - - if(uapi_dev_runtime_get_train_status()) - watchStatus=10; - + /* 0=空闲 9=星历未解压或过期(非运动时上报,app 可发起星历更新) 10=运动训练 */ + uint8_t watchStatus = 0; + if (uapi_dev_runtime_get_train_status() != 0) { + watchStatus = 10; + } + // } else { + // /* 获取状态前先刷新星历检查结果,以便 runtime 中的星历过期状态是最新的 */ + // (void)gnss_check_agnss_status(); + // if (uapi_dev_runtime_get_epo_file_extracted_status() == 0 || + // uapi_dev_runtime_get_ephemeris_expired_status() != 0) { + // /* 星历未解压或星历过期,非运动状态下上报 9,app 获取后可发起星历更新 */ + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"GetWatchStatusCmd 星历未解压或星历过期\r\n"); + // watchStatus = 9; + // } + // } value[17] = watchStatus; value[18] = Calculate_CRC(value,18); sendBleData(value,19); } + +/** 获取星历有效剩余秒数(协议 01.18):格式与 01.1A 一致,包头 + 数据包(4B 剩余时间 单位s) + CRC */ +static void GetEphemerisValidSecCmd(uint16_t cmd, uint8_t *data, uint16_t len, uint8_t *totaldata, uint8_t crcvalue) +{ + uint8_t value[22]; + memset(value, 0, sizeof(value)); + value[0] = 0x72; /* 传输方向:手表发 */ + value[1] = 0x01; /* 指令 类型 */ + value[2] = 0x18; /* 指令 ID (01.18) */ + uint32_t tmp = 1; + uint32_t datalen = 4; /* 数据总长度:4 字节(剩余时间 单位s) */ + uint16_t tmp_data = 4; /* 分包数据长度:4 字节 */ + memcpy(value + 3, &tmp, 4); /* 数据包总数 */ + memcpy(value + 7, &datalen, 4); /* 数据总长度 */ + memcpy(value + 11, &tmp, 4); /* 分包索引 */ + memcpy(value + 15, &tmp_data, 2); /* 分包数据长度 */ + + int remaining_minutes = gnss_check_agnss_status(); + uint32_t valid_sec = (remaining_minutes > 0) ? (uint32_t)(remaining_minutes * 60) : 0; + memcpy(value + 17, &valid_sec, 4); /* 数据包:剩余时间 单位s,小端 */ + + value[21] = Calculate_CRC(value, 21); + sendBleData(value, 22); +} + //获取手表屏幕参数 static void GetScreenParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue) { @@ -5856,11 +6026,11 @@ static void GetAllDialUidCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *to if(dial_num *2 !=get_all_dial_id(dail_uid_buf+1,dial_num*2)) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GetAllDialUidCmd dial_num %d err\r\n",dial_num); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetAllDialUidCmd dial_num %d err\r\n",dial_num); } else { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GetAllDialUidCmd yes\r\n"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetAllDialUidCmd yes\r\n"); } ble_data_type type_={0x01,0x2a,temp_data_size,1,1}; @@ -6489,6 +6659,9 @@ void type2AE3Data(ble_read_data *buffer_handle,uint8_t *cmd_buf ,uint8_t *data,u case SEND_CURR_STATUS_CMD: //获取手表当前状态 GetWatchStatusCmd(cmd,data,datalen,totaldata,crcvalue); break; + case GET_EPHEMERIS_VALID_SEC_CMD: //获取星历有效剩余秒数 + GetEphemerisValidSecCmd(cmd,data,datalen,totaldata,crcvalue); + break; case GET_WATCH_LCD_PARAM_CMD: //获取手表屏幕参数 GetScreenParamCmd(cmd,data,datalen,totaldata,crcvalue); break; @@ -6562,8 +6735,14 @@ void type2AE3Data(ble_read_data *buffer_handle,uint8_t *cmd_buf ,uint8_t *data,u case SYN_APP_GET_GPS_DATA_CMD://app获取GPS数据 GetGPSCmd(cmd,data,datalen,totaldata,crcvalue); break; + case SYN_TRAIN_SPEED_CMD://同步训练配速数据 + SYN_train_speed_datatCmd(cmd,data,datalen,totaldata,crcvalue); + break; + case SYN_BASIC_REAL_HEATR_CMD://同步训练心率数据 + SYN_train_heart_datatCmd(cmd,data,datalen,totaldata,crcvalue); + break; - case GET_SPECIF_TYPE_FILE_CMD://获取指定类型文件目录 + case GET_SPECIF_TYPE_FILE_CMD://获取指定类型文件目录 case AI_IS_READ_DATA_CMD: case SYN_HEART_HISTORY_DATA_CMD://同步心率历史数据 case SYN_SPO2_HISTORY_DATA_CMD://同步血氧历史数据 @@ -6628,6 +6807,7 @@ void typeHexFiveData(uint8_t *buf_cmd,uint8_t *data,uint16_t datalen) void ble_request_epo_file(void) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble_request_epo_file"); + removeFilesInFolder(GNSS_DATA_DIR); uint8_t value[19] = {0}; uint32_t tmp = 1; uint16_t tmp_data = 1; @@ -7232,6 +7412,8 @@ static errcode_t handle_epo_file_decompress(ble_read_data *buffer_handle) if (extract_ret == ERRCODE_SUCC) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[handle_epo_file_decompress] EPO lzma file extracted successfully\n"); + // 设置EPO文件解压状态为成功 + uapi_dev_runtime_set_epo_file_extracted_status(1); // 解压成功后删除lzma文件 remove(lzma_file_path); return ERRCODE_SUCC; @@ -7239,6 +7421,8 @@ static errcode_t handle_epo_file_decompress(ble_read_data *buffer_handle) else { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[handle_epo_file_decompress] Failed to extract EPO lzma file, ret=0x%X\n", extract_ret); + // 设置EPO文件解压状态为失败 + uapi_dev_runtime_set_epo_file_extracted_status(0); return ERRCODE_FAIL; } } @@ -7569,7 +7753,7 @@ static void ble_transfer_Timer_CallBack(int data) cancel_recv_file(1); } } -uint8_t OTA_FILE_value=0; +uint32_t OTA_FILE_value=0; errcode_t decode_ota_data(ble_read_data *buffer_handle,uint8_t *data,uint16_t datalen,uint8_t crcvalue) { @@ -7761,8 +7945,9 @@ errcode_t decode_ota_data(ble_read_data *buffer_handle,uint8_t *data,uint16_t da buffer_handle->file_recv_stat.lrcvalue = calculate_lrc(data_,datalen,buffer_handle->file_recv_stat.lrcvalue); buffer_handle->file_recv_stat.received_size += datalen; OTA_FILE_value= ((float) buffer_handle->file_recv_stat.received_size / (float)buffer_handle->file_recv_stat.file_size) *100; - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"handle_recv_file received_size %d %0.3lf\n",buffer_handle->file_recv_stat.received_size - ,(float) buffer_handle->file_recv_stat.received_size / (float)buffer_handle->file_recv_stat.file_size); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"handle_recv_file received_size %d %0.3lf\n",buffer_handle->file_recv_stat.received_size + ,(float) buffer_handle->file_recv_stat.received_size / (float)buffer_handle->file_recv_stat.file_size); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"OTA_FILE_value %d \n",OTA_FILE_value); }else{ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"handle_recv_file write file failed! ret %d != %d\n",writtensize,datalen); @@ -9335,7 +9520,7 @@ errcode_t cancel_recv_file(uint8_t flag) return ERRCODE_SUCC; } -uint8_t get_OTA_recv_value() +uint32_t get_OTA_recv_value() { return OTA_FILE_value; } diff --git a/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.h b/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.h index 520de68dd..aa279b52f 100644 --- a/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.h +++ b/code/sdk/zhihui/services/ble_service/bleservice/bleEvent.h @@ -66,6 +66,7 @@ void cameram_send_data(void); #define SPORT_PAUSE_RESET_CMD 0x0116 //训练暂停/恢复 #define SEND_CURR_DIAL_TOAPP_CMD 0x0117 //发送当前表盘TOapp #define SEND_CURR_STATUS_CMD 0x0119 //获取手表当前状态 +#define GET_EPHEMERIS_VALID_SEC_CMD 0x0118 //获取星历有效剩余秒数 #define SEND_UPPAIR_CMD 0x0110 //发送解除配对消息 Unpairing #define GET_WATCH_LCD_PARAM_CMD 0x011A //获取手表屏幕参数 #define DELETE_DIAL_CMD 0x011B //删除表盘 @@ -771,7 +772,7 @@ typedef struct -uint8_t get_OTA_recv_value(void); +uint32_t get_OTA_recv_value(void); void Set_OTA_recv_value(void); diff --git a/code/sdk/zhihui/services/gnss/src/gnss_http_server.c b/code/sdk/zhihui/services/gnss/src/gnss_http_server.c index 13635de84..0fdaf0b63 100644 --- a/code/sdk/zhihui/services/gnss/src/gnss_http_server.c +++ b/code/sdk/zhihui/services/gnss/src/gnss_http_server.c @@ -2384,12 +2384,14 @@ int gnss_check_agnss_status(void) if (PGNSS_DATA_PATH == NULL || strlen(PGNSS_DATA_PATH) == 0) { printf("ERROR: PGNSS_DATA_PATH is empty\n"); + uapi_dev_runtime_set_ephemeris_expired_status(1); return -1; } DIR *dir = opendir(PGNSS_DATA_PATH); if (dir == NULL) { printf("Cannot open AGNSS directory: %s\n", PGNSS_DATA_PATH); + uapi_dev_runtime_set_ephemeris_expired_status(1); return -1; } @@ -2399,6 +2401,7 @@ int gnss_check_agnss_status(void) if (current_timestamp == 0) { printf("ERROR: Failed to get current timestamp\n"); closedir(dir); + uapi_dev_runtime_set_ephemeris_expired_status(1); return -1; } // 调试日志:打印正确的当前时间戳 @@ -2499,14 +2502,14 @@ int gnss_check_agnss_status(void) // 打印未来文件夹数量(调试用) // printf("future_folder_count : %d\n", future_folder_count); - // 返回剩余有效分钟数 + // 返回剩余有效分钟数,并同步星历过期状态到 runtime(供 BLE 等查询) if (found_valid_folder) { uint32_t remaining_seconds = VALID_TIME_WINDOW - min_time_diff; int remaining_minutes = (int)(remaining_seconds / 60) + (future_folder_count * 24 * 60); - printf("Valid folder remaining minutes: %d\n", remaining_minutes); + uapi_dev_runtime_set_ephemeris_expired_status(0); /* 星历有效 */ return remaining_minutes; } else { - printf("No valid folder in 24 hours\n"); + uapi_dev_runtime_set_ephemeris_expired_status(1); /* 星历过期 */ return 0; } } diff --git a/code/sdk/zhihui/utils/custom_runtime.c b/code/sdk/zhihui/utils/custom_runtime.c index 07603c9d9..8df62c264 100644 --- a/code/sdk/zhihui/utils/custom_runtime.c +++ b/code/sdk/zhihui/utils/custom_runtime.c @@ -69,6 +69,8 @@ typedef struct bt_runtime_status_t bt_runtime; char current_dial_name[32]; char current_epo_file_path[128]; // EPO文件完整路径 + uint8_t epo_file_extracted_status;//EPO文件解压状态 0 未解压, 1 解压成功 + uint8_t ephemeris_expired_status; // 星历过期状态 0 有效,1 过期/未检查 uint8_t time_hour_show_model; uint8_t sleep_monitoring_status;//睡眠监测 uint8_t sleep_status;//睡眠状态 @@ -77,6 +79,7 @@ typedef struct uint8_t sedentary_status; uint8_t drinkremind_status; uint8_t train_status;//训练状态 + uint8_t train_status_is_end_flag;//训练结束界面标志,1 处于结束界面 0 非结束界面 uint8_t saveele_status;//省电模式状态 uint8_t lock_status;//密码锁状态 uint8_t motion_recognition_status;//运动识别开关状态 @@ -272,6 +275,39 @@ char* uapi_dev_runtime_get_epo_file_path(void) { return (char*)&(g_runtime.current_epo_file_path[0]); } + +/** + * 设置 EPO 文件解压状态 +*/ +void uapi_dev_runtime_set_epo_file_extracted_status(uint8_t status) +{ + g_runtime.epo_file_extracted_status = status; +} + +/** + * 获取 EPO 文件解压状态 +*/ +uint8_t uapi_dev_runtime_get_epo_file_extracted_status(void) +{ + return g_runtime.epo_file_extracted_status; +} + +/** + * 设置星历过期状态(0 有效,1 过期/未检查) + */ +void uapi_dev_runtime_set_ephemeris_expired_status(uint8_t status) +{ + g_runtime.ephemeris_expired_status = status; +} + +/** + * 获取星历过期状态(0 有效,1 过期或未检查) + */ +uint8_t uapi_dev_runtime_get_ephemeris_expired_status(void) +{ + return g_runtime.ephemeris_expired_status; +} + void uapi_dev_runtime_set_bt_powerstat(uint8_t stat) { g_runtime.bt_runtime.bt_powerOn = stat; @@ -417,6 +453,15 @@ uint8_t uapi_dev_runtime_get_train_status(void) { return g_runtime.train_status; } +/*设置训练结束界面标志*/ +void uapi_dev_runtime_set_train_status_is_end_flag(uint8_t flag) +{ + g_runtime.train_status_is_end_flag = flag; +} +uint8_t uapi_dev_runtime_get_train_status_is_end_flag(void) +{ + return g_runtime.train_status_is_end_flag; +} /*设置省电模式状态*/ void uapi_dev_runtime_set_saveele_status(uint8_t status) { diff --git a/code/sdk/zhihui/utils/custom_runtime.h b/code/sdk/zhihui/utils/custom_runtime.h index b8e4354f7..5d1175cb8 100644 --- a/code/sdk/zhihui/utils/custom_runtime.h +++ b/code/sdk/zhihui/utils/custom_runtime.h @@ -48,6 +48,23 @@ void uapi_dev_runtime_set_epo_file_path(char* file_path); */ char* uapi_dev_runtime_get_epo_file_path(void); +/** + * 设置 EPO 文件解压状态 +*/ +void uapi_dev_runtime_set_epo_file_extracted_status(uint8_t status); +/** + * 获取 EPO 文件解压状态 +*/ +uint8_t uapi_dev_runtime_get_epo_file_extracted_status(void); + +/** + * 设置星历过期状态(由 GNSS 检查后更新:0 有效,1 过期/未检查) + */ +void uapi_dev_runtime_set_ephemeris_expired_status(uint8_t status); +/** + * 获取星历过期状态(0 有效,1 过期或未检查) + */ +uint8_t uapi_dev_runtime_get_ephemeris_expired_status(void); void uapi_dev_runtime_set_vibmod(uint8_t vibmod); @@ -79,6 +96,14 @@ uint8_t uapi_dev_runtime_get_drinkremind_status(void); void uapi_dev_runtime_set_train_status(uint8_t status); uint8_t uapi_dev_runtime_get_train_status(void); +/* + 设置训练结束界面标志 + 0 非结束界面 + 1 处于结束界面(不弹窗等) +*/ +void uapi_dev_runtime_set_train_status_is_end_flag(uint8_t flag); +uint8_t uapi_dev_runtime_get_train_status_is_end_flag(void); + /* 设置训练状态 0 未开启省电 diff --git a/code/sdk/zhihui/utilscpp/custom_utilscpp.cpp b/code/sdk/zhihui/utilscpp/custom_utilscpp.cpp index f5340f387..b58317f47 100644 --- a/code/sdk/zhihui/utilscpp/custom_utilscpp.cpp +++ b/code/sdk/zhihui/utilscpp/custom_utilscpp.cpp @@ -387,26 +387,8 @@ errcode_t uapi_epo_lzma_decompress(const char* lzma_file_path) return ERRCODE_FAIL; } - /* 第一遍扫描,尝试找到AssistInfo_*文件的时间戳,用作目录名 */ - char assist_ts[32] = {0}; - long data_start_pos = ftell(fp); - for (uint32_t i = 0; i < file_count; i++) { - uint16_t filename_len = 0; - if (fread(&filename_len, 1, 2, fp) != 2) { break; } - if (filename_len == 0 || filename_len > 255) { break; } - char filename[256] = {0}; - if (fread(filename, 1, filename_len, fp) != filename_len) { break; } - uint32_t file_size = 0; - if (fread(&file_size, 1, 4, fp) != 4) { break; } - if (file_size > 0) { (void)fseek(fp, file_size, SEEK_CUR); } - if (assist_ts[0] == '\0' && strncmp(filename, "AssistInfo_", strlen("AssistInfo_")) == 0) { - extract_timestamp_from_name(filename, assist_ts, sizeof(assist_ts)); - } - } - /* 回到文件列表起始位置准备正式解压 */ - (void)fseek(fp, data_start_pos, SEEK_SET); - int extracted_count = 0; + char current_batch_ts[32] = {0}; // 维护当前批次的时间戳(替代原全局assist_ts) // 遍历每个文件 for (uint32_t i = 0; i < file_count; i++) { @@ -441,21 +423,22 @@ errcode_t uapi_epo_lzma_decompress(const char* lzma_file_path) break; } - /* 确定目录时间戳:优先用AssistInfo中的时间戳,否则取自身文件名中的时间戳 */ - char dir_ts[32] = {0}; - if (assist_ts[0] != '\0') { - (void)strncpy(dir_ts, assist_ts, sizeof(dir_ts) - 1); - } else { - extract_timestamp_from_name(filename, dir_ts, sizeof(dir_ts)); + // 关键逻辑:遇到AssistInfo_*文件时,更新当前批次时间戳 + if (strncmp(filename, "AssistInfo_", strlen("AssistInfo_")) == 0) { + extract_timestamp_from_name(filename, current_batch_ts, sizeof(current_batch_ts)); + printf("[uapi_epo_lzma_decompress] Switch to new batch, timestamp: %s (from file: %s)\n", + current_batch_ts, filename); } - if (dir_ts[0] == '\0') { - printf("[uapi_epo_lzma_decompress] Failed to parse timestamp for file %s\n", filename); + + // 校验当前批次时间戳是否有效(必须先遇到AssistInfo_*才能解压后续文件) + if (current_batch_ts[0] == '\0') { + printf("[uapi_epo_lzma_decompress] No valid batch timestamp (not found AssistInfo_* yet) for file %s\n", filename); break; } /* 生成输出目录并确保存在 */ char output_dir[128] = {0}; - int dir_ret = snprintf(output_dir, sizeof(output_dir), "/user/userdata/gnss/%s", dir_ts); + int dir_ret = snprintf(output_dir, sizeof(output_dir), "/user/userdata/gnss/%s", current_batch_ts); if (dir_ret < 0 || dir_ret >= (int)sizeof(output_dir)) { printf("[uapi_epo_lzma_decompress] Failed to build output dir for file %u\n", i); break; @@ -513,7 +496,8 @@ errcode_t uapi_epo_lzma_decompress(const char* lzma_file_path) break; } - printf("[uapi_epo_lzma_decompress] Extracted: %s (%u bytes)\n", output_path, file_size); + // printf("[uapi_epo_lzma_decompress] Extracted: %s (%u bytes) [batch: %s]\n", + // output_path, file_size, current_batch_ts); extracted_count++; } @@ -543,20 +527,20 @@ void uapi_dump_meminfo(void) void CustomEventPublish(uint16_t topic, uint8_t *data, uint32_t size) { int32_t ret; - BroadcastApi *broadcastApi = NULL; - IUnknown *api = NULL; - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish topic=%u!!", topic); + BroadcastApi *broadcastApi = nullptr; + IUnknown *api = nullptr; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CustomEventPublish topic=%u!!", topic); void *publishData = nullptr; if (size > 0) { publishData = malloc(size); if (publishData == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish malloc failed! size = %u", size); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CustomEventPublish malloc failed! size = %u", size); return; } ret = memcpy_s(publishData, size, (const void *)data, size); if (ret != EOK) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish memcpy_s failed! ret = %d", ret); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CustomEventPublish memcpy_s failed! ret = %d", ret); free(publishData); return; } @@ -566,14 +550,14 @@ void CustomEventPublish(uint16_t topic, uint8_t *data, uint32_t size) { /* public request */ api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME); - if (api == NULL) { + if (api == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetFeatureApi failed for service: %s, feature: %s", BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME); free(publishData); return; } ret = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi); - if (ret != 0 || broadcastApi == NULL) { + if (ret != 0 || broadcastApi == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "QueryInterface failed! ret = %d, api = %p", ret, api); free(publishData); return; @@ -585,10 +569,8 @@ void CustomEventPublish(uint16_t topic, uint8_t *data, uint32_t size) { } broadcastApi->Release((IUnknown *)broadcastApi); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish end!!"); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CustomEventPublish end!!"); - // // 释放内存 - // free(publishData); return; } -- 2.17.1