device: signal grabbed/released ports
This commit is contained in:
@@ -36,7 +36,14 @@ enum {
|
|||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
SIGNAL_PORT_GRABBED,
|
||||||
|
SIGNAL_PORT_RELEASED,
|
||||||
|
SIGNAL_LAST
|
||||||
|
};
|
||||||
|
|
||||||
static GParamSpec *properties[PROP_LAST];
|
static GParamSpec *properties[PROP_LAST];
|
||||||
|
static guint signals[SIGNAL_LAST];
|
||||||
|
|
||||||
struct _MMDevicePrivate {
|
struct _MMDevicePrivate {
|
||||||
/* Parent UDev device */
|
/* Parent UDev device */
|
||||||
@@ -118,15 +125,13 @@ mm_device_grab_port (MMDevice *self,
|
|||||||
(GCompareFunc)udev_port_cmp)) {
|
(GCompareFunc)udev_port_cmp)) {
|
||||||
|
|
||||||
/* Get the driver name out of the first port grabbed */
|
/* 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);
|
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,
|
self->priv->udev_ports = g_list_prepend (self->priv->udev_ports,
|
||||||
g_object_ref (udev_port));
|
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,
|
udev_port,
|
||||||
(GCompareFunc)udev_port_cmp);
|
(GCompareFunc)udev_port_cmp);
|
||||||
if (found) {
|
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);
|
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,
|
MM_TYPE_BASE_MODEM,
|
||||||
G_PARAM_READWRITE);
|
G_PARAM_READWRITE);
|
||||||
g_object_class_install_property (object_class, PROP_MODEM, properties[PROP_MODEM]);
|
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);
|
||||||
}
|
}
|
||||||
|
@@ -38,6 +38,9 @@ typedef struct _MMDevicePrivate MMDevicePrivate;
|
|||||||
#define MM_DEVICE_PLUGIN "plugin"
|
#define MM_DEVICE_PLUGIN "plugin"
|
||||||
#define MM_DEVICE_MODEM "modem"
|
#define MM_DEVICE_MODEM "modem"
|
||||||
|
|
||||||
|
#define MM_DEVICE_PORT_GRABBED "port-grabbed"
|
||||||
|
#define MM_DEVICE_PORT_RELEASED "port-released"
|
||||||
|
|
||||||
struct _MMDevice {
|
struct _MMDevice {
|
||||||
GObject parent;
|
GObject parent;
|
||||||
MMDevicePrivate *priv;
|
MMDevicePrivate *priv;
|
||||||
@@ -45,6 +48,12 @@ struct _MMDevice {
|
|||||||
|
|
||||||
struct _MMDeviceClass {
|
struct _MMDeviceClass {
|
||||||
GObjectClass parent;
|
GObjectClass parent;
|
||||||
|
|
||||||
|
/* signals */
|
||||||
|
void (* port_grabbed) (MMDevice *self,
|
||||||
|
GUdevDevice *port);
|
||||||
|
void (* port_released) (MMDevice *self,
|
||||||
|
GUdevDevice *port);
|
||||||
};
|
};
|
||||||
|
|
||||||
GType mm_device_get_type (void);
|
GType mm_device_get_type (void);
|
||||||
|
Reference in New Issue
Block a user