40 lines
1.3 KiB
Python
Executable File
40 lines
1.3 KiB
Python
Executable File
import usb_hid
|
|
import busio
|
|
import digitalio
|
|
import storage
|
|
import usb_cdc
|
|
from adafruit_mcp230xx.mcp23017 import MCP23017
|
|
|
|
|
|
def enable_nkro_device():
|
|
bitmap_keyboard = usb_hid.Device(
|
|
report_descriptor=(
|
|
b'\x05\x01\t\x06\xa1\x01\x85\x04u\x01\x95\x08\x05\x07\x19\xe0)\xe7\x15\x00%\x01\x81\x02\x95\x05u\x01\x05\x08\x19\x01)\x05\x91\x02\x95\x01u\x03\x91\x03\x95xu\x01\x15\x00%\x01\x05\x07\x19\x00)w\x81\x02\xc0'),
|
|
report_ids=(4,),
|
|
in_report_lengths=(16,),
|
|
out_report_lengths=(1,),
|
|
usage_page=0x1,
|
|
usage=0x6,
|
|
)
|
|
print(bitmap_keyboard)
|
|
devices = [
|
|
bitmap_keyboard,
|
|
usb_hid.Device.CONSUMER_CONTROL,
|
|
usb_hid.Device.MOUSE,
|
|
]
|
|
usb_hid.enable(devices)
|
|
print("enabled HID with custom keyboard device")
|
|
|
|
|
|
def disable_dev_mode_unless_first_key_is_held(pinout: list[tuple[int, int]], io_extenders_pinout: list[tuple[int, int, int]]) -> None:
|
|
io_extender_index, pin_number = pinout[0]
|
|
address, scl, sda = io_extenders_pinout[io_extender_index]
|
|
io_extender = MCP23017(busio.I2C(scl, sda), address)
|
|
pin = io_extender.get_pin(pin_number)
|
|
pin.direction = digitalio.Direction.INPUT
|
|
pin.pull = digitalio.Pull.UP
|
|
|
|
if pin.value:
|
|
storage.disable_usb_drive()
|
|
usb_cdc.disable()
|