最近公司某部門要在管理系統中整合簡訊收發功能,任務落到我頭上,雖然簡訊平台並不是什麼新鮮事,買裝置也能提供二次開發庫,但之前沒接觸過,於是也很投入地作了學習和研究。起初很神秘很刺激,在網上一通搜,發現純收發簡訊功能其實並不複雜,也就是通過串口把AT
指令發送到簡訊收發裝置,然後從串口讀取傳回的資料,解析其內容可以判斷是指令響應還是返回的資料。
這裡附帶說一下測試的工具,如果只是用來測試一般的AT指令,手頭又沒有可用的串口測試載入器,windows內建的超級終端工具是個不錯的選擇,但是超級終端沒法對已經編碼的簡訊息進行解碼,因此讀取簡訊只能看到一堆亂碼。 說到簡訊息的編碼,現在各類終端支援能支援Text和PDU兩種模式,據說Text模式對中文支援不好,因此被我直接忽略,PDU模式要掌握也並不複雜,一是要瞭解PDU編碼後的報文格式,二是要掌握編碼解碼的特定規則,一般的
PDU
編碼分為十三段,由
A
到
M
十三個英文字母表示,各段的簡單說明我列了個表
:
序號
|
PDU
分段號
|
說明
|
1
|
A
|
簡訊息中心地址長度, 2
位十六進位數 (1
位元組 )
|
2
|
B
|
簡訊息中心號碼類型, 2
位十六進位數。 |
3
|
C
|
簡訊息中心號碼, B+C
的長度將由 A
中的資料決定。 |
4
|
D
|
檔案頭位元組, 2
位十六進位數。 |
5
|
E
|
資訊類型, 2
位十六進位數。 |
6
|
F
|
被叫號碼長度, 2
位十六進位數。 |
7
|
G
|
被叫號碼類型, 2
位十六進位數,取值同 B
。 |
8
|
H
|
被叫號碼,長度由 F
中的資料決定。 |
9
|
I
|
協議標識, 2
位十六進位數。 |
10
|
J
|
資料編碼方案, 2
位十六進位數。 |
11
|
K
|
有效期間, 2
位十六進位數。 |
12
|
L
|
使用者資料長度, 2
位十六進位數。 |
13
|
M
|
使用者資料,其長度由 L
中的資料決定。 J
中設定採用 UCS2
編碼,這裡是中英文的 Unicode
字元。 |
關於PDU更詳細的內容,可以到非犬犬的Blog(http://xinos.cn/downloads/sms/manual/index.shtml
)下載《SMS PDU 手冊》
。
和簡訊相關的AT指令也能在非犬犬這找到,在此表示感謝。
最後把串口操作、AT指令封裝、PDU編解碼一通攪和做了一個實現,
在普通手機、簡訊Modem、移動上網卡都測試成功
了
本想附上實現的源碼,但沒找到上傳的地方,如果遇到有興趣的,可以發郵件到dubing.lee@gmail.com問我索取...