From cc8a2718837742d8e33c434a9d66dae60c02f44a Mon Sep 17 00:00:00 2001 From: Marc Riera Date: Sun, 2 Oct 2022 23:58:45 +0200 Subject: [PATCH] Add D-pad support --- ddgo-converter.py | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/ddgo-converter.py b/ddgo-converter.py index 65d9576..cdd3ff0 100755 --- a/ddgo-converter.py +++ b/ddgo-converter.py @@ -4,7 +4,7 @@ from evdev import InputDevice, list_devices, ecodes as e, UInput, AbsInfo cap = { e.EV_KEY : [e.BTN_NORTH, e.BTN_SOUTH, e.BTN_EAST, e.BTN_WEST, e.BTN_SELECT, e.BTN_START], - e.EV_ABS : [(e.ABS_X, AbsInfo(0, 0, 255, 0, 0, 0)),(e.ABS_Y, AbsInfo(0, 0, 255, 0, 0, 0)) ] + e.EV_ABS : [(e.ABS_X, AbsInfo(0, 0, 255, 0, 0, 0)), (e.ABS_Y, AbsInfo(0, 0, 255, 0, 0, 0))] } # Mapping @@ -31,6 +31,7 @@ if mascon_switch is None: ui = UInput(cap, vendor=0x0AE4, product=0x0003, name='Emulated DGOC-44U') +mascon_switch.grab() for event in mascon_switch.read_loop(): if event.type == e.EV_KEY: match event.code: @@ -49,9 +50,43 @@ for event in mascon_switch.read_loop(): case 312: # MINUS ui.write(e.EV_KEY, e.BTN_SELECT, event.value) ui.syn() - case 313: # START + case 313: # PLUS ui.write(e.EV_KEY, e.BTN_START, event.value) ui.syn() + if event.type == e.EV_ABS and event.code == e.ABS_HAT0X: + match event.value: + case -1: # LEFT + ui.write(e.EV_KEY, e.BTN_SELECT, 1) + ui.write(e.EV_KEY, e.BTN_EAST, 1) + ui.write(e.EV_KEY, e.BTN_NORTH, 0) + ui.syn() + case 1: # RIGHT + ui.write(e.EV_KEY, e.BTN_SELECT, 1) + ui.write(e.EV_KEY, e.BTN_EAST, 0) + ui.write(e.EV_KEY, e.BTN_NORTH, 1) + ui.syn() + case _: # NONE + ui.write(e.EV_KEY, e.BTN_SELECT, 0) + ui.write(e.EV_KEY, e.BTN_EAST, 0) + ui.write(e.EV_KEY, e.BTN_NORTH, 0) + ui.syn() + if event.type == e.EV_ABS and event.code == e.ABS_HAT0Y: + match event.value: + case -1: # UP + ui.write(e.EV_KEY, e.BTN_SELECT, 1) + ui.write(e.EV_KEY, e.BTN_WEST, 1) + ui.write(e.EV_KEY, e.BTN_SOUTH, 0) + ui.syn() + case 1: # DOWN + ui.write(e.EV_KEY, e.BTN_SELECT, 1) + ui.write(e.EV_KEY, e.BTN_WEST, 0) + ui.write(e.EV_KEY, e.BTN_SOUTH, 1) + ui.syn() + case _: # NONE + ui.write(e.EV_KEY, e.BTN_SELECT, 0) + ui.write(e.EV_KEY, e.BTN_WEST, 0) + ui.write(e.EV_KEY, e.BTN_SOUTH, 0) + ui.syn() if event.type == e.EV_ABS and event.code == e.ABS_Y: match event.value: case 0x0: # EMG