Was this page helpful?

PDU

    內容表格
    沒有標頭


    原文出處. 資料已消失
    http://note.tcc.edu.tw/387.html
     

    前言 Abstract

    行動電話上面可以發送簡訊,但是在那麼小的手機上利用不方便的輸入法打入中文,是非常的不方便;有些手機商有提供手機的應用程式,有些介面還不錯,操作也 很方便,只可惜部分是要付費的,同時若要應用手機的簡訊做些事情(例如系統通報),還是希望自己的程式能由電腦直接控制手機傳送簡訊;這篇文章會詳細說明 如何用C# 撰寫一個手機的控制程式,以享同好,由於原始程式寫於二年前,很多東西已經忘記了,如有疏漏也待後面補完。

    工作努力 Effect

    1. 研讀及了解手機的指令 AT Command 30%
        AT Command 是和手機溝通用的信令,但這部分並沒有標準化,所以各家手機的參數不盡相同。由於我的手機是 Motorola v191 (很陽春的機型),所以我大致研讀 AT command 的語法及原理外,就仔細的研究 Moto 這一款的 spec。實機測試中發現同學的 Nokia (好像是6系列)也可以使用我的程式,不過 LG 的就不行(型號忘記了)。

    2. 研讀及了解 GPRS/GSM 系統 10%
        由於手機的簡訊系統 SMS 是屬於2G的GPRS/GSM 系統,所以有稍微的了解他的原理,也了解系統的限定。

    3. 編解碼的操作轉換 40%
        程式最大的困難點在於 SMS 系統的編解碼,困難點在於要將UTF-8文字轉換成UCS-2的編碼,再轉換成SMS的編碼。還有反向的編解碼,這部分費了不少的工夫。

    4. 程式介面及撰寫 20%
        當一切原理都了解後,程式本身的問題就算是比較簡單的部分。

    原理簡介

    1. 簡訊服務 SMS -- Short Message Service

    簡訊服務的流程:
    (1) (2) 使用者發送簡訊,由 GSM  的基地台BTS 接收 BSC傳送到MSC
        BTS (base transceiver station)--- 基地傳收站,俗稱基地台,具有天線,能傳和收無線電波訊號,並具有解加密功能,能和BSC溝通。
        BSC( base station controller)-- 基地台控制器,下面可能有數十到數百個BTS
    ,如果以網路的觀點來看,他類似於一台交換器
        MSC (Mobile switching center)-- 行動交換中心,是GSM系統的主要交換結點,如果以網路的觀點來看,他類似於一台路由器。
    (3) MSC 傳送到 IWMSC (Inter-wide MSC)
    (4) IWMSC 再傳送到簡訊中心 SM-SC( Short Message Service Center)
    (5) SM-SC 回傳一個ack 給發送者告知已經收到簡訊。同時再將訊息發送去簡訊的閘道MSC (SMS-Gateway MSC)
    (6) 藉由GSM 的漫遊協定,GMSC 找到了接收者的 MSC,並發送出去。
    (7) MSC 再廣播給所有的 BSS 最後傳給接收者。
        BSS(Base station subsystem)-- 基地台子系統,主要是由BSC和BTS所組成的子系統。

    2. AT COMMAND

    我們要對 AT COMMAND 稍微了解才會知道如何和手機溝通。這方面的文章網路上有許多,但是各家業者出的手機不盡相同,沒辦法開發出一套適用所有手機的程式,這也是為什麼市面上沒有這種萬用程式的原理。 這裡有一篇詳細的 ISU AT Command 文件。

    大部分的手機基本功能的AT COMMAND中指令是相同的,但是指令中的參數則各有千秋,所以難以處理的就是得針對這些不同的參數撰寫功能。因此,就各家手機商的 AT COMMAND詳細,就請自行去詢找其釋出的技術文件。

    值得注意的,本次系統開發是針對我的手機 Motorola v191,所以針對此型能測試成功,但可能在別的型號上,AT COMMAND 就不具作用。MOTO的AT COMMAND 技術文件pdf檔

    以下是一個不完整的指令範例:
    AT+CMGS 發送簡訊
    AT+CMGL 讀取簡訊
    AT+CSCA 設定/查詢簡訊中心

    3. 手機簡訊編解碼

    簡訊由GSM 網路之SDCCH (Stand-alone Dedicated Control Channel ,為一無線電邏輯頻道) 進行傳輸,而SDCCH 是Control Channel 而不是Traffic Channel ,所以簡訊並不會佔用Traffic Channel 。因此,當使用者利用手機在通話時,亦能接收簡訊。

    GSM 網路的簡訊服務提供了低載運量、低時效性之無連接傳輸模式(Connectionless) 的訊息傳送。訊息有兩種格式,純文字TEXT及PDU,其中一般常用的簡訊是採用PDU格式,其由歐洲電信標準組織 ETSI 所定義,可以是140 Octet (8 Bits),或是160 個GSM 的預設字元(Character 7Bits)。由於中文字在簡訊中採用 USC2 的編碼,每個中文字占用2個 Octets,所以一個簡訊只能有70個中文字或是160個英文和數字。

    而使用 7 Bits的編碼方式,則每7個 Octets 會多一個7Bits的空間出來多放一個字,所以140個octets可以放到160 個7bits 字元,他的編碼方式如下圖:


    ^ 02 更正為01

    手機的簡訊若要傳遞文字,則必需將文字內容編成GSM專用的PDU編碼,一個PDU的編碼主要由標頭 HEADER 和訊息本體 MSG 兩個部分所構成。

    HEADER -- 一個 HEADER 是由一些簡訊參數、日期、訊息編碼、國碼及訊息長度所構成。一個傳送的簡訊和收到的簡訊,會有不同的 HEADER,同時,在我的 v191 上,預存的草稿簡訊 HEADER 又是另外一個格式。我們來看以下的範例:

    [ 一個接收到的簡訊HEADER ]

    0791889663000019040C918896631009910008805050815122238C
    這個HEADER 我們將其拆開,得到各欄位的值分別為:

    07 91 889663000019 04 0C 91 889663100991 00 08 805050 815122 23 8C
    07 SMSC(簡訊中心)號碼長度--07 代表是7碼。此例中,SMS 中心號碼含格式為7碼 91.88.96.63.00.00.19
    91 SMSC號碼格式--國際格式為91,地區格式為81,詳細編碼可以參考這篇  The Type-of-Address octet
    889663000019 簡訊中心號碼
    04 First octet of the SMS-DELIVER PDU -- 可說是傳送簡訊的選項,如果是單一簡訊,此值為04,否則為00。可以參考這篇
    0C 傳送者位址長-- 0C=12,代表傳送者的號碼包含國區碼長度為12,這個是當此值為奇數時,就要在尾端補一個 F
    91 傳送者號碼格式
    889663100991 傳送者號碼
    00 協定--詳細
    08 編碼方式,USC2 為08,GSM 7Bits 方式為0,詳細
    805050 815122 23時間
    8C 資料長度

    [ 一個傳出的簡訊 ]

    AT+CMGF=0 //設定為 PDU mode
    AT+CMGS=142  //發送簡訊,長度 142 Octets
    >0011000C918896551553190008AD8054C7FF0C7B4952304F6050117562696D89818ACB621154034E0
    09813554AFF0C771F662F4E0D597D610F601DFF0C4E0D77E5905367034E0D67037B495F884E45FF1
    F54C8FF01672C548C300296445E364E0063D0FF0C8C5065ED662F4E0D932F76844EBA5594FF0C80
    03616E4E004E0B5427FF0C4E0D8981592A631198DF3002
    +(CTRL-Z)
    // 完整簡訊內容,其中訊息本身長度(128 Octets)

    受話方號碼:886955513591
    程式記錄時間2010/3/8 下午 12:01:47

    分解訊息:

    00 11 00 0C 91 889655155319 00 08 AD 80 54C7FF0C7B4.....

    00 SMSC 長度--設定為0則簡訊中心號碼長度為0,會使用本身話機中儲存的簡訊中心號碼。
    11 SMS-SUBMIT PDU,詳細
    00 TP-Message-Reference---設定為0則使用本身的簡訊中心號碼。
    0C 傳送者位址長-- 0C=12,代表傳送者的號碼包含國區碼長度為12,這個是當此值為奇數時,就要在尾端補一個 F,例如 F5
    91 SMSC號碼格式--國際格式為91
    889655155319 傳送者號碼
    00 協定--詳細
    08 編碼方式-- USC2 為08、8bits為04、GSM 7Bits 方式為00,詳細
    AD 有效的週期-- 計算方式可參考這篇,這裡的AD=173 ==> 173-166=7天
    80 資料長度-- 不包含標頭的資料長度 80=128=64中文字。

    此例標頭長度為15,開頭的00不計算,所以標頭計算長度為14,資料長度為128,總長度為14+128=142。所以 AT+CMGS=142。

    這裡比較要處理的是下完 AT+CMGS=142 的AT-CMD後,手機會等待訊息,此時程式要將訊息傳送完後,最後再加一個 CTRL-Z 的符號。

    此外,不論是發送首的號碼或是 SMSC 的號碼,都是高低位要互換。例如收話號碼是 886-955-513591 ,在系統的編碼會是 88 96 55 15 53 19

    而MOTO所預存的草稿訊息又是另一種格式,未來有空再介紹,接下來來討論手機的趨動和連接。

    END

    Was this page helpful?
    標籤 (Edit tags)
    • No tags
    您必須 登入 才能發佈評論。
    Powered by MindTouch Core