aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-07-10 07:09:36 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-08-06 20:06:44 +0200
commit66ec5cd724ca82d4b0ad538f0d196833e88624e5 (patch)
tree74de72b58369c7c24509a851b54d06b13252f53a /src
parent72ffa7a1e5e5cb45efa165d44467a32cf60fc52f (diff)
device: signal grabbed/released ports
Diffstat (limited to 'src')
-rw-r--r--src/mm-device.c38
-rw-r--r--src/mm-device.h9
2 files changed, 41 insertions, 6 deletions
diff --git a/src/mm-device.c b/src/mm-device.c
index 0fe8f205..531c6706 100644
--- a/src/mm-device.c
+++ b/src/mm-device.c
@@ -36,7 +36,14 @@ enum {
PROP_LAST
};
+enum {
+ SIGNAL_PORT_GRABBED,
+ SIGNAL_PORT_RELEASED,
+ SIGNAL_LAST
+};
+
static GParamSpec *properties[PROP_LAST];
+static guint signals[SIGNAL_LAST];
struct _MMDevicePrivate {
/* Parent UDev device */
@@ -118,15 +125,13 @@ mm_device_grab_port (MMDevice *self,
(GCompareFunc)udev_port_cmp)) {
/* Get the driver name out of the first port grabbed */
- if (!self->priv->udev_ports) {
+ if (!self->priv->udev_ports)
self->priv->driver = get_driver_name (udev_port);
- mm_dbg ("(%s) managed by driver '%s'",
- self->priv->udev_device_path,
- self->priv->driver);
- }
self->priv->udev_ports = g_list_prepend (self->priv->udev_ports,
g_object_ref (udev_port));
+
+ g_signal_emit (self, signals[SIGNAL_PORT_GRABBED], 0, udev_port);
}
}
@@ -140,8 +145,11 @@ mm_device_release_port (MMDevice *self,
udev_port,
(GCompareFunc)udev_port_cmp);
if (found) {
- g_object_unref (found->data);
+ GUdevDevice *found_port = found->data;
+
self->priv->udev_ports = g_list_delete_link (self->priv->udev_ports, found);
+ g_signal_emit (self, signals[SIGNAL_PORT_RELEASED], 0, found_port);
+ g_object_unref (found_port);
}
}
@@ -488,4 +496,22 @@ mm_device_class_init (MMDeviceClass *klass)
MM_TYPE_BASE_MODEM,
G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_MODEM, properties[PROP_MODEM]);
+
+ signals[SIGNAL_PORT_GRABBED] =
+ g_signal_new (MM_DEVICE_PORT_GRABBED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (MMDeviceClass, port_grabbed),
+ NULL, NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE, 1, G_UDEV_TYPE_DEVICE);
+
+ signals[SIGNAL_PORT_RELEASED] =
+ g_signal_new (MM_DEVICE_PORT_RELEASED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (MMDeviceClass, port_released),
+ NULL, NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE, 1, G_UDEV_TYPE_DEVICE);
}
diff --git a/src/mm-device.h b/src/mm-device.h
index f9997c06..0cdef2a4 100644
--- a/src/mm-device.h
+++ b/src/mm-device.h
@@ -38,6 +38,9 @@ typedef struct _MMDevicePrivate MMDevicePrivate;
#define MM_DEVICE_PLUGIN "plugin"
#define MM_DEVICE_MODEM "modem"
+#define MM_DEVICE_PORT_GRABBED "port-grabbed"
+#define MM_DEVICE_PORT_RELEASED "port-released"
+
struct _MMDevice {
GObject parent;
MMDevicePrivate *priv;
@@ -45,6 +48,12 @@ struct _MMDevice {
struct _MMDeviceClass {
GObjectClass parent;
+
+ /* signals */
+ void (* port_grabbed) (MMDevice *self,
+ GUdevDevice *port);
+ void (* port_released) (MMDevice *self,
+ GUdevDevice *port);
};
GType mm_device_get_type (void);