diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2014-06-22 17:29:50 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2014-06-23 18:12:27 +0200 |
commit | 7c347aa3ec1d5540c23c20dcb5edd3c6ccb28c24 (patch) | |
tree | d60adda1f391e4ae112f057853d7f07426ad5f89 | |
parent | 7752c9920d83059836d010a61e44daa4232c4c65 (diff) |
port: store parent sysfs path in each MMPort
-rw-r--r-- | plugins/cinterion/mm-plugin-cinterion.c | 1 | ||||
-rw-r--r-- | plugins/huawei/mm-plugin-huawei.c | 1 | ||||
-rw-r--r-- | plugins/longcheer/mm-plugin-longcheer.c | 1 | ||||
-rw-r--r-- | plugins/mtk/mm-plugin-mtk.c | 3 | ||||
-rw-r--r-- | plugins/nokia/mm-plugin-nokia-icera.c | 1 | ||||
-rw-r--r-- | plugins/option/mm-plugin-hso.c | 6 | ||||
-rw-r--r-- | plugins/option/mm-plugin-option.c | 1 | ||||
-rw-r--r-- | plugins/pantech/mm-plugin-pantech.c | 1 | ||||
-rw-r--r-- | plugins/sierra/mm-plugin-sierra.c | 1 | ||||
-rw-r--r-- | plugins/simtech/mm-plugin-simtech.c | 1 | ||||
-rw-r--r-- | plugins/telit/mm-plugin-telit.c | 1 | ||||
-rw-r--r-- | plugins/x22x/mm-plugin-x22x.c | 1 | ||||
-rw-r--r-- | plugins/zte/mm-plugin-zte.c | 1 | ||||
-rw-r--r-- | src/mm-base-modem.c | 6 | ||||
-rw-r--r-- | src/mm-base-modem.h | 1 | ||||
-rw-r--r-- | src/mm-plugin.c | 2 | ||||
-rw-r--r-- | src/mm-port-probe.c | 11 | ||||
-rw-r--r-- | src/mm-port-probe.h | 1 | ||||
-rw-r--r-- | src/mm-port.c | 28 | ||||
-rw-r--r-- | src/mm-port.h | 24 |
20 files changed, 75 insertions, 18 deletions
diff --git a/plugins/cinterion/mm-plugin-cinterion.c b/plugins/cinterion/mm-plugin-cinterion.c index 7a04fdaa..1d53155c 100644 --- a/plugins/cinterion/mm-plugin-cinterion.c +++ b/plugins/cinterion/mm-plugin-cinterion.c @@ -174,6 +174,7 @@ grab_port (MMPlugin *self, return mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), mm_port_probe_get_port_name (probe), + mm_port_probe_get_parent_path (probe), ptype, pflags, error); diff --git a/plugins/huawei/mm-plugin-huawei.c b/plugins/huawei/mm-plugin-huawei.c index 17a74040..26191a61 100644 --- a/plugins/huawei/mm-plugin-huawei.c +++ b/plugins/huawei/mm-plugin-huawei.c @@ -548,6 +548,7 @@ grab_port (MMPlugin *self, return mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), mm_port_probe_get_port_name (probe), + mm_port_probe_get_parent_path (probe), mm_port_probe_get_port_type (probe), pflags, error); diff --git a/plugins/longcheer/mm-plugin-longcheer.c b/plugins/longcheer/mm-plugin-longcheer.c index d9217b79..37d22e7b 100644 --- a/plugins/longcheer/mm-plugin-longcheer.c +++ b/plugins/longcheer/mm-plugin-longcheer.c @@ -238,6 +238,7 @@ grab_port (MMPlugin *self, return mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), mm_port_probe_get_port_name (probe), + mm_port_probe_get_parent_path (probe), ptype, pflags, error); diff --git a/plugins/mtk/mm-plugin-mtk.c b/plugins/mtk/mm-plugin-mtk.c index 5c194f09..d734c8a3 100644 --- a/plugins/mtk/mm-plugin-mtk.c +++ b/plugins/mtk/mm-plugin-mtk.c @@ -79,7 +79,8 @@ grab_port (MMPlugin *self, return mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), mm_port_probe_get_port_name (probe), - mm_port_probe_get_port_type(probe), + mm_port_probe_get_parent_path (probe), + mm_port_probe_get_port_type (probe), pflags, error); } diff --git a/plugins/nokia/mm-plugin-nokia-icera.c b/plugins/nokia/mm-plugin-nokia-icera.c index 94cdf6e8..3ee1e473 100644 --- a/plugins/nokia/mm-plugin-nokia-icera.c +++ b/plugins/nokia/mm-plugin-nokia-icera.c @@ -86,6 +86,7 @@ grab_port (MMPlugin *self, return mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), mm_port_probe_get_port_name (probe), + mm_port_probe_get_parent_path (probe), mm_port_probe_get_port_type (probe), pflags, error); diff --git a/plugins/option/mm-plugin-hso.c b/plugins/option/mm-plugin-hso.c index 1ea0aa28..1cc2bd7b 100644 --- a/plugins/option/mm-plugin-hso.c +++ b/plugins/option/mm-plugin-hso.c @@ -134,12 +134,11 @@ grab_port (MMPlugin *self, MMPortProbe *probe, GError **error) { - const gchar *name, *subsys; + const gchar *subsys; MMPortSerialAtFlag pflags = MM_PORT_SERIAL_AT_FLAG_NONE; MMPortType port_type; 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); /* Detect AT port types */ @@ -161,7 +160,8 @@ grab_port (MMPlugin *self, return mm_base_modem_grab_port (modem, subsys, - name, + mm_port_probe_get_port_name (probe), + mm_port_probe_get_parent_path (probe), port_type, pflags, error); diff --git a/plugins/option/mm-plugin-option.c b/plugins/option/mm-plugin-option.c index aa6ddc3e..010e597b 100644 --- a/plugins/option/mm-plugin-option.c +++ b/plugins/option/mm-plugin-option.c @@ -80,6 +80,7 @@ grab_port (MMPlugin *self, return mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), mm_port_probe_get_port_name (probe), + mm_port_probe_get_parent_path (probe), MM_PORT_TYPE_AT, /* we only allow AT ports here */ pflags, error); diff --git a/plugins/pantech/mm-plugin-pantech.c b/plugins/pantech/mm-plugin-pantech.c index 00d4794c..788a45d0 100644 --- a/plugins/pantech/mm-plugin-pantech.c +++ b/plugins/pantech/mm-plugin-pantech.c @@ -121,6 +121,7 @@ grab_port (MMPlugin *self, return mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), mm_port_probe_get_port_name (probe), + mm_port_probe_get_parent_path (probe), ptype, pflags, error); diff --git a/plugins/sierra/mm-plugin-sierra.c b/plugins/sierra/mm-plugin-sierra.c index 6da74c3c..96f657af 100644 --- a/plugins/sierra/mm-plugin-sierra.c +++ b/plugins/sierra/mm-plugin-sierra.c @@ -295,6 +295,7 @@ grab_port (MMPlugin *self, return mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), mm_port_probe_get_port_name (probe), + mm_port_probe_get_parent_path (probe), ptype, pflags, error); diff --git a/plugins/simtech/mm-plugin-simtech.c b/plugins/simtech/mm-plugin-simtech.c index 95b8211e..a38942d3 100644 --- a/plugins/simtech/mm-plugin-simtech.c +++ b/plugins/simtech/mm-plugin-simtech.c @@ -99,6 +99,7 @@ grab_port (MMPlugin *self, return mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), mm_port_probe_get_port_name (probe), + mm_port_probe_get_parent_path (probe), ptype, pflags, error); diff --git a/plugins/telit/mm-plugin-telit.c b/plugins/telit/mm-plugin-telit.c index a3095d54..47830956 100644 --- a/plugins/telit/mm-plugin-telit.c +++ b/plugins/telit/mm-plugin-telit.c @@ -92,6 +92,7 @@ grab_port (MMPlugin *self, return mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), mm_port_probe_get_port_name (probe), + mm_port_probe_get_parent_path (probe), ptype, pflags, error); diff --git a/plugins/x22x/mm-plugin-x22x.c b/plugins/x22x/mm-plugin-x22x.c index 650109d0..db5f25b7 100644 --- a/plugins/x22x/mm-plugin-x22x.c +++ b/plugins/x22x/mm-plugin-x22x.c @@ -254,6 +254,7 @@ grab_port (MMPlugin *self, return mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), mm_port_probe_get_port_name (probe), + mm_port_probe_get_parent_path (probe), ptype, pflags, error); diff --git a/plugins/zte/mm-plugin-zte.c b/plugins/zte/mm-plugin-zte.c index f5ea2d40..fff1a4c3 100644 --- a/plugins/zte/mm-plugin-zte.c +++ b/plugins/zte/mm-plugin-zte.c @@ -151,6 +151,7 @@ grab_port (MMPlugin *self, return mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), mm_port_probe_get_port_name (probe), + mm_port_probe_get_parent_path (probe), ptype, pflags, error); diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c index 715dc258..76adb416 100644 --- a/src/mm-base-modem.c +++ b/src/mm-base-modem.c @@ -162,6 +162,7 @@ gboolean mm_base_modem_grab_port (MMBaseModem *self, const gchar *subsys, const gchar *name, + const gchar *parent_path, MMPortType ptype, MMPortSerialAtFlag at_pflags, GError **error) @@ -306,6 +307,11 @@ mm_base_modem_grab_port (MMBaseModem *self, * Note: 'key' and 'port' now owned by the HT. */ g_hash_table_insert (self->priv->ports, key, port); + /* Store parent path */ + g_object_set (port, + MM_PORT_PARENT_PATH, parent_path, + NULL); + return TRUE; } diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h index 8a25a6c4..c5f3788e 100644 --- a/src/mm-base-modem.h +++ b/src/mm-base-modem.h @@ -106,6 +106,7 @@ GType mm_base_modem_get_type (void); gboolean mm_base_modem_grab_port (MMBaseModem *self, const gchar *subsys, const gchar *name, + const gchar *parent_path, MMPortType ptype, MMPortSerialAtFlag at_pflags, GError **error); diff --git a/src/mm-plugin.c b/src/mm-plugin.c index 4a8031ec..1e9512af 100644 --- a/src/mm-plugin.c +++ b/src/mm-plugin.c @@ -909,6 +909,7 @@ mm_plugin_create_modem (MMPlugin *self, grabbed = mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), mm_port_probe_get_port_name (probe), + mm_port_probe_get_parent_path (probe), mm_port_probe_get_port_type (probe), MM_PORT_SERIAL_AT_FLAG_NONE, &inner_error); @@ -929,6 +930,7 @@ mm_plugin_create_modem (MMPlugin *self, if (!mm_base_modem_grab_port (modem, "virtual", virtual_ports[i], + NULL, MM_PORT_TYPE_AT, MM_PORT_SERIAL_AT_FLAG_NONE, &inner_error)) { diff --git a/src/mm-port-probe.c b/src/mm-port-probe.c index e4faca0b..b25663f5 100644 --- a/src/mm-port-probe.c +++ b/src/mm-port-probe.c @@ -123,6 +123,7 @@ struct _MMPortProbePrivate { /* Properties */ MMDevice *device; GUdevDevice *port; + GUdevDevice *parent; /* Probing results */ guint32 flags; @@ -1646,6 +1647,14 @@ mm_port_probe_get_port_subsys (MMPortProbe *self) return g_udev_device_get_subsystem (self->priv->port); } +const gchar * +mm_port_probe_get_parent_path (MMPortProbe *self) +{ + g_return_val_if_fail (MM_IS_PORT_PROBE (self), NULL); + + return (self->priv->parent ? g_udev_device_get_sysfs_path (self->priv->parent) : NULL); +} + /*****************************************************************************/ MMPortProbe * @@ -1682,6 +1691,7 @@ set_property (GObject *object, case PROP_PORT: /* construct only */ self->priv->port = g_value_dup_object (value); + self->priv->parent = g_udev_device_get_parent (self->priv->port); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -1732,6 +1742,7 @@ dispose (GObject *object) /* We didn't get a reference to the device */ self->priv->device = NULL; + g_clear_object (&self->priv->parent); g_clear_object (&self->priv->port); G_OBJECT_CLASS (mm_port_probe_parent_class)->dispose (object); diff --git a/src/mm-port-probe.h b/src/mm-port-probe.h index 454ea298..ea7c98da 100644 --- a/src/mm-port-probe.h +++ b/src/mm-port-probe.h @@ -87,6 +87,7 @@ GUdevDevice *mm_port_probe_peek_port (MMPortProbe *self); GUdevDevice *mm_port_probe_get_port (MMPortProbe *self); const gchar *mm_port_probe_get_port_name (MMPortProbe *self); const gchar *mm_port_probe_get_port_subsys (MMPortProbe *self); +const gchar *mm_port_probe_get_parent_path (MMPortProbe *self); /* Probing result setters */ void mm_port_probe_set_result_at (MMPortProbe *self, diff --git a/src/mm-port.c b/src/mm-port.c index 2ebad13c..0ee9a199 100644 --- a/src/mm-port.c +++ b/src/mm-port.c @@ -29,15 +29,17 @@ enum { PROP_SUBSYS, PROP_TYPE, PROP_CONNECTED, + PROP_PARENT_PATH, LAST_PROP }; struct _MMPortPrivate { - char *device; + gchar *device; MMPortSubsys subsys; MMPortType ptype; gboolean connected; + gchar *parent_path; }; /*****************************************************************************/ @@ -94,6 +96,14 @@ mm_port_set_connected (MMPort *self, gboolean connected) } } +const gchar * +mm_port_get_parent_path (MMPort *self) +{ + g_return_val_if_fail (MM_IS_PORT (self), NULL); + + return self->priv->parent_path; +} + /*****************************************************************************/ static void @@ -126,6 +136,10 @@ set_property (GObject *object, case PROP_CONNECTED: self->priv->connected = g_value_get_boolean (value); break; + case PROP_PARENT_PATH: + g_free (self->priv->parent_path); + self->priv->parent_path = g_value_dup_string (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -151,6 +165,9 @@ get_property (GObject *object, guint prop_id, case PROP_CONNECTED: g_value_set_boolean (value, self->priv->connected); break; + case PROP_PARENT_PATH: + g_value_set_string (value, self->priv->parent_path); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -163,6 +180,7 @@ finalize (GObject *object) MMPort *self = MM_PORT (object); g_free (self->priv->device); + g_free (self->priv->parent_path); G_OBJECT_CLASS (mm_port_parent_class)->finalize (object); } @@ -214,4 +232,12 @@ mm_port_class_init (MMPortClass *klass) "Is connected for data and not usable for control", FALSE, G_PARAM_READWRITE)); + + g_object_class_install_property + (object_class, PROP_PARENT_PATH, + g_param_spec_string (MM_PORT_PARENT_PATH, + "Parent path", + "sysfs path of the parent device", + NULL, + G_PARAM_READWRITE)); } diff --git a/src/mm-port.h b/src/mm-port.h index d99179ed..8ac6829a 100644 --- a/src/mm-port.h +++ b/src/mm-port.h @@ -49,10 +49,11 @@ typedef enum { /*< underscore_name=mm_port_type >*/ #define MM_IS_PORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MM_TYPE_PORT)) #define MM_PORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_PORT, MMPortClass)) -#define MM_PORT_DEVICE "device" -#define MM_PORT_SUBSYS "subsys" -#define MM_PORT_TYPE "type" -#define MM_PORT_CONNECTED "connected" +#define MM_PORT_DEVICE "device" +#define MM_PORT_SUBSYS "subsys" +#define MM_PORT_TYPE "type" +#define MM_PORT_CONNECTED "connected" +#define MM_PORT_PARENT_PATH "parent-path" typedef struct _MMPort MMPort; typedef struct _MMPortClass MMPortClass; @@ -69,14 +70,11 @@ struct _MMPortClass { GType mm_port_get_type (void); -const char * mm_port_get_device (MMPort *self); - -MMPortSubsys mm_port_get_subsys (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); +const gchar *mm_port_get_device (MMPort *self); +MMPortSubsys mm_port_get_subsys (MMPort *self); +MMPortType mm_port_get_port_type (MMPort *self); +const gchar *mm_port_get_parent_path (MMPort *self); +gboolean mm_port_get_connected (MMPort *self); +void mm_port_set_connected (MMPort *self, gboolean connected); #endif /* MM_PORT_H */ |