/* * Copyright Merlijn Wajer 2012 * * This is the uinput-mapper configuration file. * * We are still working out all the details, but it basically boils down to the * following: You write the configuration entirely in the C preprocessor by * adding the right commands (macros) to the right sections. * * * As of now, there are three sections: * * - GLOBAL_MAP; * This is where you set the amount of devices to be emulated (currently * called JOYCOUNT) and the INPUT_PATH. * * - CONFIGURE_JOYSTICKS: * This is where you tell uinput-mapper what buttons your new joysticks (or * other devices) should expose. Any button not exposed here will never be * send. * * Macros that make sense to use here: * - JOYSTICK_SET_OPT(, , ) * - JOYSTICK_ADD_KEY(, , ) * - JOYSTICK_SET_LIM(, , ) * * JOYSTICK_SET_LIM is mostly used for ABS_HATs. * * - JOYMAP: * * Set the key mappings here. * * Macros that make sense here: * - KEYMAP(, , , , ) * * * Notes: * - To expose a joystick device, expose the BTN_JOYSTICK ``button'' with * JOYSTICK_ADD_KEY * - To expose a mouse device, expose (at least) the BTN_LEFT button with * JOYSTICK_ADD_KEY * * ---------------------------------------------------------------------------- * * TODO: * - For KEYMAPs, add parameter that species the INPUT_PATH to map from * - Add support for multiple INPUT_PATH * - Figure out more details. There's probably a lot missing. * - Remove EV_KEY constraint in map.c and use it as arg to KEY_MAP * * ---------------------------------------------------------------------------- */ #include "config_functions.h" /* -------------------------------------------------------------------------- */ /* ----------------------------- FIRST SECTION ----------------------------- */ /* -------------------------------------------------------------------------- */ #ifndef H_GLOBAL_MAP #define H_GLOBAL_MAP /* Set up amount of joysticks here */ #define JOYCOUNT 2 /* Set up amount of input devices here */ #define INPUT_DEVICE_COUNT 1 #endif /* -------------------------------------------------------------------------- */ /* ------------------- FIRST AND A HALF SECTION ----------------------------- */ /* -------------------------------------------------------------------------- */ #ifdef H_CONFIGURE_EVENTS #ifndef H_CONFIGURE_EVENTS_SEEN #define H_CONFIGURE_EVENTS_SEEN ADD_INPUT_PATH("/dev/input/by-path/platform-i8042-serio-0-event-kbd", 0) #endif #endif /* -------------------------------------------------------------------------- */ /* ----------------------------- SECOND SECTION ----------------------------- */ /* -------------------------------------------------------------------------- */ #ifdef H_CONFIGURE_JOYSTICKS #ifndef H_CONFIGURE_JOYSTICKS_SEEN #define H_CONFIGURE_JOYSTICKS_SEEN /* Configure first joystick. * * Here we just tell the program what keys event we will expose and what * keys we want to use. * * If a key is not enabled here, it will never be passed. */ /* We want to send ABS and KEY events */ JOYSTICK_SET_OPT(EV_ABS, UI_SET_EVBIT, 0) JOYSTICK_SET_OPT(EV_KEY, UI_SET_EVBIT, 0) /* Hats: * We set the absmax and absmin; otherwise the hats make no sense. */ JOYSTICK_ADD_KEY(ABS_HAT0X, UI_SET_ABSBIT, 0) JOYSTICK_SET_LIM(absmax, 1, ABS_HAT0X) JOYSTICK_SET_LIM(absmin, -1, ABS_HAT0X) JOYSTICK_ADD_KEY(ABS_HAT0Y, UI_SET_ABSBIT, 0) JOYSTICK_SET_LIM(absmax, 1, ABS_HAT0Y) JOYSTICK_SET_LIM(absmin, -1, ABS_HAT0Y) /* XXX: ALWAYS SET BTN_JOYSTICK TO EXPOSE A JOYSTICK DEVICE */ JOYSTICK_ADD_KEY(BTN_JOYSTICK, UI_SET_KEYBIT, 0) /* Buttons. */ JOYSTICK_ADD_KEY(BTN_0, UI_SET_KEYBIT, 0) JOYSTICK_ADD_KEY(BTN_1, UI_SET_KEYBIT, 0) JOYSTICK_ADD_KEY(BTN_2, UI_SET_KEYBIT, 0) JOYSTICK_ADD_KEY(BTN_3, UI_SET_KEYBIT, 0) /* Second joystick ; same comments as first one */ JOYSTICK_SET_OPT(EV_ABS, UI_SET_EVBIT, 1) JOYSTICK_SET_OPT(EV_KEY, UI_SET_EVBIT, 1) JOYSTICK_ADD_KEY(ABS_HAT0X, UI_SET_ABSBIT, 1) JOYSTICK_SET_LIM(absmax, 1, ABS_HAT0X) JOYSTICK_SET_LIM(absmin, -1, ABS_HAT0X) JOYSTICK_ADD_KEY(ABS_HAT0Y, UI_SET_ABSBIT, 1) JOYSTICK_SET_LIM(absmax, 1, ABS_HAT0X) JOYSTICK_SET_LIM(absmin, -1, ABS_HAT0X) JOYSTICK_ADD_KEY(BTN_JOYSTICK, UI_SET_KEYBIT, 1) JOYSTICK_ADD_KEY(BTN_0, UI_SET_KEYBIT, 1) JOYSTICK_ADD_KEY(BTN_1, UI_SET_KEYBIT, 1) JOYSTICK_ADD_KEY(BTN_2, UI_SET_KEYBIT, 1) JOYSTICK_ADD_KEY(BTN_3, UI_SET_KEYBIT, 1) #endif #endif /* -------------------------------------------------------------------------- */ /* ----------------------------- THIRD SECTION ----------------------------- */ /* -------------------------------------------------------------------------- */ #ifdef H_JOYMAP #ifndef H_JOYMAP_SEEN #define H_JOYMAP_SEEN /* First joystick */ LEGAL_VALUE(e.value == 1 || e.value == 0, /* HAT */ KEYMAP(EV_KEY, KEY_UP, ABS_HAT0Y, EV_ABS, 0, -) KEYMAP(EV_KEY, KEY_DOWN, ABS_HAT0Y, EV_ABS, 0, +) KEYMAP(EV_KEY, KEY_LEFT, ABS_HAT0X, EV_ABS, 0, -) KEYMAP(EV_KEY, KEY_RIGHT, ABS_HAT0X, EV_ABS, 0, +) /* Red buttons */ KEYMAP(EV_KEY, KEY_LEFTCTRL, BTN_0, EV_KEY, 0, +) KEYMAP(EV_KEY, KEY_LEFTALT, BTN_1, EV_KEY, 0, +) KEYMAP(EV_KEY, KEY_SPACE, BTN_2, EV_KEY, 0, +) /* Yellow button */ KEYMAP(EV_KEY, KEY_1, BTN_3, EV_KEY, 0, +) ) /* Second joystick */ LEGAL_VALUE(e.value == 1 || e.value == 0, /* HAT */ KEYMAP(EV_KEY, KEY_R, ABS_HAT0Y, EV_ABS, 1, -) KEYMAP(EV_KEY, KEY_F, ABS_HAT0Y, EV_ABS, 1, +) KEYMAP(EV_KEY, KEY_D, ABS_HAT0X, EV_ABS, 1, -) KEYMAP(EV_KEY, KEY_G, ABS_HAT0X, EV_ABS, 1, +) /* Red buttons */ KEYMAP(EV_KEY, KEY_A, BTN_0, EV_KEY, 1, +) KEYMAP(EV_KEY, KEY_S, BTN_1, EV_KEY, 1, +) KEYMAP(EV_KEY, KEY_Q, BTN_2, EV_KEY, 1, +) /* Yellow button */ KEYMAP(EV_KEY, KEY_2, BTN_3, EV_KEY, 1, +) ) #endif #endif