平台mt6225_0812
在做这些之前,需要完成上一篇mtk添加项目里的内容
1,在plutommi/Customer/CustResource/PLUTO_MMI/Res_MMI文件夹下新建
Res_FirstApp.c源文件,添加内容如下:
#include "MMIDataType.h"
#include "CustomCfg.h"
#ifdef FIRST_PASS
#include "BuildCfg.h"
#endif
#include "MMI_features.h"
#include "ComposeRingToneDefs.h"
#include "FirstAppDefs.h"
#ifdef DEVELOPER_BUILD_FIRST_PASS
#include "PopulateRes.h"
void PopulateFirstAppRes(void)
{
}
#endif
2,打开文件plutommi/Customer/ResGenerator/MakeFile,在
-I "../customerinc" /下添加
-I "../../MMI/FirstApp/FirstAppInc" /
3,打开plutommi/mmi/Resource/PopulateRes.c文件
(1)找到:
#ifdef __MMI_CCA_SUPPORT__
extern void PopulateCCARes(void);
#endif
在此下面添加:
#ifdef __MMI_FIRSTAPP__
extern void PopulateFirstAppRes(void);
#endif
(2)找到:
PRINT_INFORMATION(("Populating Alarm Resources/n"));
PopulateAlarmRes();
在其下面添加
#ifdef __MMI_FIRSTAPP__
PRINT_INFORMATION(("Populating FirstApp Resource/n"));
PopulateFirstAppRes();
#endif
至此资源已添加进来了,下一步就是要添加资源的ID
4,打开文件plutommi/mmi/Inc/MMIDataType.h
(1)找到 RESOURCE_BASE_RANGE(HEALTH_BMI, 50),
在其下面添加:
#ifdef __MMI_FIRSTAPP__
RESOURCE_BASE_RANGE(FIRSTAPP, 50),
#endif
(2)找到
#define RMGR_BASE ((U16) RESOURCE_BASE_RMGR)
#define RMGR RMGR_BASE
#define RMGR_BASE_MAX ((U16)RESOURCE_BASE_RMGR_END)
RESOURCE_BASE_TABLE_ITEM(RMGR)
在其下面添加:
#ifdef __MMI_FIRSTAPP__
#define FIRSTAPP_BASE ((U16) RESOURCE_BASE_FIRSTAPP)
#define FIRSTAPP FIRSTAPP_BASE
#define FIRSTAPP_BASE_MAX ((U16) RESOURCE_BASE_FIRSTAPP_END)
RESOURCE_BASE_TABLE_ITEM(FIRSTAPP)
#endif
5,打开plutommi/Customer/CustResource/PLUTO_MMI/ref_list.txt,中间用tab键隔开
在末尾处添加
STR_ID_FIRSTAPP Undefined 30 FirstApp FirstApp 第一个程序 第一个程序
6,把FirstAppDefs.h内容修改为
#ifndef _FIRSTAPPDEFS_H
#define _FIRSTAPPDEFS_H
#include "MMI_features.h"
#include "MMIDataType.h"
#include "PixtelDataTypes.h"
typedef enum
{
SCR_FIRSTAPP_MAIN = FIRSTAPP_BASE +1
}SCREENID_LIST_FIRSTAPP;
typedef enum
{
STR_ID_FIRSTAPP = FIRSTAPP_BASE +1,
STR_FIRSTAPP_TOTAL
}STR_ID_FIRSTAPP_ENUM;
#endif
7,打开plutommi/Customer/CustResource/PLUTO_MMI/Res_MMI/Res_FirstApp.c源文件,找到void PopulateFirstAppRes(void)
在函数里添加
ADD_APPLICATION_STRING2(STR_ID_FIRSTAPP, "FirstApp", "name of FirstApp");
8,修改FirstAppSrc.c,内容变为:
#include "MMI_features.h"
#include "PixtelDataTypes.h"
#include "Unicodexdcl.h"
#include "gdi_include.h"
#include "wgui.h"
#include "gui.h"
#include "MMI_features.h"
#include "PixtelDataTypes.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 "FirstAppDefs.h"
#include "FirstAppProt.h"
#include "FirstAppTypes.h"
#include "BootUp.h"
#include "SettingProfile.h"
#include "CommonScreens.h"
void EntryFirstAppScreen(void)
{
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_ID_FIRSTAPP));
gui_BLT_double_buffer(0,0,UI_device_width-1,UI_device_height-1);
SetKeyHandler(GoBackHistory,KEY_RSK,KEY_EVENT_UP);
}
void ExitFirstAppScreen()
{
history currHistory;
currHistory.scrnID = SCR_FIRSTAPP_MAIN;
currHistory.entryFuncPtr = EntryFirstAppScreen;
GetCategoryHistory(currHistory.guiBuffer);
pfnUnicodeStrcpy((S8*)currHistory.inputBuffer,(S8*)L"");
AddHistory(currHistory);
}
9,添加菜单
整个MMI中用到的菜单ID都位于plutommi/mmi/Inc/GlobalMenuItems.h文件中。
(1)在ORGANIZER_WORLDCLOCK_MENU后面添加
#ifdef __MMI_FIRSTAPP__
ORGANIZER_FIRSTAPP_MENU,
#endif
(2)打开文件plutommi/Customer/CustResource/PLUTO_MMI/Res_MMI/Res_MainMenu.c.
找到 #ifdef __MMI_MESSAGES_CLUB__
ORG_ENUM_SERVICE,
#endif
在其后面添加
#ifdef __MMI_FIRSTAPP__
ORG_ENUM_FIRSTAPP,
#endif
找到 #if defined (__MMI_WORLD_CLOCK__)
ORGANIZER_WORLDCLOCK_MENU,
#endif
在其后面添加:
#if defined (__MMI_FIRSTAPP__)
ORGANIZER_FIRSTAPP_MENU,
#endif
10,PopulateFirstAppRes(void)函数修改为
void PopulateFirstAppRes(void)
{
ADD_APPLICATION_STRING2(STR_ID_FIRSTAPP, "FirstApp", "name of FirstApp");
ADD_APPLICATION_MENUITEM((ORGANIZER_FIRSTAPP_MENU,
MAIN_MENU_ORGANIZER_MENUID,
0,//表明没有下一级菜单
SHOW,
SHORTCUTABLE,
DISP_LIST,
STR_ID_FIRSTAPP,
0));
}
ADD_APPLICATION_MENUITEM宏的参数说明:
参数1:新加的菜单ID;
参数2,新菜单项的上一级菜单ID,即父菜单;
参数3,此菜单的下一级菜单项的个数,在上述代码示例中,用ORG_ENUM_TOTAL表示,这里假设有x个。
参数4到参数4+x-1:分别为每个子菜单的ID。
参数4+x:隐藏属性,一般设为可见,即SHOW;
参数4+x+1:表示菜单项目的转移属性,可以选择
NONMOVEABLE, MOVEABLEWTIHINPARENT, SHORTCUTABLE等
常用的NONMOVEABLE,表示关闭转移属性,目前大部分菜单用这个属性,还有SHORTCUTABLE,表示菜单项将提那家到快捷菜单列表中。
参数4+x+2:下一级菜单显示风格,有如下风格可选:
DISP_LIST:列表显示。大部分用这个风格
DISP_MATRIX:矩阵显示。如nokia主菜单的九宫格
DISP_CIRCULAR_3D:循环3D显示,不常用;
DISP_PAGE:翻页风格。每个菜单占一项;
DISP_FIXED_GRID:不常用。
参数4+x+3:此菜单项的显示字符;
最后一个参数:菜单项的小图标。
11,系统会在我们上下菜单的时候,对当前高亮项发出一个通知。这样永福就通过单击当前高亮菜单,执行其注册函数的功能,这其实隐含两件事
(1)由谁来接受高亮通知
每个菜单项都要在开机的时候告诉系统将由哪个函数来接受通知,SetHiliteHandler函数就是来实现此功能的原型为,void SetHiliteHandler(U16 itemid, FuncPtr hiliteFuncPtr).
第一个参数是菜单项的ID。
第二个参数是用来接受通知的函数指针。
(2)接受通知后的处理
在菜单想接到高亮通知后,其实只需要做一件事情,就是更改左右按键的响应函数,其中最重要的就是左软件,如前面的操作,要将菜单项:ORGANIZER_FIRSTAPP_MENU作为程序的入口菜单,那么就应该将菜单的响应函数设为EntryFirstAppScreen,并将此函数作为实参传入SetHiliteHandler函数。
完成这两步以后,新增程序就可以正确接受和处理通知了。
在FirstAppProt.h文件中增加如下代码:
extern void mmi_firstapp_hilite(void);
extern void mmi_firstapp_init(void);
在FirstAppSrc.c中增加以下函数:
void mmi_firstapp_hilite(void)
{
SetLeftSoftkeyFunction(EntryFirstAppScreen,KEY_EVENT_UP);
}
void mmi_firstapp_init(void)
{
SetHiliteHandler(ORGANIZER_FIRSTAPP_MENU, mmi_firstapp_hilite);
}
打开plutommi/mmi/Organizer/OrganizerSrc/Organizer.c
把OrgInit(void)函数改为
void OrgInit(void)
{
#if defined(__MMI_CALENDAR__)
ClndrInit();
#endif
/* to do list */
/* alarm */
AlmInit();
/* world clock */
#if defined (__MMI_WORLD_CLOCK__)
WcInit();
#endif
#if defined(__MMI_FIRSTAPP__)
mmi_firstapp_init();
#endif
}
12,添加图片,
(1),在FirstAppDefs.h添加如下代码
typedef enum
{
IMG_FIRSTAPP = FIRSTAPP_BASE + 1,
}IMAGEID_LIST_FIRSTAPP;
(2)打开plutommi/Customer/Images/PLUTO240X320/MainLCD文件夹,新建FirstApp文件夹,在此文件夹中新增一个小图片,命名为ICON.bmg,将整个MainLCD文件夹打包为image.zip
(3)打开Res_FirstApp.c在,整个内容变为:
#include "MMIDataType.h"
#include "CustomCfg.h"
#ifdef FIRST_PASS
#include "BuildCfg.h"
#endif
#include "MMI_features.h"
#include "ComposeRingToneDefs.h"
#include "FirstAppDefs.h"
#ifdef DEVELOPER_BUILD_FIRST_PASS
#include "PopulateRes.h"
void PopulateFirstAppRes(void)
{
ADD_APPLICATION_STRING2(STR_ID_FIRSTAPP, "FirstApp", "name of FirstApp");
ADD_APPLICATION_IMAGE2(IMG_FIRSTAPP,CUST_IMG_PATH"MainLCDFirstAppICON.BMP","FIRSTAPP ICON");
ADD_APPLICATION_MENUITEM((ORGANIZER_FIRSTAPP_MENU,
MAIN_MENU_ORGANIZER_MENUID,
0,
SHOW,
SHORTCUTABLE,
DISP_LIST,
STR_ID_FIRSTAPP,
IMG_FIRSTAPP));
}
#endif
13,打开organizer.c,在函数EntryOrganizer()函数下,找到
#ifdef __MMI_FIRSTAPP__
将其改为
#ifndef __MMI_FIRSTAPP__
14,整个工程new一次,然后运行模拟器,就可以看到新添加的程序的菜单入口了
15,假如idle界面显示不正确,则在模拟器上clean mmi_app,然后在build mmi_app,这样就正确了
参考资料:走出山寨mtk芯片开发指南