forked from alzmcr/raspy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
keypad.py
55 lines (47 loc) · 1.26 KB
/
keypad.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
import termios, sys, os
'''
# TODO: integration with key press and release?
# is this even feasible via SSH?
def terminator(*args): pass
import signal
signal.signal(signal.SIGALRM, terminator)
TIMEOUT = .35
signal.setitimer(signal.ITIMER_REAL, TIMEOUT, TIMEOUT)
c = mapping(getkey())
'''
EXIT_CHAR = '\n'
def getkey():
fd = sys.stdin.fileno()
old = termios.tcgetattr(fd)
new = termios.tcgetattr(fd)
new[3] = new[3] & ~termios.ICANON & ~termios.ECHO
new[6][termios.VMIN] = 1
new[6][termios.VTIME] = 0
termios.tcsetattr(fd, termios.TCSANOW, new)
c = None
try:
c = os.read(fd, 1)
except:
return c
finally:
termios.tcsetattr(fd, termios.TCSAFLUSH, old)
return c
def keypad(obj, mapping):
while True:
# get command and make it lower case
c = getkey().lower()
if c == EXIT_CHAR:
# exit function
break
try:
# map command
c = mapping[c]
# execute command
if c is not None:
eval('obj.%s()' % c)
except KeyError:
# unmapped command
print 'command unknown'
except Exception as e:
print e, e.message
return -1