博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[MTK FP]如何通过ICON ID的value找到对应的ICON
阅读量:5252 次
发布时间:2019-06-14

本文共 3633 字,大约阅读时间需要 12 分钟。

Hardware platform: MT6250

Software platform: MTK 11B

Lcd size: 220X176

 

1.       问题描述

如上图,如果接收到MMS provision手机显示为默认图片(没有图片时显示该图片)。以此案例为例,本文介绍一种根据icon idvalue来查找该icon放置位置的方法。

2.      icon idvalue跟踪

通常的界面跟踪方法,就是打断点在函数void dm_redraw_category_screen(void)上,然后观察ShowCategoryXXXScreen()的调用细节,这里的细节如下:

         继续在下面函数打断点:

              S32 mmi_um_ui_sh_get_async_item(S32 start_index, gui_iconlist_menu_item *menu_data, S32 num_of_item)

        从该函数继续跟踪,代码堆栈如下:

        srv_um_cache_search()

        srv_um_check_msg_info_by_ref()

        mmi_um_ui_fsm_ef_srv_check_msg_info_by_ref()

        mmi_um_ui_fsm_ef_get_msg_info()

        mmi_um_ui_sh_get_async_item()

        load_chunk_asyncdynamic_item_buffer()

        gui_list_menu_locate_highlighted_item()

        gui_list_menu_goto_item()

        gui_asyncdynamic_list_menu_goto_item()

        asyncdynamic_list_goto_item_no_redraw()

        wgui_async_list_resize_multi_icontext_menu()

        ShowCategory263Screen_ext()

         观察下图,可以查看icon_idvalue0xcc6d

 

3.       根据icon idvalue来查找icon idname

Icon id的值为0xcc6d,也就是十进制的52333

任意查看一个icon id对应的十进制值,比如mmi_rp_app_unifiedmessage_def.h中:

IMG_UM_UNREAD_ICON = 51240 + 1, /* BASE_ID + 1 */

这里IMG_UM_UNREAD_ICON的值为51241,而值52333icon id应该在那个文件中呢?

 

所有定义资源id value的头文件,都在mmi_rp_all_defs.h中被include。那么我们以上面的mmi_rp_app_unifiedmessage_def.h文件为例看下他们之间的关系吧。

a.       mmi_rp_all_defs.h包含mmi_rp_app_unifiedmessage_def.h

……

#include "mmi_rp_app_unifiedmessage_def.h"

#include "mmi_rp_app_search_web_def.h"

……

b.       mmi_rp_app_unifiedmessage_def.h中定义了IMG_UM_UNREAD_ICONvalue

/******************** Image resource IDs - begin ********************/

typedef enum

{

    IMG_UM_UNREAD_ICON = 51240 + 1, /* BASE_ID + 1 */

    IMG_UM_SEND_FAILED_ICON,

    IMG_UM_MAIN_ID,

    ……

    MMI_RP_APP_UNIFIEDMESSAGE_IMG_MAX

}mmi_rp_app_unifiedmessage_img_enum;

/******************** Image resource IDs - finish ********************/

         如果我们能够把每个.h文件中定义的BASE_ID value.h文件名按顺序列出来,那我们可以根据icon id value所在的范围,找出其所在的文件,然后在文件中找到其name

 

         下面的python程序就可以按序列出每个.h文件中定义的BASE_ID value.h文件名:

 

#
 -*- coding: utf-8 -*-
#
 It is ok at python-3.3.1rc1.msi installer condition.
import os
import re
import locale
def print_base_image_id_by_filename(filename, dictonary):
    start = False
    f = open(filename, 
'
r
')
    
for tmp_line 
in f:
        
if re.match(r
'
^/[*]+ Image resource IDs - begin [*]+/$
', tmp_line):
            start = True
        
if re.match(r
'
^/[*]+ Image resource IDs - finish [*]+/$
', tmp_line):
            start = False
        
if start:
            m = re.match(r
'
^[ \t]+[\w_\d]+ = (\d+) \+ 
', tmp_line)
            
if m:
                s = locale.atoi(m.group(1)) 
                dictonary[s] = filename
    f.close()
def print_image_id(filename):
    dictonary = {}
    f = open(filename, 
'
r
')
    
for line 
in f:
        m = re.match(r
'
^#include "(.*)"$
', line)
        
if m:
            print_base_image_id_by_filename(m.group(1), dictonary)
    f_output = open(
'
aest.txt
'
'
w+
')
    
for number 
in sorted(dictonary.keys()):
        f_output.write(locale.str(number))
        f_output.write(
'
\t
')
        f_output.write(dictonary[number])
        f_output.write(
'
\n
')
    f_output.close()
    f.close()
print_image_id(r
'
mmi_rp_all_defs.h
')

 

本程序基于python-3.3.1rc1.msi安装程序运行。所有的.h文件都在如下目录,这里也把python程序放置到这个目录下:

\mtk_6250\plutommi\Customer\CustomerInc\

并运行程序,最终生成的a_output.txt内容如下:

         …….

         52230       mmi_rp_app_cca_def.h

        52331       mmi_rp_app_provbox_def.h

        52567       mmi_rp_app_nss_def.h

         …….

 

如上,52333这个值会出现在文件mmi_rp_app_provbox_def.h中,通过该文件来查看icon idname

typedef enum

{

    IMG_ID_PROVBOX_APP_ICON = 52331 + 1, /* BASE_ID + 1 */

    IMG_ID_PROVBOX_UNREAD,

    IMG_ID_PROVBOX_READ,

    MMI_RP_APP_PROVBOX_IMG_MAX

}mmi_rp_app_provbox_img_enum;

 

4.       根据icon id的名称来查找icon id的路径

ProvBox.res中可以查到IMG_ID_PROVBOX_UNREAD的路径为:

\\\\MainLCD\\\\ProvBox\\\\ProvBox_MsgUnread.pbm

PR中,在图片包中文件名称为ProvBox_MsgUnread.png,而这里索引的名称是以.pbm为后缀的,所以修改为如下即可:

\\\\MainLCD\\\\ProvBox\\\\ProvBox_MsgUnread.png

 

5.       代码修改后效果查看

 

转载于:https://www.cnblogs.com/landlitao/archive/2013/04/02/3012968.html

你可能感兴趣的文章
Js时间处理
查看>>
Java项目xml相关配置
查看>>
三维变换概述
查看>>
第三次作业
查看>>
vue route 跳转
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。...
查看>>
Linux中防火墙centos
查看>>
mysql新建用户,用户授权,删除用户,修改密码
查看>>
FancyCoverFlow
查看>>
JS博客
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
ASP.NET WebApi 基于OAuth2.0实现Token签名认证
查看>>
283. Move Zeroes把零放在最后面
查看>>
Visual Studio Code 打开.py代码报Linter pylint is not installed解决办法
查看>>
Python 数据类型
查看>>
S5PV210根文件系统的制作(一)
查看>>
centos下同时启动多个tomcat
查看>>
slab分配器
查看>>
数据清洗
查看>>