Small and simple evtest-like program.

This commit is contained in:
Merlijn Wajer 2013-04-18 00:48:24 +02:00
parent 63f355c187
commit 6290c43984
10 changed files with 166 additions and 62 deletions

View File

@ -1 +0,0 @@
confs/techinc_arcade.h

79
config.h Normal file
View 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

View File

@ -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"); \

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
View File

@ -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);

View File

@ -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*

View File

@ -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

View File

@ -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