MTK芯片开发资源添加.docx
- 文档编号:24558248
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:17
- 大小:188.60KB
MTK芯片开发资源添加.docx
《MTK芯片开发资源添加.docx》由会员分享,可在线阅读,更多相关《MTK芯片开发资源添加.docx(17页珍藏版)》请在冰豆网上搜索。
MTK芯片开发资源添加
1.确定目录结构结构及模块相关文件
既然是在为MMI添砖加瓦,那么我们的程序模块也就放在/plutommi/mmi目录下,取名为FirstApp。
按照规则,我们的模块的目录结构如下:
/plutommi/mmi/FirstApp:
模块总目录;
/plutommi/mmi/FirstApp/FirstAppInc:
模块头文件目录;
/plutommi/mmi/FirstApp/FirstAppSrc:
模块源文件目录。
如图所示。
图FirstApp的目录结构
其中Inc目录下我们需要根据上述代码结构新建4个头文件,分别是FirstAppDef.h,FirstAppGprot.h,FirstAppProt.h,FirstAppTypes.h。
在FirstAppSrc目录下建立FirstApp.c文件,将来程序的实现就完全在该文件中进行描述。
2.将相关文件路径加入plutommi的编译配置文件
下面我们来关注make\plutommi\mmi_app\目录下的3个文件。
1)mmi_app.lis:
该文件用来指明MMI所要编译的具体源文件。
将我们的\plutommi\mmi\FirstApp\FirstAppSrc\FirstApp.c附加在文件末尾。
如图所示。
图mmi_app.lis文件末尾
2)mmi_app.inc:
该文件用来指明源文件所需要的头文件的目录。
将我们的\plutommi\mmi\FirstApp\FirstAppInc目录附加在文件末尾。
3)mmi_app.pth:
该文件用来指明要编译的源文件目录。
将我们的\plutommi\mmi\FirstApp\FirstAppSrc目录附加在文件末尾。
3.为新增模块增加编译开关
在这里,我们推荐开发人员为自己的模块增加一个宏开关,这样在不需要自己的模块的时候,可以关闭它,减少编译后的Bin文件大小,以节省空间。
打开文件\make\Option.mak,在末尾添加宏__MMI_FIRSTAPP__,如图所示。
COM_DEFS+=__MMI_FIRSTAPP__#addbydeveloper1
图在Option.mak文件中增加开关
接下来在FirstApp.c文件写入实现代码。
代码如下:
#include"MMI_features.h"
#include"PixtelDataTypes.h"
#include"Unicodexdcl.h"
#include"gdi_include.h"
#include"wgui.h"
#include"gui.h"
#include"Globaldefs.h"
#include"CustDataRes.h"
#include"wgui_categories.h"
#include"wgui_categories_util.h"
#include"wgui_softkeys.h"
#include"HistoryGprot.h"
#include"OrganizerDef.h"
#include"FirstAppGprot.h"
#include"FirstAppTypes.h"
#include"FirstAppDef.h"
voidExitFirstAppScreen();
voidEntryFirstAppScreen();
voidEntryFirstAppScreen()
{
//SCR_FIRSTAPP_MAIN是屏幕的ID号
EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);
entry_full_screen();//全屏幕
clear_screen();//将屏幕清成空白
gui_set_text_color(gui_color(255,0,0));//绘制文本颜色为红色
gui_move_text_cursor(100,100);//设置文本绘值的起始坐标
gui_print_text(L”HelloMTK!
”);//打印字符串
gui_BLT_double_buffer(0,0,UI_device_width-1,UI_device_height-1);//重绘屏幕
SetKeyHandler(GoBackHistory,KEY_RSK,KEY_EVENT_UP);//注册了右键(KEY_RSK)的响应函数
}
voidExitFirstAppScreen()
{
historycurrHistory;
currHistory.scrnID=SCR_FIRSTAPP_MAIN;
currHistory.entryFuncPtr=EntryFirstAppScreen;
GetCategoryHistory(currHistory.guiBuffer);
pfnUnicodeStrcpy((s8*)currHistory.inputBuffer,(s8*)L"");
AddHistory(currHistory);
}
到此为止,我们新增的程序的骨架已经搭建好。
接下来就是添加资源。
4.添加资源
第1步:
添加文件
需要为我们的模块添加一个资源文件。
目录如下图所示。
其内容将会在接下来的章节进行添加和完善。
将其命名为Res_FirstApp.c,并初步添加如下内容:
图增加资源文件
#include"MMI_features.h"
#include"CustomCfg.h"
#ifdefFIRST_PASS
#include"BuildCfg.h"
#endif
#include"ComposeRingToneDefs.h"
#include"FirstAppDef.h"
#ifdefDEVELOPER_BUILD_FIRST_PASS
#include"PopulateRes.h"
voidPopulateFirstAppRes(void)
{
}
#endif
第2步:
修改makefile文件。
该文件用于资源装载的预编译。
添加刚才我们新增的头文件目录,目录里面包括了与资源文件定义有关的FirstAppDef.h文件。
打开文件\plutommi\Customer\ResGenerator\Makefile,增加下图所示的头文件目录路径,即将刚才我们定义的FirstAppInc目录加入。
如下图所示。
-I"../../MMI/FirstApp/FirstAppInc"\
图增加FirstApp相关目录
第3步:
修改PopulateRes.c文件,打开文件PopulateRes.c,添加刚才我们定义的资源装载函数PopulateFirstAppRes,如图所示。
#ifdef__MMI_FIRSTAPP__
externvoidPopulateFirstAppRes(void);
#endif
图资源加载函数
接着在该文件内找到函数voidPopulateResData(void),添加如下代码。
如图所示。
#ifdef__MMI_FIRSTAPP__
RES_PRINT_INFO("PopulatingFirstAppResources\n");
PopulateFirstAppRes();
#endif
图调用资源加载函数
至此,我们已经为新增的程序模块做好了基本的资源框架。
在进行模块的内部资源ID定义之前,我们还要做一件重要的事情,那就是定义程序的基础ID。
在MMI软件系统中,所有程序的资源ID都是独一无二的,必须保证这些ID不能相互冲突。
因此,我们需要对ID进行一下包装。
1打开文件\plutommi\mmi\inc\MMIDataTypes.h,该文件用于基础ID的统一定义和包装。
将程序模块ID命名为FIRSTAPP,这里的“50”表示程序模块的ID定义不会超过50个,如图所示。
#ifdef__MMI_FIRSTAPP__
RESOURCE_BASE_RANGE(FIRSTAPP,50),
#endif
图定义模块ID范围
2按照源代码的格式,添加如下宏定义,如下图所示。
#ifdef__MMI_FIRSTAPP__
#defineFIRSTAPP_BASE((U16)RESOURCE_BASE_FIRSTAPP)
#defineFIRSTAPPFIRSTAPP_BASE/*bebackwardcompatible*/
#defineFIRSTAPP_BASE_MAX((U16)RESOURCE_BASE_FIRSTAPP_END)
RESOURCE_BASE_TABLE_ITEM(FIRSTAPP)
#endif
图定义相关宏
第4步:
添加新的屏幕ID
打开文件FirstAppDef.h,命名为SCR_FIRSTAPP_MAIN。
需要注意的是,该ID应该属于一个枚举。
添加完毕后文件内容如图所示。
#ifndef_FIRSTAPPDEF_H
#define_FIRSTAPPDEF_H
#include"MMI_features.h"
#include"PixtelDataTypes.h"
typedefenum
{
SCR_FIRSTAPP_MAIN=FIRSTAPP_BASE+1
}SCREENID_LIST_FIRSTAPP;
#endif
图添加新的枚举变量
这样,以后只要是程序模块新增的资源定义文件,都将在此文件中添加。
现在,我们就可以用SCR_FIRSTAPP_MAIN替换之前借用的屏幕ID,修改如下函数。
voidEntryFirstAppScreen()
{
EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);
entry_full_screen();//全屏幕
clear_screen();//将屏幕清成空白
gui_set_text_color(gui_color(255,0,0));//绘制文本颜色为红色
gui_move_text_cursor(100,100);//设置文本绘值的起始坐标
gui_print_text(L”HelloMTK!
”);//打印字符串
gui_BLT_double_buffer(0,0,UI_device_width-1,UI_device_height-1);//重绘屏幕
SetKeyHandler(GoBackHistory,KEY_RSK,KEY_EVENT_UP);//注册了右键(KEY_RSK)的响应函数
}
现在,资源添加的前提准备工作就完成了。
接下来的几个小节中,我们将详细讲解各种资源的添加和修改操作。
字符串
1进入路径:
\plutommi\Customer\CustResource\PLUTO_MMI\,打开文件ref_list.txt,按照下面格式新添两行数据。
如图所示。
图增加新的字符串ID和内容
(提示:
每一列填写完毕后,建议使用
当STR_FIRSTAPP写完后,按
)
2确定字符串ID。
在文件FirstAppDef.h中添加字符串ID,如图所示。
typedefenum
{
STR_FIRSTAPP=FIRSTAPP_BASE+1,
STR_FIRSTAPP_HELLOMTK,
STR_FIRSTAPP_TOTAL
}STR_ID_FIRSTAPP_ENUM;
图确定字符串ID
3字符串加载。
在文件Res_FirstApp.c中,找到PopulateFirstAppRes函数并添加添加如图所示代码。
ADD_APPLICATION_STRING2(STR_FIRSTAPP,"FirstApp","NameofFirstApp");
ADD_APPLICATION_STRING2(STR_FIRSTAPP_HELLOMTK,"HelloMTK","ASimpleString");
图字符串加载
(提示:
宏ADD_APPLICATION_STRING2的第1个参数为字符串ID;第2个参数为字符串默认显示的内容,如果开发人员在ref_list中没有添加正确的内容,那么程序就用默认的内容显示。
第3个参数为字符串的描述信息,可以按需填写。
)
接着修改FirstApp.c文件中的函数,现在可以使用系统提供的API读取字符串ID,如下图所示。
gui_print_text((UI_string_type)GetString(STR_FIRSTAPP_HELLOMTK));
图打印字符串
菜单
1要制作菜单,首先要确定其ID
整个MMI中用到的菜单ID都位于plutommi\mmi\inc\GlobalMenuItems.h文件中。
在枚举中添加MENU_ID_FIRSTAPP,注意该ID必须放在MAX_MENU_ITEMS_VALUE之前。
代码添加位置如下:
/*和Organizer中的ID放在一起便于归纳*/
#ifdef__MMI_FIRSTAPP__
ORGANIZER_FIRSTAPP_MENU,
#endif
图在枚举中添加MENU_ID_FIRSTAPP
2将新ID整合在Organizer的菜单ID之中
打开文件Res_MainMenu.c(\plutommi\customer\CustResource\PLUTO_MMI\RES_MMI)。
由于我们需要将ID整合在Organizer的子菜单中,所以,我们要前往Res_MainMenu.c中修改Organizer的ID。
//添加我们程序的菜单枚举值,以便让系统原来的Organizer加载我们的菜单
#ifdef__MMI_FIRSTAPP__
ORG_ENUM_FIRSTAPP,
#endif
图添加菜单枚举值
在SI工程中的左侧找到PopulateMainMenuRes()函数,将下列代码添加进去。
/*添加用户自定义的宏*/
#ifdefined(__MMI_FIRSTAPP__)
ORGANIZER_FIRSTAPP_MENU,
#endif
图添加用户自定义的宏
因为先前的操作是将新菜单加入Organizer的下属菜单,所以,现在让我们继续加载菜单本身。
打开文件Res_FirstApp.c,修改函数,如图所示。
//特别要注意该宏的内部,所有参数必须外加一个括号包裹起来,也就是双层括号;
//ADD_APPLICATION_MENUITEM((arg1,arg2,arg3))这一点很重要,否则执行update操作的时候不同通过。
ADD_APPLICATION_MENUITEM((
ORGANIZER_FIRSTAPP_MENU,//菜单ID
MAIN_MENU_ORGANIZER_MENUID,//父菜单ID,这里是ORGANIZER的菜单ID
0,//因为没有下属菜单,所以为0
SHOW,
SHORTCUTABLE,//
DISP_LIST,//列表显示
STR_FIRSTAPP,//
IMG_FIRSTAPP));//IMG_FIRSTAPP是图片的ID,以后会讲到
图菜单加载
当用户进入一个列表项上下进行选择的时候,当前只有一个菜单项会被高亮显示。
如果用户这时候按左键或者OK键,系统就会进行界面跳转,进入菜单所指向的模块。
系统将会在我们上下选择菜单的时候,对当前高亮项发一个通知。
这样,用户就通过单击当前高亮菜单,执行其注册的功能。
在菜单项接到高亮通知后,其实只需要做一件事情,就是更改左右按键的响应函数,其中最重要的就是左软键,如前面所讲,我们将要菜单项:
ORGANIZER_FIRSTAPP_MENU作为程序的入口菜单,那么就应该将做菜单的响应函数设为EntryFirstAppScreen,并将此函数作为实参传入SetHiliteHandler函数。
修改FirstAppProt.h文件,增加如下代码。
externvoidmmi_firstapp_hilite(void);
externvoidmmi_firstapp_init(void);
将前面提到的SetHiliteHandler封装到我们的初始化函数之中,修改FirstApp.c文件,增加如下代码:
voidmmi_firstapp_hilite(void)
{
//将左按键的响应函数设置为新增的入口函数EntryFirstAppScreen
SetLeftSoftkeyFunction(EntryFirstAppScreen,KEY_EVENT_UP);
}
voidmmi_firstapp_init(void)
{
//将高亮响应处理绑定给新增的菜单ID
SetHiliteHandler(ORGANIZER_FIRSTAPP_MENU,mmi_firstapp_hilite);
}
完成这两步以后,我们新增程序的菜单项就可以正确地接受和处理通知。
到目前为止,FirstApp.c文件中代码如下:
#include"MMI_features.h"
#include"PixtelDataTypes.h"
#include"Unicodexdcl.h"
#include"gdi_include.h"
#include"wgui.h"
#include"gui.h"
#include"Globaldefs.h"
#include"CustDataRes.h"
#include"wgui_categories.h"
#include"wgui_categories_util.h"
#include"wgui_softkeys.h"
#include"HistoryGprot.h"
#include"OrganizerDef.h"
#include"FirstAppGprot.h"
#include"FirstAppTypes.h"
#include"FirstAppDef.h"
voidExitFirstAppScreen();
voidEntryFirstAppScreen();
voidmmi_firstapp_hilite(void)
{
//将左按键的响应函数设置为新增的入口函数EntryFirstAppScreen
SetLeftSoftkeyFunction(EntryFirstAppScreen,KEY_EVENT_UP);
}
voidmmi_firstapp_init(void)
{
//将高亮响应处理绑定给新增的菜单ID
SetHiliteHandler(ORGANIZER_FIRSTAPP_MENU,mmi_firstapp_hilite);
}
voidEntryFirstAppScreen()
{
EntryNewScreen(SCR_FIRSTAPP_MAIN,ExitFirstAppScreen,NULL,NULL);
entry_full_screen();//全屏幕
clear_screen();//将屏幕清成空白
gui_set_text_color(gui_color(255,0,0));//绘制文本颜色为红色
gui_move_text_cursor(100,100);//设置文本绘值的起始坐标
//输出从资源载入的字符串
gui_print_text((UI_string_type)GetString(STR_FIRSTAPP_HELLOMTK));//打印字符串
gui_BLT_double_buffer(0,0,UI_device_width-1,UI_device_height-1);//重绘屏幕
SetKeyHandler(GoBackHistory,KEY_RSK,KEY_EVENT_UP);//注册了右键(KEY_RSK)的响应函数
}
voidExitFirstAppScreen()
{
historycurrHistory;
currHistory.scrnID=SCR_FIRSTAPP_MAIN;
currHistory.entryFuncPtr=EntryFirstAppScreen;
GetCategoryHistory(currHistory.guiBuffer);
pfnUnicodeStrcpy((s8*)currHistory.inputBuffer,(s8*)L"");
AddHistory(currHistory);
}
因为我们增加的菜单位于Organizer之中,所以,将初始化函数放在Organizer的初始化函数中进行初始化调用。
#ifdef__MMI_FIRSTAPP__
mmi_firstapp_init();
#endif
图新添加的初始化函数
在EntryOrganizer(void)函数中,添加如下代码,启动新添加的菜单项。
#ifdef__MMI_FIRSTAPP__
//EntryFirstAppScreen();
#endif
图调用启动菜单项
图片
1定义图片的ID
打开头文件FirstAppDef.h,添加如下代码:
typedefenum
{
IMG_FIRSTAPP=FIRSTAPP_BASE+1
}IMAGEID_LIST_FIRSTAPP;
图添加图片ID
2打开下图所示目录,并在MainLCD目录下新建文件夹FirstApp
图MainLCD
3在FirstApp文件夹中新加一幅图片ICON.BMP。
图片添加完毕之后,将整个MainLCD文件夹打包为image.zip。
(提示:
每次添加了新的图片之后,必须将MainLCD文件夹打包为ZIP压缩包。
否则,在make操作的时候,文件夹内的文件将会被上次的压缩包文件替换。
)
4打开文件Res_FirstApp.c,函数PopulateFirstAppRes中添加图片加载代码。
ADD_APPLICATION_IMAGE2(IMG_FIRSTAPP,CUST_IMG_PATH"\\\\MainLCD\\\\FirstApp\\\\ICON.BMP","FirstAPPICON");
5为菜单添加图标
继续修改PopulateFirstAppRes函数,由于前面步骤已经将图片资源载入,所以我们可以使用图片来作为菜单的图标。
现在,在命令行new操作,再重新built一次VC工程。
参考资料:
走出山寨MTK芯片开发指南陈智鹏著
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MTK 芯片 开发 资源 添加