Gsmd/zh tw

From Openmoko

Jump to: navigation, search

gsmd 是在Openmoko手機上執行的 GSM背景程式。它用來管理話機中傳統的'通話' 領域 (聲音/簡訊/gprs 通訊連結)。

你可以在這裡找到進行中的進階技術描述及API文件。


Contents

Usage

On the phone

當以/etc/init.d/gsmd script啟動時,gsmd 通常會以背景程式執行,在這個案例當中gsmd會輸出偵錯訊息到 "/tmp/gsm.log"檔案中 (stdout及stderr在這裡則被重新導引).

針對偵錯目地,gsmd可以在前景模式下執行,可以被使用的選項如下:

> gsmd --help
gsmd - (C) 2006 by Harald Welte <laforge@gnumonks.org>
This program is FREE SOFTWARE under the terms of GNU GPL

Usage:
        -v      --version       顯示程式版本
        -d      --daemon        Deamonize
        -h      --help          顯示輔助訊息
        -p dev  --device dev    指定串列裝置為作用中裝置
        -s spd  --speed spd     指定bps速度 (9600,38400,115200,...)
        -F      --hwflow        硬體流量控制(RTS/CTS)
        -L      --leak-report   Leak Report of talloc memory allocator
        -l file --logfile file  Specify a logfile to log to

如果你的GSM 數據機連接到ttySAC0 (如 Neo1973), 使用如下指令啟動它:

> gsmd -p /dev/ttySAC0 -s 115200 -F

(baud rate可被modem自動偵測)

從host PC

使用最近的 uboot (svn > r2885),gsm modem可以電源啟動,並且從uboot本身連接到uboot的串列控制埠。然後,允許host PC直接與數據機互動。關於host pc執行gsmd 的文章,你可以在這裡找到。

libgsmd

libgsmd 是C 語言API中的程式庫。這個程式庫的程式可以被用在手機上,如打電話、接收電話、註冊為網路一員...等。

libgsmd-tool

libgsmd-tool 是可以用來詮釋libgsmd API的小型展示應用程式。

Usage

libgsmd-tool 有多重模式。

Usage of shell mode

Shell 模式針對語音通話提供一個簡單的text-based 指令界面。

shell 模式可以利用下面的指令啟動

libgsmd-tool -m shell

以下即為它的實做範例:

> src/util/libgsmd-tool -m shell
libgsm-tool - (C) 2006 by Harald Welte
This program is Free Software and has ABSOLUTELY NO WARRANTY

?
        A       Answer incoming call
        D       Dial outgoing number
        H       Hangup call
        O       Power On
        o       Power Off
        r       Register to network
        R       Register to given operator (R=number)
        U       Unregister from netowrk
        P       Print current operator
        L       Detect available operators
        Q       Read signal quality
        T       Send DTMF Tone
        n       Print subscriber numbers
        pd      PB Delete (pb=index)
        pr      PB Read (pr=index)
        prr     PB Read Range (prr=index1,index2)
        pf      PB Find (pf=indtext)
        pw      PB Write (pw=index,number,text)
        ps      PB Support
        pm      PB Memory
        pp      PB Set Memory (pp=storage)
        pRr     Retrieve Readrg Records
        pRf     Retrieve Find Records
        sd      SMS Delete (sd=index,delflg)
        sl      SMS List (sl=stat)
        sr      SMS Read (sr=index)
        ss      SMS Send (ss=ask_ds,number,text|["text"])
        sw      SMS Write (sw=stat,number,text)
        sm      SMS Storage stats
        sM      SMS Set preferred storage (sM=mem1,mem2,mem3)
        sc      SMS Show Service Centre
        sC      SMS Set Service Centre (sC=number)
        q       Quit

O
# EVENT: PIN request (type=1) Please enter PIN: 6582
r
# EVENT: Netreg searching for network 
EVENT: Netreg registered (home network) 

D03024033902
# Dial 03024033902
EVENT: Call Progress: UNKNOWN
EVENT: Call Progress: PROCEED
EVENT: Call Progress: SYNC
EVENT: Call Progress: ALERT
H
# Hangup
EVENT: Call Progress: DISCONNECT
EVENT: Call Progress: RELEASE

EVENT: Incoming call type=2!
EVENT: Incoming call clip=`"03024033902"'
EVENT: Incoming call type=2!
A
# Answer
RSTR=`OK'
H
# Hangup
RSTR=`OK'

atcmd 模式的用途mode

atcmd模式是passthrough-mode。Passthrough指的是它接收 GSM 07.07 指令,透過背景程式將它傳送到電話,並且傳回你的回應。這對於偵除錯誤來講,是很有用的一個方法。


atcmd模式可以由使用下列指令來啟用它

libgsmd-tool -m atcmd

它的用途可以參考下面的範例:

> src/util/libgsmd-tool -m atcmd
libgsm-tool - (C) 2006 by Harald Welte
This program is Free Software and has ABSOLUTELY NO WARRANTY

AT+CPAS
STR=`AT+CPAS'
RSTR=`+CPAS: 0'
AT+COPS=?
STR=`AT+COPS=?'
RSTR=`+COPS: (2,"E-Plus","E-Plus","26203"),(3,"o2 - de","o2 - de","26207"),(3,"Vodafone.de","Vodafone","26202"),(3,"T-Mobile D","TMO D","26201")'

網路相關的功能

控制員的選擇功能被合併到 SVN head[1]

libgsmd-util 指令列如下:

 R  -  Register to given operator (R=number)
 P  -  Print current operator
 L  -  Detect available operators
 Q  -  Read signal quality

它是由名為 "_opers_" 所執行。

目前所欠缺的

(如果你遺失了某些功能,請將這些項目加下以下的清單)

  • 話機相關功能
    • 飛航模式/gsmd 暫停 (它將會在gsmd外被執行,透過使用runlevels / upstart)
    • 設定緊急呼叫,即使裝置沒有安裝SIM卡
    • 取得製造商/型號/修訂版/IMEI
    • 能通知使用者SIM卡未被鎖住的功能 (或者能自動的反鎖它)
  • 簡訊相關的功能
    • 傳送簡訊
    • 接收簡訊
    • 取得IMSI
    • 存取SIM卡,儲存簡訊到SIM卡 - 不再有遺失的狀況 - 參考輔助說明
  • SIM 相關功能
    • 讀取電話簿輸入 - 不再有遺失的狀況 - 參考輔助說明
    • 寫入電話簿 - 不再有遺失的狀況 - 參考輔助說明
  • GPRS相關功能
    • 設定GPRS連結,透過分散的TS07.10使用DLC of TS07.10 多路傳輸
  • gsmd內部基礎架設
    • fine-grained event subscriptions (rather than wildcard-subscribe)
    • 從指令列上指定log-level 的可能性
    • 在SIGUSR1或SIGHUP重新開啟日誌檔 (logrotate)
    • 權限處理
    • d-bus 界面

Implementation Thoughts

測試架構

模擬韌體、gsmd及libgsmd 可以在任何機器上被良好的測試。 參考 Kero's page或者直接參考 (lib)gsmd 測試頁.

狀態追蹤

gsmd 需要在GSM硬體上進行適當的狀態追蹤。 針對很多傳送狀態,我們只能從GSM數據機上取得事件,但並沒有適合的詢問指令。不然,假設 gsmd 持續的執行,應用程式可以執行,但仍有與目前數據機狀態的想法,即使他們遺失了啟始的狀態傳送。

同時,gsmd 狀態追蹤允許我們能安全的操作多個應用程式。如一個應用程式被"發話"所啟始,gsmd可以偵測其它的想要干預它並拒絕存取的應用程式。


裝置電源狀態

  • 數據機完全的關閉,不回應任何AT指令
  • 數據機回應AT指令,但未啟動電源(CFUN=0)
  • 數據機回應AT指令,在省電模式下
  • 數據機回應AT指令,啟動電源,並完全可被操控 (CFUN=1)

中斷電源模式

它必須由數據機設定,以便於它可以由適當的事件,讓系統從睡眠模式下被喚醒。

網路登錄狀態

  • 未登錄到入何網路,並且未嚐試進行登錄動作
  • 未登錄到任何網路,搜尋/嚐試登錄
  • 登錄到家庭網路(包括 cellID)
  • 登錄漫遊網路 (包含cellID)

加密指示狀態

  • 數據機不支援加密指示器
  • 支援加密指示,但SIM不支援加密指示
  • 支援加密指示,加密作用中
  • 支援加密指示,加密未作用

通話狀態

  • 無法接聽
  • 忙線

gsmd source被放置在src/target/gsm 目錄下的Openmoko svn

Personal tools