短信PDU编码解析

第一篇 PDU

Contents

SMS (Short Message Service) is specified by the ETSI (standards GSM 03.401 and 03.38). It can contain up to 160 characters, when each character is written according the 7-bits GSM default alphabet.[ 7 bits default tabel ]

Next to a message the SMS containt also some meta-data, for example
 - Info about the senders ( Service center number, sender number) 
 - Protocol information  (Protocol identifier, Data coding scheme)
 - Time stamp 

There are two way to recieve and send SMS messages a, PDU (protocol discription unit) and Text mode. In this document we focus on PDU mode.

PDU format can be used on any encoding. To explain you the SMS PDU encoding we use an example:

07911326040000F0040B911346610089F60000208062917314080CC8F71D14969741F977FD07

The above PDU string contains the message "How are you?" and was read from a Siemens C35i mobile phone.
The string is build from hexadecimal-octets and semi decimal-octets. As mentioned before, the SMS contains some meta-data about him self.
We explain it using the example above:

Octet(s)DescriptionformatIn this example
07Length of the SMSC information

hex-octet

7 octets

91Type of address of SMSChex-octetinternation format
13 26 04 00 00 F0SMSC numberdecimal semi-octets b31624000000
04First octet of this SMS-DELIVER message.hex-octetTP-MMS
0BLenght of the sender addresshex-octet11 (decimal)
91Type of address of the sender numberhex-octet...
13 46 61 00 89 F6Sender numberdecimal semi-octets31641600986
00Protocol identifierhex-octets...
00Data encoding schemehex-octets...
20 80 62 91 73 14 08Time stamp cdecimal semi-octets06-08-02 29:17:31
0CLength of User data (SMS message)hex-octets12 (decimal)
C8 F7 1D 14 96 97 41 F9 77 FD 07User data8-bit octets respresenting 7-bit dataHow are you?

Tabel 1.



PDU converter is an online PDU string analyser.

Hexadecimal PDU Message

 7/8/16 Bit PDU Message (readable)

 
   
 Show User data translation (7 bit only)
String sms message

 Hexadecimal PDU Message

SMSC
Receiver
Alphabet Size7816
 
   
  

Links

The European Telecommunications Standards Institute (ETSI)
Lars Pettersson about PDU mode

Notes

a.To see which modes your mobile supports, you can use the "AT+CMGF=?" command.
You will get a response with the supported SMS formats
 0: PDU mode, 1: Text mode
b.To obtain data from a string that is written as a semi-octet, you have to swap the semi-octet string. If the length of a semi-octet string is odd, you have to add an extra "F" to make it even, so that you get a proper octet string.
Example:
 "13 46 61 00 89 F6" becomes "31 64 16 00 98 6F"
c.Time stamp is represented in semi-octets (See note b). So "20 80 62 91 73 14 08" becomes "02 08 26 02 29 17 31 80". The first 6 characters represent the date, the next 6 characters represent the time, the last 2 characters represent the time-zone related to the GMT.

References

1.Digital cellular telecommunications system (Phase 2+); Technical realization of the Short Message Service (SMS)Point-to-Point (PP) (3GPP TS 03.40 version 7.5.0 Release 1998), ETSI TS 100 901 V7.5.0 (2001-12)
2.Digital cellular telecommunications system (Phase 2+); Alphabets and language-specific information (GSM 03.38 version 7.2.0 Release 1998), ETSI TS 100 900 V7.2.0 (1999-07)

Written by Swen-Peter Ekkebus View Swen-Peter Ekkebus's LinkedIn profile, v1.0 august 2002 | v1.2 may 2003 | v1.4 august 2003 [Milan Chudik] | v1.5 november 2004 [Andrew Alexander], ekkebus@cs.utwente.nl


第二篇短信编码PDU格式解析
发布时间:2009-8-27 15:12:29
 

一、短消息收发的实现模式
计算机串口上连接GSM MODEM,用它向手机发送短消息,要求对AT 指令集和串口编程比较熟悉。这种方法收发短消息又分三种模式:BLOCK 模式、TEXT 模式和PDU 模式。BLOCK 模式现在用的很少了; TEXT 模式则只能发送ASCII 码,它不能发送中文的UNICODE码——确切地讲,从技术上来说是可以用于发送中文短消息的,但是国内的手机基本上不支持;而PDU 模式开发起来则较为复杂,它需要编写专门的函数来将文本转换为PDU 格式,但PDU 模式被所有手机支持,可以使用任何字符集,它也是手机默认的编码方式。笔者在开发中正是选用的PDU 模式。
二、PDU 模式
用PDU 模式收发短消息可以使用三种编码: 7-bit 编码、8-bit 编码和UCS2 编码。7-bit
编码用于发送普通的ASCII 字符;8-bit 编码通常用于发送数据消息,如图片或铃声等;UCS2
编码用于发送Unicode 字符。由于笔者在系统中要实现中文短消息的发送,所以选择用UCS2
编码,即中文Unicode 码。
(一)UCS2 编码原理
所谓UCS2 编码,是将单个的字符(1-2 个字节)按ISO/IEC10646 的规定,转变为16 位
的Unicode 宽字符。即将单个的字符转换为由四位的‘0’-‘9’、‘A’-‘F’的数字和字
母组成的字符串。待发送的消息以UCS2 码的形式进行发送。
(二)发送PDU 串的编制分析
通过UCS2 编码我们得到中文Unicode 码,接着就可以进行发送PDU 串的编制了。从表
面上看,PDU 串是ASCII 码串,同样由‘0’-‘9’、‘A’-‘F’这些数字和字母组成。它
们是8 位字节的十六进制数,或者BCD 码十进制数。PDU 串除了包含所发送的消息本身外,还包含很多其它参数信息,如服务中心号码、目标号码和编码方式等。现用一个实例说明发送PDU 串的结构和编排方式。
例:08 91 683108100005F0 31 00 0D 91 683119109991F2 00 08 C2 06 60A8597DFF01
参照规范,具体分析:
分段含义解释说明
08 SMSC 地址信息的长度共8 个八位字节(包括91)
91 SMSC 地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
68 31 08 10 00 05 F0 SMSC 地址8613800100500,补‘F’凑成偶数个
31 基本参数(TP-MTI/VFP) 要求发送回复
00 消息基准值(TP-MR) 0
0D 目标地址数字个数共13 个十进制数
91 目标地址格式(TON/NPI)
A1:国内格式
91:国际格式
81:未知,+86 可带可不带。
683119109991F2 目标地址(TP-DA) 8613910199192,补‘F’凑成偶数个
00 协议标识(TP-PID) 是普通GSM 类型,点到点方式
08
用户信息编码方式
(TP-DCS)
00:表示7-bit 编码, 08:表示UCS2 编码,
04:表示8-bit 编码。
C2 有效期(TP-VP) 5 分钟
06 用户信息长度(TP-UDL) 实际长度6 个字节
60 A8 59 7D FF 01 用户信息(TP-UD) “您好!”
这里需要注意的几点:
①.比较SMSC 地址分段:68 31 08 10 00 05 F0 与真实SMSC 地址8613800100500F(为
了凑足14 位,在末尾补F),不难发现只需将前者奇偶位对调即可得到后者。同样,目标地
址分段683119109991F2 与实际目标地址13910199192F 之间的关系也是如此。
②.若“SMSC 地址信息的长度”分段的值为00,则意味着SMSC 地址字符串的长度为零,
PDU 串的“SMSC 地址格式”段和“SMSC 地址”段将省去。且将使用SIM 卡设置的SMSC 地址。
上例中的PDU 串变为:
00 31 00 0D 91 683119109991F2 00 08 C2 06 60A8597DFF01
③. 对于用户信息长度,可通过VB 中的Len 函数求得,如“您好!”,用Len(“您好!”)
得到是3,那么3*2=6 即为用户信息长度06(这里要转换为16 进制,并且是两位)。
④.用户信息(TP-UD)段最大容量是140 字节,所以在UCS2 编码方式下,可发送短消息
的最大字符数是70 个。
(三)UCS2 解码
在接收消息时,可能不仅收到UCS2 格式编码的PDU 串,也可能是7bit 编码格式
(TP-DCS 为00)或8bit 编码格式(TP-DCS 为04)的PDU 串。对这两种情况,笔者也编了相应的解码算法,且它们的算法要相对简单,由于着重介绍UCS2 解码,7bit 与8bit 解码就不再多介绍了。
(四)接收PDU 串的编制分析
接收PDU 串和发送PDU 串结构是不完全相同的。通过一个实例来分析,假定收到的短消
息其PDU 串为:
08 91 68 31 08 10 00 05 F0 04 0D 91 68 31 19 10 99 91 F2 00 08 40 40 60 31 35 30
23 06 60 A8 59 7D FF 01
参照规范,具体分析:
分段含义解释说明
08 SMSC 地址信息的长度共8 个八位字节(包括91)
91 SMSC 地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
68 31 08 10 00 05 F0 SMSC 地址8613800100500,补‘F’凑成偶数个
84 基本参数(TP-MTI/MMS/RP) 接收,无更多消息,有回复地址
0D 回复地址数字个数共13 个十进制数(不包括91 和‘F’)
91 回复地址格式(TON/NPI) 国际格式
68 31 19 10 99 91 F2 回复地址(TP-RA) 8613910199192,补‘F’凑成偶数个
00 协议标识(TP-PID) 是普通GSM 类型,点到点方式
08 用户信息编码方式(TP-DCS) UCS2 编码
40 90 10 31 35 30 23 服务时间戳(TP-SCTS) 2004-09-01 13:53:03
06 用户信息长度(TP-UDL) 实际长度6 个字节
60 A8 59 7D FF 01 用户信息(TP-UD) “您好!”
通过分析,我们可以获取其中的有用信息。如:短信服务中心号码是+8613800100500,
发送方号码是13910199192,发来的消息内容是“您好!”,以及发送时间是:2004-09-01
13:53:03。


AT指令收发短信主要有两种模式:Text模式和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,很容易实现,最大缺点不支持中文短信。PDU模式不仅能发送中文短信,也能发送英文短信。PDU收发短信有三种编码可用:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,即英文短信,最多可发送160字符。8- bit编码通常用于发送数据消息。UCS2编码用于发送Unicode字符,可发送中文字符,最多发送70字符。

短信发送实例:

Text模式(向号码为15050850677的手机发送“TEST”):

1:  AT                        //发送AT 返回OK 连接成功
2:  
3:  OK
4:   
5:  AT+CMGF=1                //设置为Text模式
6:  
7:  AT+CMGS="15050850677"    //发送指令,双引号内改为对用手机号码
8:  
9:  > TEST(+^z,十六进制的1A)//返回字符串中有OK 发送成功 >号为设备返回字符

PDU模式(向号码为15050850677的手机发送“你好”):

1:  AT                        //发送AT 返回OK 连接成功
2:  
3:  OK
4:   
5:  AT+CMGF=0                //设置为PDU模式
6:  
7:  AT+CMGS=19                //发送指令,更改为对应PDU编码的长度计算方法在后面
8:  
9:  > 0011000D91685150800576F70008C4044F60597D(+^z,十六进制的1A)//返回字符串中有OK 发送成功

有的“猫”用“串口调试器”发送总是失败:Text模式接收到的是乱码,PDU模式发送不出去。我用的这个就是这个样子,给我郁闷了很多天,后来发现在串口调试器中我们摁下的“回车”被解析为”\r\n”,而我用的这个modem只有在只发送AT指令+”\r”时才能正确的发送短信。发现后发送短信都能成功,高兴了好一会儿。不说废话了,开始PDU短信编码的解析。这是我的理解,更多详细资料参考下列标准:
GSM 03.04 着重介绍短信发送中对字符集的控制部分
GSM 03.08
GSM 03.41
GSM 07.05 介绍 at 的一些控制命令
GSM 07.07 着重介绍 at 的短信相关命令,可以说是at的sms 规范

元素名称长度描述
SCAService Center Address1-12短消息服务中心号码
PDU-TypeProtocol Data Unit1协议数据单元类型
MRMessage Reference1所有成功的短信发送参考数目(0..255)
OAOriginator Address2-12发送方地址(手机号码)
DADestination Address2-12接收方地址(手机号码)
PIDProtocol Identifer1参数显示消息中心以何种方式处理消息内容(比如FAX,Voice)
DCSData Coding Scheme1参数显示用户数据编码方案
SCTSService Center Time Stamp7消息中心收到消息时的时间戳
VPValidity Period0,1,7参数显示消息有效期
UDLUser Data Lenghth1用户数据长度
UDUser Data0-140用户数据

发送方PDU格式:

SCAPDU-TypeMRDAPIDDCSVPUDLUD
1-12112-12110,1,710-140

示例:

向15050850677发送一条短信,内容“Test”

0011000D91685150800576F70000C404D4F29C0E

向15050850677发送一条短信,内容“你好”

0011000B815150800576F70008C4044F60597D

SCAPDU-TypeMRDAPIDDCSVPUDLUD
1-12112-12110,1,710-140
0011000D91685150800576F70000C404D4F29C0E
0011000B815150800576F70008C4044F60597D

接收方PDU格式:

SCAPDU-TypeOAPIDDCSSCTSUDLUD
1-1212-1211710-140

示例:

从15050850677接收一条短信,内容“Test”

0891683110402505F0240BA15150800576F700000111208160302304D4F2
9C0E

从15050850677接收一条短信,内容“你好”

0891683110402505F0240BA15150800576F7000801112081600423044F60
597D

SCAPDUTypeOAPIDDCSSCTSUDLUD
1-1212-1211710-140
0891683110402505F0240BA15150800576F700000111208160302304D4F29C0E
0891683110402505F0240BA15150800576F7000801112081600423044F60597D

SCA:短消息服务中心地址格式

服务中心地址包含三个部分:1-12个8位位组 第一个位组指示服务中心地址长度,第二个位组指示服务中心类型,第三个位组为服务中心地址。

示例:0891683110402505F0

LenghthTypeAddress
0891683110402505F0

Lenghth:服务中心地址长度 指示Type+Address部分位组长度(例中:91683110402505F0中位组8个:08)
如果Lenghth部分为“00”则不提供后面部分,发送时终端将自动从SIM卡中读取并填充SCA

Type:短信中心地址的类型(81:指国内的号码 91:指国际的号码 91最常用(资料里都说是这样,但根据后面的表格:国内应该是A1,81是未知!!))91H=10010001B 具体意义如下表:

BIT No.76543210
 1类型类型类型号码鉴别同3同3同3

类型:000-未知 001-国际 010-国内 111-留作扩展

号码鉴别:0000-未知 0001-ISDN/电话号码(E.164/E.163) 1111-留作扩展

SCA示例:

短信中心PDU编码
+86130104525000891683110402505F0
1301045250007813110402505F0
1234560481214365

注:AT指令中 AT+CMGS=<Len> Len不包含此段位组的长度

PDU Type:是发送和接受短信的PDU中的第一个8位位组

发送方:例 11h=00010001b

Bit No.76543210
 RPUDHISRRVPFVPFRDMTIMTI
 00010001

接收方:例 24h=00100100b

Bit No.76543210
 RPUDHISRI  MMSMTIMTI
 00100100

RP:应答路径,
0-未设置 
1-设置

UDHI:用户数据头标识(User Data Header Indicator),
0-用户数据(UD)部分不包含头信息 
1-用户数据(UD)开始部分包含用户头信息

SRR:请求状态报告(Status Report Request),
0-不需要报告 
1-需要报告

SRI:状态报告指示(Status Report Indication),此值仅被短消息服务中心设置,
0-状态报告将不会返回给短消息实体(SME)
1-状态报告将返回给短消息实体(SME)

VPF:有效期格式(Validity Period Format),
00-VP段没有提供(长度为0)
01-保留
10-VP段以整型形式提供(相对的)
11-VP段以8位位组的一半形式提供(绝对的)

RD:拒绝复本(Reject Duplicate)
0-通知短消息服务中心(SMSC)接受一个消息(SMS-SUBMIT),即该消息是先前已提交过的,并还存在与SMSC中未发送出去。MS重复的条件是:消息参考(MR)、接收方地址(DA)及发送方地址(OA)相同
1-通知SMSC拒绝一个重复的SMS

MMS:有更多的消息需要发送(More Message to Send),此值仅被SMSC设置
0-在SMSC中有更多的信息等待MS
1-在SMSC中没有更多的信息等待MS

MTI:信息类型指示(Message Type Indicator)
不太理解 有待于再查资料

MR:信息参考 不太理解 置为00即可

DA/OA:接收方与发送方地址

DA与OA编码方式是一样的 2-12个8位位组

例:0D91685150800576F7

LenghthTypeAddress
0D91685150800576F7

Lenghth:地址长度 指8615050850677的长度。与SCA中不一样!
Type:地址类型 指示国内(81) 还是国际(91)

示例:

号码PDU编码
+86150508506770D91685150800576F7
150508506770B815150800576F7
1234560681214365

PID:协议标识(Protocol Identifier)

对于标准情况下的MS-to-SC短消息传送,只需设置PID为00

DCS:数据编码方案(DataCoding Scheme)

Bit No.76543210描述
示例:0000000000h 7bit数据编码 默认字符集
 11110110F6h 8bit数据编码 Class1
 0000100008h USC2(16bit)双字节字符集

Bit No.7与Bit No.6:
一般设置为00

Bit No.5:
0-文本未压缩
1-文本用GSM标准压缩算法压缩

Bit No.4:
0-指示Bit No.1 Bit No.0为保留位,不含信息类型信息
1-指示Bit No.1 Bit No.0含信息类型信息

Bit No.3与Bit No.2:
00-默认的字符集,每字符占7bit,此时最大可发送160字符
01-8bit,此时最大可发送140字符
10-USC2(16bit),发送双字节字符集
11-预留

Bit N0.1与Bit No.0:
00-Class 0,短消息直接显示在屏幕上
01-Class 1,
10-Class 2(SIM卡特定信息),
11-Class 3

示例:

DCS字符集信息Class
007-bitNo Class
F07-bitClass 0(Immediate Display)
F17-bitClass 1(Mobile Equipment-specific)
F27-bitClass 2(SIM specific Message)
F37-bitClass 3(Terminate Equipment-specific)
F48-bitClass 0(Immediate Display)
F58-bitClass 1(Mobile Equipment-specific)
F68-bitClass 2(SIM specific Message)
F78-bitClass 3(Terminate Equipment-specific)
0816-bitNo Class
1816-bitClass 0(Immediate Display)

VP:信息有效期(Validity Period)

第一种情况(相对的):VPF=10 VP=AAH(四天)

第二种情况(绝对的):VPF=11

时区
30800290543320

表示:03-08-20 09:45:33

VP段以整形或半个8位位组形式提供

第一种情况,VP为一个8位组,给定有效期的长度
从消息被SMSC接收开始计算

VP相应的有效期
00-8F(VP+1)*5分钟 从5分钟间隔到12小时
90-A712小时+(VF-143)*30分钟
A8-C4(VP-166)*1天
C5-FF(VP-192)*1周

第二种情况,VP为七个8位组,给定有效期终止的绝对时间 时间形式与SCTS形式一致

SCTS:服务中心时间戳(Service Center Time Stamp)

占用7个8位组,格式和VP第二种情况一致,请参考其中的表格

UDL:用户数据长度(User Data Lenghth)

UDL以整形形式提供,指示后面用户数据段的长度(UD的8位组的个数)

UD:用户数据(User Data)

英文编码:7bit编码,依次将下一位的后几位移至前面形成新的8位编码
示例:Test
T:01010100 e:01100101 s:01110011 t:01110100
去最高位0,变为7位 
T:1010100 e:1100101 s:1110011 t:1110100
后面低位移至前面形成8位编码
Test:11010100111100101001110000001110
UD:D4F29C0E UDL:04

中文编码:取USC2编码 高低字节交换即可

注意:7bit编码的UDL部分计算的是编码前的字符串长度,而不是编码后的8位组个数!

注:AT+CMGS=<Len><cr>中Len为出SCA外8位组的个数


  第四篇

Text模式和PDU模式的区别

  1022人阅读  评论(1)  收藏  举报

发送短消息常用Text和PDU(Protocol   Data   Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。一般的PDU编码由A   B   C   D   E   F   G   H   I   J   K   L   M十三项组成。

A:短信息中心地址长度,2位十六进制数(1字节)。
B:短信息中心号码类型,2位十六进制数。
C:短信息中心号码,B+C的长度将由A中的数据决定。
D:文件头字节,2位十六进制数。 
E:信息类型,2位十六进制数。
F:被叫号码长度,2位十六进制数。
G:被叫号码类型,2位十六进制数,取值同B。
H:被叫号码,长度由F中的数据决定。
I:协议标识,2位十六进制数。
J:数据编码方案,2位十六进制数。
K:有效期,2位十六进制数。
L:用户数据长度,2位十六进制数。
M:用户数据,其长度由L中的数据决定。J中设定采用UCS2编码,这里是中英文的Unicode字符。

 

实际应用:

本文以一个实例来解说AT指令发送PDU短信的全过程,假如我要发送下面的短信:   
接收号码:+8613602433649   
短信内容:abc你好!   
短信中心号码:+8613800546500   
一、短信中心号码处理:用字符串 addr 表示   
1、将短信息中心号码去掉+号,看看长度是否为偶数,如果不是,最后添加F   
即 addr = "+8613800200500"   
=> addr = "8613800546500F"   
2、将奇数位和偶数位交换。   
=> addr = "683108506405F0"   
3、将短信息中心号码前面加上字符91,91是国际化的意思   
=> addr = "91683108200005F0"   
4、算出 addr 长度,结果除2,格式化成2位的16进制字符串,16 / 2 = 8 => "08"   
=> addr = "0891683108200005F0"   
二、手机号码处理:用字符串 phone   
1、将手机号码去掉+号,看看长度是否为偶数,如果不是,最后添加F   
即 phone = "+8613602433649"   
=> phone = "8613602433649F"   
2、将手机号码奇数位和偶数位交换。   
=> phone = "683106423346F9"   
三、短信息部分处理:用字符串 msg 表示   
1、转字符串转换为Unicode代码,例如“abc你好!”的unicode代码为 0061006200634F60597DFF01,   
2、将 msg 长度除2,保留两位16进制数,即 0061006200634F60597DFF01 = 24 / 2 => "0C",再加上 msg   
=> msg = "0C0061006200634F60597DFF01"   
四、组合   
1、手机号码前加上字符串 11000D91(1100:固定,0D:手机号码的长度,不算+号,十六进制表示,91:发送到手机为91,发送到小灵通为81。但是我用81也能往手机上发送成功),   
即 phone = "11000D91" + phone   
=> 11000D91683106423346F9   
2、手机号码后加上 0008A7 和刚才的短信息内容,0008A7也写死就可以了,具体含义我也不太清楚!   
即 phone = phone + "0008A7" + msg   
即 11000D91683106423346F9 + 0008A7 + 0C0061006200634F60597DFF01   
=> phone = 11000B815160066703F10008A70C0061006200634F60597DFF01   
3、phone 长度除以2,格式化成2位的十进制数   
即 11000B815160066703F10008A70C0061006200634F60597DFF01 => 52位 / 2 => 26   
五、所以要发送的内容为   
AT+CMGF=0 <回车><换行>   
OK   
AT+CMGS=26<回车><换行>   
> 891683108506405F011000B815160066703F10008A70C0061006200634F60597DFF01 <Ctrl+Z> <回车><换行>(注意:这里的Ctrl+Z的ASCII值是26,用16进制发送时是1A)

第五篇 PDU模式分析

  (2011-11-22 17:12:38)
标签: 

杂谈

分类: Embedded

GSM短信编码方式有三种,BlockTextPDU模式Block模式现在已经很少采用Text模式用来进行ASCII码的短信发送,因为ASCII码是8位字符码,所以主要用来进行单字节信息-拼音或字母的短消息发送,从技术上讲,Text模式也可以用来进行中文短信的发送。但是在发送和接收时需要采样软件编码方式进行额外的处理,由于现在的手机内置短信都没有增加从Text模式到中文的转换方式,所以在手机上无法使用该方法进行中文短信收发。PDU模式采用多种编码方式,既可以使用ASCII格式,也可以采用Unicode方式编码,因此,可以用来进行以Unicode为编码方式的中文处理。

PDU模式是一种比较复杂的编码方式,它将编码信息,收发地址,短消息内容,短消息附加信息统一进行了编码,采用二进制方式进行收发,因此,终端用户在使用AT指令前需要将用户输入的字符串进行转换后才能使用相关AT指令进行处理。

由于PDU模式下发送和接收短消息解码方式略有不同,因此通过发送来进行讲解

AT+CMGF=0

AT+CMGS=<length><CR>

<PDU><Ctrl-z>

AT+CMGF=0用来设置发送短信的模式,0PDU模式,也是默认工作模式,系统重启后便是默认该工作模式。

AT+CMGSGSM发送短信的AT命令,length为发送短信TPDU的长度而不是短消息的长度,PDU则是AT发送的信息,二进制方式,包括目标地址信息,发送地址信息和短信内容。

PDU内容分为以下几个部分:

1.              SMSC地址信息

    PDU模式分析

 

    PDU部分为二进制编码方式,采用字节信息方式。首先起始的一个字节,用来存储SMSC地址信息和类型信息总长度,以字节为计算单位。

第二个字节为地址类型信息。

   PDU模式分析

    该地址表示地址类型,0x91代表国际,此时需要在地址前加国际号86;当为0x81时,表示为国内电话。

 

接下来为地址的数值具体字节长度根据用户输入的号码来确定,由于采用的是字节对齐的方式,所以如果输入的数字为奇数时需要添加一个标识字符来填充。值得注意的是该编码方式输入数字的相邻位进行了交换,例如,13026565456,由于是奇数,需要填充一个F,编码最终结果是 3120565654F6

2.              TPDU部分

这一部分是短信的主要信息部分,AT+CMGS=<length>length长度由该部分长度决定。其中括号中标M的表示必须具有的字段,不能省略,标O的表示Option可选项。

PDU模式分析
First-Octet与地址信息部分相似,第一个字节为短信基本信息,包括短信是否发送,短信中心是否拒绝同一短信,短信中心是否回复,是否包含信息头,是否包括有效日期等信息,

PDU模式分析

 

发送短信时,TP-MTI位必须设置为0x01,表示提交发送短信。

   TP-MR第二个字节为短消息参考信息值。表示当前短消息重复发送的次数。

   TP-DA为目标地址信息,与上述地址信息相同,包括目标地址长度和地址内容,整个部分的最大长度为12个字节。

目标地址长度,以半字节为单位进行计算。比如13995452345的长度按这个标准计算长度值为11

   接下来是目标地址,编码方式与短信控制中心的地址编码方式相同,长度为目标地址长度中存储的字节表示的数值的一半,当目标地址为奇数时,填充F,编码也是采用半字节高低位交换方式。

   PDU模式分析

   TP-PID为协议标识,长度为一个字节,默认bit7bit60bit51时,由bit0bit4来表示SC按何种方式进行处理短消息,比如0x12表示采用传真方式,0x14表示采用语音处理。当bit50时,bit4bit0位无效,表示采样点对点协议。通常该字节默认值为0,表示使用点对点的GSM协议处理。

TP-DCS:一个字节长度,表示短消息的编码方式。通常有以下三种

0x08表示为UCS2编码方式,按照Unicode编码方式,两个字节表示一个字符编码。

0x04表示为8bit编码方式,按照ASCII编码方式,一个字节表示一个字符。

0x00 表示为7bit编码方式,按照GSM字符编码表进行编码。

TP-VP:用来表示短信有效时间。由First-obtetTP-VPF来决定,当TP-VPF0x10,表示相对当前的时间,当为0x11,表示为绝对时间,用7byte表示年月日时分秒信息。

TP-UDL:有效的信息长度,以字节为计算单位。当该位为0时,后面不带任何用户数据。

TP-UD:用户的有效信息。以TP-DC规定的编码方式进行编码。当TP-VDL0时,该数据段无效。

 

PDU模式的短消息。

AT+CMGF=0;

AT+CMGR=<index>读取存储器中第index条短信。

+CMGR=<length>  

<PDU>

OK

PDU的内容包括SMSC的地址和TPDU两部分。LengthTPDU的长度。

1.                        

                SMSC地址

     该部分内容与发送短信时相同,因此省略该部分解释。

 

2TPDU

         PDU模式分析

First-Octet为一个字节长度,包含短信基本信息

PDU模式分析

 

其中TP-MTI必须为0x00,表示为接收短信。其他各位标识根据GSM03.049节内容来确定。其中TP-UDHI位不为0的话,表明在TP-UD还包括相应头信息。

TP-OA:该信息为发送该条短信的设备地址。地址解析方式与发送短信的TPDU中的TP-DA解析方法完全一致。

TP-PID:表示短信以何种方式进行默认为0x00,表示采用点对点的GSM传送协议。

TP-DCS:短信内容编码模式,通过读取该位内容,可以确定接收的短信编码方式,从而能够正确的读取并显示短信内容。

TP-SCTS:为短信中心的时间标记,长度为7个字节,分别代表年月日时分秒时区七个信息。

PDU模式分析

 

通过分析这七字节能够得到短消息的接收时间。

TP-UDL:表示短消息内容的长度,以字节为计算单位。

TP-UD:读出的短消息内容,根据TP-DCS的编码方式,可以解析出相应的字符。然后提供给终端单元给用户进行显示。

 

--------------------------------------------------------------------------------------------------

 

PDU 模式
 
  用PDU 模式发送 WAP PUSH可以使用三种编码: 7-bit 编码、8-bit 编码和UCS2 编码。7-bit 编码用于发送普通的ASCII 字符,8-bit 编码通常用于发送数据消息,UCS2 编码用于发送Unicode 字符。由于要实现中文WAP PUSH的发送,所以选择用UCS2 编码,即中文Unicode 码。
⑴ UCS2 编码原理 所谓UCS2 编码,是将单个的字符(1-2 个字节)按ISO/IEC10646 的规定,转变为16 位 的Unicode 宽字符。即将单个的字符转换为由四位的‘0’-‘9’、‘A’-‘F’的数字和字 母组成的字符串。待发送的消息以UCS2 码的形式进行发送。
⑵ 通过UCS2 编码我们得到中文Unicode 码,接着就可以进行发送PDU 串的编制了。从表面上看,PDU 串是ASCII 码串,同样由‘0’-‘9’、‘A’-‘F’这些数字和字母组成。它们是8 位字节的十六进制数,或者BCD 码十进制数。PDU 串除了包含所发送的消息本身外,还包含很多其它参数信息,如服务中心号码、目标号码和编码方式等。


  例如

0051000BA13108086406F600F5A7850B05040B8423F_
0000303010129060603AE81EA8DCA02056A0045C6080C033231312e_
3133362e3135332e33302f776170707573682f70757368496e6465782e_
6a73703f7075736849643d3035303531313134313630353231000103E8A_
FB7E782B9E587BBE4BBA5E4B88BE993BEE68EA5E88EB7E58F96E5BDA9E4BFA1E58685E5AEB9000101_

  为一串可以成功发送的WAP PUSH,其中包括了汉字描述和WAP页面地址。具体分析如下

  00 SMSC 地址信息的长度 00表示用手机上设置短信中心号码,PDU 串的“SMSC 址格式”段和“SMSC 地址”段将省去

  51 基本参数(TP-MTI/VFP) 不要求发送回复

  00 消息基准值(TP-MR)

  0B 对方电话的长度

  A1 目标地址格式 A1表示为国内格式

  3108086406F6 目标地址,补‘F’凑成偶数位后奇偶位互换

  00 协议标识(TP-PID) 是普通GSM 类型,点到点方式

  F5 用户信息编码方式 (TP-DCS)

  A7 有效期(TP-VP)

  85 用户信息长度(TP-UDL)

  0B WAP PUSH头部的总长度

  05040B8423F0表示接下来是一个WAP PUSH

  00 表示是Concatenated Short Messages

  03 长度

  03 reference number

  01 表示分成1个短信发送

  01 当前包的序号

  29060603AE81EA8DCA WSP

  02 标记位

  05 -//WAPFORUM//DTD SI 1.0//EN

  6A UTF-8

  00 标记开始

  45 <si>

  C6 <indication

  08 <action=signal-high>

  0C href="http://

  03 字符串开始

3231312e3133362e3135332e33302f776170707573682f
70757368496e6465782e6a73703f7075736849643d3035303531313134313630353231 URL

  00 URL 字符串结束

  01 >

  03 内容描述字符串开始

  E8AFB7E782B9E587BBE4BBA5E4B88BE993BEE68EA_
  5E88EB7E58F96E5BDA9E4BFA1E58685E5AEB9 内容描述字符串

  00 内容描述字符串结束

  01 </si>

  01 </indication>

  由以上分析可以看出,WAP PUSH可以被当作一种特殊的短信来发送,WAP PUSH包发送的内容实际上跟通过PPG网关发送的XML原理相同,但是经过了压缩。压缩之后的格式称为WBXML,这种格式将一些标记用代码来表示。然而WBXML的缩略标记分为两部分,一部分是所有类型的XML都通用的,另一部分是不同类型的XML有着不同的解释。
用户接收到此类信息时,在客户端手机支持WAP的情况下,可以直接访问到信息中加载的WAP网站地址,这样服务器也达到了推广业务方便用户使用的目的。由于在UCS2 编码方式下,可发送短消息的最大字符数是140字节,即WAP PUSH中的推送URL与描述文字的总字符数为140,因此描述文字的字数限制与推送的URL长度有关。
原文地址:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值