Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3476195
  • 博文数量: 1450
  • 博客积分: 11163
  • 博客等级: 上将
  • 技术积分: 11101
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-25 14:40
文章分类

全部博文(1450)

文章存档

2017年(5)

2014年(2)

2013年(3)

2012年(35)

2011年(39)

2010年(88)

2009年(395)

2008年(382)

2007年(241)

2006年(246)

2005年(14)

分类: Java

2008-01-10 11:56:48

PDU格式



1.简单介绍
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模式,那么就可以使用任何编码方式。

2.接收
PDU串不仅仅 包含了消息,而且还有很多发送者的元信息,他的SMS服务中心,时间标志等等。这些都是以8位字节的16进制数,或者半8位字节的十进制数。以下的字符书我从Nokia 6110 收到的信息,当从发 送的串是"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位是时区。

3.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字符。

4.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
OTA bitmap
hdr 00
48
0E
01
infofield: last octet, no compression,
no palette, 8 bit, 0 animated icons
width: 72 pixel
height: 14 pixel
depth: 1 ?
image

 

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

5.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翻译成1101000,e翻译成1100101,显然h的二进制编码不足八位,那么就将e的最后一位补足到h的前面。那么就成了11101000(E8)。剩余地编码看下表:

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。
阅读(1456) | 评论(0) | 转发(0) |
0

上一篇:pdu 编码 分析

下一篇:PDU编码规则

给主人留下些什么吧!~~