diff options
author | Mattias Andrée <maandree@kth.se> | 2022-07-25 13:23:08 +0200 |
---|---|---|
committer | Mattias Andrée <maandree@kth.se> | 2022-07-25 13:23:08 +0200 |
commit | edf5cfe55690b717ae16513519a6b5c3a7a222d0 (patch) | |
tree | 2c7ca59430ec9d1de382a3124a1d82dd901dc85a | |
parent | m + add force feedback support (diff) | |
download | libgamepad-edf5cfe55690b717ae16513519a6b5c3a7a222d0.tar.gz libgamepad-edf5cfe55690b717ae16513519a6b5c3a7a222d0.tar.bz2 libgamepad-edf5cfe55690b717ae16513519a6b5c3a7a222d0.tar.xz |
m
Signed-off-by: Mattias Andrée <maandree@kth.se>
-rw-r--r-- | TODO | 1 | ||||
-rw-r--r-- | libgamepad.h | 8 | ||||
-rw-r--r-- | libgamepad_open_device.c | 23 | ||||
-rw-r--r-- | test-details.c | 8 |
4 files changed, 24 insertions, 16 deletions
@@ -1,5 +1,4 @@ Add support for quirks -Add support for battery Add support for leds Add support for audio Add support for accelerometer diff --git a/libgamepad.h b/libgamepad.h index 665e012..5b6c46c 100644 --- a/libgamepad.h +++ b/libgamepad.h @@ -190,22 +190,22 @@ struct libgamepad_device { * Bus type the device is connect via, see BUS_-prefixed * constants in <linux/input.h> */ - int bus_type; + unsigned int bus_type; /** * Vendor ID for the device (sub- or superdevice) */ - int vendor; + unsigned int vendor; /** * Product ID for the device (sub- or superdevice) */ - int product; + unsigned int product; /** * Product version ID for the device (sub- or superdevice) */ - int version; + unsigned int version; /** * FOR INTERNAL USE diff --git a/libgamepad_open_device.c b/libgamepad_open_device.c index 87868cb..cce0133 100644 --- a/libgamepad_open_device.c +++ b/libgamepad_open_device.c @@ -8,6 +8,7 @@ libgamepad_open_device(struct libgamepad_device *devicep, int dirfd, const char int err; unsigned int i; uint16_t n; + struct input_id id; devicep->fd = dirfd; devicep->close_fd = 0; @@ -25,23 +26,31 @@ libgamepad_open_device(struct libgamepad_device *devicep, int dirfd, const char devicep->close_fd = 1; } - err = -libevdev_new_from_fd(devicep->fd, &devicep->dev); - if (err > 0) { + if (ioctl(devicep->fd, EVIOCGID, &id)) { if (devicep->close_fd) { close(devicep->fd); devicep->close_fd = 0; } - errno = err; + return -1; + } + + err = libevdev_new_from_fd(devicep->fd, &devicep->dev); + if (err < 0) { + if (devicep->close_fd) { + close(devicep->fd); + devicep->close_fd = 0; + } + errno = -err; return -1; } devicep->name = libevdev_get_name(devicep->dev); devicep->unique_id = libevdev_get_uniq(devicep->dev); devicep->physical_location = libevdev_get_phys(devicep->dev); - devicep->bus_type = libevdev_get_id_bustype(devicep->dev); - devicep->vendor = libevdev_get_id_vendor(devicep->dev); - devicep->product = libevdev_get_id_product(devicep->dev); - devicep->version = libevdev_get_id_version(devicep->dev); + devicep->bus_type = (unsigned int)id.bustype; + devicep->vendor = (unsigned int)id.vendor; + devicep->product = (unsigned int)id.product; + devicep->version = (unsigned int)id.version; devicep->nbuttons = 0; for (i = 0; i < KEY_CNT; i++) { diff --git a/test-details.c b/test-details.c index 6ccfbe6..420e007 100644 --- a/test-details.c +++ b/test-details.c @@ -24,10 +24,10 @@ main(int argc, char *argv[]) return 1; } - printf("Bus type: %i\n", gamepad.bus_type); - printf("Vendor: %i\n", gamepad.vendor); - printf("Product: %i\n", gamepad.product); - printf("Version: %i\n", gamepad.version); + printf("Bus type: %u\n", gamepad.bus_type); + printf("Vendor: %u\n", gamepad.vendor); + printf("Product: %u\n", gamepad.product); + printf("Version: %u\n", gamepad.version); printf("Name: %s\n", gamepad.name); printf("Unique id: %s\n", gamepad.unique_id); printf("Physical location: %s\n", gamepad.physical_location); |