-
Notifications
You must be signed in to change notification settings - Fork 140
/
Copy pathcode.py
64 lines (57 loc) · 1.2 KB
/
code.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
import digitalio
import board
import struct
import usb_hid
def prepare_pin(p):
pin = digitalio.DigitalInOut(p)
pin.direction = digitalio.Direction.INPUT
pin.pull = digitalio.Pull.UP
return pin
dpad_pins = [prepare_pin(p) for p in [board.LEFT, board.RIGHT, board.UP, board.DOWN]]
button_pins = [
prepare_pin(p)
for p in [
board.SQUARE,
board.CROSS,
board.CIRCLE,
board.TRIANGLE,
board.L1,
board.R1,
board.L2,
board.R2,
board.OPT2,
board.OPT1,
board.OPT5,
board.OPT6,
board.OPT3,
board.OPT4,
]
]
dpad_lut = [
0x0F,
0x06,
0x02,
0x0F,
0x00,
0x07,
0x01,
0x00,
0x04,
0x05,
0x03,
0x04,
0x0F,
0x06,
0x02,
0x0F,
]
prev_report = None
while True:
buttons = sum([((0 if pin.value else 1) << i) for i, pin in enumerate(button_pins)])
dpad = dpad_lut[
sum([((0 if pin.value else 1) << i) for i, pin in enumerate(dpad_pins)])
]
report = struct.pack("<HBBBBBB", buttons, dpad, 0x80, 0x80, 0x80, 0x80, 0)
if report != prev_report:
usb_hid.devices[0].send_report(report)
prev_report = report