diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2017-01-20 12:50:07 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2017-01-20 12:50:07 +0100 |
commit | 3e7cda53b1ce24e23f8355b75ff13b924dd72f6d (patch) | |
tree | e32be04c6cc39257f891ca8249a2c69e0cabe766 /src/qmi-firmware-update/qfu-udev-helpers.c | |
parent | 95f8b1d20f51be943bad3ec060bf92af2469ba93 (diff) | |
download | external_libqmi-3e7cda53b1ce24e23f8355b75ff13b924dd72f6d.zip external_libqmi-3e7cda53b1ce24e23f8355b75ff13b924dd72f6d.tar.gz external_libqmi-3e7cda53b1ce24e23f8355b75ff13b924dd72f6d.tar.bz2 |
qmi-firmware-update: new generic monitor to debug all udev events
As soon as we know the sysfs path of the device to use, we'll setup a
generic udev monitor for all tty, net and usb devices so that we get
notified of all their additions or removals. E.g. when going from normal
mode to QDL download mode:
[20 ene 2017, 12:49:26] [Debug] [qfu-udev] event: remove ttyUSB0
[20 ene 2017, 12:49:26] [Debug] [qfu-udev] event: remove ttyUSB1
[20 ene 2017, 12:49:26] [Debug] [qfu-udev] event: remove 4-1.4:1.0
[20 ene 2017, 12:49:26] [Debug] [qfu-udev] event: remove wwan0
[20 ene 2017, 12:49:26] [Debug] [qfu-udev] event: remove 4-1.4:1.2
[20 ene 2017, 12:49:26] [Debug] [qfu-udev] event: remove ttyUSB2
[20 ene 2017, 12:49:26] [Debug] [qfu-udev] event: remove 4-1.4:1.3
[20 ene 2017, 12:49:26] [Debug] [qfu-udev] event: remove cdc-wdm2
[20 ene 2017, 12:49:26] [Debug] [qfu-udev] event: remove 4-1.4:1.8
[20 ene 2017, 12:49:26] [Debug] [qfu-udev] event: remove wwan1
[20 ene 2017, 12:49:26] [Debug] [qfu-udev] event: remove cdc-wdm3
[20 ene 2017, 12:49:26] [Debug] [qfu-udev] event: remove 4-1.4:1.10
[20 ene 2017, 12:49:26] [Debug] [qfu-udev] event: remove 4-1.4
[20 ene 2017, 12:49:27] [Debug] [qfu-udev] event: add 4-1.4
[20 ene 2017, 12:49:27] [Debug] [qfu-udev] event: add 4-1.4:1.0
[20 ene 2017, 12:49:27] [Debug] [qfu-udev] event: add ttyUSB0
[20 ene 2017, 12:49:27] [Debug] [qfu-udev] waiting device (tty) matched: ttyUSB0
[20 ene 2017, 12:49:27] [Debug] [qfu-updater] TTY device found: /dev/ttyUSB0
Diffstat (limited to 'src/qmi-firmware-update/qfu-udev-helpers.c')
-rw-r--r-- | src/qmi-firmware-update/qfu-udev-helpers.c | 47 |
1 files changed, 44 insertions, 3 deletions
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; +} |