diff options
author | Jari Vetoniemi <mailroxas@gmail.com> | 2018-07-04 21:55:33 +0300 |
---|---|---|
committer | Jari Vetoniemi <mailroxas@gmail.com> | 2018-07-04 21:55:33 +0300 |
commit | 50e141583247e6409151fcc540729c229a3022a4 (patch) | |
tree | 196c1935d78bebcb6c637d2771e1a18a6eb9374f | |
parent | 6df9eee5f76cbc4acad268b1da95a8833be2d34a (diff) |
linux: grab abs info while iterating the abs bits
-rw-r--r-- | clients/linux/linux-uinput.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/clients/linux/linux-uinput.c b/clients/linux/linux-uinput.c index d585e2f..0b6e901 100644 --- a/clients/linux/linux-uinput.c +++ b/clients/linux/linux-uinput.c @@ -181,6 +181,8 @@ core_init(struct core *core, const char *path) } } + struct uinput_user_dev setup = {0}; + if ((evbit & (1 << EV_ABS))) { int keybit; if (_ioctl(core->input, EVIOCGBIT(EV_ABS, sizeof(keybit)), &keybit) == -1) @@ -192,25 +194,21 @@ core_init(struct core *core, const char *path) if (!uinputd_ioctl_int(IOCTL_IOW, UINPUT_IOCTL_BASE, 103, i)) errx(EXIT_FAILURE, "ioctl(UI_SET_ABSBIT): %d", i); + + struct input_absinfo info; + if (_ioctl(core->input, EVIOCGABS(i), &info) == -1) + err(EXIT_FAILURE, "ioctl(EVIOCGABS)"); + + setup.absmax[i] = info.maximum; + setup.absmin[i] = info.minimum; + setup.absfuzz[i] = info.fuzz; + setup.absflat[i] = info.flat; } } - struct uinput_user_dev setup = {0}; - if (_ioctl(core->input, EVIOCGNAME(sizeof(setup.name)), setup.name) == -1) err(EXIT_FAILURE, "ioctl(EVIOCGNAME)"); - for (size_t i = 0; (evbit & (1 << EV_ABS)) && i < ABS_MAX; ++i) { - struct input_absinfo info; - if (_ioctl(core->input, EVIOCGABS(i), &info) == -1) - err(EXIT_FAILURE, "ioctl(EVIOCGABS)"); - - setup.absmax[i] = info.maximum; - setup.absmin[i] = info.minimum; - setup.absfuzz[i] = info.fuzz; - setup.absflat[i] = info.flat; - } - if (_ioctl(core->input, EVIOCGID, &setup.id) == -1) err(EXIT_FAILURE, "ioctl(EVIOCGID)"); |