MTK HelloWorld显示
2010-09-01 16:02
281 查看
红色为工程文件修改添加处,注意位置
框架搭建:
新建HelloWorld文件添加Inc(.h文件夹)Src(.c文件夹)放在.. /plutommi/mmi下,
mmi应用程序都是放在该文件下
Inc:
HelloWorldResDef.h——定义资源ID定义、常量
HelloWorldType.h——定义数据类型
HelloWorldGprot.h——声明对外函数接口
HelloWorldprot.h——声明全部函数接口
Src:
HelloWorld.c——函数主程序文件
资源文件:
Res_HelloWorld.c——添加资源
资源文件放在/plutommi/Customer/CustResource/PLUTO_MMI/Res_MMI下
开关应用:
开关用来是否编译
VC设置工程——>设置——>C/C++添加预处理程序定义__MMI_HELLOWORLD_ENABLED__
,这样会使整个模拟器工程重编译
Makefile设置开关在option.mak追加 COM_DEFS += __MMI_HELLOWORLD_ENABLED__
以下程序未使用开关
ID空间:
每个小工程都有一个基础ID,统一定义在/plutommi/mmi/Inc/ MMIDataType.h文件
typedef enum
{
……
RESOURCE_BASE_RANGE(MAIN_MENU, 600),
RESOURCE_BASE_RANGE(HELLOWORLD, 100),
/* please add new resource base above devapp */
} RESOURCE_BASE_ENUM;
/*************************************************************************
* HelloWorld
**************************************************************************/
#define HELLOWORLD_BASE ((U16) RESOURCE_BASE_HELLOWORLD)
#define HELLOWORLD_BASE_MAX ((U16) RESOURCE_BASE_HELLOWORLD_END)
RESOURCE_BASE_TABLE_ITEM(HELLOWORLD)
/* please add new resource base table above this line */
定义屏幕、字符串、图片ID:
自己的HelloWorldResDef.h定义资源ID
#ifndef __HELLOWORLDRESDEF__
#define __HELLOWORLDRESDEF__
#include "MMIDataType.h"
typedef enum
{
SCR_HELLOWORLD = HELLOWORLD_BASE + 1,
}SCREENID_LIST_HELLOWORLD;//定义自己的屏幕ID资源
typedef enum
{
STR_HELLOWORLD_HELLO = HELLOWORLD_BASE + 1,
}STRINGID_LIST_HELLOWORLD;//定义字符串资源ID
typedef enum
{
IMG_HELLOWORLD = HELLOWORLD_BASE + 1,
}IMAGEID_LIST_HELLOWORLD;//图像资源ID
#endif
这些ID都是在自己的ID空间内由于种类不同都可以以HELLOWORLD_BASE
开始,就像同姓不同名不会有冲突,而菜单ID
需要全局定义,因为菜单是公用资源,用户工程的菜单ID也可是其他工程的子菜单ID
,因此菜单ID具有全局唯一性。
定义菜单ID:
打开../plutommi/mmi/Inc/ GlobalMenuItems.h,在结构体GLOBALMENUITEMSID中添加
MENU_ID_HELLOWORLD,
/*************************************************************
* Add new menuitems definitions before here
*************************************************************/
添加字符串:
将字符串添加到文件/plutommi/Customer/CustResource/PLUTO_MMI/ ref_list.txt
用于UE打开添加
STR_HELLOWORLD HELLOhello 20 helloworld helloworld 你好MTK 你好MTK
第一列:字符串资源ID,这里我们只加了一个,也就是我们上面定义的“
STR_HELLOWORLD_HELLO”;
第二列:字符串资源所属模块,这个是便于设计者辨识资源归属的,资源生成程序并没用?
剑詈煤偷鼻暗哪?楹磐阌谑侗鸷凸芾恚?
第三列:该字串的最大长度,取所有语言中文本长度最长的一个
第四列:字串描述,这一列可以随意
第五列及以后各列分别对应各个不用语言的字串
中间tab键分开
添加图片:新建一个Helloworld文件将工程图片文件放进去,将文件添加到/plutommi/
Customer/Images/PLUTO240X320/image.zip中
添加菜单:
将我们的资源菜单在作为工具资源菜单的一个子菜单,找到/plutommi/Customer/
CustResource/PLUTO_MMI/Res_MMI/Res_MainMenu.c
不建议修改枚举变量OrganizerMenu,对应PopulateMainMenuRes
函数位置插入,菜单的样式不同导致有不同的添加菜单ID
的函数,找不到自己的菜单位置都添加。
/* oganizer */
ADD_APPLICATION_MENUITEM((MAIN_MENU_ORGANIZER_MENUID,MAIN_MENU_PIM_MENU_ID,
ORG_ENUM_TOTAL+1,// 直接将菜单条数加1
........
MENU_ID_HELLOWORLD,
SHOW,MOVEABLEACROSSPARENT|INSERTABLE,DISP_LIST,
MAIN_MENU_ORGANIZER_TEXT,MAIN_MENU_ORGANIZER_ICON));
将资源ID文件添加到工程中:
打开Res_HelloWorld.c 编写如下代码
/*****************************************************************************
预编译时装载资源文件
*****************************************************************************/
#include "MMI_features.h"
#include "MMIDataType.h" /* for resource base */
#include "CustResDef.h" /* for image/audio path */
#include "CustDataProts.h" /* for resource generator API */
#include "GlobalMenuItems.h" /* for menu resource */
#include "HelloWorldResDef.h"//必须包含自己的数据类型
#include "HelloWorldResDef.h"//必须包含自己的数据类型
void PopulateHelloWorldRes(void)
{
// 这里是资源生成部分的代码,基本上都是些宏,后面讲到具体资源的时候我们再讲
ADD_APPLICATION_STRING2(STR_HELLOWORLD_HELLO, "Hello, World", "HelloWorld");
ADD_APPLICATION_IMAGE2(IMG_HELLOWORLD, CUST_IMG_PATH"////MainLCD////
HelloWorld////HelloWorld.bmp", "HelloWorld");
ADD_APPLICATION_MENUITEM(
(MENU_ID_HELLOWORLD, /* 菜单本身ID */
MAIN_MENU_ORGANIZER_MENUID, /* 父菜单ID */
0, /* 我们没有子菜单 */
SHOW, /* 是否显示 */
SHORTCUTABLE, /* 菜单属性*/
DISP_LIST,
STR_HELLOWORLD_HELLO, /* 对应字符串资源 */
IMG_HELLOWORLD)); /*对应图片资源*/
}
修改工程/plutommi/mmi/Resource/PopulateRes.c
/*********************************Helloworld**********************************/
extern void PopulateHelloWorldRes(void);
/*****************************************************************************/
在PopulateResData(void)中调用
PopulateHelloWorldRes();
设置自己的界面入口:
打开HelloWorld.c编写如下代码
/*****************************************************************************
主程序函数定义
*****************************************************************************/
#include "HistoryGprot.h"
#include "GlobalMenuItems.h"
#include "HelloWorldProt.h"
void mmi_HelloWorld_entry(void)
{
EntryNewScreen(SCR_HELLOWORLD, mmi_HelloWorld_exit, NULL, NULL);
/* 关掉屏幕顶部的状态条,我们要用整个屏幕 */
entry_full_screen();
/* 擦除当前背景 */
clear_screen();
/* 移动文本输出光标 */
gui_move_text_cursor(50, 100);
/* 设置字体颜色 */
gui_set_text_color(UI_COLOR_RED);
/* 输出文本到显示缓冲, 注意是Unicode编码 */
gui_print_text((UI_string_type)GetString(STR_HELLOWORLD_HELLO));///使用资源
/* 刷新屏幕显示,MMI用的是双缓冲绘图方式,而且需要显式刷新 */
gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);
/* 注册一个按键处理,右软键弹起时返回到之前被我们强制退出的模块 */
SetKeyHandler(GoBackHistory, KEY_RSK, KEY_EVENT_UP);
}
void mmi_HelloWorld_hilite(void)
{
SetLeftSoftkeyFunction(mmi_HelloWorld_entry, KEY_EVENT_UP);
}
void mmi_HelloWorld_init(void)
{
SetHiliteHandler(MENU_ID_HELLOWORLD, mmi_HelloWorld_hilite);
}
void mmi_HelloWorld_exit(void)
{
history currHistory;
S16 nHistory = 0;
currHistory.scrnID = SCR_HELLOWORLD;
currHistory.entryFuncPtr = mmi_HelloWorld_entry;
pfnUnicodeStrcpy( (S8*)currHistory.inputBuffer, (S8*)&nHistory);
AddHistory(currHistory);
}
这实际上要用两个函数,由这两个函数共同完成菜单点击通知的接收和转入我们模块
我们把mmi_HelloWorld_init放入到函数InitAllApplications
中调用已完成我们模块的初始化设定,修改文件“plutommi/mmi/Framework/Tasks/
TasksSrc/MMITask.c”
#include "HelloWorldGport.h"
/*****************************************************************************
* Define
*****************************************************************************/
/*****************************************************************************/
……
void InitAllApplications(void)
{
mmi_HelloWorld_init();
/*
* Note: all applications shall be initialized before shortcut
*/
}
在HelloWorldPort.h声明
#ifndef __HELLOWORLDPORT__
#define __HELLOWORLDPORT__
void mmi_HelloWorld_entry(void);
void mmi_HelloWorld_hilite(void);
void mmi_HelloWorld_init(void);
void mmi_HelloWorld_exit(void) ;
#endif
在HelloWorldGport.h声明
#ifndef __HELLOWORLDGPORT__
#define __HELLOWORLDGPORT__
extern mmi_HelloWorld_init(void);
#endif
修改Makefile文件:
用UE打开/plutommi/Customer/ResGenerator/Makefile文件,
在PLUTO_INC =这一项里面追加一行 -I "../../MMI/HelloWorld/Inc"
/注意,以便编译系统能顺利找到我们定义资源ID的头文件"HelloWorldDefs.h"
追加新行的时候别忘了在上一行尾部添上续行符号“/”,表示不换行,最后一行千万不要加
打开工程下make/plutommi/mmi_app的三个文件,分别按文件内容添加我们工程的路径
使用VC编译并测试模拟器,需将新工程的头文件添加引用了新工程的相应工程模块的ini
文件
打开工程/MoDIS/mmi_app/mmi_app.ini添加头文件路径/I "../../plutommi/mmi/
HelloWorld/Inc"
打开打开工程/MoDIS/mmi_framework/mmi_framework.ini添加头文件路径/I "../../
plutommi/mmi/HelloWorld/Inc"
修改模拟器/MoDIS/mmi_app/ mmi_app.dsp添加c文件路径
# Begin Source File
SOURCE=../../plutomm
9b0a
i/mmi/HelloWorld/Src/HelloWorld.c
# End Source File
模拟器和真机共用同一套资源,所以需要使用make命令先编辑资源make SUPERMM_GEMINI
gprs resgen
编译模拟器make SUPERMM_GEMINI gprs new
编译出错可根据build/SUPERMM_GEMINI下的log文件查看
常用的make命令
修改应用程序文件后需要make 工程 gprs/gsm update
修改资源文件后需要 make 工程 gprs/gsm resgen
中断后继续执行 make 工程 gprs/gsm r
中断后继续执行某个模块 make 工程 gprs/gsm r mmi_app(模块名)
框架搭建:
新建HelloWorld文件添加Inc(.h文件夹)Src(.c文件夹)放在.. /plutommi/mmi下,
mmi应用程序都是放在该文件下
Inc:
HelloWorldResDef.h——定义资源ID定义、常量
HelloWorldType.h——定义数据类型
HelloWorldGprot.h——声明对外函数接口
HelloWorldprot.h——声明全部函数接口
Src:
HelloWorld.c——函数主程序文件
资源文件:
Res_HelloWorld.c——添加资源
资源文件放在/plutommi/Customer/CustResource/PLUTO_MMI/Res_MMI下
开关应用:
开关用来是否编译
VC设置工程——>设置——>C/C++添加预处理程序定义__MMI_HELLOWORLD_ENABLED__
,这样会使整个模拟器工程重编译
Makefile设置开关在option.mak追加 COM_DEFS += __MMI_HELLOWORLD_ENABLED__
以下程序未使用开关
ID空间:
每个小工程都有一个基础ID,统一定义在/plutommi/mmi/Inc/ MMIDataType.h文件
typedef enum
{
……
RESOURCE_BASE_RANGE(MAIN_MENU, 600),
RESOURCE_BASE_RANGE(HELLOWORLD, 100),
/* please add new resource base above devapp */
} RESOURCE_BASE_ENUM;
/*************************************************************************
* HelloWorld
**************************************************************************/
#define HELLOWORLD_BASE ((U16) RESOURCE_BASE_HELLOWORLD)
#define HELLOWORLD_BASE_MAX ((U16) RESOURCE_BASE_HELLOWORLD_END)
RESOURCE_BASE_TABLE_ITEM(HELLOWORLD)
/* please add new resource base table above this line */
定义屏幕、字符串、图片ID:
自己的HelloWorldResDef.h定义资源ID
#ifndef __HELLOWORLDRESDEF__
#define __HELLOWORLDRESDEF__
#include "MMIDataType.h"
typedef enum
{
SCR_HELLOWORLD = HELLOWORLD_BASE + 1,
}SCREENID_LIST_HELLOWORLD;//定义自己的屏幕ID资源
typedef enum
{
STR_HELLOWORLD_HELLO = HELLOWORLD_BASE + 1,
}STRINGID_LIST_HELLOWORLD;//定义字符串资源ID
typedef enum
{
IMG_HELLOWORLD = HELLOWORLD_BASE + 1,
}IMAGEID_LIST_HELLOWORLD;//图像资源ID
#endif
这些ID都是在自己的ID空间内由于种类不同都可以以HELLOWORLD_BASE
开始,就像同姓不同名不会有冲突,而菜单ID
需要全局定义,因为菜单是公用资源,用户工程的菜单ID也可是其他工程的子菜单ID
,因此菜单ID具有全局唯一性。
定义菜单ID:
打开../plutommi/mmi/Inc/ GlobalMenuItems.h,在结构体GLOBALMENUITEMSID中添加
MENU_ID_HELLOWORLD,
/*************************************************************
* Add new menuitems definitions before here
*************************************************************/
添加字符串:
将字符串添加到文件/plutommi/Customer/CustResource/PLUTO_MMI/ ref_list.txt
用于UE打开添加
STR_HELLOWORLD HELLOhello 20 helloworld helloworld 你好MTK 你好MTK
第一列:字符串资源ID,这里我们只加了一个,也就是我们上面定义的“
STR_HELLOWORLD_HELLO”;
第二列:字符串资源所属模块,这个是便于设计者辨识资源归属的,资源生成程序并没用?
剑詈煤偷鼻暗哪?楹磐阌谑侗鸷凸芾恚?
第三列:该字串的最大长度,取所有语言中文本长度最长的一个
第四列:字串描述,这一列可以随意
第五列及以后各列分别对应各个不用语言的字串
中间tab键分开
添加图片:新建一个Helloworld文件将工程图片文件放进去,将文件添加到/plutommi/
Customer/Images/PLUTO240X320/image.zip中
添加菜单:
将我们的资源菜单在作为工具资源菜单的一个子菜单,找到/plutommi/Customer/
CustResource/PLUTO_MMI/Res_MMI/Res_MainMenu.c
不建议修改枚举变量OrganizerMenu,对应PopulateMainMenuRes
函数位置插入,菜单的样式不同导致有不同的添加菜单ID
的函数,找不到自己的菜单位置都添加。
/* oganizer */
ADD_APPLICATION_MENUITEM((MAIN_MENU_ORGANIZER_MENUID,MAIN_MENU_PIM_MENU_ID,
ORG_ENUM_TOTAL+1,// 直接将菜单条数加1
........
MENU_ID_HELLOWORLD,
SHOW,MOVEABLEACROSSPARENT|INSERTABLE,DISP_LIST,
MAIN_MENU_ORGANIZER_TEXT,MAIN_MENU_ORGANIZER_ICON));
将资源ID文件添加到工程中:
打开Res_HelloWorld.c 编写如下代码
/*****************************************************************************
预编译时装载资源文件
*****************************************************************************/
#include "MMI_features.h"
#include "MMIDataType.h" /* for resource base */
#include "CustResDef.h" /* for image/audio path */
#include "CustDataProts.h" /* for resource generator API */
#include "GlobalMenuItems.h" /* for menu resource */
#include "HelloWorldResDef.h"//必须包含自己的数据类型
#include "HelloWorldResDef.h"//必须包含自己的数据类型
void PopulateHelloWorldRes(void)
{
// 这里是资源生成部分的代码,基本上都是些宏,后面讲到具体资源的时候我们再讲
ADD_APPLICATION_STRING2(STR_HELLOWORLD_HELLO, "Hello, World", "HelloWorld");
ADD_APPLICATION_IMAGE2(IMG_HELLOWORLD, CUST_IMG_PATH"////MainLCD////
HelloWorld////HelloWorld.bmp", "HelloWorld");
ADD_APPLICATION_MENUITEM(
(MENU_ID_HELLOWORLD, /* 菜单本身ID */
MAIN_MENU_ORGANIZER_MENUID, /* 父菜单ID */
0, /* 我们没有子菜单 */
SHOW, /* 是否显示 */
SHORTCUTABLE, /* 菜单属性*/
DISP_LIST,
STR_HELLOWORLD_HELLO, /* 对应字符串资源 */
IMG_HELLOWORLD)); /*对应图片资源*/
}
修改工程/plutommi/mmi/Resource/PopulateRes.c
/*********************************Helloworld**********************************/
extern void PopulateHelloWorldRes(void);
/*****************************************************************************/
在PopulateResData(void)中调用
PopulateHelloWorldRes();
设置自己的界面入口:
打开HelloWorld.c编写如下代码
/*****************************************************************************
主程序函数定义
*****************************************************************************/
#include "HistoryGprot.h"
#include "GlobalMenuItems.h"
#include "HelloWorldProt.h"
void mmi_HelloWorld_entry(void)
{
EntryNewScreen(SCR_HELLOWORLD, mmi_HelloWorld_exit, NULL, NULL);
/* 关掉屏幕顶部的状态条,我们要用整个屏幕 */
entry_full_screen();
/* 擦除当前背景 */
clear_screen();
/* 移动文本输出光标 */
gui_move_text_cursor(50, 100);
/* 设置字体颜色 */
gui_set_text_color(UI_COLOR_RED);
/* 输出文本到显示缓冲, 注意是Unicode编码 */
gui_print_text((UI_string_type)GetString(STR_HELLOWORLD_HELLO));///使用资源
/* 刷新屏幕显示,MMI用的是双缓冲绘图方式,而且需要显式刷新 */
gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);
/* 注册一个按键处理,右软键弹起时返回到之前被我们强制退出的模块 */
SetKeyHandler(GoBackHistory, KEY_RSK, KEY_EVENT_UP);
}
void mmi_HelloWorld_hilite(void)
{
SetLeftSoftkeyFunction(mmi_HelloWorld_entry, KEY_EVENT_UP);
}
void mmi_HelloWorld_init(void)
{
SetHiliteHandler(MENU_ID_HELLOWORLD, mmi_HelloWorld_hilite);
}
void mmi_HelloWorld_exit(void)
{
history currHistory;
S16 nHistory = 0;
currHistory.scrnID = SCR_HELLOWORLD;
currHistory.entryFuncPtr = mmi_HelloWorld_entry;
pfnUnicodeStrcpy( (S8*)currHistory.inputBuffer, (S8*)&nHistory);
AddHistory(currHistory);
}
这实际上要用两个函数,由这两个函数共同完成菜单点击通知的接收和转入我们模块
我们把mmi_HelloWorld_init放入到函数InitAllApplications
中调用已完成我们模块的初始化设定,修改文件“plutommi/mmi/Framework/Tasks/
TasksSrc/MMITask.c”
#include "HelloWorldGport.h"
/*****************************************************************************
* Define
*****************************************************************************/
/*****************************************************************************/
……
void InitAllApplications(void)
{
mmi_HelloWorld_init();
/*
* Note: all applications shall be initialized before shortcut
*/
}
在HelloWorldPort.h声明
#ifndef __HELLOWORLDPORT__
#define __HELLOWORLDPORT__
void mmi_HelloWorld_entry(void);
void mmi_HelloWorld_hilite(void);
void mmi_HelloWorld_init(void);
void mmi_HelloWorld_exit(void) ;
#endif
在HelloWorldGport.h声明
#ifndef __HELLOWORLDGPORT__
#define __HELLOWORLDGPORT__
extern mmi_HelloWorld_init(void);
#endif
修改Makefile文件:
用UE打开/plutommi/Customer/ResGenerator/Makefile文件,
在PLUTO_INC =这一项里面追加一行 -I "../../MMI/HelloWorld/Inc"
/注意,以便编译系统能顺利找到我们定义资源ID的头文件"HelloWorldDefs.h"
追加新行的时候别忘了在上一行尾部添上续行符号“/”,表示不换行,最后一行千万不要加
打开工程下make/plutommi/mmi_app的三个文件,分别按文件内容添加我们工程的路径
使用VC编译并测试模拟器,需将新工程的头文件添加引用了新工程的相应工程模块的ini
文件
打开工程/MoDIS/mmi_app/mmi_app.ini添加头文件路径/I "../../plutommi/mmi/
HelloWorld/Inc"
打开打开工程/MoDIS/mmi_framework/mmi_framework.ini添加头文件路径/I "../../
plutommi/mmi/HelloWorld/Inc"
修改模拟器/MoDIS/mmi_app/ mmi_app.dsp添加c文件路径
# Begin Source File
SOURCE=../../plutomm
9b0a
i/mmi/HelloWorld/Src/HelloWorld.c
# End Source File
模拟器和真机共用同一套资源,所以需要使用make命令先编辑资源make SUPERMM_GEMINI
gprs resgen
编译模拟器make SUPERMM_GEMINI gprs new
编译出错可根据build/SUPERMM_GEMINI下的log文件查看
常用的make命令
修改应用程序文件后需要make 工程 gprs/gsm update
修改资源文件后需要 make 工程 gprs/gsm resgen
中断后继续执行 make 工程 gprs/gsm r
中断后继续执行某个模块 make 工程 gprs/gsm r mmi_app(模块名)
相关文章推荐
- MTK HelloWorld显示
- windows 程序设计自学:窗口正中显示Hello,World
- Perl学习日志(1) — Windows下怎么运行Perl程序显示输出"hello,world"语句
- windows GUI开发01 - 显示"Hello,world"
- Qt HelloWorld 用label显示
- 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”);
- cocos2d 游戏开发:Cocos2d v3 "hello world"+显示飞船
- Qt HelloWorld 使用button显示
- 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”)
- 把"Hello, World\n"转为机器码shellcode 来显示
- 用位图显示文本HelloWorldBitmap
- 【emWin】例程二:显示“hello,world”
- 从0开始,让魔兽争霸III:冰封王座编程显示hello,world
- Wayland helloworld (四)之窗口显示
- 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”)
- (1)写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”); (2)编写单元测试进行测试; (3)用ElcEmma查看代码覆盖率,要求覆盖率达到100%。
- 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”)
- 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”);
- 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”)
- cocos2d 游戏开发:Cocos2d v3 "hello world"+显示飞船