Files
macropad/nmlkpy/boot.py
2022-02-05 09:57:34 +01:00

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()