aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/mmcli-modem.c6
-rw-r--r--docs/reference/libmm-glib/libmm-glib-sections.txt5
-rw-r--r--introspection/org.freedesktop.ModemManager1.Modem.xml7
-rw-r--r--libmm-glib/mm-modem.c41
-rw-r--r--libmm-glib/mm-modem.h3
-rw-r--r--src/mm-iface-modem.c15
6 files changed, 75 insertions, 2 deletions
diff --git a/cli/mmcli-modem.c b/cli/mmcli-modem.c
index 981421b6..154414b9 100644
--- a/cli/mmcli-modem.c
+++ b/cli/mmcli-modem.c
@@ -323,10 +323,12 @@ print_modem_info (void)
g_print (" -------------------------\n"
" System | device: '%s'\n"
" | drivers: '%s'\n"
- " | plugin: '%s'\n",
+ " | plugin: '%s'\n"
+ " | primary port: '%s'\n",
VALIDATE_UNKNOWN (mm_modem_get_device (ctx->modem)),
VALIDATE_UNKNOWN (drivers_string),
- VALIDATE_UNKNOWN (mm_modem_get_plugin (ctx->modem)));
+ VALIDATE_UNKNOWN (mm_modem_get_plugin (ctx->modem)),
+ VALIDATE_UNKNOWN (mm_modem_get_primary_port (ctx->modem)));
/* Numbers related stuff */
g_print (" -------------------------\n"
diff --git a/docs/reference/libmm-glib/libmm-glib-sections.txt b/docs/reference/libmm-glib/libmm-glib-sections.txt
index 181d6604..f37e7a3d 100644
--- a/docs/reference/libmm-glib/libmm-glib-sections.txt
+++ b/docs/reference/libmm-glib/libmm-glib-sections.txt
@@ -89,6 +89,8 @@ mm_modem_get_drivers
mm_modem_dup_drivers
mm_modem_get_plugin
mm_modem_dup_plugin
+mm_modem_get_primary_port
+mm_modem_dup_primary_port
mm_modem_get_device
mm_modem_dup_device
mm_modem_get_equipment_identifier
@@ -1389,6 +1391,8 @@ mm_gdbus_modem_get_own_numbers
mm_gdbus_modem_dup_own_numbers
mm_gdbus_modem_get_plugin
mm_gdbus_modem_dup_plugin
+mm_gdbus_modem_get_primary_port
+mm_gdbus_modem_dup_primary_port
mm_gdbus_modem_get_preferred_mode
mm_gdbus_modem_get_revision
mm_gdbus_modem_dup_revision
@@ -1447,6 +1451,7 @@ mm_gdbus_modem_set_model
mm_gdbus_modem_set_modem_capabilities
mm_gdbus_modem_set_own_numbers
mm_gdbus_modem_set_plugin
+mm_gdbus_modem_set_primary_port
mm_gdbus_modem_set_preferred_mode
mm_gdbus_modem_set_revision
mm_gdbus_modem_set_signal_quality
diff --git a/introspection/org.freedesktop.ModemManager1.Modem.xml b/introspection/org.freedesktop.ModemManager1.Modem.xml
index 06c4116b..9a1a5126 100644
--- a/introspection/org.freedesktop.ModemManager1.Modem.xml
+++ b/introspection/org.freedesktop.ModemManager1.Modem.xml
@@ -297,6 +297,13 @@
<property name="Plugin" type="s" access="read" />
<!--
+ PrimaryPort:
+
+ The name of the primary port using to control the modem.
+ -->
+ <property name="PrimaryPort" type="s" access="read" />
+
+ <!--
EquipmentIdentifier:
The identity of the device.
diff --git a/libmm-glib/mm-modem.c b/libmm-glib/mm-modem.c
index 6b9357a0..b575a300 100644
--- a/libmm-glib/mm-modem.c
+++ b/libmm-glib/mm-modem.c
@@ -538,6 +538,47 @@ mm_modem_dup_plugin (MMModem *self)
/*****************************************************************************/
/**
+ * mm_modem_get_primary_port:
+ * @self: A #MMModem.
+ *
+ * Gets the name of the primary port controlling this #MMModem.
+ *
+ * <warning>The returned value is only valid until the property changes so
+ * it is only safe to use this function on the thread where
+ * @self was constructed. Use mm_modem_dup_primary_port() if on another
+ * thread.</warning>
+ *
+ * Returns: (transfer none): The name of the primary port. Do not free the returned value, it belongs to @self.
+ */
+const gchar *
+mm_modem_get_primary_port (MMModem *self)
+{
+ g_return_val_if_fail (MM_IS_MODEM (self), NULL);
+
+ RETURN_NON_EMPTY_CONSTANT_STRING (
+ mm_gdbus_modem_get_primary_port (MM_GDBUS_MODEM (self)));
+}
+
+/**
+ * mm_modem_dup_primary_port:
+ * @self: A #MMModem.
+ *
+ * Gets a copy of the name of the primary port controlling this #MMModem.
+ *
+ * Returns: (transfer full): The name of the primary port. The returned value should be freed with g_free().
+ */
+gchar *
+mm_modem_dup_primary_port (MMModem *self)
+{
+ g_return_val_if_fail (MM_IS_MODEM (self), NULL);
+
+ RETURN_NON_EMPTY_STRING (
+ mm_gdbus_modem_dup_primary_port (MM_GDBUS_MODEM (self)));
+}
+
+/*****************************************************************************/
+
+/**
* mm_modem_get_equipment_identifier:
* @self: A #MMModem.
*
diff --git a/libmm-glib/mm-modem.h b/libmm-glib/mm-modem.h
index 480c3fe4..46609ca4 100644
--- a/libmm-glib/mm-modem.h
+++ b/libmm-glib/mm-modem.h
@@ -102,6 +102,9 @@ gchar **mm_modem_dup_drivers (MMModem *self);
const gchar *mm_modem_get_plugin (MMModem *self);
gchar *mm_modem_dup_plugin (MMModem *self);
+const gchar *mm_modem_get_primary_port (MMModem *self);
+gchar *mm_modem_dup_primary_port (MMModem *self);
+
const gchar *mm_modem_get_equipment_identifier (MMModem *self);
gchar *mm_modem_dup_equipment_identifier (MMModem *self);
diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c
index 4222dda6..68b6ba55 100644
--- a/src/mm-iface-modem.c
+++ b/src/mm-iface-modem.c
@@ -3328,6 +3328,21 @@ interface_initialization_step (InitializationContext *ctx)
mm_gdbus_modem_set_plugin (ctx->skeleton, plugin);
g_free (plugin);
}
+ /* Load primary port if not done before */
+ if (!mm_gdbus_modem_get_primary_port (ctx->skeleton)) {
+ MMPort *primary;
+
+#if defined WITH_QMI
+ primary = MM_PORT (mm_base_modem_peek_port_qmi (MM_BASE_MODEM (ctx->self)));
+ if (!primary)
+ primary = MM_PORT (mm_base_modem_peek_port_primary (MM_BASE_MODEM (ctx->self)));
+#else
+ primary = MM_PORT (mm_base_modem_peek_port_primary (MM_BASE_MODEM (ctx->self)));
+#endif
+
+ g_assert (primary != NULL);
+ mm_gdbus_modem_set_primary_port (ctx->skeleton, mm_port_get_device (primary));
+ }
/* Fall down to next step */
ctx->step++;