import sys, time
import evdev
from evdev import InputDevice, ecodes as e
devices = [evdev.InputDevice(path) for path in evdev.list_devices()]
count = 0
for device in devices:
print(device.path, device.name, device.phys)
if device.name.startswith('usb gamepad'):
gamepad = InputDevice(device.path)
count = 1
break
if count < 1:
print("No usb gamepad found.")
sys.exit()
# read_loop()
# 모든 키 입력을 하나도 빼지 않고 읽어 온다. (이 루프에서 write() 되는 키 입력 포함)
# 그러므로 이 루프내에서 같은키를 두 번 이상 쓰면 무한루프에 걸린다.
for event in gamepad.read_loop():
if event.type == e.EV_KEY:
if event.value == 1 and event.code == e.BTN_TOP:
# Shoryuken
# + Right (→)
gamepad.write(e.EV_ABS, e.ABS_X, 255)
gamepad.write(e.EV_SYN, 0, 0)
time.sleep(0.05)
# + Down (↘)
gamepad.write(e.EV_ABS, e.ABS_Y, 255)
gamepad.write(e.EV_SYN, 0, 0)
time.sleep(0.05)
# - Right (↓|)
gamepad.write(e.EV_ABS, e.ABS_X, 127)
gamepad.write(e.EV_SYN, 0, 0)
time.sleep(0.05)
# + Right (↘)
gamepad.write(e.EV_ABS, e.ABS_X, 255)
gamepad.write(e.EV_SYN, 0, 0)
time.sleep(0.05)
# Punch Press
gamepad.write(e.EV_KEY, e.BTN_JOYSTICK, 1)
gamepad.write(e.EV_SYN, 0, 0)
time.sleep(0.05)
# Punch Release
gamepad.write(e.EV_KEY, e.BTN_JOYSTICK, 0)
gamepad.write(e.EV_SYN, 0, 0)
time.sleep(0.05)
# - Right, - Down = Center
gamepad.write(e.EV_ABS, e.ABS_X, 127)
gamepad.write(e.EV_ABS, e.ABS_Y, 127)
gamepad.write(e.EV_SYN, 0, 0)
time.sleep(0.05)
dev.close()