diff --git a/src/evdev.c b/src/evdev.c index c3c02d2a..ef773e6a 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -1991,7 +1991,7 @@ evdev_notify_added_device(struct evdev_device *device) static bool evdev_device_have_same_syspath(struct udev_device *udev_device, int fd) { - struct udev *udev = udev_device_get_udev(udev_device); + struct udev *udev = udev_device_get_udev(udev_device); struct udev_device *udev_device_new = NULL; struct stat st; bool rc = false; @@ -1999,9 +1999,13 @@ evdev_device_have_same_syspath(struct udev_device *udev_device, int fd) if (fstat(fd, &st) < 0) goto out; + printf("st_rdev: %d\n", st.st_rdev); udev_device_new = udev_device_new_from_devnum(udev, 'c', st.st_rdev); if (!udev_device_new) goto out; + + printf("same syspath: %s %s\n", udev_device_get_syspath(udev_device_new), + udev_device_get_syspath(udev_device)); rc = streq(udev_device_get_syspath(udev_device_new), udev_device_get_syspath(udev_device)); @@ -2174,6 +2178,8 @@ evdev_device_create(struct libinput_seat *seat, return NULL; } + log_error(libinput, "%s: evdev_device_create\n", sysname); + if (udev_device_should_be_ignored(udev_device)) { log_debug(libinput, "%s: device is ignored\n", sysname); return NULL; @@ -2182,7 +2188,8 @@ evdev_device_create(struct libinput_seat *seat, /* Use non-blocking mode so that we can loop on read on * evdev_device_data() until all events on the fd are * read. mtdev_get() also expects this. */ - fd = open_restricted(libinput, devnode, + //fd = open_restricted(libinput, devnode, + fd = open(devnode, O_RDWR | O_NONBLOCK | O_CLOEXEC); if (fd < 0) { log_info(libinput, @@ -2193,8 +2200,11 @@ evdev_device_create(struct libinput_seat *seat, return NULL; } - if (!evdev_device_have_same_syspath(udev_device, fd)) + printf("Opened fd: %d from devnode %s\n", fd, devnode); + if (!evdev_device_have_same_syspath(udev_device, fd)){ + log_error(libinput, "%s: not same syspath\n", sysname); goto err; + } device = zalloc(sizeof *device); @@ -2204,8 +2214,10 @@ evdev_device_create(struct libinput_seat *seat, evdev_drain_fd(fd); rc = libevdev_new_from_fd(fd, &device->evdev); - if (rc != 0) + if (rc != 0){ + log_error(libinput, "%s: new_from_fd failed\n", sysname); goto err; + } libevdev_set_clock_id(device->evdev, CLOCK_MONOTONIC); libevdev_set_device_log_function(device->evdev, @@ -2241,16 +2253,22 @@ evdev_device_create(struct libinput_seat *seat, evdev_pre_configure_model_quirks(device); device->dispatch = evdev_configure_device(device); - if (device->dispatch == NULL || device->seat_caps == 0) + if (device->dispatch == NULL || device->seat_caps == 0){ + log_error(libinput, "%s: device->dispatch or device->seat_caps %d failed\n", sysname, device->seat_caps); goto err; + } device->source = libinput_add_fd(libinput, fd, evdev_device_dispatch, device); - if (!device->source) + if (!device->source){ + log_error(libinput, "%s: device->source failed\n", sysname); goto err; + } - if (!evdev_set_device_group(device, udev_device)) + if (!evdev_set_device_group(device, udev_device)){ + log_error(libinput, "%s: set device group failed\n", sysname); goto err; + } list_insert(seat->devices_list.prev, &device->base.link);