`
netsky_cheng
  • 浏览: 28581 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

wavecom q2403 发送彩信(1)

 
阅读更多

wavecom q2403 发送彩信(1)

2011-02-18 18:01

一、彩信开发动态链接库简介

多媒体短信服务
( MMS ) ,也就是通常所说的彩信,是在短信息服务 (SMS) 和增强短信服务 ( EMS ) 技术基础上进一步发展起来的。典型的彩信是以 MIME 格式编码打包,并通过 WAP 协议进行传递的 (另一种方式使 TCP/IP 协议 。本动态链接库采用的就是此种方式。
本动态链接库是在 Microsoft Visual Studio 2005下使用 C#语言开发的 DLL类库, 提供简单的开发流程,灵活的开发方式,支持多种彩信文件:
1 、标准MMS格式,文件后缀名“.mms”。此格式包含彩信消息头和消息体,且消息头中应包含发送目标信息,如对方手机号码。如果开发人员有已经打包好的MMS文件,可以调用动态链接库中的函数直接发送。
2 、SMIL文件+独立多媒体文件。开发人员独自编写SMIL文件,可以获得更丰富的彩信表现能力。开发人员只须向发送链表中加入SMIL文件和相应的多媒体文件即可。此程序可以对其自动打包,以生成标准的MMS格式。
3 、独立的多媒体格式。为了提高彩信的兼容性,本程序采用标准封装方式,将独立的多媒体文件打包成MMS格式,以便大多数用户能够收到彩信。目前,本动态链接库支持常用的多媒体文件。
文本文件:txt格式,必须采用UTF-8编码格式;
图片文件:jpg,bmp,gif,png;
声音文件:amr,mid,midi。


二、彩信开发动态链接库详解

1 、彩信开发动态链接库简明案例

采用本动态链接库发送彩信非常简单方便。

在正式介绍本开发包之前,先来看一下如下代码片段:



① mm.SetSubject("彩信测试"); // 设置标题



② mm.AddTo("131********"); // 添加接收号码,调用一次添加一个接收号码



// 添加发送文件,包含文件路径,调用一次添加一个发送文件



③ mm.AddFile("E://***.mms");



④ // mm.AddFile("E://***.smil");



⑤ // mm.AddFile("E://***.gif");


⑥ string szReult = ms.Send(mm);

⑦ mm.ClearTo();


⑧ mm.ClearFile();
第①行代码设置彩信标题,第②行代码设置发送目标号码,③-⑤行代码添加文件,第⑥行代码发送彩信,第⑦行代码清除发送目标,第⑧行代码清除发送文件。
方法一:若发送标准MMS格式彩信,只添加第③行代码即可。
方法二:若发送SMIL文件+独立多媒体文件,可以注释掉第③行,添加第④行和第⑤行。
方法三:若发送独立文件,只须添加第⑤行。
多种情况下的处理工作全部由第⑥行函数完成。

不管是方法二还是方法三,一次可以添加多个独立多媒体文件,只需重复调用 AddFile()函数即可。 注意:采用方法二时, smil文件必须第一个添加到动态数组中。
本程序没有使用重载的方式编写 Send()函数,是为了增加程序的灵活性。二次开发人员可以任意组合手机号码与彩信内容。

2 、彩信开发动态链接库

本动态链接库名字空间为“ MMSLib”,包含两个类:“ MMSender”和“ MMessage”。

MMSender包含四个函数:
MMSender()  构造函数;
void SetMMSC(string)  设置彩信中心网址;
void SetProxy(string)  设置代理服务器网关。
string Send(MMSLib.MMessage)  发送彩信函数;

MMessage包含七个函数:
MMessage()  构造函数;
void SetSubject(string)  设置彩信标题;
void AddTo(string)  添加目标手机号码;
void AddFile(string)  添加文件;
void ClearTo()  清除链表中目标手机号码;
void ClearFile()  清除链表中文件;
byte[] GetContent()  打包并获取彩信, Send()中已封装此函数。

3 、函数详解

MMSender主要包含发送彩信的相关方法。
MMSender()  构造函数
通过如下代码可以创建一个 MMSender对象。
MMSender ms = new MMSender();

void SetMMSC(string)  设置彩信中心网址
通过如下代码可以设置彩信中心网址,根据不同的 SIM卡采用不同的地址。

ms.SetMMSC("http://mmsc.monternet.com"); //  中国移动   ms.SetMMSC("http://mmsc.myuni.com.cn"); //  中国联通




void SetProxy(string)  设置代理服务器网关



通过如下代码可以设置代理服务器网关。


ms.SetProxy("10.0.0.172:80");

  string Send(MMSLib.MMessage)  发送彩信函数
在调用 string Send(MMSLib.MMessage)方法之前,应首先创建 MMessage对象,并对其初始化。
Send()方法封装了网络初始化方法,彩信读取方法,网络通讯方法。此方法完成了彩信发送的全过程。


MMessage主要包含彩信打包的相关方法。

在类 MMessage中维护了两个 ArrayList动态数组 lDest lFile,用于管理目标手机号码和彩信文件。函数 AddTo(string) AddFile(string) ClearTo() ClearFile()的功能就是对这两个动态数组进行添加与清除操作。



  MMessage()  构造函数
通过如下代码可以创建一个 MMessage对象。
MMessage mm = new MMessage();

  void SetSubject(string)  设置彩信标题;
通过如下代码可以设置彩信标题。
mm.SetSubject("彩信测试 ");

  void AddTo(string)  添加目标手机号码
添加接收号码,调用一次添加一个接收号码。
通过如下代码可以添加目标手机号码
mm.AddTo("131********");

void AddFile(string)  添加文件

AddFile()中的参数为 string型,是待发送文件的全文件路径 ,调用一次添加一个发送文件。如本章第一节所述, AddFile()的参数可以采用灵活的形式,包括①“ .mms”文件;②“ .smil +多媒体文件;③独立的多媒体文件。详细分析参见第三章。


通过如下代码可以添加文件;
mm.AddFile("E:/…/***.***");

void ClearTo()  清除链表中目标手机号码
通过如下代码可以清除链表中目标手机号码
mm.ClearTo();

void ClearFile()  清除链表中文件
通过如下代码可以清除链表中文件
mm.ClearFile();

  byte[] GetContent()  打包并获取彩信, Send()中已封装此函数。
此函数是整个程序的核心部分,读取 lDest lFile中的信息,并将其打包成 MMS格式二进制数据。

4 、完整的例子


//  发送 MMS的过程



//  创建消息发送接口



MMSender ms = new MMSender();



//  设置参数属性



//  默认属性已经是中国移动参数 ,因此如果是中国移动用户,以下两个操作可以不需要



ms.SetMMSC("http://mmsc.monternet.com"); //  中国移动



//ms.SetMMSC("http://mmsc.myuni.com.cn"); //  中国联通



ms.SetProxy("10.0.0.172:80");



//  创建消息



MMessage mm = new MMessage();




//  设置消息内容



mm.SetSubject("彩信测试 "); //  设置标题



mm.AddTo("131********"); //  添加接收号码,调用一次添加一个接收号码



//  添加发送文件 ,包含文件路径 ,调用一次添加一个发送文件



mm.AddFile("E:/…/***.mms"); //  发送 MMS格式彩信



//  发送消息



string szReult = ms.Send(mm); //  可以通过读取 szReult判断发送结果。




mm.SetSubject("新标题 "); //  修改标题



mm.ClearTo(); //  清除接收号码,



mm.AddTo("135********"); //  改变发送目标,彩信标题和内容不变



ms.Send(mm); //




mm.ClearFile(); //  清除彩信内容



//  改变彩信内容



mm.AddFile("E:/ …/pres.smil"); //  添加 SMIL文件



mm.AddFile("E:/ …/ID-0001.gif"); //  添加多媒体文件



ms.Send(mm);




mm.ClearTo(); //  清除接收号码,



mm.ClearFile(); //  清除彩信内容



mm.AddTo("138********"); //  添加接收号码,调用一次添加一个接收号码



mm.AddFile("E:/ …/ID-0001.jpg"); //  添加多媒体文件



mm.AddFile("E:/ …/ID-0001.txt"); //  添加多媒体文件



ms.Send(mm); //  发送彩信

三、 MMS文件解析

1 、MMS文件详解


每个 MMS都是由 MMS Header MMS Body组成。


如图所示, MMS文件主要包含两部分: 1 MMS headers 2 Message Body
为了保证彩信兼容多种手机型号,本文的 Message Body部分采用标准 SMIL2.0语言描述。因此,本文所涉及的 MMS文件可细分为三个部分:
1 MMS headers
2 SMIL2.0语言描述文件。
3 Message Body中多媒体文件。

如果用户只输入:
mm.AddFile("E:/…/***.mms"); //  发送 MMS格式彩信
则,程序将此彩信直接发送。

如果用户输入如下形式:
mm.AddFile("E:/ …/***.smil"); //  添加 SMIL文件
mm.AddFile("E:/ …/ID-0001.gif"); //  添加多媒体文件
则程序只添加MMS headers部分,其他部分打包实现。
注意:在此种情况下, smil必须第一个添加到动态数组中。

如果用户只输入多媒体文件:
mm.AddFile("E:/ …/ID-0001.jpg"); //  添加多媒体文件
mm.AddFile("E:/ …/ID-0001.txt"); //  添加多媒体文件
则程序添加 MMS headers部分,并按照固定的方式编写 SMIL文件,同时对多媒体文件打包,以便生成完整的 MMS格式文件。


2 、SMIL语言简介

SMIL是同步多媒体集成语言( Synchronized Multimedia Integration Language)的缩写 ,念做 smile。它是由 3W(World Wide Web Consortium)组织规定的多媒体操纵语言。最新的 SMIL版本是 2001 8月推出的 SMIL 2.0版本。 SMIL与我们网页上用的 Html(超文本传输语言)的语法格式非常相似。后者主要针对普通的网络媒体文件进行操纵(文字、图片、声音、动画、视频的机械堆砌),而前者则操纵多媒体片断(对多媒体片断的有机的、智能的组合)。
SMIL 2.0版本,参见: http://www.w3.org/TR/2005/REC-SMIL2-20050107/
SMIL 1.0版本,参见: http://www.w3.org/TR/1998/REC-smil-19980615/

3 、简单的SMIL文件

本例子为本程序中内置的 SMIL语言文本。如果开发人员只添加独立的多媒体文件,则本例子中的通用文本会添加到打包文件中去。
<smil xmlns="http://www.w3.org/2001/SMIL20/CR/Language">
<head>
<meta name="title" content="mmsPower" />
<meta name="copyright" content="MMSPC2PHONE" />
<meta name="version" content="0.309" />
<layout>
<root-layout width="176" height="208"/>
<region id="Text" top="0%" left="0%" height="100%" width="100%"/>
<region id="Image" top="0%" left="0%" height="100%" width="100%"/>
</layout>
</head>
<body>
<par dur="10000ms">
<text src="ID-0001.txt" region="Text"/>
</par>

<par dur="10000ms">
<img src="ID-0001. jpg " region="Image"/>
</par>

<par dur="10000ms">
<audio src="ID-0001.mid" repeat="indefinite"/>
</par>

</body>
</smil>


四、创建彩信开发平台

1 、彩信开发平台简述

彩信开发动态链接库属于彩信开发平台的中间层,完整的彩信开发平台还需要彩信猫硬件的支持和 WAP网络连接。
彩信开发平台的创建过程如下:
第一步,确保彩信猫硬件连接正常(略);
第二步,在超级终端下通过 AT指令对彩信猫进行初始化,建立彩信猫对 GPRS WAP网关的支持;
第三步,设置拨号网络连接。通过此连接,可以使计算机通过彩信猫访问 WAP网关。

详细步骤参见本章第 2节。
AT指令设置图解详见本章第 3节。超级终端与 AT指令的相关知识参见本文附录。
设置拨号网络连接图解详见本章第 4节。

创建彩信开发平台后,再将本动态链接库引入二次开发系统中,即可建立完整的彩信应用环境。此过程详见本章第 5节。

2 、彩信猫GPRS拨号连接的设置过程

以下过程在后面章节中有详细图解。
一) AT  指令设置部分
(1) AT+CGCLASS=”B”  置为“ B”模式。
(2) AT+CGDCONT=1,”IP”,”CMWAP”  设置 WAP连接。 (改成AT+CGDCONT=1,”IP”,”CMNET”)
(3) AT+CSQ  检查信号   若返回 10 31 0之间的信号数字则继续,如果信号是 99 99,则应该考虑不停的键入 A/命令,不停的让模块去搜寻网络。
(4) AT+CGACT=1,1  激活 ,返回 OK则继续。
(5) AT+CGREG?  若返回为 0 1则可以,若返回 0 0则不行返回( 1)重来。或者,不停键入 A/,多次执行 AT+CGREG?命令。
(6) AT+IPR=115200;&W  更改模块速率并保存。

二)  设置 MODERN
(1)  控制面板 à 调制解调器 à 常规 à 选择添加 à 不检测调制解调器 à 标准调制解调器类型 à 标准 19200(应该改成33600,妈的搞死了)bps 调制解调器 à 通讯串口 1(建议只使用串口 COM1
(2)  设置 19200调制解调器
属性 à 调制解调器 à 最高速率( 115200

三)  设置拨号网络
(1)  新建连接 à 标准 19200调制解调器
(2)  区号置空 à 电话号码 {GPRS V5.29版本设置为 *99***1# {注意:如果是 GPRS 5.26版本号的话,电话号码改为 *98*1#}
(3)  完成

四)  双击新建的拨号网络,置空用户名和密码,拨号进行,检测用户名和密码,通过之后登陆网络。


3 、通过AT指令对GPRS设备进行初始化


超级终端和 AT指令简介,参见附录。



在超级终端下,对模块进行设置,详细记录如下:



at



OK



at+ccid //检测是否装有 SIM 



+CCID: "89860060190200147245" //  由具体 SIM卡序列号决定



OK



at+cgmr //检测软件版本, 5.0  以上的才有 GPRS  功能支持



534_09gg.2C2 1747684 080602 16:50



OK



at+csq //检测信号质量,确定是否可以登陆上网络



+CSQ: 28,0



OK



at+CGCLASS="B" //设置模块工作类型



OK



AT+CGDCONT=1,"IP","CMWAP" //设置 WAP网关,只有开通 GPRS  功能的 SIM  卡才可以



OK



AT+CSQ



+CSQ: 27,0



OK



AT+CGACT=1,1 //激活网络



OK



AT+CGREG? //检测是否登陆上 GPRS网络



+CGREG: 0, 1 //成功登陆



OK



AT+IPR=115200;&W //更改串口速率并保存退出



OK




4 、创建拨号网络连接

  设置 MODERN
打开:控制面板 à 调制解调器 à 选择“添加”。


弹出“添加硬件向导”对话框,选择“不检测调制解调器”,单击“下一步”。 COM1


显示“选择制造商与型号”界面,选择“标准调制解调器类型”,“标准 19200bps 调制解调器” ,单击“下一步”。此过程可能占用较长时间,请耐心等待。


显示“选择调试解调器的端口”界面,点击“ COM1”(由彩信猫所连接的端口号决定),点击“下一步”。


依次出现如下界面:





点击“完成”后,可出现如下界面:


单击“属性”,显示“标准   19200 bps  调制解调器   属性”对话框


选择“调制解调器”属性页,“最大端口速度”设置为“ 115200”,单击确定。
至此, MODERN设置结束。


设置拨号网络
新建连接


选择“连接到 Internet”,单击“下一步”。


选择“手动设置我的连接”,单击“下一步”。






选择“用拨号调制解调器连接”,单击“下一步”。


输入“ ISP名称”,可以自定义,我在这里设置为“标准 19200调制解调器”。


设置电话号码为“ *99***1# ”。
注意:如果是 GPRS 5.26版本号的话,电话号码改为“ *98*1# ”。






Internet帐户信息”的用户名和密码不用设置,单击“下一步”



完成。







5 、动态链接库的引用方法

本动态链接库是在 Microsoft Visual Studio 2005下使用 C#语言开发的 DLL类库,所以在此环境下开发彩信发送程序,动态链接库的引用方法非常简单。
如下图所示,在“项目”菜单下选择“添加引用”。


在“添加引用”对话框中,选择“浏览”选项卡,选择本动态链接库“ MMSLib.dll”,单击“确定”按钮,   动态链接库即成功引入用户程序中。


在“解决方案资源管理器”中,在“引用”目录下,即可看到刚才添加的动态链接库的名字空间。


在“对象浏览器”下,可以看到“ MMSLib”的对象信息。


程序需要添加如下代码才可以使用动态链接库中的对象:
using MMSLib;
下面是一个简单的例子:


通过拨号连接网络,然后再运行此程序,就可以发送彩信了。注意查看 SIM卡是属于哪个运营商的,从而设置不同的彩信中心网址。

五、综述

前面章节详细介绍了彩信开发的各个过程。下面将开发流程再细数一遍,以提供开发人员整体的开发思路。
因为彩信应用系统是软硬件结合的系统,所以,在进行开发之前,开发人员应确保彩信猫设备连接正常。
彩信猫连接计算机后,需要对彩信猫进行初始化,可以在超级终端下通过 AT指令对彩信猫进行检测,并进行 GPRS网络设置,使其支持 GPRS网络连接。超级终端与 AT指令的使用方法详见本文附录。 GPRS网络设置方法详见第四章第 2节和第 3节。
初始化硬件后,需要建立拨号网络连接,详细内容参见第四章第 2节和第 4节。
创建开发平台后,开发人员只需将本动态链接库引用至自己的软件开发环境即可。详细内容参见第四章第 5节。

动态链接库相关内容总结如下:
动态链接库的结构信息,参见第二章第 2节。函数详解,参见第二章第 3节。
动态链接库简明使用例子参见第二章第 1节,完整的使用例子参见第二章第 4节。
两个例子包含了彩信发送过程的相关过程。

本动态链接库支持的彩信文件格式,参见第一章。
MMS打包格式详解,参见第三章。

彩信程序编写完成后,发送彩信的过程如下:
1、通过拨号连接 GPRS网络;
2、运行彩信程序。

附录一、超级终端简介

超级终端是 windows自带的一个串口调试工具,其使用较为简单,被广泛使用在串口设备的初级调试上。
打开超级终端:开始 à 程序 à 附件 à 通讯 à 超级终端。


下面介绍一下一般使用的步骤 :
配置连接需要调试串口基本参数,其操作为:
选择菜单文件属性菜单项。


配置调试设备所连接串口连接时使用


配置按钮进行配置选定串口信息


依次选定每秒位数(波特率)等参数,一般情况下 MODEM设置波特率后即可,其它位取默认设置。
确定退出配置
按工具条上呼叫按钮连接所调试设备


输入英文字母 AT然后回车,此时如果设置正确,则会返回英文字母 OK


如果参数设置不正确,则提示无法连接,或者连接后无法输入 AT字母,此时,请确认步骤   中串口选择正确、请确认波特率设置正确。
大部分 GPRS MODEM出厂的时候其波特率已经设置为 115200,但是也可能部分设置为 9600或者其它。在 MODEM支持的范围内,越高的波特率代表了越高的计算机传输数据到 MODEM的能力。




附录二、 AT指令

AT指令是指从终端设备( Terminal Equipment, TE)或数据终端设备( Data Terminal Equipment DTE)向终端适配器( Terminal Adapter, TA)或数据电路终端设备( Data Circuit Terminal Equipment, DCTE)发送,用于控制移动台( Mobile Station, MS)的功能,以实现与 GSM网络业务进行交互的操作指令。
20世纪 90年代初, AT指令仅被用于调制解调器操作。当时,为了能够控制 MODEM工作,原著名通信设备生产商 Hayes制定了一套指令,通过通信软件(如超级终端)控制 MODEM的各项操作。这套指令称为“ AT指令”。
由于当时缺少对移动电话文本消息控制的先例,因此人们开发了一种称为“ SMS Block Mode”的协议,通过终端设备或计算机来控制短消息服务。几年后,诺基亚、爱立信、摩托罗拉和惠普等几大主要的移动电话生产厂商又共同研制了一整套用于 GSM业务的 AT指令,并形成 GSM 07.05标准以及在此之后的 GSM 07.07标准。目前, AT指令已经在手机通信中发挥重要的作用,通过 AT指令能够控制手机执行许多操作,包括呼叫服务、短消息服务、传真、 GPRS等。
(以上内容摘自《 Q2406无线 CPU嵌入式开发技术》,洪利、杜耀宗编著,北京航空航天大学出版社出版)

常用的几个 AT命令
  AT
测试指令,返回 OK表示串口设备正常
AT+CGMM
显示 MODEM型号
AT+CGMR
显示 MODEM软件版本号
AT+CGMI
显示 MODEM生产厂家
AT+IPR=?/AT+IPR?/ AT+IPR=115200
前者查询 MODEM支持的所有波特率,后者显示当前设定波特率,最后一条是设置 MODEM波特率为 115200



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics