BENQ23G的彩信发送及编码格分析

发布者:李宽          发布时间:2010-4-13 10:51

关键字: 彩信, 编码

引言

目前,基于GSM/GPRS模块的无线远程监控系统大多数采用嵌入式处理器,选用Linux操作系统。本文介绍一种采用Winbond公司的77FA8单片机控制明基的GSM/GPRS模块BENQ23G发送MMS彩信的方法。该方法成本低、可靠性高,器件选用工业级产品,能够在较宽温度范围内工作,即使在室外较恶劣的环境下也可以使用。

本系统组成如图1所示。其中,单片机77E58有2个串口,串口O用于与BENQ23G模块进行通信,控制BENQ23G发送彩信;串口1用于与串口摄像头(如C328-JPEG模块)进行通信,控制摄像头捕获图像。外部传感器报警接口用于连接外部报警传感器,77E58最小系统收到外部传感器报警触发信号后,捕获照片、封装MMS彩信,控制BENQ23G模块向指定的手机或远程接收设备发送彩信;同时还可以拨打指定电话号码,将现场声音传送过去。MIC 及信号放大电路用于采集外部现场声音并进行放大。

从前面的分析可以看出,本系统充分利用了各个部件的硬件资源,最大限度地降低了硬件成本。本文主要介绍图1所示的无线远程监控系统通过中国移动梦网发送彩信时,所使用的传输协议命令格式和传输数据格式。

1 BENQ23G模块简介

BENQ23G是台湾BenQ公司生产的嵌入TCP/IP协议的GSM/GPRS模块,在BENQ23A模块的基础上增加了M2M(Machine-to —Maehine)功能,可以通过GPRS承载在BENQ23G模块和因特网TCP/UDP服务器上实现连接。控制设备和BENQ23G模块之间通过 UART串口连接,传输命令和数据。

控制设备首先通过UART串口设置网络连接参数,然后拨号连接GPRS,BENQ23G模块建立GPRS连接并和指定的因特网TCP/UDP服务器建立 Socket连接。如果Socket连接成功,则模块在控制设备和因特网TCP/UDP服务器之间通过UART串口建立点对点数据连接模式,控制设备可以通过UART串口将数据原封不动地上传至因特网TCP/UDP服务器,同时可以通过UART串口原封不动地下载因特网TCP/UDP服务器上的数据,而上传和下载数据的TCP/UDP打包和解包工作由BENQ23G模块实现。

控制设备在数据模式下通过UART串口发送数据时,如果BENQ23G模块在规定时间间隔内没有继续收到UART串口的数据,就将前面接收的数据进行 TCP/UDP打包并发送到服务器。

当BENQ23G模块通过UART串口连续收到控制模块发送的3个“+”符号后,将退出点对点数据模式而进入命令模式,可以通过UART串口接收控制设备发送的AT指令。但这时BENQ23G模块和服务器之间的TCP/UDP协议Socket连接并没有中断,控制设备如果想再次进入数据模式上传数据给服务器,可以键入ATO命令实现。

控制设备可以在命令模式下通过键入ATH命令来中断BENQ23G模块和服务器之间的Socket连接。下面给出一个控制设备和彩信网关服务器连接的例子:

下载 (14.6 KB)

2010-4-13 10:39

该例子说明如何通过BENQ23G模块实现和远程服务器的连接,以及上传和下载数据。BENQ23G模块AT指令的详细说明见参考文献。

测试MMS组成及编码格式分析略,详细的编码含义见参考文献。

2 基于BENQ23G发送MMS编码格式分析

当控制设备需要发送彩信时,首先通过UART串口传送AT指令完成相应的参数设置(如前面例子所示),再传送“ATD*97#”指令进行 GPRS拨号,并等待BENQ23G模块完成与服务器之间的Socket连接。当收到BENQ23G模块发送的响应“Wait Socket Open”时,表明BENQ23G模块完成了与服务器的连接,并进入数据模式,控制设备可以进行发送彩信操作。

2.1 首先建立会话连接

控制设备发送会话建立连接请求(8字节):

0001 0A OO OO 12 01 10 OO 00

发送数据序列中前4字节“0A 00 00 12”是WTP In—voke PDU。WTP Invoke PDU采用了固定长度格式,其结构如表1所列。

下载 (5.03 KB)

2010-4-13 10:48

其中,CON=0,PDU Type=0001,GTR=0,TTR=1,RID=0,故第1字节为0A;TID High Byte=00000000,故第2字节为00;TID Low Byte=00000000,故第3字节为00;Version=00,TIDnew=0,U/p=1,RES=00,TCL=10,故第4字节为12。

发送数据序列中的第5到8字节“01 10 O000”是WSP协议数据单元。其中第5字节“01”是WSP会话连接Connect的代码,第6到8字节是WSP Connect PDU。WSP Connect PDU结构如表2所列。

下载 (6.54 KB)

2010-4-13 10:48

其中,第6字节“10”是WSP协议版本号,高4位是版本号的整数部分,低4位是版本号的小数部分,这里为V1.0;第7字节是能力字段长度,没有使用能力请求,故长度为00;第8字节是报头字段长度,没有报头,故长度为00。

服务器返回数据如下(30字节):

0001 12 80 00 02 B5 C5 1 5 00 15 45 6E 63 6F 64 69 6E........Encodin
    0017 67 2D 76 65 72 73 69 6F 6E 00 31 2F 32 00 00 00 g—version.1.2...

返回数据中第1~3字节是WTP Result PDU,其余为WSP协议数据单元。WTP Result PDU采用固定长度格式,其结构如表3所列。

下载 (4.87 KB)

2010-4-13 10:39

其中,CON=0,PDU Type=0010,GTR=0,TTR=1,RID=O,故第1字节为12;TID High Byte=10000000,故第2字节为80;TID Low Byte=00000000,故第3字节为OO。

返回数据中的第4字节“02”是WSP会话连接确认ConnectReply的代码;第5~30字节是WSP ConnectReplyPDU。

WSP ConneetReply PDU结构如表4所列。

下载 (6.43 KB)

2010-4-13 10:48

第5~8字节“B5 C5 15”是会话标识;第10字节“15”是HeadersLen(21字节),Headers是以00结束的字符串,即Encoding—version 1.2。

2.2 控制设备发送WTP确认完成会话连接

控制设备发送WTP确认(WTP Acknowledgement,3字节):18 00 00。WTP Acknowledgement PDU采用固定长度格式,如表5所列。

下载 (5.83 KB)

2010-4-13 10:39

其中,CON=0,PDU Type=0011,Tve/Tok=0,RES=0,RID=0,故第1字节为18;TID High Byte=00000000,故第2字节为00;TID Low Byte=00000000,故第3字节为OO。

2.3 控制设备发送WTP、WSP和MMS包

控制设备首先发送WTP和WSP(49字节):

0001 0E 00 01 1 2 60 1A 10 68 74 74 70 3A 2F 2F 6D 6D.......http://mm
0017 73 63 2E 6D 6F 6E 74 6 5 72 6E 65 74 2E 63 6F 6D SC.monternet.com
0033 2F BE 80 BE C7 80 A1 09 80 77 61 70 00 77 61 70/........wap.wap
0049 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00................

发送数据序列中,前4个字节“0E 00 01 12”是WTPInvoke PDU,后45个字节是WSP协议数据单元。

WTP Invoke PDU同样采用了固定结构格式(如表1所列)。其中,CON=0,PDU Type=0001,GTR=1,TTR=1,RID=0,故第1字节为0E;TID High Byte=00000000,故第2字节为00;TID Low Byte=00000001,故第3字节为01;Version=00,TIDnew=0,U/P=1,RES=00,TCL=10,故第4字节为12。

发送数据序列中第5字节“60”是WSP方法Post的代码,第6~49字节是WSP Post PDU。WSP Post PDU结构如表6所列。

下载 (6.49 KB)

2010-4-13 10:39

第6字节“1A”是UriLen(26字节);第7字节“10”是HeadersLen(16字节);第8~33字节是Uri字段,URI=http:/mmsc.monternet.com/(中国移动梦网);第34字节“BE”是ContentType的内容类型(著名域值 applica—tion/vnd.wap.mms—message的代码),即Content Type=application/vnd.wap.mms—message;第35~49字节是由3个Header组成的Headers字段,第35、 36字节是第1个Header,第37、38字节是第2个Header,第39~49字节是第3个Header。

Headerl:80 BE(Accept:application/vnd.wap.mms—message)。
    Header2:C7 80(Cashe Control:None)。
    Header3:A1是域Proxy authorization的代码,第40字节“09”是域长度(9字节),第41字节“80”是Basic的代码,第42~44字节是User— id=wap,第46~48字节是Password=wap。

数据字段就是紧接着发送的MMS包。

服务器返回数据序列如下:

下载 (15.84 KB)

2010-4-13 10:39

返回数据中,第1~3字节是WTP Result PDU,其余为WSP协议数据单元。WTP Result PDU格式与前面相同,只是TID=8001,与WTP Invoke PDU中的TID=0001相对应。

返回数据中第4字节“04”是WSP会话响应Reply的代码,第5~173字节是WSP Reply PDU。WSP ReplyPDU结构如表7所列。

下载 (4.89 KB)

2010-4-13 10:39

第5字节“20”是Status编码,表示成功;第6、7字节“81 26”是Headers的长度(解码后为A6,即166个字节,从第8字节“61”到173字节“B1”);第8~38字节是Cont—entType的域值,ContentType=application/vnd.wap.
mms—message;第40~173字节是由6个Header组成的Headers字段,第40~52字节是第1个Header,第53~78字节是第2个Header,第79~111字节是第3个Header,第 112~143字节是第4个Header,第144~167字节是第5个Header,第168~173字节是第6个Header。

下载 (4.08 KB)

2010-4-13 10:39

Header6:Date=48 29 41 EB,以秒计算的日期,起始日期为1970—01-01。

返回数据中,第174~209字节是Data字段,其内容与MMS头内容相对应,解码后含义:

下载 (3.05 KB)

2010-4-13 10:39

2.4 控制设备发送WTP确认完成会话

控制设备发送WTP确认(WTP AcknowledgementPDU,3字节):1C 00 01。

WTP Acknowledgement PDU格式同表5。其中,CON=0,PDU Type=0011,Tve/Tok=1,RES=0,RID=0,故第l字节为1C;TID High Byte=00000000,故第2字节为00;TID Low Byte=00000001,故第3字节为01。

2.5 断开服务器连接

如果要退出数据模式,控制设备可通过UART串口传送符号+++,BENQ23G返回命令模式,但与服务器的Socket连接并没有断开。如果要断开 BENQ23G与服务器的Socket连接,则控制设备需通过UART串口发送ATH命令给BENQ23G模块。

3 结论

本文介绍了一种通过彩信传送图像的低成本远程监控系统。该系统采用Winbond公司的77E58单片机作为控制器,由外部报警传感器触发,控制串口摄像头捕获现场图像,封装MMS彩信,并通过控制BenQ公司的GSM/GPRS模块BENQ23G发送,同时还可以通过拨打预设号码将现场声音传送出去。

参考文献

1. BenQ Inc M23 AT Command User Guide.Version:1.75 2005
   2. 中国移动通信集团公司 GPRS 移动终端规范--彩信分册 2004
   3. 张会勇 MMS的消息格式和压缩编码分析 [期刊论文] -中国数据通信2004(6)
   4. 邓戈.曹怡鹏.沈金龙 MMS 终端互通技术研究 [期刊论文] -南京邮电学院学报(自然科学版)2004(1)
   5. 陈华鹏 嵌入式MMS 客户机模型研究 [期刊论文] -计算机工程2007(16)
   6. 沈音乐 嵌入式 MMS客户机设计 [期刊论文] -计算机系统应用2007(11)

作者:北京航空航天大学 于捷  王祖林  刘有才
来源:单片机与嵌入式系统应用 2009 (2)

BENQ23G的彩信发送及编码格分析相关推荐

  1. 高通android 7.0彩信发送过程中使用到的google pdu

    对于彩信与数据库的交互操作,google并没有将这部分代码放在Mms中,而是放在framework中的pdu部分. 具体代码路径是在:opt\telephony\src\java\com\google ...

  2. Android彩信发送

    彩信发送,首先直接上调用系统app发彩信的代码: Intent sendIntent = new Intent(Intent.ACTION_SEND, Uri.parse("mms://&q ...

  3. Tesla T4视频编码性能分析

    Tesla T4视频编码性能分析 从开普勒开始的所有 NVIDIA GPUs 都支持完全加速的硬件视频编码: GPUs 支持完全加速的硬件视频解码.最近发布的图灵硬件提供了张量核心和更好的机器学习性能 ...

  4. php发送邮件,标题是乱码,php的mail函数发送UTF-8编码中文邮件时标题乱码怎么办?...

    php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法:1.将subject里头的文字符合RFC 2047的规范:2.在headers中添加[content-type]:3.对用来发送邮件 ...

  5. Form表单标签的Enctype属性的编码格类型

    Enctype :指定将数据回发到服务器时浏览器使用的编码类型 编码类型有以下三种: application/x-www-form-urlencoded: 在发送前编码所有字符(默认).这是标准的编码 ...

  6. 彩信发送失败原因是什么?如何解决?

    彩信发送失败的原因: 1.内容原因. ①不能有敏感词.如何说你要发送的彩信文字里面有敏感词,就会直接导致彩信发送失败.比如投资.利润等敏感词,在后台时会被直接屏蔽. ②格式不正确.格式错误也会导致彩信 ...

  7. android 彩信发送,在部分手机上报错,提示activityNotFoundError。

    使用以下代码,在部分手机(例如:三星)上调用android系统的彩信发送界面时,会提示错误:activityNotFoundError. Intent intent = new Intent(Inte ...

  8. 彩信发送和接收关键流程

    MMS 的设计基于WAP协议: DataConnection 手机上网数据连接,其中5种常用类型的APN配置信息中就有MMS类型,即收发彩信时需要建立手机上网数据连接: MMS发送和接收,就是Tran ...

  9. Android短信开发 发送彩信 ‘ 高通源码 ‘ (彩信发送过程1)

    Android彩信发送有下面几个类: 一个一个类看  : 1 . ComposeMessageActivity.java   详情页面 2 . WoringMessage.java           ...

最新文章

  1. 新型冠状病毒心理防护手册(大众版)
  2. 手把手教 | 深度学习库PyTorch(附代码)
  3. ETSI MEC — 多接入边缘计算
  4. 修改CodeSmith中的SchemaExplorer.MySQLSchemaProvider
  5. 【数据结构与算法】之判断是否互为字符重排
  6. 速来围观!leetcode java实现汇总
  7. 一篇文章搞懂腾讯云AI平台的人工智能IDE:TI-ONE
  8. matlab pretty什么用,matlab如何使输出结果更美观(symdisp函数——pretty函数升级版)...
  9. Action详解(一)
  10. oracle中表为啥会死锁,Oracle数据表中的死锁情况解决方法
  11. 易语言制作计算软件简单步骤_基于飞时达FastTFT软件方格网法计算土方量的具体步骤...
  12. svn 合并分支 (svn操作手册)
  13. Linux创建.txt文件
  14. GPIO输入输出模式原理(八种工作方式附电路图详解)
  15. 如何管理和控制一个成长型的公司?
  16. 计算机设置密码命令,win7设置电脑开机密码的命令和方法
  17. WSL 2 网络配置
  18. 局域网自己搭建服务器之DDNS(动态域名解析),基于阿里域名api+python实现
  19. WordPress给博客文章页添加个性名片
  20. linux运行pppd,linux pppd 连接成功 还是 没有网

热门文章

  1. PASS JNCIE
  2. 端午将至,VR全景奉上别开生面的“云上”端午节
  3. 聚宽量化是干什么的?
  4. 中国反刍动物用饲料添加剂市场发展态势与前景策略分析报告2022-2028年
  5. 解决TiKV节点JBD2进程I/O占用高的问题
  6. 新瑞鹏冲刺上市:持续亏损,旗下宠物医院屡被罚,彭永鹤为董事长
  7. 如何去水印而不损图片?码住这三个方法学会图片怎么去水印
  8. 信号完整性仿真实战3:Allegro PCB SI 导入DML库文件图文演示
  9. 如何利用键盘添加时间全选及多选
  10. 你知道在Java 中常被提的 SPI 到底是什么吗?