aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVG <vg@devys.org>2016-01-13 23:48:21 +0100
committerVG <vg@devys.org>2016-01-13 23:48:21 +0100
commitdebce9c20c81411f361206b0477e619e92ffbf32 (patch)
tree2f9bdd6ff21450cacb8aeedf07db5b07d0031839
downloadcodescanner-debce9c20c81411f361206b0477e619e92ffbf32.tar.gz
codescanner-debce9c20c81411f361206b0477e619e92ffbf32.tar.bz2
codescanner-debce9c20c81411f361206b0477e619e92ffbf32.zip
first commit
-rw-r--r--commands.txt4
-rwxr-xr-xtest-evdev.py144
2 files changed, 148 insertions, 0 deletions
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)