device: signal grabbed/released ports

This commit is contained in:
Aleksander Morgado
2012-07-10 07:09:36 +02:00
parent 72ffa7a1e5
commit 66ec5cd724
2 changed files with 41 additions and 6 deletions

View File

@@ -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);
}

View File

@@ -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);