技 术 文 件
技术文件名称:MTK --MMS
技术文件编号:
版 本:1.2
拟 制 2010-08-03
审 核
会 签
标准化
批 准
:
修改人 | 版本号 | 变更说明 | 修改日期 |
| V1.0 | Init |
|
| V1.1 | 补充模块通信内容 |
|
| V1.2 | 补充协议栈内容 | 2010.09.25 |
MTK—MMS
2.5 三方MMS应用集成事项和简单分析及性能评估... 18
3.8.1.1 示例: 进入OUTBOX查看某条MMS. 47
3.8.3.1 示例:TEMPLATE MMS的 OPTION菜单处理... 51
1 概要:
本文主要分两部分,第一部分介绍MMS的基本知识背景,让我们对改业务有个基本的认知,主要有基本知识介绍,网络架构介绍,协议栈架构介绍等相关知识点;第二部分是MTK平台使用的三方MMS应用的介绍,应用的架构介绍、实现方法、功能介绍以及日常工作的修改相关知识点。
2 基础知识:
2.1 基本介绍
MMS 是 Multimedia Messaging Service (多媒体消息服务) 的缩写,中文译为“彩信”,可以用于传送文字、图片、动画、音频和视频等多媒体信息。
手机终端合成多媒体消息后,可以向网内所有合法用户发送多媒体消息,由 MMSC ( 多媒体消息中心 )对消息进行存储和处理,并负责将消息在不同MMSC之间的进行传递转发,同时接收方用户可以从MMSC接收多媒体消息。
多媒体消息服务要求一个WAP网关,一个数据传输网(例如:电路交换网、GPRS 或者WCDMA等)和一个短消息中心。目前MMS业务在实现时是以WAP作承载,短消息作提示通知,由MMS手机自动到MMSC中去提取。 多媒体消息 的大小通常在几十K字节到上百K字节之间,这是由运营商和手机终端双方面决定的,目前中国大部分地区的手机仅支持小於50KB的多媒体信息(这个状态有更新,网络支持有变大,各手机平台仍有各自的大小限制)。
2.2 专业术语
MM Multimedia Message
MMS Multimedia Messaging Service
MIME Multipurpose Internet Mail Extensions
TLS Transport Layer Security, for details see [WP-TLS]
WAP Wireless Application Protocol
WIM WAP Identity Module, for details see [WIM]
WML Wireless Markup Language
WSP Wireless Session Protocol, for details see [WSP]
TLS Transport Layer Security,
S/MIME Secure/Multipurpose Internet Mail Extensions
TID Transaction identifier verification
SMIL Synchronized Multimedia Integration Language
SLS SMIL Service
IANA Internet Assigned Numbers Authority
SAR Segmentation and re-assembly
BRA Browser Application
BRS Browser Service
CDR Charging Data Record
DRM Digital Rights Management
OMA Open Mobile Alliance
OTA Over The Air
PDU Protocol Data Unit
MMT Master Message Table
MMSC Multimedia Messaging Service Center
MMSE Multimedia Messaging Environment
MMSEP MMS Encapsulation protocol
MSF Obigo Framework
TD Target Device
UC Use Case
UIA Unified Message Box Application
UIS Unified Message Identifier
WPS WAP2.0 Protocol service interface
MCR Message Create and Retrieval
MRC Message Re-Create
MV Message Viewer
SMA SMIL Application
MM Multimedia Message
CTK Category Toolkits
STK WAP/HTTP stack
CRH Content Routing Handler
ME Message Editor
MH Message Handling
DR Delivery Report
RR Read Report
TLS Transport Layer Security
TSL
SSL
IPC inter-process communication
RPC remote procedure call
MSM Mobile Suite Manager
MMSc MMS Client
MMC MMS Composer
MSC Message Sequence Chart
Srh Signal routing handler
Pm Progress meter
PH package handler
CR content routing
RPC remote procedure call
2.3 网络架构
<类比:以登山旅游类比,说明以不同角度宏观了解模块的重要性>
MMS是由OMA(Open Mobile Alliance)和3GPP( 3G Partnership Project)共同主持制定的工业标准,其旨在寻求一种与系统无关的、开放的,使各种应用和业务能够在全球范围内的各种终端上实现的多媒体消息通讯标准。
MMS运行在WAP协议层之上,它不局限于传输格式,既支持CSD(Circuit-Switched Data 电路交换数据格式),也支持GPRS格式(General Packet Radio Service 通用分组无线服务),以WAP为载体传送视频、图片、声音和文字。
OMA负责定义的相关协议关注“消息如何打包 ”的问题,3GPP负责定义的协议则关注“消息如何发送、路由和接收 ”的问题。
OMA的主要协议文档:
- Multimedia Messaging Service Architecture MMS架构概述;
- Multimedia Messaging Service Client Transactions 关于MMS客户端;
- Multimedia Messaging Service Encapsulation Protocol MMS封装协议;
3GPP的主要协议文档:
- (TS-22.140)Multimedia Messaging Service Stage 1 关于MMS服务层 ;
- (TS-23.140)Multimedia Messaging Service Stage 2 关于MMS功能描述;
- (TS-26.140)MMS Media formats and codes 关于MM支持的媒体格式和编码
MMS系统构成
网络拓扑:
< 摘自计算机科学报论文 >
WAP1.X拓扑
< 摘自OMA MMS规范文档 >
WAP2.X拓扑
< 摘自OMA MMS规范文档 >
MMSC(多媒体消息业务中心)是整个系统的核心,它完成对MM的存储和处理,包括消息的输入输出、地址解析、通知、报告等等,它由MMS中继服务器MMS Relay 、MMS Server、User DB、Message Store共同组成。
WAP网关,因为无线通信的带宽和传输能力有限,我们不能把有线网络的数据全部传输给无线网络,所以需要一个WAP网关实现数据转换和压缩,已经加密过程,保证数据能够在较低的传输速率和处理能力较差的无线终端上能正常显示,MMS使用WAP的WSP作为传输协议,因此需要一个WAP网关连接MMSC和无线WAP网络。
MMS Redirector(MMS重定向器):全网范围内会有若干个MMSC,它们的URL地址是唯一的,MMS重定向器就是负责发送者用户归属MMSC路由查询功能的网络实体 。
ENUM-DNS(号码域名解析器):解析接收方用户归属的MMSC的地址,接收MMSC发送的查询请求,查询接收者地址对应的归属MMSC的URI地址,并返回给MMSC,由MMSC将消息发往该用户归属MMSC服务器。
MMS系统接口
整个MMS业务系统的运转是所有相关网络功能实体的相互通讯协作来达成,MMS相关协议文档的主要功能之一,就是明确定义各网络功能实体之间相互通讯协作的标准接口,以下是相关接口的简要说明:
- MM1(MMS M ) 接口 :MMS Relay/Server 和MMS Client之间的接口 ;
- MM2(MMSS )接口:MMS Relay和MMS Server之间的接口;
- MM3接口:MMS Relay/Server 与外接应用服务器之间接口;
- MM4接口:不同MMSC之间交互的接口;
- MM5接口:MMS Relay/Server和HLR(Home Location Register)之间的接口; 注:HLR是一个中央数据库,其记录了每个移动电话用户使用GSM核心网络功能的授权信息;
- MM6接口:MMS Relay/Server 和MMS User DB之间交互的接口;
- MM7接口:MMS Relay/Server和MMS增值业务应用平台之间的接口;
- MM8接口:MMS Relay/Server与计费系统之间的接口;
MM1(MMSM )接口将是我们的学习重点,这是我们开发彩信应用程序必须要了解的规范知识。
MMS Client 业务模型(MMS Client Transaction Model)
以MM1接口为讨论范围,则MMS服务实现了MMS Client和MMS Proxy-Relay服务器之间的业务调用,业务(Transaction)特指信息的传递流程及方式,以其对MMS终端设备状态变化的影响。下面详述各种不同的与MMS Client 相关的业务类型:
- M-Send :MMS 客户端发送消息到MMS Proxy-Relay 服务器 ;
- M-Notification :MMS Proxy-Relay服务器发送通知到MMS 客户端;
- M-Retrieve :MMS 客户端从MMS Proxy-Relay服务器收取MM——多媒体消息;
- M-Forward :MMS 客户端向MMS Proxy-Relay服务器发送转发请求;
- M-Delivery :MMS Proxy-Relay服务器发送投送报告给MMS 客户端;
- M-Cancel :MMS Proxy-Relay服务器向MMS 客户端发送取消请求;
- M-Delete :MMS 客户端从MMS Proxy-Relay服务器上删除多媒体消息;
MMS消息格式及封装
SMS只能传输文本信息,每次最多140个字节,而MMS的传输内容要丰富的多,包括视频、图片、声音和文字等信息。在远程监视终端系统中主要是利用MMS传输文字和图片,图片格式为压缩后的JPEG格式。实现MMS也要比SMS复杂得多,MMS有自己的消息格式,并且为了减少传输的数据量,克服无线网络带宽窄、高延迟、稳定性差等特点,需要对传输的数据进行压缩。基本的压缩编码机制是由WAP-209- MMSEncapsulation定义的。发送和接收MMS的通信中,被传输的是MMSPDU(协议数据单元)。
在以上 业务模型的介绍中,通讯流程中的主体是 用于承载业务数据的PDUs(Protocol Data Units),本节将关注这些数据单元的基本机构、内容组成、封装编码等几个方面。 MMS PDU的内容类型(content-type)必须被指定为 application/vnd.-wap.mms-message ,用于被客户端准确识别。
基本结构
MMS PDU由消息头(Header)和消息体(Body)组成。Header具体描述了PDU的特定信息,Body是消息的具体内容(Body体是可选的)。大多数MMS PDU只含有 Header 域,用于建立和维持通信, Body体 只用在M-Send.req 和 M-Retrieve.conf 两个数据包中。
消息头(Header) 由一系列的域组成,包括PDU类型,接受方,发送方,发送时间等等。Header域中的项分为可选项和必选项,并且在编码MM头域时,X-Mms-Message-Type,X-Mms-Transaction-ID 和 X-Mms-MMS-Version必须位于MM头的最开始,而且要严格按照所列顺序,Content-Type头域必须在MMS头域的最后,其后为消息体,其它域的顺序可以随意安排。
消息体 ( Body ) 是多个不同类型的多媒体对象组成的,每个对象占据一个部分——Part(参见RFC2387标准),根据各个部分是否有序,消息的组装方式分为:
- .application/vnd.wap.multipart.mixed :所有的消息内容混合在一起,没有时间上的顺序,终端同一时间一次就把所有的消息内容显示出来。
- .application/vnd.wap.multipart.related :消息内容的各部分之间有一定的关系,该关系可能是显示时间上的先后,或者显示位置的不同,等等。这使得消息能够像“幻灯片”一样的显示。
消息体的内容组成
在application/vnd.wap.multipart.mixed类型的PDU中,仅包含有组成MM的所有多媒体内容,而在application/vnd.wap.multipart.related类型的PDU中还会包括Presentation —— 即消息内容的显示控制部分,该部分使用SMIL标记语言编写,用来描述MM中各部分的播放次序,显示/播放时间,结束时间以及在屏幕中 的 显示位置,等控制信息。
通常, Presentation部分是消息体的第一个part,若不是则必须使用start 字段指出其所在位置, Presentation部分并不会被显示出来,而仅仅是让终端根据它获取一些控制信息,这些信息决定了其它内容的显示大小、先后顺序、位置等。
最后 采用 MIME标准( Multipurpose Internet Mail Extensions - 多用途互联网邮件扩展 )将 完整的MM(包括: SMIL 、 文本、图像、声音、视频等 各个独立部分) 打包封装在一起,并发送。 MIME标准定义在RFC2045 、RFC2046 、RFC2047 、RFC2048 、RFC2049 等多个RFC标准之中。
MM的二进制编码封装
大多数情况下,MM都基于WAP协议进行传输,它将MMS PDU被封装在WSP/PDU之中 作为WSP的消息体进行传输,并采用WAP/WSP协议作为传输内容的二进制编码(binary encoding)机制,进行消息的封装(Encapsulation)。
在OMA-TS-MMS-ENC-V1_3-20080128-C.pdf文档所在规范中,详细定义了每个PDU所涉及的Header域和值,以及为它们分配的二进制码的一一对应关系。采用此二进制编码规范,节约了无线领域的带宽资源,并最优化其在空中传播的数据量。
具体对应关系请参阅相关文档。
MMS的收发过程
< 摘自OMA MMS规范文档 >
1. User activates MMS Client (assumed to be available on terminal).
2. User selects or enters MM target address(es).
3. User composes/edits MM to be sent.
4. User requests that MM is sent.
5. MMS Client submits the message to its associated MMS Proxy-Relay via the MMSM interface.
6. MMS Proxy-Relay resolves the MM target address(es).
7. MMS Proxy-Relay routes forward the MM to each target MMS Proxy-Relay via the MMSR interface.
8. The MM is stored by the MMS Server associated with the target MMS Proxy-Relay.
9. Target MMS Proxy-Relay sends a notification to target MMS Client via the MMSM interface.
10. Target MMS Client retrieves the MM from the MMS Server.
11. Target MMS Client notifies target user of new MM available.
12. Target user requests rendering of received MM.
13. Target MMS Client renders MM on target user’s terminal.
基于短消息承载的WAP PUSH流程
< 摘自计算机科学报论文 >
2.4 协议栈架构
WAP 1.X对等协议栈:
< 摘自计算机科学报论文 >
协议栈在客户端的架构:
General WAP Client Architecture
< 摘自OMA MMS规范文档 >
WAP2.0和WAP 1.X比较:
终端承载:
WAP2.0终端必须支持GPRS,同时支持电路交换数据(CSD)。默认采用GPRS方式,同时
将其作为菜单项可选或作为在非GPRS网络环境下的选择。WAP2.0协议考虑到对承载网络应具有前向兼容性。
传输协议:
WAP2.0 终端采用WTCP(wireless TCP)协议实现在有线和无线网络上有效地传输数据。
网络侧的协议栈要求必须支持WTCP 协议。
参见OMA规范WAP-225-TCP-20010331-a。
对于双协议栈终端, 还应该支持WTP WDP 具体参见原WAP 论坛规范SPEC-WTP-19990611。
安全层协议:
终端必须遵循WAP 论坛所规定的相关安传输安全层(TLS1.0)协议(RFC2246)。TLS
能够保证在WAP 上的两个应用间的保密、数据完整和鉴权。
对于双协议栈终端, 还应该支持WTLS 协议。
会话协议:
WAP2.0 终端使用WP-HTTP 作为会话协议
WP-HTTP 还应支持使用CONNECT 方式建立安全隧道,以用于端到端安全问题的解决。
WAP 终端应当支持内容编码。
对于双协议栈终端,还应该支持WSP。具体参见原WAP 论坛规范SPEC-WSP-19991105。
无线应用环境(WAE):
浏览器
WML 及其脚本语言
内容要求: 图片格式,声音、编码
2.5 三方MMS应用集成事项和简单分析及性能评估
2.5.1 注意事项:
1. 硬件处理能力的差异引起的嵌入式应用不同于PC应用的设计差异。
2. 进度和工作量的评估。由于设计方法、平台特征、平台稳定性等原因引起的PORTING的工作量和项目进度的有效评估。
3. MMS模块在项目开发中的关键路径位置(瓶颈)和技术支持需求。
4. 集成需要考虑的要素:
模块化设计
内存管理
定时器
各种API适配
GUI
系统消耗
2.5.2 接口清单:
- 三方软件的稳定性、质量、集成难度和工作量。
- 执行单元设计:线程、进程、资源互斥、状态机、同步和异步调用、API适配、队列、线程通信、进程通信相关
- 文件系统接口:接口适配
- DRAW MODEL:
UI WIDGET(三方软件和平台之间的适配关系)
INPUT(输入处理)
WINDOWS(三方软件和平台的设计方法)
- MEMORY:通用接口和系统API的设计原则,BUFFER的设计方法,内存溢出的调试方法、大内存消耗的处理方法
- 性能和响应:CPU处理能力、硬件加速、后台运行、任务时间片设计方法、算法、器件性能、异步和回调函数使用、TASK分解、进度条和动画以及中间状态方法使用、屏幕刷新方法
- 网络接口适配
- 应用生命周期:哪些可以及时卸载减少系统消耗,哪些需要常驻内存
- 触摸、鼠标等接口适配
- 声音接口适配
- 外部功能接口适配:如CAMERA/PHB/...
- 多语言
- 系统消耗:电量消耗、定时器、内存、ROM等系统资源消耗
2.5.3 简单介绍 (/ /性能分析):
Provider : P
Stable: S
Extend : E
Modification : M
Support : s
Rom:R
ram : r
Arch : A
Comm. : C
GUI_if : G
Mul_lang : m
P | S | E | M | s | R | r | A | C | G | m | … |
Obigo |
|
|
|
|
|
|
|
|
|
|
|
Jataayu |
|
|
|
|
|
|
|
|
|
|
|
ADI |
|
|
|
|
|
|
|
|
|
|
|
TI |
|
|
|
|
|
|
|
|
|
|
|
展讯 |
|
|
|
|
|
|
|
|
|
|
|
M-STAR |
|
|
|
|
|
|
|
|
|
|
|
Qualcomm |
|
|
|
|
|
|
|
|
|
|
|
茁壮 |
|
|
|
|
|
|
|
|
|
|
|
Android |
|
|
|
|
|
|
|
|
|
|
|
Symbian |
|
|
|
|
|
|
|
|
|
|
|
RIM |
|
|
|
|
|
|
|
|
|
|
|
Iphone |
|
|
|
|
|
|
|
|
|
|
|
Arcsoft |
|
|
|
|
|
|
|
|
|
|
|
Access |
|
|
|
|
|
|
|
|
|
|
|
… |
|
|
|
|
|
|
|
|
|
|
|
Obigo History:
Obigo Q 05a
Obigo Q 03C 1-2.0
MMS version 2.0.8 .3
Obigo Q 03C 1-1.0
MMS version 2.0.8 .3
Obigo Q03B1-1.0
MMS version 2.0.8 .3
2.6 可参考资料
[1] GPRS 移动终端规范-通用要求 中国移动通信集团公司
[2] GPRS 移动终端规范-MMS 分册(ZV 1.0.0 )中国移动通信集团公司
[3] GPRS 移动终端规范-通用要求 中国移动通信集团公司
[EFI] “Wireless Application Protocol, EFI Framework”, WAP-231-EFI, WAP Forum. URI:
http://www.openmobilealliance.org
[MMSCONF] “MMS Conformance Document, Version 1.3” , OMA-TS-MMS-CONF-V1_3, Open Mobile
AllianceTM. URI: http://www.openmobilealliance.org/
[MMSENC] “Multimedia Messaging Service, Encapsulation Protocol, Version 1.3” , OMA-TS-MMS- ENC,
Open Mobile AllianceTM. URI: http://www.openmobilealliance.org/
[MMSCTR] “Multimedia Messaging Service, Client Transactions, Version 1.3” , OMA-TS-MMS-CTR,
Open Mobile AllianceTM. URI: http://www.openmobilealliance.org/
[MMSRD] “MMS Requirements Document, Version 1.3” , OMA-RD-MMS-V1_3, Open Mobile
AllianceTM. URI: http://www.openmobilealliance.org/
[OMACP] “OMA Client Provisioning Enabler Release, Version 1.1” , OMA-Client_Provisioning-V1_1,
Open Mobile AllianceTM. URI: http://www.openmobilealliance.org/
[OMADM] “OMA Device Management Enabler Release, Version 1.1.2 ”, OMA-DM -V1_1_2, Open
Mobile AllianceTM. URI: http://www.openmobilealliance.org/
[OMADRM] “Digital Rights Management, Version 1.0” , OMA-Download-DRM-v1_0, Open Mobile
AllianceTM. URI: http://www.openmobilealliance.org/
[PKI] “Wireless Application Protocol, Public Key Infrastructure Definition”, WAP-217-WPKI, WAP
Forum. URI: http://www.openmobilealliance.org/
[RFC1869] “SMTP Service Extensions” http://www.ietf.org/rfc/rfc1869
[RFC1870] “SMTP Service Extension for message size declaration” http://www.ietf.org/rfc/rfc1870
[RFC1939] “Post Office Protocol – Version 3” , J. Myers, May 1996. URI:
http://www.ietf.org/rfc/rfc1939.txt
[RFC2060] “Internet Message Access Protocol – Version 4rev 1” , M. Crispin, December 1996. URI:
http://www.ietf.org/rfc/rfc2060.txt
[RFC2616] “Hypertext Transfer Protocol – HTTP/ 1.1” , R. Fielding et al., June 1999. URI:
http://www.ietf.org/rfc/rfc2616.txt
[RFC2633] “S/MIME Version 3 Message Specification.” URI: http://www.ietf.org/rfc/rfc2633.txt
[RFC2821] “Simple Mail Transfer Protocol”, J. Klensin, April 2001. URI:
http://www.ietf.org/rfc/rfc2821.txt
[SMIL] "Synchronized Multimedia Integration Language (SMIL 2.0)", W 3C Recommendation 07
August 2001. URI: http://www.w3.org/TR/smil20/
[SR0064] “Multimedia Messaging Service Stage 1, Requirements”, 3rd Generation Partnership Project 2,
S.R0064, URI: http://www.3gpp2.org/Public_html/specs/
[STIAD] “Standard Transcoding Interface Architecture”, Version 1.0, OMA-AD_STI-V1_0, Open
Mobile AllianceTM. URI: http://www.openmobilealliance.org/
[TS22140] “Multimedia Messaging Service: Service aspects; Stage 1” , 3rd Generation Partnership Project
TS 22.140 Release 6. URI: http://www.3gpp.org/ftp/Specs/
[TS23140] “Multimedia Messaging Service: Functional description; Stage 2” , 3rd Generation Partnership
Project TS 23.140 Release 6. URI: http://www.3gpp.org/ftp/Specs/
[TS32200] “Telecommunication Management: Charging Management: Charging Principles”, 3rd
Generation Partnership Project TS 32.200 Release 5. URI: http://www.3gpp.org/ftp/Specs/
[TS32235] “Telecommunication Management: Charging Management: Charging data description for
application services ”, 3rd Generation Partnership Project TS 32.235 Release 5. URI:
http://www.3gpp.org/ftp/Specs/
[TS32270] “Multimedia Messaging Service (MMS) Charging”, 3rd Generation Partnership Project TS
32.270 Release 6. URI: http://www.3gpp.org/ftp/Specs/
[UAPROF] “Wireless Application Protocol, User Agent Profile”, WAP-248-UAProf, WAP Forum. URL:
http://www.openmobilealliance.org/
[WAPARCH] “Wireless Application Protocol, Architecture Specification”, WAP-210-WAPArch, WAP
Forum. URL: http://www.openmobilealliance.org/
[WAPWAE] “Wireless Application Environment Overview”, WAP-190-WAE, WAP Forum. URI:
http://www.openmobilealliance.org
[WIM] “Wireless Application Protocol, Wireless Identity Module”, WAP-260-WIM, WAP Forum.
URI: http://www.openmobilealliance.org/
[WML] “Wireless Markup Language Specification”, WAP-155-WML, WAP Forum. URI:
http://www.openmobilealliance.org/
[WP-TLS] “Wireless Application Protocol, TLS Profile and Tunneling”, WAP-219-TLS, WAP Forum.
URL: http://www.openmobilealliance.org/
[WSP] "Wireless Application Protocol, Wireless Session Protocol Specification", WAP-203-WSP,
WAP Forum. URL: http://www.openmobilealliance.org
[WTLS] “Wireless Application Protocol, Wireless Transport Layer Security Specification”, WAP-261-
WTLS, WAP Forum. URL: http://www.openmobilealliance.org/
[XS0016200] “MMS Stage 2, Functional Description”, 3rd Generation Partnership Project 2, X.S0016-200.
URI: http://www.3gpp2.org/Public_html/specs/
3 MTK6223平台MMS:
(teleca Obigo q 03c 1-2.0)
3.1 基本功能:
MMS是一种消息服务类型,支持多媒体消息的编辑、发送、接收、存储、设置功能。
MMS支持发送TEXT、IMAGE、AUDIO/VIDEO、ATTACHMENT,
3.2 功能菜单树结构:
< 摘自MTK文档 >
3.3 技术规格:
在本项目中,平台支持的最大容量可以是50K,100K,可扩展为300K,或其他。
支持的MMS SPEC版本是V1.1,MMS规范版本目前有到MMS V1.3
TO:
CC: 20条,每条长度,格式(电话号码:数字,40个; EMAIL ADDR:数字和字母共60个)
BCC:
SUBJECT:40个字符
CONTENT:39KB,612 per slide
ATTACHMENT:
SLIDE: 帧数最大20, TIMER: 1--60
MMS number:90+10 //101
TEMPLATE:10
Profile:6个
Coding scheme:UTF-8, 能支持
3.4 平台MMS架构介绍:
< 摘自MTK文档 >
< 摘自MTK文档 >
< 摘自MTK文档 >
< 摘自MTK文档 >
3.5 进程、线程通信和模块状态机:
四元素:操作系统 (信号、任务调度、内存管理、定时器)
三个要点:协议分析 (信令流程、数据封装、进程通信)
3.5.1 目录介绍
< 摘自MTK代码工程 >
< 摘自MTK文档 >
3.5.2 状态机
< 摘自MTK文档 >
< 摘自MTK代码 >
3.5.3 信号处理流程
TASK信号队列处理:
< 摘自MTK文档 >
Framework运行环境:
void MSF_fsm(void)
…
if (MSF_MOD_IS_RUNNING(i) && (*msf_int_func_tbl[i].wantsToRun) ())
{
//DEBUG_PRINTF(MOD_MMI_WAP_L1,"shah: MSF_fsm111 =%d =%d %d/n",i,0,0);
MSF_SET_ACTIVE_MOD(i) (*msf_int_func_tbl[i].run) ();
run = KAL_TRUE;
}
模块运行环境:
msf_sig_q_tbl[ ]
msf_int_func_tbl[ ]
功能子模块运行环境:
通过轮询,各MODULE得到执行。
MEA:主要负责UI部分的功能操作的状态维护
mea_signal_func[]
mea_signal_queue_last
mea_signal_free_list
MEAc_run(void)
/* check the external message queue */
while(MSF_SIGNAL_RETRIEVE(MSF_MODID_MEA, meaSignalReceive))
;
/* Process one signal in the signal queue */
meaSignalProcess();
meaSignalReceive()函数会对SRC MODID做判断,决定处理流程。
MSM:主要负责各模块的状态维护
msm_signal_func[ ]
msm_signal_queue_first
msm_signal_sendto()
MSMc_run (void)
while (MSF_SIGNAL_RETRIEVE (MSF_MODID_MSM, msm_receive));
msm_signal_process ();
3.5.4 线程通信(模块间)
QUEUE:队列
msf_sig_q_tbl[ ]
msf_int_func_tbl[ ]
PIPE:管道
HDIa_pipeCreate()
HDIa_pipeOpen()
HDIa_pipeRead( )
HDIa_pipeWrite()
HDIa_pipeClose()
FILE:文件
3.5.5 TASK通信
“Virtual Task”.
TASK通信基本方法:
ilm_ptr = allocate_ilm(MOD_WAP);
SEND_ILM(MOD_WAP, MOD_MMI, WAP_MMI_SAP, ilm_ptr);
MMS相关TASK:
MMI
负责界面显示已经部分信令流程相关的处理。主要和WAP TASK通信
WAP
负责模块状态维护,信令交互处理。主要和MMI TASK和WPS TASK通信。
WPS
负责网络信令原语应答和数据封装处理。主要和WAP TASK和SOC通信。
SOC
负责更低一层的网络信令处理,主要和WPS和TCP通信。
TCP/IP
作为业务承载,主要和SOC层通信以及他本身的更下一层TASK通信。
3.5.6 模块启动过程
msm_start_module()
通过该函数启动模块,再进入模块的状态机机制,完成从启动过程的NULL状态依次到ACTIVE状态的转换,来启动模块。启动模块后,通过模块的处理函数进行响应信号的处理。
MSMa_createTask()
msf_int_func_tbl[ ]
msf_int_func_tbl[msfUid].wantsToRun = MEAc_wantsToRun;
msf_int_func_tbl[msfUid].run = MEAc_run;
msf_int_func_tbl[msfUid].kill = MEAc_kill;
MEAc_start();
实例可参见MMS进入主菜单部分启动MEA的过程。
3.6 数据结构介绍和分析:
通用WSP的协议数据封装结构:
通用MMS的数据封装结构:
< 摘自MTK文档 >
平台对消息数组的维护结构:
平台对消息预览的维护结构:
模块消息处理相关结构:
状态机相关结构:
TASK相关结构:
3.7 功能函数和调用流程介绍:
3.7.1 MENU的创建过程
handleMhOptionAction()
meaCreateMhNavMenu()
createMenuItems()
meaAddNavMenuItem()
meaShowNavMenu()
HDIa_widgetExtPaintDirectly()
3.7.2 功能MENU的增减
3.7.3 屏蔽BCC的显示处理
// 屏蔽BCC的显示处理:
meaMeCreatePropView()
meaMeSetPropertyValues()
3.7.4 RAM/ROM
Code RO Data RW Data ZI Data Debug Library Name
173576 20324 443 908637 101460 obigo03cadp.lib
282532 42616 517 10577 166480 obigo03capp.lib
774620 120033 1056 17139 418152 obigo03clib.lib
------------------------------------------------------------------------
1230728 182973 2016 936353 676092 Library Totals
------------------------------------------------------------------------
======================================================================
Total RO Size(Code + RO Data) 1413701 (1380.58kB)
Total RW Size(RW Data + ZI Data) 938369 (916.374kB)
Total ROM Size(Code + RO Data + RW Data) 1415717 (1382kB)
======================================================================
3.7.5 MMS SIZE/NUMBER
文件:maconf.c
meaConfMaxSizeSave()
initConfMaxSizeSave()
上面两组函数用来根据文件MEA_MAX_SIZE_FILE的值保存或读取来设置,映射MMS的大小。
文件:custom_wap_config.h
WAP_CUSTOM_CFG_MAX_MMS_MSG_SIZE
文件:custom_wap_cust_pack.c
mms_config_default[]
默认的配置信息,通过PERSO可控制MMS的大小
默认值初始化:
custpack_wap_default.mms_config_default = custpack_wap_header_ptr->mms_config_default;
void InitializeResourceVariables(void)
jrd_system_Initialize_load_resource();
Application_Initialize()
3.7.6 网关设置相关
文件:
isdm_value.h
nvram_common_config.c
nvram_cust_pack.c
nvram_common_config.c
custpack_tbl
NVRAM_EF_WAP_PROF_MMS_PROFILE_CONTENT_LID
NVRAM_EF_WAP_PROF_MMS_SIM1_PROFILE_NAMES_LID
nvram_cust_pack.c
NVRAM_EF_WAP_PROF_MMS_PROFILE_CONTENT_DEFAULT[]
isdm_U10Q_GPRS_DUAL.plf
MMS_PROFILE_0_DEFAULT_CONTENT
3.7.7 IMAGE RESOLUTIONS
3.7.8 status icon图标处理
相关函数
show_status_icons()
widget_config_mms_icon()
mms_set_indicator()
3.7.8.1 示例:send过程对图标的处理
mms_set_indicator(int 64) line 6167
mmsUpdateIndicator() line 3788 + 15 bytes
MMSa_progressStatus(MmsProgressStatus * 0x06e1fdb8) line 377
replyProgressStatus(unsigned char 0, unsigned char 3, unsigned long 56, unsigned long 286, unsigned long 286, unsigned long * 0x 0465461c ) line 979 + 9 bytes
cohPostProgressStatus(CohPostInstanceData * 0x04654580, unsigned char 3) line 706 + 51 bytes
writePipe(long 0, int 0) line 2255 + 11 bytes
handleAsyncRead(long 1283873161, int 0, unsigned long 286) line 1229 + 19 bytes
cohPostMain(MmsSignalStruct * 0x04653af0) line 813 + 26 bytes
mSignalProcess() line 209 + 9 bytes
MMSc_run() line 302
MSF_fsm() line 1350 + 29 bytes
wap_fsm(ilm_struct * 0x06e1ff54) line 2699
wap_task_main(task_entry_struct * 0x 036c 2d04) line 3001 + 9 bytes
MODIS! 0064ab 1a () line 347 + 15 bytes
_threadstartex(void * 0x04deb760) line 212 + 13 bytes
KERNEL32! 7c 80b729()
3.7.9 EVENTBAR处理
文件:
mmiEventBar.h
mmiEventBar.c
图片路径:/MainLCD/IdleScreen/Statusicons
相关代码:
case EVENT_MMS:就是处理EVENTBAR的相关部分,在MMS部分主要有两点要处理:
1> 未读MMS的数目
2> 进入INBOX的入口函数
3.8 MENU操作和调用流程介绍:
3.8.1 查看MMS
3.8.1.1 示例: 进入OUTBOX查看某条MMS
meaViewer() // MEA_SIG_MV_ACTIVATE u_param1=6
meaSrhGetMessageInfo()
发送信号给MOD_MMS,并将响应信号加入到内部处理数组
meaViewer() // MEA_SIG_MV_GET_MSG_TYPE_RSP u_param1=6
handleActivate() //
meaStartMr()
meaViewer() // MEA_SIG_MV_MR_DONE MEA_STARTUP_MODE_MENU
meaViewer() // MEA_SIG_MV_PROP_OK MEA_MR_SMIL
meaViewer() // MEA_SIG_MV_VIEW_SMIL
meaPlaySmil() // à MSF_MODID_SMA MEA_SIG_CORE_SMA_STARTED_PLY
meaModuleStart()
msf_module_start()
msm_main( ) // MSM_MAIN_SIG_START_MODULE
msm_start_module
MODULE_STATUS_NULL
MSMa_createTask()
3.8.2 MMS编辑
/u8_mmi/vendor/wap/obigo_Q 03C /v1_official/modules/MEA/source/mauime.c
meaMeCreatePropView()
进编辑内容
MEA_SIG_SE_ACTIVATE
MEA_SIG_SE_NAV_MENU_DEACTIVATE
按OPTION来PREVIEW
MEA_SIG_SE_NAV_MENU_ACTIVATE
MEA_SIG_SE_PREVIEW_SMIL
MEA_SIG_SE_NAV_MENU_DEACTIVATE
MEA_SIG_MH_UPDATE_FOLDER
MEA_SIG_SE_PREVIEW_SAVE_DONE
MEA_SIG_MH_FOLDER_LIST_RESPONSE
// 短彩合一的处理流程,不适用于短彩分离
1
MEAif_createMessage(unsigned char 0) line 72
wap_fsm(ilm_struct * 0x06b6ff54) line 2435 + 7 bytes
wap_task_main(task_entry_struct * 0x036edba4) line 2955 + 9 bytes
MODIS! 0064365a () line 347 + 15 bytes
2
MEAc_run() line 137
MSF_fsm() line 1346 + 29 bytes
wap_fsm(ilm_struct * 0x06b6ff54) line 2654
wap_task_main(task_entry_struct * 0x036edba4) line 2955 + 9 bytes
MODIS! 0064365a () line 347 + 15 bytes
3
handleStartup(const int 2, unsigned long 0) line 1026 // MEA_SIG_ME_MR_START
meaMeSignalHandler(MeaSignalStruct * 0x0463ccf0) line 1460
meaSignalProcess() line 199
MEAc_run() line 152
MSF_fsm() line 1346 + 29 bytes
wap_fsm(ilm_struct * 0x06b6ff54) line 2654
wap_task_main(task_entry_struct * 0x036edba4) line 2955 + 9 bytes
MODIS! 0064365a () line 347 + 15 bytes
4
…
5
widget_paint_area(widget_header_struct * 0x04635be0, MsfSize {...}, MsfPosition {...}) line 3030
widget_MMI_paint_hdlr() line 3630 + 23 bytes
mmiapi_remote_proc_call_req(mmiapi_remote_proc_call_struct * 0x036bf4fc, int 77) line 514 + 5 bytes
mmi_frm_execute_current_protocol_handler(unsigned short 5269, void * 0x036bf4fc, int 77, void * 0x0636ff54) line 437 + 17 bytes
ProtocolEventHandler(unsigned short 5269, void * 0x036bf4fc, int 77, void * 0x0636ff54) line 2736 + 22 bytes
MMI_task(task_entry_struct * 0x036ec094) line 2354 + 22 bytes
MODIS! 0064365a () line 347 + 15 bytes
// 编辑窗口数据准备
meaMeCreatePropView(MeaPropItem * 0x04638118, int 2) line 859
handleStartupMode(MeaMeInstance * 0x 0463a 660, int 8, int 3) line 884 + 21 bytes
meaMeSignalHandler(MeaSignalStruct * 0x0463b458) line 1677 + 13 bytes
meaSignalProcess() line 220 + 9 bytes
MEAc_run() line 152
MSF_fsm() line 1348 + 29 bytes
wap_fsm(ilm_struct * 0x06b6ff54) line 2687
wap_task_main(task_entry_struct * 0x036ee 8a 4) line 2989 + 9 bytes
MODIS! 0064365a () line 347 + 15 bytes
_threadstartex(void * 0x04d3bda0) line 212 + 13 bytes
KERNEL32! 7c 80b729()
这个栈在WAP TASK收到信号获得控制权,通过函数数组msf_int_func_tbl[ ],执行到MEAc_run(),再在MEA里执行函数数组mea_signal_func[ ]里对应的函数meaMeSignalHandler() // MEA_SIG_ME_MR_START,
3.8.3 菜单按键
3.8.3.1 示例:TEMPLATE MMS的 OPTION菜单处理
3.8.3.1.1 //按VIEW后的OPTION,得保存的界面
createSlideMenu(SmaPlayerInfo * 0x033af5e8 smaInfo) line 1323
handleSlideFormAction(unsigned long 74444972, SmaPlayerInfo * 0x033af5e8 smaInfo) line 2639 + 9 bytes
widgetActionHandler(unsigned long 74444972, unsigned long 74458436, SmaPlayerInfo * 0x033af5e8 smaInfo) line 2573 + 13 bytes
smaWidgetSignalHandler(unsigned short 9, void * 0x 04702a 70) line 804 + 24 bytes
smaReceiveExtSignal(unsigned char 0, unsigned short 9, void * 0x 04702a 70) line 373 + 14 bytes
msf_signal_retrieve(unsigned char 10, void (unsigned char, unsigned short, void *)* 0x00d6ffb0 smaReceiveExtSignal(unsigned char, unsigned short, void *)) line 1277 + 27 bytes
SMAc_run() line 156 + 12 bytes
MSF_fsm() line 1350 + 29 bytes
wap_fsm(ilm_struct * 0x06e2ff54) line 2687
wap_task_main(task_entry_struct * 0x036d3e 1c ) line 2989 + 9 bytes
MODIS! 0064ab 1a () line 347 + 15 bytes
_threadstartex(void * 0x04dfb760) line 212 + 13 bytes
KERNEL32! 7c 80b729()
3.8.3.1.2 // 按保存AUDIO
handleSlideMenuAction(unsigned long 74458056, SmaPlayerInfo * 0x033af5e8 smaInfo) line 3048
widgetActionHandler(unsigned long 74458056, unsigned long 74459176, SmaPlayerInfo * 0x033af5e8 smaInfo) line 2569 + 13 bytes
smaWidgetSignalHandler(unsigned short 9, void * 0x 04702a 70) line 804 + 24 bytes
smaReceiveExtSignal(unsigned char 0, unsigned short 9, void * 0x 04702a 70) line 373 + 14 bytes
msf_signal_retrieve(unsigned char 10, void (unsigned char, unsigned short, void *)* 0x00d6ffb0 smaReceiveExtSignal(unsigned char, unsigned short, void *)) line 1277 + 27 bytes
SMAc_run() line 156 + 12 bytes
MSF_fsm() line 1350 + 29 bytes
wap_fsm(ilm_struct * 0x06e2ff54) line 2687
wap_task_main(task_entry_struct * 0x036d3e 1c ) line 2989 + 9 bytes
MODIS! 0064ab 1a () line 347 + 15 bytes
_threadstartex(void * 0x04dfb760) line 212 + 13 bytes
KERNEL32! 7c 80b729()
3.8.3.1.3 // 按播放
mmi_fmgr_audio_play_hdlr() line 3743
fmgr_da_entry_options_handler(unsigned short 3208, unsigned short 3209, unsigned int 1, unsigned short 27, void (void)* 0x 00a 2306b mmi_fmgr_audio_play_hdlr(void)) line 2474 + 5 bytes
fmgr_option_key_hdlr(unsigned short 27) line 842 + 36 bytes
fmgr_option_lsk_hdlr() line 856 + 7 bytes
execute_softkey_function(int 1, int 0) line 1125 + 18 bytes
left_softkey_up() line 1511 + 9 bytes
ExecuteCurrKeyHandler(short 42, short 1) line 2737 + 5 bytes
KeyEventHandler(KEYBRD_MESSAGE * 0x0652fe40) line 4336 + 21 bytes
ProcessKeyEvent(unsigned int 1, unsigned short 18) line 2166 + 9 bytes
mmi_frm_convert_process_key_event(unsigned int 1, unsigned short 18) line 2939 + 14 bytes
mmi_frm_key_handle(void * 0x03682d08) line 3179 + 15 bytes
mmi_frm_execute_current_protocol_handler(unsigned short 2490, void * 0x03682d08, int 16, void * 0x0652ff54) line 437 + 17 bytes
ProtocolEventHandler(unsigned short 2490, void * 0x03682d08, int 16, void * 0x0652ff54) line 2733 + 22 bytes
MMI_task(task_entry_struct * 0x036d2130) line 2351 + 22 bytes
MODIS! 0064ab 1a () line 347 + 15 bytes
_threadstartex(void * 0x04df9440) line 212 + 13 bytes
KERNEL32! 7c 80b729()
3.8.4 MMS主菜单
// 进入MMS列表菜单 (双卡项目流程)
Res_Messages.c
PopulateMessagesResData()
ADD_APPLICATION_MENUITEM((MAIN_MENU_MESSAGES_MENUID,
……
MESSAGES_MENU_SMS_MENUID
MESSAGES_MENU_MMS_MENUID
……
ADD_APPLICATION_MENUITEM_HILITE_HANDLER(MESSAGES_MENU_MMS_MENUID, HighlightMMSHandler);
goto_mms_screen()
MSG_ID_MEA_STARTUP_REQ à MOD_WAP
wap_fsm // MSG_ID_MEA_STARTUP_REQ=0x 1A 03 wap_action=0 0
MSMc_startModule() // modid=8 à MSM_MAIN_SIG_START_MODULE
msm_main() // type=17
msm_start_module() // msm_module_t.status=0=null content_send=0
MSMa_createTask()
MEAc_start()
meaInit(FALSE)
msf_module_is_created() // MEA->MSM MSF_SIG_MODULE_STATUS
msm_main() // type=20
(msf_module_status_t.status=created msm_module_t.status=standby)
msm_execute_commands()
// MSMàMEA MSF_SIG_MODULE_EXECUTE_COMMAND
MSF_SIG_CONTENT_SEND_ACK
MEAc_run()
MeaSignalReceive() // src_module=0
msfSignalHandler() // signal=4 MSF_SIG_MODULE_EXECUTE_COMMAND
// MEA_STARTUP_MODE_NONE
MeaSetStartupParameters()
parseCommandLine() // MEA_STARTUP_MODE_MENU
meaActivateStartupFsm()
meaCreateMhStartupMenu()
3.8.5 TEMPLATE列表和按键操作
// 进入TEMPLATE的处理流程
// 创建列表实例,并发送获取列表信息的消息
meaGetFolderList(MeaMhFolderInfo * 0x0464fcd8, int 16) line 383
meaMhSignalHandler(MeaSignalStruct * 0x046547e4) line 1224 + 18 bytes
meaSignalProcess() line 220 + 9 bytes
MEAc_run() line 163
MSF_fsm() line 1350 + 29 bytes
wap_fsm(ilm_struct * 0x06e1ff54) line 2699
wap_task_main(task_entry_struct * 0x 036c 2a 04) line 3001 + 9 bytes
MODIS! 0064ab 1a () line 347 + 15 bytes
_threadstartex(void * 0x04deb760) line 212 + 13 bytes
KERNEL32! 7c 80b729()
// 得到列表响应 MEA_SIG_MH_UM_GET_UNREAD_MSG_LIST_RESPONSE
(通过获取到的数据,进行显示窗口的创建,按键注册,窗口显示,最终完成列表的显示,主要的工作在CTK窗口创建和显示部分,HDIa_widgetExtCreateListMenuByValue(),meaDisplayWindow())
updateView(MeaMhFolderInfo * 0x0464fcd8, int 16, int 0) line 2503
meaMhSignalHandler(MeaSignalStruct * 0x046547e4) line 1441 + 20 bytes
meaSignalProcess() line 220 + 9 bytes
MEAc_run() line 163
MSF_fsm() line 1350 + 29 bytes
wap_fsm(ilm_struct * 0x06e1ff54) line 2699
wap_task_main(task_entry_struct * 0x 036c 2a 04) line 3001 + 9 bytes
MODIS! 0064ab 1a () line 347 + 15 bytes
_threadstartex(void * 0x04deb760) line 212 + 13 bytes
KERNEL32! 7c 80b729()
PREVIEW结束后按退出
MEA_SIG_SE_PREVIEW_DONE
MEA_SIG_SE_NAV_MENU_DEACTIVATE
点击存为模板
MEA_SIG_MH_UPDATE_FOLDER
MEA_SIG_MH_FOLDER_LIST_RESPONSE
3.8.6 MMS初始化
3.8.7 MMS退出
3.8.8 MMS保存
3.8.9 MMS删除
3.8.10 MMS下载应用流程
3.8.11 MMS发送应用流程
3.8.12 MMS接收应用流程
3.9 信令流程分析:
3.9.1 启动过程
// MEA Startup
3.9.2 接收过程
// 彩信接收MSC (接收彩信后自动下载全文)
3.9.3 发送过程
3.10 相关注意事项:
3.10.1 中断事件:
3.11 Widget:
3.11.1 widget Overview
< 摘自MTK文档 >
3.11.2 widget初始化
void wap_init_framework(void)
widget_init();
meaInitGui()
meaInitWidgetSignalHandler()
3.11.3 widget函数处理调用流程
// Widget窗口创建处理(新建MMS,ITEM LIST界面)
模块的窗口创建函数MSF_BOOL meaMeCreatePropView(),它的工作有:
CTK窗口创建过程widget_ctk_screen_create(),其中定义了通用的窗口处理函数;按键处理函数ctk_screen_add_inline_Done_UA();
LAYOUT结构初始化;
把显示项按display_create结构添加到LAYOUT结构里面;将LAYOUT关联到CTK窗口ctk_screen_attach_layout();
把MSF窗口关联到CTK窗口HDIa_widgetCtkCreate();
把WIDGET CTK窗口添加到通用的窗口及事件处理函数数组里面,让窗口接收模块的通用处理过程,meaAddWidgetList();
进行CTK窗口显示meaDisplayWindow(),这个主要的显示函数分两部分,HDIa_widgetScreenAddWindow ()完成将window加入到screen的处理列表里面;HDIa_widgetSetInFocus(),则进行具体控件的绘制工作,它逐层次调用下面的处理函数, widget_paint (),widget_paint_hdlr (),widget_MMI_paint_hdlr (),widget_paint_area(), widget_paint_object(), widget_paint_menu(),上面是一系列的封装和模块化处理函数,最终是调用平台的接口函数进行各显示组件的绘制;
HDIa_widgetExtPaintDirectly(),在数据没改变的时候能启用定时刷新进行界面刷新。
3.12 WAP相关简介:
3.12.1 任务创建
custom_wap_create() //Syscomp_tasks_create_func.c
wap_task_main()
wap_init()
任务创建时初始化1
wap_init()
wapadp_mem_init();
MSM_init(); /* Mainly for wap_ctrl_mutex */
3.12.2 任务运行
wap_task_main() // Wap_create.c
// 运行时初始化2
/* 任务运行时的初始化,主要时初始化OS相关的部分,
包括队列、MEMORY、TIMER、SOCKET、PIPE、FILE等等*/
wap_init_framework()
wapadp_mem_init_pool(WAP_MEM_POOL);
初始化内存分配结构
总内存大小wap_global_mem=354KB=250app+100sys+4spare
MSM_init(); // 变量和定时器初始
HDI_signalQueueInit(); // msf内部队列初始为空
HDIa_socketInit();
HDIa_pipeInit();
HDI_fileInit();
widget_init();
3.12.3 队列和内部数据管理:
队列
msf_sig_q_tbl[]
MSF_NUMBER_OF_MODULES个MOD共用的队列数组,MSM有50个队列,其他模块只有25个,按MODID存储并处理。信号在不同MOD间发送和接收,就是把信号在不同队列中插入和取出。并通知MOD去处理自己的内部队列。
wap_int_q_array[]
内存 wap_mem.c
wap_mem_pool、wap_spare_mem
3.12.4 变量:
3.12.5 内存管理:
external mode
internal mode
3.12.6 初始化:
初始化3
MSF_start()
* * MSF_start() is called after wap_init() but before wap_fsm()
* * recover or backup important configuration files here
// 主要是处理各种文件
MSMc_startMobileSuite()
msm_start() // MSM的SIG、TIMER、REGISTRY、CMMN的初始化,并发出内部事件MSM_REGISTRY_SIG_RUN
// ….
wap_fsm() // msg_id = bee
//
msm_start_module() // MODULE_STATUS_NULL
MSMa_createTask() // 依次创建了 1,3,4,5,6,7,8,11,13,14,15(STATUS=NULL)
//
MSM_MAIN_SIG_MODULE_STATUS
msm_module_status()
…..
//
MEAc_run()
//
wap_fsm() // MSG_ID_WAP_STATUS_UPDATE_IND wap_action=0, wap_status=0
//
wap_ready_callback_func()
widget_validate_MMI_RPC()
mmiapi_remote_proc_call_req()
// 初始化4
msm_start_module()
MSMa_createTask()
MEAc_start()/ coreSignalHandler()
meaInit()
meaMeInit()
3.13 其他:
3.13.1 初始化
MSG_ID_MMI_EQ_POWER_ON_IND
MSF initialization
MSF_start()
MSM_startMobileSuite()
3.13.2 mea初始化
meaInit()
/* Init internal signal queue*/
meaSignalInit();
/* Init the UI */
meaInitGui();
/* Init all FSMs */
if (!meaAsyncInit())
{
meaPanic(TRUE);
}
meaCoreInit(internalOnly);
meaConfInit(); // 清空数据结构,并向mea_signal_func[]注册meaConfig()
meaMhInit();
meaMvInit();
meaInInit();
meaMeInit();
meaSeInit();
meaMmeInit();
meaMmvInit();
meaMobInit();
meaCrhInit();
meaCommInit();
meaMcrInit();
meaMrInit();
meaPbhInit();
meaCthInit();
meaSrhInit();
mtrCtrlInit();
/* Packages */
if (!meaPhInit())
{
meaPanic(TRUE);
}
// 其中meaInitGui初始化
void meaInitGui()
{
DEBUG_PRINTF(MOD_MMI_WAP_L4,"shah: meaInitGui =%d %d %d/n",0,0,0);
meaScreenHandle = MSF_WIDGET_SCREEN_CREATE(MSF_MODID_MEA, 1, 0);
/* Initiate widget signal handler */
meaInitWidgetSignalHandler();
/* Init the progress meter */
meaInitPm();
/* Init the dialog handling */
meaInitDia();
/* Init input form handling */
meaInitForms();
/* Init the menu handling */
meaInitNavMenu();
/* Message handler */
meaMhUiInit();
/* Config */
meaConfigUiInit();
/* Message viewer */
meaMvUiInit(); // MV UI 初始化处理
/* Message editor */
meaMeUiInit();
/* SMIL editor */
meaSeUiInit();
/* Incoming notifications */
meaInUiInit();
/* The Multipart/Mixed viewer */
meaMmvUiInit();
/* The Multipart/Mixed editor */
meaMmeUiInit();
/* The color selector */
meaColorSelectorInit();
}