mirror of
https://github.com/moparisthebest/uinput-mapper
synced 2025-02-07 02:20:17 -05:00
Small and simple evtest-like program.
This commit is contained in:
parent
63f355c187
commit
6290c43984
79
config.h
Normal file
79
config.h
Normal file
@ -0,0 +1,79 @@
|
||||
#include "config_functions.h"
|
||||
|
||||
#ifndef H_GLOBAL_MAP
|
||||
#define H_GLOBAL_MAP
|
||||
|
||||
/* Set up amount of joysticks here */
|
||||
#define JOYCOUNT 1
|
||||
|
||||
/* 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/event8", 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.
|
||||
*/
|
||||
|
||||
/* Mouse */
|
||||
MAPPER_SET_OPT(EV_KEY, UI_SET_EVBIT, 0)
|
||||
MAPPER_SET_OPT(EV_REL, UI_SET_EVBIT, 0)
|
||||
|
||||
MAPPER_ADD_KEY(BTN_LEFT, UI_SET_KEYBIT, 0)
|
||||
MAPPER_ADD_KEY(BTN_RIGHT, UI_SET_KEYBIT, 0)
|
||||
MAPPER_ADD_KEY(BTN_MIDDLE, UI_SET_KEYBIT, 0)
|
||||
MAPPER_ADD_KEY(REL_X, UI_SET_RELBIT, 0)
|
||||
MAPPER_ADD_KEY(REL_Y, UI_SET_RELBIT, 0)
|
||||
MAPPER_ADD_KEY(REL_HWHEEL, UI_SET_RELBIT, 0)
|
||||
MAPPER_ADD_KEY(REL_WHEEL, UI_SET_RELBIT, 0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* ----------------------------- THIRD SECTION ----------------------------- */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
#ifdef H_JOYMAP
|
||||
#ifndef H_JOYMAP_SEEN
|
||||
#define H_JOYMAP_SEEN
|
||||
|
||||
KEYMAP(EV_KEY, BTN_LEFT, BTN_LEFT, EV_KEY, 0, -1, +)
|
||||
KEYMAP(EV_KEY, BTN_RIGHT, BTN_RIGHT, EV_KEY, 0, -1, +)
|
||||
|
||||
KEYMAP(EV_REL, REL_X, REL_X, EV_REL, 0, -1, +)
|
||||
KEYMAP(EV_REL, REL_Y, REL_Y, EV_REL, 0, -1, +)
|
||||
/*
|
||||
KEYMAP(EV_KEY, KEY_3, BTN_LEFT, EV_KEY, 0, -1, +)
|
||||
KEYMAP(EV_KEY, KEY_M, REL_X, EV_REL, 0, -1, 10*)
|
||||
KEYMAP(EV_KEY, KEY_N, REL_X, EV_REL, 0, -1, -10*)
|
||||
KEYMAP(EV_KEY, KEY_J, REL_Y, EV_REL, 0, -1, 10*)
|
||||
KEYMAP(EV_KEY, KEY_K, REL_Y, EV_REL, 0, -1, -10*)
|
||||
*/
|
||||
|
||||
#endif
|
||||
#endif
|
@ -10,8 +10,9 @@
|
||||
}
|
||||
|
||||
|
||||
#define JOYSTICK_SET_OPT(opt, bit, device) \
|
||||
#define MAPPER_SET_OPT(opt, bit, device) \
|
||||
if (device == j) { \
|
||||
printf("SET_OPT: %d, %ld, %d\n", opt, bit, device); \
|
||||
if (ioctl(js[device], bit, opt) < 0) { \
|
||||
perror("Error in JOYSTICK_SET_OPT"); \
|
||||
fprintf(stderr, "ERROR: JOYSTICK_SET_OPT for device %d, opt %s, bit: %s\n", device, #opt, #bit); \
|
||||
@ -20,7 +21,7 @@
|
||||
} \
|
||||
}
|
||||
|
||||
#define JOYSTICK_ADD_KEY(key, bit, device) \
|
||||
#define MAPPER_ADD_KEY(key, bit, device) \
|
||||
if (device == j) { \
|
||||
if (ioctl(js[device], bit, key) < 0) { \
|
||||
perror("Error in JOYSTICK_ADD_KEY"); \
|
||||
|
@ -41,8 +41,8 @@ ADD_INPUT_PATH("/dev/input/event9", 0)
|
||||
*/
|
||||
|
||||
/* Mouse */
|
||||
JOYSTICK_SET_OPT(EV_KEY, UI_SET_EVBIT, 0)
|
||||
JOYSTICK_ADD_KEY(KEY_RIGHTMETA, UI_SET_KEYBIT, 0)
|
||||
MAPPER_SET_OPT(EV_KEY, UI_SET_EVBIT, 0)
|
||||
MAPPER_ADD_KEY(KEY_RIGHTMETA, UI_SET_KEYBIT, 0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -41,11 +41,11 @@ ADD_INPUT_PATH("/dev/input/by-path/platform-i8042-serio-0-event-kbd", 0)
|
||||
*/
|
||||
|
||||
/* Mouse */
|
||||
JOYSTICK_SET_OPT(EV_KEY, UI_SET_EVBIT, 0)
|
||||
JOYSTICK_SET_OPT(EV_REL, UI_SET_EVBIT, 0)
|
||||
JOYSTICK_ADD_KEY(BTN_LEFT, UI_SET_KEYBIT, 0)
|
||||
JOYSTICK_ADD_KEY(REL_X, UI_SET_RELBIT, 0)
|
||||
JOYSTICK_ADD_KEY(REL_Y, UI_SET_RELBIT, 0)
|
||||
MAPPER_SET_OPT(EV_KEY, UI_SET_EVBIT, 0)
|
||||
MAPPER_SET_OPT(EV_REL, UI_SET_EVBIT, 0)
|
||||
MAPPER_ADD_KEY(BTN_LEFT, UI_SET_KEYBIT, 0)
|
||||
MAPPER_ADD_KEY(REL_X, UI_SET_RELBIT, 0)
|
||||
MAPPER_ADD_KEY(REL_Y, UI_SET_RELBIT, 0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -99,46 +99,46 @@ ADD_INPUT_PATH("/dev/input/event5", 1)
|
||||
*/
|
||||
|
||||
/* 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)
|
||||
MAPPER_SET_OPT(EV_ABS, UI_SET_EVBIT, 0)
|
||||
MAPPER_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)
|
||||
MAPPER_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)
|
||||
MAPPER_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)
|
||||
MAPPER_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)
|
||||
MAPPER_ADD_KEY(BTN_0, UI_SET_KEYBIT, 0)
|
||||
MAPPER_ADD_KEY(BTN_1, UI_SET_KEYBIT, 0)
|
||||
MAPPER_ADD_KEY(BTN_2, UI_SET_KEYBIT, 0)
|
||||
MAPPER_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)
|
||||
MAPPER_SET_OPT(EV_ABS, UI_SET_EVBIT, 1)
|
||||
MAPPER_SET_OPT(EV_KEY, UI_SET_EVBIT, 1)
|
||||
|
||||
JOYSTICK_ADD_KEY(ABS_HAT0X, UI_SET_ABSBIT, 1)
|
||||
MAPPER_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)
|
||||
MAPPER_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)
|
||||
MAPPER_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)
|
||||
MAPPER_ADD_KEY(BTN_0, UI_SET_KEYBIT, 1)
|
||||
MAPPER_ADD_KEY(BTN_1, UI_SET_KEYBIT, 1)
|
||||
MAPPER_ADD_KEY(BTN_2, UI_SET_KEYBIT, 1)
|
||||
MAPPER_ADD_KEY(BTN_3, UI_SET_KEYBIT, 1)
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
@ -99,46 +99,46 @@ ADD_INPUT_PATH("/dev/input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd", 1)
|
||||
*/
|
||||
|
||||
/* 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)
|
||||
MAPPER_SET_OPT(EV_ABS, UI_SET_EVBIT, 0)
|
||||
MAPPER_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)
|
||||
MAPPER_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)
|
||||
MAPPER_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)
|
||||
MAPPER_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)
|
||||
MAPPER_ADD_KEY(BTN_0, UI_SET_KEYBIT, 0)
|
||||
MAPPER_ADD_KEY(BTN_1, UI_SET_KEYBIT, 0)
|
||||
MAPPER_ADD_KEY(BTN_2, UI_SET_KEYBIT, 0)
|
||||
MAPPER_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)
|
||||
MAPPER_SET_OPT(EV_ABS, UI_SET_EVBIT, 1)
|
||||
MAPPER_SET_OPT(EV_KEY, UI_SET_EVBIT, 1)
|
||||
|
||||
JOYSTICK_ADD_KEY(ABS_HAT0X, UI_SET_ABSBIT, 1)
|
||||
MAPPER_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)
|
||||
MAPPER_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)
|
||||
MAPPER_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)
|
||||
MAPPER_ADD_KEY(BTN_0, UI_SET_KEYBIT, 1)
|
||||
MAPPER_ADD_KEY(BTN_1, UI_SET_KEYBIT, 1)
|
||||
MAPPER_ADD_KEY(BTN_2, UI_SET_KEYBIT, 1)
|
||||
MAPPER_ADD_KEY(BTN_3, UI_SET_KEYBIT, 1)
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
2
map.c
2
map.c
@ -195,7 +195,7 @@ int main(int argc, char** argv) {
|
||||
printf("js[j] %d\n", js[j]);
|
||||
#define H_CONFIGURE_JOYSTICKS
|
||||
#include "config.h"
|
||||
scan_device("/dev/input/event6", js[j]);
|
||||
scan_device("/dev/input/event8", js[j]);
|
||||
|
||||
/* Allocate device info */
|
||||
snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "key2joy:%d", j);
|
||||
|
@ -6,7 +6,7 @@ Generate:
|
||||
- REL_*
|
||||
- ABS_*
|
||||
|
||||
gcc -E -dM /usr/include/linux/input.h | egrep ' (KEY|BTN|EV|REL|ABS)_[A-Za-z0-9_]+' | ( echo "#include <linux/input.h>" ; echo "input_constants_dict = {" ; sed -r 's/[^ ]+ +([^ ]+).*/"\1" : \1,/' ; echo "}" ) | gcc -E -o /dev/stdout - | grep 'input_constants_dict = {' -A 100000
|
||||
gcc -E -dM /usr/include/linux/input.h | egrep ' (KEY|BTN|EV|REL|ABS|SYN)_[A-Za-z0-9_]+' | ( echo "#include <linux/input.h>" ; echo "input_constants_dict = {" ; sed -r 's/[^ ]+ +([^ ]+).*/"\1" : \1,/' ; echo "}" ) | gcc -E -o /dev/stdout - | grep 'input_constants_dict = {' -A 100000 > gen.py
|
||||
|
||||
|
||||
Lambas for EVIO*
|
||||
|
23
py/cinput.py
23
py/cinput.py
@ -6,3 +6,26 @@ for k, v in input_constants_dict.iteritems():
|
||||
cinput.__dict__[k] = v
|
||||
|
||||
from linux_input import *
|
||||
|
||||
event_types = [EV_SYN, EV_KEY, EV_REL, EV_ABS, EV_MSC, EV_SW,
|
||||
EV_LED, EV_SND, EV_REP, EV_FF, EV_PWR, EV_FF_STATUS]
|
||||
|
||||
rdict = lambda x: dict(map(lambda (k, v): (v, k), x))
|
||||
|
||||
keys = filter(lambda (k, v): k.startswith("KEY_") or k.startswith("BTN_"),
|
||||
input_constants_dict.iteritems())
|
||||
rev_keys = rdict(keys)
|
||||
|
||||
absaxes = filter(lambda (k, v): k.startswith("ABS_"),
|
||||
input_constants_dict.iteritems())
|
||||
rev_absaxes = rdict(absaxes)
|
||||
|
||||
rel = filter(lambda (k, v): k.startswith("REL_"),
|
||||
input_constants_dict.iteritems())
|
||||
rev_rel = rdict(rel)
|
||||
|
||||
syn = filter(lambda (k, v): k.startswith("SYN_"),
|
||||
input_constants_dict.iteritems())
|
||||
rev_syn = rdict(syn)
|
||||
|
||||
del rdict
|
||||
|
30
py/map.py
30
py/map.py
@ -1,25 +1,27 @@
|
||||
import cinput
|
||||
import ctypes
|
||||
|
||||
f = open("/dev/input/event5")
|
||||
import sys
|
||||
|
||||
print sys.argv[1]
|
||||
f = open(sys.argv[1] if len(sys.argv) else "/dev/input/event8")
|
||||
|
||||
while True:
|
||||
#print ctypes.sizeof(input.input_event)
|
||||
hoi = f.read(ctypes.sizeof(cinput.input_event))
|
||||
#print repr(hoi)
|
||||
estr = f.read(ctypes.sizeof(cinput.input_event))
|
||||
|
||||
e = ctypes.cast(hoi, ctypes.POINTER(cinput.input_event))
|
||||
e = ctypes.cast(estr, ctypes.POINTER(cinput.input_event))
|
||||
ev = e.contents
|
||||
|
||||
keys = filter(lambda (k, v): k.startswith("KEY_") or k.startswith("BTN_"),
|
||||
cinput.input_constants_dict.iteritems())
|
||||
|
||||
if ev.type == cinput.EV_KEY:
|
||||
for k, v in keys:
|
||||
if v == ev.code:
|
||||
print k
|
||||
#print e.contents.type
|
||||
#print e.contents.code
|
||||
#print e.contents.value
|
||||
print cinput.rev_keys[ev.code]
|
||||
if ev.type == cinput.EV_REL:
|
||||
print cinput.rev_rel[ev.code]
|
||||
if ev.type == cinput.EV_ABS:
|
||||
print cinput.rev_absaxes[ev.code]
|
||||
if ev.type == cinput.EV_SYN:
|
||||
print cinput.rev_syn[ev.code]
|
||||
|
||||
#print e.contents.type
|
||||
#print e.contents.code
|
||||
#print e.contents.value
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user