From faed182239c3f06cfe22ac092f77a6e259f2bf05 Mon Sep 17 00:00:00 2001 From: neo Date: Fri, 28 Mar 2025 18:49:54 +0100 Subject: [PATCH] evtest --- src/test/evtest.py | 55 +++++++++++++++++++++++++++++++++++------ src/test/pynput_test.py | 38 ++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 src/test/pynput_test.py diff --git a/src/test/evtest.py b/src/test/evtest.py index d1d07f2..6b000fb 100644 --- a/src/test/evtest.py +++ b/src/test/evtest.py @@ -1,26 +1,50 @@ +import re + import evdev from evdev import InputDevice, categorize, ecodes +from six import unichr + +key_map = { + evdev.ecodes.KEY_A: 'a', evdev.ecodes.KEY_B: 'b', evdev.ecodes.KEY_C: 'c', evdev.ecodes.KEY_D: 'd', evdev.ecodes.KEY_E: 'e', + evdev.ecodes.KEY_F: 'f', evdev.ecodes.KEY_G: 'g', evdev.ecodes.KEY_H: 'h', evdev.ecodes.KEY_I: 'i', evdev.ecodes.KEY_J: 'j', + evdev.ecodes.KEY_K: 'k', evdev.ecodes.KEY_L: 'l', evdev.ecodes.KEY_M: 'm', evdev.ecodes.KEY_N: 'n', evdev.ecodes.KEY_O: 'o', + evdev.ecodes.KEY_P: 'p', evdev.ecodes.KEY_Q: 'q', evdev.ecodes.KEY_R: 'r', evdev.ecodes.KEY_S: 's', evdev.ecodes.KEY_T: 't', + evdev.ecodes.KEY_U: 'u', evdev.ecodes.KEY_V: 'v', evdev.ecodes.KEY_W: 'w', evdev.ecodes.KEY_X: 'x', evdev.ecodes.KEY_Y: 'y', + evdev.ecodes.KEY_Z: 'z', + evdev.ecodes.KEY_1: '1', evdev.ecodes.KEY_2: '2', evdev.ecodes.KEY_3: '3', evdev.ecodes.KEY_4: '4', evdev.ecodes.KEY_5: '5', + evdev.ecodes.KEY_6: '6', evdev.ecodes.KEY_7: '7', evdev.ecodes.KEY_8: '8', evdev.ecodes.KEY_9: '9', evdev.ecodes.KEY_0: '0', + evdev.ecodes.KEY_SPACE: ' ', + evdev.ecodes.KEY_DOT: '.', + evdev.ecodes.KEY_ENTER: '\n', # Or handle enter as needed + evdev.ecodes.KEY_BACKSPACE: '\b', + evdev.ecodes.KEY_LEFTSHIFT: '', + evdev.ecodes.KEY_SLASH: '/', + + } def capture_input_events(): try: # List available input devices devices = [InputDevice(path) for path in evdev.list_devices()] - for device in devices: - print(device.path, device.name, device.phys) - # Prompt the user to select a device - device_path = input("Enter the path of the device you want to capture (e.g., /dev/input/eventX): ") + device_path = find_barcode_scanner_event(devices) device = InputDevice(device_path) print(f"Capturing events from {device.name}...") for event in device.read_loop(): if event.type == ecodes.EV_KEY: - print(categorize(event)) + if event.code in key_map and event.value == 1: + print(key_map[event.code],end='') + else: + if event.value == 0: + continue + print(categorize(event)) + #print("UNKNOWN CODE ",event.code) elif event.type == ecodes.EV_REL: - pass # print(categorize(event)) + pass #print(categorize(event)) elif event.type == ecodes.EV_ABS: - pass # print(categorize(event)) + print(categorize(event)) else: pass # print(event) @@ -29,5 +53,22 @@ def capture_input_events(): except KeyboardInterrupt: print("Capture stopped.") + +def find_barcode_scanner_event(input_list): + """ + Finds the input identifier for the "Symbol Bar Code Scanner" in a list of input device strings. + + Args: + input_list: A list of strings, each representing an input device. + + Returns: + The input identifier (e.g., "/dev/input/event3") if found, otherwise None. + """ + for line in input_list: + if "Symbol Bar Code Scanner" in line.name: + return line.path + return None + + if __name__ == "__main__": capture_input_events() \ No newline at end of file diff --git a/src/test/pynput_test.py b/src/test/pynput_test.py new file mode 100644 index 0000000..134caa2 --- /dev/null +++ b/src/test/pynput_test.py @@ -0,0 +1,38 @@ +from pynput import keyboard + +def on_press(key): + try: + print('{0}'.format(key.char),end='') + except AttributeError: + if key == keyboard.Key.enter: + print("\r\n") + #print('special key {0} pressed'.format(key)) + +def on_release(key): + return + print('{0} released'.format(key)) + if key == keyboard.Key.esc: + # Stop listener + return False + +def on_click(x, y, button, pressed): + print('{0} {1} at {2}'.format('Pressed' if pressed else 'Released', button, (x, y))) + if not pressed: + # Stop listener + return False + +def on_scroll(x, y, dx, dy): + print('Scrolled {0} at {1}'.format((dx, dy), (x, y))) + +def capture_pynput(): + # Collect events until released + keyboard_listener = keyboard.Listener(on_press=on_press, on_release=on_release) + + + keyboard_listener.start() + + + keyboard_listener.join() + +if __name__ == "__main__": + capture_pynput() \ No newline at end of file