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)