diff --git a/kmk/boards/converter/fourtypercentclub/gherkin.py b/kmk/boards/converter/fourtypercentclub/gherkin.py index 3795337..83b3ce7 100644 --- a/kmk/boards/converter/fourtypercentclub/gherkin.py +++ b/kmk/boards/converter/fourtypercentclub/gherkin.py @@ -1,9 +1,10 @@ +import board + from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.D9, P.D10, P.D11, P.D12, P.D13, P.SCL) - row_pins = (P.A3, P.A4, P.A5, P.SCK, P.MOSI) + col_pins = (board.D9, board.D10, board.D11, board.D12, board.D13, board.SCL) + row_pins = (board.A3, board.A4, board.A5, board.SCK, board.MOSI) diode_orientation = DiodeOrientation.COLUMNS diff --git a/kmk/boards/converter/fourtypercentclub/luddite.py b/kmk/boards/converter/fourtypercentclub/luddite.py index 5a41b71..ed9c826 100644 --- a/kmk/boards/converter/fourtypercentclub/luddite.py +++ b/kmk/boards/converter/fourtypercentclub/luddite.py @@ -2,12 +2,29 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.A0, P.A1, P.A2, P.A3, P.A4, P.A5, P.SCK, P.MOSI) - row_pins = (P.TX, P.RX, P.SDA, P.SCL, P.D13, P.D12, P.D11, P.D10) + col_pins = ( + board.A0, + board.A1, + board.A2, + board.A3, + board.A4, + board.A5, + board.SCK, + board.MOSI, + ) + row_pins = ( + board.TX, + board.RX, + board.SDA, + board.SCL, + board.D13, + board.D12, + board.D11, + board.D10, + ) diode_orientation = DiodeOrientation.COLUMNS rgb_pixel_pin = board.D9 rgb_num_pixels = 12 diff --git a/kmk/boards/converter/keebio/bdn9.py b/kmk/boards/converter/keebio/bdn9.py index 06d0984..674ea61 100644 --- a/kmk/boards/converter/keebio/bdn9.py +++ b/kmk/boards/converter/keebio/bdn9.py @@ -2,10 +2,19 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.RX, P.D13, P.A0, P.D11, P.A4, P.A5, P.D10, P.D9, P.SCK) + col_pins = ( + board.RX, + board.D13, + board.A0, + board.D11, + board.A4, + board.A5, + board.D10, + board.D9, + board.SCK, + ) diode_orientation = DiodeOrientation.COLUMNS rgb_pixel_pin = board.TX diff --git a/kmk/boards/converter/keebio/fourier.py b/kmk/boards/converter/keebio/fourier.py index f59e042..56f25af 100644 --- a/kmk/boards/converter/keebio/fourier.py +++ b/kmk/boards/converter/keebio/fourier.py @@ -2,12 +2,11 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.A1, P.A2, P.A3, P.A4, P.A5, P.SCK, P.MOSI) - row_pins = (P.A0, P.D11, P.D10, P.D9) + col_pins = (board.A1, board.A2, board.A3, board.A4, board.A5, board.SCK, board.MOSI) + row_pins = (board.A0, board.D11, board.D10, board.D9) diode_orientation = DiodeOrientation.COLUMNS rgb_pixel_pin = board.TX uart_pin = board.SCL diff --git a/kmk/boards/converter/keebio/iris_r1.py b/kmk/boards/converter/keebio/iris_r1.py index a8c7e11..dc9165c 100644 --- a/kmk/boards/converter/keebio/iris_r1.py +++ b/kmk/boards/converter/keebio/iris_r1.py @@ -2,12 +2,11 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.A2, P.A3, P.A4, P.A5, P.SCK, P.MOSI) - row_pins = (P.D11, P.D10, P.D9, P.D7, P.D13) + col_pins = (board.A2, board.A3, board.A4, board.A5, board.SCK, board.MOSI) + row_pins = (board.D11, board.D10, board.D9, board.D7, board.D13) diode_orientation = DiodeOrientation.COLUMNS rgb_pixel_pin = board.TX uart_pin = board.SCL diff --git a/kmk/boards/converter/keebio/iris_r2.py b/kmk/boards/converter/keebio/iris_r2.py index 582963f..c7058b4 100644 --- a/kmk/boards/converter/keebio/iris_r2.py +++ b/kmk/boards/converter/keebio/iris_r2.py @@ -3,15 +3,14 @@ import board from kmk.consts import DiodeOrientation from kmk.matrix import intify_coordinate as ic from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): # Pin mappings for converter board found at hardware/README.md # QMK: MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 } # QMK: MATRIX_ROW_PINS { D7, E6, B4, D2, D4 } - col_pins = (P.A2, P.A3, P.A4, P.A5, P.SCK, P.MOSI) - row_pins = (P.D11, P.D10, P.D9, P.RX, P.D13) + col_pins = (board.A2, board.A3, board.A4, board.A5, board.SCK, board.MOSI) + row_pins = (board.D11, board.D10, board.D9, board.RX, board.D13) diode_orientation = DiodeOrientation.COLUMNS split_flip = True diff --git a/kmk/boards/converter/keebio/lapace.py b/kmk/boards/converter/keebio/lapace.py index efbb365..a59b949 100644 --- a/kmk/boards/converter/keebio/lapace.py +++ b/kmk/boards/converter/keebio/lapace.py @@ -2,11 +2,27 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.SDA, P.A2, P.A3, P.A4, P.A5, P.SCK, P.MOSI) - row_pins = (P.TX, P.A0, P.RX, P.A1, P.D11, P.D9, P.D12, P.D10) + col_pins = ( + board.SDA, + board.A2, + board.A3, + board.A4, + board.A5, + board.SCK, + board.MOSI, + ) + row_pins = ( + board.TX, + board.A0, + board.RX, + board.A1, + board.D11, + board.D9, + board.D12, + board.D10, + ) diode_orientation = DiodeOrientation.COLUMNS rgb_pixel_pin = board.D13 diff --git a/kmk/boards/converter/keebio/levinson_r1.py b/kmk/boards/converter/keebio/levinson_r1.py index 3bffe8d..10dcce3 100644 --- a/kmk/boards/converter/keebio/levinson_r1.py +++ b/kmk/boards/converter/keebio/levinson_r1.py @@ -2,12 +2,11 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.A2, P.A3, P.A4, P.A5, P.SCK, P.A0) - row_pins = (P.D11, P.D10, P.D9, P.D7) + col_pins = (board.A2, board.A3, board.A4, board.A5, board.SCK, board.A0) + row_pins = (board.D11, board.D10, board.D9, board.D7) diode_orientation = DiodeOrientation.COLUMNS rgb_pixel_pin = board.TX uart_pin = board.SCL diff --git a/kmk/boards/converter/keebio/levinson_r2.py b/kmk/boards/converter/keebio/levinson_r2.py index cc85f37..c835d9e 100644 --- a/kmk/boards/converter/keebio/levinson_r2.py +++ b/kmk/boards/converter/keebio/levinson_r2.py @@ -2,12 +2,11 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.A2, P.A3, P.A4, P.A5, P.SCK, P.MOSI) - row_pins = (P.D13, P.D11, P.D10, P.D9) + col_pins = (board.A2, board.A3, board.A4, board.A5, board.SCK, board.MOSI) + row_pins = (board.D13, board.D11, board.D10, board.D9) diode_orientation = DiodeOrientation.COLUMNS split_type = 'UART' diff --git a/kmk/boards/converter/keebio/nyquist_r1.py b/kmk/boards/converter/keebio/nyquist_r1.py index 3a79ada..1f70323 100644 --- a/kmk/boards/converter/keebio/nyquist_r1.py +++ b/kmk/boards/converter/keebio/nyquist_r1.py @@ -2,12 +2,11 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.A2, P.A3, P.A4, P.A5, P.SCK, P.MOSI) - row_pins = (P.D13, P.D11, P.D10, P.D9, P.D7) + col_pins = (board.A2, board.A3, board.A4, board.A5, board.SCK, board.MOSI) + row_pins = (board.D13, board.D11, board.D10, board.D9, board.D7) diode_orientation = DiodeOrientation.COLUMNS rgb_pixel_pin = board.TX uart_pin = board.SCL diff --git a/kmk/boards/converter/keebio/nyquist_r2.py b/kmk/boards/converter/keebio/nyquist_r2.py index ea57f25..b0a5d90 100644 --- a/kmk/boards/converter/keebio/nyquist_r2.py +++ b/kmk/boards/converter/keebio/nyquist_r2.py @@ -2,12 +2,11 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.RX, P.A1, P.A2, P.A3, P.A4, P.A5) - row_pins = (P.D13, P.D11, P.D10, P.D9, P.D7) + col_pins = (board.RX, board.A1, board.A2, board.A3, board.A4, board.A5) + row_pins = (board.D13, board.D11, board.D10, board.D9, board.D7) diode_orientation = DiodeOrientation.COLUMNS split_type = 'UART' diff --git a/kmk/boards/converter/keebio/quefrency.py b/kmk/boards/converter/keebio/quefrency.py index 5b1a76f..1334901 100644 --- a/kmk/boards/converter/keebio/quefrency.py +++ b/kmk/boards/converter/keebio/quefrency.py @@ -2,13 +2,21 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): # Will need additional work and testing - col_pins = (P.A1, P.A2, P.A3, P.A4, P.A5, P.SCK, P.MOSI, P.D12) - row_pins = (P.A0, P.D13, P.D11, P.D10, P.D9, P.D7) + col_pins = ( + board.A1, + board.A2, + board.A3, + board.A4, + board.A5, + board.SCK, + board.MOSI, + board.D12, + ) + row_pins = (board.A0, board.D13, board.D11, board.D10, board.D9, board.D7) diode_orientation = DiodeOrientation.COLUMNS rgb_pixel_pin = board.TX uart_pin = board.SCL diff --git a/kmk/boards/converter/keebio/rorschach.py b/kmk/boards/converter/keebio/rorschach.py index bdf3c17..bec13cd 100644 --- a/kmk/boards/converter/keebio/rorschach.py +++ b/kmk/boards/converter/keebio/rorschach.py @@ -2,12 +2,11 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.A2, P.A3, P.A4, P.A5, P.SCK, P.MOSI) - row_pins = (P.D11, P.D10, P.D9, P.RX, P.D13) + col_pins = (board.A2, board.A3, board.A4, board.A5, board.SCK, board.MOSI) + row_pins = (board.D11, board.D10, board.D9, board.RX, board.D13) diode_orientation = DiodeOrientation.COLUMNS rgb_pixel_pin = board.TX uart_pin = board.SCL diff --git a/kmk/boards/converter/keebio/tragicforce68.py b/kmk/boards/converter/keebio/tragicforce68.py index 812d666..f6158e7 100644 --- a/kmk/boards/converter/keebio/tragicforce68.py +++ b/kmk/boards/converter/keebio/tragicforce68.py @@ -1,9 +1,29 @@ +import board + from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.A0, P.A1, P.A2, P.A3, P.A4, P.A5, P.SCK, P.MOSI) - row_pins = (P.TX, P.RX, P.SDA, P.SCL, P.D9, P.D10, P.D12, P.D11, P.D13) + col_pins = ( + board.A0, + board.A1, + board.A2, + board.A3, + board.A4, + board.A5, + board.SCK, + board.MOSI, + ) + row_pins = ( + board.TX, + board.RX, + board.SDA, + board.SCL, + board.D9, + board.D10, + board.D12, + board.D11, + board.D13, + ) diode_orientation = DiodeOrientation.COLUMNS diff --git a/kmk/boards/converter/keebio/viterbi_r1.py b/kmk/boards/converter/keebio/viterbi_r1.py index fef2459..b6c0b49 100644 --- a/kmk/boards/converter/keebio/viterbi_r1.py +++ b/kmk/boards/converter/keebio/viterbi_r1.py @@ -2,12 +2,11 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.A1, P.A2, P.A3, P.A4, P.A5, P.SCK, P.MOSI) - row_pins = (P.D13, P.D11, P.D10, P.D9, P.D7) + col_pins = (board.A1, board.A2, board.A3, board.A4, board.A5, board.SCK, board.MOSI) + row_pins = (board.D13, board.D11, board.D10, board.D9, board.D7) diode_orientation = DiodeOrientation.COLUMNS rgb_pixel_pin = board.TX uart_pin = board.SCL diff --git a/kmk/boards/converter/keebio/viterbi_r2.py b/kmk/boards/converter/keebio/viterbi_r2.py index c9d156b..fb0a3c6 100644 --- a/kmk/boards/converter/keebio/viterbi_r2.py +++ b/kmk/boards/converter/keebio/viterbi_r2.py @@ -2,12 +2,11 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.A0, P.A1, P.A2, P.A3, P.A4, P.A5, P.SCK) - row_pins = (P.D13, P.D11, P.D10, P.D9, P.D7) + col_pins = (board.A0, board.A1, board.A2, board.A3, board.A4, board.A5, board.SCK) + row_pins = (board.D13, board.D11, board.D10, board.D9, board.D7) diode_orientation = DiodeOrientation.COLUMNS rgb_pixel_pin = board.TX uart_pin = board.SCL diff --git a/kmk/boards/converter/lets-split/lets-split_r1.py b/kmk/boards/converter/lets-split/lets-split_r1.py index 89d6290..0c2084d 100644 --- a/kmk/boards/converter/lets-split/lets-split_r1.py +++ b/kmk/boards/converter/lets-split/lets-split_r1.py @@ -2,12 +2,11 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.A5, P.A4, P.A3, P.A2, P.A1, P.A0) - row_pins = (P.D7, P.D9, P.D10, P.D11) + col_pins = (board.A5, board.A4, board.A3, board.A2, board.A1, board.A0) + row_pins = (board.D7, board.D9, board.D10, board.D11) diode_orientation = DiodeOrientation.COLUMNS rgb_pixel_pin = board.TX uart_pin = board.SCL diff --git a/kmk/boards/converter/lets-split/lets-split_r2.py b/kmk/boards/converter/lets-split/lets-split_r2.py index 7e9ea8a..2d96c94 100644 --- a/kmk/boards/converter/lets-split/lets-split_r2.py +++ b/kmk/boards/converter/lets-split/lets-split_r2.py @@ -2,12 +2,11 @@ import board from kmk.consts import DiodeOrientation from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P class KeyboardConfig(_KeyboardConfig): - col_pins = (P.MOSI, P.SCK, P.A5, P.A4, P.A3, P.A2) - row_pins = (P.D11, P.D10, P.D9, P.D7) + col_pins = (board.MOSI, board.SCK, board.A5, board.A4, board.A3, board.A2) + row_pins = (board.D11, board.D10, board.D9, board.D7) diode_orientation = DiodeOrientation.COLUMNS rgb_pixel_pin = board.TX uart_pin = board.SCL diff --git a/kmk/boards/klarank.py b/kmk/boards/klarank.py index 9f73690..00fa2b2 100644 --- a/kmk/boards/klarank.py +++ b/kmk/boards/klarank.py @@ -1,7 +1,8 @@ +import board + from kmk.consts import DiodeOrientation from kmk.matrix import intify_coordinate as ic from kmk.mcus.circuitpython_usbhid import KeyboardConfig as _KeyboardConfig -from kmk.pins import Pin as P # Implements what used to be handled by KeyboardConfig.swap_indicies for this # board, by flipping various row3 (bottom physical row) keys so their @@ -20,8 +21,17 @@ def r3_swap(col): class KeyboardConfig(_KeyboardConfig): # physical, visible cols (SCK, MO, MI, RX, TX, D4) # physical, visible rows (10, 11, 12, 13) (9, 6, 5, SCL) - col_pins = (P.SCK, P.MOSI, P.MISO, P.RX, P.TX, P.D4) - row_pins = (P.D10, P.D11, P.D12, P.D13, P.D9, P.D6, P.D5, P.SCL) + col_pins = (board.SCK, board.MOSI, board.MISO, board.RX, board.TX, board.D4) + row_pins = ( + board.D10, + board.D11, + board.D12, + board.D13, + board.D9, + board.D6, + board.D5, + board.SCL, + ) rollover_cols_every_rows = 4 diode_orientation = DiodeOrientation.COLUMNS diff --git a/kmk/consts.py b/kmk/consts.py index e7b59c8..be4d915 100644 --- a/kmk/consts.py +++ b/kmk/consts.py @@ -4,7 +4,6 @@ except Exception: KMK_RELEASE = 'copied-from-git' CIRCUITPYTHON = 'CircuitPython' -MICROPYTHON = 'MicroPython' class HIDReportTypes: diff --git a/kmk/hid.py b/kmk/hid.py index e2eb2b7..5b8a7a5 100644 --- a/kmk/hid.py +++ b/kmk/hid.py @@ -1,3 +1,5 @@ +import usb_hid + from kmk.consts import HID_REPORT_SIZES, HIDReportTypes, HIDUsage, HIDUsagePage from kmk.keys import FIRST_KMK_INTERNAL_KEY, ConsumerKey, ModifierKey @@ -152,44 +154,36 @@ class USB_HID: return self -try: - import usb_hid +class CircuitPythonUSB_HID(USB_HID): + REPORT_BYTES = 9 - PLATFORM_CIRCUITPYTHON = True -except ImportError: - PLATFORM_CIRCUITPYTHON = False -else: + def post_init(self): + self.devices = {} - class CircuitPythonUSB_HID(USB_HID): - REPORT_BYTES = 9 + for device in usb_hid.devices: + us = device.usage + up = device.usage_page - def post_init(self): - self.devices = {} + if up == HIDUsagePage.CONSUMER and us == HIDUsage.CONSUMER: + self.devices[HIDReportTypes.CONSUMER] = device + continue - for device in usb_hid.devices: - us = device.usage - up = device.usage_page + if up == HIDUsagePage.KEYBOARD and us == HIDUsage.KEYBOARD: + self.devices[HIDReportTypes.KEYBOARD] = device + continue - if up == HIDUsagePage.CONSUMER and us == HIDUsage.CONSUMER: - self.devices[HIDReportTypes.CONSUMER] = device - continue + if up == HIDUsagePage.MOUSE and us == HIDUsage.MOUSE: + self.devices[HIDReportTypes.MOUSE] = device + continue - if up == HIDUsagePage.KEYBOARD and us == HIDUsage.KEYBOARD: - self.devices[HIDReportTypes.KEYBOARD] = device - continue + if up == HIDUsagePage.SYSCONTROL and us == HIDUsage.SYSCONTROL: + self.devices[HIDReportTypes.SYSCONTROL] = device + continue - if up == HIDUsagePage.MOUSE and us == HIDUsage.MOUSE: - self.devices[HIDReportTypes.MOUSE] = device - continue + def hid_send(self, evt): + # int, can be looked up in HIDReportTypes + reporting_device_const = self.report_device[0] - if up == HIDUsagePage.SYSCONTROL and us == HIDUsage.SYSCONTROL: - self.devices[HIDReportTypes.SYSCONTROL] = device - continue - - def hid_send(self, evt): - # int, can be looked up in HIDReportTypes - reporting_device_const = self.report_device[0] - - return self.devices[reporting_device_const].send_report( - evt[1 : HID_REPORT_SIZES[reporting_device_const] + 1] - ) + return self.devices[reporting_device_const].send_report( + evt[1 : HID_REPORT_SIZES[reporting_device_const] + 1] + ) diff --git a/kmk/matrix.py b/kmk/matrix.py index 480ffec..e35561d 100644 --- a/kmk/matrix.py +++ b/kmk/matrix.py @@ -1,4 +1,5 @@ import digitalio +import gc from kmk.consts import DiodeOrientation @@ -15,28 +16,29 @@ class MatrixScanner: diode_orientation=DiodeOrientation.COLUMNS, rollover_cols_every_rows=None, ): + self.len_cols = len(cols) + self.len_rows = len(rows) + # A pin cannot be both a row and column, detect this by combining the # two tuples into a set and validating that the length did not drop # # repr() hackery is because CircuitPython Pin objects are not hashable unique_pins = {repr(c) for c in cols} | {repr(r) for r in rows} - if len(unique_pins) != len(cols) + len(rows): - raise ValueError('Cannot use a pin as both a column and row') - - self.cols = cols - self.rows = rows - self.len_cols = len(cols) - self.len_rows = len(rows) + assert ( + len(unique_pins) == self.len_cols + self.len_rows + ), 'Cannot use a pin as both a column and row' + del unique_pins + gc.collect() self.diode_orientation = diode_orientation if self.diode_orientation == DiodeOrientation.COLUMNS: - self.outputs = self.cols - self.inputs = self.rows + self.outputs = [digitalio.DigitalInOut(x) for x in cols] + self.inputs = [digitalio.DigitalInOut(x) for x in rows] self.translate_coords = True elif self.diode_orientation == DiodeOrientation.ROWS: - self.outputs = self.rows - self.inputs = self.cols + self.outputs = [digitalio.DigitalInOut(x) for x in rows] + self.inputs = [digitalio.DigitalInOut(x) for x in cols] self.translate_coords = False else: raise ValueError( @@ -68,7 +70,7 @@ class MatrixScanner: any_changed = False for oidx, opin in enumerate(self.outputs): - opin.value(True) + opin.value = True for iidx, ipin in enumerate(self.inputs): # cast to int to avoid @@ -82,7 +84,7 @@ class MatrixScanner: # I haven't dived too far into what causes this, but it's # almost certainly because bool types in Python aren't just # aliases to int values, but are proper pseudo-types - new_val = int(ipin.value()) + new_val = int(ipin.value) old_val = self.state[ba_idx] if old_val != new_val: @@ -108,7 +110,7 @@ class MatrixScanner: ba_idx += 1 - opin.value(False) + opin.value = False if any_changed: break diff --git a/kmk/pins.py b/kmk/pins.py deleted file mode 100644 index 15a9d5b..0000000 --- a/kmk/pins.py +++ /dev/null @@ -1,99 +0,0 @@ -from micropython import const - -from kmk.consts import CIRCUITPYTHON, MICROPYTHON - -PULL_UP = const(1) -PULL_DOWN = const(2) - - -try: - import board - import digitalio - - PLATFORM = CIRCUITPYTHON - PIN_SOURCE = board -except ImportError: - import machine - - PLATFORM = MICROPYTHON - PIN_SOURCE = machine.Pin.board - - -def get_pin(pin): - ''' - Cross-platform method to find a pin by string. - - The pin definitions are platform-dependent, but this provides - a way to say "I'm using pin D20" without rolling a D20 and - having to actually learn MicroPython/CircuitPython and the - differences in how they handle pinouts. - - This also makes the keymap sanity checker actually work for - CircuitPython boards, since it's not possible in CPY to - define a module stub for `board` that uses Passthrough - natively (which is how the MicroPython stub worked originally) - ''' - return getattr(PIN_SOURCE, pin) - - -class AbstractedDigitalPin: - def __init__(self, pin): - self.raw_pin = pin - - if PLATFORM == CIRCUITPYTHON: - self.pin = digitalio.DigitalInOut(pin) - elif PLATFORM == MICROPYTHON: - self.pin = machine.Pin(pin) - else: - self.pin = pin - - self.call_value = callable(self.pin.value) - - def __repr__(self): - return 'AbstractedPin({})'.format(repr(self.raw_pin)) - - def switch_to_input(self, pull=None): - if PLATFORM == CIRCUITPYTHON: - if pull == PULL_UP: - return self.pin.switch_to_input(pull=digitalio.Pull.UP) - elif pull == PULL_DOWN: - return self.pin.switch_to_input(pull=digitalio.Pull.DOWN) - - return self.pin.switch_to_input(pull=pull) - - elif PLATFORM == MICROPYTHON: - if pull == PULL_UP: - return self.pin.init(machine.Pin.IN, machine.Pin.PULL_UP) - elif pull == PULL_DOWN: - return self.pin.init(machine.Pin.IN, machine.Pin.PULL_DOWN) - - raise ValueError('only PULL_UP and PULL_DOWN supported on MicroPython') - - raise NotImplementedError('switch_to_input not supported on platform') - - def switch_to_output(self): - if PLATFORM == CIRCUITPYTHON: - return self.pin.switch_to_output() - elif PLATFORM == MICROPYTHON: - return self.pin.init(machine.Pin.OUT) - - raise NotImplementedError('switch_to_output not supported on platform') - - def value(self, value=None): - if value is None: - if self.call_value: - return self.pin.value() - return self.pin.value - - if self.call_value: - return self.pin.value(value) - self.pin.value = value - return value - - -class PinLookup: - def __getattr__(self, attr): - return AbstractedDigitalPin(get_pin(attr)) - - -Pin = PinLookup() diff --git a/pyproject.toml b/pyproject.toml index a7c1e5c..b705225 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,5 +18,6 @@ exclude = ''' | build | docs | user_keymaps + | mnt )/ ''' diff --git a/setup.cfg b/setup.cfg index e8239ef..a7bc02f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [flake8] -exclude = .git,__pycache__,vendor,.venv,build,dist,.compiled +exclude = .git,__pycache__,vendor,.venv,build,dist,.compiled,mnt # match black expectations max_line_length = 88 @@ -47,6 +47,7 @@ known_standard_library = ubluepy, uio, uos, + usb_hid, # black compat multi_line_output=3 diff --git a/user_keymaps/kdb424/gherkin.py b/user_keymaps/kdb424/gherkin.py index bcb3c08..12c9991 100644 --- a/user_keymaps/kdb424/gherkin.py +++ b/user_keymaps/kdb424/gherkin.py @@ -1,8 +1,9 @@ +import board + from kmk.consts import DiodeOrientation, UnicodeMode from kmk.handlers.sequences import compile_unicode_string_sequences, send_string from kmk.keys import KC from kmk.mcus.circuitpython_usbhid import KeyboardConfig -from kmk.pins import Pin as P from kmk.types import AttrDict keyboard = KeyboardConfig() @@ -29,8 +30,8 @@ PF5: A5 Mosfet on B5 to control backlight ''' -keyboard.col_pins = (P.A4, P.A2, P.A3, P.A1, P.A0, P.SDA) -keyboard.row_pins = (P.D2, P.TX, P.RX, P.MISO, P.MOSI) +keyboard.col_pins = (board.A4, board.A2, board.A3, board.A1, board.A0, board.SDA) +keyboard.row_pins = (board.D2, board.TX, board.RX, board.MISO, board.MOSI) # Kyle is fucking stupid keyboard.col_pins = tuple(reversed(keyboard.col_pins)) diff --git a/user_keymaps/kdb424/klanck.py b/user_keymaps/kdb424/klanck.py index a650206..7c07764 100644 --- a/user_keymaps/kdb424/klanck.py +++ b/user_keymaps/kdb424/klanck.py @@ -1,14 +1,15 @@ +import board + from kmk.consts import DiodeOrientation, UnicodeMode from kmk.handlers.sequences import compile_unicode_string_sequences, send_string from kmk.keys import KC from kmk.mcus.circuitpython_usbhid import KeyboardConfig -from kmk.pins import Pin as P from kmk.types import AttrDict keyboard = KeyboardConfig() -keyboard.col_pins = (P.A0, P.A1, P.A2, P.A3, P.A4, P.A5, P.SCK, P.MOSI, P.MISO, P.RX, P.TX, P.D4) -keyboard.row_pins = (P.D10, P.D11, P.D12, P.D13) +keyboard.col_pins = (board.A0, board.A1, board.A2, board.A3, board.A4, board.A5, board.SCK, board.MOSI, board.MISO, board.RX, board.TX, board.D4) +keyboard.row_pins = (board.D10, board.D11, board.D12, board.D13) keyboard.diode_orientation = DiodeOrientation.COLUMNS