MTK 初学,建HelloWorld

下面为描述上的方便,我们将Hello World称为一个模块。首先建立新的模块目录,之后把模块相关文件都放到这个目录下统一进行管理,新的模块一般放到plutommi/MMI下面,这里我们新建一个目录“HelloWorld”,然后在模块目录“HelloWorld”下再建三个子目录:“Inc”、“Src”和“Res”,分别用来存放模块的头文件、源文件和资源文件,目录结构如下图所示:

 

接着我们在Inc下创建几个头文件:HelloWorldGprot.hHelloWorldProt.h, HelloWorldTypes.h, HelloWorldDefs.h, 再在Src下创建一个源文件:HelloWorld.c,关于文件名和函数名等的命名标准每个公司及个人各有不同,统一就好,否则在进行大的项目开发时彼此协同会遇到问题,有时候弄不好光这些问题就能折腾你半天甚至数日或数月,呵呵。

上面几个文件的作用我大致讲下:

HelloWorldGprot.h   模块对外接口,供模块外部调用的函数原型在此申明,模块内部接口就不要放这里了

HelloWorldProt.h    模块内部接口,供模块内部调用的函数原型在此申明

HelloWorldTypes.h 本模块用到的一些常量、自定义数据类型、结构的定义

HelloWorldDefs.h   本模块用到的资源ID定义

HelloWorld.c        模块功能函数的实现部分

 

头文件HelloWorldGprot.h的内容大致如下:

#ifndef    __HELLOWORLD_GPROT_H__

#define    __HELLOWORLD_GPROT_H__

 

#include "PixtelDataTypes.h"

#include "HelloWorldTypes.h"

 

extern     void mmi_HelloWorld_entry(void);

#endif     /* __HELLOWORLD_GPROT_H__ */

 

头文件HelloWorldProt.h的内容的大致如下:

#ifndef    __HELLOWORLD_PROT_H__

#define    __HELLOWORLD_PROT_H__

 

#include "HelloWorldGprot.h"

 

extern void mmi_HelloWorld_entry(void);    /* 本模块主界面入口例程 */

extern void mmi_HelloWorld_exit(void);   /* 本模块主界面退出例程 */

 

#endif     /* __HELLOWORLD_PROT_H__ */

其他几个文件的内容因模块功能而异,这里先略过,后面再讲。

紧接着,我们要修改的相关系统文件,使这个模块成为整个项目的一部分,需要修改的系统文件如下:

make/plutommi/mmi_app/mmi_app.inc   所有mmi部分的头文件所在目录的相对路径列表

make/plutommi/mmi_app/mmi_app.pth   所有mmi部分的源文件所在目录的相对路径列表

make/plutommi/mmi_app/mmi_app.lis    所有mmi部分的源文件(相对路径)列表

在上述3个文件里面分别加上我们模块的对应内容,就现在讲的HelloWorld而言,所加内容如下:

make/plutommi/mmi_app/mmi_app.inc文件追加一行“plutommi/mmi/HelloWorld/Inc

make/plutommi/mmi_app/mmi_app.pth文件追加一行“plutommi/mmi/HelloWorld/Src

make/plutommi/mmi_app/mmi_app.lis文件追加一行“plutommi/mmi/HelloWorld/Src/HelloWorld.c

再接着,我们需要增加一个开关,以决定这个模块是否成为最终发布版本的一部分,这实际上是一个编译开关,需要修改系统文件及相关的模块源文件,需要修改的系统文件包括:

plutommi/Customer/CustResource/PLUTO_MMI/MMI_featuresPLUTO.h,这里我们用       名字为“__MMI_HELLOWORLD_ENABLED__”这个开关好了,在这个文件里面追加一行:

#define    __MMI_HELLOWORLD_ENABLED__,同时在相关源文件里面用:

#ifdef      __MMI_HELLOWORLD_ENABLED__

#endif

来框住相关代码行就OK了,当不打算将这个模块发布的时候,注释掉“#define       __MMI_HELLOWORLD_ENABLED__”这一句重新make一次就好了。

下面讲具体实现的部分,为了简化描述,我们暂时先将我们的模块入口挂接到主菜单入口处(后面讲到资源的部分可将入口移到某个新建的子菜单下),修改下文件“plutommi/mmi/mainmenu/mainmenusrc/MainMenu.c”中的goto_main_menu函数,如下所示红色字体部分:

void goto_main_menu(void)

{

#ifdef      __MMI_HELLOWORLD_ENABLED__

       mmi_HelloWorld_entry();

       return;

#else

           // 此处为之前goto_main_menu的代码

#endif

}

同时我们需要在文件MainMenu.c中包含头文件HelloWorldGprot.h,所以再在这个文件的头文件包含代码块(通常是文件的顶部区域)追加这一句:#include "HelloWorldGprot.h"

 

下面是HelloWorld.c的内容:

#include "stdC.h"

#include "MMI_Features.h"  

#include "L4Dr.h"

#include "L4Dr1.h"

 

#include "AllAppGprot.h"

#include "FrameworkStruct.h"

#include "GlobalConstants.h"

#include "EventsGprot.h"

#include "mmiappfnptrs.h"

#include "HistoryGprot.h"

 

#include "HelloWorldProt.h"

#include "HelloWorldTypes.h"

#include "HelloWorldDefs.h"

 

#include "MainMenuDef.h"

 

#include "wgui_categories.h"

 

#include "Unicodexdcl.h"

 

/* 模块入口 */

void mmi_HelloWorld_entry(void)

{

#ifdef      __MMI_HELLOWORLD_ENABLED__

 

 

       EntryNewScreen(MAIN_MENU_SCREENID, mmi_HelloWorld_exit, NULL, NULL);

 

 

 

       entry_full_screen();

 

 

 

       clear_screen();

 

 

 

       gui_move_text_cursor(50, 100);

 

 

 

       gui_set_text_color(UI_COLOR_RED);

 

 

 

       gui_print_text(L"Hello, World");

 

 

 

       gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);

 

 

 

       SetKeyHandler(GoBackHistory, KEY_RSK, KEY_EVENT_UP);

 

#endif

}

 

 

void mmi_HelloWorld_exit(void)
{
              #ifdef      __MMI_HELLOWORLD_ENABLED__
              history currHistory;
              S16 nHistory = 0;

       currHistory.scrnID = MAIN_MENU_SCREENID;

       currHistory.entryFuncPtr = mmi_HelloWorld_entry;

       pfnUnicodeStrcpy( (S8*)currHistory.inputBuffer, (S8*)&nHistory);

 

       AddHistory(currHistory);

#endif

}

 

编码的部分基本上就是这些了。

 

 

修改Makefile文件:

UE打开/plutommi/Customer/ResGenerator/Makefile文件,

PLUTO_INC =这一项里面追加一行 -I "../../MMI/HelloWorld/Inc"

/注意,以便编译系统能顺利找到我们定义资源ID的头文件"HelloWorldDefs.h"

追加新行的时候别忘了在上一行尾部添上续行符号“/

”,表示不换行,最后一行千万不要加

使用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=../../plutommi/mmi/HelloWorld/Src/HelloWorld.c

# End Source File

 

make m600base_a gprs update//编译资源及代码

注:

 

模拟器和真机共用同一套资源,所以需要使用make命令先编辑资源make SUPERMM_GEMINI

gprs resgen

编译模拟器make m600base_a gprs new

编译出错可根据build/m600base_a 下的log文件查看

常用的make命令

修改应用程序文件后需要make 工程 gprs/gsm update

修改资源文件后需要 make 工程 gprs/gsm resgen

中断后继续执行 make 工程 gprs/gsm r

中断后继续执行某个模块 make 工程 gprs/gsm r mmi_app(模块名)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值