




已阅读5页,还剩68页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
展讯平台MMI软件开发介绍,撰写人:日期:,Spreadtrum5/27/2020,培训目的,介绍展讯MMI平台介绍如何使用展讯MMI平台,缩略语,GUI:GraphicalUserInterfaceMMI:ManMachineInterfaceSMS:ShortMessageServiceSS:SupplementaryServicePB:PhoneBookMMS:MultimediaMessageServiceATC:ATCommandWAP:WirelessApplicationProtocolFS:FileSystemOSA:OperatingSystemAbstractlayerRTOS:Real-TimeOperatingSystemDAL:DeviceAbstractLayerHAL:HardwareAbstractLayerSTK:SIMToolKit,培训内容,平台简介ReferenceMMI介绍GUI介绍Kernel介绍资源介绍实例介绍,平台简介,Spreadtrum提供了一个完整的MMI开发平台。包括MMI开发配套工具软件包和一套参考的MMI源码。客户可以基于此方便的做二次开发。,平台结构,RTOS,Diagnostics,Drivers(HAL),MN(Call,CB,SS,SMS,GPRS),Layer3,Layer1,Layer2,CallSMSCBSSSPBGame.,ATC,MIDIMP3MPEG4H.263EnginesDigitalCamera,DAL(LCD,KPD,CHR)FS,AUDIO,VIDEO,MultimediaEngines,OSA,MMIPlatform(Kenel,GUI),Otherapplication,MessageManagement,WindowManagement,Call,SMS,Phonebook,CallRecord,Setting,STK,WAP,Camera,MMS,Menu,Listbox,Editbox,Animation,Textbox,Label,Msgbox,MMI结构,KERNEL,GUI,RefMMI,MMI平台三个重要概念,Application:应用,指MMI中的应用模块。例如:SMS,CC等。一个应用可以包含多个窗口。Window:窗口,用于显示和处理送给此窗口的各种消息。例如:按键消息、Timer消息等。一个窗口上可以有多个控件Control:控件,可以完成某种特定功能。例如:编辑功能、文本显示功能、动画功能等。,窗口、控件示例,Window,Control,应用、窗口和控件关系图,培训内容,平台简介ReferenceMMI介绍GUI介绍Kernel介绍资源介绍实例介绍,CallControl,基本通话功能(MO和MT)紧急呼叫发送DTMF通话50秒提示音来电过滤通话计时功能呼叫等待自动重拨IP一键通,SMS,收发短消息支持长短信支持群发处理小区广播短信黑名单,ReferenceMMI,AccessoryGameDigitalCameraEng(工程模式)EnvironmentSettingVideoMSD(防盗功能)MP3UDisk,RecordPhone(开关机,Pin)PhonebookSTKCallLogMMSBrowserMultimedia,大内存的分配和复用,大内存(MemoryBlock)本平台上内存的使用分为三类:MemoryPoolsize50KB,根据应用的互斥性,为特定的应用分配了大块的Memoryblock,大内存的分配和复用(续),平台中的各个模块往往会分配比较大的连续内存,而且只提供给本模块使用,通常会造成内存的浪费,为了节省Memory,因此需要对大块内存进行复用。如下图所示:,每当需要增加新的大块MemoryBlock的时候,首先是应该考虑是否可以和别的模块共用。不行再增加新的block。,培训内容,平台简介ReferenceMMI介绍GUI介绍Kernel介绍资源介绍实例介绍,GUI,GUI模块的主要功能就是给应用开发提供最基本的图形控件接口,并跟窗口系统、消息机制结合,处理基本的人机操作,GUI提供的控件,树状结构,显示多级菜单选中后自动进入下级子菜单,或者执行相应的操作菜单项文字过长滚动显示目前已实现的风格:文字菜单,旋转图,九宫格,Menu,GUI提供的控件(续),能正确编辑和录入数字号码、密码、字母及文字包括标题、软键盘,日期、时间、秒表、密码、数字号码、字母、非ASCII码文字等正文的各种特殊显示显示编辑中的光标显示编辑中的候选字自动分页支持滚动条,EditBox,GUI提供的控件(续),分为三类:单选,多选,文字支持上下滚动,连续滚动支持数据分批载入可以在标题上显示当前项和总项数(例如2/200)动态添加,删除,更改,ListBox,GUI提供的控件(续),AnimitionCalendarTextboxMsgboxPrgboxPunctuationSelectionpageLabelSoftkey,StatusbarStrokepageBlock(68ad提供半透显示)ButtonDropdownlistRichtext(68ad提供)Iconlist(68ad提供)Spellpage,请参考MMK_GUI控件软件API接口说明书.doc,控件(control),封装图形化,和用户交互可接受消息,有消息处理函数依赖于窗口存在每个具体的控件有唯一ID,控件的特征,模块化,使用控件可以使开发人员专注于应用的功能开发,而不是过多考虑界面的开发方便添加新控件更改现有控件风格,优点,控件(续),控件的风格,每一类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)将该控件加入到window中(MMK_CreateDynaCtrl)设定animation控件的参数(GUIANIMATE_SetParam)销毁控件(GUIANIMATE_Destroy),动态创建,GUI_LCD,直接在屏幕上画线,显示图片对底层LCD驱动进行封装LCD_DrawHLineLCD_DrawVLineLCD_DrawRectLCD_FillRectLCD_DisplayCompressedBmpLCD_DrawLine,GUI_Font,直接在屏幕上显示字符串获得字体的高度,宽度GUI_GetFontWidthGUI_GetFontHeightLCD_DisplayStringInRectLCD_DisplayString.,培训内容,平台简介ReferenceMMI介绍GUI介绍Kernel介绍资源介绍实例介绍,Kernel,MMIKernel主要提供完善的消息驱动流程和窗口管理机制。为各种上层应用(CC、SMS、WAP、MMS等)提供良好的支持。整个kernel可以分为5个部分:消息、键盘、触摸屏、定时器和窗口。MMI消息是MMITask用一个循环来接收和处理的。,消息,开始,初始化,内部消息队列为空,获得外部消息,Dispatch外部消息,刷屏,释放外部消息,释放内部消息,刷屏,Dispatch内部消息,是,否,在App_Task的消息循环当中总是处理完内部消息之后再处理外部消息。,消息分类,内部消息:MMItask内部发送、接收和处理的消息,MSG_TYPE_WINDOW把消息派发给指定的窗口MSG_TYPE_FOCUS把消息派发给Focus的窗口MSG_TYPE_BROADCAST派发广播消息。,派发内部消息根据内部消息的类型:,消息分类(续),外部消息:主要包括PS消息、key消息、Timer消息和一些由其它task发送过来的消息派发外部消息根据外部消息来源分为:,Keypad把消息派发给键盘部分,键盘部分验证消息的合法性,并把消息派发给窗口;Touchpanel把消息派发给触摸屏部分,触摸屏部分验证消息的合法性,并把消息派发给窗口;Timer把消息派发给定时器部分,定时器部分会根据定时器的ID将消息派发给键盘,触摸屏和窗口或者直接处理背光灯键盘灯等;其它task根据消息的ID,遍历所有的App,把消息交给注册过消息ID的App处理。,消息发送方式,MMK_SendMsg发送同步消息,消息会立即得到处理。而发送同步消息的窗口必须等到接收消息的窗口将消息处理完之后才能够返回。MMK_PostMsg发送异步消息,消息添加到内部消息队列,然后直接返回。,键盘,接收到按键消息,按键状态,验证按键合法性,验证按键合法性,记录同时按键信息,启动按键计时器,该按键无效,将对应的同时按键信息清除,是否DTMF,按键定时器启动,处理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,键盘模块长按消息处理函数,触摸屏模块长按消息处理函数,关闭键盘背光灯,关闭LCD背光灯,LCDSleep,点亮背光灯,停止Sleep定时器,窗口模块消息处理函数,停止一次性的定时器,KBD_TIMER,TP_TIMER,OTHER,KEYPAD_LIGHT_TIMER,LCD_LIGHT_TIMER,是,否,定时器信号是否在定时器数组中,返回,否,是,窗口,窗口是最终用户可以直接看到的一个个实在的屏幕,是直接和用户打交道的,专门处理用户的按键输入等操作,并且将最终用户输入后的处理结果显示在屏幕上。窗口管理主要包括应用窗口和控件之间的管理和通信、各个窗口间稳定的切换。,窗口链表,openedwin_list,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。次序是由低到高,窗口的基本操作,打开窗口,分配窗口数据空间,解析windowtable,初始化控件,创建控件并附着到窗口,窗口已打开,返回,判断窗口优先级,向focus窗口发送(send)MSG_LOSE_FOCUS,将新窗口加入到openedwinlist,设置新窗口为focus窗口,向新窗口发送(Post)MSG_OPEN_WINDOW,向新窗口发送(Post)MSG_FULL_PAINT,获得之前的virtualwinlist,向新窗口发送(Send)MSG_OPEN_WINDOW,将新窗口加入到虚拟窗口链表中,是,否,SwitchFocusWindow,OpenVirtualWindow,打开窗口(1),新窗口优先级=focus窗口优先级,openedwin_list,procmsg_win,end_openwinlist,focus_win,end_virwinlist,virtualwin_list,focus_win,end_openwinlist,打开窗口(2),新窗口优先级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_RunWinProc,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五个窗口消息之外的消息,则先交给activecontrol进行消息处理,如果是以下三种消息MSG_OPEN_WINDOW、MSG_FULL_PAINT、MSG_LOSE_FOCUS则对此进行处理1.当是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,依次调用各control的消息处理函数处理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消息;,培训内容,平台简介ReferenceMMI介绍GUI介绍Kernel介绍资源介绍实例介绍,资源介绍,资源信息包括text,image,animation,ring,font每个App都有自己单独的资源project,包含上述资源信息使用ResourceEditor可以方便的管理资源。,资源介绍(续),在ResourceEditor中添加,更改资源之后保存,会生成相应project的资源的头文件。比如mmi*_text.h等。在这些头文件中包含相应的资源ID,mmi中使用这些ID就可以得到相应的资源,培训内容,平台简介ReferenceMMI介绍GUI介绍Kernel介绍资源介绍实例介绍,实例介绍,实例介绍:app、window、control的创建(以record为例)App的添加,以模块化实现方式,window和control的创建是在Step5中实现。Step1:创建工作目录和相应的文件Step2:定义recordApplication全局变量Step3:注册系统消息Step4:模块初始化Step5:Window的实现Step6:Menu的实现Step7:NV的实现Step8:模块资源的增加以上8点不是缺一不可,要视具体应用而言,在下面的举例中,黑色表示code;红色表示注意;绿色是code注释,Step1:创建工作目录和相应的文件,MMI_AppApprecordMMI_AppApprecordcMMI_AppApprecordh,添加目录:,Step1:创建工作目录和相应的文件(续),添加文件:,Step2:定义recordApplication全局变量,/recordapplicationMMI_APPLICATION_Tg_mmirecord_app;需要在mmk_ext_app.h中声明externMMI_APPLICATION_Tg_cc_app;externMMI_APPLICATION_Tg_mmisms_app;externMMI_APPLICATION_Tg_mmipb_app;externMMI_APPLICATION_Tg_mmirecord_app;,Step3:注册系统消息,在mmk_regapp.def文件中增加此应用模块希望处理的系统消息/voicerecordREG_APP(AUDIO_RECORD_FINISH_IND,AUDIO_RECORD_WRITE_HEADER_FAILED_REP,/initthemainapplicationmain_app_init();/voicerecordMMIAPIRECORD_AppInit();,voidMMIAPIRECORD_AppInit(void)/record内部状态初始化/NV读写/系统消息处理函数g_mmirecord_app.ProcessMsg=MMIRECORD_HandlePsMsg;,Step4:模块初始化(续),需要编写消息处理函数MMIRECORD_HandlePsMsg。实现对AUDIO_RECORD_FINISH_IND等系统消息的处理。,Step5:Window的实现(1),1.创建WindowTable表/themenuwindowwhenrecordisinMMIRECORD_STATE_STARTstatusWINDOW_TABLE(MMIRECORD_OPTIONMENU_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;,使用WindowTable设计窗口,WINDOW_TABLE:用来定义Table数组,后面的参数是数组名,在应用调用MMK_CreateWin的时候需要用到。CLEAR_LCD:清除LCDBuffer。WIN_PRIO:设置窗口优先级的,参数为MMI_WIN_PRIORITY_E枚举类型。WIN_TITLE_ID:用于设置窗口的标题,后面的参数是窗口文本的ID(非必需)。WIN_FUNC:设置窗口的消息处理函数,后面的参数是该窗口的消息处理函数。WIN_ID:设置窗口ID,参数为MMI_WINDOW_ID_E枚举类型。CREATE_MENU_CTRL:用于创建一个menu控件(如果有控件,才必需)。END_WIN:WindowTable的结束标志,每一个WindowTable的最后一个成员必须是END_WIN宏。,Step5:Window的实现(2),参数说明,Step5:Window的实现(3),2.CreateWindowMMK_CreateWin(uint32*)MMIRECORD_OPTIONMENU_WIN_TAB,PNULL);在CreateWin中会使用MMK_CreateMenuCtrl,创建menu控件,3.编写窗口消息处理函数MMI_RESULT_EHandleStartStatusRecordMenuWinMsg(MMI_WIN_ID_Twin_id,MMI_MESSAGE_ID_Emsg_id,DPARAMparam)switch(msg_id)caseMSG_OPEN_WINDOW:break;caseMSG_CLOSE_WINDOW:break;default:break;,依次类似编写每个Window。,Step5:Window的实现(4),Step6:Menu的实现(1),App中有个静态的全局变量用来记录所有模块的菜单信息:/静态菜单group组指针LOCALconstGUIMENU_GROUP_T*s_gui_menu_group_ptrMMI_MAX_MODU_NUM;那么,在mmirecord_menutable.c中PUBLICvoidMMIRECORD_RegMenuGroup(void)MMI_RegMenuGroup(MMI_MODULE_RECORD,record_menu_table);就是将s_gui_menu_group_ptrMMI_MODULE_RECORD赋值为record_menu_table所记录的菜单信息。,Step6:Menu的实现(2),2.record_menu_table就是record模块中记录的菜单信息,定义如下constGUIMENU_GROUP_Trecord_menu_table=NULL,#includemmirecord_menutable.def;,3.Menuitem的定义:constGUIMENU_ITEM_Tmenu_record=ID_RECORD_STARTRECORD,TIP_NULL,STXT_OK,TXT_NULL,STXT_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.menuID和groupID/MenuIDtypedefenum/menuid的高16位是模块索引MMIRECORD_ID_MENU_START=(MMI_MODULE_RECORD16),ID_RECORD_STARTRECORD,MMIRECORD_ID_MENU_MAXMMIRECORD_ID_MENU_E;/groupidtypedefenumMMIRECORD_MENU_LABEL_START=(MMI_MODULE_RECORD16),#includemmirecord_menutable.defMMIRECORD_MENUTABLE_MAXMMIRECORD_MENU_LABEL_E;GroupID的高16位代表模块的索引,可以通过其获得相应的moduleID和offset,从而根据全局变量s_gui_menu_group_ptr得到相应的group指针,即menu的相应信息,Step6:Menu的实现(4),Step7:NV的实现(1),1.NVItem大小uint16record_nv_len=/recordvolumeandincallrecordvolume1,/MMINV_RECORD_NORMALRECORD_VOL1,/MMINV_INCALLRECORD_VOL1,/MMINV_RECORD_OTHERRECORD_VOLsizeof(FILE_DEV_E_T)/MMINV_RECORD_STORAGE;,2.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 赞美自然之美的2023高考作文试题及答案
- 精益创业中的项目管理试题及答案
- 2025年软考重要章节梳理试题及答案
- 法学概论考试内容的动态变化试题及答案
- 公司战略实施中的挑战试题及答案
- 软件设计中原型制作的重要性与技巧试题及答案
- 软件需求分析考题及答案梳理
- 2025年网络管理员考试全境试题及答案解读
- 2025年中国金线小方巾市场调查研究报告
- 2025年中国配料称重仪表市场调查研究报告
- 2025年辽宁省盘锦市中考数学二模试卷
- 贵州国企招聘2025贵州省水利投资(集团)有限责任公司招聘84人笔试参考题库附带答案详解
- 【8生 会考】2022-2024年安徽省初中(八年级)中考初二会考生物试卷(3年真题)
- 2025年网络与信息安全专业考试试卷及答案
- 《俗世奇人》阅读考级试题含答案
- 2024年河北承德辰飞供电服务有限公司招聘真题
- 小小科学家《物理》模拟试卷A(附答案)
- 体能科学训练方法智慧树知到期末考试答案2024年
- 四川民歌智慧树知到期末考试答案2024年
- 欧盟RoHS2.0指令附件III及附件IV豁免清单(45页)
- 关于民主评议市卫健委工作的评议报告
评论
0/150
提交评论