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:
- Reverse engineer the dbus interfaces (as listed above) exposed by the Cellular Services Daemon and System Synchronization Controller Daemon.
- For each interface/signal/method call, implement a compatible interface/signal/method call on top of oFono or fsogsmd (or another cellular stack)
- 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
- 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)