sierra: XMM-specific features in XMM based modems (e.g. EM7345)

We create XMM-based modems like the EM7345 with XMM-specific features
like the AT+XLCSLSR based GNSS support. E.g.:

  $ mmcli -m a --location-status
    ------------------------
    Location | capabilities: 3gpp-lac-ci, gps-raw, gps-nmea, agps-msa, agps-msb
             |      enabled: 3gpp-lac-ci
             |      signals: no
    ------------------------
    GPS      | refresh rate: 30 seconds

  $ sudo mmcli -m a --location-enable-gps-nmea
  successfully setup location gathering

  $ sudo mmcli -m a --location-get
    --------------------------
    3GPP |      operator code: 214
         |      operator name: 7
         | location area code: 0000
         | tracking area code: 6FFE
         |            cell id: 0465CD20
    --------------------------
    GPS  |               nmea: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
         |                     $GNGSA,A,1,,,,,,,,,,,,,,,,1*1D
         |                     $GNRMC,235951.000,V,,,,,,,,,,N,V*20
         |                     $GNVTG,,T,,M,,N,,K,N*32
         |                     $GNGGA,235951.000,,,,,0,0,,,M,,M,,*5F

Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/25
This commit is contained in:
Aleksander Morgado
2020-08-10 19:26:56 +02:00
parent 422a9070c4
commit 28ad994e37
3 changed files with 23 additions and 1 deletions

View File

@@ -489,7 +489,8 @@ MM_ENABLE_PLUGIN([samsung],
MM_ENABLE_PLUGIN([sierra-legacy],
[with_shared_icera,
with_shared_sierra])
MM_ENABLE_PLUGIN([sierra])
MM_ENABLE_PLUGIN([sierra],
[with_shared_xmm])
MM_ENABLE_PLUGIN([simtech])
MM_ENABLE_PLUGIN([telit],
[with_shared_telit])

View File

@@ -1240,6 +1240,7 @@ libmm_plugin_sierra_la_SOURCES = \
$(NULL)
libmm_plugin_sierra_la_CPPFLAGS = \
$(PLUGIN_COMMON_COMPILER_FLAGS) \
$(XMM_COMMON_COMPILER_FLAGS) \
-DMM_MODULE_NAME=\"sierra\" \
$(NULL)
libmm_plugin_sierra_la_LDFLAGS = $(PLUGIN_COMMON_LINKER_FLAGS)

View File

@@ -25,6 +25,7 @@
#include "mm-log-object.h"
#include "mm-plugin-sierra.h"
#include "mm-broadband-modem.h"
#include "mm-broadband-modem-xmm.h"
#if defined WITH_QMI
#include "mm-broadband-modem-qmi.h"
@@ -32,6 +33,7 @@
#if defined WITH_MBIM
#include "mm-broadband-modem-mbim.h"
#include "mm-broadband-modem-mbim-xmm.h"
#endif
G_DEFINE_TYPE (MMPluginSierra, mm_plugin_sierra, MM_TYPE_PLUGIN)
@@ -63,6 +65,14 @@ create_modem (MMPlugin *self,
#if defined WITH_MBIM
if (mm_port_probe_list_has_mbim_port (probes)) {
if (mm_port_probe_list_is_xmm (probes)) {
mm_obj_dbg (self, "MBIM-powered XMM-based Sierra modem found...");
return MM_BASE_MODEM (mm_broadband_modem_mbim_xmm_new (uid,
drivers,
mm_plugin_get_name (self),
vendor,
product));
}
mm_obj_dbg (self, "MBIM-powered Sierra modem found...");
return MM_BASE_MODEM (mm_broadband_modem_mbim_new (uid,
drivers,
@@ -72,6 +82,15 @@ create_modem (MMPlugin *self,
}
#endif
if (mm_port_probe_list_is_xmm (probes)) {
mm_obj_dbg (self, "XMM-based Sierra modem found...");
return MM_BASE_MODEM (mm_broadband_modem_xmm_new (uid,
drivers,
mm_plugin_get_name (self),
vendor,
product));
}
/* Fallback to default modem in the worst case */
return MM_BASE_MODEM (mm_broadband_modem_new (uid,
drivers,
@@ -99,6 +118,7 @@ mm_plugin_create (void)
MM_PLUGIN_ALLOWED_QCDM, TRUE,
MM_PLUGIN_ALLOWED_QMI, TRUE,
MM_PLUGIN_ALLOWED_MBIM, TRUE,
MM_PLUGIN_XMM_PROBE, TRUE,
NULL));
}