Porting/Cellular Modem

Thoughts on how to handle the Cellular Modem in Fremantle-port/Neo900

The Cellular Modem architecture on the N900 consists of a daemon, the Cellular Services Daemon that talks to the cellular modem via ISI packets, a daemon, the System Synchronization Controller Daemon that handles cellular modem state, a daemon, the Phonet AT modem daemon that emulates AT commands on top of phonet and configuration utilities to configure phonet interfaces.

The Cellular Services Daemon exposes the following dbus interfaces:

  • com.nokia.csd.Call (handles phone calls)
  • com.nokia.csd.Call.Instance (handles a specific instance of a phone call)
  • com.nokia.csd.Call.Conference (handles conference calls)
  • com.nokia.csd.GPRS (handles cellular data transfer)
  • com.nokia.csd.GPRS.Context (handles a specific cellular data context)
  • Phone.Net (handles network related things including signal strength, change of cell/operator, change between 2g/3g and network time info change)
  • Phone.Sim (handles SIM related things including IMSI, HPLMN and SIM status)
  • Phone.Sim.Security (handles SIM security related things including IMEI, simlock and SIM PIN)
  • Phone.Sim.Phonebook (handles SIM phonebook)
  • com.nokia.csd.SMS.Outgoing (handles outgoing SMS messages)
  • com.nokia.csd.SMS.SIM (handles SMS messages stored on the SIM)
  • Phone.SMS (handles SMS messages including Cell Broadcast SMS messages)
  • com.nokia.csd.SS (handles Supplementary Services such as call divert call barring and call waiting)
  • com.nokia.csd.SS.USSD (handles USSD codes)
  • com.nokia.phone.SSC (handles cellular modem state and status)

The proposal I have for porting the Cellular stack to new hardware (anything with a different cellular modem to the N900) is as follows:

  1. Reverse engineer the dbus interfaces (as listed above) exposed by the Cellular Services Daemon and System Synchronization Controller Daemon.
  2. For each interface/signal/method call, implement a compatible interface/signal/method call on top of oFono or fsogsmd (or another cellular stack)
  3. For cases where implementing the interface is not fesable or is too hard, identify the consumers of that interface and clone/modify/replace those consumers to do things differently
  4. If this is done properly, all the upper-level components that talk to the cellular stack (including telepathy-ring and the dialer and messaging apps) will continue to function as-is.

Not sure yet what to do about phonet-at and phonet-utils (not even sure where they get used, probably something to do with Nokia Suite I suspect)