-
Notifications
You must be signed in to change notification settings - Fork 0
/
prototype.py
75 lines (69 loc) · 1.7 KB
/
prototype.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from sys import argv
import subprocess
import usb.core
dev=usb.core.find(idVendor=0x0079,idProduct=0x0011)
if not dev:
print("Device not connected")
exit()
ep=dev[0].interfaces()[0].endpoints()[0]
i=dev[0].interfaces()[0].bInterfaceNumber
dev.reset()
if dev.is_kernel_driver_active(i):
dev.detach_kernel_driver(i)
dev.set_configuration()
def buttons(data):
presses=[]
data5=[["Y",128],["B",64],["A",32],["X",16]]
d=data[5]-15
for k in data5:
if d>=k[1]:
d-=k[1]
presses.append(k[0])
if data[3]==255: presses.append("RIGHT")
if data[3]==0: presses.append("LEFT")
if data[4]==0: presses.append("UP")
if data[4]==255: presses.append("DOWN")
data6=[["START",32],["SELECT",16],["R",4],["L",1]]
d=data[6]
for k in data6:
if d>=k[1]:
d-=k[1]
presses.append(k[0])
return presses
controls={
"A":"v",
"B":"c",
"X":"d",
"Y":"x",
"UP":"Up",
"DOWN":"Down",
"LEFT":"Left",
"RIGHT":"Right",
"SELECT":"Return",
"START":"space",
"R":"s",
"L":"a"
}
last=[]
eaddr=(ep.bEndpointAddress)
r=dev.read(eaddr,96)
print("SNESmap is online")
if len(argv)>1 and argv[1]=="test":
print("Test mode activated")
last=None
while True:
r=dev.read(eaddr,8)
if len(r)>0 and r!=last:
print(r)
last=r
while True:
r=dev.read(eaddr,8)
if len(r)>0:
presses=buttons(r)
for k in last:
if not k in presses:
subprocess.call(["xdotool","keyup",controls[k]])
for k in presses:
if not k in last:
subprocess.call(["xdotool","keydown",controls[k]])
last=presses