zoukankan      html  css  js  c++  java
  • 不同分辨率的LCM进行兼容

    1.读取不同LCM ID的时序不同,如何处理?

    2.开机后android会自动resize图片资源的大小,但开机logo无法自行resize,如何操作?保证识别到不同分辨率的LCM后开机logo可以正常显示

    [Analysis]

    1. 关于时序

    JB版本中,接口disp_drv_get_lcm_driver实现compare id并获取到lcm driver以及lcm param的动作,其工作流程如下


    从上图可以看到,对于DSI,每次尝试读取id之前都会根据lcm driver中的设置重新设置时序,所以担心时序不同无法读取id的担心就显得多余了

     

    2. 关于开机logo

    我们默认的做法,在ProjectConfig.mk中会定义Macro BOOT_LOGO方便在目录mediatekcustomcommonlklogo中读取到相应的资源,作为开机logo显示。

    这里的开机logo分为两种,分别为U-boot logo以及kernel logo。我们分别讨论这两种logo的显示原理

    ·         U-boot logo(and Battery logo)

    U-boot logo是开机后的第一个界面,U-boot logo以及Battery logo会统一打包为logo.bin。对于JB版本,主要工作 流程如下

    1. Little Kernel会在platform_early_init阶段首先会获取lcm params,其工作流程就是透过读id找到现在插入的LCM,根据LCM的分辨率申请相应大小的frame buffer并确定frame buffer起始地址

    2. logo.bin预留4M Ram

    3. 之后在platform_init阶段,直接将logo.bin载入到4M Ram

    4, 完成载入后,在platform_initmt_disp_show_boot_logo();会调用show_logo(0);完成第一张logo显示。其中的index=0代表在logo.bin中压缩的第一张图片,logo.bin中的图片压缩顺序可以察看文件mediatekcustomcommonlklogo ules.mk,如下

    RESOURCE_OBJ_LIST :=  

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_uboot.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_battery.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_low_battery.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_charger_ov.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_0.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_1.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_2.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_3.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_4.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_5.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_6.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_7.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_8.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_9.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_percent.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_01.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_02.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_03.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_04.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_05.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_06.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_07.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_08.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_09.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_10.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_01.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_02.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_03.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_04.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_05.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_06.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_07.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_08.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_09.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_10.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_bg.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_img.raw

                $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_100.raw

    ·         Kernel logo

    Kernel logo的工作方式与U-boot logo不同,是透过init.rc中注册的boot_logo_updater service完成读取raw data文件,进行绘画的,所以在kernel logo只是经过了bmpraw的转换,在目录mediatekcustomcommonlklogo下生成raw data 文件boot_logo。之后透过脚本文件将boot_logo文件搬移到out argetproductxxxxsystemmediaimages下,打包为system.imgdownload到手机种,并存放于/system/media/images目录下。

     

    [Solution]

    对于U-boot logo,只需要将不同分辨率的图片压缩至logo.bin中,在读取时根据不同的索引显示相应的图片即可

    而对于Kernel logo,我们需要将不同分辨率的boot_logo raw data文件生成出来并copy到手机中,boot_logo_updater根据不同的分辨率进行识别,读取相应的logo文件。

    qhdhd720两种分辨率相互兼容为例,方案大致如下,注意,logo的对应需要贵司自行完成

    1. lcm driver中实现compare id接口
    2. U-boot logo压缩,在mediatekcustomcommonlklogo ules.mk中,修改RESOURCE_OBJ_LIST列表,使用期望的分辨率代替BOOT_LOGO变量,(makefileBOOT_LOGO的定义将无效)

    RESOURCE_OBJ_LIST :=  

                $(BOOT_LOGO_DIR)/$qhd/$qhd_uboot.raw

                    …

                    …

             $(BOOT_LOGO_DIR)/$hd720/$hd720_uboot.raw

                    …

                    …

     

    1. 记录每组分辨率插入的raw data个数
    2. mt_disp_show_boot_logo();函数中根据LCM的分辨率读取相应iduboot logo;对于ipo快速开机,请在目录mediatekexternalipodootlogo.cpp中的mt65xx_disp_show_boot_logo();做同样的修改

    5.此步骤在不同的SW版本上修改的文件不同。在JB上,修改mediatekcustomcommonlklogo ules.mk修改如下内容:

    #########################################################

    ifneq ($(strip $(MTK_PLATFORM)),)

    include $(CLEAR_VARS)

     

    LOCAL_MODULE :=boot_logo_qhd

    LOCAL_MODULE_TAGS :=user

    LOCAL_MODULE_CLASS := DATA

    LOCAL_MODULE_PATH := $(TARGET_OUT)/media/images

     

    LOCAL_GENERATE_CUSTOM_FOLDER := custom:lk/logo

    LOCAL_SRC_FILES := custom/$(LOCAL_MODULE)

     

    include $(BUILD_PREBUILT)

    endif

      

    #########################################################

    ifneq ($(strip $(MTK_PLATFORM)),)

    include $(CLEAR_VARS)

     

    LOCAL_MODULE :=boot_logo_hd720

    LOCAL_MODULE_TAGS :=user

    LOCAL_MODULE_CLASS := DATA

    LOCAL_MODULE_PATH := $(TARGET_OUT)/media/images

     

    LOCAL_GENERATE_CUSTOM_FOLDER := custom:lk/logo

    LOCAL_SRC_FILES := custom/$(LOCAL_MODULE)

     

    include $(BUILD_PREBUILT)

    endif

    JB2上,在文件mediatekexternaloot_logo_updaterAndroid.mk中添加上述的内容,注意不要添加语句

    LOCAL_MODULE_TAGS :=user,否则编译不通过。

    6.此步骤在不同的SW版本上修改方法不同。在JB上,uildcoreuser_tags.mkGRANDFATHERED_USER_MODULES增加boot_logo_qhd & boot_logo_hd720;在JB2上,uild argetproduct$Project.mk中PRODUCT_PACKAGES增加boot_logo_qhd & boot_logo_hd720

    7. boot_logo_updater中首先定义两种raw data的路径,再在main函数中根据LCM的分辨率读取相应的raw data文件

  • 相关阅读:
    C#基础知识整理:C#类和结构(1)
    C#窗体读取EXCEL存入SQL数据库
    C# 编码标准(一)
    C# 网络编程之webBrowser获取网页url和下载网页中图片
    【转】100个比较实用的促销方案
    Linux之JDK1.8的安装
    【转】Ubuntu做日常开发电脑的系统是一种怎样的体验
    Shell学习---Shell脚本的静态检查工具shellcheck
    【转】Nginx学习---Nginx&&Redis&&hcache三层缓存架构总结
    【转】MySQL双主一致性架构优化
  • 原文地址:https://www.cnblogs.com/liang123/p/6325344.html
Copyright © 2011-2022 走看看