Gsmd

From Openmoko

(Difference between revisions)
Jump to: navigation, search
(call state)
(proposing for deletion)
 
(15 intermediate revisions by 9 users not shown)
Line 1: Line 1:
[[gsmd]] is the [[GSM]] daemon running in background of an OpenMoko phone, managing the traditional 'phone' parts (voice/sms/gprs communication links) of the phone.
+
{{Languages | Gsmd}}
 +
 
 +
{{delete}}
 +
 
 +
{{warning|This page describes obsolete software. You most likely want to use the [[OpenmokoFramework]] these days!}}
 +
 
 +
[[gsmd]] is the [[GSM]] daemon running in background of an Openmoko phone, managing the traditional 'phone' parts (voice/sms/gprs communication links) of the phone.
  
 
Further technical details and API documentation in progress, is available [[Gsmd/document |here]].
 
Further technical details and API documentation in progress, is available [[Gsmd/document |here]].
 +
 +
Note that this does not hold for phones running [[Om_2008.8]] - then gsmd has been replaced with [[Qtopia / Qt Extended on FreeRunner|Qtopia]]'s mobile stack. Installing gsmd and related tools will conflict with qpe and things may not work.
  
 
== Usage ==
 
== Usage ==
Line 24: Line 32:
 
         -l file --logfile file  Specify a logfile to log to
 
         -l file --logfile file  Specify a logfile to log to
 
</pre>
 
</pre>
 +
 +
  
 
If your GSM modem is attached to ttySAC0 (like in the [[:Category:Neo1973 Hardware | Neo1973]]), invoke it as e.g.:
 
If your GSM modem is attached to ttySAC0 (like in the [[:Category:Neo1973 Hardware | Neo1973]]), invoke it as e.g.:
 
  > gsmd -p /dev/ttySAC0 -s 115200 -F
 
  > gsmd -p /dev/ttySAC0 -s 115200 -F
 
(baud rate seems to be autodetected by the modem)
 
(baud rate seems to be autodetected by the modem)
 +
 +
In order to kill the actual gsmd process and then run gsmd with a separate logfile and in background, but not as daemon:
 +
> kill -SIGTERM `pidof gsmd`
 +
and then to create a logfile with the date in the name
 +
> gsmd -p /dev/ttySAC0 -s 115200 -F -l logs_gsmd-`date +%Y-%m-%d_%Hh%M` &
  
 
=== From host PC===
 
=== From host PC===
Line 63: Line 78:
 
         D      Dial outgoing number
 
         D      Dial outgoing number
 
         H      Hangup call
 
         H      Hangup call
         O      Power On
+
         O      Antenna Power On
         o      Power Off
+
         o      Antenna Power Off
 +
        gos    Get Antenna Status
 +
        V      Vibrator Enable (CVIB=1)
 +
        v      Vibrator Disable (CVIB=0)
 +
        M      Modem Power On
 +
        m      Modem Power Off
 
         r      Register to network
 
         r      Register to network
 
         R      Register to given operator (R=number)
 
         R      Register to given operator (R=number)
 
         U      Unregister from netowrk
 
         U      Unregister from netowrk
 
         P      Print current operator
 
         P      Print current operator
         L      Detect available operators
+
        N      Print current operator in numeric
 +
         L      List available operators
 
         Q      Read signal quality
 
         Q      Read signal quality
 +
        nr      Query network registration
 +
        S      Sleep (S[=second], default 5)
 
         T      Send DTMF Tone
 
         T      Send DTMF Tone
 
         n      Print subscriber numbers
 
         n      Print subscriber numbers
Line 81: Line 104:
 
         pm      PB Memory
 
         pm      PB Memory
 
         pp      PB Set Memory (pp=storage)
 
         pp      PB Set Memory (pp=storage)
        pRr    Retrieve Readrg Records
 
        pRf    Retrieve Find Records
 
 
         sd      SMS Delete (sd=index,delflg)
 
         sd      SMS Delete (sd=index,delflg)
 
         sl      SMS List (sl=stat)
 
         sl      SMS List (sl=stat)
Line 92: Line 113:
 
         sc      SMS Show Service Centre
 
         sc      SMS Show Service Centre
 
         sC      SMS Set Service Centre (sC=number)
 
         sC      SMS Set Service Centre (sC=number)
 +
        gvm    Get Voicemail number
 +
        svm    Set Voicemail number(svm=number)
 +
        im      Get imsi
 +
        mf      Get manufacturer
 +
        ml      Get model
 +
        rv      Get revision
 +
        sn      Get serial number
 +
        cs      Get Call status
 +
        gp      Get PIN status
 +
        cbc    Get Battery status
 +
        Rh      Release all held calls (+CHLD=0)
 +
        UDUB    User Determined User Busy (+CHLD=0)
 +
        Ra      Release all active calls (+CHLD=1)
 +
        Rx      Release specific active call x (Rx=x)(+CHLD=1x)
 +
        Ha      Hold all active calls and accept held or waiting call (+CHLD=2)
 +
        Hx      Hold all active calls except call x (Hx=x)(+CHLD=2x)
 +
        MP      Add a held call to the conversation (+CHLD=3)
 +
        CFD    Disable call forwarding (CFD=reason)
 +
        CFE    Enable call forwarding (CFE=reason)
 +
        CFQ    Query the status of call forwarding (CFQ=reason)
 +
        CFR    Register call forwarding (CFR=reason,number)
 +
        CFe    Erase a record of call forwarding (CFe=reason)
 
         q      Quit
 
         q      Quit
  
Line 175: Line 218:
 
** write phonebook entry - ''No longer missing - see help''
 
** write phonebook entry - ''No longer missing - see help''
  
* GPRS related functions
+
* GPRS related functions - ''No longer missing - see [http://www.freesmartphone.org/index.php/Implementations/gsm0710muxd gsm0710muxd] for 07.10 multiplexing, and [https://wiki.muc.ccc.de/openmoko#gprs GPRS setup/de] for ppp via GPRS''
 
** set up GPRS link, use it via separate DLC of TS07.10 multiplex
 
** set up GPRS link, use it via separate DLC of TS07.10 multiplex
 +
 +
* GSM clock related functions
 +
** time output suitable for ntpd clock source?
  
 
* gsmd internal infrastructure
 
* gsmd internal infrastructure
Line 228: Line 274:
 
* busy
 
* busy
  
Sources of gsmd are kept in [[OpenMoko svn]] in src/target/gsm directory.
+
Sources of gsmd are kept in [[Openmoko svn]] in src/target/gsm directory.
  
{{Languages | Gsmd}}
+
[[Category:GSM]]
[[Category:Software ]]
+
[[Category:Application Developer]]
+
 
[[Category:Implemented]]
 
[[Category:Implemented]]

Latest revision as of 17:19, 8 February 2010


Proposed for deletion: This page is proposed for deletion. Please see Wiki Issues#Pages proposed for deletion to discuss this proposal.
WARNING: This page describes obsolete software. You most likely want to use the OpenmokoFramework these days!


gsmd is the GSM daemon running in background of an Openmoko phone, managing the traditional 'phone' parts (voice/sms/gprs communication links) of the phone.

Further technical details and API documentation in progress, is available here.

Note that this does not hold for phones running Om_2008.8 - then gsmd has been replaced with Qtopia's mobile stack. Installing gsmd and related tools will conflict with qpe and things may not work.

Contents

[edit] Usage

[edit] On the phone

gsmd is usually started as a background daemon when booting by the /etc/init.d/gsmd script, in this case gsmd outputs debug messages to the file "/tmp/gsm.log" (stdout and stderr is redirected there).

For debugging purposes gsmd can be run in foreground mode, options can be queried like:

> 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       Display program version
        -d      --daemon        Deamonize
        -h      --help          Display this help message
        -p dev  --device dev    Specify serial device to be used
        -s spd  --speed spd     Specify speed in bps (9600,38400,115200,...)
        -F      --hwflow        Hardware Flow Control (RTS/CTS)
        -L      --leak-report   Leak Report of talloc memory allocator
        -l file --logfile file  Specify a logfile to log to


If your GSM modem is attached to ttySAC0 (like in the Neo1973), invoke it as e.g.:

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

(baud rate seems to be autodetected by the modem)

In order to kill the actual gsmd process and then run gsmd with a separate logfile and in background, but not as daemon:

> kill -SIGTERM `pidof gsmd`

and then to create a logfile with the date in the name

> gsmd -p /dev/ttySAC0 -s 115200 -F -l logs_gsmd-`date +%Y-%m-%d_%Hh%M` &

[edit] From host PC

With recent uboot (svn > r2885), the gsm modem can be powered on and connected to uboot's serial console from uboot itself. Thus allowing the host PC to interact directly with the modem. Some notes about getting gsmd running in this manner is here.

[edit] libgsmd

libgsmd is a library with C language API for application programs. Programs using this library can use the phone, e.g. make phone calls, receive incoming calls, register to the network, etc.

[edit] libgsmd-tool

libgsmd-tool is a small demo application that can be used to demonstrate the usage of the libgsmd API.

[edit] Usage

libgsmd-tool has multiple modes.

[edit] Usage of shell mode

Shell mode provides a simple text-based command interface for making voice calls.

The shell mode can be started using

libgsmd-tool -m shell

It can be used like in the following example:

> 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       Antenna Power On
        o       Antenna Power Off
        gos     Get Antenna Status
        V       Vibrator Enable (CVIB=1)
        v       Vibrator Disable (CVIB=0)
        M       Modem Power On
        m       Modem Power Off
        r       Register to network
        R       Register to given operator (R=number)
        U       Unregister from netowrk
        P       Print current operator
        N       Print current operator in numeric
        L       List available operators
        Q       Read signal quality
        nr      Query network registration
        S       Sleep (S[=second], default 5)
        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)
        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)
        gvm     Get Voicemail number
        svm     Set Voicemail number(svm=number)
        im      Get imsi
        mf      Get manufacturer
        ml      Get model
        rv      Get revision
        sn      Get serial number
        cs      Get Call status
        gp      Get PIN status
        cbc     Get Battery status
        Rh      Release all held calls (+CHLD=0)
        UDUB    User Determined User Busy (+CHLD=0)
        Ra      Release all active calls (+CHLD=1)
        Rx      Release specific active call x (Rx=x)(+CHLD=1x)
        Ha      Hold all active calls and accept held or waiting call (+CHLD=2)
        Hx      Hold all active calls except call x (Hx=x)(+CHLD=2x)
        MP      Add a held call to the conversation (+CHLD=3)
        CFD     Disable call forwarding (CFD=reason)
        CFE     Enable call forwarding (CFE=reason)
        CFQ     Query the status of call forwarding (CFQ=reason)
        CFR     Register call forwarding (CFR=reason,number)
        CFe     Erase a record of call forwarding (CFe=reason)
        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'

[edit] Usage of atcmd mode

The atcmd mode is a passthrough-mode. Passthrough means that it accepts GSM 07.07 commands, passes them through the daemon to the phone, and returns you the response. this is very useful for debugging.

The atcmd mode can be started using

libgsmd-tool -m atcmd

Usage is like in the following example:

> 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")'

[edit] Network related functions

Operator selection functions were implemented and merged into SVN head[1]:

The new commands in libgsmd-util are as followings:

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

This is implemented by the functions with "_opers_" naming.

[edit] Currently missing

(please add items to this list if you're missing more features)

  • Phone related functions
    • Airplane mode / gsmd stop (this will be done outside gsmd, by using runlevels / upstart)
    • Capability to set-up Emergency Calls, even if the device does not hold a SIM card
    • obtain manufacturer/model/revision/IMEI
    • Ability to notify user if the SIM card is locked (or even automagically unlock it?)
  • SMS related features
    • send SMS
    • receive SMS
    • obtain IMSI
    • access to SIM-card stored SMS - No longer missing - see help
  • SIM related functions
    • read phonebook entry - No longer missing - see help
    • write phonebook entry - No longer missing - see help
  • GPRS related functions - No longer missing - see gsm0710muxd for 07.10 multiplexing, and GPRS setup/de for ppp via GPRS
    • set up GPRS link, use it via separate DLC of TS07.10 multiplex
  • GSM clock related functions
    • time output suitable for ntpd clock source?
  • gsmd internal infrastructure
    • fine-grained event subscriptions (rather than wildcard-subscribe)
    • possibility to specify log-level from command line
    • logfile re-opening on SIGUSR1 or SIGHUP (logrotate)
    • permission handling
    • d-bus interface

[edit] Implementation Thoughts

[edit] Testing framework

Emulating/mocking the firmware, gsmd and libgsmd can be tested for functionality; on any machine. See Kero's page or go directly to the (lib)gsmd testing page.

[edit] State tracking

gsmd needs to do apropriate state tracking of the underlying GSM hardware. For many of the state transition we only get events from the GSM Modem, but don't have apropriate query commands. Thus, assuming gsmd runs all the time, applications can come and go, but still have an idea about the current state of the modem, even if they missed the initial state transitions.

Also, gsmd state tracking allows us to allow for safer interoperability of multiple applications. If i.e. one applications has just started an outgoing call, gsmd can detect another application who intends to interfere with that and deny access

[edit] device power state

  • modem completely off, not responding to AT commands
  • modem responding to AT commands, but powered off (CFUN=0)
  • modem responding to AT commands, in some power saving mode
  • modem responding to AT commands, powered on, fully operational (CFUN=1)

[edit] Suspend power state

It must also configure the modem so that it can on appropriate events wake the system from sleep.

[edit] network registration state

  • not registered to any network, not trying to register
  • not registred to any network, searching/trying to register
  • registered to home network (including cellID)
  • registered to roaming network (including cellID)

[edit] ciphering indication state

  • ciphering indications not supported by modem
  • ciphering indications supported, but disabled in SIM
  • ciphering indications supported, ciphering active
  • ciphering indications supported, ciphering inactive

[edit] call state

  • idle
  • busy

Sources of gsmd are kept in Openmoko svn in src/target/gsm directory.

Personal tools

gsmd is the GSM daemon running in background of an OpenMoko phone, managing the traditional 'phone' parts (voice/sms/gprs communication links) of the phone.

Further technical details and API documentation in progress, is available here.

Usage

On the phone

gsmd is usually started as a background daemon when booting by the /etc/init.d/gsmd script, in this case gsmd outputs debug messages to the file "/tmp/gsm.log" (stdout and stderr is redirected there).

For debugging purposes gsmd can be run in foreground mode, options can be queried like:

> 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       Display program version
        -d      --daemon        Deamonize
        -h      --help          Display this help message
        -p dev  --device dev    Specify serial device to be used
        -s spd  --speed spd     Specify speed in bps (9600,38400,115200,...)
        -F      --hwflow        Hardware Flow Control (RTS/CTS)
        -L      --leak-report   Leak Report of talloc memory allocator
        -l file --logfile file  Specify a logfile to log to

If your GSM modem is attached to ttySAC0 (like in the Neo1973), invoke it as e.g.:

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

(baud rate seems to be autodetected by the modem)

From host PC

With recent uboot (svn > r2885), the gsm modem can be powered on and connected to uboot's serial console from uboot itself. Thus allowing the host PC to interact directly with the modem. Some notes about getting gsmd running in this manner is here.

libgsmd

libgsmd is a library with C language API for application programs. Programs using this library can use the phone, e.g. make phone calls, receive incoming calls, register to the network, etc.

libgsmd-tool

libgsmd-tool is a small demo application that can be used to demonstrate the usage of the libgsmd API.

Usage

libgsmd-tool has multiple modes.

Usage of shell mode

Shell mode provides a simple text-based command interface for making voice calls.

The shell mode can be started using

libgsmd-tool -m shell

It can be used like in the following example:

> 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'

Usage of atcmd mode

The atcmd mode is a passthrough-mode. Passthrough means that it accepts GSM 07.07 commands, passes them through the daemon to the phone, and returns you the response. this is very useful for debugging.

The atcmd mode can be started using

libgsmd-tool -m atcmd

Usage is like in the following example:

> 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")'

Network related functions

Operator selection functions were implemented and merged into SVN head[1]:

The new commands in libgsmd-util are as followings:

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

This is implemented by the functions with "_opers_" naming.

Currently missing

(please add items to this list if you're missing more features)

  • Phone related functions
    • Airplane mode / gsmd stop (this will be done outside gsmd, by using runlevels / upstart)
    • Capability to set-up Emergency Calls, even if the device does not hold a SIM card
    • obtain manufacturer/model/revision/IMEI
    • Ability to notify user if the SIM card is locked (or even automagically unlock it?)
  • SMS related features
    • send SMS
    • receive SMS
    • obtain IMSI
    • access to SIM-card stored SMS - No longer missing - see help
  • SIM related functions
    • read phonebook entry - No longer missing - see help
    • write phonebook entry - No longer missing - see help
  • GPRS related functions
    • set up GPRS link, use it via separate DLC of TS07.10 multiplex
  • gsmd internal infrastructure
    • fine-grained event subscriptions (rather than wildcard-subscribe)
    • possibility to specify log-level from command line
    • logfile re-opening on SIGUSR1 or SIGHUP (logrotate)
    • permission handling
    • d-bus interface

Implementation Thoughts

Testing framework

Emulating/mocking the firmware, gsmd and libgsmd can be tested for functionality; on any machine. See Kero's page or go directly to the (lib)gsmd testing page.

State tracking

gsmd needs to do apropriate state tracking of the underlying GSM hardware. For many of the state transition we only get events from the GSM Modem, but don't have apropriate query commands. Thus, assuming gsmd runs all the time, applications can come and go, but still have an idea about the current state of the modem, even if they missed the initial state transitions.

Also, gsmd state tracking allows us to allow for safer interoperability of multiple applications. If i.e. one applications has just started an outgoing call, gsmd can detect another application who intends to interfere with that and deny access

device power state

  • modem completely off, not responding to AT commands
  • modem responding to AT commands, but powered off (CFUN=0)
  • modem responding to AT commands, in some power saving mode
  • modem responding to AT commands, powered on, fully operational (CFUN=1)

Suspend power state

It must also configure the modem so that it can on appropriate events wake the system from sleep.

network registration state

  • not registered to any network, not trying to register
  • not registred to any network, searching/trying to register
  • registered to home network (including cellID)
  • registered to roaming network (including cellID)

ciphering indication state

  • ciphering indications not supported by modem
  • ciphering indications supported, but disabled in SIM
  • ciphering indications supported, ciphering active
  • ciphering indications supported, ciphering inactive

call state

  • idle
  • busy

Sources of gsmd are kept in OpenMoko svn in src/target/gsm directory.