initial proof of concept code for kmk std ardux on paintbrush + kb2040 from adafruit
This commit is contained in:
parent
69f2363278
commit
f14f4bcb41
52
boot.py
Normal file
52
boot.py
Normal file
|
@ -0,0 +1,52 @@
|
|||
print('START boot.py')
|
||||
|
||||
# http://kmkfw.io/docs/boot/
|
||||
# Below is a fully working example, which disables USB storage, CDC and enables BIOS mode.
|
||||
|
||||
import supervisor
|
||||
import board
|
||||
import digitalio
|
||||
import os
|
||||
import storage
|
||||
import usb_cdc
|
||||
import usb_hid
|
||||
|
||||
from kmk.quickpin.pro_micro.kb2040 import pinout as pins
|
||||
from kb import KMKKeyboard
|
||||
from usb_hid import Device
|
||||
|
||||
# Enable use w/ BIOS
|
||||
usb_hid.enable((Device.KEYBOARD, Device.MOUSE), boot_device=1)
|
||||
|
||||
# If this key is held during boot, don't run the code which hides the storage and disables serial
|
||||
# bottom row, index finger key / bottom row pinky key
|
||||
key_1 = digitalio.DigitalInOut(pins[12])
|
||||
key_2 = digitalio.DigitalInOut(pins[15])
|
||||
|
||||
key_1.switch_to_input(pull=digitalio.Pull.UP)
|
||||
key_2.switch_to_input(pull=digitalio.Pull.UP)
|
||||
|
||||
# Pull up means 'active low' so invert pin values for positive logic below
|
||||
key_1_val = not (key_1.value)
|
||||
key_2_val = not (key_2.value)
|
||||
|
||||
if not (key_1_val or key_2_val):
|
||||
if not os.getenv('ARDUX_KMK_USB_DISK_ALWAYS'):
|
||||
storage.disable_usb_drive()
|
||||
usb_cdc.disable() # Equivalent to usb_cdc.enable(console=False, data=False)
|
||||
|
||||
# Deinit pins so they can be setup per the kmk keymap post-boot
|
||||
key_1.deinit()
|
||||
key_2.deinit()
|
||||
|
||||
if os.getenv('ARDUX_KMK_DEBUGGING'):
|
||||
print('START env')
|
||||
print('CIRCUITPY_BLE_NAME:', os.getenv('CIRCUITPY_BLE_NAME'))
|
||||
print('ARDUX_KMK_DEBUGGING:', os.getenv('ARDUX_KMK_DEBUGGING'))
|
||||
print('ARDUX_KMK_USB_DISK_ALWAYS:', os.getenv('ARDUX_KMK_USB_DISK_ALWAYS'))
|
||||
print('ARDUX_SIZE:', os.getenv('ARDUX_SIZE'))
|
||||
print('ARDUX_HAND:', os.getenv('ARDUX_HAND'))
|
||||
print('ARDUX_BOARD:', os.getenv('ARDUX_BOARD'))
|
||||
print('END env')
|
||||
|
||||
print('END boot.py')
|
27
kb.py
Normal file
27
kb.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
import board
|
||||
|
||||
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
|
||||
from kmk.quickpin.pro_micro.kb2040 import pinout as pins
|
||||
from kmk.scanners.keypad import KeysScanner
|
||||
|
||||
# Direct wire config
|
||||
_KEY_CFG = [
|
||||
pins[16],
|
||||
pins[17],
|
||||
pins[18],
|
||||
pins[19],
|
||||
pins[12],
|
||||
pins[13],
|
||||
pins[14],
|
||||
pins[15]
|
||||
]
|
||||
|
||||
class KMKKeyboard(_KMKKeyboard):
|
||||
def __init__(self):
|
||||
# create and register the scanner for direct wire
|
||||
self.matrix = KeysScanner(_KEY_CFG)
|
||||
|
||||
coord_mapping = [
|
||||
0, 1, 2, 3,
|
||||
4, 5, 6, 7,
|
||||
]
|
80
main.py
Normal file
80
main.py
Normal file
|
@ -0,0 +1,80 @@
|
|||
import board
|
||||
import os
|
||||
|
||||
from kb import KMKKeyboard
|
||||
from kmk.keys import KC
|
||||
|
||||
keyboard = KMKKeyboard()
|
||||
|
||||
#####
|
||||
# Enable debugging
|
||||
if os.getenv('ARDUX_KMK_DEBUGGING'):
|
||||
keyboard.debug_enabled = True
|
||||
|
||||
#####
|
||||
# NeoPixel on kb2040 (tune accordingly / remove if different mcu)
|
||||
from kmk.extensions.RGB import RGB, AnimationModes
|
||||
rgb_ext = RGB(
|
||||
pixel_pin=board.NEOPIXEL,
|
||||
num_pixels=1,
|
||||
val_limit=100,
|
||||
val_default=25,
|
||||
animation_mode=AnimationModes.RAINBOW
|
||||
)
|
||||
keyboard.extensions.append(rgb_ext)
|
||||
|
||||
#####
|
||||
# Layers
|
||||
from kmk.modules.layers import Layers
|
||||
keyboard.modules.append(Layers())
|
||||
|
||||
#####
|
||||
# Combos
|
||||
from kmk.modules.combos import Combos, Chord
|
||||
combos = Combos()
|
||||
keyboard.modules.append(combos)
|
||||
|
||||
class KmNChord(Chord):
|
||||
def __init__(
|
||||
self,
|
||||
match: Tuple[Union[Key, int], ...],
|
||||
result: Key,
|
||||
fast_reset=None,
|
||||
per_key_timeout=None,
|
||||
timeout=None,
|
||||
match_coord=None,
|
||||
keyboard=None,
|
||||
layers=[],
|
||||
):
|
||||
super().__init__(match, result, fast_reset, per_key_timeout, match_coord)
|
||||
self.keyboard = keyboard
|
||||
self.layers = layers
|
||||
|
||||
def matches(self, key: Key, int_coord: int):
|
||||
if keyboard is None or len(self.layers) == 0 or any(i in self.keyboard.active_layers for i in self.layers):
|
||||
return super().matches(key, int_coord)
|
||||
|
||||
return False
|
||||
|
||||
combos.combos = []
|
||||
|
||||
combo_enter = KmNChord((KC.A, KC.E), KC.ENTER, keyboard=keyboard, layers=[0])
|
||||
combos.combos.append(combo_enter)
|
||||
|
||||
combo_space = KmNChord((KC.O, KC.I, KC.Y, KC.E), KC.SPACE, keyboard=keyboard, layers=[1])
|
||||
combos.combos.append(combo_space)
|
||||
|
||||
#####
|
||||
# Keymap
|
||||
keyboard.keymap = [
|
||||
[KC.S, KC.T, KC.R, KC.A,
|
||||
KC.O, KC.I, KC.Y, KC.E]
|
||||
]
|
||||
|
||||
#####
|
||||
# Main
|
||||
if __name__ == '__main__':
|
||||
print('begin main.py')
|
||||
keyboard.go()
|
||||
print('end main.py')
|
||||
|
6
settings.toml
Normal file
6
settings.toml
Normal file
|
@ -0,0 +1,6 @@
|
|||
CIRCUITPY_BLE_NAME = "ARDUX [L|R] [board]"
|
||||
ARDUX_KMK_DEBUGGING = 1 # Code only looks for value ; Uncomment/Comment to enable/disable
|
||||
ARDUX_KMK_USB_DISK_ALWAYS = 1 # Code only looks for value ; Uncomment/Comment to enable/disable
|
||||
ARDUX_SIZE = "[STANDARD|BIG|40%]"
|
||||
ARDUX_HAND = "[LEFT|RIGHT]"
|
||||
ARDUX_BOARD = "[NAME_OF_BOARD]"
|
Loading…
Reference in a new issue