《2022年MTK架构分析v .pdf》由会员分享,可在线阅读,更多相关《2022年MTK架构分析v .pdf(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、康佳学院培训教材内部资料,请勿外传1 MTK 架构分析讲师手册 /学员手册 康佳集团股份有限公司名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - - - - - - - - - 康佳学院培训教材内部资料,请勿外传2 第一章Framework 介绍 . 3 1.1 启动流程 . 3 1.1.1 模拟器线程创建 . 3 1.1.2 消息循环 . 3 1.1.3 启动初始化 . 4 1.1.4 进入主屏幕 . 4 1.2Queue 相关 . 5 1.3Event 相
2、关 . 5 1.3.1Event 简述. 5 1.3.2 协议栈和硬件中断event . 6 1.3.3 菜单高亮和提示event . 6 1.4History 相关 . 6 第二章按键相关 . 7 2.1 键盘响应 . 7 2.1.1 得到键盘消息 . 7 2.1.2 消息进行转化后传给MMI . 7 2.1.3 执行一些与按键有关的操作. 7 2.1.4 真正执行按键所对应的操作. 7 2.2 键盘的设置 . 7 2.2.1 普通按键的设置 . 7 2.2.2 软键盘的设置 . 7 第三章显示相关 . 8 3.1 普通菜单相关 . 8 3.2 编辑控件相关 . 8 第四章举例 . 8 第五
3、章资源的添加 . 8 5.1 总述 . 8 5.2 字符串资源的添加 . 9 5.2.1 字符串资源添加过程 . 9 5.2.2 字符串资源添加方法 . 9 5.3 图片资源的添加. 10 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - 康佳学院培训教材内部资料,请勿外传3 5.4 菜单资源的添加. 10 第一章Framework 介绍1.1 启动流程1.1.1模拟器线程创建在 PixtelMMI.cpp文件里的函数WinMa
4、in 就是模拟器的启动入口。里面包括了InitInstance 和模拟器的消息循环,这些都是 win32 程序通用的, 我们需要注意的只是 InitApplication(); 这个InitApplication(); 函数创建了几个线程,用这几个线程来模拟手机中的不同的任务线程。 并且为这些任务创建了不同的消息队列。这些创建的线程中其中有一个是主要的,此线程的入口函数是MMI_task ,它在 MMITask.c 里面。1.1.2消息循环函数 MMI_task 主要完成的是不停的读取protocol task 中的消息,然后根据消息和参数进行相应的处理函数。名师资料总结 - - -精品资料欢
5、迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - 康佳学院培训教材内部资料,请勿外传4 1.1.3启动初始化函数InitializeAll ,这个是系统启动的初始化函数。比如协议栈,菜单数组,中断队列的初始化,一些硬件消息所对应的事件设定,还比如一些需要立刻初始化的模块,设定这些模块的菜单相应事件,设定这些模块协议栈消息响应函数。在图中可以很清楚的看清从按键盘启动后到进入主屏幕所要完成的一系列工作:1.1.4进入主屏幕在 fast_openscreen里开始就播
6、放开机动画及声音,点亮显示屏, 并且设置好当开机画面播放完后需要执行的回调函数CallBackPowerOnAnimationComplete 。 进入EntryIdleScreen 函数,这个函数就是程序的初始界面。并且在里面把左软键设置为进 入 主 菜 单 , 右 软 件 设 置 为 进 入 电 话 本 。 这 两 个 入 口 分 别 是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - 康佳学院培训教材内部资料,请勿外传5
7、EntryMainMenuFromIdleScreen ,EnterPhbFromIdleScreen 。到这里, 一个启动过程总算结束了,以后的事情都交给注册好的事件响应函数和菜单响应函数去做。1.2Queue 相关对此队列,具有创建,删除,向里面写消息,从里面读消息等操作,其中最主要的就是发消息函数OslIntMsgSendExtQueue。 这个就是向协议栈写入消息的函数,其他的几个操作都是模拟出来的,对真实的协议栈没影响。这个函数向协议栈写入一个 MYQUEUE 类型的消息,这个消息是由用户自己定义的。下图是关于协议栈和MMI 间通过 2 条队列来传送消息的示意图1.3Event 相关
8、1.3.1Event简述按照 event 对消息响应的不同,我们可以把它分为两大类:一类是对协议栈和硬件中断消息的响应,一类是对菜单高亮时和显示提示时进行消息响应。我们看这名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 10 页 - - - - - - - - - 康佳学院培训教材内部资料,请勿外传6 两类消息的来源, 我们也可以说这两类事件分别响应的是硬件消息和软件消息。其中硬件消息范围很广,包括键盘按键消息,来电消息,短信消息等等。下面将分别就这两类事件进行详细说明。
9、1.3.2协议栈和硬件中断event 这类事件的管理主要是对两个结构数组的管理,也可以认为是两条链。它们的结构类型都只是包含了两个成员变量,一个是ID, 一个是入口函数指针。这两个数组的名称分别是protocolEventHandler 和 interruptEventHandler 。对硬件消息的响应就是靠对这两个数组的管理来实现的。1.3.3菜单高亮和提示event 对菜单高亮和显示提示的消息响应的管理也是通过一个数组来完成的。这个数组是 maxHiliteInfo ,它是一个hiliteInfo结构类型,其中只包含两个响应函数入口地址, 一个是菜单高亮显示时需要转到的入口,一个是提示出现
10、时需要转入的入口。它和 protocolEventHandler 不同,它的结构里面不包含索引用的ID,而是以它的下标作为索引,而且都是以菜单资源的ID 号来做下标。索引只有找到了菜单的资源ID 号就可以找到其相应的响应高亮显示和提示的函数入口,菜单 ID 和响应函数通过这种方式对映起来。1.4History相关History 保存访问过的页面的信息。它保存的信息包括:访问过的屏幕的id,访问过屏幕的入口函数地址,访问过的屏幕的GUIBuffer ,访问过的屏幕如果有输入框的话,还要保存输入框inputBuffer 大小及内容。历史记录主要是靠数组historyData 来管理的,它的类型是结
11、构historyNode ,这个结构包含了4 个参数, 屏幕 ID ,入口函数地址, GUIBuffer指针和 InputBuffer指针。一般将要离开一个SCREEN 的时候需要用到添加历史消息操作。总之历史记录只是对一个数组的操作及维护。很多操作可以自己想出来应该怎么做。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 10 页 - - - - - - - - - 康佳学院培训教材内部资料,请勿外传7 第二章按键相关2.1 键盘响应2.1.1得到键盘消息当用户单击键盘上
12、任意一个键时,都会触发到一个硬件中断,然后L4 将会把这个中断通过消息的方式发给Framework , Framework 将要根据消息对其进行响应。2.1.2消息进行转化后传给MMI 2.1.3执行一些与按键有关的操作在 KeyEventHandler 中,系统先判断声音是否关闭,键盘是否上锁,判断好了后再根据判断进行一些比如播放不同音调的动作。2.1.4真正执行按键所对应的操作真正起主要作用的一个全局数组currKeyFuncPtrs ,而其类型是函数指针。它有两维,而且分别就是按键状态和按键类型,就是说用传入的参数来作为其索引,可以找到这个按键处于这个状态的时候需要执行的事件。2.2 键
13、盘的设置2.2.1普通按键的设置2.2.2软键盘的设置名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 10 页 - - - - - - - - - 康佳学院培训教材内部资料,请勿外传8 第三章显示相关3.1 普通菜单相关这个平台的framework中已经订制好了大量的通用的菜单资源,也可以叫做Category。用这些 Category 我们可以很简单的搭建好自己需要的程序框架,剩下的工作就是把这些框架填满,写这些框架的菜单响应事件,正是因为有了这些Category,使我们
14、节省了很多与GUI 打交道的时间。3.2 编辑控件相关编辑控件 ,就是为了响应用户的输入而设置的一些专门GUI 空间 ,它的使用往往跟 ShowCategory57Screen 函数联系在一起的. Category57 就是专门为显示输入控件来设置的专门屏幕.里面可以放置一系列的输入响应控件,就好像一个容器一样. 第四章举例第五章资源的添加5.1 总述在手机程序中我们常常需要用到一些外部的资源,这些资源包括字符串,图片, 铃声,菜单等等,这些资源被引入到手机程序中使用,只提供一个资源的ID,让程序员可以通过这些ID 访问到资源。手机上要用到的资源,都被编译成一个DLL 文件。而且这些资源的添加
15、方式都是通过外部工具来添加的。这些外部工具把资源文件及它们的ID 要联系起来,生成用来编译成资源DLL 的代码。然后才能把这些资源编译成DLL 文件。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 10 页 - - - - - - - - - 康佳学院培训教材内部资料,请勿外传9 5.2 字符串资源的添加5.2.1 字符串资源添加过程为了更清楚的看清字符串添加的整个过程,这里提供了一张图片,画的是流程图:从图中我们可以看到添加一个字符串的一般过程。可以分为两个部分,第一个
16、部分是CustStrList.txt 和 Ref_list.txt 的连接。 CustStrList.txt 中包含的语言只有英语,而 Ref_list.txt 可以由用户来自己定义语言。这两个通过MergeStrRes.exe 链接后,找到两个文件中具有相同ID 的字符串,把他们保存在CustStrList_out.txt 中,这个文件包括了多国语言。第 二 部分 是在 我们 需要 使用 字符 串资 源的 地方 对字 符串 资源 名称 进行 定义 , 在enum_list.h 中。然后由一个专门的程序在第一个过程生成的CustStrLis_out.txt 中找我们定义了的需要使用的字符串名,
17、找到后根据这些字符串生成两个我们在程序中可以直接使用的 .c 文件,这两个文件就包含了我们定义的字符串资源。5.2.2 字符串资源添加方法上面说了字符串添加的过程通过这个过程,通过这个过程, 我们可以看出, 实际上我们名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 10 页 - - - - - - - - - 康佳学院培训教材内部资料,请勿外传10 添加字符串资源文件,只需要先在CustStrList.txt 和 Ref_list.txt 中按照它们的格式,添加需要使用的
18、字符串资源,然后再在enum_list.h 中添加这些字符串资源的定义。其实这样还没结束,还需要在Res_xxx.c 中用ADD_APPLICATION_STRING2命令来添加需要使用的字符串。5.3 图片资源的添加图片资源的添加比较简单,首先是把需要使用的图片放在CustomerImages 目录下,最好 是 在 此 目 录 下 自 己 对 不 同 的 模 块 建 立 不 同 的 目 录 。 然 后 找 到 可 以 在 这 个CustomerCustResourceSCORPIO_MMIRes_MMI目录下找到相应模块的资源文件添加文件 Res_xxx.c ,使用函数ADD_APPLICA
19、TION_IMAGE2,把图片引入到程序中,其中图片 ID 需要自己定义。5.4 菜单资源的添加1.菜单资源的添加和图片文字不同,它不必从外界来引入别的文件,只需要用函数来指明各种菜单之间的父子兄弟关系。也是在Res_xxx.c中添加,菜单资源的添加函数ADD_APPLICATION_MENUITEM(args),其中的 args 包括 :1. 菜单名 2。其父菜单名。3。其子菜单的个数。4。依次列出其子菜单名。5。显示或隐藏参数可以取值(SHOW,HIDE )6。其他显示参数一,可以取值的都在枚举MOVEORFIXED中 规定了,常用的有MOVEA BLEA CROSSPARENT。 7 。 其 他 显 示 参 数 二 , 可 以 取 的 值 都 在 枚 举DISPATTRIBUTE中规定,DISP_LIST 是常用的参数。8。菜单中显示的字符串的资源ID 号。 9。菜单中的图片资源ID 号。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 10 页 - - - - - - - - -
限制150内