diff options
-rw-r--r-- | src/qmi-firmware-update/qfu-device-selection.c | 8 | ||||
-rw-r--r-- | src/qmi-firmware-update/qfu-udev-helpers.c | 47 | ||||
-rw-r--r-- | src/qmi-firmware-update/qfu-udev-helpers.h | 4 |
3 files changed, 56 insertions, 3 deletions
diff --git a/src/qmi-firmware-update/qfu-device-selection.c b/src/qmi-firmware-update/qfu-device-selection.c index bc2d920..136840b 100644 --- a/src/qmi-firmware-update/qfu-device-selection.c +++ b/src/qmi-firmware-update/qfu-device-selection.c @@ -41,6 +41,8 @@ struct _QfuDeviceSelectionPrivate { guint preferred_devnum; /* sysfs path */ gchar *sysfs_path; + /* generic udev monitor */ + QfuUdevHelperGenericMonitor *monitor; }; /******************************************************************************/ @@ -270,6 +272,9 @@ qfu_device_selection_new (const gchar *preferred_cdc_wdm, return NULL; } + /* Initialize right away the generic udev monitor for this sysfs path */ + self->priv->monitor = qfu_udev_helper_generic_monitor_new (self->priv->sysfs_path); + return self; } @@ -285,6 +290,9 @@ finalize (GObject *object) QfuDeviceSelection *self = QFU_DEVICE_SELECTION (object); guint i; + if (self->priv->monitor) + qfu_udev_helper_generic_monitor_free (self->priv->monitor); + for (i = 0; i < QFU_UDEV_HELPER_DEVICE_TYPE_LAST; i++) g_free (self->priv->preferred_devices[i]); g_free (self->priv->sysfs_path); diff --git a/src/qmi-firmware-update/qfu-udev-helpers.c b/src/qmi-firmware-update/qfu-udev-helpers.c index 33c4b15..c789703 100644 --- a/src/qmi-firmware-update/qfu-udev-helpers.c +++ b/src/qmi-firmware-update/qfu-udev-helpers.c @@ -495,8 +495,6 @@ handle_uevent (GUdevClient *client, ctx = (WaitForDeviceContext *) g_task_get_task_data (task); - g_debug ("[qfu-udev] event: %s %s", action, g_udev_device_get_name (device)); - if (!g_str_equal (action, "add") && !g_str_equal (action, "move") && !g_str_equal (action, "change")) return; @@ -504,7 +502,9 @@ handle_uevent (GUdevClient *client, if (!file) return; - g_debug ("[qfu-udev] waiting device matched"); + g_debug ("[qfu-udev] waiting device (%s) matched: %s", + qfu_udev_helper_device_type_to_string (ctx->device_type), + g_udev_device_get_name (device)); /* Disconnect this handler */ g_signal_handler_disconnect (ctx->udev, ctx->uevent_id); @@ -609,3 +609,44 @@ qfu_udev_helper_wait_for_device (QfuUdevHelperDeviceType device_type, /* Note: task ownership is shared between the signals and the timeout */ } + +/******************************************************************************/ + +struct _QfuUdevHelperGenericMonitor { + GUdevClient *udev; +}; + +void +qfu_udev_helper_generic_monitor_free (QfuUdevHelperGenericMonitor *self) +{ + g_object_unref (self->udev); + g_slice_free (QfuUdevHelperGenericMonitor, self); +} + +static void +handle_uevent_generic (GUdevClient *client, + const char *action, + GUdevDevice *device, + GTask *task) +{ + g_debug ("[qfu-udev] event: %s %s", action, g_udev_device_get_name (device)); +} + +QfuUdevHelperGenericMonitor * +qfu_udev_helper_generic_monitor_new (const gchar *sysfs_path) +{ + static const gchar *all_list[] = { + "usbmisc", "usb", + "tty", + "net", + NULL }; + + QfuUdevHelperGenericMonitor *self; + + self = g_slice_new0 (QfuUdevHelperGenericMonitor); + self->udev = g_udev_client_new (all_list); + + /* Monitor for device events. */ + g_signal_connect (self->udev, "uevent", G_CALLBACK (handle_uevent_generic), NULL); + return self; +} diff --git a/src/qmi-firmware-update/qfu-udev-helpers.h b/src/qmi-firmware-update/qfu-udev-helpers.h index 1d3672e..dad818e 100644 --- a/src/qmi-firmware-update/qfu-udev-helpers.h +++ b/src/qmi-firmware-update/qfu-udev-helpers.h @@ -56,6 +56,10 @@ void qfu_udev_helper_wait_for_device (QfuUdevHelperDeviceType device_ GFile *qfu_udev_helper_wait_for_device_finish (GAsyncResult *res, GError **error); +typedef struct _QfuUdevHelperGenericMonitor QfuUdevHelperGenericMonitor; +QfuUdevHelperGenericMonitor *qfu_udev_helper_generic_monitor_new (const gchar *sysfs_path); +void qfu_udev_helper_generic_monitor_free (QfuUdevHelperGenericMonitor *self); + G_END_DECLS #endif /* QFU_UDEV_HELPERS_H */ |