esp-gamepad/udp_gamepad_server/gamepad_server.py
2024-10-27 18:18:42 +01:00

92 lines
No EOL
3.4 KiB
Python

import signal
import sys
import socket
#import time
from pykeyboard import PyKeyboard #pip install pyuserinput
#for windows also pip install pywin32
import vgamepad as vg #pip install vgamepad https://pypi.org/project/vgamepad/
gamepads = [vg.VX360Gamepad(),vg.VX360Gamepad()]
keyboard = PyKeyboard()
UDP_IP = "0.0.0.0"
UDP_PORT = 5005
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
#for gamepad: "gp0A" for gamepad 0 button A
#each entry corresponds to consecutive ids
keys=[\
['a','d','w','s','q','e'],\
['j','l','i','k','u','o'],\
['f','h','t','g','r','z'],\
['b','n','m',',','.','-'],\
["gp0L","gp0R","gp0U","gp0D","gp0A","gp0B",]\
]
try:
while True:
data, (recip,recport) = sock.recvfrom(1024) # buffer size is 1024 bytes
print("received message: %s" % data)
id=data[0]
action=data[1]
input=data[2]
print(" ip=%s port=%s" % (recip,recport))
print(" ID=%s" % id)
print(" Action=%s" % action)
print(" Input=%s" % input)
print()
if action==1: #press
key=keys[id][input]
print(" Press Key=%s" % key)
if len(key)==1:
keyboard.press_key(key)
elif key.startswith("gp"):
gpid=int(key[2])
if key[3]=='L':
gamepads[gpid].press_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_LEFT)
if key[3]=='R':
gamepads[gpid].press_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_RIGHT)
if key[3]=='U':
gamepads[gpid].press_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_UP)
if key[3]=='D':
gamepads[gpid].press_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_DOWN)
if key[3]=='A':
gamepads[gpid].press_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_A)
if key[3]=='B':
gamepads[gpid].press_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_B)
if key[3]=='S':
gamepads[gpid].press_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_START)
gamepads[gpid].update()
elif action==2: #release
key=keys[id][input]
print(" Release Key=%s" % key)
if len(key)==1:
keyboard.release_key(key)
elif key.startswith("gp"):
gpid=int(key[2])
if key[3]=='L':
gamepads[gpid].release_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_LEFT)
if key[3]=='R':
gamepads[gpid].release_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_RIGHT)
if key[3]=='U':
gamepads[gpid].release_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_UP)
if key[3]=='D':
gamepads[gpid].release_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_DPAD_DOWN)
if key[3]=='A':
gamepads[gpid].release_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_A)
if key[3]=='B':
gamepads[gpid].release_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_B)
if key[3]=='S':
gamepads[gpid].release_button(button=vg.XUSB_BUTTON.XUSB_GAMEPAD_START)
gamepads[gpid].update()
except KeyboardInterrupt:
print("Ctrl-C pressed!")
sys.exit(0)