Phone functionality in GUI applications

Thomas Seiler thseiler at gmail.com
Wed Oct 17 01:08:21 CEST 2007


Hi

> On Friday, Mickey mentioned to me that libmokogsmd would probably not be
> used in the final software stack. Instead, he would prefer a d-bus based
> interface to GSMD.

Great !

> Yesterday, Rob, Chris and I sat down around a
> whiteboard and came up with some thoughts on how the phone functionality
> in GUI applications might be managed.

Great ! Good News...

I have already spend quite some time thinking about how such an
interface might look like.
In my opinion, the best solution is to have a separate DBus-Service
for each independent State machine of the openmoko problem space, and
to implement all these DBus-Services in a single daemon.
Lets call this daemon "openmokod" or just "mokod". It would provide
the openmoko platform abstraction.

This daemon might for example implement a DBUS-Service / Object to
access the SIM Card.

org.openmoko.SIM:
* Goals:
  - Abstract the fact that you need to access the SIM via gsmd / libgsmd,
  - multiplex SIM Access between different applications (phone book,
SMS, setting, pin dialogs)
  - maybe cache some things (phone book ?) in memory
  - send a signal that can be hooked in GUI whenever there is a need
to enter a PIN / PUK.
* Possible States: NO_SIM_PRESENT, SIM_OPEN, SIM_LOCKED, NEED_PIN,
NEED_PUK, NEED_PIN2, NEED_PUK2,
* Possible Methodes: enterPIN, enterPUK, enterPIN2, enterPUK2,
changePIN/PUK, close_sim, accessPhonebook, accessSMS, etc...
* Possible Signals: OnNeedPIN, OnNeedPUK, etc...

Advantages of this orthogonal approach: The PIN Problem is dealt with,
whatever reason there is for PIN entry (i.e. reseting the SIM expense
counters from a SIM menu) when the GUI reacts to the
right signal it will show whenever there is a need to enter some PIN / PUK.

Similar Objects could be implemented for:

org.openmoko.GSMNetwork:
* Goal: Abstract all Meta Information about the GSM Network, provide
an interface to choose the network to connect to.
* States: NO_SIGNAL, EMERGENCY-ONLY, REGISTERED_HOME, REGISTERED_VISITOR
* Methodes: getNetworks, setPreferredNetwork, register, unregister,
getDeviationStatus
* Signals: OnSelectNetwork, OnRSSIDChange (to update signal strength
bar), OnAreaCodeChange()

Here we can place some hooks for least cost network selection when on
visitor networks (abroad)
or we can have listeners for the OnAreaCodeChange if they want to do
fancy things like strarting the GPS to update location.

org.openmoko.Ringer:
* Goal: Abstract the possible Mixer Issues, and the loud / meeting profile thing
* States: Profile_X, Profile_Y etc...
* Methods: Ring(callerID) to be called by gsmd , etc...
* Signals: AboutToRing, OnRing...

org.openmoko.VoiceAudioRouting:
* Goal: Abstract the Mixer and Audio Routing during a Voice Call
* States: Audio Routing: STANDBY, HANDSET, HEADSET, SPEAKERPHONE, BLUETOOTH
                Mic Mute: MIC_ON, MIC_MUTED

org.openmoko.VoiceCall:
* Goal: Abstract the fact that you need to talk to gmsd for a VoiceCall
   Manage Conference Calls, put calls on hold, Mnage different Lines etc...
* States: ON-HOOK, DIALING, WAITING, TALKING, RINGING (incomming call)
This one is a quite complex one.

We will need to include hooks for Least Cost Routing, or Send Signals
to the Jurnal, etc...

org.openmoko.FaxCall (send and receive Faxes, integrate with CUPS ?)
org.openmoko.DataCall (CSD Data Call to other Neo or normal modem)
org.openmoko.Wlan (WLAN Present ? Power On / OFF, select ESSID)
org.openmoko.GPRS (To set APN, set status)
org.openmoko.USBNET (To sync?)
org.openmoko.IPNetwork (General Information of kind of Connection
(WLAN/GPRS or how cheap/expensive it is )
org.openmoko.SIP that will be a lot of fun...
org.openmoko.GPS (last known longitude, latitude, power on / off)
org.openmoko.Location (more elaborate, higher level (i.e. Home, Work)
based on GPS,  WLAN ESSID, Area Code of  Cell ID or Bluetooth Adresses
(PCs), whatever there is) These signals might be used to switch
profiles, etc...


I hope you get the idea. I would like hear what other think about this.
Maybe it would be a good idea to start documenting possible interfaces
in the WIKI ?

Cheers,
Thomas

-- 
Excercise 17:
If the human brain was simple enough for us to understand we'd be so
simple we couldn't understand.
Prove this by induction.



More information about the framework-devel mailing list