《展讯平台MMI介绍》PPT课件.ppt

上传人:牧羊曲112 文档编号:5633662 上传时间:2023-08-04 格式:PPT 页数:73 大小:1.23MB
返回 下载 相关 举报
《展讯平台MMI介绍》PPT课件.ppt_第1页
第1页 / 共73页
《展讯平台MMI介绍》PPT课件.ppt_第2页
第2页 / 共73页
《展讯平台MMI介绍》PPT课件.ppt_第3页
第3页 / 共73页
《展讯平台MMI介绍》PPT课件.ppt_第4页
第4页 / 共73页
《展讯平台MMI介绍》PPT课件.ppt_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《《展讯平台MMI介绍》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《展讯平台MMI介绍》PPT课件.ppt(73页珍藏版)》请在三一办公上搜索。

1、展讯平台MMI软件开发介绍,撰写人:日期:,Spreadtrum8/4/2023,培训目的,介绍展讯MMI平台介绍如何使用展讯MMI平台,缩略语,GUI:Graphical User InterfaceMMI:Man Machine InterfaceSMS:Short Message ServiceSS:Supplementary ServicePB:Phone BookMMS:Multimedia Message ServiceATC:AT CommandWAP:Wireless Application ProtocolFS:File SystemOSA:Operating System

2、Abstract layerRTOS:Real-Time Operating SystemDAL:Device Abstract LayerHAL:Hardware Abstract LayerSTK:SIM ToolKit,培训内容,平台简介Reference MMI介绍GUI介绍Kernel介绍资源介绍实例介绍,平台简介,Spreadtrum提供了一个完整的MMI开发平台。包括MMI开发配套工具软件包和一套参考的MMI源码。客户可以基于此方便的做二次开发。,平台结构,RTOS,Diagnostics,Drivers(HAL),MN(Call,CB,SS,SMS,GPRS),Layer 3,

3、Layer 1,Layer 2,Call SMSCBS SSPB Game.,ATC,MIDIMP3MPEG4H.263 EnginesDigital Camera,DAL(LCD,KPD,CHR)FS,AUDIO,VIDEO,Multimedia Engines,OSA,MMI Platform(Kenel,GUI),Other application,Message Management,WindowManagement,Call,SMS,Phonebook,Call Record,Setting,STK,WAP,Camera,MMS,Menu,Listbox,Editbox,Animat

4、ion,Textbox,Label,Msgbox,MMI结构,KERNEL,GUI,Ref MMI,MMI平台三个重要概念,Application:应用,指MMI中的应用模块。例如:SMS,CC等。一个应用可以包含多个窗口。Window:窗口,用于显示和处理送给此窗口的各种消息。例如:按键消息、Timer消息等。一个窗口上可以有多个控件Control:控件,可以完成某种特定功能。例如:编辑功能、文本显示功能、动画功能等。,窗口、控件示例,Window,Control,应用、窗口和控件关系图,培训内容,平台简介Reference MMI介绍GUI介绍Kernel介绍资源介绍实例介绍,Call C

5、ontrol,基本通话功能(MO和MT)紧急呼叫发送DTMF通话50秒提示音来电过滤通话计时功能呼叫等待自动重拨IP一键通,SMS,收发短消息支持长短信支持群发处理小区广播短信黑名单,Reference MMI,AccessoryGameDigital CameraEng(工程模式)Environment SettingVideoMSD(防盗功能)MP3U Disk,RecordPhone(开关机,Pin)PhonebookSTKCall LogMMSBrowserMultimedia,大内存的分配和复用,大内存(Memory Block)本平台上内存的使用分为三类:Memory Poolsi

6、ze 50KB,根据应用的互斥性,为特定的应用分配了大块的Memory block,大内存的分配和复用(续),平台中的各个模块往往会分配比较大的连续内存,而且只提供给本模块使用,通常会造成内存的浪费,为了节省Memory,因此需要对大块内存进行复用。如下图所示:,每当需要增加新的大块Memory Block的时候,首先是应该考虑是否可以和别的模块共用。不行再增加新的block。,培训内容,平台简介Reference MMI介绍GUI介绍Kernel介绍资源介绍实例介绍,GUI,GUI 模块的主要功能就是给应用开发提供最基本的图形控件接口,并跟窗口系统、消息机制结合,处理基本的人机操作,GUI提

7、供的控件,树状结构,显示多级菜单选中后自动进入下级子菜单,或者执行相应的操作菜单项文字过长滚动显示 目前已实现的风格:文字菜单,旋转图,九宫格,Menu,GUI提供的控件(续),能正确编辑和录入数字号码、密码、字母及文字包括标题、软键盘,日期、时间、秒表、密码、数字号码、字母、非ASCII码文字等正文的各种特殊显示显示编辑中的光标显示编辑中的候选字自动分页支持滚动条,EditBox,GUI提供的控件(续),分为三类:单选,多选,文字支持上下滚动,连续滚动支持数据分批载入可以在标题上显示当前项和总项数(例如 2/200)动态添加,删除,更改,ListBox,GUI提供的控件(续),Animiti

8、onCalendarTextbox MsgboxPrgboxPunctuationSelectionpageLabelSoftkey,StatusbarStrokepageBlock(68ad提供半透显示)ButtonDropdownlistRichtext(68ad提供)Iconlist(68ad提供)Spellpage,请参考MMK_GUI控件软件API接口说明书.doc,控件(control),封装图形化,和用户交互可接受消息,有消息处理函数依赖于窗口存在每个具体的控件有唯一ID,控件的特征,模块化,使用控件可以使开发人员专注于应用的功能开发,而不是过多考虑界面的开发 方便添加新控件更改

9、现有控件风格,优点,控件(续),控件的风格,每一类Control和Window的缺省显示风格定义在文件mmi_theme.c/h中用户可自定义各种不同的字体、背景色、前景色,定义在文件mmidisplay_data.c/h中和屏幕高度,宽度有关的数据定义在mmidisplay_data.c/h中,控件的创建方式,在wintable中添加:CREATE_MENU_CTRLCREATE_LISTBOX_CTRLCREATE_TEXTEDITBOX_CTRLCREATE_ANIMATION.Open窗口后调用控件的函数,静态创建,创建animation控件(GUIANIMATE_Init)将该控件加

10、入到window中(MMK_CreateDynaCtrl)设定animation控件的参数(GUIANIMATE_SetParam)销毁控件(GUIANIMATE_Destroy),动态创建,GUI_LCD,直接在屏幕上画线,显示图片对底层LCD驱动进行封装 LCD_DrawHLine LCD_DrawVLine LCD_DrawRect LCD_FillRect LCD_DisplayCompressedBmp LCD_DrawLine,GUI_Font,直接在屏幕上显示字符串获得字体的高度,宽度GUI_GetFontWidth GUI_GetFontHeight LCD_DisplaySt

11、ringInRect LCD_DisplayString.,培训内容,平台简介Reference MMI介绍GUI介绍Kernel介绍资源介绍实例介绍,Kernel,MMI Kernel主要提供完善的消息驱动流程和窗口管理机制。为各种上层应用(CC、SMS、WAP、MMS等)提供良好的支持。整个kernel可以分为5个部分:消息、键盘、触摸屏、定时器和窗口。MMI消息是MMI Task用一个循环来接收和处理的。,消息,开始,初始化,内部消息队列为空,获得外部消息,Dispatch外部消息,刷屏,释放外部消息,释放内部消息,刷屏,Dispatch内部消息,是,否,在App_Task的消息循环当中

12、总是处理完内部消息之后再处理外部消息。,消息分类,内部消息:MMI task内部发送、接收和处理的消息,MSG_TYPE_WINDOW把消息派发给指定的窗口 MSG_TYPE_FOCUS把消息派发给Focus的窗口 MSG_TYPE_BROADCAST派发广播消息。,派发内部消息根据内部消息的类型:,消息分类(续),外部消息:主要包括PS消息、key消息、Timer消息和一些由其它task发送过来的消息派发外部消息根据外部消息来源分为:,Keypad把消息派发给键盘部分,键盘部分验证消息的合法性,并把消息派发给窗口;Touchpanel把消息派发给触摸屏部分,触摸屏部分验证消息的合法性,并把消

13、息派发给窗口;Timer把消息派发给定时器部分,定时器部分会根据定时器的ID将消息派发给键盘,触摸屏和窗口或者直接处理背光灯键盘灯等;其它task根据消息的ID,遍历所有的App,把消息交给注册过消息ID的App处理。,消息发送方式,MMK_SendMsg发送同步消息,消息会立即得到处理。而发送同步消息的窗口必须等到接收消息的窗口将消息处理完之后才能够返回。MMK_PostMsg发送异步消息,消息添加到内部消息队列,然后直接返回。,键盘,接收到按键消息,按键状态,验证按键合法性,验证按键合法性,记录同时按键信息,启动按键计时器,该按键无效,将对应的同时按键信息清除,是否DTMF,按键定时器启动

14、,处理DTMF,停止按键定时器,调用Focus的窗口处理函数MMK_DispMsgToWin,UP,DOWN,是,否,是,是,否,否,是,MSG_KEYDOWN,MSG_KEYUP,MSG_KEYPRESSUP,否,触摸屏,接收到触摸屏消息,按键状态,记录键值,启动计时器,将保存的键值清空,按键定时器启动,停止按键定时器,记录当前控件并调用其处理函数,UP,DOWN,是,MSG_TP_PRESS_DOWN,MSG_TP_PRESS_UP,MOVE,在触摸点有响应消息的控件,调用DEFAULT处理函数,MSG_TP_PRESS_MOVE,否,是,定时器,派发定时器消息,定时器ID,键盘模块长按消

15、息处理函数,触摸屏模块长按消息处理函数,关闭键盘背光灯,关闭LCD背光灯,LCD Sleep,点亮背光灯,停止Sleep定时器,窗口模块消息处理函数,停止一次性的定时器,KBD_TIMER,TP_TIMER,OTHER,KEYPAD_LIGHT_TIMER,LCD_LIGHT_TIMER,是,否,定时器信号是否在定时器数组中,返回,否,是,窗口,窗口是最终用户可以直接看到的一个个实在的屏幕,是直接和用户打交道的,专门处理用户的按键输入等操作,并且将最终用户输入后的处理结果显示在屏幕上。窗口管理主要包括应用窗口和控件之间的管理和通信、各个窗口间稳定的切换。,窗口链表,openedwin_list

16、,procmsg_win,end_openwinlist,focus_win,end_virwinlist,virtualwin_list,窗口优先级,设置窗口优先级的目的是为了保护那些重要的窗口在处于Focus状态下不被打断,比如Call窗口,在Call的过程中不应该出现被SMS或者Alarm窗口打断,否则会影响Call的过程。我们在这里暂时制定了4个优先级:WIN_LOWEST_LEVEL,WIN_ONE_LEVEL,WIN_TWO_LEVEL,WIN_THREE_LEVEL。次序是由低到高,窗口的基本操作,打开窗口,分配窗口数据空间,解析window table,初始化控件,创建控件并附

17、着到窗口,窗口已打开,返回,判断窗口优先级,向focus窗口发送(send)MSG_LOSE_FOCUS,将新窗口加入到opened win list,设置新窗口为focus窗口,向新窗口发送(Post)MSG_OPEN_WINDOW,向新窗口发送(Post)MSG_FULL_PAINT,获得之前的 virtual win list,向新窗口发送(Send)MSG_OPEN_WINDOW,将新窗口加入到虚拟窗口链表中,是,否,SwitchFocusWindow,OpenVirtualWindow,打开窗口(1),新窗口优先级=focus窗口优先级,openedwin_list,procmsg_

18、win,end_openwinlist,focus_win,end_virwinlist,virtualwin_list,focus_win,end_openwinlist,打开窗口(2),新窗口优先级 focus窗口优先级,3,2,2,1,2,2,2,2,virtualwin_list,end_virwinlist,end_virwinlist,end_openwinlist,focus_win,openedwin_list,procmsg_win,关闭窗口,关闭窗口,是否focus窗口,窗口已打开,向该窗口发送(Send)MSG_CLOSE_WINDOW,删除所有属于该窗口的message

19、,删除所有属于该窗口的timer,从窗口列表中删除该窗口,释放空间,返回,向该窗口发送(Send)MSG_CLOSE_WINDOW,删除所有属于该窗口的message,删除所有属于该窗口的timer,从窗口列表中删除该窗口,释放空间,获得下一个focus窗口,向新窗口发送(Send)MSG_GET_FOCUS,向新窗口发送(Post)MSG_FULL_PAINT,是,否,否,是,关闭窗口(1),3,2,openedwin_list,procmsg_win,end_openwinlist,focus_win,end_virwinlist,virtualwin_list,3,Openwin_lis

20、t最后窗口优先级 virwin_list最后窗口优先级,end_openwinlist,focus_win,关闭窗口(2),Openwin_list最后窗口优先级=virwin_list最后窗口优先级,3,2,2,openedwin_list,procmsg_win,end_openwinlist,focus_win,end_virwinlist,virtualwin_list,end_virwinlist,2,窗口和控件之间的管理和通信,MMK_DispMsgToFocusWin,MMK_DefaultProcessWinMsg,判断返回值,MMK_ProcOpenWinMsg,MMK_Ru

21、nWinProc,MMK_ProcSpecialWinMsg,结束,MMK_RunWinProc,MMI_RESULT_TRUE,MMI_RESULT_CTLOK等控件处理,MMI_RESULT_FALSE,进行缺省的消息处理,具体为:如果是除MSG_OPEN_WINDOW、MSG_CLOSE_WINDOW、MSG_GET_FOCUS、MSG_LOSE_FOCUS、MSG_FULL_PAINT五个窗口消息之外的消息,则先交给active control进行消息处理,如果是以下三种消息MSG_OPEN_WINDOW、MSG_FULL_PAINT、MSG_LOSE_FOCUS则对此进行处理1.当是

22、OPEN_WINDOW消息时,如果是focus窗口,则给各control发送MSG_CTL_OPEN消息;给activecontrol发送MSG_CTL_GETACTIVE消息;如果不是focus,则给各control发送MSG_VIRTUAL_OPEN消息;2.当是FULL_PAINT消息时,画title,画softkey;3.当是LOSE_FOCUS消息时,从消息队列删除发给它的FULL_PAINT消息,窗口消息处理函数,特别的消息处理函数,包括以下消息:1.MSG_CLOSE_WINDOW,调用各control的Destroy函数进行销毁;2.MSG_GET_FOCUS,依次调用各con

23、trol的消息处理函数处理MSG_CTL_GET_FOCUS消息;如果有菜单并且需要滚动显示标题时创建timer;3.MSG_LOSE_FOCUS,依次调用各control的消息处理函数处理MSG_CTL_LOSE_FOCUS消息;4.MSG_FULL_PAINT,显示title和softkey;依次调用各control的消息处理函数处理MSG_CTL_PAINT消息;5.MSG_TIMER,滚动显示title或者调用各control消息处理函数处理MSG_TIMER消息;,培训内容,平台简介Reference MMI介绍GUI介绍Kernel介绍资源介绍实例介绍,资源介绍,资源信息包括tex

24、t,image,animation,ring,font每个App都有自己单独的资源project,包含上述资源信息使用ResourceEditor可以方便的管理资源。,资源介绍(续),在ResourceEditor中添加,更改资源之后保存,会生成相应project的资源的头文件。比如mmi*_text.h等。在这些头文件中包含相应的资源ID,mmi中使用这些ID就可以得到相应的资源,培训内容,平台简介Reference MMI介绍GUI介绍Kernel介绍资源介绍实例介绍,实例介绍,实例介绍:app、window、control的创建(以record为例)App的添加,以模块化实现方式,win

25、dow和control的创建是在Step5中实现。Step1:创建工作目录和相应的文件Step2:定义record Application全局变量Step3:注册系统消息Step4:模块初始化Step5:Window的实现Step6:Menu的实现Step7:NV的实现Step8:模块资源的增加以上8点不是缺一不可,要视具体应用而言,在下面的举例中,黑色表示code;红色表示注意;绿色是code注释,Step1:创建工作目录和相应的文件,MMI_AppApprecordMMI_AppApprecordcMMI_AppApprecordh,添加目录:,Step1:创建工作目录和相应的文件(续),

26、添加文件:,Step2:定义record Application全局变量,/record applicationMMI_APPLICATION_T g_mmirecord_app;需要在mmk_ext_app.h中声明 extern MMI_APPLICATION_T g_cc_app;extern MMI_APPLICATION_T g_mmisms_app;extern MMI_APPLICATION_T g_mmipb_app;extern MMI_APPLICATION_T g_mmirecord_app;,Step3:注册系统消息,在mmk_regapp.def文件中增加此应用模块希

27、望处理的系统消息/voice recordREG_APP(AUDIO_RECORD_FINISH_IND,AUDIO_RECORD_WRITE_HEADER_FAILED_REP,&g_mmirecord_app),Step4:模块初始化,在mmimain.c中void APP_Init(void)/初始化开机和IDLE界面的APPLICATION MMIPHONE_AppInit();/init the main application main_app_init();/voicerecord MMIAPIRECORD_AppInit();,void MMIAPIRECORD_AppInit

28、(void)/record 内部状态 初始化/NV读写/系统消息处理函数g_mmirecord_app.ProcessMsg=MMIRECORD_HandlePsMsg;,Step4:模块初始化(续),需要编写消息处理函数MMIRECORD_HandlePsMsg。实现对AUDIO_RECORD_FINISH_IND 等系统消息的处理。,Step5:Window的实现(1),1.创建 Window Table表/the menu window when record is in MMIRECORD_STATE_START statusWINDOW_TABLE(MMIRECORD_OPTIONM

29、ENU_WIN_TAB)=CLEAR_LCD,WIN_PRIO(WIN_ONE_LEVEL),WIN_FUNC(uint32)HandleStartStatusRecordMenuWinMsg),WIN_ID(MMIRECORD_OPTIONMENU_WIN_ID),CREATE_MENU_CTRL(0,0,240,320,_GroupId,_CtrlId),END_WIN;,使用Window Table设计窗口,WINDOW_TABLE:用来定义Table数组,后面的参数是数组名,在应用调用MMK_CreateWin的时候需要用到。CLEAR_LCD:清除LCD Buffer。WIN_PRI

30、O:设置窗口优先级的,参数为MMI_WIN_PRIORITY_E枚举类型。WIN_TITLE_ID:用于设置窗口的标题,后面的参数是窗口文本的ID(非必需)。WIN_FUNC:设置窗口的消息处理函数,后面的参数是该窗口的消息处理函数。WIN_ID:设置窗口ID,参数为MMI_WINDOW_ID_E枚举类型。CREATE_MENU_CTRL:用于创建一个menu控件(如果有控件,才必需)。END_WIN:Window Table的结束标志,每一个Window Table的最后一个成员必须是END_WIN宏。,Step5:Window的实现(2),参数说明,Step5:Window的实现(3),2

31、.Create WindowMMK_CreateWin(uint32*)MMIRECORD_OPTIONMENU_WIN_TAB,PNULL);在CreateWin中会使用MMK_CreateMenuCtrl,创建menu控件,3.编写窗口消息处理函数MMI_RESULT_E HandleStartStatusRecordMenuWinMsg(MMI_WIN_ID_T win_id,MMI_MESSAGE_ID_E msg_id,DPARAM param)switch(msg_id)case MSG_OPEN_WINDOW:break;case MSG_CLOSE_WINDOW:break;d

32、efault:break;,依次类似编写每个Window。,Step5:Window的实现(4),Step6:Menu的实现(1),App中有个静态的全局变量用来记录所有模块的菜单信息:/静态菜单group组指针LOCAL const GUIMENU_GROUP_T*s_gui_menu_group_ptrMMI_MAX_MODU_NUM;那么,在mmirecord_menutable.c中PUBLIC void MMIRECORD_RegMenuGroup(void)MMI_RegMenuGroup(MMI_MODULE_RECORD,record_menu_table);就是将s_gui_

33、menu_group_ptrMMI_MODULE_RECORD 赋值为record_menu_table所记录的菜单信息。,Step6:Menu的实现(2),2.record_menu_table就是record模块中记录的菜单信息,定义如下const GUIMENU_GROUP_T record_menu_table=NULL,#include mmirecord_menutable.def;,3.Menu item的定义:const GUIMENU_ITEM_T menu_record=ID_RECORD_STARTRECORD,TIP_NULL,STXT_OK,TXT_NULL,STXT

34、_RETURN,TXT_RECORD_START,0,0,0,MENU_NULL,ID_RECORD_LIST,TIP_NULL,STXT_OK,TXT_NULL,STXT_RETURN,TXT_RECORD_LIST,0,0,0,MENU_NULL,;,Step6:Menu的实现(3),4.menu ID和group ID/Menu IDtypedef enum/menu id的高16位是模块索引 MMIRECORD_ID_MENU_START=(MMI_MODULE_RECORD 16),ID_RECORD_STARTRECORD,MMIRECORD_ID_MENU_MAXMMIRECOR

35、D_ID_MENU_E;/group idtypedef enum MMIRECORD_MENU_LABEL_START=(MMI_MODULE_RECORD 16),#include mmirecord_menutable.def MMIRECORD_MENUTABLE_MAX MMIRECORD_MENU_LABEL_E;Group ID的高16位代表模块的索引,可以通过其获得相应的module ID和offset,从而根据全局变量s_gui_menu_group_ptr得到相应的group指针,即menu的相应信息,Step6:Menu的实现(4),Step7:NV的实现(1),1.NV

36、 Item大小uint16 record_nv_len=/record volume and incall record volume 1,/MMINV_RECORD_NORMALRECORD_VOL 1,/MMINV_INCALLRECORD_VOL 1,/MMINV_RECORD_OTHERRECORD_VOL sizeof(FILE_DEV_E_T)/MMINV_RECORD_STORAGE;,2.NV的注册PUBLIC void MMIRECORD_RegNv(void)MMI_RegModuleNv(MMI_MODULE_RECORD,record_nv_len,sizeof(rec

37、ord_nv_len)/sizeof(uint16);App中静态全局变量LOCAL const uint16*s_mmi_nv_lenMMI_MAX_MODU_NUM;用来记录所有模块的NV信息,指向对应模块NV的指针。静态全局变量LOCAL uint16 s_mmi_nv_max_itemMMI_MAX_MODU_NUM用来记录所有模块NV的最大个数。注册NV函数是分别对这两个全局变量进行赋值,方便对读写NV的操作。,Step7:NV的实现(2),3.NV Item IDtypedef enum MMINV_RECORD_NORMALRECORD_VOL=MMI_MODULE_RECORD

38、 16,MMINV_RECORD_INCALLRECORD_VOL,MMINV_RECORD_OTHERRECORD_VOL,MMINV_RECORD_STORAGE,MMIRECORD_MAX_NV_ITEM_NUMMMIRECORD_NV_ITEM_E;NV item ID的高16位代表模块的索引,可以通过其获得相应的module ID和offset,从而根据全局变量s_mmi_nv_max_item,s_mmi_nv_len计算得到nv item 对应的真正ID,及读写NV需要的参数item_idApp应用NV item的起始ID是从MN_NV_USER_BASE开始,Step7:NV的

39、实现(3),Step8:模块资源的增加,ResourceEditor 工具打开*.res 文件,然后添加相应的record.prj 文件,保存后,生成对应mmirecord_text.h,mmirecord_image.h(mmirecord_anim.h,record模块没有此文件),FileSave resource,选择正确的路径生成bin文件。,在相同的文件夹下生成mmi_module.h文件,一定要保证添加的record.prj的相对位置和mmi_module.h中MMI_MODULE_TYPE_E模块类型定义的顺序保持一致,否则会导致资源混乱。目前平台支持的模块最大个数是32个,如果需要增加或者减少,则只需要修改mmi_modu_main.c中的宏MMI_RES_MAX_RECORD_WIN_NUM即可。,Step8:模块资源的增加(续),注意:,回顾,平台简介Reference MMI介绍GUI介绍Kernel介绍资源介绍实例介绍,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号