单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
1
MTK架构分析
MTK架构分析
作者:康 勤
开发日期: 2005.2.21
康佳学院
KO
N
K
A
G
R
O
U
P
KO
N
K
A
C
O
LL
EG
E
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
3
Framework介绍
• 启动流程
• Queue相关
• Event相关
• History相关
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
4
启动流程
• 在 InitApplication();函数中创建了几个线程
,用这几个线程来模拟手机中的不同的任
务线程。并且为这些任务创建了不同的消
息队列。
• 这些创建的线程中其中有一个是主要的,
此线程的入口函数是MMI_task 。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
5
启动流程
• 函数MMI_task主要完成的是不停的读取 protocol
task中的消息,然后根据消息和参数进行相应的处
理函数 。
• 在函数MMI_task里读取了消息后,用一个 switch
语句来选择处理方式 。
• 当系统收到这个消息
MSG_ID_MMI_EQ_POWER_ON_IND时候,系统
根据当前系统的状态来决定启动的方式
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
6
启动流程
• 正常启动(用户按键盘启动)中首先调用
了函数 InitializeAll,这个是系统启动的初
始化函数。
• 接着函数 InitNvramData,让一些需要读
nvram的模块读出 nvram中的数据,以此来
初始化这些需要用到 nvram中的数据来初
始化的模块。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
7
启动流程
• 初始化后调用函数 fast_openscreen,这个函
数就是系统启动后进入主屏幕的函数。
• 在 fast_openscreen里开始就播放开机动
画及声音,点亮显示屏,并且设置好当开
机画面播放完后需要执行的回调函数。当
动画播放结束就直接调用此回调函数。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
8
启动流程
• 最后进入 EntryIdleScreen函数,这个函数就是
程序的初始界面。并且在里面把左软键设置为进
入主菜单,右软件设置为进入电话本。
• 到这里,一个启动过程总算结束了,以后的事情
都交给注册好的事件响应函数和菜单响应函数去
做。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
9
Queue相关
• 在 InitApplication()时,我们创建不同的线程,同时
创建不同的线程所对应的消息队列。
• 全局数组 task_info_g1是一个osl_task_info类型的
数组,此类型有个成员变量 task_ext_qid,它是
oslMsgqid类型的。就是这个变量保存着消息队列指针。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
10
Queue相关
• 发消息函数OslIntMsgSendExtQueue向
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
栈写入消息。
这个函数向协议栈写入一个MYQUEUE类型的消息,这个消
息是由用户自己定义的。
• 操作接口函数:从队列中收消息OslReceiveMsgExtQ和向队
列发消息OslMsgSendExtQueue,消息是一个MYQUEUE
结构类型,它包含发出消息者和消息要到达的地方。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
11
Queue相关
• 一般来讲消息发起者和消息要到达的地方是
FRAMEWORK或者PROTOCO STACK/L4,前者发出
消息让硬件执行某些操作,而后者的消息是硬件发出来
的,需要软件来进行响应,比如按键按后需要执行的操
作。
• MYQUEUE结构类型除了包含发起和接收者外,还包含
消息类型号,用于指示消息的用途的,还有一个
oslDataPtr指针,它是一些数据块的指针,指向响应函
数需要用到的数据。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
12
Queue相关
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
13
Event相关
• 按照 event对消息响应的不同,我们可以把它分
为两大类:一类是对协议栈和硬件中断消息的响
应,一类是对菜单高亮时和显示提示时进行消息
响应。看这两类消息的来源,我们也可以说这两
类事件分别响应的是硬件消息和软件消息。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
14
Event相关
• 协议栈和硬件中断event这类事件的管理主要是对两个结
构数组的管理,也可以认为是两条链。它们的结构类型都
只是包含了两个成员变量,一个是 ID,一个是入口函数指
针。这两个数组的名称分别是protocolEventHandler和
interruptEventHandler 。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
15
Event相关
• 在发消息前往往常常会用到这个函数SetProtocolEventHandler。这
个函数的作用是设置一个函数对某个硬件消息进行响应。
• 道ExecuteCurrProtocolHandler函数完成了其响应过程。当有消息
到时,有时还会有对应消息的ExecuteCurrProtocolHandler函数根
据消息 ID在两个数组中检索相应的响应函数指针,当检索得到函数指
针后把参数MsgStruct传给函数指针让其去执行,这样就完成了对消
息的响应过程。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
16
Event相关
• 对菜单高亮和显示提示的消息响应的管理也是通过一个数组来完
成的。这个数组是maxHiliteInfo,它是一个hiliteInfo结构类型
,其中只包含两个响应函数入口地址,一个是菜单高亮显示时需
要转到的入口,一个是提示出现时需要转入的入口。
• 它和 protocolEventHandler不同,它的结构里面不包含索引用
的 ID,而是以它的下标作为索引,而且都是以菜单资源的 ID号
来做下标。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
17
Event相关
• 用 SetHiliteHandler函数把菜单和菜单高亮显示执行的
函数联系起来,这个函数就是这个作用,把自己定义的
函数的地址赋值给以菜单 ID为下标的项中的高亮显示入
口地址。
• ExecuteCurrHiliteHandler(S32 hiliteid)函数完成了执
行菜单高亮显示后的操作。不过,其参数不时菜单 ID,
而是当前菜单所在的兄弟菜单中的位置。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
18
History相关
• History保存访问过的页面的信息。它保存的信息包括:访问
过的屏幕的 id,访问过屏幕的入口函数地址,访问过的屏幕的
GUIBuffer,访问过的屏幕如果有输入框的话,还要保存输入
框 inputBuffer大小及内容。
• 历史
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
主要是靠数组 historyData来管理的,它的类型是结
构 historyNode,这个结构包含了 4个参数,屏幕 ID,入口
函数地址,GUIBuffer指针和 InputBuffer指针。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
19
History相关
• 一般将要离开一个 SCREEN的时候需要用到添加历
史消息操作。
• 在离开函数中添加历史记录常用函数是
AddHistory,即 AddHistoryReference函数,它
把 screenID , 入 口 函 数 , GUIbuffer 和
Inputbuffer 都保存起来。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
20
History相关
• 在历史记录中还有个关键的东西,用来指示出当前最
近的历史记录所在数组的下标。其实就是数组使用到
的地方 currHistoryIndex。这个全局变量起到很关键
作用,在添加历史记录的时候这个全局变量 +1 。
• 当 程 序 要 回 到 上 一 个 屏 幕 时 只 要 调 用
GoBackHistory ,它调用 ExecutePopHistory 函数
,此函数就执行把历史记录的 currHistoryIndex-1,
并且把保存的历史屏幕的入口函数再执行一遍。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
21
键盘响应
• 键盘响应
• 键盘的设置
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
22
按键相关
• 当用户单击键盘上任意一个键时,都会触发到一
个硬件中断,然后 L4将会把这个中断通过消息的
方式发给 Framework, Framework将要根据消息
对其进行响应 。
• 当 硬 件 发 消 息
MSG_ID_MMI_EQ_KEYPAD_DETECT_IND 时,
说明就是键盘有键被按,这时候将触发 void
L4KeyHandle(void *paraBuff)事件,在这个函数里
对这个消息进行处。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
23
按键相关
• 在 ProcessKeyEvent中对读出的键盘状态进行处理
。
• 在 ProcessKeyEvent中有 2个参数,第一个参数是
按键消息的类型( up,down,longpress),第二个
是按的键的索引。
• 通过这个索引我们可以在一个全局数组中找到对
应的按键的相关信息。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
24
按键相关
• 处理后把状态转化成MMI熟悉的状态后传给函数
KeyEventHandler 进行处理。
• 在 KeyEventHandler中,系统先判断声音是否关
闭,键盘是否上锁,判断好了后再根据判断进行一
些比如播放不同音调的动作。
• 到最后这些附加的键盘响应动作结束后则进入函数
ExecuteCurrKeyHandler来对真正的键盘对应的
不同的事件。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
25
按键相关
• 到最后这些附加的键盘响应动作结束后则进入函
数 ExecuteCurrKeyHandler来对真正的键盘对应
的不同的事件。
• 在函数 ExecuteCurrKeyHandler里,我们可以发
现 真 正 起 主 要 作 用 的 一 个 全 局 数 组
currKeyFuncPtrs ,而其类型是函数指针。它有
两维,而且分别就是按键状态和按键类型,就是
说用传入的参数来作为其索引,可以找到这个按
键处于这个状态的时候需要执行的事件。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
26
按键相关
• SetKeyHandler ,这个函数用来设置一个
用户定义的按键响应函数其中只是对
currKeyFuncPtrs中给定按键状态和按键类
型的项进行赋值操作。把需要响应的函数
地址赋给对应的项。
• 软键盘的设置其实就是对键盘上的
KEY_LSK和 KEY_RSK按键进行特殊的按键
响应事件设置。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
27
显示相关
• 普通菜单相关
• 编辑控件相关
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
28
普通菜单相关
• 这个平台的 framework中已经订制好了大
量的通用的菜单资源,也可以叫做
Category 。用这些 Category 我们可以很
简单的搭建好自己需要的程序框架,剩下
的工作就是把这些框架填满,写这些框架
的菜单响应事件。
• 下面将用一个系统主菜单来演示使用这些
Category 的一般过程。
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
29
普通菜单相关
• 当点击左软件就进入到主菜单。
• 首先是执行 ExecuteCurrExitHandler ,这
个函数我们讨论过了,执行上个屏幕的结
束函数,一般是把上个屏幕保存到历史记
录中,也可以自己定义一些需要处理的工
作。
• 接着就是完成一些显示菜单前的准备工作 ,
比如得到一些菜单字符串 , 菜单图标等
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
30
普通菜单相关
• 然 后 是 重 点 , 调 用 函 数
ShowCategory14Screen, 这个函数就是开
始说到的显示 Category的那些
模板
个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载
函数 ,
这些函数都已经把菜单的显示过程都封装
好了 , 只需要用户根据需要去调用就是了
• 最后显示完后 ,设置软键盘事件 ,保存好退
出函数的句柄 .这样 ,一个屏幕的显示过程
就算结束了 .
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
31
编辑控件相关
• 编辑控件 ,就是为了响应用户的输入而设置
的一些专门 GUI 空间 , 它的使用往往跟
ShowCategory57Screen 函数联系在一起
的 . Category57 就是专门为显示输入控件
来设置的专门屏幕 .里面可以放置一系列的
输入响应控件 ,就好像一个容器一样 .
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
32
举例
• 一些模块的重点
• CALLLOG 模块分析
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
33
资源的添加
• 字符串资源添加方法
• 图片资源的添加
• 菜单资源的添加
单击以编辑母版标题样式
• 单击以编辑母版文本样式
• 第二级
• 第三级
• 第四级
• 第五级
34
谢谢大家 !
页 1
页 2
页 3
页 4
页 5
页 6
页 7
页 8
页 9
页 10
页 11
页 12
页 13
页 14
页 15
页 16
页 17
页 18
页 19
页 20
页 21
页 22
页 23
页 24
页 25
页 26
页 27
页 28
页 29
页 30
页 31
页 32
页 33
页 34