From fd4c27c438960fff11aaf68a971996377509341b Mon Sep 17 00:00:00 2001 From: SnickerSun Date: Thu, 25 Apr 2024 17:34:03 +0800 Subject: [PATCH] =?utf8?q?=E6=B7=BB=E5=8A=A0OTA=E5=8D=87=E7=BA=A7UI?= =?utf8?q?=E6=8F=90=E7=A4=BA=EF=BC=8Crecovery=E9=87=8C=E8=BF=98=E5=8F=AA?= =?utf8?q?=E8=83=BD=E6=98=AF=E7=99=BD=E5=B1=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../brandy/brandy_recovery/app_os_init.c | 2 +- .../brandy/brandy_recovery/recovery_display.c | 5 +- .../brandy/brandy_standard/thread_init.c | 25 +++++-- .../nativeabilityfwk/src/StartNative.cpp | 1 + .../wearable/ohos_startup/ohosfwk_startup.c | 13 +++- .../wstp/at_service/app/app_at_process.c | 6 +- .../mk_fs_image/fd230/fs/system/OTAUpdata.bin | Bin 0 -> 146040 bytes .../mk_fs_image/fd230/fs/system/logo.bin | Bin 76808 -> 0 bytes .../include/service/graphic_service_wrapper.h | 4 +- .../service/src/graphic_service_wrapper.cpp | 68 ++++++++++++++---- 10 files changed, 97 insertions(+), 27 deletions(-) create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/system/OTAUpdata.bin delete mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/system/logo.bin diff --git a/code/sdk/application/brandy/brandy_recovery/app_os_init.c b/code/sdk/application/brandy/brandy_recovery/app_os_init.c index a6bff4cbb..70c760679 100755 --- a/code/sdk/application/brandy/brandy_recovery/app_os_init.c +++ b/code/sdk/application/brandy/brandy_recovery/app_os_init.c @@ -184,7 +184,7 @@ static void app_main(const void *unused) recovery_display_init(); #endif printf("fs init success.\r\n"); - // recovery_display_sample(); + recovery_display_sample(); #ifdef CFG_DRIVERS_NANDFLASH //为了加速启动,把最耗时的mount_user_res_partition分区放到显示log之后 mount_user_res_partition(); diff --git a/code/sdk/application/brandy/brandy_recovery/recovery_display.c b/code/sdk/application/brandy/brandy_recovery/recovery_display.c index 207742dc2..2062f013a 100644 --- a/code/sdk/application/brandy/brandy_recovery/recovery_display.c +++ b/code/sdk/application/brandy/brandy_recovery/recovery_display.c @@ -87,6 +87,7 @@ static errcode_t recovery_dispay_layer_and_surface_init(ext_dpu_surface *surface surface->update_rect = update_rect; surface->color_fmt = layer_info->layer_fmt; surface->compress_mode = EXT_GFX_COMPRESS_NONE; + return ERRCODE_SUCC; } @@ -98,11 +99,11 @@ void recovery_display_sample(void) ext_dpu_surface surface = {0}; ext_dpu_layer_info layer_info = {0}; ext_rect update_rect = {0, 0, 466, 466}; // 定义一个局部区域 - // ext_rect update_rect = {0, 133, 454, 200}; // 定义一个局部区域 + // ext_rect update_rect = {223, 223, 20, 20}; // 定义一个局部区域 recovery_dispay_layer_and_surface_init(&surface, &layer_info, &update_rect); // 设置layer全白色, 也可以使用接口 recovery_dispay_read_image_and_savein_surface 实现从文件系统读图片 - memset_s((void *)surface.phy_addr, surface.size, 0xff, surface.size); + memset_s((void *)surface.phy_addr, surface.size, 0xFF, surface.size); //recovery_dispay_read_image_and_savein_surface("/user/dpu_screen_cap.bin",&surface); ret = uapi_dpu_create_layer(&layer_info, &dpu_handle); if (ret != ERRCODE_SUCC) { diff --git a/code/sdk/application/brandy/brandy_standard/thread_init.c b/code/sdk/application/brandy/brandy_standard/thread_init.c index 39a9ce575..69dfca780 100755 --- a/code/sdk/application/brandy/brandy_standard/thread_init.c +++ b/code/sdk/application/brandy/brandy_standard/thread_init.c @@ -73,6 +73,10 @@ #ifdef SUPPORT_MEDIA_AUDIO_MANAGER #include "audio_manager_c_wrapper.h" #endif + +#ifdef CONFIG_OTA_UPDATE_SUPPORT +#include "graphic_service_wrapper.h" +#endif #include "clocks_config.h" #include "sys/time.h" #include "time.h" @@ -243,18 +247,20 @@ static void print_system_sleep_info(void) } #ifdef CONFIG_OTA_UPDATE_SUPPORT -static void upg_check_upgrade(void) + +bool upg_check_upgrade_need_upgrade(void) { + uint32_t fota_address = 0; errcode_t ret_val = (errcode_t)upg_get_upgrade_flag_flash_start_addr(&fota_address); if (ret_val != ERRCODE_SUCC) { - return; + return false; } fota_upgrade_flag_area_t upg_flag_info; ret_val = (errcode_t)upg_flash_read(fota_address, sizeof(fota_upgrade_flag_area_t), (uint8_t *)(&upg_flag_info)); if (ret_val != ERRCODE_SUCC) { - return; + return false; } if (!(upg_flag_info.head_magic == UPG_HEAD_MAGIC && @@ -262,9 +268,18 @@ static void upg_check_upgrade(void) upg_flag_info.complete_flag == UPG_FLAG_MAGIC)) { /* 不需要升级直接返回 */ PRINT("No need to upgrade...\r\n"); - return; + return false; } - + return true; +} +static void upg_check_upgrade(void) +{ + + errcode_t ret_val ; + if (upg_check_upgrade_need_upgrade() == false) + { + return ; + } PRINT("upgrading.......\r\n"); ret_val = uapi_upg_start(); if (ret_val != ERRCODE_SUCC) { diff --git a/code/sdk/application/wearable/nativeabilityfwk/src/StartNative.cpp b/code/sdk/application/wearable/nativeabilityfwk/src/StartNative.cpp index 11b005f5c..d25d83e53 100755 --- a/code/sdk/application/wearable/nativeabilityfwk/src/StartNative.cpp +++ b/code/sdk/application/wearable/nativeabilityfwk/src/StartNative.cpp @@ -7,6 +7,7 @@ void StartNative() { OHOS::NativeLauncher::GetInstance().InitNativeLauncher(); HideGraphicLogo(); + HideGraphicOtaLogo(); Want *info = static_cast(AdapterMalloc(sizeof(Want))); OHOS::NativeAbility::GetInstance().OnActive(*info); AdapterFree(info); diff --git a/code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c b/code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c index 01279dd76..6ccddede2 100755 --- a/code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c +++ b/code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c @@ -57,11 +57,22 @@ void ohos_startup() display_api->set_screen_set_keepon_timeout(15000); #endif - + +#if defined(CONFIG_OTA_UPDATE_SUPPORT) && defined(ENABLE_UIKIT) + if (upg_check_upgrade_need_upgrade()) + { + ShowGraphicOTALogo(); + }else{ + ShowGraphicLogo(); + } +#else + #ifdef ENABLE_UIKIT ShowGraphicLogo(); #endif +#endif + #ifdef CFG_DRIVERS_NANDFLASH //为了加速启动,把最耗时的mount分区放到显示log之后 mount_user_res_partition(); diff --git a/code/sdk/application/wstp/at_service/app/app_at_process.c b/code/sdk/application/wstp/at_service/app/app_at_process.c index 136ea7faa..963d19f66 100755 --- a/code/sdk/application/wstp/at_service/app/app_at_process.c +++ b/code/sdk/application/wstp/at_service/app/app_at_process.c @@ -1934,8 +1934,8 @@ uint32_t lcd_fill(uint8_t *data, uint32_t data_len) td_handle vau_handle; ext_vau_surface src_surface = {0}; - src_surface.width = 454; // 454 screen width - src_surface.height = 454; // 454 screen height + src_surface.width = 466; // 454 screen width + src_surface.height = 466; // 454 screen height src_surface.phy_addr = LCD_FILL_COLOR_ADDR; src_surface.vir_addr = (td_uchar *)src_surface.phy_addr; src_surface.color_fmt = EXT_GFX_FMT_ARGB8888; @@ -1945,7 +1945,7 @@ uint32_t lcd_fill(uint8_t *data, uint32_t data_len) src_surface.rect.y = 0; src_surface.rect.width = src_surface.width; src_surface.rect.height = src_surface.height; - src_surface.stride = 1824; /* 454 * 32 / 8 = 1816 16字节对齐得1824 */ + src_surface.stride = 1872; /* 454 * 32 / 8 = 1816 16字节对齐得1824 | 466 * 32 / 8 = 1864 16字节对齐得1872*/ src_surface.is_color_surface = TD_TRUE; src_surface.color = color_input; diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/system/OTAUpdata.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/system/OTAUpdata.bin new file mode 100644 index 0000000000000000000000000000000000000000..f7689f22c233a1f9f62b5476988a7cf8850b3a6b GIT binary patch literal 146040 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 L-cs2nlw?Vc4LbgjiSab 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 + [] { + if (g_logo != nullptr) { + OHOS::RootView::GetInstance()->Remove(g_logo); + delete g_logo; + g_logo = nullptr; + OHOS::ImageCacheManager::GetInstance().UnloadSingleRes(IMAGE_OPEN_LOGO_PATH); + g_imgInfo = nullptr; + } + }, + false); +} + +void HideGraphicOtaLogo() +{ + if (!g_showOtaLogo) { + return; + } + g_showOtaLogo = false; + OHOS::GraphicEventHandler::GetInstance()->PostGraphicEvent( + [] { + if (g_ota_logo != nullptr) { + OHOS::RootView::GetInstance()->Remove(g_ota_logo); + delete g_ota_logo; + g_ota_logo = nullptr; + OHOS::ImageCacheManager::GetInstance().UnloadSingleRes(IMAGE_OTA_LOGO_PATH); + g_ota_imgInfo = nullptr; + } + }, + false); +} +void ShowGraphicLogo(void) { if (g_showLogo) { return; @@ -153,26 +196,25 @@ void ShowGraphicLogo() }, false); } - -void HideGraphicLogo() +void ShowGraphicOTALogo(void) { - if (!g_showLogo) { + if (g_showOtaLogo) { return; } - g_showLogo = false; + g_showOtaLogo = true; + g_ota_logo = new OHOS::UIImageView(); + g_ota_logo->SetPosition(0, 0, OHOS::Screen::GetInstance().GetWidth(), OHOS::Screen::GetInstance().GetHeight()); + g_ota_logo->SetAutoEnable(false); + g_ota_logo->SetResizeMode(OHOS::UIImageView::CENTER); + g_ota_imgInfo = OHOS::ImageCacheManager::GetInstance().LoadSingleRes(IMAGE_OTA_LOGO_PATH); + g_ota_logo->SetSrc(g_ota_imgInfo); OHOS::GraphicEventHandler::GetInstance()->PostGraphicEvent( [] { - if (g_logo != nullptr) { - OHOS::RootView::GetInstance()->Remove(g_logo); - delete g_logo; - g_logo = nullptr; - OHOS::ImageCacheManager::GetInstance().UnloadSingleRes(IMAGE_OPEN_LOGO_PATH); - g_imgInfo = nullptr; - } + OHOS::RootView::GetInstance()->Add(g_ota_logo); + OHOS::RootView::GetInstance()->Invalidate(); }, false); } - #ifdef __cplusplus }; #endif -- 2.17.1