summaryrefslogtreecommitdiff
path: root/docs/reference/api/ModemManager-overview.xml
diff options
context:
space:
mode:
Diffstat (limited to 'docs/reference/api/ModemManager-overview.xml')
-rw-r--r--docs/reference/api/ModemManager-overview.xml51
1 files changed, 50 insertions, 1 deletions
diff --git a/docs/reference/api/ModemManager-overview.xml b/docs/reference/api/ModemManager-overview.xml
index fec56e55..e7305370 100644
--- a/docs/reference/api/ModemManager-overview.xml
+++ b/docs/reference/api/ModemManager-overview.xml
@@ -433,7 +433,7 @@ mm_plugin_create (void)
</para>
<itemizedlist>
<listitem>
- <emphasis>Modem interface initialization</emphasis>
+ <para><emphasis>Modem interface initialization</emphasis></para>
<para>
The <link linkend="gdbus-org.freedesktop.ModemManager1.Modem">Modem interface</link>
provides common actions and information available in the majority of the modems
@@ -639,6 +639,55 @@ mm_plugin_create (void)
</itemizedlist>
</section>
+ </chapter>
+ <chapter id="ref-overview-plugin-specific-modems">
+ <title>Plugin-specific Modems</title>
+ <para>
+ ModemManager plugins exist in order to handle all non-standard vendor-specific behaviour
+ that needs to get supported.
+ </para>
+ <para>
+ Plugins will provide their own Modem object implementations, usually subclassing the
+ generic <structname>MMBroadbandModem</structname> object. As previously explained, this
+ object implements every interface that may be exported by the Modem object in DBus; and
+ then, depending on the per-interface support checks, the interface will end up being
+ really exported or not.
+ </para>
+ <para>
+ Each interface defines every step to be run during the initialization, enabling or
+ disabling sequences. Then, the object implementing the interface may or may not provide
+ the implementation of such step. By default, the generic
+ <structname>MMBroadbandModem</structname> object implements already most of the steps
+ in the interfaces providing common features:
+ </para>
+ <figure id="mm-modemmanager-interface-initialization-sequence">
+ <title>Modem interface initialization sequence</title>
+ <graphic fileref="ModemManager-interface-initialization-sequence.png" format="PNG"></graphic>
+ </figure>
+ <para>
+ Vendor-specific subclasses of <structname>MMBroadbandModem</structname> are then able to
+ either provide their own implementation of a given step (in the image below, a custom
+ implementation for capabilities checking); or even completely disable the step if they
+ know that there is no way to run it (in the image below, revision string loading is
+ removed).
+ </para>
+ <figure id="mm-modemmanager-interface-initialization-sequence-subclassed">
+ <title>Modem interface initialization sequence subclassed</title>
+ <graphic fileref="ModemManager-interface-initialization-sequence-subclassed.png" format="PNG"></graphic>
+ </figure>
+ <para>
+ These subclass-able steps are all implemented as standard GIO asynchronous functions,
+ so subclassing a step involves implementing both the async method which receives the
+ input arguments to the action and the corresponding <literal>_finish()</literal> method
+ which provides the results of the action once the operation is ready.
+ </para>
+ <para>
+ It is worth noting that these steps and the asynchronous methods implementing them
+ don't assume that an AT port will be used to implement the real action. This means
+ that any other kind of port may be really used (e.g. QCDM or QMI) in the implementation,
+ or even that a static reply can be returned (e.g. Iridium modems will always report
+ "Iridium" as current OperatorName).
+ </para>
</chapter>
</part>