文档介绍:Add the author and the accompanying title
MTK软件培训课程 MTK程序架构分析
MTK程序架构分析
MTK软件培训课程 一
康勤、张雷
此文档后面有赠送常是通过ProtocolEventHandler来完成,这个ProtocolEventHandler其实质就是对不同的消息ID,执行相应的处理函数,只是把这些ID和处理函数用了一个统一的数据结构来记录和管理,通过一系列接口来供使用者调度,这样就不需要管它如何处理的,使用者只需要设置ID和其对应的入口函数地址就可以,它的管理程序会把这些都调度好,也是能很好的移植的,
4,释放内存OslFreeInterTaskMsg &Message ;不需要再进行解释了,和上面的都一样,
程序整体结构
对ProtocolEventHandler,还想说一些,就是那些event很多都是在GSM协议中有规定的,类似的还有很多,比如SAT模块,此模块所有的东西基本上都是在GSM协议中规定了的,
从如上两个例子,我们可以看出程序的整体结构不复杂,而且很多时候,模块都是被封装好的,不能对其修改,我们在实际工作中需要用到的其实不多,在这里讲,主要是为了让大家对程序整个结构有个比较系统的了解,对程序的模块理解将有好处的,
如果有必要对多个模块同时修改,比如是需要增加一些消息,这时的工作就好像是在修改一个多线程的PC程序一样,很多时候都要非常注意变量的读写保护,以及同步互斥操作
MMI相关
SCREEN
首先要讲的是screen,这个东西在MMI中可以说是随处可见,我们可以翻译为屏幕,显示页面,或是别的其它的,
不管在哪,凡是需要显示的时候都需要一个screen,所以在进入一个新页面时,通常都会使用EntryNewScreen函数,
MMI相关
这个东西我们可以这样来理解,可以想象成一幅画的画框,或者是一部电影里面使用到的胶片,用来组织和管理一幅一幅的MMI页面的
不管你画什么东西,都需要一个screen的支持,当你进入一个新的screen时,你可以把当前screen保存到历史记录中,在适当的时候,可以把历史记录中的screen弹出来,恢复成原来的MMI页面,
MMI相关
有一系列的SCREEN相关操作,用来维护和管理sceen队列,比如刚才说的EntryNewScreen 进入一个新的MMI页面 ,GoBackHistory 返回上一个页面 ,DeleteScreenIfPresent 删除在历史记录中存在的某个页面记录 等等,这些操作都是方便程序员使用screen,灵活的管理MMI页面,如果想知道其实现方法,看看这些函数的代码就可以,不是很难,
MMI相关
讲了screen就不得不讲Category了,
Category常常和screen连起来使用,就像电影胶片和胶片上的内容的关系,Category这个东西包含了很多东西,但目的就是一个,给程序员快速方便的使用一些常用界面组件,就像做PC程序时,开发工具中提供的各种不同对话框,
MMI相关
有几百个不同类型的Category,有了这些Category,程序员可以不需要关注于程序界面上的一些事,直接对它进行使用就可以,只需要提供一些参数,比如标题名,左右软键的名字和图片等,如果感觉不够用,还可以自己写Category,写Category 有统一的格式的,仔细看看,非常简单,十分的方便,
MMI相关
Category 中有一类特殊的Category,里面包含可编辑组件,这些可编辑组件也是由系统提供的,就像PC编程工具提供的那些edit box,check box,rich edit一样,包括:singleline_inputbox,multiline_inputbox, dialer_inputbox等,完全满足程序需要的输入要求,有相应的接口函数及使用流程,使用很方便,可参阅具体代码如函数ShowCategory57Screen,
MMI相关
除了以上这些,MMI相关的公共内容部分没有什么好讲的了,一些具体细节,可参照以前讲过的MTK架构分析,
MMI的EVENT
主要的EVENT有4种:键盘事件,协议栈事件,计时器事件,高亮显示事件,
下面是一张MMI与其它模块的交互图
MMI的EVENT
MMI的EVENT
以上这张图是没考虑到FRAMEWORK时的图,对比下面这张图,我们将很清晰的看出FRAMEWORK所起的作用
MMI的EVENT
MMI的EVENT
刚才讲的设置协议栈消息处理函数
MMI的EVENT