diff --git a/udev_device.c b/udev_device.c index cadcea1..f1728e8 100644 --- a/udev_device.c +++ b/udev_device.c @@ -391,8 +391,6 @@ static void udev_device_set_properties_from_evdev(struct udev_device *udev_devic key_cnt = populate_bit(key_bits, udev_device_get_property_value(parent, "KEY")); prop_cnt = populate_bit(prop_bits, udev_device_get_property_value(parent, "PROP")); - // TODO iterate over KEY_* to find ID_INPUT_KEY or use exclusion method - udev_list_entry_add(&udev_device->properties, "ID_INPUT", "1", 0); if (find_bit(prop_bits, prop_cnt, INPUT_PROP_POINTING_STICK)) { @@ -400,31 +398,20 @@ static void udev_device_set_properties_from_evdev(struct udev_device *udev_devic } if (find_bit(prop_bits, prop_cnt, INPUT_PROP_ACCELEROMETER) || - (find_bit(ev_bits, ev_cnt, EV_ABS) && !find_bit(ev_bits, ev_cnt, EV_KEY) && - find_bit(abs_bits, abs_cnt, ABS_Y) && find_bit(abs_bits, abs_cnt, ABS_X) && - find_bit(abs_bits, abs_cnt, ABS_Z))) { + (find_bit(abs_bits, abs_cnt, ABS_Z) && !find_bit(ev_bits, ev_cnt, EV_KEY) && + find_bit(abs_bits, abs_cnt, ABS_Y) && find_bit(abs_bits, abs_cnt, ABS_X))) { udev_list_entry_add(&udev_device->properties, "ID_INPUT_ACCELEROMETER", "1", 0); } if (find_bit(ev_bits, ev_cnt, EV_SW)) { - if (find_bit(ev_bits, ev_cnt, EV_KEY)) { - udev_list_entry_add(&udev_device->properties, "ID_INPUT_KEY", "1", 0); - } - udev_list_entry_add(&udev_device->properties, "ID_INPUT_SWITCH", "1", 0); } - if (find_bit(ev_bits, ev_cnt, EV_KEY) && find_bit(key_bits, key_cnt, KEY_ENTER)) { - udev_list_entry_add(&udev_device->properties, "ID_INPUT_KEY", "1", 0); - udev_list_entry_add(&udev_device->properties, "ID_INPUT_KEYBOARD", "1", 0); - } - if (find_bit(ev_bits, ev_cnt, EV_REL) && find_bit(rel_bits, rel_cnt, REL_Y) && find_bit(rel_bits, rel_cnt, REL_X) && find_bit(key_bits, key_cnt, BTN_MOUSE)) { udev_list_entry_add(&udev_device->properties, "ID_INPUT_MOUSE", "1", 0); } - - if (find_bit(ev_bits, ev_cnt, EV_ABS) && find_bit(abs_bits, abs_cnt, ABS_Y) && find_bit(abs_bits, abs_cnt, ABS_X)) { + else if (find_bit(ev_bits, ev_cnt, EV_ABS) && find_bit(abs_bits, abs_cnt, ABS_Y) && find_bit(abs_bits, abs_cnt, ABS_X)) { if (find_bit(key_bits, key_cnt, BTN_STYLUS) || find_bit(key_bits, key_cnt, BTN_TOOL_PEN)) { udev_list_entry_add(&udev_device->properties, "ID_INPUT_TABLET", "1", 0); } @@ -440,6 +427,13 @@ static void udev_device_set_properties_from_evdev(struct udev_device *udev_devic udev_list_entry_add(&udev_device->properties, "ID_INPUT_MOUSE", "1", 0); } } + else if (find_bit(ev_bits, ev_cnt, EV_KEY)) { + udev_list_entry_add(&udev_device->properties, "ID_INPUT_KEY", "1", 0); + + if (find_bit(key_bits, key_cnt, KEY_ENTER)) { + udev_list_entry_add(&udev_device->properties, "ID_INPUT_KEYBOARD", "1", 0); + } + } } struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char *syspath)