mirror of
https://github.com/marcriera/ddgo-converter.git
synced 2025-04-11 07:29:28 +02:00
First working version
This commit is contained in:
parent
c8c01b9e48
commit
fc85bb3ae6
1 changed files with 107 additions and 139 deletions
|
@ -1,148 +1,116 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import pygame # install via pip install pygame
|
||||
import threading
|
||||
import queue
|
||||
import os
|
||||
from evdev import InputDevice, list_devices, ecodes as e, UInput, AbsInfo
|
||||
|
||||
pygame.init()
|
||||
clock = pygame.time.Clock()
|
||||
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)) ]
|
||||
}
|
||||
|
||||
joysticks = [pygame.joystick.Joystick(x) for x in range(pygame.joystick.get_count())]
|
||||
joystick_list = []
|
||||
joyid = "joyid"
|
||||
joyname = "joyname"
|
||||
# Mapping
|
||||
# A: BTN_EAST
|
||||
# B: BTN_SOUTH
|
||||
# C: BTN_NORTH
|
||||
# D: BTN_WEST
|
||||
# SL: BTN_SELECT
|
||||
# ST: BTN_START
|
||||
# BRAKE: ABS_X
|
||||
# POWER: ABS_Y
|
||||
|
||||
for i in range(pygame.joystick.get_count()):
|
||||
jid = {joyid: i, joyname: pygame.joystick.Joystick(i).get_name()}
|
||||
print(pygame.joystick.Joystick(i).get_guid())
|
||||
joystick_list.append(jid)
|
||||
mascon_select = next((i for i, item in enumerate(joystick_list) if item["joyname"] == "Nintendo Switch Pro Controller"),
|
||||
None)
|
||||
mascon_switch = None
|
||||
devices = [InputDevice(path) for path in list_devices()]
|
||||
for device in devices:
|
||||
dev_name = [device.info.vendor, device.info.product, device.name]
|
||||
if dev_name == [0x0f0d, 0x00c1, "One Handle MasCon for Nintendo Switch"]:
|
||||
mascon_switch = device
|
||||
break
|
||||
|
||||
if mascon_select is None:
|
||||
print("No Nintendo Switch Pro Controller found. Connect the correct controller and restart the script")
|
||||
if mascon_switch is None:
|
||||
print("No supported controller found.")
|
||||
exit()
|
||||
|
||||
ui = UInput(cap, vendor=0x0AE4, product=0x0003, name='Emulated DGOC-44U')
|
||||
|
||||
mascon_counter = 99
|
||||
pygame.event.clear() # Clear events to remove wrong inputs.
|
||||
|
||||
while 1:
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.JOYAXISMOTION:
|
||||
# Lever section
|
||||
mascon_axis = (joysticks[mascon_select].get_axis(1))
|
||||
mascon_axis = (round(mascon_axis, 2))
|
||||
if mascon_axis == 0.8:
|
||||
#print("P4")
|
||||
qMascon.put(power_max)
|
||||
mascon_counter = 1
|
||||
if mascon_axis == 0.62:
|
||||
if mascon_counter == 3:
|
||||
qMascon.put(power_inc)
|
||||
mascon_counter = 2
|
||||
if mascon_counter == 1:
|
||||
qMascon.put(power_dec)
|
||||
mascon_counter = 2
|
||||
if mascon_axis == 0.44:
|
||||
if mascon_counter == 4:
|
||||
qMascon.put(power_inc)
|
||||
mascon_counter = 3
|
||||
if mascon_counter == 2:
|
||||
qMascon.put(power_dec)
|
||||
mascon_counter = 3
|
||||
if mascon_axis == 0.25:
|
||||
if mascon_counter == 5:
|
||||
qMascon.put(power_inc)
|
||||
mascon_counter = 4
|
||||
if mascon_counter == 3:
|
||||
qMascon.put(power_dec)
|
||||
mascon_counter = 4
|
||||
if mascon_axis == 0.0:
|
||||
qMascon.put(neutral)
|
||||
mascon_counter = 5
|
||||
if mascon_axis == -0.21:
|
||||
if mascon_counter == 5:
|
||||
qMascon.put(brake_inc)
|
||||
mascon_counter = 6
|
||||
if mascon_counter == 7:
|
||||
qMascon.put(brake_dec)
|
||||
if notchfix:
|
||||
qMascon.put(brake_dec)
|
||||
mascon_counter = 6
|
||||
if mascon_axis == -0.32:
|
||||
if mascon_counter == 6:
|
||||
qMascon.put(brake_inc)
|
||||
if notchfix:
|
||||
qMascon.put(brake_inc)
|
||||
mascon_counter = 7
|
||||
if mascon_counter == 8:
|
||||
qMascon.put(brake_dec)
|
||||
mascon_counter = 7
|
||||
if mascon_axis == -0.43:
|
||||
if mascon_counter == 7:
|
||||
qMascon.put(brake_inc)
|
||||
mascon_counter = 8
|
||||
if mascon_counter == 9:
|
||||
qMascon.put(brake_dec)
|
||||
if notchfix:
|
||||
qMascon.put(brake_dec)
|
||||
mascon_counter = 8
|
||||
if mascon_axis == -0.53:
|
||||
if mascon_counter == 8:
|
||||
qMascon.put(brake_inc)
|
||||
if notchfix:
|
||||
qMascon.put(brake_inc)
|
||||
mascon_counter = 9
|
||||
if mascon_counter == 10:
|
||||
qMascon.put(brake_dec)
|
||||
mascon_counter = 9
|
||||
if mascon_axis == -0.64:
|
||||
if mascon_counter == 9:
|
||||
qMascon.put(brake_inc)
|
||||
mascon_counter = 10
|
||||
if mascon_counter == 11:
|
||||
qMascon.put(brake_dec)
|
||||
mascon_counter = 10
|
||||
if mascon_axis == -0.75:
|
||||
if mascon_counter == 10:
|
||||
qMascon.put(brake_inc)
|
||||
if notchfix:
|
||||
qMascon.put(brake_inc)
|
||||
mascon_counter = 11
|
||||
if mascon_counter == 12:
|
||||
qMascon.put(brake_dec)
|
||||
mascon_counter = 11
|
||||
if mascon_axis == -0.85:
|
||||
if mascon_counter == 11:
|
||||
qMascon.put(brake_inc)
|
||||
mascon_counter = 12
|
||||
if mascon_counter >= 13:
|
||||
qMascon.put(brake_dec)
|
||||
mascon_counter = 12
|
||||
if mascon_axis == -1.00:
|
||||
qMascon.put(brake_eb)
|
||||
mascon_counter = 14
|
||||
|
||||
# Button section
|
||||
if event.type == pygame.JOYBUTTONDOWN and event.button == 0:
|
||||
print("A")
|
||||
if event.type == pygame.JOYBUTTONDOWN and event.button == 1:
|
||||
print("B")
|
||||
if event.type == pygame.JOYBUTTONDOWN and event.button == 2:
|
||||
print("X")
|
||||
if event.type == pygame.JOYBUTTONDOWN and event.button == 3:
|
||||
print("Y")
|
||||
if event.type == pygame.JOYBUTTONDOWN and event.button == 4:
|
||||
print("MINUS")
|
||||
if event.type == pygame.JOYBUTTONDOWN and event.button == 6:
|
||||
print("PLUS")
|
||||
if event.type == pygame.JOYBUTTONDOWN and event.button == 11:
|
||||
print("UP")
|
||||
if event.type == pygame.JOYBUTTONDOWN and event.button == 12:
|
||||
print("DOWN")
|
||||
if event.type == pygame.JOYBUTTONDOWN and event.button == 13:
|
||||
print("LEFT")
|
||||
if event.type == pygame.JOYBUTTONDOWN and event.button == 14:
|
||||
print("RIGHT")
|
||||
for event in mascon_switch.read_loop():
|
||||
if event.type == e.EV_KEY:
|
||||
match event.code:
|
||||
case 304: # Y
|
||||
ui.write(e.EV_KEY, e.BTN_EAST, event.value)
|
||||
ui.syn()
|
||||
case 305: # B
|
||||
ui.write(e.EV_KEY, e.BTN_SOUTH, event.value)
|
||||
ui.syn()
|
||||
case 306: # A
|
||||
ui.write(e.EV_KEY, e.BTN_NORTH, event.value)
|
||||
ui.syn()
|
||||
case 307: # X
|
||||
ui.write(e.EV_KEY, e.BTN_WEST, event.value)
|
||||
ui.syn()
|
||||
case 312: # MINUS
|
||||
ui.write(e.EV_KEY, e.BTN_SELECT, event.value)
|
||||
ui.syn()
|
||||
case 313: # START
|
||||
ui.write(e.EV_KEY, e.BTN_START, event.value)
|
||||
ui.syn()
|
||||
if event.type == e.EV_ABS and event.code == e.ABS_Y:
|
||||
match event.value:
|
||||
case 0x0: # EMG
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0xB9)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x81)
|
||||
ui.syn()
|
||||
case 0x5:
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0xB5)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x81)
|
||||
ui.syn()
|
||||
case 0x13:
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0xB2)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x81)
|
||||
ui.syn()
|
||||
case 0x20:
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0xAF)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x81)
|
||||
ui.syn()
|
||||
case 0x2E:
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0xA8)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x81)
|
||||
ui.syn()
|
||||
case 0x3C:
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0xA2)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x81)
|
||||
ui.syn()
|
||||
case 0x49:
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0x9A)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x81)
|
||||
ui.syn()
|
||||
case 0x57:
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0x94)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x81)
|
||||
ui.syn()
|
||||
case 0x65:
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0x8A)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x81)
|
||||
ui.syn()
|
||||
case 0x80:
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0x79)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x81)
|
||||
ui.syn()
|
||||
case 0x9F:
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0x79)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x6D)
|
||||
ui.syn()
|
||||
case 0xB7:
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0x79)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x54)
|
||||
ui.syn()
|
||||
case 0xCE:
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0x79)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x3F)
|
||||
ui.syn()
|
||||
case 0xE6:
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0x79)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x21)
|
||||
ui.syn()
|
||||
case 0xFF:
|
||||
ui.write(e.EV_ABS, e.ABS_X, 0x79)
|
||||
ui.write(e.EV_ABS, e.ABS_Y, 0x00)
|
||||
ui.syn()
|
||||
|
|
Loading…
Add table
Reference in a new issue