MMS-MTK-Obigo03c

 

 

 

 

     

 

 

 

技术文件名称:MTK --MMS

                技术文件编号:

                        1.2

 

 

 

                                        2010-08-03       

                                                    

                                                    

                                                        

                                                        

                                                        

                             标准化                     

                                                    

 

 

 

 

 

 

 

修改人

版本号

变更说明

修改日期

 

V1.0

Init

 

 

V1.1

补充模块通信内容

 

 

V1.2

补充协议栈内容

2010.09.25

 

 

 

 

 

MTKMMS

1     概要:... 5

2     基础知识:... 5

2.1      基本介绍... 5

2.2      专业术语... 5

2.3      网络架构... 8

2.4      协议栈架构... 16

2.5      三方MMS应用集成事项和简单分析及性能评估... 18

2.5.1       注意事项:... 18

2.5.2       接口清单:... 19

2.5.3       简单介绍  (/ /性能分析)... 20

2.6      可参考资料... 21

3     MTK6223平台MMS... 24

3.1      基本功能:... 24

3.2      功能菜单树结构:... 24

3.3      技术规格:... 25

3.4      平台MMS架构介绍:... 26

3.5      进程、线程通信和模块状态机:... 29

3.5.1       目录介绍... 29

3.5.2       状态机... 30

3.5.3       信号处理流程... 32

3.5.4       线程通信(模块间)... 35

3.5.5       TASK通信... 36

3.5.6       模块启动过程... 38

3.6      数据结构介绍和分析:... 38

3.7      功能函数和调用流程介绍:... 40

3.7.1       MENU的创建过程... 40

3.7.2       功能MENU的增减... 40

3.7.3       屏蔽BCC的显示处理... 40

3.7.4       RAM/ROM.. 42

3.7.5       MMS SIZE/NUMBER. 43

3.7.6       网关设置相关... 43

3.7.7       IMAGE RESOLUTIONS. 45

3.7.8       status icon图标处理... 45

3.7.8.1    示例:send过程对图标的处理... 45

3.7.9       EVENTBAR处理... 46

3.8      MENU操作和调用流程介绍:... 47

3.8.1       查看MMS. 47

3.8.1.1    示例: 进入OUTBOX查看某条MMS. 47

3.8.2       MMS编辑... 48

3.8.3       菜单按键... 51

3.8.3.1    示例:TEMPLATE MMS OPTION菜单处理... 51

3.8.4       MMS主菜单... 54

3.8.5       TEMPLATE列表和按键操作... 55

3.8.6       MMS初始化... 57

3.8.7       MMS退出... 57

3.8.8       MMS保存... 57

3.8.9       MMS删除... 57

3.8.10     MMS下载应用流程... 57

3.8.11     MMS发送应用流程... 57

3.8.12     MMS接收应用流程... 57

3.9      信令流程分析:... 58

3.9.1       启动过程... 58

3.9.2       接收过程... 59

3.9.3       发送过程... 60

3.10           相关注意事项:... 60

3.10.1     中断事件:... 60

3.11     Widget... 61

3.11.1     widget Overview.. 61

3.11.2     widget初始化... 61

3.11.3     widget函数处理调用流程... 62

3.12    WAP相关简介:... 62

3.12.1     任务创建... 63

3.12.2     任务运行... 63

3.12.3     队列和内部数据管理:... 64

3.12.4     变量:... 64

3.12.5     内存管理:... 64

3.12.6     初始化:... 64

3.13           其他:... 66

3.13.1     初始化... 66

3.13.2     mea初始化... 67

 


 

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的主要协议文档:

 

3GPP的主要协议文档:

 

MMS系统构成

网络拓扑:

                             < 摘自计算机科学报论文 >

 

WAP1.X拓扑

                           < 摘自OMA MMS规范文档 >

 

WAP2.X拓扑

 

                           < 摘自OMA MMS规范文档 >

 

 

MMSC(多媒体消息业务中心)是整个系统的核心,它完成对MM的存储和处理,包括消息的输入输出、地址解析、通知、报告等等,它由MMS中继服务器MMS Relay MMS ServerUser DBMessage Store共同组成。

 

WAP网关,因为无线通信的带宽和传输能力有限,我们不能把有线网络的数据全部传输给无线网络,所以需要一个WAP网关实现数据转换和压缩,已经加密过程,保证数据能够在较低的传输速率和处理能力较差的无线终端上能正常显示,MMS使用WAPWSP作为传输协议,因此需要一个WAP网关连接MMSC和无线WAP网络。

 

MMS RedirectorMMS重定向器):全网范围内会有若干个MMSC,它们的URL地址是唯一的,MMS重定向器就是负责发送者用户归属MMSC路由查询功能的网络实体 。

 

ENUM-DNS(号码域名解析器):解析接收方用户归属的MMSC的地址,接收MMSC发送的查询请求,查询接收者地址对应的归属MMSCURI地址,并返回给MMSC,由MMSC将消息发往该用户归属MMSC服务器。

 

MMS系统接口

整个MMS业务系统的运转是所有相关网络功能实体的相互通讯协作来达成,MMS相关协议文档的主要功能之一,就是明确定义各网络功能实体之间相互通讯协作的标准接口,以下是相关接口的简要说明:

  • MM1(MMS M ) 接口 :MMS Relay/Server MMS Client之间的接口
  • MM2(MMSS )接口:MMS RelayMMS Server之间的接口;
  • MM3接口:MMS Relay/Server 与外接应用服务器之间接口;
  • MM4接口:不同MMSC之间交互的接口;
  • MM5接口:MMS Relay/ServerHLRHome Location Register)之间的接口; 注:HLR是一个中央数据库,其记录了每个移动电话用户使用GSM核心网络功能的授权信息;
  • MM6接口:MMS Relay/Server MMS User DB之间交互的接口;
  • MM7接口:MMS Relay/ServerMMS增值业务应用平台之间的接口;
  • MM8接口:MMS Relay/Server与计费系统之间的接口;

MM1(MMSM )接口将是我们的学习重点,这是我们开发彩信应用程序必须要了解的规范知识。

 

MMS Client 业务模型(MMS Client Transaction Model

MM1接口为讨论范围,则MMS服务实现了MMS ClientMMS 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(协议数据单元)

 

在以上 业务模型的介绍中,通讯流程中的主体是 用于承载业务数据的PDUsProtocol 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-TypeX-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.0WAP 1.X比较:

 

 

终端承载:

WAP2.0终端必须支持GPRS,同时支持电路交换数据(CSD)。默认采用GPRS方式,同时

将其作为菜单项可选或作为在非GPRS网络环境下的选择。WAP2.0协议考虑到对承载网络应具有前向兼容性。

 

 

传输协议:

WAP2.0 终端采用WTCPwireless 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          接口清单:

 

    1. 三方软件的稳定性、质量、集成难度和工作量。
    2. 执行单元设计:线程、进程、资源互斥、状态机、同步和异步调用、API适配、队列、线程通信、进程通信相关
    3. 文件系统接口:接口适配
    4. DRAW MODEL

UI WIDGET(三方软件和平台之间的适配关系)

INPUT(输入处理)

WINDOWS(三方软件和平台的设计方法)

    1. MEMORY:通用接口和系统API的设计原则,BUFFER的设计方法,内存溢出的调试方法、大内存消耗的处理方法
    2. 性能和响应:CPU处理能力、硬件加速、后台运行、任务时间片设计方法、算法、器件性能、异步和回调函数使用、TASK分解、进度条和动画以及中间状态方法使用、屏幕刷新方法
    3. 网络接口适配
    4. 应用生命周期:哪些可以及时卸载减少系统消耗,哪些需要常驻内存
    5. 触摸、鼠标等接口适配
    6. 声音接口适配
    7. 外部功能接口适配:如CAMERA/PHB/...
    8. 多语言
    9. 系统消耗:电量消耗、定时器、内存、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支持发送TEXTIMAGEAUDIO/VIDEOATTACHMENT

 

 

 

 

3.2    功能菜单树结构:

 

                             < 摘自MTK文档 >

 

 

3.3    技术规格:

 

在本项目中,平台支持的最大容量可以是50K,100K,可扩展为300K,或其他。

支持的MMS SPEC版本是V1.1MMS规范版本目前有到MMS V1.3

TO

CC  20条,每条长度,格式(电话号码:数字,40个; EMAIL ADDR:数字和字母共60)

BCC

SUBJECT40个字符

CONTENT39KB612 per slide

ATTACHMENT

SLIDE 帧数最大20 TIMER: 1--60

MMS number90+10   //101

TEMPLATE10

Profile6

Coding schemeUTF-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 TASKWPS TASK通信。

 

WPS

     负责网络信令原语应答和数据封装处理。主要和WAP TASKSOC通信。

 

SOC

     负责更低一层的网络信令处理,主要和WPSTCP通信。

 

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

 

OPTIONPREVIEW

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窗口创建处理(新建MMSITEM 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相关的部分,

包括队列、MEMORYTIMERSOCKETPIPEFILE等等*/

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_MODULESMOD共用的队列数组,MSM50个队列,其他模块只有25个,按MODID存储并处理。信号在不同MOD间发送和接收,就是把信号在不同队列中插入和取出。并通知MOD去处理自己的内部队列。

 

 

 

wap_int_q_array[]

 

 

内存    wap_mem.c

wap_mem_poolwap_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() // MSMSIGTIMERREGISTRYCMMN的初始化,并发出内部事件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,15STATUS=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();

}

 

 

 

 

 

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值