Telephony Support

Registered by Tony Espy on 2013-03-01

The current telephony stack used by Ubuntu Touch includes the following components:
 * Telepathy
 * Telepathy oFono Connection Manager ( telepathy-ofono )
 * oFono
 * oFono RILD plugins

RILD is Android's Radio Interface Layer, and it's usage will allow OEMs to use existing RILD vendor libraries to provide telephony services to the upper layers.

The use of oFono allows us the flexibility to use fully open source modem implementations as well.

Blueprint information

Loïc Minier
Tony Espy
Tony Espy
Series goal:
Accepted for saucy
Milestone target:
milestone icon ubuntu-13.10
Started by
Tony Espy on 2013-03-13


Ubuntu Touch uses a combination of Telepathy, oFono, and RILD to support telephony ( currently limited to basic voice calling and SMS support ).

This blueprint covers the work required to flesh out the telephony stack so that a device running Ubuntu Touch could be certified for release by an OEM as a full-featured phone.

== High Level Components ==

This blueprint will only cover changes to oFono and the RILD code which involves the following three components ( see the related ofono bzr branch above to resolve relative paths listed below ):

1. A device plugin ( /plugins/ril.c ):

This plugin represents a generic phone device running Ubuntu Touch. This plugin is responsible for the initialization of the telephony stack. It's dependent on the following two components.

2. A modem driver ( also technically a dynamic plugin; /drivers/rilmodem/ ):

This layer contains the glue code which translates from calls made to/from the high-level oFono core to RILD messages which are sent/received from RILD, via the gril layer.

3. A socket communication layer ( /gril ):

This layer abstracts the socket communications used to talk to the RILD daemon. This code is not a plugin, but is builtin to the ofono core.

== Required Work ==

This section details the work required to the RIL modem implementation ( rilmodem ) in order to provide full data/voice support.

This blueprint currently focuses on completion of the GSM feature set.

Most of the change are localized to the rilmodem component discussed above, although some work may be required to the device plugin ( ril.c ) as well.

== SIM Support ==

Ubuntu Touch currently only checks for the presence of an unlocked SIM. oFono actually implements a multi-stage process for SIM initialization which needs to be implemented in our rilmodem plugin. The proper initialization sequence also depends on SIM filesystem support workig as there are operator-specific attributes which need to be initialized based on settings store on the SIM. GPRS support also depends on proper SIM filesystem support as SPN ( service provider networks ) are stored on the SIM.

Finally, support for locked SIMs needs to be implemented. As this is not required to get GPRS running, the priority of this work is lower.

== GPRS Support ==

GPRS support requires implenting the gprs and gprs-contrect APIs in our rilmodem plugin.
This work in combination with the modifications being made to Network Manager will allow Ubuntu Touch devices to use the mobile data network for data connectivity.

== Modem Support ==

 * Support retrieval of modem properties

 * Airplane mode support -- the modem power-up logic is hard-coded. Airplane mode may require
   some re-factoring of this code.

 * Suspend/Resume - as our power management story is still a work-in-progress, this will be deferred until we've made more progress with power.

== Voice Support ==

 * Conference call support

 * Call waiting support

== Indicator/Settings Support

=== Indicator Status ===

 * Airplane Mode

 * Cellular Signal Strength

 * Technology Indicator ( eg. HSPA+, EDGE, .... )

=== Settings ===

 * Data Roaming

 * Data On/Off

 * Only use 2G Networks

 * Manual Network Operator Configuration?

 * SIM Card Lock (setup?)

== Open Issues ==

1. If SIM card doesn't include SPN configuration, when a user manually configures a context via the settings application, should NM be responsible for this new setting, or oFono?


Work Items

Work items for ubuntu-13.04-month-6:
[awe] Re-base ofono code to Raring: DONE
[awe] Implement SIM filesystem read support: DONE
[awe] Implement proper SIM initilization: DONE
[awe] Investigate GPRS support: DONE
[awe] Implement IMSI ( Subscriber Identity ) query: DONE
[awe] Implement gprs module: DONE
[awe] Implement gprs context module: DONE
[awe] Implement proper modem initialization: DONE

Work items for ubuntu-13.06:
[awe] Implement RILD socket retry: DONE
[awe] Implement SIM PIN/PUK support: DONE

Work items for ubuntu-13.07:
[awe] investigate MMS support in ofono: DONE
[awe] Investigate automated/unit test strategy: DONE

Work items for ubuntu-13.08:
[rsalveti] Re-factor voicecall to remove audioflinger logic: DONE
[rsalveti] Investigate call-volume support (mic & speaker volume): DONE
[rsalveti] Investigate speakerphone control/coordination w/indicator-sound: DONE

Work items:
Implement voice multi-party calls: DONE
Implement voice call holding/waiting: DONE
Implement USSD module: DONE
[awe] Investigate requirement for SIM filesystem write support: DONE
Implement call technology preference support ( ie. use 2G-only ): DONE
Implement message-waiting-indication support: DONE
[awe] Collect CM RIL traces for standalone & combined mms contexts: DONE
Investigate a single context that can support both internet and mms connection: DONE
[awe] Implement call-forwarding support: DONE
Implement multi-gprs context support in rilmodem: DONE
Implement manual carrier selection: DONE
Add push-notification plugin to upstart job: DONE
[alfonsosanchezbeato] Implement upstart job vendor detection/modem properties ( model, ril_version? ): DONE
Implement NM logic for combined context MMS proxies: DONE
[cyphermox] urfkill logic to control ofono online state: DONE
[awe] Implement provisioning of mms gprs contexts (currently works for internet contexts only): DONE
Implement cell broadcast support: TODO
[awe] Implement ofono cell-info DBus support: TODO
Implement ofono cell-info rilmodem support: TODO
Implement call-barring support: DONE
Investigate/implement fixed-dialing support: TODO
Implement SIM phonebook import support: INPROGRESS
Review/Implement handlers for all supported Unsolicited events: TODO
Impelment SIM Write Support for MWI: DONE
[alfonsosanchezbeato] Implement PowerMgr -> oFono/rilmodem screen on/off notifications: INPROGRESS
BT handsfree support: TODO
[alfonsosanchezbeato] Investigate PowerMgr emergency call logic: TODO
robustness testing / stack recovery: TODO
[awe] Apply B2G improvements to emulator telephony emulation: DONE
Investigate emulator telephony network-registration mechanics/stability: DONE
Implement emulator SIM console commands: DONE
Implement automated emulator-based ofono testing: INPROGRESS
[awe] Implement OEM provisioning hook: TODO
mmsd: implement http proxy function: TODO
mmsd: debug fix http download code: TODO
mmsd: configuration for mmsd for control automatic downloads (need to turn off automatic downloads as it is today): TODO
mmsd: investigate how to delete multiple attachments. do they get deleted when message deleted or individually: TODO
mmsd: investigate/implement group chat support: TODO
Investigate using radio user for ofono: TODO
Implement SMS binary messaging hooks: TODO
Start conversation with upstream regarding merges ( ril & rilmodem ): TODO
Investigate EAP-SIM authentication for WLAN: TODO
Investigate STK UI Requirements: TODO
Investigate OEM specific events/hooks: TODO
[rsalveti] Investigate Voice Roaming: TODO
Investigate OEM hooks for SIM locking ( Operator & IMSI ): TODO

Dependency tree

* Blueprints in grey have been implemented.