[转]PDU编解码详解

PDU编解码详解



简单介绍


SMS
是由 Etsi 所制定的一个规范( GSM 03.40 GSM 03.38 )。它可以发送最多 160 个字符,当使用 7-bits 编码的时候。 8-bit 编码 ( 最多 140 个字符)通常无法直接通过手机显示;通常被用来作为数据消息,例如: smart messaging 中的图片和铃声)和 OTA WAP 设置。 16-bit 信息(最多 70 个字符)被用来显示 Unicode(UCS2) 文本信息,可以被大多数的手机所显示。一个以 class 0 开头的 16-bit 的文本信息将在某些手机上作为 Flash SMS 显示(闪烁的 SMS 和警告 SMS )。
有两种方式来发送和接收 SMS 信息:使用文本模式或者使用 PDU(protocol description unit) 模式。文本模式(可能某些手机不支持)实际上也是一种 PDU 编码的一种表现形式。在显示 SMS 信息,可能使用不同的字符集和不同的编码方式。最常见的选择是 "PCCP437", "PCDN", "8859-1", "IRA" "GSM". 这些都通过读取应用程序的 at-command 中的 AT+CSCS 指定。如果你想阅读手机上的信息,手机会为你选择一种合适的编码。那么一个可以阅读 SMS 消息的应用要么使用 test 模式,要么是 PDU 模式。如果使用 text 模式,那么应用将绑定(或限制在)一些可能的编码选择中。在某些情况下是不够的,如果使用 PDU 模式,那么就可以使用任何编码方式。


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

接收
PDU
串不仅仅 包含了消息,而且还有很多发送者的元信息,他的 SMS 服务中心,时间标志等等。这些都是以 8 位字节的 16 进制数,或者半 8 位字节的十进制数。以下的字符书我从 Nokia 6110 收到的信息,当从 www.mtn.co.za 发送的串是 "hellohello" 的时候。
07 917238010010F5 040BC87238880900F100009930925161958003C16010


这个八位串包含了三个部分:第一个 8 位表示 SMSC 信息的长度 ("07") SMSC 的信息 ("917238010010F5"), SMS_DELIVER 部分 (GSM 03.40 中指定 )

注意 : 有些手机 ( 例如: Ericssson 888?) 头三个部分(被着色)在 PDU 模式下被省略。
8
描述
07 SMSC
信息的长度。 ( 在这个例子里是 7 个八位 )
91 SMSC
的地址类型 (91 意味着国际格式的电话号码)
72 38 01 00 10 F5
服务中心号码(半八位的十进制数)电话号码是一个奇数 (11) ,因此加入 F 来保证 8 位。这个服务中心的号码是 "+27381000015"
04 SMS_DELIVER
的第一个 8 位。
0B
地址长度。发送号码的长度 (0B hex = 11 dec)
C8
发送号码的地址类型
72 38 88 09 00 F1
发送号码 ( 半八位的十进制数 ), 有一个 F 结尾。
00 TP-PID.
协议标识
00 TP-DCS
编码方式
99 30 92 51 61 95 80 TP-SCTS.
时间邮戳 ( 8 )
0A TP-UDL.
用户数据长度,信息的长度。 TP-DCS 域表明是 7-bit 格式的数据。因此长度在这里是一个 10 7-bits 。如果 TP-DCS 被设置成 8-bit 或者 Unicode ,那么长度就应该是 9 个八位长度。
E8329BFD4697D9EC37 TP-UD. 7-bit
编码的信息。


所有的 8 位都是 16 进制编码,除了服务中心号码,发送号码和时间邮戳;他们都是十进制的半 8 位编码。在 PDU 串的结尾部分包含了一些 16 进制的 8-bits 数据,但他们实际 7-bits 数据。
十进制的半 8 位只需要将高位和地位交换就可以得到实际的数值。例如: "72 38 88 09 00 F1" "27 83 88 90 00 1F" 。因为电话号码是一个奇数,没有办法组成 8 位编码,所以使用 F 来补齐。在解析时间邮戳的时候( "99 03 29 15 16 59 08" ),前 6 位代表日期,后 6 位代表时间,最后 2 位是时区。


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

Flash SMS
在某些手机上 ( 所有的 Nokias, 某些 Siemens, Ericsson, Motorola 等等 ..)class 0 信息将被显示为一种 flash SMS 信息。这些信息只要一到达,将立即显示在屏幕上,而不需要按任何按钮。如果数据的编码方式是设置成 16-bit unicode (ucs2), 而且信息以 "0001" 开头,那么它将作为一个闪烁的 flash message 显示。

Octet Value Description
TP-DCS 18 16 bits (UCS2), message class 0
TP-VP AA Validity period
TP-UDL 0C User Data Length, 12 octets
TP-UD 00 01 00 41 00 6C 00 65 00 72 00 74 User Data, message "Alert"


这个表显示了 Flash SMS 中的相关信息。
第一个 unicode 字符 ("00 01") 使能闪烁。这样的消息最长就是 69 unicode 字符。


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

Nokia ICON
这是一个 OTA (On The Air) bitmap.
这个文件是从 Nokia 论坛下载而来。在 "Smart Messaging" 连接中。

  PDU
type 44
RP:0 (no reply path)
UDHI:1 (UD begins with a header)
SRI:0 (no status report will be returned)
MMS:1 (no more messages)
MTI:00 (SMS-deliver)
OA 0B
91
6302752852F1
length:11 digit
type: international,E.164/E.163
number: 36 20 5782251
PID 00
PDU content: short message
DCS F5
data coding: 8 bit
message class: 1
SCTS 991012
114343
40
date: 99/01/21
time: 11:34:34
timezone: GMT+1
UDL 89
137 octets
UD UDH 06
05
04
1583
1583
length of header: 6 octets
information element type: NBS port addressing
information element length: 4 octets
destination port: CLI icon
source port: CLI icon
O
T
A

b
i
t
m
a
p h
d
r 00

48
0E
01
infofield: last octet, no compression,
no palette, 8 bit, 0 animated icons
width: 72 pixel
height: 14 pixel
depth: 1 ?
i
m
a
g
e

d
a
t
a
3FF00110005B0001E8
7FF802A801A500021C
3FF80C470101000408
7FF808010081001C04
3FF008150081001304
7E10183F0058803A84
7DF030490064802C9C
7E501855002D80473C
3AD0082A8058404218
39B005010060C04930
105005BE0042203220
1A1007620046600C40
09E001BB003B900840
042000960001080EA0




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

7Bit
编码
"hellohello"
包含了10个字符,他们必须一个个将用7-bits来代表。

h e l l o h e l l o
104 101 108 108 111 104 101 108 108 111
1101000 1100101 1101100 1101100 1101111 1101000 1100101 1101100 1101100 1101111
1101000
110010 1
11011 00
1101 100
110 1111
11 01000
1 100101
1101100
1101100
110111 1



首先将字符转换为7位的二进制,然后,将后面字符的位调用到前面,补齐前面的差别。例如:h翻译成1101000e翻译成1100101,显然h的二进制编码不足八位,那么就将e的最后一位补足到h的前面。那么就成了11101000E8)。剩余地编码看下表:


1 1101000
00 110010
100 11011
1111 1101
01000 110
100101 11
1101100 1

1 1101100
110111
E8 32 9B FD 46 97 D9
EC 37


那么就变成了9个八进制数 E8 32 9B FD 46 97 D9 EC 37



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

错误信息
错误编码 意义
0-127 GSM 04.11 Annex E-2 values
128-255 GSM 03.40 section 9.2.3.22 values
300 Phone failure
301 SMS service of phone reserved
302 Operation not allowed
303 Operation not supported
304 Invalid PDU mode parameter
305 Invalid text mode parameter
310 SIM not inserted
311 SIM PIN necessary
312 PH-SIM PIN necessary
313 SIM failure
314 SIM busy
315 SIM wrong
320 Memory failure
321 Invalid memory index
322 Memory full
330 SMSC (message service center) address unknown
331 No network service
332 Network timeout
500 Unknown error
512 Manufacturer specific

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值