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翻譯成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。
--------------------------------------------------------------------------------
錯誤資訊
錯誤編碼意義
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