diff options
Diffstat (limited to 'src/touch-caps.c')
| -rw-r--r-- | src/touch-caps.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/touch-caps.c b/src/touch-caps.c index a51912c..f99b0d7 100644 --- a/src/touch-caps.c +++ b/src/touch-caps.c | |||
| @@ -48,17 +48,25 @@ int touch_caps_is_supported(struct touch_dev *dev, int fd) | |||
| 48 | { | 48 | { |
| 49 | unsigned long keybits[nlongs(KEY_MAX)]; | 49 | unsigned long keybits[nlongs(KEY_MAX)]; |
| 50 | unsigned long absbits[nlongs(ABS_MAX)]; | 50 | unsigned long absbits[nlongs(ABS_MAX)]; |
| 51 | unsigned long relbits[nlongs(REL_CNT)]; | ||
| 51 | int rc; | 52 | int rc; |
| 52 | 53 | ||
| 53 | if (dev->mtdev.caps.has_mtdata) | ||
| 54 | return 1; | ||
| 55 | |||
| 56 | SYSCALL(rc = ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keybits)), keybits)); | 54 | SYSCALL(rc = ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keybits)), keybits)); |
| 57 | if (rc < 0) | 55 | if (rc < 0) |
| 58 | return 0; | 56 | return 0; |
| 59 | SYSCALL(rc = ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(absbits)), absbits)); | 57 | SYSCALL(rc = ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(absbits)), absbits)); |
| 60 | if (rc < 0) | 58 | if (rc < 0) |
| 61 | return 0; | 59 | return 0; |
| 60 | SYSCALL(rc = ioctl(fd, EVIOCGBIT(EV_REL, sizeof(relbits)), relbits)); | ||
| 61 | if (rc < 0) | ||
| 62 | return 0; | ||
| 63 | |||
| 64 | /* only support pure absolute devices at this time */ | ||
| 65 | if (getbit(relbits, REL_X) || getbit(relbits, REL_Y)) | ||
| 66 | return 0; | ||
| 67 | |||
| 68 | if (dev->mtdev.caps.has_mtdata) | ||
| 69 | return 1; | ||
| 62 | 70 | ||
| 63 | return getbit(absbits, ABS_X) && | 71 | return getbit(absbits, ABS_X) && |
| 64 | getbit(absbits, ABS_Y) && | 72 | getbit(absbits, ABS_Y) && |
