-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPaddles.py
85 lines (80 loc) · 2.74 KB
/
Paddles.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
76
77
78
79
80
81
82
83
84
85
import serial,evdev,glob,select
class Paddles(object):
buttons = {}
def __init__(self):
self._devlist = {}
self._rescan = 0
self._fdlist = {}
self._serlist = {}
self._reopen()
def _reopen(self):
for jsdev in glob.glob('/dev/input/event*'):
if not jsdev in self._devlist:
print "Opening paddle button %s" % jsdev
js = evdev.InputDevice(jsdev)
self._devlist[jsdev] = js
self._fdlist[js.fd] = jsdev
self.buttons[jsdev] = False
print "Got paddle button %s" % (self._devlist[jsdev])
for serdev in glob.glob('/dev/ttyACM*'):
if not serdev in self._serlist:
try:
print "Opening paddle cmd %s" % serdev
self._serlist[serdev] = serial.Serial(serdev)
except:
print "Failed to open!"
pass
def read(self):
if self._rescan <= 0:
self._reopen()
self._rescan = 200
self._rescan -= 1
try:
r, w, x = select.select(self._fdlist, [], [], 0)
for jsfd in r:
jsdev = self._fdlist[jsfd]
for ev in self._devlist[jsdev].read():
if ev.type == evdev.ecodes.EV_KEY:
if ev.value == 1:
self.buttons[jsdev] = True
else:
self.buttons[jsdev] = False
except:
print "Paddle read error"
for jsdev in self._devlist.values():
try:
jsdev.Close()
except:
pass
for serdev in self._serlist.values():
try:
serdev.Close()
except:
pass
print "Closing all devices"
self._devlist = {}
self._rescan = 10
self._fdlist = {}
self._serlist = {}
def command(self, line):
try:
for serdev in self._serlist.values():
serdev.write(line+"\r\n")
serdev.reset_input_buffer()
except:
print "Paddle write error"
for jsdev in self._devlist.values():
try:
jsdev.Close()
except:
pass
for serdev in self._serlist.values():
try:
serdev.Close()
except:
pass
print "Closing all devices"
self._devlist = {}
self._rescan = 10
self._fdlist = {}
self._serlist = {}