Stephan Gerhold 5cc34d5f86 port-qmi: Detect endpoint type based on net driver
At the moment the endpoint type and number for the QMI WDA calls are
chosen based on the subsystem of the QMI control port. This does not
work correctly for some configurations:

  - SUBSYS_QRTR currently implies ENDPOINT_TYPE_EMBEDDED, but this is
    only valid for QRTR+IPA configurations. For QRTR+BAM-DMUX the
    correct type is ENDPOINT_TYPE_BAM_DMUX.

  - SUBSYS_WWAN currently implies ENDPOINT_TYPE_PCIE, but there is
    already a comment that mentions that this selection works only for
    MHI/PCIe modems. SUBSYS_WWAN is also used by RPMSG+BAM-DMUX
    configurations in which case the correct type is also
    ENDPOINT_TYPE_BAM_DMUX.

Looking closer at these cases suggests that the endpoint type actually
refers to the data/net port and not the control port. It is more
reliable choose it based on the network driver and not the subsystem
of the control port.

Address this partially by choosing the endpoint type based on the
net_driver. Choosing the endpoint interface number correctly requires
more refactoring since most of the logic is currently handled globally
for a QMI control port, while it's actually specific to the chosen
data/net port in some cases (e.g. multiple BAM-DMUX network interfaces).
2022-08-18 09:05:58 +00:00
2021-09-07 10:55:43 +00:00
2022-07-25 11:01:51 +02:00
2019-09-04 10:37:39 -07:00
2022-07-25 11:01:51 +02:00
2022-07-27 12:26:35 +00:00
2013-08-14 13:30:35 +02:00
2021-08-10 00:01:01 +02:00
2013-08-14 15:43:28 +02:00
2022-07-25 11:01:51 +02:00
2022-07-25 11:01:51 +02:00
2021-02-05 14:56:59 +01:00
2018-01-25 09:52:12 +01:00

ModemManager.
ModemManager provides a unified high level API for communicating with mobile
broadband modems, regardless of the protocol used to communicate with the
actual device (Generic AT, vendor-specific AT, QCDM, QMI, MBIM...).

Using.
ModemManager is a system daemon and is not meant to be used directly from
the command line. However, since it provides a DBus API, it is possible to use
'dbus-send' commands or the new 'mmcli' command line interface to control it
from the terminal. The devices are queried from udev and automatically updated
based on hardware events, although a manual re-scan can also be requested to
look for RS232 modems.

Implementation.
ModemManager is a DBus system bus activated service (meaning it's started
automatically when a request arrives). It is written in C, using glib and gio.
Several GInterfaces specify different features that the modems support,
including the generic MMIfaceModem3gpp and MMIfaceModemCdma which provide basic
operations for 3GPP (GSM, UMTS, LTE) or CDMA (CDMA1x, EV-DO) modems. If a given
feature is not available in the modem, the specific interface will not be
exported in DBus.

Plugins.
Plugins are loaded on startup, and must implement the MMPlugin interface. It
consists of a couple of methods which tell the daemon whether the plugin
supports a port and to create custom MMBroadbandModem implementations. It most
likely makes sense to derive custom modem implementations from one of the
generic classes and just add (or override) operations which are not standard.
There are multiple fully working plugins in the plugins/ directory that can be
used as an example for writing new plugins. Writing new plugins is highly
encouraged! The plugin API is open for changes, so if you're writing a plugin
and need to add or change some public method, feel free to suggest it!

License.
The ModemManager and mmcli binaries are both GPLv2+.
The libmm-glib library is LGPLv2+.

Code of Conduct.
Please note that this project is released with a Contributor Code of Conduct.
By participating in this project you agree to abide by its terms, which you can
find in the following link:
  https://www.freedesktop.org/wiki/CodeOfConduct
CoC issues may be raised to the project maintainers at the following address:
  modemmanager-devel-owner@lists.freedesktop.org
S
Description
No description provided
Readme
19 MiB
Languages
C 98.6%
Meson 0.8%
Python 0.4%
Shell 0.2%