diff options
Diffstat (limited to 'src/udev/udev-builtin-input_id.c')
-rw-r--r-- | src/udev/udev-builtin-input_id.c | 89 |
1 files changed, 48 insertions, 41 deletions
diff --git a/src/udev/udev-builtin-input_id.c b/src/udev/udev-builtin-input_id.c index 295e8d2..6f75d9d 100644 --- a/src/udev/udev-builtin-input_id.c +++ b/src/udev/udev-builtin-input_id.c @@ -44,7 +44,7 @@ static int abs_size_mm(const struct input_absinfo *absinfo) { return (absinfo->maximum - absinfo->minimum) / absinfo->resolution; } -static void extract_info(sd_device *dev, bool test) { +static void extract_info(sd_device *dev, EventMode mode) { char width[DECIMAL_STR_MAX(int)], height[DECIMAL_STR_MAX(int)]; struct input_absinfo xabsinfo = {}, yabsinfo = {}; _cleanup_close_ int fd = -EBADF; @@ -63,8 +63,8 @@ static void extract_info(sd_device *dev, bool test) { xsprintf(width, "%d", abs_size_mm(&xabsinfo)); xsprintf(height, "%d", abs_size_mm(&yabsinfo)); - udev_builtin_add_property(dev, test, "ID_INPUT_WIDTH_MM", width); - udev_builtin_add_property(dev, test, "ID_INPUT_HEIGHT_MM", height); + udev_builtin_add_property(dev, mode, "ID_INPUT_WIDTH_MM", width); + udev_builtin_add_property(dev, mode, "ID_INPUT_HEIGHT_MM", height); } /* @@ -73,9 +73,13 @@ static void extract_info(sd_device *dev, bool test) { * @param attr sysfs attribute name (e. g. "capabilities/key") * @param bitmask: Output array which has a sizeof of bitmask_size */ -static void get_cap_mask(sd_device *pdev, const char* attr, - unsigned long *bitmask, size_t bitmask_size, - bool test) { +static void get_cap_mask( + sd_device *pdev, + const char* attr, + unsigned long *bitmask, + size_t bitmask_size, + EventMode mode) { + const char *v; char text[4096]; unsigned i; @@ -110,7 +114,7 @@ static void get_cap_mask(sd_device *pdev, const char* attr, else log_device_debug(pdev, "Ignoring %s block %lX which is larger than maximum size", attr, val); - if (test && DEBUG_LOGGING) { + if (mode == EVENT_UDEVADM_TEST_BUILTIN && DEBUG_LOGGING) { log_device_debug(pdev, "%s decoded bit map:", attr); val = bitmask_size / sizeof (unsigned long); @@ -144,14 +148,16 @@ static struct input_id get_input_id(sd_device *dev) { } /* pointer devices */ -static bool test_pointers(sd_device *dev, - const struct input_id *id, - const unsigned long* bitmask_ev, - const unsigned long* bitmask_abs, - const unsigned long* bitmask_key, - const unsigned long* bitmask_rel, - const unsigned long* bitmask_props, - bool test) { +static bool test_pointers( + sd_device *dev, + const struct input_id *id, + const unsigned long* bitmask_ev, + const unsigned long* bitmask_abs, + const unsigned long* bitmask_key, + const unsigned long* bitmask_rel, + const unsigned long* bitmask_props, + EventMode mode) { + bool has_abs_coordinates = false; bool has_rel_coordinates = false; bool has_mt_coordinates = false; @@ -186,7 +192,7 @@ static bool test_pointers(sd_device *dev, is_accelerometer = true; if (is_accelerometer) { - udev_builtin_add_property(dev, test, "ID_INPUT_ACCELEROMETER", "1"); + udev_builtin_add_property(dev, mode, "ID_INPUT_ACCELEROMETER", "1"); return true; } @@ -309,28 +315,29 @@ static bool test_pointers(sd_device *dev, } if (is_pointing_stick) - udev_builtin_add_property(dev, test, "ID_INPUT_POINTINGSTICK", "1"); + udev_builtin_add_property(dev, mode, "ID_INPUT_POINTINGSTICK", "1"); if (is_mouse || is_abs_mouse) - udev_builtin_add_property(dev, test, "ID_INPUT_MOUSE", "1"); + udev_builtin_add_property(dev, mode, "ID_INPUT_MOUSE", "1"); if (is_touchpad) - udev_builtin_add_property(dev, test, "ID_INPUT_TOUCHPAD", "1"); + udev_builtin_add_property(dev, mode, "ID_INPUT_TOUCHPAD", "1"); if (is_touchscreen) - udev_builtin_add_property(dev, test, "ID_INPUT_TOUCHSCREEN", "1"); + udev_builtin_add_property(dev, mode, "ID_INPUT_TOUCHSCREEN", "1"); if (is_joystick) - udev_builtin_add_property(dev, test, "ID_INPUT_JOYSTICK", "1"); + udev_builtin_add_property(dev, mode, "ID_INPUT_JOYSTICK", "1"); if (is_tablet) - udev_builtin_add_property(dev, test, "ID_INPUT_TABLET", "1"); + udev_builtin_add_property(dev, mode, "ID_INPUT_TABLET", "1"); if (is_tablet_pad) - udev_builtin_add_property(dev, test, "ID_INPUT_TABLET_PAD", "1"); + udev_builtin_add_property(dev, mode, "ID_INPUT_TABLET_PAD", "1"); return is_tablet || is_mouse || is_abs_mouse || is_touchpad || is_touchscreen || is_joystick || is_pointing_stick; } /* key like devices */ -static bool test_key(sd_device *dev, - const unsigned long* bitmask_ev, - const unsigned long* bitmask_key, - bool test) { +static bool test_key( + sd_device *dev, + const unsigned long* bitmask_ev, + const unsigned long* bitmask_key, + EventMode mode) { bool found = false; @@ -357,19 +364,19 @@ static bool test_key(sd_device *dev, } if (found) - udev_builtin_add_property(dev, test, "ID_INPUT_KEY", "1"); + udev_builtin_add_property(dev, mode, "ID_INPUT_KEY", "1"); /* the first 32 bits are ESC, numbers, and Q to D; if we have all of * those, consider it a full keyboard; do not test KEY_RESERVED, though */ if (FLAGS_SET(bitmask_key[0], 0xFFFFFFFE)) { - udev_builtin_add_property(dev, test, "ID_INPUT_KEYBOARD", "1"); + udev_builtin_add_property(dev, mode, "ID_INPUT_KEYBOARD", "1"); return true; } return found; } -static int builtin_input_id(UdevEvent *event, int argc, char *argv[], bool test) { +static int builtin_input_id(UdevEvent *event, int argc, char *argv[]) { sd_device *pdev, *dev = ASSERT_PTR(ASSERT_PTR(event)->dev); unsigned long bitmask_ev[NBITS(EV_MAX)]; unsigned long bitmask_abs[NBITS(ABS_MAX)]; @@ -400,28 +407,28 @@ static int builtin_input_id(UdevEvent *event, int argc, char *argv[], bool test) /* Use this as a flag that input devices were detected, so that this * program doesn't need to be called more than once per device */ - udev_builtin_add_property(dev, test, "ID_INPUT", "1"); - get_cap_mask(pdev, "capabilities/ev", bitmask_ev, sizeof(bitmask_ev), test); - get_cap_mask(pdev, "capabilities/abs", bitmask_abs, sizeof(bitmask_abs), test); - get_cap_mask(pdev, "capabilities/rel", bitmask_rel, sizeof(bitmask_rel), test); - get_cap_mask(pdev, "capabilities/key", bitmask_key, sizeof(bitmask_key), test); - get_cap_mask(pdev, "properties", bitmask_props, sizeof(bitmask_props), test); + udev_builtin_add_property(dev, event->event_mode, "ID_INPUT", "1"); + get_cap_mask(pdev, "capabilities/ev", bitmask_ev, sizeof(bitmask_ev), event->event_mode); + get_cap_mask(pdev, "capabilities/abs", bitmask_abs, sizeof(bitmask_abs), event->event_mode); + get_cap_mask(pdev, "capabilities/rel", bitmask_rel, sizeof(bitmask_rel), event->event_mode); + get_cap_mask(pdev, "capabilities/key", bitmask_key, sizeof(bitmask_key), event->event_mode); + get_cap_mask(pdev, "properties", bitmask_props, sizeof(bitmask_props), event->event_mode); is_pointer = test_pointers(dev, &id, bitmask_ev, bitmask_abs, bitmask_key, bitmask_rel, - bitmask_props, test); - is_key = test_key(dev, bitmask_ev, bitmask_key, test); + bitmask_props, event->event_mode); + is_key = test_key(dev, bitmask_ev, bitmask_key, event->event_mode); /* Some evdev nodes have only a scrollwheel */ if (!is_pointer && !is_key && test_bit(EV_REL, bitmask_ev) && (test_bit(REL_WHEEL, bitmask_rel) || test_bit(REL_HWHEEL, bitmask_rel))) - udev_builtin_add_property(dev, test, "ID_INPUT_KEY", "1"); + udev_builtin_add_property(dev, event->event_mode, "ID_INPUT_KEY", "1"); if (test_bit(EV_SW, bitmask_ev)) - udev_builtin_add_property(dev, test, "ID_INPUT_SWITCH", "1"); + udev_builtin_add_property(dev, event->event_mode, "ID_INPUT_SWITCH", "1"); } if (sd_device_get_sysname(dev, &sysname) >= 0 && startswith(sysname, "event")) - extract_info(dev, test); + extract_info(dev, event->event_mode); return 0; } |