GUID identification used to determine gamepad. /JL
This commit is contained in:
55
joystick_debug.py
Normal file
55
joystick_debug.py
Normal file
@@ -0,0 +1,55 @@
|
||||
import os
|
||||
import pygame
|
||||
from evdev import InputDevice, list_devices
|
||||
|
||||
def format_vidpid(info):
|
||||
return f"{info.vendor:04x}:{info.product:04x}"
|
||||
|
||||
def get_evdev_devices():
|
||||
evdev_devices = {}
|
||||
for path in list_devices():
|
||||
try:
|
||||
dev = InputDevice(path)
|
||||
evdev_devices[os.path.basename(path)] = {
|
||||
'name': dev.name,
|
||||
'phys': dev.phys,
|
||||
'vidpid': format_vidpid(dev.info),
|
||||
'path': path
|
||||
}
|
||||
except Exception:
|
||||
pass
|
||||
return evdev_devices
|
||||
|
||||
def match_evdev_to_pygame():
|
||||
pygame.init()
|
||||
pygame.joystick.init()
|
||||
|
||||
evdev_devices = get_evdev_devices()
|
||||
|
||||
for i in range(pygame.joystick.get_count()):
|
||||
js = pygame.joystick.Joystick(i)
|
||||
js.init()
|
||||
name = js.get_name()
|
||||
guid = js.get_guid()
|
||||
|
||||
# Try to guess the matching evdev device based on name
|
||||
matched = None
|
||||
for ev in evdev_devices.values():
|
||||
if name.lower() in ev['name'].lower() or ev['name'].lower() in name.lower():
|
||||
matched = ev
|
||||
break
|
||||
|
||||
print(f"Joystick {i}:")
|
||||
print(f" pygame name : {name}")
|
||||
print(f" pygame guid : {guid}")
|
||||
if matched:
|
||||
print(f" evdev name : {matched['name']}")
|
||||
print(f" path : {matched['path']}")
|
||||
print(f" phys : {matched['phys']}")
|
||||
print(f" VID:PID : {matched['vidpid']}")
|
||||
else:
|
||||
print(f" evdev info : [not matched]")
|
||||
print("-" * 40)
|
||||
|
||||
if __name__ == "__main__":
|
||||
match_evdev_to_pygame()
|
||||
Reference in New Issue
Block a user