




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MMI软件开发平台Date:3/3/2005
Createdby:PhoebeChenFigoFengLinLin10/27/20221ProprietaryandConfidentialInformationContents平台介绍和计划安排Kenel接口GUI接口开发和调试实例10/27/20222ProprietaryandConfidentialInformation平台介绍和计划
Spreadtrum提供了一套基于类似miniwidows机制的MMI开发平台,并且提供了与网络相关部分的MMI源码。同时我们也提供了MMI开发的配套工具软件包。客户可以基于此方便的做二次开发。现已有多款手机使用此平台进行开发。10/27/20223ProprietaryandConfidentialInformation平台结构SOFTWAREAPPLICATIONPLATFORMRTOSDiagnosticsDrivers(HAL)MN(Call,CB,NV,SS,SMS,GPRS)Layer3Layer1Layer2TCP/UDPIP/PPPRTP/RTCPMultimediaApplicationsAudio/Video/TestCallSMSCBSSSPBGame….MMIWAPMMS/WEBE-MailSIPH.324/MPTTATCMIDIMP3MPEG4H.263EnginesJ2MEJavaAppDAL(LCD,KPD,CHR)AUDIO,VIDEOOSAEFSMMIPlatform10/27/20224ProprietaryandConfidentialInformation一个MMI示例10/27/20225ProprietaryandConfidentialInformation简述MMI开发平台的三个重要概念Application
:描述了MMIKernel中处理PS消息非常重要的模块,例如sms,cc…..WINDOW:窗口,用于处理focus消息(在此窗口下面才需要处理的消息)…Control:控件,也就是窗口要用到的公共的特性,比如编辑特性、Text显示特性、动画特性等等…10/27/20226ProprietaryandConfidentialInformationApplication、Window和Control的关系APPLICATIONWINDOWCONTROLCONTROLCONTROL10/27/20227ProprietaryandConfidentialInformation2.Kernel接口MMIKernel主要提供完善的消息驱动流程和窗口管理机制。为各种上层应用(CC、SMS、WAP、MMS等)提供良好的支持。10/27/20228ProprietaryandConfidentialInformationKernel提供的功能1.对消息流程进行管理外部消息主要包括PS消息、key消息、Timer消息和一些由其它模块发送过来的消息;内部消息MMI模块内部发送、接收和处理的消息,不与其它模块发生任何关系.(现在我们用到的就是focus消息,由窗口处理,这类消息使用最多最频繁)2.提供窗口管理机制 了解Kernel对窗口的管理机制:通过维护一个全局变量:是MMIKernel中一个非常核心的数据结构,它是整个窗口调度过程的核心,这个数据结构由MMIKernel维护。10/27/20229ProprietaryandConfidentialInformationApplication的概念Application:描述了MMIKernel中非常重要的应用处理模块。可以分为两类:需要注册系统消息的(SMSApplication,CallApplication,StkApplication…)不需要注册系统消息的(DC,Multimedia)10/27/202210ProprietaryandConfidentialInformation注册消息APPLICATION举例系统消息由Application处理。如果需要系统消息,Application在初始化时要注册需处理的消息。Kernel只会根据注册的Application来分发。一个PS消息可以被多个Application注册,Kernel会依次分发消息给各个Application。
我们现在需要注册消息的应用:
g_main_appg_cc_app
g_sms_app
g_mmiphone_app
g_stk_app…….静态的,全局,一般在初始化时建立。10/27/202211ProprietaryandConfidentialInformationWindow的概念Window:窗口是最终用户可以直接看到的一个个实在的屏幕,是直接和用户打交道的,专门处理用户的按键输入等操作,并且将最终用户输入后的处理结果显示在屏幕上。窗口的消息处理函数,用来处理最终用户的直接输入。窗口还要管理其所属的控件,将部分消息交给控件处理。10/27/202212ProprietaryandConfidentialInformationControl的概念Control:控件,也就是窗口要用到的公共的特性,比如编辑特性、Text显示特性、动画特性等等。使用控件可以使开发人员专注于应用的功能开发,而不是过多限制在界面的开发。10/27/202213ProprietaryandConfidentialInformationKernel中的窗口管理窗口管理是MMIKernel中非常重要的部分,直接决定了上层应用的开发。窗口管理主要包括应用窗口和控件之间的管理和通信、各个窗口间稳定的切换。应用窗口负责上层的应用和显示等。10/27/202214ProprietaryandConfidentialInformationKernel中的窗口管理,举例建立窗口的一些常量的属性:建立窗口wintab:WINDOW_TABLE(MMISMS_EDIT_WIN_TAB
)=
{ CLEAR_LCD,
//清屏
WIN_PRIO(WIN_ONE_LEVEL),
//窗口优先级
WIN_TITLE_ID(TXT_SMS_WRITE),
/固定的title
WIN_FUNC((uint32)
HandleEditWinMsg),
//窗口消息处理函数
WIN_ID(
MMISMS_EDIT_WIN_ID),
//ID
CREATE_TEXTEDITBOX_CTRL(
MMISMS_FULLSCREEN_CLIENT_LEFT, MMISMS_FULLSCREEN_CLIENT_TOP, MMISMS_FULLSCREEN_CLIENT_RIGHT, MMI_INPUT_EDITBOX_BOTTOM, MMISMS_MAX_UCS2_MESSAGE_LEN, MMISMS_MAX_MESSAGE_LEN, T9_PINYIN| T9_STROKE|T9_ENGLISH|T9_CHARACTER|T9_DIGITAL, T9_PINYIN_MODE,
MMISMS_EDITWIN_EDITCTRL_ID),//控件
END_WIN};详细的讲解请见后面应用实例10/27/202215ProprietaryandConfidentialInformation窗口Priority设置窗口优先级的目的是为了保护那些重要的窗口在处于Focus状态下不被打断,比如Call窗口,在Call的过程中不应该出现被SMS或者Alarm窗口打断,否则会影响Call的过程。我们在这里暂时制定了4个优先级:WIN_LOWEST_LEVEL,WIN_ONE_LEVEL,WIN_TWO_LEVEL,WIN_THREE_LEVEL。
我们提供了操作窗口优先级的两个函数:GetWinPriority,SetWinPriority。用户可以根据应用来调用这两个操作窗口优先级的函数。在窗口的初始化(针对静态常口)和创建(针对动态窗口)过程中,需要对窗口优先级进行设置。10/27/202216ProprietaryandConfidentialInformation窗口Priority(续)10/27/202217ProprietaryandConfidentialInformation虚拟窗口虚拟窗口主要是指那种已经打开了但是无法得到Focus的应用窗口。比如在打电话的过程中来了一条短信,因为Call的窗口的等级比较高,这个时候来短信的窗口无法得到Focus,也无法显示出来。当前应用窗口结束后,系统会优先使虚拟窗口链表中的应用窗口得到Focus。等级越高的应用窗口越先打开,当应用窗口处于同一等级时,按照先进先出方式(后打开的得到Focus)打开应用窗口。10/27/202218ProprietaryandConfidentialInformationKernel中的消息机制10/27/202219ProprietaryandConfidentialInformation消息分类从消息的接收情况,分为外部消息主要包括PS消息、key消息、Timer消息和一些由其它模块发送过来的消息;内部消息,MMI模块内部发送、接收和处理的消息,不与其它模块发生任何关系.在App_Task的消息循环当中总是处理完内部消息之后再处理外部消息。10/27/202220ProprietaryandConfidentialInformation消息分类(续)根据不同的消息发送和处理流程来划分,消息分为4个类别:第一类消息为系统消息(主要为PS消息和其它一些System消息),只有App在注册后才能够处理这条消息,对于没有注册的系统消息,将交给默认的MainApp处理。一条系统消息可以被多个App注册和处理。第二类为Focus消息,系统直接将这种类型的消息直接发送给处于Focus状态的APP,由APP对消息进行处理。第三类广播消息,将根据Application的链表,调用每一个的消息处理过程,这属于每一个App都要处理的过程,每个App只处理自己感兴趣的消息,至于App的处理方式(是交给Window处理还是App本身处理),系统没有任何限制。(这个暂时没有用过)第四类定时器消息,由于定时器使用的比较广泛,而且无法将其归为系统消息或Focus消息,为了更好的处理,将其单独的作为一类消息处理。
10/27/202221ProprietaryandConfidentialInformation外部消息处理外部消息由Application来处理;外部消息需要Application事先在mmk_regapp.def中定义应用所关心的消息;外部消息队列由嵌入式操作系统维护;10/27/202222ProprietaryandConfidentialInformation内部消息处理内部消息不需要应用模块进行注册;内部消息由Window,Control处理;内部消息队列由Kernel模块维护;内部消息定义在mmk_msg.h中;10/27/202223ProprietaryandConfidentialInformation消息处理流程MMIKERNELQueue(internal)Queue(external)ControlWINDOWAPPLICATION10/27/202224ProprietaryandConfidentialInformation窗口通信一般的窗口(包括应用窗口和控件)都需要彼此之间能够传送消息,比如应用窗口需要将消息传给控件(一个刷新的消息)或者一个控件需要另一个控件处理消息等,这些都会涉及到窗口间的通信,一般有两种通信方式:异步通信方式,用MMK_PostMsg()函数来实现。 异步通信方式主要将消息发送到内部消息队列中,即当发送消息的窗口返回后,这条消息才会被处理。因为这是一种Focus消息,所以接收的窗口必须是应用窗口,只有应用窗口才可以得到Focus。同步通信方式,用MMK_SendMsg()函数来实现。
10/27/202225ProprietaryandConfidentialInformation3GUI接口GUI模块的主要功能就是给应用开发提供最基本的图形控件接口,并跟窗口系统、消息机制结合,处理基本的人机操作。10/27/202226ProprietaryandConfidentialInformationControl的基本属性图形化,和用户交互可以Active可接受消息,有消息处理函数依赖于窗口存在每个具体的control有唯一ID10/27/202227ProprietaryandConfidentialInformation控件的使用有2种形式1.在wintable中加入一个控件2.动态创建10/27/202228ProprietaryandConfidentialInformation控件的使用--wintableCREATE_MENU_CTRLCREATE_LISTBOX_CTRLCREATE_TEXTEDITBOX_CTRLCREATE_ANIMATION……….10/27/202229ProprietaryandConfidentialInformation控件的使用—动态创建创建控件:GUIANIMATE_Init()将该控件加入到window中
MMK_CreateDynaCtrl()设定控件的参数:GUIANIMATE_SetParam10/27/202230ProprietaryandConfidentialInformationGUI提供的控件Menu控件:菜单控件EditBox控件:编辑框控件ListBox控件:列表框控件TextBox控件:文本框控件Animate控件:图形控件MessageBox控件:消息框控件ProgressBox控件:进度条控件Punctuation控件:标点符号控件SoftKey控件:软键盘控件Calendar控件:日历控件字库:字体LCD:显示屏T9:输入法10/27/202231ProprietaryandConfidentialInformationMenu控件介绍树状结构,显示多级菜单实现菜单项的设定,显示,上下左右按键选择,选中后自动进入下级子菜单,或者执行相应的操作菜单项文字过长滚动显示分为两类:静态菜单,动态菜单目前已实现的风格:文字菜单,旋转图,九宫格10/27/202232ProprietaryandConfidentialInformation添加静态菜单1.添加menuid(mmi_menutable.h)2.添加menuandmenuitem(mmi_menutable.c)3.将新增加的menu加入menutable中(mmi_menutable.def)4.为菜单项写处理函数10/27/202233ProprietaryandConfidentialInformation添加动态菜单1.调用GUIMENU_InsertNode10/27/202234ProprietaryandConfidentialInformationEditBox控件能正确编辑、录入数字号码、密码、字母及文字包括标题、软键盘;日期、时间、秒表、密码、数字号码、字母、非ascii码文字等正文的各种特殊显示显示编辑中的光标显示编辑中候选字的显示;自动分页支持滚动条支持的输入法:T910/27/202235ProprietaryandConfidentialInformationListBox控件分为三类:单选,多选,文字支持上下滚动,连续滚动支持数据分批载入在标题上显示当前项和总项数(例如2/200)动态添加,删除,更改10/27/202236ProprietaryandConfidentialInformationTextBox控件显示一段文本包括标题、软键盘;文本内容文本内容超过屏幕大小自动换行支持滚动条响应向上键向上卷动或翻页响应向下键向下卷动或翻页10/27/202237ProprietaryandConfidentialInformationAnimate控件显示图形、图象、动画。bmp,icon图像以及jpg,gif等流行的图像格式示,自定义动画以及gif等流行的动画格式的显示。10/27/202238ProprietaryandConfidentialInformationMessageBox控件显示弹出框支持图片,动画,文字,softkey,背景色的设定支持多种显示风格10/27/202239ProprietaryandConfidentialInformationPunctuation控件显示当前支持的所有标点符号和编辑框配合使用,将选中的标点符号插入到文本中10/27/202240ProprietaryandConfidentialInformationCalendar控件显示日历一页显示一个月的内容,12个月份有不同的背景图片,年月,周日~周六,日期,当前日与其他日有不一样的颜色响应上键向前移一月,响应下键向后移一月,响应左键向前移一天,响应右键向后移一天。10/27/202241ProprietaryandConfidentialInformation其他控件SoftKey控件:可设定文字,背景,iconProgressBox控件显示当前进度可设定最大值,最小值,当前值Label控件显示一行文字,过长则滚动显示可动态更改显示区域,文字10/27/202242ProprietaryandConfidentialInformationGUI_LCD直接在屏幕上画线,显示图片对底层lcd驱动进行包装LCD_DrawHLine,LCD_DrawVLine,LCD_DrawRect,LCD_FillRect,LCD_DisplayCompressedBmp,LCD_DrawLine….10/27/202243ProprietaryandConfidentialInformationGUI_Font直接在屏幕上显示字符串获得字体的高度,宽度GUI_GetFontWidth,GUI_GetFontHeight,LCD_DisplayStringInRect,LCD_DisplayString…..10/27/202244ProprietaryandConfidentialInformationControl风格每一类control和window的缺省显示风格定义在文件mmi_theme.c/h中用户可自定义各种不同的字体,背景色,前景色mmidisplay_data.c/h10/27/202245ProprietaryandConfidentialInformationGUI接口的参考详情参考GUI接口说明书及其相关头文件。10/27/202246ProprietaryandConfidentialInformation应用实例:(以SMS应用为例)开发实例一、Application的创建开发实例二、利用WindowTable设计窗口开发实例三、更改图片铃声资源10/27/202247ProprietaryandConfidentialInformation开发实例一、Application的创建Step1:创建工作目录和相应的文件。Step2:定义Application变量。Step3:在mmk_ext_app.h中增加sms全局应用变量。Step4:注册系统消息。Step5:初始化sms应用模块。Step6:编写应用消息处理函数。10/27/202248ProprietaryandConfidentialInformationStep1:创建工作目录和相应的文件。 建立以下三个目录:
..\MS_APP\BMMI\Source\App\SMS ..\MS_APP\BMMI\Source\App\SMS\c ..\MS_APP\BMMI\Source\App\SMS\h
增加以下C/H文件(根据模块需要而定)
mmismsapp_main.c
mmismsapp_order.c
mmismsapp_wintab.c
mmisms_api.h
mmisms_app.h
mmismsapp_wintab.h10/27/202249ProprietaryandConfidentialInformationStep2:定义Application变量。 在mmisms_main.c中增加变量定义:
MMI_APPLICATION_Tg_mmisms_app;//SMS的实体10/27/202250ProprietaryandConfidentialInformationStep3:在mmk_ext_app.h中增加sms
全局应用变量#ifdef__cplusplusextern"C"{#endif . . .externMMI_APPLICATION_Tg_cc_app;
externMMI_APPLICATION_Tg_mmisms_app;//SMS的实体
externMMI_APPLICATION_Tg_mmipb_app; . . .#ifdef__cplusplus}#endif10/27/202251ProprietaryandConfidentialInformationStep4:注册系统消息在mmk_regapp.def文件中增加此应用模块希望处理的系统消息。例如,SMS应用可以接收消息ID号码在APP_MN_SMS_READY_IND到APP_MN_SMSCB_REJ_IND之间的消息。则在mmk_regapp.def文件中增加:
REG_APP(APP_MN_SMS_READY_IND, APP_MN_SMSCB_REJ_IND,&g_mmisms_app) 10/27/202252ProprietaryandConfidentialInformationStep5:初始化sms应用模块。在MMIMAIN.C中增加对sms应用模块的初始化:voidAPP_Init(void){ . . .
MMIPHONE_AppInit();
MMISMS_AppInit();//sms应用模块的初始化
MMIPB_InitApp(); . . .}10/27/202253ProprietaryandConfidentialInformationStep5:初始化sms应用模块(续)在sms模块的初始化函数中指定消息处理函数和component类型voidMMISMS_AppInit(){ . . .
g_mmisms_app.ProcessMsg=HandlePsMsg;
g_mmisms_ponent_type=CT_APPLICATION; . . .}10/27/202254ProprietaryandConfidentialInformationStep6:编写应用消息处理函数LOCALMMI_RESULT_EHandlePsMsg( PWNDapp_ptr, uint16msg_id, DPARAMparam){ uint8result=MMI_RESULT_TRUE; switch(msg_id) { caseAPP_MN_SMS_READY_IND: break;
caseAPP_MN_READ_SMS_CNF: break;
10/27/202255ProprietaryandConfidentialInformationStep6:编写应用消息处理函数(续) caseAPP_MN_UPDATE_SMS_STATE_CNF: break; . . . default: result=MMI_RESULT_FALSE; break; }
return(result);}10/27/202256ProprietaryandConfidentialInformation开发实例二、利用WindowTable设计窗口请参考MMK_Window_Table开发说明书.docStep1:在win.def文件中声明窗口表。Step2:在mmk_type.h文件中声明窗口ID。Step3:在mmk_type.h文件中声明控件ID。Step4:在mmi_text.def文件中声明文本的ID。Step5:创建WindowTable表。Step6:使用WindowTable表打开窗口。Step7:实现窗口的消息处理函数。Step8:依次类似编写每个Window。10/27/202257ProprietaryandConfidentialInformationStep1:在win.def文件中声明窗口表。
. . .WIN_DEF(MMISMS_MENUWIN_TAB)WIN_DEF(MMISMS_EDIT_WIN_TAB)WIN_DEF(MMISMS_EDITOPTION_WIN_TAB) . . .10/27/202258ProprietaryandConfidentialInformationStep2:在mmk_type.h文件中声明窗口IDtypedef
enum{BEGIN_WIN_ID, . . .MMISMS_MENU_WIN_ID,
MMISMS_EDIT_WIN_ID,
MMISMS_EDITOPTION_WIN_ID, . . .}MMI_WINDOW_ID_E;10/27/202259ProprietaryandConfidentialInformationStep3:在mmk_type.h文件中声明控件IDtypedef
enum{BEGIN_CTRL_ID, . . . MMISMS_MENU_CTRL_ID,
MMISMS_EDITWIN_EDITCTRL_ID,
MMISMS_SENDNUMOPTION_LISTCTRL_ID, . . .}MMI_CONTROL_ID_E;10/27/202260ProprietaryandConfidentialInformationStep4:在mmi_text.def文件中声明文本的
ID。
. . .TEXT_DEF(TXT_SMS_WRITE,"Write", "\x06\x51\x99\x6d\x88\x60\x6f")//写消息
. . .10/27/202261ProprietaryandConfidentialInformationStep5:创建WindowTable表。WINDOW_TABLE(MMISMS_EDIT_WIN_TAB)={ CLEAR_LCD, WIN_PRIO(WIN_ONE_LEVEL), WIN_TITLE_ID(TXT_SMS_WRITE), WIN_FUNC((uint32)HandleEditWinMsg), WIN_ID(MMISMS_EDIT_WIN_ID), CREATE_TEXTEDITBOX_CTRL(0,20,127,110, MMISMS_MAX_UCS2_MESSAGE_LEN, MMISMS_MAX_MESSAGE_LEN, T9_PINYIN|T9_STROKE|T9_ENGLISH| T9_CHARACTER|T9_DIGITAL, T9_PINYIN_MODE,MMISMS_EDITWIN_E
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit 3 My School Calendar (教学设计)-2023-2024学年人教PEP版英语五年级下册
- 4试种一粒籽 第二课时 教学设计-2023-2024学年道德与法治二年级下册统编版
- 2024-2025学年高中语文 第五单元 五 恶乎往而不可教学设计2 新人教版选修《先秦诸子选读》
- 10-大家的“朋友”(教学设计)2023-2024学年统编版道德与法治三年级下册
- 2024-2025学年高中历史上学期第3周《专制主义中央集权制的确立与发展(2)》教学设计
- 2024-2025学年新教材高中生物 第三章 细胞的基本结构 第2节 细胞器之间的分工合作教学设计 新人教版必修1
- 2023-2024学年统编版语文八年级下册大单元教学备课资源(教学设计+教学设计+学习任务单)
- 2023三年级英语下册 Unit 2 I'm in Class One Grade Three Lesson 7教学设计 人教精通版(三起)
- 薪酬管理教学
- 4 安全标识(教学设计)-2023-2024学年浙美版(2012)美术四年级下册
- 2025年湖南省长沙市初中学业水平考试模拟(一)历史试题(原卷版+解析版)
- 2025年上半年绵竹市九绵产业投资限公司招聘易考易错模拟试题(共500题)试卷后附参考答案
- 幼儿园获奖公开课:小班科学活动《谁的脚印》课件
- 2025年中考道德与法治全真模拟卷1(含答案解析)
- 浙江省温州市2024年九年级学生学科素养检测中考一模数学试卷(含答案)
- 人教版新教材英语七年级下册Unit5课文原文翻译
- 湖南省2024年普通高中学业水平选择性考试物理试题含答案
- 江苏南通历年中考语文古诗欣赏试题汇编(2003-2024)
- 2025年河南省高职单招《英语》高频必练考试题库400题(含答案)
- 土方工程投标方案(技术标)
- 2025年硅湖职业技术学院高职单招职业适应性测试近5年常考版参考题库含答案解析
评论
0/150
提交评论