mirror of
https://gitlab.freedesktop.org/upower/upower.git
synced 2026-05-08 17:08:30 +02:00
Locate non-unifying receiver by looking for hidraw with hiddev exposed.
For non unifying receiver we were trying to locate receiver hiddraw device by looking into INTERFACES property. This doesn't work well for non-unifying devices from keyboard+mouse sets (which use single dongle for 2 devices but are still non-unifying). The only thing that's different between hiddraw receiver and other devices (mouse, keyboard etc) is that receiver also exposes hiddev interface. Use that fact to reliably locate receiver. Signed-off-by: Arkadiusz Miśkiewicz <arekm@maven.pl> Signed-off-by: Richard Hughes <richard@hughsie.com>
This commit is contained in:
parent
d4bec29c82
commit
09fa9d5463
1 changed files with 23 additions and 2 deletions
|
|
@ -183,11 +183,32 @@ up_device_unifying_coldplug (UpDevice *device)
|
|||
hidraw_list = g_udev_client_query_by_subsystem (client, "hidraw");
|
||||
for (l = hidraw_list; l != NULL; l = l->next) {
|
||||
if (g_strcmp0 (type, "lg-wireless") == 0) {
|
||||
gboolean receiver_found = FALSE;
|
||||
const gchar *filename;
|
||||
GDir* dir;
|
||||
|
||||
if (g_strcmp0 (g_udev_device_get_sysfs_path (native),
|
||||
g_udev_device_get_sysfs_path(g_udev_device_get_parent(l->data))) != 0)
|
||||
continue;
|
||||
// Ugly way to distinguish receiver itself from mouse/keyboard etc for non-unifying dongles
|
||||
if (g_strcmp0(g_udev_device_get_property(g_udev_device_get_parent (native), "INTERFACE"), "3/0/0") != 0)
|
||||
|
||||
/* hidraw device which exposes hiddev interface is our receiver */
|
||||
tmp = g_build_filename(g_udev_device_get_sysfs_path (g_udev_device_get_parent(native)),
|
||||
"usbmisc", NULL);
|
||||
dir = g_dir_open (tmp, 0, &error);
|
||||
g_free(tmp);
|
||||
if (error) {
|
||||
g_clear_error(&error);
|
||||
continue;
|
||||
}
|
||||
while ( (filename = g_dir_read_name(dir)) ) {
|
||||
if (g_ascii_strncasecmp(filename, "hiddev", 6) == 0) {
|
||||
receiver_found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
g_dir_close(dir);
|
||||
|
||||
if (!receiver_found)
|
||||
continue;
|
||||
} else {
|
||||
if (g_strcmp0 (g_udev_device_get_sysfs_path (parent),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue