Networking capabilities are primarily implemented through:
- ConnMan for general network connection management
- oFono for cellular networking
- BlueZ for Bluetooth connectivity
- StateFS and MCE for system state management
ConnMan manages all internet connectivity features on Sailfish OS. This includes:
- Wi-Fi and cellular mobile data scanning and connections
- WLAN hotspot connection sharing
- Flight mode handling for disabling/restoring connectivity
The Sailfish OS adaptation of ConnMan is available at https://git.merproject.org/mer-core/connman. Generally, Sailfish app developers will find it easier to use libconnman-qt instead, as that provides a Qt-based API as well as a QML module for accessing ConnMan functionality.
oFono is the base library used for all cellular-related features. For example:
- Cellular network registration and operator queries
- Core modem management
- Phone calls, SMS and MMS
- Bluetooth connections for making calls via the Bluetooth Handsfree Profile (HFP)
- SIM operations, including PIN and PUK codes and SIM ToolKit (STK) access
- Supplementary service code handling including USSD/GSM Codes
The Sailfish OS adaptation of oFono is available at https://git.merproject.org/mer-core/ofono. Generally, Sailfish app developers will find it easier to use libqofono and libqofonoext; these provide Qt-based APIs and QML modules for accessing oFono functionality.
BlueZ is the base library for all Bluetooth-related features.
Currently, Sailfish OS provides the following profiles:
- Audio Gateway for Headset Profile (HSP) and Handsfree Profile (HFP) for making calls via Bluetooth headsets
- Advanced Audio Distribution Profile (A2DP) for playback of multimedia audio over a Bluetooth connection
- SyncML client & server (SyncML) for synchronization of contact data
- OBEX Object Push (OPP) for file exchange services
- Phone Book Access Profile (PBAP) for exchanging phonebook data with a car kit
The Sailfish OS adaptation of BlueZ is available at https://git.merproject.org/mer-core/bluez. Generally, Sailfish app developers will find it easier to use libbluez-qt instead, as that provides a Qt-based API and QML module for accessing BlueZ functionality.
Bluetooth audio distribution is managed through PulseAudio.
StateFS and MCE
StateFS exposes the current system state (as reported by a variety of plugins) via a synthetic filesystem, as namespaced properties. This includes a variety of properties which affect networking, including the cellular modem state, other connectivity states, and battery level. The source code for StateFS can be found here.
MCE provides mode-control for Sailfish OS. This includes management of screen modes (on, dimmed, off, locked), power modes (including deep-sleep and other low-power modes) and radio states which may affect network connectivity or latency (for example, allowing network packet I/O to be synchronised to a heartbeat timer to achieve power-saving efficiencies). The source code for MCE can be found here.