aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-base-modem.c83
-rw-r--r--src/mm-base-modem.h3
-rw-r--r--src/mm-iface-modem.c8
-rw-r--r--src/mm-plugin.c38
-rw-r--r--src/mm-port-mbim.c1
-rw-r--r--src/mm-port-net.c1
-rw-r--r--src/mm-port-probe.c19
-rw-r--r--src/mm-port-probe.h2
-rw-r--r--src/mm-port-qmi.c2
-rw-r--r--src/mm-port-serial-at.c1
-rw-r--r--src/mm-port-serial-gps.c1
-rw-r--r--src/mm-port-serial-qcdm.c2
-rw-r--r--src/mm-port-serial.c1
-rw-r--r--src/mm-port.c28
-rw-r--r--src/mm-port.h9
-rw-r--r--src/plugins/cinterion/mm-plugin-cinterion.c1
-rw-r--r--src/plugins/dell/mm-plugin-dell.c1
-rw-r--r--src/plugins/fibocom/mm-port-mbim-fibocom.c1
-rw-r--r--src/plugins/huawei/mm-plugin-huawei.c1
-rw-r--r--src/plugins/option/mm-plugin-hso.c1
-rw-r--r--src/plugins/option/mm-plugin-option.c1
-rw-r--r--src/plugins/pantech/mm-plugin-pantech.c1
-rw-r--r--src/plugins/quectel/mm-port-mbim-quectel.c1
-rw-r--r--src/plugins/sierra/mm-common-sierra.c1
-rw-r--r--src/plugins/telit/mm-common-telit.c5
-rw-r--r--src/plugins/zte/mm-plugin-zte.c1
26 files changed, 156 insertions, 58 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c
index 7213852f..15469b5c 100644
--- a/src/mm-base-modem.c
+++ b/src/mm-base-modem.c
@@ -190,11 +190,13 @@ port_timed_out_cb (MMPort *port,
static MMPort *
base_modem_create_ignored_port (MMBaseModem *self,
+ MMPortType ptype,
const gchar *name)
{
return MM_PORT (g_object_new (MM_TYPE_PORT,
MM_PORT_DEVICE, name,
- MM_PORT_TYPE, MM_PORT_TYPE_IGNORED,
+ MM_PORT_GROUP, MM_PORT_GROUP_IGNORED,
+ MM_PORT_TYPE, ptype,
NULL));
}
@@ -326,6 +328,7 @@ base_modem_create_wwan_port (MMBaseModem *self,
return MM_PORT (g_object_new (MM_TYPE_PORT,
MM_PORT_DEVICE, name,
MM_PORT_SUBSYS, MM_PORT_SUBSYS_WWAN,
+ MM_PORT_GROUP, MM_PORT_GROUP_USED,
MM_PORT_TYPE, MM_PORT_TYPE_XMMRPC,
NULL));
@@ -343,6 +346,7 @@ static MMPort *
base_modem_internal_grab_port (MMBaseModem *self,
MMKernelDevice *kernel_device,
gboolean link_port,
+ MMPortGroup pgroup,
MMPortType ptype,
MMPortSerialAtFlag at_pflags,
GError **error)
@@ -377,8 +381,8 @@ base_modem_internal_grab_port (MMBaseModem *self,
/* Explicitly ignored ports, grab them but explicitly flag them as ignored
* right away, all the same way (i.e. regardless of subsystem). */
- if (ptype == MM_PORT_TYPE_IGNORED)
- port = base_modem_create_ignored_port (self, name);
+ if (pgroup == MM_PORT_GROUP_IGNORED)
+ port = base_modem_create_ignored_port (self, ptype, name);
else if (g_str_equal (subsys, "net"))
port = base_modem_create_net_port (self, name);
else if (g_str_equal (subsys, "tty"))
@@ -403,25 +407,27 @@ base_modem_internal_grab_port (MMBaseModem *self,
}
/* Setup consecutive ports and removal watchers in all control ports */
- if (MM_IS_PORT_SERIAL_AT (port)) {
- mm_obj_dbg (port, "port monitoring enabled in AT port");
- port_monitoring = TRUE;
- } else if (MM_IS_PORT_SERIAL_QCDM (port)) {
- mm_obj_dbg (port, "port monitoring enabled in QCDM port");
- port_monitoring = TRUE;
- }
+ if (pgroup == MM_PORT_GROUP_USED) {
+ if (MM_IS_PORT_SERIAL_AT (port)) {
+ mm_obj_dbg (port, "port monitoring enabled in AT port");
+ port_monitoring = TRUE;
+ } else if (MM_IS_PORT_SERIAL_QCDM (port)) {
+ mm_obj_dbg (port, "port monitoring enabled in QCDM port");
+ port_monitoring = TRUE;
+ }
#if defined WITH_QMI
- else if (MM_IS_PORT_QMI (port)) {
- mm_obj_dbg (port, "port monitoring enabled in QMI port");
- port_monitoring = TRUE;
- }
+ else if (MM_IS_PORT_QMI (port)) {
+ mm_obj_dbg (port, "port monitoring enabled in QMI port");
+ port_monitoring = TRUE;
+ }
#endif
#if defined WITH_MBIM
- else if (MM_IS_PORT_MBIM (port)) {
- mm_obj_dbg (port, "port monitoring enabled in MBIM port");
- port_monitoring = TRUE;
- }
+ else if (MM_IS_PORT_MBIM (port)) {
+ mm_obj_dbg (port, "port monitoring enabled in MBIM port");
+ port_monitoring = TRUE;
+ }
#endif
+ }
if (port_monitoring) {
if (self->priv->max_timeouts > 0)
@@ -487,13 +493,14 @@ base_modem_internal_grab_port (MMBaseModem *self,
gboolean
mm_base_modem_grab_port (MMBaseModem *self,
MMKernelDevice *kernel_device,
+ MMPortGroup pgroup,
MMPortType ptype,
MMPortSerialAtFlag at_pflags,
GError **error)
{
g_autoptr(GError) inner_error = NULL;
- if (!base_modem_internal_grab_port (self, kernel_device, FALSE, ptype, at_pflags, &inner_error)) {
+ if (!base_modem_internal_grab_port (self, kernel_device, FALSE, pgroup, ptype, at_pflags, &inner_error)) {
/* If the port was REQUIRED via udev tags and we failed to grab it, we will report
* a fatal error. */
if (mm_kernel_device_get_property_as_boolean (kernel_device, ID_MM_REQUIRED)) {
@@ -540,6 +547,7 @@ mm_base_modem_grab_link_port (MMBaseModem *self,
port = base_modem_internal_grab_port (self,
kernel_device,
TRUE,
+ MM_PORT_GROUP_USED,
MM_PORT_TYPE_NET,
MM_PORT_SERIAL_AT_FLAG_NONE,
error);
@@ -1264,25 +1272,28 @@ port_info_cmp (const MMModemPortInfo *a,
return g_strcmp0 (a->name, b->name);
}
-MMModemPortInfo *
-mm_base_modem_get_port_infos (MMBaseModem *self,
- guint *n_port_infos)
+static MMModemPortInfo *
+parse_port_infos (GHashTable *ports,
+ guint *n_port_infos,
+ MMPortGroup pgroup_filter)
{
GHashTableIter iter;
GArray *port_infos;
MMPort *port;
- if (!self->priv->ports) {
+ if (!ports) {
*n_port_infos = 0;
return NULL;
}
- *n_port_infos = g_hash_table_size (self->priv->ports);
- port_infos = g_array_sized_new (FALSE, FALSE, sizeof (MMModemPortInfo), *n_port_infos);
- g_hash_table_iter_init (&iter, self->priv->ports);
+ port_infos = g_array_new (FALSE, FALSE, sizeof (MMModemPortInfo));
+ g_hash_table_iter_init (&iter, ports);
while (g_hash_table_iter_next (&iter, NULL, (gpointer)&port)) {
MMModemPortInfo port_info;
+ if (mm_port_get_port_group (port) != pgroup_filter)
+ continue;
+
port_info.name = g_strdup (mm_port_get_device (port));
switch (mm_port_get_port_type (port)) {
case MM_PORT_TYPE_NET:
@@ -1321,11 +1332,25 @@ mm_base_modem_get_port_infos (MMBaseModem *self,
g_array_append_val (port_infos, port_info);
}
- g_assert (*n_port_infos == port_infos->len);
+ *n_port_infos = port_infos->len;
g_array_sort (port_infos, (GCompareFunc) port_info_cmp);
return (MMModemPortInfo *) g_array_free (port_infos, FALSE);
}
+MMModemPortInfo *
+mm_base_modem_get_port_infos (MMBaseModem *self,
+ guint *n_port_infos)
+{
+ return parse_port_infos (self->priv->ports, n_port_infos, MM_PORT_GROUP_USED);
+}
+
+MMModemPortInfo *
+mm_base_modem_get_ignored_port_infos (MMBaseModem *self,
+ guint *n_port_infos)
+{
+ return parse_port_infos (self->priv->ports, n_port_infos, MM_PORT_GROUP_IGNORED);
+}
+
static gint
port_cmp (MMPort *a,
MMPort *b)
@@ -1467,6 +1492,10 @@ mm_base_modem_organize_ports (MMBaseModem *self,
g_hash_table_iter_init (&iter, self->priv->ports);
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &candidate)) {
+ /* Skip ports that should not be used */
+ if (mm_port_get_port_group (candidate) != MM_PORT_GROUP_USED)
+ continue;
+
switch (mm_port_get_port_type (candidate)) {
case MM_PORT_TYPE_AT:
diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h
index 52670bfb..161b11cb 100644
--- a/src/mm-base-modem.h
+++ b/src/mm-base-modem.h
@@ -137,6 +137,7 @@ guint mm_base_modem_get_dbus_id (MMBaseModem *self);
gboolean mm_base_modem_grab_port (MMBaseModem *self,
MMKernelDevice *kernel_device,
+ MMPortGroup pgroup,
MMPortType ptype,
MMPortSerialAtFlag at_pflags,
GError **error);
@@ -183,6 +184,8 @@ GList *mm_base_modem_get_data_ports (MMBaseModem *self);
MMModemPortInfo *mm_base_modem_get_port_infos (MMBaseModem *self,
guint *n_port_infos);
+MMModemPortInfo *mm_base_modem_get_ignored_port_infos (MMBaseModem *self,
+ guint *n_port_infos);
GList *mm_base_modem_find_ports (MMBaseModem *self,
MMPortSubsys subsys,
diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c
index de25296b..75c2ca63 100644
--- a/src/mm-iface-modem.c
+++ b/src/mm-iface-modem.c
@@ -5718,6 +5718,14 @@ interface_initialization_step (GTask *task)
mm_gdbus_modem_set_ports (ctx->skeleton, mm_common_ports_array_to_variant (port_infos, n_port_infos));
mm_modem_port_info_array_free (port_infos, n_port_infos);
}
+ if (!mm_gdbus_modem_get_ignored_ports (ctx->skeleton)) {
+ MMModemPortInfo *port_infos;
+ guint n_port_infos;
+
+ port_infos = mm_base_modem_get_ignored_port_infos (MM_BASE_MODEM (self), &n_port_infos);
+ mm_gdbus_modem_set_ignored_ports (ctx->skeleton, mm_common_ports_array_to_variant (port_infos, n_port_infos));
+ mm_modem_port_info_array_free (port_infos, n_port_infos);
+ }
ctx->step++;
/* fall-through */
diff --git a/src/mm-plugin.c b/src/mm-plugin.c
index 32605b89..bacbd316 100644
--- a/src/mm-plugin.c
+++ b/src/mm-plugin.c
@@ -974,19 +974,20 @@ mm_plugin_create_modem (MMPlugin *self,
GError *inner_error = NULL;
MMPortProbe *probe;
gboolean grabbed = FALSE;
- gboolean force_ignored = FALSE;
const gchar *subsys;
const gchar *name;
const gchar *driver;
+ MMPortGroup port_group;
MMPortType port_type;
probe = MM_PORT_PROBE (l->data);
- subsys = mm_port_probe_get_port_subsys (probe);
- name = mm_port_probe_get_port_name (probe);
- port_type = mm_port_probe_get_port_type (probe);
+ subsys = mm_port_probe_get_port_subsys (probe);
+ name = mm_port_probe_get_port_name (probe);
+ port_group = mm_port_probe_get_port_group (probe);
+ port_type = mm_port_probe_get_port_type (probe);
- driver = mm_kernel_device_get_driver (mm_port_probe_peek_port (probe));
+ driver = mm_kernel_device_get_driver (mm_port_probe_peek_port (probe));
/* If grabbing a port fails, just warn. We'll decide if the modem is
* valid or not when all ports get organized */
@@ -1003,9 +1004,8 @@ mm_plugin_create_modem (MMPlugin *self,
}
/* Ports that are explicitly ignored will be grabbed as ignored */
- if (mm_port_probe_is_ignored (probe)) {
+ if (port_group == MM_PORT_GROUP_IGNORED) {
mm_obj_dbg (self, "port %s is explicitly ignored", name);
- force_ignored = TRUE;
goto grab_port;
}
@@ -1017,7 +1017,7 @@ mm_plugin_create_modem (MMPlugin *self,
g_strcmp0 (driver, "qmi_wwan") != 0) {
/* Non-QMI net ports are ignored in QMI modems */
mm_obj_dbg (self, "ignoring non-QMI net port %s in QMI modem", name);
- force_ignored = TRUE;
+ port_group = MM_PORT_GROUP_IGNORED;
goto grab_port;
}
@@ -1026,7 +1026,7 @@ mm_plugin_create_modem (MMPlugin *self,
g_strcmp0 (driver, "qmi_wwan") == 0) {
/* QMI net ports are ignored in non-QMI modems */
mm_obj_dbg (self, "ignoring QMI net port %s in non-QMI modem", name);
- force_ignored = TRUE;
+ port_group = MM_PORT_GROUP_IGNORED;
goto grab_port;
}
#else
@@ -1034,7 +1034,7 @@ mm_plugin_create_modem (MMPlugin *self,
g_strcmp0 (driver, "qmi_wwan") == 0) {
/* QMI net ports are ignored if QMI support not built */
mm_obj_dbg (self, "ignoring QMI net port %s as QMI support isn't available", name);
- force_ignored = TRUE;
+ port_group = MM_PORT_GROUP_IGNORED;
goto grab_port;
}
#endif
@@ -1048,7 +1048,7 @@ mm_plugin_create_modem (MMPlugin *self,
g_strcmp0 (driver, "cdc_mbim") != 0) {
/* Non-MBIM net ports are ignored in MBIM modems */
mm_obj_dbg (self, "ignoring non-MBIM net port %s in MBIM modem", name);
- force_ignored = TRUE;
+ port_group = MM_PORT_GROUP_IGNORED;
goto grab_port;
}
@@ -1057,27 +1057,21 @@ mm_plugin_create_modem (MMPlugin *self,
g_strcmp0 (driver, "cdc_mbim") == 0) {
/* MBIM net ports are ignored in non-MBIM modems */
mm_obj_dbg (self, "ignoring MBIM net port %s in non-MBIM modem", name);
- force_ignored = TRUE;
+ port_group = MM_PORT_GROUP_IGNORED;
goto grab_port;
}
#else
if (port_type == MM_PORT_TYPE_NET &&
g_strcmp0 (driver, "cdc_mbim") == 0) {
mm_obj_dbg (self, "ignoring MBIM net port %s as MBIM support isn't available", name);
- force_ignored = TRUE;
+ port_group = MM_PORT_GROUP_IGNORED;
goto grab_port;
}
#endif
}
grab_port:
- if (force_ignored)
- grabbed = mm_base_modem_grab_port (modem,
- mm_port_probe_peek_port (probe),
- MM_PORT_TYPE_IGNORED,
- MM_PORT_SERIAL_AT_FLAG_NONE,
- &inner_error);
- else if (MM_PLUGIN_GET_CLASS (self)->grab_port)
+ if (port_group != MM_PORT_GROUP_IGNORED && MM_PLUGIN_GET_CLASS (self)->grab_port)
grabbed = MM_PLUGIN_GET_CLASS (self)->grab_port (MM_PLUGIN (self),
modem,
probe,
@@ -1085,7 +1079,8 @@ mm_plugin_create_modem (MMPlugin *self,
else
grabbed = mm_base_modem_grab_port (modem,
mm_port_probe_peek_port (probe),
- mm_port_probe_get_port_type (probe),
+ port_group,
+ port_type,
MM_PORT_SERIAL_AT_FLAG_NONE,
&inner_error);
@@ -1128,6 +1123,7 @@ mm_plugin_create_modem (MMPlugin *self,
g_clear_error (&inner_error);
} else if (!mm_base_modem_grab_port (modem,
kernel_device,
+ MM_PORT_GROUP_USED,
MM_PORT_TYPE_AT,
MM_PORT_SERIAL_AT_FLAG_NONE,
&inner_error)) {
diff --git a/src/mm-port-mbim.c b/src/mm-port-mbim.c
index d14d61c4..e58ba961 100644
--- a/src/mm-port-mbim.c
+++ b/src/mm-port-mbim.c
@@ -940,6 +940,7 @@ mm_port_mbim_new (const gchar *name,
return MM_PORT_MBIM (g_object_new (MM_TYPE_PORT_MBIM,
MM_PORT_DEVICE, name,
MM_PORT_SUBSYS, subsys,
+ MM_PORT_GROUP, MM_PORT_GROUP_USED,
MM_PORT_TYPE, MM_PORT_TYPE_MBIM,
NULL));
}
diff --git a/src/mm-port-net.c b/src/mm-port-net.c
index a1fb4372..c2c0f78e 100644
--- a/src/mm-port-net.c
+++ b/src/mm-port-net.c
@@ -156,6 +156,7 @@ mm_port_net_new (const gchar *name)
return MM_PORT_NET (g_object_new (MM_TYPE_PORT_NET,
MM_PORT_DEVICE, name,
MM_PORT_SUBSYS, MM_PORT_SUBSYS_NET,
+ MM_PORT_GROUP, MM_PORT_GROUP_USED,
MM_PORT_TYPE, MM_PORT_TYPE_NET,
NULL));
}
diff --git a/src/mm-port-probe.c b/src/mm-port-probe.c
index c01cbddb..6b53907b 100644
--- a/src/mm-port-probe.c
+++ b/src/mm-port-probe.c
@@ -2002,6 +2002,17 @@ mm_port_probe_list_has_xmmrpc_port (GList *list)
return FALSE;
}
+MMPortGroup
+mm_port_probe_get_port_group (MMPortProbe *self)
+{
+ g_return_val_if_fail (MM_IS_PORT_PROBE (self), MM_PORT_GROUP_UNKNOWN);
+
+ if (self->priv->is_ignored)
+ return MM_PORT_GROUP_IGNORED;
+
+ return MM_PORT_GROUP_USED;
+}
+
MMPortType
mm_port_probe_get_port_type (MMPortProbe *self)
{
@@ -2144,14 +2155,6 @@ mm_port_probe_list_is_xmm (GList *probes)
return FALSE;
}
-gboolean
-mm_port_probe_is_ignored (MMPortProbe *self)
-{
- g_return_val_if_fail (MM_IS_PORT_PROBE (self), FALSE);
-
- return self->priv->is_ignored;
-}
-
const gchar *
mm_port_probe_get_port_name (MMPortProbe *self)
{
diff --git a/src/mm-port-probe.h b/src/mm-port-probe.h
index 000b40da..3833d50c 100644
--- a/src/mm-port-probe.h
+++ b/src/mm-port-probe.h
@@ -140,6 +140,7 @@ gboolean mm_port_probe_run_early_at_probe_finish (MMPortProbe *self,
GError **error);
/* Probing result getters */
+MMPortGroup mm_port_probe_get_port_group (MMPortProbe *self);
MMPortType mm_port_probe_get_port_type (MMPortProbe *self);
gboolean mm_port_probe_is_at (MMPortProbe *self);
gboolean mm_port_probe_is_qcdm (MMPortProbe *self);
@@ -150,7 +151,6 @@ const gchar *mm_port_probe_get_vendor (MMPortProbe *self);
const gchar *mm_port_probe_get_product (MMPortProbe *self);
gboolean mm_port_probe_is_icera (MMPortProbe *self);
gboolean mm_port_probe_is_xmm (MMPortProbe *self);
-gboolean mm_port_probe_is_ignored (MMPortProbe *self);
/* Additional helpers */
gboolean mm_port_probe_list_has_at_port (GList *list);
diff --git a/src/mm-port-qmi.c b/src/mm-port-qmi.c
index 80bde14b..6e198b5b 100644
--- a/src/mm-port-qmi.c
+++ b/src/mm-port-qmi.c
@@ -2842,6 +2842,7 @@ mm_port_qmi_new (const gchar *name,
return MM_PORT_QMI (g_object_new (MM_TYPE_PORT_QMI,
MM_PORT_DEVICE, name,
MM_PORT_SUBSYS, subsys,
+ MM_PORT_GROUP, MM_PORT_GROUP_USED,
MM_PORT_TYPE, MM_PORT_TYPE_QMI,
NULL));
}
@@ -2855,6 +2856,7 @@ mm_port_qmi_new_from_node (const gchar *name,
"node", node,
MM_PORT_DEVICE, name,
MM_PORT_SUBSYS, MM_PORT_SUBSYS_QRTR,
+ MM_PORT_GROUP, MM_PORT_GROUP_USED,
MM_PORT_TYPE, MM_PORT_TYPE_QMI,
NULL));
}
diff --git a/src/mm-port-serial-at.c b/src/mm-port-serial-at.c
index 0130b62d..90c0af70 100644
--- a/src/mm-port-serial-at.c
+++ b/src/mm-port-serial-at.c
@@ -526,6 +526,7 @@ mm_port_serial_at_new (const char *name,
return MM_PORT_SERIAL_AT (g_object_new (MM_TYPE_PORT_SERIAL_AT,
MM_PORT_DEVICE, name,
MM_PORT_SUBSYS, subsys,
+ MM_PORT_GROUP, MM_PORT_GROUP_USED,
MM_PORT_TYPE, MM_PORT_TYPE_AT,
NULL));
}
diff --git a/src/mm-port-serial-gps.c b/src/mm-port-serial-gps.c
index fe8ec6a8..540bad72 100644
--- a/src/mm-port-serial-gps.c
+++ b/src/mm-port-serial-gps.c
@@ -174,6 +174,7 @@ mm_port_serial_gps_new (const char *name)
return MM_PORT_SERIAL_GPS (g_object_new (MM_TYPE_PORT_SERIAL_GPS,
MM_PORT_DEVICE, name,
MM_PORT_SUBSYS, MM_PORT_SUBSYS_TTY,
+ MM_PORT_GROUP, MM_PORT_GROUP_USED,
MM_PORT_TYPE, MM_PORT_TYPE_GPS,
NULL));
}
diff --git a/src/mm-port-serial-qcdm.c b/src/mm-port-serial-qcdm.c
index 06656d40..dcc8b472 100644
--- a/src/mm-port-serial-qcdm.c
+++ b/src/mm-port-serial-qcdm.c
@@ -372,6 +372,7 @@ mm_port_serial_qcdm_new (const char *name,
return MM_PORT_SERIAL_QCDM (g_object_new (MM_TYPE_PORT_SERIAL_QCDM,
MM_PORT_DEVICE, name,
MM_PORT_SUBSYS, subsys,
+ MM_PORT_GROUP, MM_PORT_GROUP_USED,
MM_PORT_TYPE, MM_PORT_TYPE_QCDM,
MM_PORT_SERIAL_SEND_DELAY, (guint64) 0,
NULL));
@@ -387,6 +388,7 @@ mm_port_serial_qcdm_new_fd (int fd)
port = MM_PORT_SERIAL_QCDM (g_object_new (MM_TYPE_PORT_SERIAL_QCDM,
MM_PORT_DEVICE, name,
MM_PORT_SUBSYS, MM_PORT_SUBSYS_TTY,
+ MM_PORT_GROUP, MM_PORT_GROUP_USED,
MM_PORT_TYPE, MM_PORT_TYPE_QCDM,
MM_PORT_SERIAL_FD, fd,
MM_PORT_SERIAL_SEND_DELAY, (guint64) 0,
diff --git a/src/mm-port-serial.c b/src/mm-port-serial.c
index 0ea7a06e..861f4e88 100644
--- a/src/mm-port-serial.c
+++ b/src/mm-port-serial.c
@@ -1895,6 +1895,7 @@ mm_port_serial_new (const char *name, MMPortType ptype)
return MM_PORT_SERIAL (g_object_new (MM_TYPE_PORT_SERIAL,
MM_PORT_DEVICE, name,
MM_PORT_SUBSYS, MM_PORT_SUBSYS_TTY,
+ MM_PORT_GROUP, MM_PORT_GROUP_USED,
MM_PORT_TYPE, ptype,
NULL));
}
diff --git a/src/mm-port.c b/src/mm-port.c
index f2df3933..da37f902 100644
--- a/src/mm-port.c
+++ b/src/mm-port.c
@@ -31,6 +31,7 @@ enum {
PROP_0,
PROP_DEVICE,
PROP_SUBSYS,
+ PROP_GROUP,
PROP_TYPE,
PROP_CONNECTED,
PROP_KERNEL_DEVICE,
@@ -49,6 +50,7 @@ static guint signals[LAST_SIGNAL] = { 0 };
struct _MMPortPrivate {
gchar *device;
MMPortSubsys subsys;
+ MMPortGroup pgroup;
MMPortType ptype;
gboolean connected;
MMKernelDevice *kernel_device;
@@ -74,6 +76,15 @@ mm_port_get_subsys (MMPort *self)
return self->priv->subsys;
}
+MMPortGroup
+mm_port_get_port_group (MMPort *self)
+{
+ g_return_val_if_fail (self != NULL, MM_PORT_GROUP_UNKNOWN);
+ g_return_val_if_fail (MM_IS_PORT (self), MM_PORT_GROUP_UNKNOWN);
+
+ return self->priv->pgroup;
+}
+
MMPortType
mm_port_get_port_type (MMPort *self)
{
@@ -151,6 +162,10 @@ set_property (GObject *object,
/* Construct only */
self->priv->subsys = g_value_get_uint (value);
break;
+ case PROP_GROUP:
+ /* Construct only */
+ self->priv->pgroup = g_value_get_uint (value);
+ break;
case PROP_TYPE:
/* Construct only */
self->priv->ptype = g_value_get_uint (value);
@@ -182,6 +197,9 @@ get_property (GObject *object, guint prop_id,
case PROP_SUBSYS:
g_value_set_uint (value, self->priv->subsys);
break;
+ case PROP_GROUP:
+ g_value_set_uint (value, self->priv->pgroup);
+ break;
case PROP_TYPE:
g_value_set_uint (value, self->priv->ptype);
break;
@@ -255,6 +273,16 @@ mm_port_class_init (MMPortClass *klass)
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property
+ (object_class, PROP_GROUP,
+ g_param_spec_uint (MM_PORT_GROUP,
+ "Group",
+ "Group",
+ MM_PORT_GROUP_UNKNOWN,
+ MM_PORT_GROUP_LAST,
+ MM_PORT_GROUP_UNKNOWN,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
(object_class, PROP_TYPE,
g_param_spec_uint (MM_PORT_TYPE,
"Type",
diff --git a/src/mm-port.h b/src/mm-port.h
index 0d78be3d..1dd054a5 100644
--- a/src/mm-port.h
+++ b/src/mm-port.h
@@ -34,6 +34,13 @@ typedef enum { /*< underscore_name=mm_port_subsys >*/
MM_PORT_SUBSYS_LAST = MM_PORT_SUBSYS_WWAN /*< skip >*/
} MMPortSubsys;
+typedef enum { /*< underscore_name=mm_port_group >*/
+ MM_PORT_GROUP_UNKNOWN = 0x0,
+ MM_PORT_GROUP_USED,
+ MM_PORT_GROUP_IGNORED,
+ MM_PORT_GROUP_LAST = MM_PORT_GROUP_IGNORED /*< skip >*/
+} MMPortGroup;
+
typedef enum { /*< underscore_name=mm_port_type >*/
MM_PORT_TYPE_UNKNOWN = 0x0,
MM_PORT_TYPE_IGNORED,
@@ -57,6 +64,7 @@ typedef enum { /*< underscore_name=mm_port_type >*/
#define MM_PORT_DEVICE "device"
#define MM_PORT_SUBSYS "subsys"
+#define MM_PORT_GROUP "group"
#define MM_PORT_TYPE "type"
#define MM_PORT_CONNECTED "connected"
#define MM_PORT_KERNEL_DEVICE "kernel-device"
@@ -86,6 +94,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMPort, g_object_unref)
const gchar *mm_port_get_device (MMPort *self);
MMPortSubsys mm_port_get_subsys (MMPort *self);
+MMPortGroup mm_port_get_port_group (MMPort *self);
MMPortType mm_port_get_port_type (MMPort *self);
gboolean mm_port_get_connected (MMPort *self);
void mm_port_set_connected (MMPort *self, gboolean connected);
diff --git a/src/plugins/cinterion/mm-plugin-cinterion.c b/src/plugins/cinterion/mm-plugin-cinterion.c
index aefa46e1..b86c614c 100644
--- a/src/plugins/cinterion/mm-plugin-cinterion.c
+++ b/src/plugins/cinterion/mm-plugin-cinterion.c
@@ -204,6 +204,7 @@ grab_port (MMPlugin *self,
return mm_base_modem_grab_port (modem,
mm_port_probe_peek_port (probe),
+ mm_port_probe_get_port_group (probe),
ptype,
pflags,
error);
diff --git a/src/plugins/dell/mm-plugin-dell.c b/src/plugins/dell/mm-plugin-dell.c
index 17f257de..4a9e7817 100644
--- a/src/plugins/dell/mm-plugin-dell.c
+++ b/src/plugins/dell/mm-plugin-dell.c
@@ -493,6 +493,7 @@ grab_port (MMPlugin *self,
return mm_base_modem_grab_port (modem,
mm_port_probe_peek_port (probe),
+ mm_port_probe_get_port_group (probe),
mm_port_probe_get_port_type (probe),
MM_PORT_SERIAL_AT_FLAG_NONE,
error);
diff --git a/src/plugins/fibocom/mm-port-mbim-fibocom.c b/src/plugins/fibocom/mm-port-mbim-fibocom.c
index a5ec213b..02d9b6d4 100644
--- a/src/plugins/fibocom/mm-port-mbim-fibocom.c
+++ b/src/plugins/fibocom/mm-port-mbim-fibocom.c
@@ -241,6 +241,7 @@ mm_port_mbim_fibocom_new (const gchar *name,
return MM_PORT_MBIM_FIBOCOM (g_object_new (MM_TYPE_PORT_MBIM_FIBOCOM,
MM_PORT_DEVICE, name,
MM_PORT_SUBSYS, subsys,
+ MM_PORT_GROUP, MM_PORT_GROUP_USED,
MM_PORT_TYPE, MM_PORT_TYPE_MBIM,
NULL));
}
diff --git a/src/plugins/huawei/mm-plugin-huawei.c b/src/plugins/huawei/mm-plugin-huawei.c
index c59d0dfc..99bd9286 100644
--- a/src/plugins/huawei/mm-plugin-huawei.c
+++ b/src/plugins/huawei/mm-plugin-huawei.c
@@ -693,6 +693,7 @@ grab_port (MMPlugin *self,
return mm_base_modem_grab_port (modem,
port,
+ mm_port_probe_get_port_group (probe),
port_type,
pflags,
error);
diff --git a/src/plugins/option/mm-plugin-hso.c b/src/plugins/option/mm-plugin-hso.c
index 9200f047..1e0aba34 100644
--- a/src/plugins/option/mm-plugin-hso.c
+++ b/src/plugins/option/mm-plugin-hso.c
@@ -159,6 +159,7 @@ grab_port (MMPlugin *self,
return mm_base_modem_grab_port (modem,
mm_port_probe_peek_port (probe),
+ mm_port_probe_get_port_group (probe),
port_type,
pflags,
error);
diff --git a/src/plugins/option/mm-plugin-option.c b/src/plugins/option/mm-plugin-option.c
index e38d3832..d74f0037 100644
--- a/src/plugins/option/mm-plugin-option.c
+++ b/src/plugins/option/mm-plugin-option.c
@@ -81,6 +81,7 @@ grab_port (MMPlugin *self,
return mm_base_modem_grab_port (modem,
port,
+ mm_port_probe_get_port_group (probe),
MM_PORT_TYPE_AT, /* we only allow AT ports here */
pflags,
error);
diff --git a/src/plugins/pantech/mm-plugin-pantech.c b/src/plugins/pantech/mm-plugin-pantech.c
index 9004e358..c326eb35 100644
--- a/src/plugins/pantech/mm-plugin-pantech.c
+++ b/src/plugins/pantech/mm-plugin-pantech.c
@@ -123,6 +123,7 @@ grab_port (MMPlugin *self,
return mm_base_modem_grab_port (modem,
mm_port_probe_peek_port (probe),
+ mm_port_probe_get_port_group (probe),
ptype,
pflags,
error);
diff --git a/src/plugins/quectel/mm-port-mbim-quectel.c b/src/plugins/quectel/mm-port-mbim-quectel.c
index 617b681a..19470760 100644
--- a/src/plugins/quectel/mm-port-mbim-quectel.c
+++ b/src/plugins/quectel/mm-port-mbim-quectel.c
@@ -250,6 +250,7 @@ mm_port_mbim_quectel_new (const gchar *name,
return MM_PORT_MBIM_QUECTEL (g_object_new (MM_TYPE_PORT_MBIM_QUECTEL,
MM_PORT_DEVICE, name,
MM_PORT_SUBSYS, subsys,
+ MM_PORT_GROUP, MM_PORT_GROUP_USED,
MM_PORT_TYPE, MM_PORT_TYPE_MBIM,
NULL));
}
diff --git a/src/plugins/sierra/mm-common-sierra.c b/src/plugins/sierra/mm-common-sierra.c
index 74720ebe..58fef3cc 100644
--- a/src/plugins/sierra/mm-common-sierra.c
+++ b/src/plugins/sierra/mm-common-sierra.c
@@ -54,6 +54,7 @@ mm_common_sierra_grab_port (MMPlugin *self,
return mm_base_modem_grab_port (modem,
mm_port_probe_peek_port (probe),
+ mm_port_probe_get_port_group (probe),
ptype,
pflags,
error);
diff --git a/src/plugins/telit/mm-common-telit.c b/src/plugins/telit/mm-common-telit.c
index 10aba7a6..7f27aa44 100644
--- a/src/plugins/telit/mm-common-telit.c
+++ b/src/plugins/telit/mm-common-telit.c
@@ -42,11 +42,13 @@ telit_grab_port (MMPlugin *self,
{
MMKernelDevice *port;
MMDevice *device;
+ MMPortGroup pgroup;
MMPortType ptype;
MMPortSerialAtFlag pflags = MM_PORT_SERIAL_AT_FLAG_NONE;
const gchar *subsys;
port = mm_port_probe_peek_port (probe);
+ pgroup = mm_port_probe_get_port_group (probe);
ptype = mm_port_probe_get_port_type (probe);
device = mm_port_probe_peek_device (probe);
subsys = mm_port_probe_get_port_subsys (probe);
@@ -76,12 +78,13 @@ telit_grab_port (MMPlugin *self,
mm_port_probe_get_port_name (probe));
ptype = MM_PORT_TYPE_GPS;
} else
- ptype = MM_PORT_TYPE_IGNORED;
+ pgroup = MM_PORT_GROUP_IGNORED;
}
out:
return mm_base_modem_grab_port (modem,
port,
+ pgroup,
ptype,
pflags,
error);
diff --git a/src/plugins/zte/mm-plugin-zte.c b/src/plugins/zte/mm-plugin-zte.c
index 7b41ca8c..1c9ba0af 100644
--- a/src/plugins/zte/mm-plugin-zte.c
+++ b/src/plugins/zte/mm-plugin-zte.c
@@ -139,6 +139,7 @@ grab_port (MMPlugin *self,
return mm_base_modem_grab_port (modem,
port,
+ mm_port_probe_get_port_group (probe),
ptype,
MM_PORT_SERIAL_AT_FLAG_NONE,
error);