开机屏蔽不需要的服务,做极简启动UI,蓝色填充图。
author孙春阳 <snickersun@163.com>
Thu, 27 Nov 2025 09:19:54 +0000 (17:19 +0800)
committer孙春阳 <snickersun@163.com>
Thu, 27 Nov 2025 09:19:54 +0000 (17:19 +0800)
code/sdk/application/brandy/brandy_standard/thread_init.c
code/sdk/application/brandy/brandy_standard/thread_pri_init.c
code/sdk/application/wearable/ln/nativeapp/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c
code/sdk/drivers/drivers/driver/nand_flash/nand/nandflash_config.c
code/sdk/middleware/services/gui/uikit/proprietary/include/service/graphic_service_wrapper.h
code/sdk/middleware/services/gui/uikit/proprietary/src/service/src/graphic_service_wrapper.cpp

index d51d612..5f514aa 100644 (file)
@@ -377,6 +377,6 @@ static void app_main(const void *unused)
 static void lwip_main(void)
 {
     PRINT("lwip_main run start."NEWLINE);
-    tcpip_init(NULL, NULL);
+    // tcpip_init(NULL, NULL);
 }
 #endif
index e4ecda8..5782dfb 100644 (file)
@@ -513,7 +513,6 @@ static void thread_main(const void *unused)
      * \r
     */\r
 // #ifdef CUSTOM_UTILS\r
-    ConfigModelInit();\r
 //     uapi_runtime_log_service_init();\r
     init_btaddr_btname();\r
     uapi_calendar_init();\r
@@ -537,7 +536,7 @@ static void thread_main(const void *unused)
     button_app_init();\r
     \r
 #ifdef SUPPORT_AT_VIBRATOR\r
-    uapi_vibrator_service_init();\r
+    // uapi_vibrator_service_init();\r
 #endif\r
 \r
 #ifdef CONFIG_SYSTEM_VIEW\r
@@ -557,7 +556,7 @@ static void thread_main(const void *unused)
 \r
 \r
 #ifdef SUPPORT_CAT1_SERVICE\r
-    cat1_server_init();\r
+    // cat1_server_init();\r
 #endif\r
 \r
 #ifdef SUPPORT_BLE_SERVICE\r
@@ -570,26 +569,26 @@ static void thread_main(const void *unused)
     custom_i2c_init(I2C_BUS_2);\r
 \r
 #ifdef SUPPORT_CYWEE_SERVICE\r
-    uapi_cywee_service_init();\r
+    // uapi_cywee_service_init();\r
 #endif \r
 \r
 #ifdef ROTARYENCODER_MIXO\r
-    uapi_mixo_service_init();\r
+    // uapi_mixo_service_init();\r
 #endif\r
 #ifdef SUPORT_MAG_SERVICE\r
-    uapi_mag_service_init();\r
+    // uapi_mag_service_init();\r
 #endif\r
 \r
 #ifdef ENABLE_LQBP002TA\r
-    uapi_lqbp_service_init();\r
+    // uapi_lqbp_service_init();\r
 #endif \r
  \r
 #ifdef ENABLE_BN02\r
-    uapi_bp_service_init();\r
+    // uapi_bp_service_init();\r
 #endif\r
 \r
 #ifdef SUPPORT_GYRO_SERVICE\r
-    uapi_gyro_service_init();\r
+    // uapi_gyro_service_init();\r
 #endif\r
 \r
 #endif\r
@@ -617,7 +616,7 @@ static void thread_main(const void *unused)
 #endif\r
 \r
 #ifdef SUPPORT_GNSS\r
-    gnss_uart_init();\r
+    // gnss_uart_init();\r
     // uapi_gnss_http_server_init();\r
 #endif\r
 \r
@@ -627,11 +626,11 @@ static void thread_main(const void *unused)
 #endif\r
 \r
 #ifdef SUPPORT_PPG_SERVICE\r
-    uapi_ppg_service_init();\r
+    // uapi_ppg_service_init();\r
 #endif\r
 \r
 #ifdef CUSTOM_UTILS\r
-    startup_post_init();\r
+    // startup_post_init();\r
 #endif\r
 \r
     set_startup_finish_flag();\r
index 1f01e4a..944c68d 100644 (file)
 #include "RecentManager.h"
 #include "PageTransitionMgr.h"
 #include <ConfigModelC.h>
+#include "components/root_view.h"
+#include "components/ui_view_group.h"
+#include "gfx_utils/color.h"
+#include "common/screen.h"
 
 namespace OHOS {
 
@@ -48,22 +52,53 @@ NativeLauncher &NativeLauncher::GetInstance(void)
     return instance;
 }
 
+// 静态变量:保存蓝色窗口的指针
+static OHOS::UIViewGroup *g_simple_blue_window = nullptr;
+
 void NativeLauncher::InitNativeLauncher()
 {
-    //设置字体
-    GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE,
-        OHOS::VECTOR_FONT_DIR, DEFAULT_VECTOR_FONT_FILENAME);
-
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "NativeLauncher::InitNativeLauncher");
-  
-    //初始化slice
-    NativeRegisterManager::GetInstance().InitAllNativesSlices();
-
-    //初始化屏幕亮度
-    cm_initScreenBrightness();
-
-    //设置默认首页
-    NativeAbility::GetInstance().SetDefaultSliceId(VIEW_THUNDER_BIRD);
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "InitNativeLauncher: Minimal startup - Blue window only");
+    
+    // 获取根视图并清除所有现有视图
+    OHOS::RootView* rootView = OHOS::RootView::GetInstance();
+    if (rootView != nullptr) {
+        rootView->RemoveAll();
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Cleared all existing views from RootView");
+    }
+    
+    // 如果蓝色窗口已存在,先删除
+    if (g_simple_blue_window != nullptr) {
+        if (rootView != nullptr) {
+            rootView->Remove(g_simple_blue_window);
+        }
+        delete g_simple_blue_window;
+        g_simple_blue_window = nullptr;
+    }
+    
+    // 获取屏幕尺寸
+    int16_t width = OHOS::Screen::GetInstance().GetWidth();
+    int16_t height = OHOS::Screen::GetInstance().GetHeight();
+    
+    // 创建简单的蓝色窗口
+    g_simple_blue_window = new OHOS::UIViewGroup();
+    if (g_simple_blue_window == nullptr) {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create blue window");
+        return;
+    }
+    
+    // 设置窗口位置和大小(全屏)
+    g_simple_blue_window->SetPosition(0, 0, width, height);
+    
+    // 设置蓝色背景 (ARGB格式: 0xFF0000FF = 蓝色,完全不透明)
+    g_simple_blue_window->SetStyle(OHOS::STYLE_BACKGROUND_COLOR, OHOS::Color::Blue().full);
+    g_simple_blue_window->SetStyle(OHOS::STYLE_BACKGROUND_OPA, 0xFF);
+    
+    // 添加到根视图并刷新显示
+    if (rootView != nullptr) {
+        rootView->Add(g_simple_blue_window);
+        rootView->Invalidate();
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Blue window created and displayed: %dx%d", width, height);
+    }
 }
 
 }
index 5a70c16..0c9cc99 100644 (file)
-/*\r
- * Copyright (c) CompanyNameMagicTag Technologies Co., Ltd. 2023-2023. All rights reserved.\r
- * Description: The application core startup logo display.\r
- * Author: CompanyName\r
- * Create: 2022-02-19\r
- */\r
-\r
-#include "common_def.h"\r
-#include "debug_print.h"\r
-#include "system_init.h"\r
-#include "ohosfwk_startup.h"\r
-#ifdef ENABLE_UIKIT\r
-#include "graphic_service_wrapper.h"\r
-#endif\r
-#ifdef SUPPORT_POWER_MANAGER\r
-#include "power_display_service.h"\r
-#endif\r
-\r
-#if defined(CUSTOM_UTILS) && defined(BOARD_LEINIAO)\r
-#include "custom_utils.h"\r
-#endif\r
-\r
-#include "soc_lcd_api.h"\r
-\r
-// int32_t user_get_random_bytes(uint32_t size, uint8_t *randnum)\r
-// {\r
-//     return uapi_drv_cipher_trng_get_random_bytes(randnum, size);\r
-// }\r
-\r
-// int32_t user_get_random(uint32_t *randnum)\r
-// {\r
-//     return uapi_drv_cipher_trng_get_random(randnum);\r
-// }\r
-\r
-// int32_t mbedtls_adapt_register(void)\r
-// {\r
-//     mbedtls_harden_cipher_func harden_cipher_func = { 0 };\r
-//     harden_cipher_func.harden_trng_get_random = user_get_random,\r
-//     harden_cipher_func.harden_trng_get_multi_random = user_get_random_bytes,\r
-\r
-//     mbedtls_cipher_adapt_register_func(&harden_cipher_func);\r
-//     return 0;\r
-// }\r
-\r
-void ohos_show_bootup_logo(void)\r
-{\r
-    /* 未接lcd时不能调用图形相关类的实例 */\r
-    if (!uapi_is_lcd_connect()) {\r
-        return;\r
-    }\r
-\r
-#if defined(CUSTOM_UTILS) && defined(BOARD_LEINIAO)\r
-    PRINT("Turning on LCD backlight...\n");\r
-    uapi_lcd_backlight_on();\r
-    PRINT("LCD backlight turned on (CUSTOM_UTILS + BOARD_LEINIAO)\n");\r
-#endif\r
-\r
-#ifdef ENABLE_UIKIT\r
-    InitGraphicService();\r
-#endif\r
-#ifdef SUPPORT_POWER_MANAGER\r
-    const power_display_svr_api_t *display_api = power_display_svr_get_api();\r
-    display_api->turn_on_screen();\r
-#if defined(A5133_DEMO_SERVER) || defined(A5133_DEMO_CLIENT)\r
-    display_api->set_screen_set_keepon_timeout(-1);\r
-#else\r
-    display_api->set_screen_set_keepon_timeout(25000);\r
-#endif\r
-#endif\r
-\r
-\r
-#if defined(CONFIG_OTA_UPDATE_SUPPORT) && defined(ENABLE_UIKIT)\r
- if  (upg_check_upgrade_need_upgrade())\r
- {    \r
-    ShowGraphicOTALogo();\r
- }else{\r
-    \r
-    ShowGraphicLogo();\r
- }\r
-#else\r
-\r
-#ifdef ENABLE_UIKIT\r
-    ShowGraphicLogo();\r
-#endif\r
-\r
-#endif\r
-}\r
-\r
-\r
-void ohos_startup()\r
-{\r
-    // mbedtls_adapt_register();\r
-    /* 未接lcd时不能调用图形相关类的实例 */\r
-    if (!uapi_is_lcd_connect()) {\r
-        return;\r
-    }\r
-    \r
-//#ifdef BOARD_LEINIAO\r
-#ifdef ENABLE_UIKIT\r
-    boot_animation_init();\r
-#endif\r
-wait_animation_stop();\r
-boot_animation_init_deinit();\r
-//#endif\r
-#if defined(CONFIG_OTA_UPDATE_SUPPORT) && defined(ENABLE_UIKIT)\r
-    //如果在升级状态,则不进入系统\r
- if  (upg_check_upgrade_need_upgrade()) return ;\r
-#endif\r
-    OHOS_SystemInit();\r
-\r
-#ifdef PUBLISH_TEST_DATA\r
-    PublishTestData();\r
-#endif\r
-    \r
-#ifdef SUPPORT_POWER_MANAGER\r
-    const power_display_svr_api_t *display_api = power_display_svr_get_api();\r
-    // display_api->turn_on_screen();\r
-#if !defined(A5133_DEMO_SERVER) && !defined(A5133_DEMO_CLIENT)\r
-    display_api->set_screen_set_keepon_timeout(0);\r
-#endif\r
-    // display_api->set_screen_set_keepon_timeout(5000);\r
-#endif\r
-}\r
+/*
+ * Copyright (c) CompanyNameMagicTag Technologies Co., Ltd. 2023-2023. All rights reserved.
+ * Description: The application core startup logo display.
+ * Author: CompanyName
+ * Create: 2022-02-19
+ */
+
+#include "common_def.h"
+#include "debug_print.h"
+#include "system_init.h"
+#include "ohosfwk_startup.h"
+#ifdef ENABLE_UIKIT
+#include "graphic_service_wrapper.h"
+#endif
+#ifdef SUPPORT_POWER_MANAGER
+#include "power_display_service.h"
+#endif
+
+#if defined(CUSTOM_UTILS) && defined(BOARD_LEINIAO)
+#include "custom_utils.h"
+#endif
+
+#include "soc_lcd_api.h"
+
+// int32_t user_get_random_bytes(uint32_t size, uint8_t *randnum)
+// {
+//     return uapi_drv_cipher_trng_get_random_bytes(randnum, size);
+// }
+
+// int32_t user_get_random(uint32_t *randnum)
+// {
+//     return uapi_drv_cipher_trng_get_random(randnum);
+// }
+
+// int32_t mbedtls_adapt_register(void)
+// {
+//     mbedtls_harden_cipher_func harden_cipher_func = { 0 };
+//     harden_cipher_func.harden_trng_get_random = user_get_random,
+//     harden_cipher_func.harden_trng_get_multi_random = user_get_random_bytes,
+
+//     mbedtls_cipher_adapt_register_func(&harden_cipher_func);
+//     return 0;
+// }
+
+void ohos_show_bootup_logo(void)
+{
+    /* 未接lcd时不能调用图形相关类的实例 */
+    if (!uapi_is_lcd_connect()) {
+        return;
+    }
+
+#if defined(CUSTOM_UTILS) && defined(BOARD_LEINIAO)
+    PRINT("Turning on LCD backlight...\n");
+    uapi_lcd_backlight_on();
+    PRINT("LCD backlight turned on (CUSTOM_UTILS + BOARD_LEINIAO)\n");
+#endif
+
+#ifdef ENABLE_UIKIT
+    InitGraphicService();
+#endif
+#ifdef SUPPORT_POWER_MANAGER
+    const power_display_svr_api_t *display_api = power_display_svr_get_api();
+    display_api->turn_on_screen();
+#if defined(A5133_DEMO_SERVER) || defined(A5133_DEMO_CLIENT)
+    display_api->set_screen_set_keepon_timeout(-1);
+#else
+    display_api->set_screen_set_keepon_timeout(25000);
+#endif
+#endif
+
+
+#if defined(CONFIG_OTA_UPDATE_SUPPORT) && defined(ENABLE_UIKIT)
+ if  (upg_check_upgrade_need_upgrade())
+ {    
+    ShowGraphicOTALogo();
+ }else{
+    
+    ShowGraphicLogoRed();
+ }
+#else
+
+#ifdef ENABLE_UIKIT
+    ShowGraphicLogoRed();
+#endif
+
+#endif
+}
+
+
+void ohos_startup()
+{
+    // mbedtls_adapt_register();
+    /* 未接lcd时不能调用图形相关类的实例 */
+    if (!uapi_is_lcd_connect()) {
+        return;
+    }
+    
+//#ifdef BOARD_LEINIAO
+// #ifdef ENABLE_UIKIT
+//     boot_animation_init();
+// #endif
+// wait_animation_stop();
+// boot_animation_init_deinit();
+//#endif
+#if defined(CONFIG_OTA_UPDATE_SUPPORT) && defined(ENABLE_UIKIT)
+    //如果在升级状态,则不进入系统
+ if  (upg_check_upgrade_need_upgrade()) return ;
+#endif
+    OHOS_SystemInit();
+
+#ifdef PUBLISH_TEST_DATA
+    PublishTestData();
+#endif
+    
+#ifdef SUPPORT_POWER_MANAGER
+    const power_display_svr_api_t *display_api = power_display_svr_get_api();
+    // display_api->turn_on_screen();
+#if !defined(A5133_DEMO_SERVER) && !defined(A5133_DEMO_CLIENT)
+    display_api->set_screen_set_keepon_timeout(0);
+#endif
+    // display_api->set_screen_set_keepon_timeout(5000);
+#endif
+}
index 2529575..173f722 100644 (file)
@@ -166,7 +166,21 @@ static int formate_filesystem(uint32_t total_block_num)
     }\r
     return ret;\r
 }\r
-\r
+static void nandflash_yaffs_mount(void)\r
+{\r
+    if (has_nandflash_init != 1) {\r
+        PRINT("\r\nnandflash not init skip mount.\r\n");\r
+        return ;\r
+    }\r
+    struct nand_driver_struct *freertos_nandflash_driver = get_nand_flash();\r
+    \r
+    PRINT("yaffs filesystem init start!\n");\r
+    int ret = formate_filesystem(freertos_nandflash_driver->total_block);\r
+    PRINT("yaffs filesystem init end!\n");\r
+#ifdef CUSTOM_ZHIHUI\r
+    ConfigModelInit();\r
+#endif\r
+}\r
 /* 使用约束:中断和异常中,禁止sync操作 */\r
 void nandflash_yaffs_sync(void)\r
 {\r
@@ -298,11 +312,11 @@ int nandflash_filesystem_init(void)
     if (get_mtd_info("nand") != 0) {\r
         PRINT("get_mtd_info faild!\n");\r
     }\r
-    PRINT("yaffs filesystem init start!\n");\r
-    int ret = formate_filesystem(freertos_nandflash_driver->total_block);\r
-    PRINT("yaffs filesystem init end!\n");\r
+    // INSERT_YOUR_CODE\r
+    pthread_t yaffs_mount_thread;\r
+    pthread_create(&yaffs_mount_thread, NULL, nandflash_yaffs_mount, NULL);\r
     has_nandflash_init = 1;\r
-    return ret;\r
+    return 0;\r
 }\r
 \r
 void nandflash_qspi_resume(void)\r
index 002cc4b..e9a0fe1 100644 (file)
@@ -71,6 +71,11 @@ void InitGraphicService(void);
  */
 void ShowGraphicLogo(void);
 
+/**
+ * @brief show red graphic logo (created directly in memory), for c language.
+ */
+void ShowGraphicLogoRed(void);
+
 /**
  * @brief hide graphic logo, for c language.
  */
index 8951ab8..5a3ebe8 100644 (file)
@@ -29,6 +29,9 @@
 #include "components/ui_image_animator.h"
 #include "wearable_log.h"
 #include "UiConfig.h"
+#include "gfx_utils/mem_api.h"
+#include "gfx_utils/graphic_types.h"
+#include <cstring>
 #ifdef SUPPORT_CUSTOM_UI_COMPONENT
 #include "uicomponents/UIComponents.h"
 #endif
@@ -475,8 +478,17 @@ extern "C"
                     OHOS::RootView::GetInstance()->Remove(g_logo);
                     delete g_logo;
                     g_logo = nullptr;
-                    OHOS::ImageCacheManager::GetInstance().UnloadSingleRes(IMAGE_OPEN_LOGO_PATH);
-                    g_imgInfo = nullptr;
+                    // 如果是直接创建的 ImageInfo(红色图片),需要释放内存
+                    if (g_imgInfo != nullptr) {
+                        if (g_imgInfo->data != nullptr) {
+                            OHOS::UIFree(const_cast<uint8_t*>(g_imgInfo->data));
+                        }
+                        OHOS::UIFree(g_imgInfo);
+                        g_imgInfo = nullptr;
+                    } else {
+                        // 如果是从文件加载的,使用原来的方式释放
+                        OHOS::ImageCacheManager::GetInstance().UnloadSingleRes(IMAGE_OPEN_LOGO_PATH);
+                    }
                 }
             });
     }
@@ -553,6 +565,81 @@ extern "C"
         LOS_Msleep(500);
     }
 
+    void ShowGraphicLogoRed(void)
+    {
+        if (g_showLogo)
+        {
+            return;
+        }
+        g_showLogo = true;
+        
+        // 获取屏幕尺寸
+        int16_t width = OHOS::Screen::GetInstance().GetWidth();
+        int16_t height = OHOS::Screen::GetInstance().GetHeight();
+        
+        // ARGB8888 格式,每个像素4字节
+        const uint16_t pixelByteSize = 4;
+        uint32_t dataSize = width * height * pixelByteSize;
+        
+        // 分配像素数据内存
+        uint8_t *srcData = static_cast<uint8_t *>(OHOS::UIMalloc(dataSize));
+        if (srcData == nullptr) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowGraphicLogoRed: failed to allocate pixel data");
+            g_showLogo = false;
+            return;
+        }
+        
+        // 填充红色像素数据 (ARGB格式: A-R-G-B)
+        // 红色: R=255, G=0, B=0, A=255
+        for (uint32_t i = 0; i < dataSize; i += pixelByteSize) {
+            srcData[i] = 0;        // B (Blue)
+            srcData[i + 1] = 0;   // G (Green)
+            srcData[i + 2] = 255;  // R (Red)
+            srcData[i + 3] = 255;  // A (Alpha)
+        }
+        
+        // 分配 ImageInfo 结构体内存
+        g_imgInfo = static_cast<OHOS::ImageInfo *>(OHOS::UIMalloc(sizeof(OHOS::ImageInfo)));
+        if (g_imgInfo == nullptr) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowGraphicLogoRed: failed to allocate ImageInfo");
+            OHOS::UIFree(srcData);
+            g_showLogo = false;
+            return;
+        }
+        
+        // 初始化 ImageInfo 结构体
+        memset(g_imgInfo, 0, sizeof(OHOS::ImageInfo));
+        g_imgInfo->header.width = width;
+        g_imgInfo->header.height = height;
+        g_imgInfo->header.colorMode = OHOS::ColorMode::ARGB8888;
+        g_imgInfo->dataSize = dataSize;
+        g_imgInfo->data = srcData;
+        
+        // 创建 UIImageView 并设置
+        g_logo = new OHOS::UIImageView();
+        if (g_logo == nullptr) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowGraphicLogoRed: failed to create UIImageView");
+            OHOS::UIFree(g_imgInfo);
+            OHOS::UIFree(srcData);
+            g_imgInfo = nullptr;
+            g_showLogo = false;
+            return;
+        }
+        
+        g_logo->SetPosition(0, 0, width, height);
+        g_logo->SetAutoEnable(false);
+        g_logo->SetResizeMode(OHOS::UIImageView::CENTER);
+        g_logo->SetSrc(g_imgInfo);
+        
+        GraphicService::GetInstance()->PostGraphicEvent(
+            []
+            {
+                OHOS::RootView::GetInstance()->Add(g_logo);
+                OHOS::RootView::GetInstance()->Invalidate();
+            });
+        LOS_Msleep(500);
+    }
+
     void ShowGraphicOTALogo(void)
     {