aboutsummaryrefslogtreecommitdiff
path: root/src/pico/boot.py
blob: 691b3fa4e6b637de85a46eeef31a3b95186f32b1 (plain) (blame)
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
import usb_hid

GAMEPAD_REPORT_DESCRIPTOR = bytes([
    0x05, 0x01,  # Usage Page (Generic Desktop)
    0x09, 0x05,  # Usage (Game Pad)
    0xA1, 0x01,  # Collection (Application)
    0x85, 0x01,  # Report ID (1)
    0x05, 0x09,  # Usage Page (Button)
    0x19, 0x01,  # Usage Minimum (Button 1)
    0x29, 0x10,  # Usage Maximum (Button 16)
    0x15, 0x00,  # Logical Minimum (0)
    0x25, 0x01,  # Logical Maximum (1)
    0x95, 0x10,  # Report Count (16)
    0x75, 0x01,  # Report Size (1)
    0x81, 0x02,  # Input (Data, Variable, Absolute)
    0x05, 0x01,  # Usage Page (Generic Desktop)
    0x09, 0x30,  # Usage (X)
    0x09, 0x31,  # Usage (Y)
    0x09, 0x32,  # Usage (Z)
    0x09, 0x33,  # Usage (Rx)
    0x09, 0x34,  # Usage (Ry)
    0x09, 0x35,  # Usage (Rz)
    0x15, 0x81,  # Logical Minimum (-127)
    0x25, 0x7F,  # Logical Maximum (127)
    0x75, 0x08,  # Report Size (8)
    0x95, 0x06,  # Report Count (6)
    0x81, 0x02,  # Input (Data, Variable, Absolute)
    0xC0        # End Collection
])

gamepad_device = usb_hid.Device(
    report_descriptor=GAMEPAD_REPORT_DESCRIPTOR,
    usage_page=0x01,
    usage=0x05,
    report_ids=(1,),
    in_report_lengths=(8,),  # Total report length is now 8 bytes
    out_report_lengths=(0,),
)

usb_hid.enable((gamepad_device,))

print("Custom gamepad HID enabled.")