diff options
author | Lukas Voegl <lvoegl@tdt.de> | 2024-11-22 15:53:33 +0100 |
---|---|---|
committer | Lukas Voegl <lvoegl@tdt.de> | 2025-04-25 09:37:16 +0200 |
commit | 436081648b3587096683bd3ba4d219d16f14efb5 (patch) | |
tree | 4d134aeef271bd970c527dadfd611d05fec9903c /src | |
parent | 39123f964ba6f359987f22d89317a842d8f1d528 (diff) |
api,modem: new 'IgnoredPorts' property
Expose a new list of 'IgnoredPorts' via D-Bus and therefore remove the use of `MM_MODEM_PORT_TYPE_IGNORED`
Signed-off-by: Lukas Voegl <lvoegl@tdt.de>
Diffstat (limited to 'src')
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); |