-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvim-clutch.py
executable file
·93 lines (77 loc) · 2.74 KB
/
vim-clutch.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
86
87
88
89
90
91
92
#!/usr/bin/env python3
import struct
from time import sleep
from gpiozero import Button
from signal import pause
hid_codes = {
'a' : (0, 4), 'b' : (0, 5), 'c' : (0, 6),
'd' : (0, 7), 'e' : (0, 8), 'f' : (0, 9),
'g' : (0, 10), 'h' : (0, 11), 'i' : (0, 12),
'j' : (0, 13), 'k' : (0, 14), 'l' : (0, 15),
'm' : (0, 16), 'n' : (0, 17), 'o' : (0, 18),
'p' : (0, 19), 'q' : (0, 20), 'r' : (0, 21),
's' : (0, 22), 't' : (0, 23), 'u' : (0, 24),
'v' : (0, 25), 'w' : (0, 26), 'x' : (0, 27),
'y' : (0, 28), 'z' : (0, 29), '1' : (2, 30),
'2' : (2, 31), '3' : (2, 32), '4' : (2, 33),
'5' : (2, 34), '6' : (2, 35), '7' : (2, 36),
'8' : (2, 37), '9' : (2, 38), '0' : (2, 39),
'\n': (0, 40), '\b': (0, 42), '\t': (0, 43),
' ' : (0, 44), '-' : (0, 35), '=' : (0, 46),
'[' : (64, 34), ']' : (64, 45), '\\': (64, 37),
';' : (0, 54), '\'': (64, 33), '`' : (64, 36),
',' : (0, 51), 'Esc:' : (2, 20), ':' : (0, 55),
'/' : (2, 55),
'A' : (2, 4), 'B' : (2, 5), 'C' : (2, 6),
'D' : (2, 7), 'E' : (2, 8), 'F' : (2, 9),
'G' : (2, 10), 'H' : (2, 11), 'I' : (2, 12),
'J' : (2, 13), 'K' : (2, 14), 'L' : (2, 15),
'M' : (2, 16), 'N' : (2, 17), 'O' : (2, 18),
'P' : (2, 19), 'Q' : (2, 20), 'R' : (2, 21),
'S' : (2, 22), 'T' : (2, 23), 'U' : (2, 24),
'V' : (2, 25), 'W' : (2, 26), 'X' : (2, 27),
'Y' : (2, 28), 'Z' : (2, 29), '!' : (0, 56),
'@' : (64, 39), '#' : (64, 32), '$' : (0, 48),
'%' : (32, 52), '^' : (64, 38), '&' : (0, 30),
'*' : (0, 49), '(' : (0, 34), ')' : (0, 45),
'_' : (0, 37), '+' : (2, 46), '{' : (64, 33),
'}' : (64, 46), '|' : (64, 35), '.' : (2, 54),
'"' : (0, 32), '~' : (64, 31), '<' : (0, 100),
'>' : (2, 100), '?' : (2, 51) }
def press(char):
mod,key=hid_codes[char]
raw=struct.pack("BBBBL", mod, 0x00, key, 0x00, 0x00000000)
with open('/dev/hidg0', 'wb') as fd:
fd.write(raw)
fd.write(struct.pack("Q", 0))
sleep(0.005)
fd.write(struct.pack("Q", 0))
sleep(0.25)
def press_insert_i():
char="i"
press(char)
def press_insert_o():
char="o"
press(char)
def press_insert_a():
char="a"
press(char)
def release():
esc=(chr(0)*2+chr(41)+chr(0)*5).encode()
with open('/dev/hidg0', 'wb') as fd:
fd.write(esc)
fd.write(struct.pack("Q", 0))
sleep(0.005)
fd.write(struct.pack("Q", 0))
sleep(0.25)
left_pedal = Button(2)
center_pedal = Button(3)
right_pedal = Button(26)
while True:
right_pedal.when_pressed = press_insert_i
right_pedal.when_released = release
center_pedal.when_pressed = press_insert_o
center_pedal.when_released = release
left_pedal.when_pressed = press_insert_a
left_pedal.when_released = release
pause()