您的位置:首页 > 运维架构 > Linux

MTK平台添加高分屏兼容界面详程

2016-02-01 14:15 591 查看
        目前的产品分辨率是320*240的屏幕,所谓的低分屏,由于有提升用户体验的需求,需要添加一批次的高分屏(480*360),因此系统在surface系统启动之前的阶段图形显示都需要做一个高低分屏的适配逻辑。

硬件平台:MTK(MT6572)

软件平台:Android 4.4.2

从业数几载,业内人士反应MTK代码超级乱的情况早有耳闻,不过百闻终将不如一见。

下面入正题,首先要把相关的bmp图片资源加入系统:

--- a/mediatek/custom/common/lk/logo/rules.mk
+++ b/mediatek/custom/common/lk/logo/rules.mk
@@ -4,7 +4,9 @@ BOOT_LOGO_DIR := $(LOCAL_DIR)

 

 BMP_TO_RAW := $(BOOT_LOGO_DIR)/../logo_tool/bmp_to_raw

 ZPIPE := $(BOOT_LOGO_DIR)/../logo_tool/zpipe
-            
+

+HVGA :=cu_hvga

+

 $(info BMP_TO_RAW=$(BMP_TO_RAW))

 $(info ZPIPE=$(ZPIPE))

 $(info CUSTOM_LK_LOGO=$(CUSTOM_LK_LOGO))

@@ -129,7 +131,112 @@ RESOURCE_OBJ_LIST :=   \

             $(BOOT_LOGO_DIR)/$(CUSTOM_LK_LOGO)_ani_07.raw \

             $(BOOT_LOGO_DIR)/$(CUSTOM_LK_LOGO)_ani_08.raw \

             $(BOOT_LOGO_DIR)/$(CUSTOM_LK_LOGO)_ani_09.raw \
-            $(BOOT_LOGO_DIR)/$(CUSTOM_LK_LOGO)_charging_bg.raw
+            $(BOOT_LOGO_DIR)/$(CUSTOM_LK_LOGO)_charging_bg.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_uboot.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_kernel.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_low_battery.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_charger_ov.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_000.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_001.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_002.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_003.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_004.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_005.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_006.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_007.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_008.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_009.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_010.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_011.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_012.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_013.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_014.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_015.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_016.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_017.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_018.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_019.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_020.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_021.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_022.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_023.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_024.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_025.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_026.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_027.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_028.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_029.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_030.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_031.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_032.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_033.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_034.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_035.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_036.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_037.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_038.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_039.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_040.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_041.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_042.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_043.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_044.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_045.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_046.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_047.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_048.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_049.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_050.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_051.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_052.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_053.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_054.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_055.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_056.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_057.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_058.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_059.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_060.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_061.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_062.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_063.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_064.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_065.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_066.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_067.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_068.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_069.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_070.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_071.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_072.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_073.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_074.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_075.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_076.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_077.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_078.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_079.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_080.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_081.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_082.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_083.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_084.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_085.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_086.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_087.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_088.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_089.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_090.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_091.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_092.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_093.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_094.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_095.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_096.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_097.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_098.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_099.raw \

+            $(BOOT_LOGO_DIR)/$(HVGA)_num_100.raw

 

 ifeq ($(strip $(MTK_WIRELESS_CHARGER_SUPPORT)), yes)

 RESOURCE_OBJ_LIST +=   \

源码里边有一个bmp格式处理的工具,会将该目录下的bmp格式转化为raw模式,上述代码添加的图片为uboot,kernel第一屏界面,以及charger模式电量从1~100的百张图片。

第二步,逻辑相关的代码修改

--- a/mediatek/external/libshowlogo/show_animation_common.c
+++ b/mediatek/external/libshowlogo/show_animation_common.c

@@ -101,6 +101,12 @@ void fill_animation_logo(unsigned int index, void *fill_addr, void * dec_logo_ad

     LOGO_PARA_T logo_info;

     int logo_width;

     int logo_height;
+

+    if (HIGH_RESOLUTION_WIDTH == phical_screen.width) {

+        if (CHARGER_OV_INDEX == index) index = HIGH_RESOLUTION_BASE + index - 1;

+        else index = HIGH_RESOLUTION_BASE + index;

+    }

+

     if(check_logo_index_valid(index, logo_addr, &logo_info) != CHECK_LOGO_BIN_OK)

         return; 

               

@@ -269,9 +275,13 @@ void fill_animation_battery_vinci_cust(unsigned int capacity, void *fill_addr, v

  int anima_index = 0;

  anima_index = (capacity % 10);

 // VINCI_ANI_BEGIN =  VINCI_BAT_END + 1
+

+    if (HIGH_RESOLUTION_WIDTH == phical_screen.width) {

+        fill_animation_logo(BETWEEN_BASE_BAT + capacity, fill_addr, dec_logo_addr, logo_addr, phical_screen);

+ } else {

         fill_animation_logo(VINCI_ANI_BEGIN + anima_index, fill_addr, dec_logo_addr, logo_addr, phical_screen);

         fill_animation_dynamic(VINCI_BAT_BEGIN + capacity, capacity_rect, fill_addr, cust_percent_pic_addr, logo_addr, phical_screen);
-
+    }

 }

 #endif

下边是一些相关宏定义,分辨率以及图片基址编号定义:

--- a/mediatek/custom/common/lk/include/target/cust_display.h
+++ b/mediatek/custom/common/lk/include/target/cust_display.h

@@ -94,6 +94,9 @@

 /*

  * Vinci index

  */
+#define        HIGH_RESOLUTION_BASE    117

+#define        BETWEEN_BASE_BAT        4

+

 #define        BOOT_LOGO_INDEX         0

 #define        KERNEL_LOGO_INDEX       1

--- a/mediatek/external/libshowlogo/show_animation_common.h

+++ b/mediatek/external/libshowlogo/show_animation_common.h

@@ -63,6 +63,8 @@ typedef struct {

     unsigned int inaddr;

 } LOGO_PARA_T;

 
+#define HIGH_RESOLUTION_WIDTH 360

+

 /********** show_animationm_ver:  charging animation version  ************/

 /*                                                                       */ 

 /* version 0: show 4 recatangle growing animation without battery number */

第三步,修改Recovery界面的动画帧逻辑。

--- a/bootable/recovery/screen_ui.cpp

+++ b/bootable/recovery/screen_ui.cpp

@@ -104,7 +104,12 @@ void ScreenRecoveryUI::draw_install_overlay_locked(int frame)

 void ScreenRecoveryUI::draw_background_locked(Icon icon)

 {

     pagesIdentical = false;
-    gr_color(0, 0, 0, 255);  //这部分的改动是由于高低分屏的背景色RGB不一致,需要做一下适配
+    //gr_color(0, 0, 0, 255);

+ if (HIGH_RESOLUTION_WIDTH == gr_fb_width())

+        gr_color(38, 40, 39, 255);

+    else

+        gr_color(0, 0, 0, 255);

+

     gr_fill(0, 0, gr_fb_width(), gr_fb_height());

 

     if (icon) {

@@ -379,9 +384,15 @@ void ScreenRecoveryUI::Init()

     text_cols = gr_fb_width() / char_width;

     if (text_cols > kMaxCols - 1) text_cols = kMaxCols - 1;

 
-    LoadBitmap("icon_installing", &backgroundIcon[INSTALLING_UPDATE]);
+    if (HIGH_RESOLUTION_WIDTH == gr_fb_width()) {

+        LoadBitmap("icon_hinstalling", &backgroundIcon[INSTALLING_UPDATE]);

+        LoadBitmap("icon_herror", &backgroundIcon[ERROR]);

+    } else {

+        LoadBitmap("icon_installing", &backgroundIcon[INSTALLING_UPDATE]);

+        LoadBitmap("icon_error", &backgroundIcon[ERROR]);

+    }

     backgroundIcon[ERASING] = backgroundIcon[INSTALLING_UPDATE];
-    LoadBitmap("icon_error", &backgroundIcon[ERROR]);
+    //LoadBitmap("icon_error", &backgroundIcon[ERROR]);

     backgroundIcon[NO_COMMAND] = backgroundIcon[ERROR];

 

     LoadBitmap("progress_empty", &progressBarEmpty);

@@ -406,12 +417,22 @@ void ScreenRecoveryUI::Init()

     if (installing_frames > 0) {

         installationOverlay = (gr_surface*)malloc(installing_frames *

                                                    sizeof(gr_surface));
-        for (i = 0; i < installing_frames; ++i) {

-            char filename[40];

-            // "icon_installing_overlay01.png",

-            // "icon_installing_overlay02.png", ...

-            sprintf(filename, "icon_installing_overlay%02d", i+1);

-            LoadBitmap(filename, installationOverlay+i);
+        if (HIGH_RESOLUTION_WIDTH == gr_fb_width()) {

+            for (i = 0; i < installing_frames; ++i) {

+                char filename[40];

+                // "icon_installing_overlay01.png",

+                // "icon_installing_overlay02.png", ...

+                sprintf(filename, "icon_installing_hoverlay%02d", i+1);

+                LoadBitmap(filename, installationOverlay+i);

+            }

+        } else {

+            for (i = 0; i < installing_frames; ++i) {

+                char filename[40];

+                // "icon_installing_overlay01.png",

+                // "icon_installing_overlay02.png", ...

+                sprintf(filename, "icon_installing_overlay%02d", i+1);

+                LoadBitmap(filename, installationOverlay+i);

+            }

         }

     } else {

         installationOverlay = NULL;

diff --git a/bootable/recovery/screen_ui.h b/bootable/recovery/screen_ui.h

index 1d5ff4b..3b170c9 100644
--- a/bootable/recovery/screen_ui.h

+++ b/bootable/recovery/screen_ui.h

@@ -22,6 +22,8 @@

 #include "ui.h"

 #include "minui/minui.h"

 
+#define HIGH_RESOLUTION_WIDTH 360

+

 // Implementation of RecoveryUI appropriate for devices with a screen

 // (shows an icon + a progress bar, text logging, menu, etc.)

 class ScreenRecoveryUI : public RecoveryUI {

第四步,修改bootloader首张图片的逻辑处理。之前做过调适,因为单单修改external下的该文件,bootloader阶段的第一屏图片显示不对,因此特意对bootloader中的代码做了再次处理。

--- a/bootable/bootloader/lk/lib/libshowlogo/show_animation_common.c

+++ b/bootable/bootloader/lk/lib/libshowlogo/show_animation_common.c

@@ -97,6 +97,12 @@ int check_logo_index_valid(unsigned int index, void * logo_addr, LOGO_PARA_T * l

 void fill_animation_logo(unsigned int index, void *fill_addr, void * dec_logo_addr, void * logo_addr, LCM_SCREEN_T phical_screen)

 {

     LOGO_PARA_T logo_info;
+

+    if (HIGH_RESOLUTION_WIDTH == phical_screen.width) {

+        if (CHARGER_OV_INDEX == index) index = HIGH_RESOLUTION_BASE + index -1;

+        else index = HIGH_RESOLUTION_BASE + index;

+    }

+

     if(check_logo_index_valid(index, logo_addr, &logo_info) != CHECK_LOGO_BIN_OK)

         return; 

               

diff --git a/bootable/bootloader/lk/lib/libshowlogo/show_animation_common.h b/bootable/bootloader/lk/lib/libshowlogo/show_animation_common.h

index 55aecaf..7dfb968 100644
--- a/bootable/bootloader/lk/lib/libshowlogo/show_animation_common.h

+++ b/bootable/bootloader/lk/lib/libshowlogo/show_animation_common.h

@@ -63,6 +63,7 @@ typedef struct {

     unsigned int inaddr;

 } LOGO_PARA_T;

 
+#define HIGH_RESOLUTION_WIDTH 360
 

 // version_0 animation

 #define ANIM_V0_REGIONS  4 

自此,适配工作大功告成,不过资源文件的diff没有上传,依个人情况做改动吧。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android Recovery Linux MTK Logo