### MTK消息分发及窗口管理机制 #### 总体结构概述 MTK(MediaTek Inc.)消息分发及窗口管理机制是基于Pixtel Communications, Inc.开发的PIXTEL MMI(Mobile Man-Machine Interface)架构。随着Pixtel被MTK收购后,这一架构成为MTK产品线的重要组成部分。整体而言,MTK的MMI架构主要围绕消息驱动展开,通过不断从消息队列中提取并处理消息来完成各类任务。MMI主要与L4层交互,而L4层则负责封装底层硬件如处理器和驱动程序等。 #### 架构层次划分 - **Software Architecture (MTK)**: MTK的整体软件架构。 - **MMI Architecture**: 具体指明MMI架构如何嵌入到MTK的软件架构中。 #### 关键组件 - **Framework**: MMI的核心功能模块,负责消息管理和窗口管理等基础操作,支撑着整个MMI系统的运行。 - **消息管理 (EventHandler)**: 负责消息的接收、处理及调度。 - **窗口管理 (History Manager)**: 负责窗口的创建、更新和销毁等操作。 #### 消息分发详解 ##### 消息(事件)ID定义 消息类型的定义主要集中在以下几个文件中: - `adaptation\include\stack_msgs.h`: 定义了各种消息类型。 - `interface\mmi\mmi_sap.h`, `interface\ps\cc_sap.h`, `sms_sap.h`: 进一步细化了特定领域的消息类型。 - `plutommi\mmi\AsyncEvents\AsyncEventsInc\ProtocolEvents.h`: 对协议级别的消息进行了扩展定义。 消息类型通常以枚举类型`msg_type`表示,例如: ```c typedef enum { MSG_TYPE_A, MSG_TYPE_B, // ... } msg_type; ``` ##### 事件处理实现 事件处理的具体实现文件位于`plutommi\mmi\Framework\EventHandling\EventsSrc\Events.c`,其中包含初始化函数`InitEvents()`、`InitFramework()`以及`InitializeAll()`等,这些函数共同协作完成了事件处理系统的初始化工作。 在核心任务`MMI_task()`中,系统会持续循环地从消息队列中读取消息并处理。消息队列中的消息结构体定义在`adaptation\include\app_ltlcom.h`中,具体结构如下: ```c typedef struct ilm_struct { module_type src_mod_id; module_type dest_mod_id; sap_type sap_id; msg_type msg_id; local_para_struct *local_para_ptr; peer_buff_struct *peer_buff_ptr; } ilm_struct; ``` 这里的`local_para_ptr`指向了消息的具体参数。当系统调用消息处理函数时,仅传递这部分数据。具体的参数结构定义可在`ps\l4\include\mmi_msg_struct.h`中找到。 #### 消息队列操作 - **读取消息**: 使用`OslReadCircularQ()`函数从消息队列中读取下一个待处理的消息。实际调用的是`receive_msg_ext_q()`函数。 - **发送消息**: 使用`OslMsgSendExtQueue()`函数将消息发送至L4C消息队列。该操作通过`OslIntMsgSendExtQueue()`函数实现。 #### Framework提供的事件分类 Framework提供的事件大致可以分为四类: 1. **PS事件**: 用于底层和MMI之间的通信,此类事件具有唯一对应的消息ID和处理函数。 2. **Keypad事件**: 与键盘输入相关的事件。 3. **Highlight事件**: 主要涉及界面高亮显示等功能。 4. **Timer事件**: 与定时器相关的事件。 #### PS事件深入解析 PS事件是消息分发机制的核心,它通过消息分发表中的事件ID与相应的处理函数建立联系。当MMI任务从消息队列中取出一条消息时,会依据消息ID查找已注册的回调函数,并执行之。这一过程实现了事件与相应处理逻辑的绑定。 消息分发表是一个一维数组,每个元素都是`PseventInfo`类型的数据结构,包含事件ID和对应的处理函数指针。当新事件注册时,会在表中寻找一个空闲的位置存储该事件的信息;当需要处理事件时,则根据事件ID查询该表以获取相应的处理函数。 消息处理过程中还包括了一个简单的算法,确保每个事件被处理后,其在表中的位置会被向前移动,这一设计有助于优化后续事件的处理效率。 ### 总结 MTK的消息分发及窗口管理机制构建了一个高效且灵活的通信框架,它不仅支持不同层级间的通信,还能够有效地处理各类事件。通过对消息队列的操作和事件的分类管理,MTK确保了系统的稳定运行和用户体验的优化。
剩余13页未读,继续阅读
- 粉丝: 43
- 资源: 45
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助