From debce9c20c81411f361206b0477e619e92ffbf32 Mon Sep 17 00:00:00 2001 From: VG Date: Wed, 13 Jan 2016 23:48:21 +0100 Subject: first commit --- commands.txt | 4 ++ test-evdev.py | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 commands.txt create mode 100755 test-evdev.py diff --git a/commands.txt b/commands.txt new file mode 100644 index 0000000..e80fa67 --- /dev/null +++ b/commands.txt @@ -0,0 +1,4 @@ +To generate binary qrcodes: + +python3 -c "import sys; sys.stdout.buffer.write(bytes([0, 1, 250]))" | qrencode -8 -t UTF8 +python3 -c "import sys; sys.stdout.buffer.write(bytes([i for i in range(256)]))" | qrencode -8 -t UTF8 diff --git a/test-evdev.py b/test-evdev.py new file mode 100755 index 0000000..8663ebc --- /dev/null +++ b/test-evdev.py @@ -0,0 +1,144 @@ +#!python3 + +import sys +import evdev +import contextlib + +keymap = { + evdev.ecodes.KEY_1: (b'&', b'1'), + evdev.ecodes.KEY_2: (b'?', b'2'), + evdev.ecodes.KEY_3: (b'"', b'3'), + evdev.ecodes.KEY_4: (b'\'', b'4'), + evdev.ecodes.KEY_5: (b'(', b'5'), + evdev.ecodes.KEY_6: (b'-', b'6'), + evdev.ecodes.KEY_7: (b'?', b'7'), + evdev.ecodes.KEY_8: (b'_', b'8'), + evdev.ecodes.KEY_9: (b'?', b'9'), + evdev.ecodes.KEY_0: (b'?', b'0'), + evdev.ecodes.KEY_MINUS: (b')', '°'.encode('utf8')), + evdev.ecodes.KEY_EQUAL: (b'=', b'+'), + + evdev.ecodes.KEY_Q: b'a', + evdev.ecodes.KEY_W: b'z', + evdev.ecodes.KEY_E: b'e', + evdev.ecodes.KEY_R: b'r', + evdev.ecodes.KEY_T: b't', + evdev.ecodes.KEY_Y: b'y', + evdev.ecodes.KEY_U: b'u', + evdev.ecodes.KEY_I: b'i', + evdev.ecodes.KEY_O: b'o', + evdev.ecodes.KEY_P: b'p', + + evdev.ecodes.KEY_A: b'q', + evdev.ecodes.KEY_S: b's', + evdev.ecodes.KEY_D: b'd', + evdev.ecodes.KEY_F: b'f', + evdev.ecodes.KEY_G: b'g', + evdev.ecodes.KEY_H: b'h', + evdev.ecodes.KEY_J: b'j', + evdev.ecodes.KEY_K: b'k', + evdev.ecodes.KEY_L: b'l', + evdev.ecodes.KEY_SEMICOLON: b'm', + + evdev.ecodes.KEY_Z: b'w', + evdev.ecodes.KEY_X: b'z', + evdev.ecodes.KEY_C: b'c', + evdev.ecodes.KEY_V: b'v', + evdev.ecodes.KEY_B: b'b', + evdev.ecodes.KEY_N: b'n', + evdev.ecodes.KEY_M: (b',', b'?'), + evdev.ecodes.KEY_COMMA: (b';', b'.'), + evdev.ecodes.KEY_DOT: (b':', b'/'), + evdev.ecodes.KEY_SLASH: b'!', + + evdev.ecodes.KEY_SPACE: b' ', + +} + +kpkeys_map = { + evdev.ecodes.KEY_KP0: '0', + evdev.ecodes.KEY_KP1: '1', + evdev.ecodes.KEY_KP2: '2', + evdev.ecodes.KEY_KP3: '3', + evdev.ecodes.KEY_KP4: '4', + evdev.ecodes.KEY_KP5: '5', + evdev.ecodes.KEY_KP6: '6', + evdev.ecodes.KEY_KP7: '7', + evdev.ecodes.KEY_KP8: '8', + evdev.ecodes.KEY_KP9: '9', +} + +def list_devices(name=None): + devices = [evdev.InputDevice(fn) for fn in evdev.list_devices()] + for dev in devices: + #print(dev.fn, dev.name, dev.phys) + if name and name == dev.name: + return dev + +def read_events(dev=None): + dev = evdev.InputDevice(dev.fn) + dev.grab() + line = '' + shift = False + active_keys = dict.fromkeys(( + 42, # KEY_LEFTSHIFT + 56, # KEY_LEFTALT + ), False) + accumulate = [] + bindata = [] + unidata = [] + try: + for event in dev.read_loop(): + if event.type == evdev.ecodes.EV_KEY: + data = evdev.categorize(event) + #print(data) + #key = scancodes[data.scancode] if data.scancode in scancodes else str(data.scancode) + #print('scancode', data.scancode, 'up' if data.keystate == + # data.key_up else 'down') + if data.scancode in active_keys: + active_keys[data.scancode] = data.keystate == data.key_down + if data.scancode == 56 and data.keystate == data.key_up: + value = int(''.join(accumulate)) + accumulate = [] + print('value', value, bytes([value])) + bindata.append(bytes([value])) + with contextlib.suppress(UnicodeDecodeError): + unidata.append(bytes([value]).decode('utf8')) + for i in range(6): + with contextlib.suppress(UnicodeDecodeError): + unidata.append(b''.join(bindata[-i:] + [bytes([value])]) + .decode('utf8')) + break + elif data.keystate == data.key_up: + continue + elif data.scancode == 28: # keycode: KEY_ENTER + print('end of data scan') + bindata = b''.join(bindata) + print('bytes', bindata) + #print(bindata.decode('utf8')) + bindata = [] + else: + if active_keys[56]: + # if KEY_LEFTALT down, then accumulate binary data + accumulate.append(kpkeys_map[data.scancode]) + elif data.scancode in keymap: + key = keymap[data.scancode] + if active_keys[42]: # KEY_LEFTSHIFT + if len(key) > 1: + key = key[1] + else: + key = key.upper() + else: + if len(key) > 1: + key = key[0] + bindata.append(key) + unidata.append(key.decode('utf8')) + else: + print(active_keys, data) + finally: + dev.ungrab() + + +dev = list_devices(name='The Code Corporation CR1000') +print(dev) +read_events(dev) -- cgit v1.2.3