Migrating from ModemManager 0.6 to ModemManager 1.0
ModemManager 1.0 is a new major version of ModemManager that breaks both
API and ABI compared to previous versions. These changes allow better
managing new types of devices (e.g. those with multiple capabilities),
or those not based in AT commands for operation (e.g. QMI or MBIM modems).
This section provides an introduction to the changes done in the DBus interface
with respect to the main operations performed with modems through ModemManager.
Listing available modems
The D-Bus name org.freedesktop.ModemManager1
on the system bus is the new name used by the ModemManager 1.0 daemon, and it
implements several standard DBus interfaces, including the new
org.freedesktop.DBus.ObjectManager
interface, which allows to list available modem objects and get notifications
where new ones are added or when existing ones are removed. There are therefore
neither a custom method to enumerate devices as in the old 0.6 interface, nor
custom signals to notify about added or removed modems.
Modems which are found but are not usable will be flagged with a
MM_MODEM_STATE_FAILED
state in the
State
property, and a more detailed reason about the failure will be given in the
StateFailedReason
property. The most common case of failure is to have the SIM missing in a modem which
requires one for operation.
PIN unlocking
The process of PIN unlocking the modem is now performed with the
SendPin()
method in the
org.freedesktop.ModemManager1.Sim
interface.
The path of the SIM object is specified in the
Sim
property of the
org.freedesktop.ModemManager1.Modem
interface. If the modem doesn't have a SIM, no object path will be given.
Connection and disconnection
The process of requesting to connect or disconnect the modem is now split into
two operations: creating a bearer with
CreateBearer()
in the
org.freedesktop.ModemManager1.Modem
interface and getting the bearer connected with
Connect()
in the
org.freedesktop.ModemManager1.Bearer
interface. These two steps are equivalent to the old Connect()
method in the previous org.freedesktop.ModemManager.Modem
interface.
The old Disconnect()
method in the previous org.freedesktop.ModemManager.Modem
interface is therefore also applied in a per-bearer basis through the new
Disconnect()
in the
org.freedesktop.ModemManager1.Bearer
interface.
This logic of splitting the connection logic allows ModemManager to create
multiple bearers that may be connected to e.g. different access points (if
the modem allows it).
Simple connection
In order to simplify the whole sequence to get the modem connected, ModemManager
still exposes a Simple interface, renamed as:
org.freedesktop.ModemManager1.Modem.Simple
.
The
Connect()
method will create a single bearer with the parameters specified in the call and get
it connected, while the
Disconnect()
method will disconnect all available bearers.
One of the main differences with respect to the 0.6 interface, is that
Connect()
doesn't support to change allowed modes or bands. Instead, these operations should
be done through the methods in the
org.freedesktop.ModemManager1.Modem
interface.