summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2013-11-19 23:59:57 +0100
committerAleksander Morgado <aleksander@aleksander.es>2014-02-13 13:41:03 +0100
commit0d0f5de161562df82a47bdc387b6ecb62e902719 (patch)
treef2ddd8f40d9f34f92361fc048a91bee1144958a2
parent2b46f658799e51d3db0ad61bbde45b3426622827 (diff)
base-modem: allow looking for a subset of the available ports
-rw-r--r--src/mm-base-modem.c32
-rw-r--r--src/mm-base-modem.h5
2 files changed, 37 insertions, 0 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c
index 734d0d05..193e7642 100644
--- a/src/mm-base-modem.c
+++ b/src/mm-base-modem.c
@@ -1030,6 +1030,38 @@ mm_base_modem_get_port_infos (MMBaseModem *self,
return port_infos;
}
+GList *
+mm_base_modem_find_ports (MMBaseModem *self,
+ MMPortSubsys subsys,
+ MMPortType type,
+ const gchar *name)
+{
+ GList *out = NULL;
+ GHashTableIter iter;
+ gpointer value;
+ gpointer key;
+
+ /* We'll iterate the ht of ports, looking for any port which is matches
+ * the compare function */
+ g_hash_table_iter_init (&iter, self->priv->ports);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ MMPort *port = MM_PORT (value);
+
+ if (subsys != MM_PORT_SUBSYS_UNKNOWN && mm_port_get_subsys (port) != subsys)
+ continue;
+
+ if (type != MM_PORT_TYPE_UNKNOWN && mm_port_get_port_type (port) != type)
+ continue;
+
+ if (name != NULL && !g_str_equal (mm_port_get_device (port), name))
+ continue;
+
+ out = g_list_append (out, g_object_ref (port));
+ }
+
+ return out;
+}
+
static void
initialize_ready (MMBaseModem *self,
GAsyncResult *res)
diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h
index 274694eb..8a25a6c4 100644
--- a/src/mm-base-modem.h
+++ b/src/mm-base-modem.h
@@ -161,6 +161,11 @@ GList *mm_base_modem_get_data_ports (MMBaseModem *self);
MMModemPortInfo *mm_base_modem_get_port_infos (MMBaseModem *self,
guint *n_port_infos);
+GList *mm_base_modem_find_ports (MMBaseModem *self,
+ MMPortSubsys subsys,
+ MMPortType type,
+ const gchar *name);
+
void mm_base_modem_set_hotplugged (MMBaseModem *self,
gboolean hotplugged);
gboolean mm_base_modem_get_hotplugged (MMBaseModem *self);