From 45a734f6ba70284d9b03b81703986036915cf61d Mon Sep 17 00:00:00 2001 From: marley Date: Sat, 30 Dec 2023 15:45:51 -0800 Subject: [PATCH] working dual keyboard logic --- keyboard_input.py | 83 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 61 insertions(+), 22 deletions(-) diff --git a/keyboard_input.py b/keyboard_input.py index 98e62a4..832eb31 100644 --- a/keyboard_input.py +++ b/keyboard_input.py @@ -1,13 +1,13 @@ import asyncio, evdev -kbd_logi = evdev.InputDevice('/dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-kbd') -kbd_wired = evdev.InputDevice('/dev/input/by-id/usb-SIGMACH1P_USB_Keykoard-event-kbd') +from evdev import InputDevice, categorize, ecodes +kbd_outside = evdev.InputDevice('/dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-kbd') +kbd_inside = evdev.InputDevice('/dev/input/by-id/usb-SIGMACH1P_USB_Keykoard-event-kbd') +kbd_outside.grab() +kbd_inside.grab() -kbd_logi.grab() -kbd_wired.grab() - -keypad_string = '' - +inside_keypad_string = '' +outside_keypad_string = '' all_scancodes = { # Scancode: ASCIICode 0: None, 1: u'ESC', 2: u'1', 3: u'2', 4: u'3', 5: u'4', 6: u'5', 7: u'6', 8: u'7', 9: u'8', @@ -18,12 +18,18 @@ 50: u'M', 51: u',', 52: u'.', 53: u'/', 54: u'RSHFT', 56: u'LALT', 100: u'RALT' } -scancodes = { +inside_scancodes = { # Scancode: ASCIICode 2: u'1', 3: u'2', 4: u'3', 5: u'4', 6: u'5', 7: u'6', 8: u'7', 9: u'8', 10: u'9', 11: u'0', 28: u'ENTR', 105: u'OPEN', 106: u'CLOSE' } +outside_scancodes = { + # Scancode: ASCIICode + 2: u'1', 3: u'2', 4: u'3', 5: u'4', 6: u'5', 7: u'6', 8: u'7', 9: u'8', 10: u'9', 11: u'0', + 28: u'ENTR', 105: u'call1', 106: u'call2' +} + async def print_events(device): async for event in device.async_read_loop(): if event.type == evdev.ecodes.EV_KEY: @@ -32,32 +38,65 @@ async def print_events(device): print(device.path, data, sep=': ') print(data.scancode) -async def create_string(device): - global keypad_string +async def inside_keypad(device): + global inside_keypad_string async for event in device.async_read_loop(): - global keypad_string + global inside_keypad_string if event.type == evdev.ecodes.EV_KEY: data = evdev.categorize(event) if data.keystate == 0: # up events only - keypressed = scancodes.get(data.scancode) + keypressed = inside_scancodes.get(data.scancode) if keypressed == 'ENTR': - print(keypad_string) - keypad_string = '' + print(inside_keypad_string) + inside_keypad_string = '' elif keypressed == 'OPEN': print(keypressed) - keypad_string = '' + inside_keypad_string = '' elif keypressed == 'CLOSE': print(keypressed) - keypad_string = '' + inside_keypad_string = '' else: # print(keypressed) - keypad_string += keypressed + try: + inside_keypad_string += keypressed + except TypeError: + print("scancode not added") + except: + print("other error") +async def outside_keypad(device): + global outside_keypad_string + async for event in device.async_read_loop(): + global outside_keypad_string + if event.type == evdev.ecodes.EV_KEY: + data = evdev.categorize(event) + if data.keystate == 0: # up events only + keypressed = outside_scancodes.get(data.scancode) + if keypressed == 'ENTR': + print(outside_keypad_string) + outside_keypad_string = '' + elif keypressed == 'call1': + print(keypressed) + outside_keypad_string = '' + elif keypressed == 'call2': + print(keypressed) + outside_keypad_string = '' + else: + # print(keypressed) + try: + outside_keypad_string += keypressed + except TypeError: + print("scancode not added") + except: + print("other error") -for device in kbd_logi, kbd_wired: - # asyncio.ensure_future(print_events(device)) - # keypad_string = '' - asyncio.ensure_future(create_string(device)) +asyncio.ensure_future(inside_keypad(kbd_inside)) +asyncio.ensure_future(outside_keypad(kbd_outside)) loop = asyncio.get_event_loop() -loop.run_forever() \ No newline at end of file +try: + loop.run_forever() +except KeyboardInterrupt: + print("exiting nicely via keyboard interrupt") +except: + print("other exit") \ No newline at end of file