Application layer: 包含用户定义的应用程序
Framework layer: 包含消息处理和事件操作。。
UI Layer: 包含ui相关联的函数
MMI Queue: 协议栈/L4将事件写入其中,MMI Task从中读取事件。
L4/NS Queue: MMI Task将事件写入其中,L4 task/Network Simulator从中读取事件。
MMI Task执行流程:
1. 等待消息事件发送给MMI 队列
2. MMI 队列中的消息由协议占发送
3. Framework层执行事件。
4. Framework层出发应用层的回调函数
应用层对接收事件做出回应
(以按键事件为例子)
说明:
1. 协议占向MMI Queue中写入事件
2. MMI Task从MMI Queue中读取
Framework层为最新注册事件调用回调函数
应用层接收到按键事件并做出回应
(应用程序发送播放声音请求)
说明:
1.应用层向framework层发送请求,使其向L4队列传送信息
2.Framework将消息写入L4队列
3.L4从L4队列中读取事件并播放请求的声音
1. 为应用程序提供事件句柄API来管理事件句柄
键盘事件句柄API
协议事件句柄API
Misc.Handlers
- Exit Handlers
Set Exit handlers for particular screen
Execute Exit handler for current screen
Clear Crrent Exit Handler
2. History API
3. Queue API
- Create Queue
oslMsgqid OslIntCreateMsgQ(PS8 queue_name,U32 max_msg_size,U32 max_msgs)
- Write to Queue
OSLSTATUS OslIntWriteMsgQ(oslMsgqidmsgqid,void *msgPtr,U32 msgSize, OSLWAITMODE wait_mode)
- Read from Queue
OSLSTATUS OslIntReadMsgQ(oslMsgqidmsgqid,void *msgPtr, U32 *msgSize,OSLWAITMODE wait_mode)
2. 窗口函数
Function to enter : void ShowCategoryXScreen(argument list);
Function to exit : void ExitCategoryXScreen(void);
Function to get the size of history : BYTE* GetCategoryXHistory(BYTE* buffer);
Function to get the history : INT GetCategoryXHistorySize(void);
ShowCatagoryXXXScreen
注册事件句柄
预处理UI元素
- 调用重绘函数
RedrawCategoryXXXScreen
- 使用GDI函数绘制窗口
ExitCategoryXXXScreen
- 重新设置函数指针
其他操作依据不同的窗口而定
GetCategoryXXXHistorySize
- 用来返回gui buffer和input buffer的大小
GetCategoryXXXHistory
- 用来返回gui buffer和input buffer的数据
GetCategoryXXXData
- 用来返回input buffer
- 改变softkey labels
Void ChangeLeftSoftkey(STRING_ID s,IMAGE_ID i);
Void ChangeRightSoftkey(STRING_ID s, IMAGE_ID i);
- 改变softkey functions
Void SetLeftSoftkeyFunction(void(*f)(void),KEY_EVENT_TYPE k);
Void SetRightSoftkeyFunction(void(*f)(void),KEY_EVENT_TYPE k);
- 在菜单中获得高亮显示项
INT GetHighlightedItem(void);
- 设置高亮显示效果
Void SetHighlightedItem(INT item_index);
- 注册高亮显示句柄
Void RegisterHighlightHandler(void(*fptr)(INT item_index));
- 移除高亮显示句柄
Void ClearHighlightHandler(void);
书写应用程序
- 资源
在PixtelDataTypes.h中定义APP_BASE
定义各种资源 ID
Screens
Strings
Images
Menu Items (GlobalMenuItem.h)
书写资源生成函数
Resource Generator(PopulateRes.c)调用
使用宏定义ADD_APPLICATION_XXX
修改ResGenerator的”Makefile”和”readexcel.c”
- Make file
在make file中添加关键宏定义
在 MMI_features$Proj.h中添加feature macro
添加库文件(COMPOBJS)
添加编译列表
创建目录 in mcu/make
添加目录名到CUS_REL_SRC_COMP
- Initialization
初始化函数
1. InitializeAll(Not all)
在现有工程主要工作:
<1.> ADD_APPLICATION (AddApp函数)在framework中来添加新的
应用程序。
void AddApp(U32 nId, S8 *pName, U16 nMinId, U16 nMaxId)
<2.> PopulateXXX :为各个应用程序加载其各种资源(字符串,图片,菜单项)
2. 初始化各种事件句柄
高亮显示句柄
协议事件句柄
- Entry and Exit
标准入口函数
调用执行当前的退出句柄
获得当前窗口的GUI buffer
获得窗口显示元素
注册高亮显示句柄
调用窗口函数绘制窗体
设置退出句柄
标准出口函数
创建History 节点
将入口函数保存入History节点中
填充输入buffer和History 节点中的GUI buffer
保存history
高亮句柄
改变左键和右键句柄