MSTAR平台开发入手简中版_第1页
MSTAR平台开发入手简中版_第2页
MSTAR平台开发入手简中版_第3页
MSTAR平台开发入手简中版_第4页
MSTAR平台开发入手简中版_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DemoApp

快速指导

SunnyWang(王乔)2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.2内容MAE平台简介Statemachine〔状态机〕Widget/Container/Model(控件/容器/数据容器)View〔视图〕APManager〔应用程序管理者〕基于MAE平台设计第一个应用程序设计状态机用XFSM实现状态机用XRG装载资源编写代码在模拟器上运行1MAE平台简介2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.41.1

MAE平台架构1.2AP的组成2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.51.3状态机〔Statemachine〕状态〔Mode〕状态跳转〔Transition〕执行顺序〔Sequence〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.61.3.1状态和活动ModeandActivities一个状态包含状态名〔Modename〕进入活动〔Entryactivity〕退出活动〔Exitactivity〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.71.3.2状态跳转〔Transition〕状态跳转包含:源状态〔SourceMode〕目标状态〔DestinationMode〕跳转类型〔TransitionType〕事件/条件〔Event/Condition〕:Internal,External行为〔Action〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.8SourceModeTargetModeEvent&Condition(optional)RunAction(optional)ExitActivitiesEntry

Activities1.3.3执行顺序〔Executesequence〕进入退出函数和action的执行顺序执行Condition函数:returnTRUE退出源状态〔Exist函数〕执行Action函数进入目的状态〔Entry函数〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.91.4XMMIUIlayoutXMMI给AP提供了containers和widgets来设计UIlayoutWidget是根本的UI单位,例如Imagewidget和Textwidget等Container用来把多个widget(和container)放在一起组成一个显示单元UIflow是由Viewmanager控制的多个View组成的Model是数据的容器,通常和Widget搭配使用。2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.101.5Widget显示数据处理事件只知道自己的大小而不知道自己的位置必须放在一个Container里面通常情况下只能搭配一种Model需要监听数据的改变有一些共同和特殊的属性〔properties〕Color,padding,widget-specificflags2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.11Container(parent)Widget(child)1.6Container有一个

(widget)stack来存放其子widget对widget的Layout进行管理处理Widget绘制的请求自下而上的绘制其子widget2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.121.7Model一个数据容器只用来存放数据而不去管数据如何呈现可以对其存放的数据进行操作有一个通知机制〔IModel〕添加listener(注册一个callback函数)通知取消(Cancel)listener2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.132023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.141.8Container,Widget

和Model之间的通知机制WidgetContainerModelAddListenerNotifyEventsICONTAINER_Invalidate()IWIDGET_Draw()1.9VDF(ViewDescriptionFile)〔一〕什么是VDF? VDF即ViewDescriptionFile,是一种XML格式的编程语言,我们可以用VDF来描述画面。如widget和container的大小、位置、属性等。为什么要使用VDF? 我们可以在C代码中把widget插入container,但是对于复杂的View来说这样就太麻烦了。于是XMMI提供了VDF的机制来简化UI的实现。VDF的优点语法简单,容易使用具有高可读性容易定制2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.152023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.161.9VDF(ViewDescriptionFile)〔二〕VDFId:View1Id:View2…Widget1Widget2Widget3Widget4APViewMgrViewLoaderResourceFile.cGeneratorHeaderfile(ViewID&WidgetID)2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.171.9VDF(ViewDescriptionFile)〔三〕<App><ViewClsID=“OOXX〞Id=“SAMPLE_OO〞LayoutType=“VT_NORMAL〞><WidgetClsID=“LaLa〞Id=“SAMPLE_W1SizeWidth=“176〞SizeHeight=“176〞><Widget…><ModelClsID=“Hello〞></Model></Widget></Widget></View><ViewClsID=“OOXX〞Id=“SAMPLE_XX〞LayoutType=“VT_DIALOG〞>…</View><ModelClsID=“Paul〞><ModelItem>…</ModelItem></Model></App>VDF的语法可以参考ViewDefinitionLanguage.dtd,mae_vdftags.h1.10AP

Manager2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.18AppletAAppletBAAPHistoryStartApplet(B)MAEEVT_APP_SUSPENDEVT_APP_STARTB1.10APManager

2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.19AppletAAppletBAAPHistoryMAEEVT_APP_RESUMEEVT_APP_STOPBCloseApplet1.11引用个数ReferencecountMAE把每一个APP/SRV/Widget看做一个对象,Referencecount用来表示使用该对象当前被引用的个数。当一个对象被另一个对象创立或引用时,这个对象的Referencecount会被加一。当一个对象被引用它的对象释放的时候,MAE会将其Referencecount减一,然后判断Referencecount是否等于0。只有Referencecount等于0时该对象才会真正被释放。2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.201.12事件处理流程Eventflow2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.21每一个object有它自己的事件处理函数叫做xxx_HandleEvent1、用户可以对接收到的Event进行处理2、该Event被交给Viewmanager处理3、如果Viewmanager未处理,把该事件交给statemachine处理2.基于MAE平台设计第一个应用程序将讲述以下内容创立一个范例AP使用XFSM设计AP通过主菜单启动AP2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.232023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.242.1设计工具XMMI提供了以下工具,这些工具让我们设计AP变得更容易XFSM(XmmiFiniteStateMachine):这个工具帮助我们用状态机来设计AP。程序员可以使用XFSM来设计状态树和状态条状。XFSM会把这些设计转变成C代码。XRG(XmmiResourceGenerator):XRG管理所有的资源,这些资源会在AP中用到,例如:字符串图片和铃声VDF用户设定值〔可定制〕其他(菜单,字体,PLMN表格等)2.2XFSM与XRG的关系XFSM帮助我们建立AP的程序框架

XRG提供AP要用到的资源将框架和资源组合在一起2.3创立一个新AP的过程AP设计阶段〔状态机,UI流图〕使用XFSM实现状态机创立一个新工程设计状态树(ModeTree)创立事件(Event)设计状态跳转(Transition)将设计转成C代码使用XRG新增需要的资源添加需要的字符串,图片添加demo中要用到的菜单添加Shortcut创立一个新的VDF文件和头文件〔headfile),并添加到XRG中编辑mmi_mainmenuapp.vdf,将demo参加主菜单编译XRG编写代码在模拟器上运行休息脱衣服穿衣服洗澡看电视开电视关电视打睡觉闭眼睁眼去洗澡9:00PM铃响去接接完去睡觉洗完澡状态分级后的简化状态模型2.4状态跳转图状态树Root休息看电视洗澡睡觉接电话英文化RootInit

StopSuspendActiveTakearestWatchTVTakeashower

GotoBedAnsweracallRootTakearestWatchTVTakeashower

GotoBedAnsweracall系统化范例APP状态树2.5状态树2.6UIFlowSelectDemoIncomingcallEndcallEndcallSelect9:00PMGotoBed3用XFSM实现状态机2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.313.1创立一个新XFSM工程〔一〕在XFSM翻开工程文件1.运行tools\XFSM\XFSMWin.exe,菜单File\Open(proj\sc\customer\SZ\src\mmi\resource\XFSMProject\XFSMWS_xmmi.xml)3.1创立一个新XFSM工程〔二〕新增一个子工程,

菜单File\Add\NewProject在弹出的串口输入如下信息,文件路径选择

proj\sc\application\mmi\app设置页面默认值即可。如果需要为DEMOAPP设置一个编译宏,可以再CompilerOption一项中输入“definded(__MMI_DEMOAPP__)〞3.1创立一个新XFSM工程〔二〕3.2设计状态树Init:entryActive:TakeRest:entry&exitWatchTV:Entry&ExitTakeShower:entry&exitAnswerCall:entry&exitGotoBed:entry&exitError:entry&exitSuspend:Stop:3.2.1添加Initmode在Modes页面,在rootmode“DemoApp〞上点鼠标右键.选择“Additem“.3.2.2添加Activemode3.2.3添加Suspendmode3.2.4添加Stopmode3.2.5添加TakeRestmode3.2.6添加AnswerCallmode3.2.7添加GotoBedmode3.2.8添加ShowErrormode3.3添加内部事件InitSuccessShowErrorRingTakeShowerEndCallGoToSleepWatchTVCloseApp3.4

添加状态跳转状态跳转列表

Transitions:[FROM]-[TO]-[TYPE]-[ACTION]-[CONDITION]-[EVENT1]-[EVENT2]-...[_DemoApp]-[_DemoApp]-[internal]-[TRUE]-[FALSE]-[DEMOAPP_IEVT_CloseApp][_DemoApp]-[_Active_Error]-[default]-[FALSE]-[FALSE]-[DEMOAPP_IEVT_ShowError][_Init]-[_Active]-[default]-[FALSE]-[FALSE]-[DEMOAPP_IEVT_InitSuccess][_Active_TakeRest]-[_Active_AnswerCall]-[default]-[FALSE]-[FALSE]-[DEMOAPP_IEVT_Ring][_Active_AnswerCall]-[_Active_TakeRest]-[deep]-[FALSE]-[FALSE]-[DEMOAPP_IEVT_EndCall][_Active_TakeRest_WatchTV]-[_Active_TakeRest_TakeShower]-[default]-[FALSE]-[FALSE]-[DEMOAPP_IEVT_TakeShower][_Active_TakeRest_TakeShower]-[_Active_GotoBed]-[default]-[FALSE]-[FALSE]-[DEMOAPP_IEVT_GoToSleep][_Active_TakeRest_TakeShower]-[_Active_TakeRest_TakeShower]-[internal]-[TRUE]-[FALSE]-[MAE_EVT_KEY_PRESS]添加transition〔一〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.453.4.2添加transition〔二〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.463.4.3添加transition〔三〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.473.4.4添加transition〔四〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.483.4.5添加transition〔五〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.493.4.6添加transition〔六〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.503.4.7添加transition〔七〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.513.4.8添加transition〔八〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.52步骤4–添加transition3.4.9状态跳转结果

生成代码2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.54将XFSM的设计生成代码,执行菜单Build->GenAll3.4.11XFSM帮我们做的修改

DemoApp源文件在\App_mmi\SourceFiles\app下创立DemoApp文件夹,并将mmi_DemoApp.c放入其中的src目录DemoApp头文件在DemoApp\inc目录中放mmi_DemoApp.h,在DemoApp\inc\priv中放mmi_DemoApp_priv.h模拟器AP包含路径:修改\proj\sc\application\mmi\app\AppIncludePath_V2.ini.makefile:修改proj\sc\application\mmi\app\app.makClasseID头文件:修改proj\sc\application\mmi\core\mmi_clstbl.h2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.554在XRG中添加资源4.1翻开XRG工程4.2添加字符串4.3添加图片4.4添加菜单ID4.5添加ShortcutfunctionID4.6添加与修改VDF4.1翻开XRG工程2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.57运行\tools\XRG\XRG.exe,菜单File->OpenProject翻开工程文件\proj\sc\customer\SZ\src\mmi\resource\xmmi_base\xmmi.xml4.2添加字符串2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.58添加一个字符串的步骤如下:翻开StringIDManager添加一个新的字符串ID填充该ID对应的每种语言的内容4.2.1翻开StringIDManager2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.59添加字符串在StringTable上点击右键,在弹出的菜单中,选择StringIDManager4.2.2添加一个新的字符串ID(一)2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.60添加字符串在Common上点击右键,在弹出的菜单中,选择Add->Single4.2.2添加一个新的字符串ID(二)2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.61添加字符串生成如下红框内所示的新字符串ID4.2.2添加一个新的字符串ID(三)2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.62添加字符串按红色框内修改字符串ID,然后点击OK4.2.3填充新字符串内容〔一〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.63添加字符串双击Chinese_S,在String处输入“样例〞,添加该字符的中文文字4.2.3填充新字符串内容〔二〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.64添加字符串双击English,在String处输入“Demo〞,添加该字符的英文文字4.2.4参照前面的步骤添加其他字符串TXT_LIL_N_DEMO_WATCH_TV〔中文“看电视〞,英“WatchTV〞TXT_LIL_N_DEMO_REACH_9〔中文“9点到〞,英“9:00PM〞〕TXT_LIL_N_DEMO_TAKE_SHOWER〔中文“洗澡〞,英“Takeshower〞〕TXT_LIL_N_DEMO_SPREAD_SOAP〔中文“擦肥皂〞,英“Spreadsoap〞〕4.3添加图片4.3.1将图片参加目录2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.67添加图片在目录\proj\sc\customer\SZ\src\mmi\resource\xmmi_base_Res\image\QVGA中新建Demo文件夹,并将DEMO_IMG_ANSWER_CALL.png,DEMO_IMG_SLEEP.png,DEMO_IMG_TAKE_SHOWER.png拷贝到此目录中4.3.2翻开图片列表2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.68添加图片双击image_list,XRG会装载所有图片资源界面。4.3.3添加图片(wxd)2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.69添加图片点击鼠标右键,选择Add->Multiple,此功能可以一次把一个目录下的图片添加进来。Single就只能一次添加一张图片。在弹出的窗口选中Demo,如右图。然后点击OK4.4添加菜单ID4.4.1翻开菜单列表2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.71添加菜单双击menu_list,XRG装载MENU界面,如以下图。点击红色框内的MainMenu切换到mainmenu界面4.4.2添加该AP在主菜单中菜单ID(一)2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.72添加菜单在Organizer上点击右键,选择AddSub-Menu,在弹出的对话框中按右图进行输入4.4.3添加该AP在主菜单中菜单ID(二)2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.73添加菜单输入完毕后如下所示4.4.4添加AP内部的菜单ID〔一〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.74添加菜单切换到APMENU页面,在Application上点右键,在新窗口如下输入4.4.4添加AP内部的菜单ID〔二〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.75添加菜单再次在application上点右键,输入左图数据,添加完菜单后在树状结构中新增菜单,如右图4.5添加ShortcutfunctionID(一)2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.76在Setting上点击右键,选择LibraryMode.在弹出的窗口中,点开Enum,双击ShortcutsFunctionID4.5添加ShortcutfunctionID(二)2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.77添加Shortcut点击ADD,添加SHORTCUTS_FUNC_DEMO4.6添加VDF4.6.1准备VDF和头文件2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.79编辑VDF和头文件demoapp.vdf,放入左图所示目录中proj\sc\customer\SZ\src\mmi\resource\xmmi_base_Res\vdf\QVGA\app\Demommi_demoapp_view_id.h,放入右图所示目录中proj\sc\application\mmi\app\DemoApp\inc4.6.2翻开VDF列表2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.80添加VDF双击vdf_list,XRG装载VDF界面4.6.3增加一个VDF〔一〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.81添加VDF点击鼠标右键,选择Add->Single4.6.3增加一个VDF〔二〕2023/1/28Copyright©2021MStarSemiconductor,Inc.Allrightsreserved.82添加VDF点击鼠标右键,在弹出的对话框中作如下输入.VDFFile和HeaderFile分别选择之前编译好的VDF和HeaderFile添加成功后可以找到VIEW_DEMO项,如右图所示4.6.4在主菜单中参加该AP的启动菜单2023/1/2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论