Basic ZKNS-001 support

This commit is contained in:
Marc Riera 2022-10-20 18:07:33 +02:00
parent 9712d26508
commit fd032173b8
3 changed files with 61 additions and 2 deletions

View file

@ -23,7 +23,6 @@ class InputEvent:
BUTTON_LDOOR = 10
BUTTON_RDOOR = 11
def __init__(self, type, data):
self.type = type
self.data = data

View file

@ -74,6 +74,67 @@ class SwitchGamepad(PhysicalGamepad):
input_events.append(InputEvent(InputEvent.EventType(event.value), InputEvent.Button.BUTTON_SELECT))
case 313: # PLUS
input_events.append(InputEvent(InputEvent.EventType(event.value), InputEvent.Button.BUTTON_START))
if event.type == evdev.ecodes.EV_ABS and event.code == evdev.ecodes.ABS_HAT0X:
match event.value:
case -1: # LEFT
input_events.append(InputEvent(InputEvent.EventType.PRESS_BUTTON, InputEvent.Button.BUTTON_SELECT))
input_events.append(InputEvent(InputEvent.EventType.PRESS_BUTTON, InputEvent.Button.BUTTON_LEFT))
input_events.append(InputEvent(InputEvent.EventType.RELEASE_BUTTON, InputEvent.Button.BUTTON_RIGHT))
case 1: # RIGHT
input_events.append(InputEvent(InputEvent.EventType.PRESS_BUTTON, InputEvent.Button.BUTTON_SELECT))
input_events.append(InputEvent(InputEvent.EventType.RELEASE_BUTTON, InputEvent.Button.BUTTON_LEFT))
input_events.append(InputEvent(InputEvent.EventType.PRESS_BUTTON, InputEvent.Button.BUTTON_RIGHT))
case _: # NONE
input_events.append(InputEvent(InputEvent.EventType.RELEASE_BUTTON, InputEvent.Button.BUTTON_SELECT))
input_events.append(InputEvent(InputEvent.EventType.RELEASE_BUTTON, InputEvent.Button.BUTTON_LEFT))
input_events.append(InputEvent(InputEvent.EventType.RELEASE_BUTTON, InputEvent.Button.BUTTON_RIGHT))
if event.type == evdev.ecodes.EV_ABS and event.code == evdev.ecodes.ABS_HAT0Y:
match event.value:
case -1: # UP
input_events.append(InputEvent(InputEvent.EventType.PRESS_BUTTON, InputEvent.Button.BUTTON_SELECT))
input_events.append(InputEvent(InputEvent.EventType.PRESS_BUTTON, InputEvent.Button.BUTTON_UP))
input_events.append(InputEvent(InputEvent.EventType.RELEASE_BUTTON, InputEvent.Button.BUTTON_DOWN))
case 1: # DOWN
input_events.append(InputEvent(InputEvent.EventType.PRESS_BUTTON, InputEvent.Button.BUTTON_SELECT))
input_events.append(InputEvent(InputEvent.EventType.RELEASE_BUTTON, InputEvent.Button.BUTTON_UP))
input_events.append(InputEvent(InputEvent.EventType.PRESS_BUTTON, InputEvent.Button.BUTTON_DOWN))
case _: # NONE
input_events.append(InputEvent(InputEvent.EventType.RELEASE_BUTTON, InputEvent.Button.BUTTON_SELECT))
input_events.append(InputEvent(InputEvent.EventType.RELEASE_BUTTON, InputEvent.Button.BUTTON_UP))
input_events.append(InputEvent(InputEvent.EventType.RELEASE_BUTTON, InputEvent.Button.BUTTON_DOWN))
if event.type == evdev.ecodes.EV_ABS and event.code == evdev.ecodes.ABS_Y:
match event.value:
case 0x0: # EMG
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 9))
case 0x5:
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 8))
case 0x13:
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 7))
case 0x20:
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 6))
case 0x2E:
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 5))
case 0x3C:
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 4))
case 0x49:
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 3))
case 0x57:
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 2))
case 0x65:
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 1))
case 0x80: # N
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 0))
input_events.append(InputEvent(InputEvent.EventType.POWER_NOTCH, 0))
case 0x9F:
input_events.append(InputEvent(InputEvent.EventType.POWER_NOTCH, 1))
case 0xB7:
input_events.append(InputEvent(InputEvent.EventType.POWER_NOTCH, 2))
case 0xCE:
input_events.append(InputEvent(InputEvent.EventType.POWER_NOTCH, 3))
case 0xE6:
input_events.append(InputEvent(InputEvent.EventType.POWER_NOTCH, 4))
case 0xFF: # P5
input_events.append(InputEvent(InputEvent.EventType.POWER_NOTCH, 5))
return input_events
except OSError:
return [InputEvent(InputEvent.EventType.ERROR, None)]

View file

@ -13,7 +13,6 @@ class GamepadHandler:
devices = [InputDevice(path) for path in list_devices()]
for device in devices:
gamepads.append(gamepad_physical.create_gamepad(device.info.vendor, device.info.product, device.name))
gamepads.append(gamepad_physical.create_gamepad(0x0f0d, 0x00c1, "Test gamepad"))
return gamepads
def run_gamepad_emulator(gamepad, emulated_gamepad, stop_event):