mirror of
https://github.com/marcriera/ddgo-converter.git
synced 2025-04-11 07:29:28 +02:00
Add support for input DGOC-44U
This commit is contained in:
parent
24f41f10fe
commit
f9ab1ce64f
2 changed files with 88 additions and 3 deletions
|
@ -14,11 +14,13 @@ The executable is ready to use. However, you will need read AND write permission
|
||||||
|
|
||||||
## Supported controllers
|
## Supported controllers
|
||||||
|
|
||||||
### Physical
|
### Physical (input)
|
||||||
|
|
||||||
|
- One-handle controller for PC (DGC-255)
|
||||||
|
- Two-handle controller for PC (DGOC-44U)
|
||||||
- One-handle controller for Nintendo Switch (ZKNS-001)
|
- One-handle controller for Nintendo Switch (ZKNS-001)
|
||||||
|
|
||||||
### Emulated
|
### Emulated (output)
|
||||||
|
|
||||||
- Two-handle controller for PC (DGOC-44U)
|
- Two-handle controller for PC (DGOC-44U)
|
||||||
- Two-handle controller for Sony PlayStation (SLPH-00051)
|
- Two-handle controller for Sony PlayStation (SLPH-00051)
|
||||||
|
@ -27,6 +29,6 @@ The executable is ready to use. However, you will need read AND write permission
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
When emulating console controllers, an emulated Sony PlayStation 3 controller is used for easier mapping. On RetroArch, everything works out of the box.
|
When emulating console controllers, an emulated Sony PlayStation 3 controller is used for easier mapping. On RetroArch, everything should work out of the box.
|
||||||
|
|
||||||
_Densha de GO! 64_ requires connecting the controller to Port 3 and enabling **Independent C-button Controls**.
|
_Densha de GO! 64_ requires connecting the controller to Port 3 and enabling **Independent C-button Controls**.
|
||||||
|
|
|
@ -10,6 +10,8 @@ def create_gamepad(vid, pid, name):
|
||||||
return SwitchGamepad(vid, pid, name)
|
return SwitchGamepad(vid, pid, name)
|
||||||
case 0x054c, 0x0268:
|
case 0x054c, 0x0268:
|
||||||
return ClassicGamepad(vid, pid, name)
|
return ClassicGamepad(vid, pid, name)
|
||||||
|
case 0x0ae4, 0x0003:
|
||||||
|
return PCGamepad(vid, pid, name)
|
||||||
return PhysicalGamepad(vid, pid, name)
|
return PhysicalGamepad(vid, pid, name)
|
||||||
|
|
||||||
class PhysicalGamepad:
|
class PhysicalGamepad:
|
||||||
|
@ -18,6 +20,7 @@ class PhysicalGamepad:
|
||||||
UNKNOWN = 0
|
UNKNOWN = 0
|
||||||
CLASSIC = 1
|
CLASSIC = 1
|
||||||
SWITCH = 2
|
SWITCH = 2
|
||||||
|
PC = 3
|
||||||
|
|
||||||
def __init__(self, vid, pid, name):
|
def __init__(self, vid, pid, name):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
@ -278,3 +281,83 @@ class ClassicGamepad(PhysicalGamepad):
|
||||||
return input_events
|
return input_events
|
||||||
except OSError:
|
except OSError:
|
||||||
return [InputEvent(InputEvent.EventType.ERROR, None)]
|
return [InputEvent(InputEvent.EventType.ERROR, None)]
|
||||||
|
|
||||||
|
class PCGamepad(PhysicalGamepad):
|
||||||
|
|
||||||
|
def __init__(self, * args):
|
||||||
|
super().__init__(* args)
|
||||||
|
self.type = self.GamepadType.PC
|
||||||
|
self.config = []
|
||||||
|
self.device = self._get_device()
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
try:
|
||||||
|
self.device.grab()
|
||||||
|
except:
|
||||||
|
return
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
try:
|
||||||
|
self.device.ungrab()
|
||||||
|
except:
|
||||||
|
return
|
||||||
|
|
||||||
|
def read_input(self):
|
||||||
|
select([self.device], [], [], 5)
|
||||||
|
try:
|
||||||
|
event = self.device.read_one()
|
||||||
|
input_events = []
|
||||||
|
if event is not None:
|
||||||
|
if event.type == evdev.ecodes.EV_KEY:
|
||||||
|
match event.code:
|
||||||
|
case 289:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType(event.value), InputEvent.Button.BUTTON_A))
|
||||||
|
case 288:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType(event.value), InputEvent.Button.BUTTON_B))
|
||||||
|
case 290:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType(event.value), InputEvent.Button.BUTTON_C))
|
||||||
|
case 291:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType(event.value), InputEvent.Button.BUTTON_D))
|
||||||
|
case 292:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType(event.value), InputEvent.Button.BUTTON_SELECT))
|
||||||
|
case 293:
|
||||||
|
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_X:
|
||||||
|
match event.value:
|
||||||
|
case 0xB9: # EMG
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 9))
|
||||||
|
case 0xB5:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 8))
|
||||||
|
case 0xB2:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 7))
|
||||||
|
case 0xAF:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 6))
|
||||||
|
case 0xA8:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 5))
|
||||||
|
case 0xA2:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 4))
|
||||||
|
case 0x9A:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 3))
|
||||||
|
case 0x94:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 2))
|
||||||
|
case 0x8A:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 1))
|
||||||
|
case 0x79: # N
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.BRAKE_NOTCH, 0))
|
||||||
|
if event.type == evdev.ecodes.EV_ABS and event.code == evdev.ecodes.ABS_Y:
|
||||||
|
match event.value:
|
||||||
|
case 0x81: # N
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.POWER_NOTCH, 0))
|
||||||
|
case 0x6D:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.POWER_NOTCH, 1))
|
||||||
|
case 0x54:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.POWER_NOTCH, 2))
|
||||||
|
case 0x3F:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.POWER_NOTCH, 3))
|
||||||
|
case 0x21:
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.POWER_NOTCH, 4))
|
||||||
|
case 0x00: # P5
|
||||||
|
input_events.append(InputEvent(InputEvent.EventType.POWER_NOTCH, 5))
|
||||||
|
return input_events
|
||||||
|
except OSError:
|
||||||
|
return [InputEvent(InputEvent.EventType.ERROR, None)]
|
Loading…
Add table
Reference in a new issue