diff options
| author | Peter Hutterer <peter.hutterer@who-t.net> | 2013-06-03 13:59:06 +1000 |
|---|---|---|
| committer | Peter Hutterer <peter.hutterer@who-t.net> | 2013-06-03 15:25:13 +1000 |
| commit | 4318b73549506f88100c4c5a83edd718f0dea6d9 (patch) | |
| tree | a04bcc376299891684135c1715926c9c442beb3c /libevdev/libevdev.c | |
| parent | a98c9b3bee6eabcffb31bc6e0878b0209c436b09 (diff) | |
| download | libevdev-4318b73549506f88100c4c5a83edd718f0dea6d9.tar.gz | |
Expose phys/uniq to the caller
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'libevdev/libevdev.c')
| -rw-r--r-- | libevdev/libevdev.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c index 0bac662..0d4600b 100644 --- a/libevdev/libevdev.c +++ b/libevdev/libevdev.c @@ -180,6 +180,8 @@ libevdev_new_from_fd(int fd, struct libevdev **dev) void libevdev_free(struct libevdev *dev) { + free(dev->phys); + free(dev->uniq); queue_free(dev); free(dev); } @@ -204,6 +206,7 @@ libevdev_set_fd(struct libevdev* dev, int fd) { int rc; int i; + char buf[256]; if (dev->fd != -1) return -EBADF; @@ -216,6 +219,35 @@ libevdev_set_fd(struct libevdev* dev, int fd) if (rc < 0) goto out; + memset(buf, 0, sizeof(buf)); + rc = ioctl(fd, EVIOCGPHYS(sizeof(buf) - 1), buf); + if (rc < 0) { + /* uinput has no phys */ + if (errno != ENOENT) + goto out; + } else { + dev->phys = calloc(strlen(buf) + 1, sizeof(char)); + if (!dev->phys) { + errno = ENOSPC; + goto out; + } + strcpy(dev->phys, buf); + } + + memset(buf, 0, sizeof(buf)); + rc = ioctl(fd, EVIOCGUNIQ(sizeof(buf) - 1), buf); + if (rc < 0) { + if (errno != ENOENT) + goto out; + } else { + dev->uniq = calloc(strlen(buf) + 1, sizeof(char)); + if (!dev->uniq) { + errno = ENOSPC; + goto out; + } + strcpy(dev->uniq, buf); + } + rc = ioctl(fd, EVIOCGID, &dev->ids); if (rc < 0) goto out; @@ -588,6 +620,18 @@ libevdev_get_name(const struct libevdev *dev) return dev->name; } +const char * +libevdev_get_phys(const struct libevdev *dev) +{ + return dev->phys; +} + +const char * +libevdev_get_uniq(const struct libevdev *dev) +{ + return dev->uniq; +} + int libevdev_get_product_id(const struct libevdev *dev) { return dev->ids.product; |
