free (strv);
}
+struct key_value_str{
+ char *key;
+ char *value;
+};
+
struct key_value_double {
double key;
double value;
{ .value = -1 }
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"touchpad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"touchpad_end\"\n"
-"ENV{ID_INPUT_TOUCHPAD}==\"\", GOTO=\"touchpad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Chicony ACER Hawaii Keyboard Touchpad\","
-" ENV{ID_INPUT_TOUCHPAD_INTEGRATION}=\"external\"\n"
-"\n"
-"LABEL=\"touchpad_end\"";
-
TEST_DEVICE("hawaii-touchpad",
.type = LITEST_ACER_HAWAII_TOUCHPAD,
.features = LITEST_TOUCHPAD | LITEST_CLICKPAD | LITEST_BUTTON,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "ID_INPUT_TOUCHPAD_INTEGRATION", "external" },
+ { NULL },
+ }
)
{ .value = -1 }
};
-/* Force MOUSE_DPI to the empty string. As of systemd commit f013e99e160f
- * ID_BUS=bluetooth now triggers the hwdb entry for this device. This causes
- * test case failures because deltas change. Detecting old vs new systemd is
- * hard, and because our rules are 99-prefixed we can't set ID_BUS ourselves
- * on older systemd.
- * So let's go the easy way and unset MOUSE_DPI so we can continue to use
- * the current tests.
- */
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"mouse_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"mouse_end\"\n"
-"ENV{ID_INPUT_MOUSE}==\"\", GOTO=\"mouse_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Apple Magic Mouse\","
-" ENV{MOUSE_DPI}=\"\""
-"\n"
-"LABEL=\"mouse_end\"";
-
TEST_DEVICE("magicmouse",
.type = LITEST_MAGICMOUSE,
.features = LITEST_RELATIVE | LITEST_BUTTON | LITEST_WHEEL,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+
+ /* Force MOUSE_DPI to the empty string. As of systemd commit f013e99e160f
+ * ID_BUS=bluetooth now triggers the hwdb entry for this device. This causes
+ * test case failures because deltas change. Detecting old vs new systemd is
+ * hard, and because our rules are 99-prefixed we can't set ID_BUS ourselves
+ * on older systemd.
+ * So let's go the easy way and unset MOUSE_DPI so we can continue to use
+ * the current tests.
+ */
+ .udev_properties = {
+ { "MOUSE_DPI", "" },
+ { NULL },
+ },
)
-1, -1
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"calibrated_touchscreen_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"calibrated_touchscreen_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Calibrated Touchscreen*\",\\\n"
-" ENV{LIBINPUT_CALIBRATION_MATRIX}=\"1.2 3.4 5.6 7.8 9.10 11.12\",\\\n"
-" ENV{WL_OUTPUT}=\"myOutput\"\n"
-"\n"
-"LABEL=\"calibrated_touchscreen_end\"";
-
TEST_DEVICE("calibrated-touchscreen",
.type = LITEST_CALIBRATED_TOUCHSCREEN,
.features = LITEST_TOUCH,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "LIBINPUT_CALIBRATION_MATRIX", "1.2 3.4 5.6 7.8 9.10 11.12" },
+ { "WL_OUTPUT", "myOutput" },
+ { NULL }
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"totem_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"totem_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Advanced Silicon S.A. CoolTouch® System*\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"dell-canvas-totem-group\"\n"
-"\n"
-"LABEL=\"totem_end\"";
-
TEST_DEVICE("dell-canvas-totem-touch",
.type = LITEST_DELL_CANVAS_TOTEM_TOUCH,
.features = LITEST_TOUCH,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "LIBINPUT_DEVICE_GROUP", "dell-canvas-totem-group" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"totem_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"totem_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Advanced Silicon S.A. CoolTouch® System System Multi Axis*\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"dell-canvas-totem-group\"\n"
-"\n"
-"LABEL=\"totem_end\"";
-
TEST_DEVICE("dell-canvas-totem",
.type = LITEST_DELL_CANVAS_TOTEM,
.features = LITEST_TOTEM | LITEST_TABLET,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "LIBINPUT_DEVICE_GROUP", "dell-canvas-totem-group" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"switch_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"switch_end\"\n"
-"\n"
-"ATTRS{name}==\"litest gpio-keys*\",\\\n"
-" ENV{ID_INPUT_SWITCH}=\"1\"\n"
-"\n"
-"LABEL=\"switch_end\"";
-
static const char quirk_file[] =
"[litest gpio quirk]\n"
"MatchName=litest gpio-keys\n"
.events = events,
.absinfo = NULL,
- .udev_rule = udev_rule,
.quirk_file = quirk_file,
+ .udev_properties = {
+ { "ID_INPUT_SWITCH", "1" },
+ { NULL },
+ }
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"switch_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"switch_end\"\n"
-"\n"
-"ATTRS{name}==\"litest HP WMI hotkeys*\",\\\n"
-" ENV{ID_INPUT_SWITCH}=\"1\"\n"
-"\n"
-"LABEL=\"switch_end\"";
-
TEST_DEVICE("wmi-hotkeys",
.type = LITEST_HP_WMI_HOTKEYS,
.features = LITEST_SWITCH,
.events = events,
.absinfo = NULL,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "ID_INPUT_SWITCH", "1" },
+ { NULL },
+ }
)
-1 , -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"mouse_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"mouse_end\"\n"
-"ENV{ID_INPUT_MOUSE}==\"\", GOTO=\"mouse_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Ignored Mouse*\",\\\n"
-" ENV{LIBINPUT_IGNORE_DEVICE}=\"1\"\n"
-"\n"
-"LABEL=\"mouse_end\"";
-
TEST_DEVICE("ignored-mouse",
.type = LITEST_IGNORED_MOUSE,
.features = LITEST_IGNORED | LITEST_BUTTON | LITEST_RELATIVE,
.id = &input_id,
.absinfo = NULL,
.events = events,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "LIBINPUT_IGNORE_DEVICE", "1" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"switch_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"switch_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Lid Switch Surface3*\",\\\n"
-" ENV{ID_INPUT_SWITCH}=\"1\"\n"
-"\n"
-"LABEL=\"switch_end\"";
-
static const char quirk_file[] =
"[litest Surface Lid]\n"
"MatchName=litest Lid Switch Surface3\n"
.events = events,
.absinfo = NULL,
- .udev_rule = udev_rule,
.quirk_file = quirk_file,
+ .udev_properties = {
+ { "ID_INPUT_SWITCH", "1" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"switch_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"switch_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Lid Switch\",\\\n"
-" ENV{ID_INPUT_SWITCH}=\"1\"\n"
-"\n"
-"LABEL=\"switch_end\"";
-
static const char quirk_file[] =
"[litest Lid Switch]\n"
"MatchName=litest Lid Switch\n"
.events = events,
.absinfo = NULL,
- .udev_rule = udev_rule,
.quirk_file = quirk_file,
+ .udev_properties = {
+ { "ID_INPUT_SWITCH", "1" },
+ { NULL },
+ },
)
-1, -1
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"touchpad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"touchpad_end\"\n"
-"ENV{ID_INPUT_TOUCHPAD}==\"\", GOTO=\"touchpad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Apple Wireless Trackpad\","
-" ENV{ID_INPUT_TOUCHPAD_INTEGRATION}=\"external\"\n"
-"\n"
-"LABEL=\"touchpad_end\"";
-
TEST_DEVICE("magic-trackpad",
.type = LITEST_MAGIC_TRACKPAD,
.features = LITEST_TOUCHPAD | LITEST_CLICKPAD |
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+
+ .udev_properties = {
+ { "ID_INPUT_TOUCHPAD_INTEGRATION", "external" },
+ { NULL },
+ },
)
-1 , -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"touchpad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"touchpad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Low DPI Mouse*\",\\\n"
-" ENV{MOUSE_DPI}=\"400@125\"\n"
-"\n"
-"LABEL=\"touchpad_end\"";
-
TEST_DEVICE("low-dpi-mouse",
.type = LITEST_MOUSE_LOW_DPI,
.features = LITEST_RELATIVE | LITEST_BUTTON | LITEST_WHEEL,
.id = &input_id,
.absinfo = NULL,
.events = events,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "MOUSE_DPI", "400@125" },
+ { NULL },
+ },
)
-1 , -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"wheel_click_angle_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"wheel_click_angle_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wheel Click Angle Mouse*\",\\\n"
-" ENV{MOUSE_WHEEL_CLICK_ANGLE}=\"-7\",\\\n"
-" ENV{MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL}=\"13\"\n"
-"\n"
-"LABEL=\"wheel_click_angle_end\"";
-
TEST_DEVICE("mouse-wheelclickangle",
.type = LITEST_MOUSE_WHEEL_CLICK_ANGLE,
.features = LITEST_RELATIVE | LITEST_BUTTON | LITEST_WHEEL,
.id = &input_id,
.absinfo = NULL,
.events = events,
- .udev_rule = udev_rule,
+
+ .udev_properties = {
+ { "MOUSE_WHEEL_CLICK_ANGLE", "-7" },
+ { "MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL", "13" },
+ { NULL },
+ }
)
-1 , -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"wheel_click_count_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"wheel_click_count_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wheel Click Count Mouse*\",\\\n"
-" ENV{MOUSE_WHEEL_CLICK_ANGLE}=\"-15\",\\\n"
-" ENV{MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL}=\"13\",\\\n"
-" ENV{MOUSE_WHEEL_CLICK_COUNT}=\"-14\",\\\n"
-" ENV{MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL}=\"27\"\\\n"
-"\n"
-"LABEL=\"wheel_click_count_end\"";
-
TEST_DEVICE("mouse-wheelclickcount",
.type = LITEST_MOUSE_WHEEL_CLICK_COUNT,
.features = LITEST_RELATIVE | LITEST_BUTTON | LITEST_WHEEL,
.id = &input_id,
.absinfo = NULL,
.events = events,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "MOUSE_WHEEL_CLICK_ANGLE", "-15" },
+ { "MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL", "13" },
+ { "MOUSE_WHEEL_CLICK_COUNT", "-14" },
+ { "MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL", "27" },
+ { NULL },
+ }
)
-1 , -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"wheel_wheel_tilt_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"wheel_wheel_tilt_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wheel Tilt Mouse*\",\\\n"
-" ENV{MOUSE_WHEEL_TILT_HORIZONTAL}=\"1\",\\\n"
-" ENV{MOUSE_WHEEL_TILT_VERTICAL}=\"1\"\n"
-"\n"
-"LABEL=\"wheel_wheel_tilt_end\"";
-
TEST_DEVICE("mouse-wheel-tilt",
.type = LITEST_MOUSE_WHEEL_TILT,
.features = LITEST_RELATIVE | LITEST_BUTTON | LITEST_WHEEL,
.id = &input_id,
.absinfo = NULL,
.events = events,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "MOUSE_WHEEL_TILT_HORIZONTAL", "1" },
+ { "MOUSE_WHEEL_TILT_VERTICAL", "1" },
+ { NULL },
+ }
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"switch_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"switch_end\"\n"
-"\n"
-"ATTRS{name}==\"litest ThinkPad Extra Buttons*\",\\\n"
-" ENV{ID_INPUT_SWITCH}=\"1\"\n"
-"\n"
-"LABEL=\"switch_end\"";
-
TEST_DEVICE("thinkpad-extrabuttons",
.type = LITEST_THINKPAD_EXTRABUTTONS,
.features = LITEST_KEYS | LITEST_SWITCH,
.id = &input_id,
.events = events,
.absinfo = NULL,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "ID_INPUT_SWITCH", "1" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"rule_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"rule_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Bamboo 2FG 4x5 Finger*\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-bamboo-2fg-group\",\\\n"
-" ENV{ID_INPUT_TABLET}=\"1\",\\\n"
-" ENV{ID_INPUT_TOUCHPAD}=\"1\"\n"
-"\n"
-"LABEL=\"rule_end\"";
-
TEST_DEVICE("wacom-bamboo-2fg-finger",
.type = LITEST_WACOM_BAMBOO_2FG_FINGER,
.features = LITEST_TOUCHPAD,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "LIBINPUT_DEVICE_GROUP", "wacom-bamboo-2fg-group" },
+ { "ID_INPUT_TABLET", "1" },
+ { "ID_INPUT_TOUCHPAD", "1" },
+ }
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Bamboo 2FG 4x5 Pad*\",\\\n"
-" ENV{ID_INPUT_TABLET_PAD}=\"1\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-bamboo-2fg-group\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
TEST_DEVICE("wacom-bamboo-2fg-pad",
.type = LITEST_WACOM_BAMBOO_2FG_PAD,
.features = LITEST_TABLET_PAD,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { .key = "ID_INPUT_TABLET_PAD", .value = "1" },
+ { .key = "LIBINPUT_DEVICE_GROUP", .value = "1" },
+ { NULL }
+ }
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Bamboo 2FG 4x5 Pen*\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-bamboo-2fg-group\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
TEST_DEVICE("wacom-bamboo-2fg-pen",
.type = LITEST_WACOM_BAMBOO_2FG_PEN,
.features = LITEST_TABLET | LITEST_DISTANCE | LITEST_HOVER,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "LIBINPUT_DEVICE_GROUP", "wacom-bamboo-2fg-group" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"rule_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"rule_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Cintiq 13 HD touch Finger*\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-13hdt-group\"\n"
-"\n"
-"LABEL=\"rule_end\"";
-
TEST_DEVICE("wacom-cintiq-13hdt-finger",
.type = LITEST_WACOM_CINTIQ_13HDT_FINGER,
.features = LITEST_TOUCH,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "LIBINPUT_DEVICE_GROUP", "wacom-13hdt-group" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Cintiq 13 HD touch Pad*\",\\\n"
-" ENV{ID_INPUT_TABLET_PAD}=\"1\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-13hdt-group\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
TEST_DEVICE("wacom-cintiq-13hdt-pad",
.type = LITEST_WACOM_CINTIQ_13HDT_PAD,
.features = LITEST_TABLET_PAD | LITEST_RING,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "ID_INPUT_TABLET_PAD", "1" },
+ { "LIBINPUT_DEVICE_GROUP", "wacom-13hdt-group" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"rule_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"rule_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Cintiq 13 HD touch Pen*\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-13hdt-group\"\n"
-"\n"
-"LABEL=\"rule_end\"";
-
TEST_DEVICE("wacom-cintiq-13hdt-pen-tablet",
.type = LITEST_WACOM_CINTIQ_13HDT_PEN,
.features = LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_SERIAL | LITEST_TILT | LITEST_DIRECT | LITEST_HOVER,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "LIBINPUT_DEVICE_GROUP", "wacom-13hdt-group" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Cintiq 24 HD touch Pad*\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-24hdt-group\",\\\n"
-" ENV{ID_INPUT_TABLET_PAD}=\"1\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
TEST_DEVICE("wacom-cintiq-24hdt-pad",
.type = LITEST_WACOM_CINTIQ_24HDT_PAD,
.features = LITEST_TABLET_PAD | LITEST_RING,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "ID_INPUT_TABLET_PAD", "1" },
+ { "LIBINPUT_DEVICE_GROUP", "wacom-24hdt-group" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"rule_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"rule_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Cintiq Pro 16 Finger*\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-pro16-group\"\n"
-"\n"
-"LABEL=\"rule_end\"";
-
TEST_DEVICE("wacom-cintiq-pro16-finger",
.type = LITEST_WACOM_CINTIQ_PRO16_FINGER,
.features = LITEST_TOUCH,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "LIBINPUT_DEVICE_GROUP", "wacom-pro16-group" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Cintiq Pro 16 Pad*\",\\\n"
-" ENV{ID_INPUT_TABLET_PAD}=\"1\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-pro16-group\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
TEST_DEVICE("wacom-cintiq-pro16-pad",
.type = LITEST_WACOM_CINTIQ_PRO16_PAD,
.features = LITEST_TABLET_PAD,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "ID_INPUT_TABLET_PAD", "1" },
+ { "LIBINPUT_DEVICE_GROUP", "wacom-pro16-group" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"rule_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"rule_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Cintiq Pro 16 Pen*\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-pro16-group\"\n"
-"\n"
-"LABEL=\"rule_end\"";
-
TEST_DEVICE("wacom-cintiq-pro16-pen",
.type = LITEST_WACOM_CINTIQ_PRO16_PEN,
.features = LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_SERIAL | LITEST_TILT | LITEST_DIRECT | LITEST_HOVER,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "LIBINPUT_DEVICE_GROUP", "wacom-pro16-group" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Express Key Remote Pad*\",\\\n"
-" ENV{ID_INPUT_TABLET_PAD}=\"1\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
TEST_DEVICE("wacom-ekr",
.type = LITEST_WACOM_EKR,
.features = LITEST_TABLET_PAD | LITEST_RING,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "ID_INPUT_TABLET_PAD", "1" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Intuos3 4x6 Pad*\",\\\n"
-" ENV{ID_INPUT_TABLET_PAD}=\"1\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
TEST_DEVICE("wacom-intuos3-pad",
.type = LITEST_WACOM_INTUOS3_PAD,
.features = LITEST_TABLET_PAD | LITEST_STRIP,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "ID_INPUT_TABLET_PAD", "1" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"rule_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"rule_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Intuos5 touch M Finger*\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-i5-group\",\\\n"
-" ENV{ID_INPUT_TABLET}=\"1\",\\\n"
-" ENV{ID_INPUT_TOUCHPAD}=\"1\"\n"
-"\n"
-"LABEL=\"rule_end\"";
-
TEST_DEVICE("wacom-intuos5-finger",
.type = LITEST_WACOM_FINGER,
.features = LITEST_TOUCHPAD,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "ID_INPUT_TABLET", "1" },
+ { "ID_INPUT_TOUCHPAD", "1" },
+ { "LIBINPUT_DEVICE_GROUP", "wacom-i5-group" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Intuos5 touch M Pad*\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-i5-group\",\\\n"
-" ENV{ID_INPUT_TABLET_PAD}=\"1\"\n"
-"\n"
-"LABEL=\"pad_end\"";
-
TEST_DEVICE("wacom-intuos5-pad",
.type = LITEST_WACOM_INTUOS5_PAD,
.features = LITEST_TABLET_PAD | LITEST_RING,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "ID_INPUT_TABLET_PAD", "1" },
+ { "LIBINPUT_DEVICE_GROUP", "wacom-i5-group" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"rule_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"rule_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom Intuos5 touch M Pen*\",\\\n"
-" ENV{LIBINPUT_DEVICE_GROUP}=\"wacom-i5-group\"\n"
-"\n"
-"LABEL=\"rule_end\"";
-
TEST_DEVICE("wacom-intuos5-tablet",
.type = LITEST_WACOM_INTUOS,
.features = LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_SERIAL | LITEST_TILT | LITEST_TOOL_MOUSE | LITEST_HOVER,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "LIBINPUT_DEVICE_GROUP", "wacom-i5-group" },
+ { NULL },
+ },
)
-1, -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"pad_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"pad_end\"\n"
-"\n"
-"ATTRS{name}==\"litest Wacom MobileStudio Pro 16 Pad*\",\\\n"
-" ENV{ID_INPUT_TABLET}=\"1\",\\\n"
-" ENV{ID_INPUT_TABLET_PAD}=\"1\"\\\n"
-"\n"
-"LABEL=\"pad_end\"";
-
TEST_DEVICE("wacom-mobilestudio-pro16-pad",
.type = LITEST_WACOM_MOBILESTUDIO_PRO_16_PAD,
.features = LITEST_TABLET_PAD | LITEST_RING,
.id = &input_id,
.events = events,
.absinfo = absinfo,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "ID_INPUT_TABLET", "1" },
+ { "ID_INPUT_TABLET_PAD", "1" },
+ { NULL },
+ },
)
-1 , -1,
};
-static const char udev_rule[] =
-"ACTION==\"remove\", GOTO=\"wheel_only_end\"\n"
-"KERNEL!=\"event*\", GOTO=\"wheel_only_end\"\n"
-"\n"
-"ATTRS{name}==\"litest wheel only device*\",\\\n"
-" ENV{ID_INPUT_KEY}=\"1\"\n"
-"\n"
-"LABEL=\"wheel_only_end\"";
-
TEST_DEVICE("wheel-only",
.type = LITEST_WHEEL_ONLY,
.features = LITEST_WHEEL,
.id = &input_id,
.absinfo = NULL,
.events = events,
- .udev_rule = udev_rule,
+ .udev_properties = {
+ { "ID_INPUT_KEY", "1" },
+ { NULL },
+ },
)
const char *udev_rule;
const char *quirk_file;
+
+ const struct key_value_str udev_properties[];
};
struct litest_device_interface {
int fd;
FILE *f;
char *path = NULL;
+ const struct key_value_str *kv;
static int count;
- if (!dev->udev_rule)
+ if (!dev->udev_properties)
return NULL;
rc = xasprintf(&path,
litest_assert_int_ne(fd, -1);
f = fdopen(fd, "w");
litest_assert_notnull(f);
- litest_assert_int_ge(fputs(dev->udev_rule, f), 0);
+ fprintf(f, "ACTION==\"remove\", GOTO=\"rule%d_end\"\n", count);
+ fprintf(f, "KERNEL!=\"event*\", GOTO=\"rule%d_end\"\n", count);
+
+ fprintf(f, "ATTRS{name}==\"litest %s*\"", dev->name);
+
+ kv = dev->udev_properties;
+ while (kv->key) {
+ fprintf(f, ", \\\n\tENV{%s}=\"%s\"", kv->key, kv->value);
+ kv++;
+ }
+
+ fprintf(f, "\n");
+ fprintf(f, "LABEL=\"rule%d_end\"", count);;
fclose(f);
return path;