MTK小常识

常用小知识

1. 平台下给定屏幕大小的定义是通过HAIER53_09B_SLIM_GPRS.mak文件下的 MAIN_LCD_SIZE = 240X320.(可修改) 2. 每次取的新版本后需修改版本中的kal_trace.h文件下版本的路径#include "F:/6253_320_pengjin/tst/database_classb/pstrace_db/ps_trace.h"改为我们版本下的路径 3. 编译命令可对单个的模块进行编译如: 编译app模块命令: make 工程名 gprs remake mmi_app make 工程名 gprs new mmi_app make 工程名 gprs update mmi_app 重编模拟器命令: make 工程名 gprs remake modis make 工程名 gprs update modis make 工程名 gprs new modis 更新模拟器中的文件 make 工程名 gprs remake gen_modis 修改资源后可通过以下命令节省时间: make 工程名 gprs update mmiresource 或者 make 工程名 gprs resgen make 工程名 gprs remake mmiresource 4. 与feature有关的几个文件: MMI_features.h 用于feature的定义 MMI_features_switch.h feature定义的开关定义(目前起作用) MMI_features_switchPLUTO.h feature定义的开关定义 MMI_features_switchHAIER53_09B_SLIM.h feature定义的开关定义(用于海尔定制 5. Log的查看: 编译过程中出现问题可到目录/build/工程名/log中具体的文件中读取检查,其中关与大部分的feature可在MMI_features.log中查看是否定义 生成bin的过程中出错可在MT6253.log中查看。 MIK 平台下新添加一个app 本文档是基于6253 来添加的。 新程序命名为:” MyApp” MTK程序为了规范化代码,它把程序独立了出来,分为代码独立和数据独立。 代码独立:就是将程序代码放到单独的文件中 数据独立:即为资源独立。 我们新增一个app步骤如下: 第一步:添加程序文件 一般新加的mmi程序都放到plutommi/mmi下面: 先创建三个目录: /plutommi/mmi/MyApp 程序总目录 /plutommi/mmi/MyApp/MyAppInc 头文件目录 /plutommi/mmi/MyApp/MyAppSrc 源文件目录 在/plutommi/mmi/MyApp/MyAppSrc下创建以下文件: MyAppSrc.c 用于放置源代码 在在/plutommi/mmi/MyApp/MyAppInc下创建以下文件: MyAppDefs.h 用于存放本程序所需要的类型,结构,常量的定义 MyAppProt.h 用于存放本程序中的所有函数声明,但此文件只被本文件的源程序所加载 MyAppGprot.h 也是用于存放函数声明,但是此文件是用于别的程序加载,即此文件中的函数声明的都是对外的接口 MyAppResDef.h 用于存放本资源ID的定义 第二步:将文件加入项目 因为我们用的是arm编译器,想将文件加入项目,必须手动将新文件路径添加到以下几个数据表中: 修改make/plutommi/mmi_app下的三个文件: 1. mmi_app.lis 此文件用来指明mmi_app所要编译的所有源文件,在文件中添加如下一行: plutommi/mmi/MyApp/MyAppSrc/MyAppSrc.c 2. mmi_app.inc 此文件用来指明mmi_app 所有头文件所在的目录,在文件中添加如下一行: plutommi/mmi/MyApp/MyAppInc 3. mmi_app.pth 此文件用来指明mmi_app 所有源文件所在的目录,在文件中添加如下一行: plutommi/mmi/MyApp/MyAppSrc 第二步:程序开关 为了精简最终生成的烧录程序,我们一般都会给每个小程序加上自己的编译开关,并将自己程序的所有代码都包含进编译开关。 MMI编译开关一般都放在/plutommi/Customer/CustResource/ MMI_features_switchHAIER53_09B_SLIM.h里面。这里我在以下三个文件中都加有开关。MMI_features_switch.h,MMI_features_switchPLUTO.h , MMI_features_switchHAIER53_09B_SLIM.h 在mmi_features.h中的代码如下: #if defined(CFG_MMI_MYAPP) && ((CFG_MMI_MYAPP == __ON__)||(CFG_MMI_MYAPP == __AUTO__)) #ifndef _MMI_MYAPP_ #define _MMI_MYAPP_ #endif #endif 在其他三个文件中的代码如下: /**************************************************************** [Application]:MyApp ****************************************************************/ #define CFG_MMI_MYAPP (__ON__) 在程序的初始化和入口时,我们一般也会加入编译开关: #ifdef _MMI_MYAPP_ MMI_APP_INIT(mmi_myapp_init()); #endif 最后一步,就是编译的时候重新build new一次。否则不会生效。 App就这样添加成功了。 资源和菜单的添加 当然app添加成功了还有有关于新app资源的添加问题有以下要注意的问题: 1.新资源的ID一般都定义在MyAppResDef.h 文件中。如声音,图像,字符等id。 2.需要添加一个新的文件: /plutommi/Customer/CustResource/PLUTO_MMI/Res_MMI/ Res_MyApp.c 并在文件中添加一个新的函数: #include "PopulateRes.h" #include "MMI_features.h" #include "GlobalMenuItems.h" #include "MyAppDefs.h" #include "MyAppResDef.h" void PopulateMyAppRes(void) { } 可在此函数中添加对资源的ID的处理. 3.修改资源的Makefile文件 在文件/plutommi/Customer/ResGenerator/makefile中添加如下一行: -I "../../MMI/MyApp/MyAppInc" / 4.修改/plutommi/mmi/Resource/ PopulateRes.c void PopulateResData(void) { …... #if defined(__MMI_FE_VECTOR_FONT_ON_FILE_SYSTEM__) RES_PRINT_INFO("Populating Font Manager Resources/n"); PopulateFontManagerRes(); #endif #if defined (_MMI_MYAPP_) RES_PRINT_INFO("Populating MyApp Resources/n"); PopulateMyAppRes(); #endif …… } mtk_resgenerator.exe在执行时会呼叫道这里面的PopulateResData 6. 基础的ID统一定义在mmi_res_range_def.h中: RESOURCE_BASE_ENUM_BEGIN() …… /* Idle App */ RESOURCE_BASE_RANGE(APP_IDLEAPP, 750), RESOURCE_BASE_RANGE(APP_UIFRAMEWORK, 700), RESOURCE_BASE_RANGE(APP_IDLE_FANCY_HANDSET_LOCK, 50), /*My App*/ RESOURCE_BASE_RANGE(MYAPP, 100), …… RESOURCE_BASE_ENUM_END() …… /************************************************************* MyApp **************************************************************/ #define MYAPP_BASE ((U16) GET_RESOURCE_BASE(MYAPP)) #define MYAPP_BASE_MAX ((U16) GET_RESOURCE_MAX(MYAPP)) RESOURCE_BASE_TABLE_ITEM(MYAPP) …… 其中RESOURCE_BASE_RANGE(MYAPP, 100),这里的100是指我们程序的ID定义不超过100个(是任何一种类型的资源ID数量,不会超过100不是所有加起来的). 7. 程序的屏幕号定义在MyAppResDefs.h中: typedef enum { SCR_MYAPP = MYAPP_BASE + 1, SCR_MYAPP_HELLO_WORLD, SCR_MYAPP_HELLO_CHAINA, /* add new screen ID below this line */ /* add new screen ID above this line */ SCR_MYAPP_END }SCR_ID_MYAPP_ENUM; 8. 菜单资源的添加 菜单的ID放在/plutommi/mmi/inc/GlobalMenuItems.h typedef enum _GLOBALMENUITEMSID { …… MENU_ID_MYAPP, MENU_ID_MYAPP_HELLO_WORLD, MENU_ID_MYAPP_HELLO_CHINA, …… MAX_MENU_ITEMS_VALUE, MENU_ITEM_END } GLOBALMENUITEMSID; 注意一定要放在MAX_MENU_ITEMS_VALUE之前,否则会出问题。 9. 菜单的加载这里是加载到Res_MainMenu.c中加载 给oganizer菜单添加子菜单myapp: 通过宏ADD_APPLICATION_MENUITEM(),如下所示: /* oganizer */ ADD_APPLICATION_MENUITEM((MAIN_MENU_ORGANIZER_MENUID,IDLE_SCREEN_MENU_ID,ORG_ENUM_TOTAL, …… #ifdef _MMI_MYAPP_ MENU_ID_MYAPP, #endif/*_MMI_MYAPP_*/ SHOW,MOVEABLEWITHINPARENT|INSERTABLE,DISP_LIST, MAIN_MENU_ORGANIZER_TEXT,MAIN_MENU_ORGANIZER_ICON)); 10.myapp子菜单的添加在res_myapp.c中加载: 注意:一个string 对应一个菜单项。使用宏ADD_APPLICATION_MENUITEM() 该宏可以确定是否加载子菜单的功能。 MyApp中的加载如下: //给myapp菜单项添加两个子菜单,并显示相应的字符myapp菜单项的字符。 ADD_APPLICATION_MENUITEM((MENU_ID_MYAPP,MAIN_MENU_ORGANIZER_MENUID,2, MENU_ID_MYAPP_HELLO_WORLD, MENU_ID_MYAPP_HELLO_CHINA, SHOW,SHORTCUTABLE,DISP_LIST,STR_MYAPP,0)); ADD_APPLICATION_MENUITEM((MENU_ID_MYAPP_HELLO_WORLD,MENU_ID_MYAPP,0,SHOW,SHORTCUTABLE,DISP_LIST,STR_MYAPP_HELLO_WORLD,0) ); ADD_APPLICATION_MENUITEM((MENU_ID_MYAPP_HELLO_CHINA,MENU_ID_MYAPP,11, MENU_ID_MYAPP_HELLO_BEIJIN, MENU_ID_MYAPP_HELLO_CHENGDU, MENU_ID_MYAPP_HELLO_CHONGQING, MENU_ID_MYAPP_HELLO_GUANGZHOU, MENU_ID_MYAPP_HELLO_HANGZHOU, MENU_ID_MYAPP_HELLO_HK, MENU_ID_MYAPP_HELLO_SHANGHAI, MENU_ID_MYAPP_HELLO_SHENZHEN, MENU_ID_MYAPP_HELLO_TIANJIN, MENU_ID_MYAPP_HELLO_WUHAN, MENU_ID_MYAPP_HELLO_XIAN, SHOW,NONMOVEABLE,DISP_LIST,STR_MYAPP_HELLO_CHINA,0)); ADD_APPLICATION_MENUITEM((MENU_ID_MYAPP_HELLO_BEIJIN,MENU_ID_MYAPP_HELLO_CHINA,0,SHOW,SHORTCUTABLE,DISP_LIST,STR_MYAPP_HELLO_BEIJIN,0)); ADD_APPLICATION_MENUITEM((MENU_ID_MYAPP_HELLO_CHENGDU, MENU_ID_MYAPP_HELLO_CHINA,0,SHOW,SHORTCUTABLE,DISP_LIST,STR_MYAPP_HELLO_CHENGDU,0)); ADD_APPLICATION_MENUITEM((MENU_ID_MYAPP_HELLO_CHONGQING,MENU_ID_MYAPP_HELLO_CHINA,0,SHOW,SHORTCUTABLE,DISP_LIST,STR_MYAPP_HELLO_CHONGQING,0)); ADD_APPLICATION_MENUITEM((MENU_ID_MYAPP_HELLO_GUANGZHOU,MENU_ID_MYAPP_HELLO_CHINA,0,SHOW,SHORTCUTABLE,DISP_LIST,STR_MYAPP_HELLO_GUANGZHOU,0)); ADD_APPLICATION_MENUITEM((MENU_ID_MYAPP_HELLO_HANGZHOU,MENU_ID_MYAPP_HELLO_CHINA,0,SHOW,SHORTCUTABLE,DISP_LIST,STR_MYAPP_HELLO_HANGZHOU,0)); ADD_APPLICATION_MENUITEM((MENU_ID_MYAPP_HELLO_HK,MENU_ID_MYAPP_HELLO_CHINA,0,SHOW,SHORTCUTABLE,DISP_LIST,STR_MYAPP_HELLO_HK,0)); ADD_APPLICATION_MENUITEM((MENU_ID_MYAPP_HELLO_SHANGHAI, MENU_ID_MYAPP_HELLO_CHINA,0,SHOW,SHORTCUTABLE,DISP_LIST,STR_MYAPP_HELLO_SHANGHAI,0)); ADD_APPLICATION_MENUITEM((MENU_ID_MYAPP_HELLO_SHENZHEN, MENU_ID_MYAPP_HELLO_CHINA,0,SHOW,SHORTCUTABLE,DISP_LIST,STR_MYAPP_HELLO_SHENZHEN,0)); ADD_APPLICATION_MENUITEM((MENU_ID_MYAPP_HELLO_TIANJIN,MENU_ID_MYAPP_HELLO_CHINA,0,SHOW,SHORTCUTABLE,DISP_LIST,STR_MYAPP_HELLO_TIANJIN,0)); ADD_APPLICATION_MENUITEM((MENU_ID_MYAPP_HELLO_WUHAN,MENU_ID_MYAPP_HELLO_CHINA,0,SHOW,SHORTCUTABLE,DISP_LIST,STR_MYAPP_ HELLO_WUHAN,0)); ADD_APPLICATION_MENUITEM((MENU_ID_MYAPP_HELLO_XIAN,MENU_ID_MYAPP_HELLO_CHINA,0,SHOW,SHORTCUTABLE,DISP_LIST,STR_MYAPP_HELLO_XIAN,0)); //load字符串到ram中。 ADD_APPLICATION_STRING2(STR_MYAPP, "MyApp", "My App."); ADD_APPLICATION_STRING2(STR_MYAPP_HELLO_WORLD, "Hello,World", "Hello,World."); ADD_APPLICATION_STRING2(STR_MYAPP_HELLO_CHINA, "Hello,China", "China."); ADD_APPLICATION_STRING2(STR_MYAPP_HELLO_BEIJIN, "Hello,Beijin", "Beijin."); ADD_APPLICATION_STRING2(STR_MYAPP_HELLO_CHENGDU, "Hello,Chengdu", "Chengdu."); ADD_APPLICATION_STRING2(STR_MYAPP_HELLO_CHONGQING, "Hello,Chongqing", "Chongqing."); ADD_APPLICATION_STRING2(STR_MYAPP_HELLO_GUANGZHOU, "Hello,Guangzhou", "Guangzhou."); ADD_APPLICATION_STRING2(STR_MYAPP_HELLO_HANGZHOU, "Hello,Hangzhou", "Hangzhou."); ADD_APPLICATION_STRING2(STR_MYAPP_HELLO_HK, "Hello,HK", "HK."); ADD_APPLICATION_STRING2(STR_MYAPP_HELLO_SHANGHAI, "Hello,Shanghai", "Shanghai."); ADD_APPLICATION_STRING2(STR_MYAPP_HELLO_SHENZHEN, "Hello,Shenzhen", "Shenzhen."); ADD_APPLICATION_STRING2(STR_MYAPP_HELLO_TIANJIN, "Hello,Tianjin", "Tianjin."); ADD_APPLICATION_STRING2(STR_MYAPP_HELLO_WUHAN, "Hello,Wuhan", "Wuhan."); ADD_APPLICATION_STRING2(STR_MYAPP_HELLO_XIAN, "Hello,Xian", "Xian."); 11.修改Res_MyApp.c 初始化函数: void mmi_myapp_init(void) { SetHiliteHandler(MENU_ID_MYAPP, mmi_myapp_hilite); SetHiliteHandler(MENU_ID_MYAPP_HELLO_WORLD, mmi_myapp_hilite_hello_world); SetHiliteHandler(MENU_ID_MYAPP_HELLO_CHINA, mmi_myapp_hilite_hello_china); } 高亮函数的处理: void mmi_myapp_hilite(void) { SetLeftSoftkeyFunction(mmi_myapp_entry, KEY_EVENT_UP); } 12.我们通常会为每个程序(应用)建立一个初始化函数,开机只运行一次。如函数mmi_myapp_init()中所示。我们会把本程序的所有菜单项都注册一遍。 开机初始化函数在文件MMITask.c中添加 void InitAllApplications(void) { …… #ifdef _MMI_MYAPP_ MMI_APP_INIT(mmi_myapp_init()); #endif …… } 主题 主题修改主要涉及到的是模拟器和两个文件。 /plutommi/Customer/LcdResource/MainLcd240X320/touch/Themecomponents. h /plutommi/Customer/CustResource/custimgdatahw.h Themecomponents.h可通过修改文件中相应的数组来进行修改主题。 修改方法: 模拟器与资源相结合的方式: 模拟器的作用:(主要用于主题的模拟和相应参数的获取) 模拟器中的ThemeEditor中可对主题修改进行模拟。可通过该工具得到想要更改的控件。然后,通过控件的ID到Themecomponents.h中去寻找相应的ID,找到后可对其按照模拟器上的获得参数进行修改。 资源的作用:(主要用于主题中的图片处理) 资源产生的图片数组主要存放在custimgdatahw.h文件中,我们将替换的图片文件产生在custimgdatahw.h的数组拷贝到 Themecomponents.h中相应的位置替换即可。 备注:custimgdatahw.h中图片数组的名字是按照图片资源目录的名字来命名的如下所示: __align(4) const U8 __MAINLCD__SUBMENU__LISTMENUICON__L_NB1_PBM[] = { 0x34, 0x01, 0x8E, 0x00, 0x00, 0x1A, 0xA0, 0x01, 0x1A, 0xA0, 0x01, 0x02, 0x03, 0x02, 0x03, 0x11, 0x06, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xCF, 0xFD, 0x67, 0xFC, 0xC5, 0xF3, 0xC2, 0xF2, 0x22, 0x39, 0x01, 0x88, 0xC8, 0x20, 0x80, 0x44, 0x78, 0x30, 0x88, 0x21, 0x54, 0x48, 0x27, 0xD6, 0xC3, 0x0A, 0xEB, 0xC4, 0x7A, 0x58, 0x61, 0x9D, 0x58, 0x07, 0x03, 0x88, 0xC1, 0x0A, 0xEB, 0xC4, 0x32, 0x58, 0x40, 0x0C, 0x56, 0x58, 0x27, 0x56, 0xC1, 0x04, 0xB3, 0x18, 0xAC, 0xB0, 0x4E, 0xAC, 0x83, 0x01, 0xC4, 0x60, 0x85, 0x75, 0x62, 0x1D, 0x0C, 0x20, 0x06, 0x2B, 0xAC, 0x13, 0xEB, 0x60, 0x00, 0x31, 0x58, 0x61, 0x9D, 0x58, 0x07, 0x03, 0x88, 0xC1, 0x0A, 0xEB, 0xC4, 0x3A, 0x18, 0x40, 0x0C, 0x56, 0x58, 0x27, 0xD6, 0xC1, 0x00, 0x62, 0xB0, 0xC2, 0x3A, 0xB1, 0x0E, 0x06, 0x10, 0x83, 0x15, 0xD6, 0x89, 0xF5, 0xB0, 0xC2, 0x3A, 0xB1, 0x1E, 0x56, 0x58, 0x27, 0x26, 0x44, 0x07, 0x1D, 0x24, 0xC2, 0x83, 0x01, 0x10, 0x91, 0x00, 0x00, };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值