《mtk架构分析》ppt课件

上传人:tia****nde 文档编号:70488691 上传时间:2019-01-17 格式:PPT 页数:34 大小:3.51MB
返回 下载 相关 举报
《mtk架构分析》ppt课件_第1页
第1页 / 共34页
《mtk架构分析》ppt课件_第2页
第2页 / 共34页
《mtk架构分析》ppt课件_第3页
第3页 / 共34页
《mtk架构分析》ppt课件_第4页
第4页 / 共34页
《mtk架构分析》ppt课件_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《《mtk架构分析》ppt课件》由会员分享,可在线阅读,更多相关《《mtk架构分析》ppt课件(34页珍藏版)》请在金锄头文库上搜索。

1、架构分析,架构分析 作者: 康 勤 开发日期:2005.2.21,康佳学院,KONKA GROUP KONKA COLLEGE,康佳学院,Framework介绍 启动流程 Queue相关 Event相关 History相关,启动流程,在InitApplication();函数中创建了几个线程,用这几个线程来模拟手机中的不同的任务线程。并且为这些任务创建了不同的消息队列。 这些创建的线程中其中有一个是主要的,此线程的入口函数是MMI_task 。,启动流程,函数MMI_task主要完成的是不停的读取protocol task中的消息,然后根据消息和参数进行相应的处理函数 。 在函数MMI_tas

2、k里读取了消息后,用一个switch语句来选择处理方式 。 当系统收到这个消息MSG_ID_MMI_EQ_POWER_ON_IND时候,系统根据当前系统的状态来决定启动的方式,启动流程,正常启动(用户按键盘启动)中首先调用了函数InitializeAll,这个是系统启动的初始化函数。 接着函数InitNvramData,让一些需要读nvram的模块读出nvram中的数据,以此来初始化这些需要用到nvram中的数据来初始化的模块。,启动流程,初始化后调用函数fast_openscreen,这个函数就是系统启动后进入主屏幕的函数。 在fast_openscreen里开始就播放开机动画及声音,点亮显

3、示屏,并且设置好当开机画面播放完后需要执行的回调函数。当动画播放结束就直接调用此回调函数。,启动流程,最后进入EntryIdleScreen函数,这个函数就是程序的初始界面。并且在里面把左软键设置为进入主菜单,右软件设置为进入电话本。 到这里,一个启动过程总算结束了,以后的事情都交给注册好的事件响应函数和菜单响应函数去做。,Queue相关,在InitApplication()时,我们创建不同的线程,同时创建不同的线程所对应的消息队列。 全局数组task_info_g1是一个osl_task_info类型的数组,此类型有个成员变量task_ext_qid,它是oslMsgqid类型的。就是这个变

4、量保存着消息队列指针。,Queue相关,发消息函数OslIntMsgSendExtQueue向协议栈写入消息。这个函数向协议栈写入一个MYQUEUE类型的消息,这个消息是由用户自己定义的。 操作接口函数:从队列中收消息OslReceiveMsgExtQ和向队列发消息OslMsgSendExtQueue,消息是一个MYQUEUE结构类型,它包含发出消息者和消息要到达的地方。,Queue相关,一般来讲消息发起者和消息要到达的地方是FRAMEWORK或者PROTOCO STACK/L4,前者发出消息让硬件执行某些操作,而后者的消息是硬件发出来的,需要软件来进行响应,比如按键按后需要执行的操作。 MY

5、QUEUE结构类型除了包含发起和接收者外,还包含消息类型号,用于指示消息的用途的,还有一个oslDataPtr指针,它是一些数据块的指针,指向响应函数需要用到的数据。,Queue相关,Event相关,按照event对消息响应的不同,我们可以把它分为两大类:一类是对协议栈和硬件中断消息的响应,一类是对菜单高亮时和显示提示时进行消息响应。看这两类消息的来源,我们也可以说这两类事件分别响应的是硬件消息和软件消息。,Event相关,协议栈和硬件中断event这类事件的管理主要是对两个结构数组的管理,也可以认为是两条链。它们的结构类型都只是包含了两个成员变量,一个是ID,一个是入口函数指针。这两个数组的

6、名称分别是protocolEventHandler和interruptEventHandler。,Event相关,在发消息前往往常常会用到这个函数SetProtocolEventHandler。这个函数的作用是设置一个函数对某个硬件消息进行响应。 道ExecuteCurrProtocolHandler函数完成了其响应过程。当有消息到时,有时还会有对应消息的ExecuteCurrProtocolHandler函数根据消息ID在两个数组中检索相应的响应函数指针,当检索得到函数指针后把参数MsgStruct传给函数指针让其去执行,这样就完成了对消息的响应过程。,Event相关,对菜单高亮和显示提示的

7、消息响应的管理也是通过一个数组来完成的。这个数组是maxHiliteInfo,它是一个hiliteInfo结构类型,其中只包含两个响应函数入口地址,一个是菜单高亮显示时需要转到的入口,一个是提示出现时需要转入的入口。 它和protocolEventHandler不同,它的结构里面不包含索引用的ID,而是以它的下标作为索引,而且都是以菜单资源的ID号来做下标。,Event相关,用SetHiliteHandler函数把菜单和菜单高亮显示执行的函数联系起来,这个函数就是这个作用,把自己定义的函数的地址赋值给以菜单ID为下标的项中的高亮显示入口地址。 ExecuteCurrHiliteHandler(

8、S32 hiliteid)函数完成了执行菜单高亮显示后的操作。不过,其参数不时菜单ID,而是当前菜单所在的兄弟菜单中的位置。,History相关,History保存访问过的页面的信息。它保存的信息包括:访问过的屏幕的id,访问过屏幕的入口函数地址,访问过的屏幕的GUIBuffer,访问过的屏幕如果有输入框的话,还要保存输入框inputBuffer大小及内容。 历史记录主要是靠数组historyData来管理的,它的类型是结构historyNode,这个结构包含了4个参数,屏幕ID,入口函数地址,GUIBuffer指针和InputBuffer指针。,History相关,一般将要离开一个SCREE

9、N的时候需要用到添加历史消息操作。 在离开函数中添加历史记录常用函数是AddHistory,即AddHistoryReference函数,它把screenID,入口函数,GUIbuffer和Inputbuffer都保存起来 。,History相关,在历史记录中还有个关键的东西,用来指示出当前最近的历史记录所在数组的下标。其实就是数组使用到的地方currHistoryIndex。这个全局变量起到很关键作用,在添加历史记录的时候这个全局变量+1。 当程序要回到上一个屏幕时只要调用GoBackHistory,它调用ExecutePopHistory函数,此函数就执行把历史记录的currHistory

10、Index-1,并且把保存的历史屏幕的入口函数再执行一遍。,键盘响应,键盘响应 键盘的设置,按键相关,当用户单击键盘上任意一个键时,都会触发到一个硬件中断,然后L4将会把这个中断通过消息的方式发给Framework,Framework将要根据消息对其进行响应 。 当硬件发消息MSG_ID_MMI_EQ_KEYPAD_DETECT_IND时,说明就是键盘有键被按,这时候将触发void L4KeyHandle(void *paraBuff)事件,在这个函数里对这个消息进行处 。,按键相关,在ProcessKeyEvent中对读出的键盘状态进行处理。 在ProcessKeyEvent中有2个参数,第

11、一个参数是按键消息的类型(up,down,longpress),第二个是按的键的索引。 通过这个索引我们可以在一个全局数组中找到对应的按键的相关信息。,按键相关,处理后把状态转化成MMI熟悉的状态后传给函数KeyEventHandler进行处理 。 在KeyEventHandler中,系统先判断声音是否关闭,键盘是否上锁,判断好了后再根据判断进行一些比如播放不同音调的动作。 到最后这些附加的键盘响应动作结束后则进入函数ExecuteCurrKeyHandler来对真正的键盘对应的不同的事件 。,按键相关,到最后这些附加的键盘响应动作结束后则进入函数ExecuteCurrKeyHandler来对

12、真正的键盘对应的不同的事件 。 在函数ExecuteCurrKeyHandler里,我们可以发现真正起主要作用的一个全局数组currKeyFuncPtrs,而其类型是函数指针。它有两维,而且分别就是按键状态和按键类型,就是说用传入的参数来作为其索引,可以找到这个按键处于这个状态的时候需要执行的事件。,按键相关,SetKeyHandler,这个函数用来设置一个用户定义的按键响应函数其中只是对currKeyFuncPtrs中给定按键状态和按键类型的项进行赋值操作。把需要响应的函数地址赋给对应的项。 软键盘的设置其实就是对键盘上的KEY_LSK和KEY_RSK按键进行特殊的按键响应事件设置。,显示相

13、关,普通菜单相关 编辑控件相关,普通菜单相关,这个平台的framework中已经订制好了大量的通用的菜单资源,也可以叫做Category。用这些Category我们可以很简单的搭建好自己需要的程序框架,剩下的工作就是把这些框架填满,写这些框架的菜单响应事件 。 下面将用一个系统主菜单来演示使用这些Category的一般过程。,普通菜单相关,当点击左软件就进入到主菜单。 首先是执行ExecuteCurrExitHandler,这个函数我们讨论过了,执行上个屏幕的结束函数,一般是把上个屏幕保存到历史记录中,也可以自己定义一些需要处理的工作。 接着就是完成一些显示菜单前的准备工作,比如得到一些菜单字

14、符串,菜单图标等,普通菜单相关,然后是重点,调用函数ShowCategory14Screen,这个函数就是开始说到的显示Category的那些模板函数,这些函数都已经把菜单的显示过程都封装好了,只需要用户根据需要去调用就是了 最后显示完后,设置软键盘事件,保存好退出函数的句柄.这样,一个屏幕的显示过程就算结束了.,编辑控件相关,编辑控件,就是为了响应用户的输入而设置的一些专门GUI空间,它的使用往往跟ShowCategory57Screen函数联系在一起的. Category57就是专门为显示输入控件来设置的专门屏幕.里面可以放置一系列的输入响应控件,就好像一个容器一样.,举例,一些模块的重点 CALLLOG模块分析报告,资源的添加,字符串资源添加方法 图片资源的添加 菜单资源的添加,谢谢大家!,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号