ArduinoAmstradCPCJoystick/main.py
2020-10-24 01:05:03 +02:00

54 lines
1.5 KiB
Python

import serial
import uinput
ev = (uinput.BTN_SOUTH, uinput.BTN_EAST, uinput.BTN_DPAD_UP, uinput.BTN_DPAD_DOWN, uinput.BTN_DPAD_LEFT, uinput.BTN_DPAD_RIGHT)
device_p3 = uinput.Device(ev, name="Zockbox3")
device_p4 = uinput.Device(ev, name="Zockbox4")
p3int = 0
p4int = 64
s = serial.Serial('/dev/ttyACM0', 9600)
def handle_ctrl(controller, byte):
if byte % 32 == 0:
controller.emit(uinput.BTN_SOUTH, 1)
byte -= 32
else:
controller.emit(uinput.BTN_SOUTH, 0)
if byte % 16 == 0:
controller.emit(uinput.BTN_EAST, 1)
byte -= 16
else:
controller.emit(uinput.BTN_EAST, 0)
if byte % 8 == 0:
controller.emit(uinput.BTN_DPAD_RIGHT, 1)
byte -= 8
else:
controller.emit(uinput.BTN_DPAD_RIGHT, 0)
if byte % 4 == 0:
controller.emit(uinput.BTN_DPAD_LEFT, 1)
byte -= 4
else:
controller.emit(uinput.BTN_DPAD_LEFT, 0)
if byte % 2 == 0:
controller.emit(uinput.BTN_DPAD_DOWN, 1)
byte -= 2
else:
controller.emit(uinput.BTN_DPAD_DOWN, 0)
if byte % 1 == 0:
controller.emit(uinput.BTN_DPAD_UP, 1)
else:
controller.emit(uinput.BTN_DPAD_UP, 0)
while s.isOpen():
control = s.read()
ctrlint = int.from_bytes(control, byteorder='big', signed=False)
if ctrlint < 64 and p3int != ctrlint:
p3int = ctrlint
handle_ctrl(device_p3, ctrlint)
if ctrlint >= 64 and p4int != ctrlint:
p4int = ctrlint
ctrlint -= 64
handle_ctrl(device_p4, ctrlint)