短信模块开发 tpdu格式(一)

来源:互联网 发布:js模块化编程 阮一峰 编辑:程序博客网 时间:2024/06/01 08:45

1.1.基本知识

短信模块开发指通过串口 at命令驱动短信猫进行短信发送和接收操作。

短信猫操作分为三种模式: block,pdu Text

短信传送有三种编码方式: 7位, 8位, UniCode

1.1.1.   相关文档

Gsm03.38规范: Alphabets and language-specific information着重介绍短信发送中对字符集的控制部分

Gsm03.40规范: Technical realization of the Short Message Service (SMS) Point-to-Point (PP)详细介绍各种不同短信的不同实现

Gsm07.05规范: Use of Data Terminal Equipment - Data Circuit terminating;Equipment (DTE - DCE) interface for Short Message Service (SMS) and Cell Broadcast Service (CBS) ,介绍 at的一些控制命令。

Gsm07.07规范:着重介绍 at的短信相关命令,可以说是 at sms规范。

1.1.2.   Block 模式

使用Block模式需要手机生产厂家提供驱动支持,现在还没有发现哪个厂家公布支持这种短信发送模式。Block模式基本已经被 pdu模式取代。

1.1.3.   Text 模式

Text模式比较简单,但是支持的设备不是很全,而且对于中文似乎有些问题,在金笛的网站技术资料中似乎提到了一句不能实现中文。

ATCGMF=1

ATCGMS=13605696031,129
>Hello World!<^Z>

1.1.4.   Pdu 模式

pdu编码主要包括两个主要的部分,一是 pdu短信报头的整体数据格式,分别因为发送信息串和接收信息串而有区别,二是 pdu中文本部分的编码,分别因为字符集而不同。

 

PDU串的用户信息(TP-UD)段最大容量是140字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是16014070。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。

 

1.2.SMS用户数据的编码方法

1.2.1.   英文7位编码

这是gsm的默认编码方式

由于这样的移位,我们可以看到我们能发的最多英文字符等于:140*8/7 = 160

1.2.2.   数据8位编码

8-bit编码通常用于发送数据消息,比如图片和铃声等;

1.2.3.   中文pdu编码

发送中文时,必须用UCS2utf-16)进行编码,最多可以发140/270个汉字。

UniCode编码转换也比较简单,以中文为例,一个中文字符是两个字节,直接对高位字节和低位字节进行十六进制转换就可以了。如“欢迎”,UniCode编码是6B22 8FCE,这同时也就是转换的结果,如果发送的串中有英文字符,那么在前面补全00,以保证一个字符对应两个字节。

1.2.4.   Wap-push中的中文编码

wap-push短信的时候有些问题了,开始的时候也按照 Unicode编码处理,总是失败,后来才发现,有个编码字段设为了 uft-8,所以在这种情况下,还是可以出现其他编码方式的。

 

1.3.短信报头分析

1.3.1.   短信类型

详细请参考gsm 0438规范和gsm0440规范,里面有详细的关于各种短消息类型的描述。

sms中到底支持多少种类型的短信,短信类型由什么进行控制,这是我们在这里需要着重介绍的问题。

在传输层来分,一共有六大短信类型:SMS-DELIVERSMS-DELIVER-REPORTSMS-SUBMIT

SMS-SUBMIT-REPORTSMS-STATUS-REPORTSMS-COMMAND,这六种短信类型,由短信中心地址后的第一个字节的最低两位控制。

也就是说,每个短信在短信中心地址之后的第一个字节的最低两位是至关重要的。他决定了如何读这条短信(结合是发送的,还是接收的)

 

bit1

bit0

Message type

0

0

SMS-DELIVER (in the direction SC to MS)

0

0

SMS-DELIVER REPORT (in the direction MS to SC)

1

0

SMS-STATUS-REPORT (in the direction SC to MS)

1

0

SMS-COMMAND (in the direction MS to SC)

0

1

SMS-SUBMIT (in the direction MS to SC)

0

1

SMS-SUBMIT-REPORT (in the direction SC to MS)

1

1

Reserved

 

 

 

 

 

 

1.3.2.   地址编码

短信发送中都会涉及到短信地址的问题,他们的编码规则是一致的 ,简单来说就是 BCD8421编码。

如: 08 91683108501505F0

08:地址长度,(号码类型+号码长度)/2的十六进制表示

91:号码类型

683108501505F0:号码,实际号码应为:8613805515500,号码处理方法为,如果为+86开始,+号去掉,然后判断是否为偶数,不是在末尾补F,然后将奇数位和偶数位互换

1.3.3.   TP-DCS( 数据编码格式 )

这个字节比较特殊,表明整个短信的字符编码,数据内容等信息。详细说明参考 gsm03.38规范。

1.3.4.   第一个字节

Pdu编码的第一个字节比较有意思,这个字节会根据六种不同的短信按位有不同的意思,拿句专业一点的话来说,叫 bitmask.用图来大概描述一下,详细参考 gsm0340 9.2.3段。

 

位数

MSG_Deliever

MSG_SUBMIT

7

TP_RP(回复地址)

TP_RP

6

TP_UDHI(数据报头)

TP_UDHI

5

TP_SRI(需要回复)

TP_SRR(请求回复)

4

 

TP_VPF(时间格式 )

3

 

2

TP_MMS(多条短信标志, 1为无, 0为有)

TP_RD(拒绝重复标志 )

1 0

TP_MTI(短信类型)

TP_MTI

常见值

04,正常收到, 44,有报头短信

11,正常发送, 51,有报头短信

1.3.5.   TP-PID (协议标识)

在这个里面还有一个字节比较特殊,就是协议标识。

一般都是 00,表示点到点的标准短信。

1.3.6.   超长短信

参考 gsm0340 9.2.3 .24TP_UD部分,这个部分中间的一种情况就是描述超长短信的处理。

长短信关键涉及一个数据报头的问题,数据报头由“长度”和多个“数据元素”组成。

1.3.7.   Wap-push 短信

WAP的推送协议中定义了服务指示(SIService Indication)和服务加载(SLService Load)两项服务,以给用户和网络运营者更多的选择。服务指示是将新信息的指示和相关的通用资源标识符(URI)推送给用户,由用户选择是立即处理信息还是以后处理。服务加载是将一项服务的URI推送给用户,然后客户端自动地使用PULL技术根据该URI启动服务。两种服务的区别在于用户是否介入推送信息的处理过程。SL对推送信息的处理对用户来说是透明的,而SI则在指示用户的同时,请用户对随后的处理做出选择。
PUSH
可以将某一站点或某一业务的链接通过短信发送到支持WAP PUSH功能的手机上,这样用户只需要阅读这条短信,打开短信中的链接,就可以直接访问业务了。因此,WAP PUSH实现了短信和WAP业务的结合,节省了用户寻找业务的时间,方便用户直接找到并使用自己喜欢的业务。

Wap-push短信的核心不同之处就在于:

1 含有数据报头,也就是TP_UDHI位为1,一般来说pdu的第一个字节发送时为51,接收时为44

2、 TP_DSC字节不同,一般为F5,表明字符集为8位,短信类型为Class 1;详细解释参看gsm03.38的第四章。

阅读(31) | 评论(0) | 转发(0) |
0

上一篇:GSM短消息的pdu和text模式的区别是什么?

下一篇:VirtualBox虚拟vdi磁盘扩容

相关热门文章
  • 关于SSI
  • IP Sec VPN与NAT破镜重圆
  • JS模拟鼠标自动点击
  • UT2.0正式版下载
  • tomcat6.0配置(含配置视频下载...
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
评论热议
0 0
原创粉丝点击