From 1fbff8b2f689198bbe5cc1ce5035a82f202ecbab Mon Sep 17 00:00:00 2001 From: Moritz Date: Fri, 9 Jun 2023 01:51:12 +0200 Subject: [PATCH 01/53] began theseus75 FW --- keyboards/haverworks/Theseus75/config.h | 32 ++++ keyboards/haverworks/Theseus75/halconf.h | 21 +++ keyboards/haverworks/Theseus75/info.json | 224 +++++++++++++++++++++++ keyboards/haverworks/Theseus75/mcuconf.h | 22 +++ 4 files changed, 299 insertions(+) create mode 100644 keyboards/haverworks/Theseus75/config.h create mode 100644 keyboards/haverworks/Theseus75/halconf.h create mode 100644 keyboards/haverworks/Theseus75/info.json create mode 100644 keyboards/haverworks/Theseus75/mcuconf.h diff --git a/keyboards/haverworks/Theseus75/config.h b/keyboards/haverworks/Theseus75/config.h new file mode 100644 index 00000000000..efcf929de28 --- /dev/null +++ b/keyboards/haverworks/Theseus75/config.h @@ -0,0 +1,32 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +// Set up split communications +#define SERIAL_USART_DRIVER SD3 +#define SERIAL_USART_TX_PIN B10 // The GPIO pin that is used split communication. +#define USART3_REMAP // Remap USART TX and RX pins for half duplex +#define SERIAL_USART_TX_PAL_MODE 7 // Pin alternate function 7 = USART3_TX for PB10 + +//#define SELECT_SOFT_SERIAL_SPEED {0} // Experimental, will make connection faster but may need testing. + +// Set up various split configurations +//#define SPLIT_USB_DETECT // The side that manages to establish a USB connection will be master. Disabled because default on ARM targets. + +#define SPLIT_HAND_PIN B9 // The MCUs will probe a pin to determine if they are left or right side. high = left, low = right + +#define SPLIT_TRANSPORT_MIRROR // Sync data for RGB animations to match diff --git a/keyboards/haverworks/Theseus75/halconf.h b/keyboards/haverworks/Theseus75/halconf.h new file mode 100644 index 00000000000..131255ef9b5 --- /dev/null +++ b/keyboards/haverworks/Theseus75/halconf.h @@ -0,0 +1,21 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#define HAL_USE_SERIAL TRUE + +#include_next \ No newline at end of file diff --git a/keyboards/haverworks/Theseus75/info.json b/keyboards/haverworks/Theseus75/info.json new file mode 100644 index 00000000000..f3431c1d0c1 --- /dev/null +++ b/keyboards/haverworks/Theseus75/info.json @@ -0,0 +1,224 @@ +{ + "keyboard_name": "Theseus75", + "manufacturer": "haverworks", + "maintainer": "ebastler", + "url": "https://haver.codes/", + "bootloader": "stm32-dfu", + "processor": "STM32G431", + "usb": { + "vid": "0x6877", + "pid": "0x0001", + "device_version": "1.0.0" + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "encoder": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["B11", "C15", "B6", "B5", "B4", "B3", "C11", "C10", "NO_PIN"], // NO_PIN is not actually used, but a pin to keep left and right matrix the same size + "rows": ["A9", "A10", "B15", "B12", "B13", "B14"] + }, + "encoder": { + "rotary": [ + {"pin_a": "A8", "pin_b": "C6", "resolution": 2} + ] + }, + "split": { + "matrix_pins": { + "right": { + "cols": ["A10", "A9", "A8", "C6", "B15", "B14", "B13", "B12", "C15"], + "rows": ["B3", "C10", "C11", "A1", "A0", "B6"] + } + }, + "encoder": { + "right": { + "rotary": [ + {"pin_a": "B5", "pin_b": "B4", "resolution": 2} + ] + } + } + }, + "rgblight": { + "led_count": 53, + "split": true, + "split_count": [27, 26], + "max_brightness": 128 + }, + "ws2812": { + "pin": "B7" + }, + "rgb_matrix": { + "driver": "WS2812", + "layout": [ + {"flags": 8, "matrix": [3, 1], "x": 32, "y": 34}, // L CAPS + {"flags": 2, "x": 28, "y": 1}, // Begin L side UG + {"flags": 2, "x": 43, "y": 1}, + {"flags": 2, "x": 56, "y": 1}, + {"flags": 2, "x": 69, "y": 1}, + {"flags": 2, "x": 84, "y": 1}, + {"flags": 2, "x": 99, "y": 1}, + {"flags": 2, "x": 97, "y": 8}, + {"flags": 2, "x": 91, "y": 19}, + {"flags": 2, "x": 91, "y": 31}, + {"flags": 2, "x": 92, "y": 42}, + {"flags": 2, "x": 96, "y": 53}, + {"flags": 2, "x": 97, "y": 64}, + {"flags": 2, "x": 81, "y": 64}, + {"flags": 2, "x": 66, "y": 64}, + {"flags": 2, "x": 53, "y": 64}, + {"flags": 2, "x": 40, "y": 64}, + {"flags": 2, "x": 26, "y": 64}, + {"flags": 2, "x": 13, "y": 64}, + {"flags": 2, "x": 0, "y": 64}, + {"flags": 2, "x": 0, "y": 53}, + {"flags": 2, "x": 0, "y": 42}, + {"flags": 2, "x": 0, "y": 31}, + {"flags": 2, "x": 0, "y": 19}, + {"flags": 2, "x": 0, "y": 9}, + {"flags": 2, "x": 0, "y": 1}, + {"flags": 2, "x": 13, "y": 1}, + + {"flags": 2, "x": 224, "y": 31}, // Begin right side UG + {"flags": 2, "x": 224, "y": 42}, + {"flags": 2, "x": 224, "y": 53}, + {"flags": 2, "x": 224, "y": 64}, + {"flags": 2, "x": 209, "y": 64}, + {"flags": 2, "x": 194, "y": 64}, + {"flags": 2, "x": 180, "y": 64}, + {"flags": 2, "x": 165, "y": 64}, + {"flags": 2, "x": 152, "y": 64}, + {"flags": 2, "x": 138, "y": 64}, + {"flags": 2, "x": 124, "y": 64}, + {"flags": 2, "x": 124, "y": 64}, + {"flags": 2, "x": 119, "y": 64}, + {"flags": 2, "x": 114, "y": 64}, + {"flags": 2, "x": 117, "y": 64}, + {"flags": 2, "x": 122, "y": 27}, + {"flags": 2, "x": 126, "y": 5}, + {"flags": 2, "x": 140, "y": 5}, + {"flags": 2, "x": 155, "y": 5}, + {"flags": 2, "x": 168, "y": 5}, + {"flags": 2, "x": 181, "y": 5}, + {"flags": 2, "x": 196, "y": 5}, + {"flags": 2, "x": 211, "y": 5}, + {"flags": 2, "x": 224, "y": 5}, + {"flags": 2, "x": 224, "y": 30}, + {"flags": 2, "x": 224, "y": 64} + ] + }, + "layouts": { + "LAYOUT_75XT_ALL": { + "layout": [ + ] + }, + "LAYOUT_75XT_HS": { + "layout": [ + {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0 }, // Row 0, Left + {"label": "ESC", "matrix": [0, 1], "x": 0, "y": 1.5 }, + {"label": "F1", "matrix": [0, 2], "x": 0, "y": 2.75 }, + {"label": "F2", "matrix": [0, 3], "x": 0, "y": 3.75 }, + {"label": "F3", "matrix": [0, 4], "x": 0, "y": 4.75 }, + {"label": "F4", "matrix": [0, 5], "x": 0, "y": 5.75 }, + {"label": "F5", "matrix": [0, 6], "x": 0, "y": 7 }, + {"label": "F6", "matrix": [0, 7], "x": 0, "y": 8 }, + {"label": "F7", "matrix": [6, 0], "x": 0, "y": 10 }, // Row 0, Right + {"label": "F8", "matrix": [6, 1], "x": 0, "y": 11 }, + {"label": "F9", "matrix": [6, 2], "x": 0, "y": 12.25 }, + {"label": "F10", "matrix": [6, 3], "x": 0, "y": 13.25 }, + {"label": "F11", "matrix": [6, 4], "x": 0, "y": 14.25 }, + {"label": "F12", "matrix": [6, 5], "x": 0, "y": 15.25 }, + {"label": "F13", "matrix": [6, 6], "x": 0, "y": 16.5 }, + {"label": "RENC", "matrix": [6, 8], "x": 0, "y": 18 }, + + {"label": "M1", "matrix": [1, 0], "x": 0, "y": 0 }, // Row 1, Left + {"label": "GRAV", "matrix": [1, 1], "x": 0, "y": 1.5 }, + {"label": "1", "matrix": [1, 2], "x": 0, "y": 2.5 }, + {"label": "2", "matrix": [1, 3], "x": 0, "y": 3.5 }, + {"label": "3", "matrix": [1, 4], "x": 0, "y": 4.5 }, + {"label": "4", "matrix": [1, 5], "x": 0, "y": 5.5 }, + {"label": "5", "matrix": [1, 6], "x": 0, "y": 6.5 }, + {"label": "6", "matrix": [1, 7], "x": 0, "y": 7.5 }, + {"label": "7", "matrix": [7, 0], "x": 0, "y": 9.5 }, // Row 1, Right + {"label": "8", "matrix": [7, 1], "x": 0, "y": 10.5 }, + {"label": "9", "matrix": [7, 2], "x": 0, "y": 11.5 }, + {"label": "0", "matrix": [7, 3], "x": 0, "y": 12.5 }, + {"label": "-", "matrix": [7, 4], "x": 0, "y": 13.5 }, + {"label": "=", "matrix": [7, 5], "x": 0, "y": 14.5 }, + {"label": "Back", "matrix": [7, 6], "x": 0, "y": 15.5 }, + {"label": "Del", "matrix": [7, 7], "x": 0, "y": 16.5 }, + {"label": "Home", "matrix": [6, 8], "x": 0, "y": 18 }, + + {"label": "M2", "matrix": [2, 0], "x": 0, "y": 0 }, // Row 2, Left + {"label": "Tab", "matrix": [2, 1], "x": 0, "y": 1.5, "w": 1.5 }, + {"label": "Q", "matrix": [2, 3], "x": 0, "y": 3 }, + {"label": "W", "matrix": [2, 4], "x": 0, "y": 4 }, + {"label": "E", "matrix": [2, 5], "x": 0, "y": 5 }, + {"label": "R", "matrix": [2, 6], "x": 0, "y": 6 }, + {"label": "T", "matrix": [2, 7], "x": 0, "y": 7 }, + {"label": "Y", "matrix": [8, 0], "x": 0, "y": 9 }, + {"label": "U", "matrix": [8, 1], "x": 0, "y": 10 }, // Row 2, Right + {"label": "I", "matrix": [8, 2], "x": 0, "y": 11 }, + {"label": "O", "matrix": [8, 3], "x": 0, "y": 12 }, + {"label": "P", "matrix": [8, 4], "x": 0, "y": 13 }, + {"label": "[", "matrix": [8, 5], "x": 0, "y": 14 }, + {"label": "]", "matrix": [8, 6], "x": 0, "y": 15 }, + {"label": "BSLS", "matrix": [8, 7], "x": 0, "y": 16, "w": 1.5 }, + {"label": "PgUp", "matrix": [8, 8], "x": 0, "y": 18 }, + + {"label": "M3", "matrix": [3, 0], "x": 0, "y": 0 }, // Row 3, Left + {"label": "Caps", "matrix": [3, 1], "x": 0, "y": 1.5, "w": 1.75 }, + {"label": "A", "matrix": [3, 3], "x": 0, "y": 3.25 }, + {"label": "S", "matrix": [3, 4], "x": 0, "y": 4.25 }, + {"label": "D", "matrix": [3, 5], "x": 0, "y": 5.25 }, + {"label": "F", "matrix": [3, 6], "x": 0, "y": 6.25 }, + {"label": "G", "matrix": [3, 7], "x": 0, "y": 7.25 }, + {"label": "H", "matrix": [9, 0], "x": 0, "y": 9.25 }, + {"label": "J", "matrix": [9, 1], "x": 0, "y": 10.25 }, // Row 3, Right + {"label": "K", "matrix": [9, 2], "x": 0, "y": 11.25 }, + {"label": "L", "matrix": [9, 3], "x": 0, "y": 12.25 }, + {"label": ";", "matrix": [9, 4], "x": 0, "y": 13.25 }, + {"label": "'", "matrix": [9, 5], "x": 0, "y": 14.25 }, + {"label":"Enter", "matrix": [9, 7], "x": 0, "y": 15.25, "w": 2.25 }, + {"label": "PgDn", "matrix": [9, 8], "x": 0, "y": 18 }, + + {"label": "M4", "matrix": [4, 0], "x": 0, "y": 0 }, // Row 4, Left + {"label":"Shift", "matrix": [4, 1], "x": 0, "y": 1.5, "w": 1.25 }, + {"label": "NUBS", "matrix": [4, 2], "x": 0, "y": 2.75 }, + {"label": "Z", "matrix": [4, 3], "x": 0, "y": 3.75 }, + {"label": "X", "matrix": [4, 4], "x": 0, "y": 4.75 }, + {"label": "C", "matrix": [4, 5], "x": 0, "y": 5.75 }, + {"label": "V", "matrix": [4, 6], "x": 0, "y": 6.75 }, + {"label": "B", "matrix": [4, 7], "x": 0, "y": 7.75 }, + {"label": "N", "matrix": [10, 0], "x": 0, "y": 9.75 }, // Row 4, Right + {"label": "M", "matrix": [10, 1], "x": 0, "y": 10.75 }, + {"label": ",", "matrix": [10, 2], "x": 0, "y": 11.75 }, + {"label": ".", "matrix": [10, 3], "x": 0, "y": 12.75 }, + {"label": "/", "matrix": [10, 4], "x": 0, "y": 13.75 }, + {"label":"Shift", "matrix": [10, 6], "x": 0, "y": 14.75, "w": 1.75 }, + {"label": "Up", "matrix": [10, 7], "x": 0, "y": 16.75 }, + {"label": "End", "matrix": [10, 8], "x": 0, "y": 18 }, + + {"label": "M5", "matrix": [5, 0], "x": 0, "y": 0 }, // Row 5, Left + {"label": "Ctrl", "matrix": [5, 1], "x": 0, "y": 1.5, "w": 1.25 }, + {"label": "Alt", "matrix": [5, 3], "x": 0, "y": 2.75 }, + {"label": "Gui", "matrix": [5, 4], "x": 0, "y": 3.75 }, + {"label":"Space", "matrix": [5, 7], "x": 0, "y": 4.75 }, + {"label": "FN", "matrix": [4, 5], "x": 0, "y": 5.75 }, + {"label":"Space", "matrix": [11, 1], "x": 0, "y": 9.75 }, // Row 5, Right + {"label": "Gui", "matrix": [11, 3], "x": 0, "y": 10.75 }, + {"label": "Alt", "matrix": [11, 4], "x": 0, "y": 11.75 }, + {"label": "Ctrl", "matrix": [11, 5], "x": 0, "y": 12.75 }, + {"label": "Left", "matrix": [11, 6], "x": 0, "y": 13.75 }, + {"label": "Down", "matrix": [11, 7], "x": 0, "y": 14.75, "w": 1.75 }, + {"label": "Rght", "matrix": [11, 8], "x": 0, "y": 16.75 } + + ] + } + } +} diff --git a/keyboards/haverworks/Theseus75/mcuconf.h b/keyboards/haverworks/Theseus75/mcuconf.h new file mode 100644 index 00000000000..98172cc99ad --- /dev/null +++ b/keyboards/haverworks/Theseus75/mcuconf.h @@ -0,0 +1,22 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include_next + +#undef STM32_SERIAL_USE_USART3 +#define STM32_SERIAL_USE_USART3 TRUE \ No newline at end of file From 128d840d32ea497b9e877464f91fa63525fa0eaf Mon Sep 17 00:00:00 2001 From: Moritz Date: Fri, 9 Jun 2023 16:03:13 +0200 Subject: [PATCH 02/53] add keymaps, fix board and layout names --- keyboards/haverworks/Theseus75/info.json | 224 -------- .../{Theseus75 => theseus75}/config.h | 0 .../{Theseus75 => theseus75}/halconf.h | 0 keyboards/haverworks/theseus75/info.json | 530 ++++++++++++++++++ .../theseus75/keymaps/ansi/keymap.c | 44 ++ .../theseus75/keymaps/ansi/rules.mk | 1 + .../theseus75/keymaps/default/keymap.c | 44 ++ .../theseus75/keymaps/default/rules.mk | 1 + .../theseus75/keymaps/hotswap/keymap.c | 44 ++ .../theseus75/keymaps/hotswap/rules.mk | 1 + .../haverworks/theseus75/keymaps/iso/keymap.c | 44 ++ .../haverworks/theseus75/keymaps/iso/rules.mk | 1 + .../haverworks/theseus75/keymaps/via/keymap.c | 44 ++ .../haverworks/theseus75/keymaps/via/rules.mk | 2 + .../{Theseus75 => theseus75}/mcuconf.h | 0 keyboards/haverworks/theseus75/rules.mk | 1 + keyboards/haverworks/theseus75/theseus75.c | 13 + 17 files changed, 770 insertions(+), 224 deletions(-) delete mode 100644 keyboards/haverworks/Theseus75/info.json rename keyboards/haverworks/{Theseus75 => theseus75}/config.h (100%) rename keyboards/haverworks/{Theseus75 => theseus75}/halconf.h (100%) create mode 100644 keyboards/haverworks/theseus75/info.json create mode 100644 keyboards/haverworks/theseus75/keymaps/ansi/keymap.c create mode 100644 keyboards/haverworks/theseus75/keymaps/ansi/rules.mk create mode 100644 keyboards/haverworks/theseus75/keymaps/default/keymap.c create mode 100644 keyboards/haverworks/theseus75/keymaps/default/rules.mk create mode 100644 keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c create mode 100644 keyboards/haverworks/theseus75/keymaps/hotswap/rules.mk create mode 100644 keyboards/haverworks/theseus75/keymaps/iso/keymap.c create mode 100644 keyboards/haverworks/theseus75/keymaps/iso/rules.mk create mode 100644 keyboards/haverworks/theseus75/keymaps/via/keymap.c create mode 100644 keyboards/haverworks/theseus75/keymaps/via/rules.mk rename keyboards/haverworks/{Theseus75 => theseus75}/mcuconf.h (100%) create mode 100644 keyboards/haverworks/theseus75/rules.mk create mode 100644 keyboards/haverworks/theseus75/theseus75.c diff --git a/keyboards/haverworks/Theseus75/info.json b/keyboards/haverworks/Theseus75/info.json deleted file mode 100644 index f3431c1d0c1..00000000000 --- a/keyboards/haverworks/Theseus75/info.json +++ /dev/null @@ -1,224 +0,0 @@ -{ - "keyboard_name": "Theseus75", - "manufacturer": "haverworks", - "maintainer": "ebastler", - "url": "https://haver.codes/", - "bootloader": "stm32-dfu", - "processor": "STM32G431", - "usb": { - "vid": "0x6877", - "pid": "0x0001", - "device_version": "1.0.0" - }, - "features": { - "bootmagic": true, - "command": false, - "console": false, - "extrakey": true, - "mousekey": true, - "nkro": true, - "encoder": true - }, - "diode_direction": "COL2ROW", - "matrix_pins": { - "cols": ["B11", "C15", "B6", "B5", "B4", "B3", "C11", "C10", "NO_PIN"], // NO_PIN is not actually used, but a pin to keep left and right matrix the same size - "rows": ["A9", "A10", "B15", "B12", "B13", "B14"] - }, - "encoder": { - "rotary": [ - {"pin_a": "A8", "pin_b": "C6", "resolution": 2} - ] - }, - "split": { - "matrix_pins": { - "right": { - "cols": ["A10", "A9", "A8", "C6", "B15", "B14", "B13", "B12", "C15"], - "rows": ["B3", "C10", "C11", "A1", "A0", "B6"] - } - }, - "encoder": { - "right": { - "rotary": [ - {"pin_a": "B5", "pin_b": "B4", "resolution": 2} - ] - } - } - }, - "rgblight": { - "led_count": 53, - "split": true, - "split_count": [27, 26], - "max_brightness": 128 - }, - "ws2812": { - "pin": "B7" - }, - "rgb_matrix": { - "driver": "WS2812", - "layout": [ - {"flags": 8, "matrix": [3, 1], "x": 32, "y": 34}, // L CAPS - {"flags": 2, "x": 28, "y": 1}, // Begin L side UG - {"flags": 2, "x": 43, "y": 1}, - {"flags": 2, "x": 56, "y": 1}, - {"flags": 2, "x": 69, "y": 1}, - {"flags": 2, "x": 84, "y": 1}, - {"flags": 2, "x": 99, "y": 1}, - {"flags": 2, "x": 97, "y": 8}, - {"flags": 2, "x": 91, "y": 19}, - {"flags": 2, "x": 91, "y": 31}, - {"flags": 2, "x": 92, "y": 42}, - {"flags": 2, "x": 96, "y": 53}, - {"flags": 2, "x": 97, "y": 64}, - {"flags": 2, "x": 81, "y": 64}, - {"flags": 2, "x": 66, "y": 64}, - {"flags": 2, "x": 53, "y": 64}, - {"flags": 2, "x": 40, "y": 64}, - {"flags": 2, "x": 26, "y": 64}, - {"flags": 2, "x": 13, "y": 64}, - {"flags": 2, "x": 0, "y": 64}, - {"flags": 2, "x": 0, "y": 53}, - {"flags": 2, "x": 0, "y": 42}, - {"flags": 2, "x": 0, "y": 31}, - {"flags": 2, "x": 0, "y": 19}, - {"flags": 2, "x": 0, "y": 9}, - {"flags": 2, "x": 0, "y": 1}, - {"flags": 2, "x": 13, "y": 1}, - - {"flags": 2, "x": 224, "y": 31}, // Begin right side UG - {"flags": 2, "x": 224, "y": 42}, - {"flags": 2, "x": 224, "y": 53}, - {"flags": 2, "x": 224, "y": 64}, - {"flags": 2, "x": 209, "y": 64}, - {"flags": 2, "x": 194, "y": 64}, - {"flags": 2, "x": 180, "y": 64}, - {"flags": 2, "x": 165, "y": 64}, - {"flags": 2, "x": 152, "y": 64}, - {"flags": 2, "x": 138, "y": 64}, - {"flags": 2, "x": 124, "y": 64}, - {"flags": 2, "x": 124, "y": 64}, - {"flags": 2, "x": 119, "y": 64}, - {"flags": 2, "x": 114, "y": 64}, - {"flags": 2, "x": 117, "y": 64}, - {"flags": 2, "x": 122, "y": 27}, - {"flags": 2, "x": 126, "y": 5}, - {"flags": 2, "x": 140, "y": 5}, - {"flags": 2, "x": 155, "y": 5}, - {"flags": 2, "x": 168, "y": 5}, - {"flags": 2, "x": 181, "y": 5}, - {"flags": 2, "x": 196, "y": 5}, - {"flags": 2, "x": 211, "y": 5}, - {"flags": 2, "x": 224, "y": 5}, - {"flags": 2, "x": 224, "y": 30}, - {"flags": 2, "x": 224, "y": 64} - ] - }, - "layouts": { - "LAYOUT_75XT_ALL": { - "layout": [ - ] - }, - "LAYOUT_75XT_HS": { - "layout": [ - {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0 }, // Row 0, Left - {"label": "ESC", "matrix": [0, 1], "x": 0, "y": 1.5 }, - {"label": "F1", "matrix": [0, 2], "x": 0, "y": 2.75 }, - {"label": "F2", "matrix": [0, 3], "x": 0, "y": 3.75 }, - {"label": "F3", "matrix": [0, 4], "x": 0, "y": 4.75 }, - {"label": "F4", "matrix": [0, 5], "x": 0, "y": 5.75 }, - {"label": "F5", "matrix": [0, 6], "x": 0, "y": 7 }, - {"label": "F6", "matrix": [0, 7], "x": 0, "y": 8 }, - {"label": "F7", "matrix": [6, 0], "x": 0, "y": 10 }, // Row 0, Right - {"label": "F8", "matrix": [6, 1], "x": 0, "y": 11 }, - {"label": "F9", "matrix": [6, 2], "x": 0, "y": 12.25 }, - {"label": "F10", "matrix": [6, 3], "x": 0, "y": 13.25 }, - {"label": "F11", "matrix": [6, 4], "x": 0, "y": 14.25 }, - {"label": "F12", "matrix": [6, 5], "x": 0, "y": 15.25 }, - {"label": "F13", "matrix": [6, 6], "x": 0, "y": 16.5 }, - {"label": "RENC", "matrix": [6, 8], "x": 0, "y": 18 }, - - {"label": "M1", "matrix": [1, 0], "x": 0, "y": 0 }, // Row 1, Left - {"label": "GRAV", "matrix": [1, 1], "x": 0, "y": 1.5 }, - {"label": "1", "matrix": [1, 2], "x": 0, "y": 2.5 }, - {"label": "2", "matrix": [1, 3], "x": 0, "y": 3.5 }, - {"label": "3", "matrix": [1, 4], "x": 0, "y": 4.5 }, - {"label": "4", "matrix": [1, 5], "x": 0, "y": 5.5 }, - {"label": "5", "matrix": [1, 6], "x": 0, "y": 6.5 }, - {"label": "6", "matrix": [1, 7], "x": 0, "y": 7.5 }, - {"label": "7", "matrix": [7, 0], "x": 0, "y": 9.5 }, // Row 1, Right - {"label": "8", "matrix": [7, 1], "x": 0, "y": 10.5 }, - {"label": "9", "matrix": [7, 2], "x": 0, "y": 11.5 }, - {"label": "0", "matrix": [7, 3], "x": 0, "y": 12.5 }, - {"label": "-", "matrix": [7, 4], "x": 0, "y": 13.5 }, - {"label": "=", "matrix": [7, 5], "x": 0, "y": 14.5 }, - {"label": "Back", "matrix": [7, 6], "x": 0, "y": 15.5 }, - {"label": "Del", "matrix": [7, 7], "x": 0, "y": 16.5 }, - {"label": "Home", "matrix": [6, 8], "x": 0, "y": 18 }, - - {"label": "M2", "matrix": [2, 0], "x": 0, "y": 0 }, // Row 2, Left - {"label": "Tab", "matrix": [2, 1], "x": 0, "y": 1.5, "w": 1.5 }, - {"label": "Q", "matrix": [2, 3], "x": 0, "y": 3 }, - {"label": "W", "matrix": [2, 4], "x": 0, "y": 4 }, - {"label": "E", "matrix": [2, 5], "x": 0, "y": 5 }, - {"label": "R", "matrix": [2, 6], "x": 0, "y": 6 }, - {"label": "T", "matrix": [2, 7], "x": 0, "y": 7 }, - {"label": "Y", "matrix": [8, 0], "x": 0, "y": 9 }, - {"label": "U", "matrix": [8, 1], "x": 0, "y": 10 }, // Row 2, Right - {"label": "I", "matrix": [8, 2], "x": 0, "y": 11 }, - {"label": "O", "matrix": [8, 3], "x": 0, "y": 12 }, - {"label": "P", "matrix": [8, 4], "x": 0, "y": 13 }, - {"label": "[", "matrix": [8, 5], "x": 0, "y": 14 }, - {"label": "]", "matrix": [8, 6], "x": 0, "y": 15 }, - {"label": "BSLS", "matrix": [8, 7], "x": 0, "y": 16, "w": 1.5 }, - {"label": "PgUp", "matrix": [8, 8], "x": 0, "y": 18 }, - - {"label": "M3", "matrix": [3, 0], "x": 0, "y": 0 }, // Row 3, Left - {"label": "Caps", "matrix": [3, 1], "x": 0, "y": 1.5, "w": 1.75 }, - {"label": "A", "matrix": [3, 3], "x": 0, "y": 3.25 }, - {"label": "S", "matrix": [3, 4], "x": 0, "y": 4.25 }, - {"label": "D", "matrix": [3, 5], "x": 0, "y": 5.25 }, - {"label": "F", "matrix": [3, 6], "x": 0, "y": 6.25 }, - {"label": "G", "matrix": [3, 7], "x": 0, "y": 7.25 }, - {"label": "H", "matrix": [9, 0], "x": 0, "y": 9.25 }, - {"label": "J", "matrix": [9, 1], "x": 0, "y": 10.25 }, // Row 3, Right - {"label": "K", "matrix": [9, 2], "x": 0, "y": 11.25 }, - {"label": "L", "matrix": [9, 3], "x": 0, "y": 12.25 }, - {"label": ";", "matrix": [9, 4], "x": 0, "y": 13.25 }, - {"label": "'", "matrix": [9, 5], "x": 0, "y": 14.25 }, - {"label":"Enter", "matrix": [9, 7], "x": 0, "y": 15.25, "w": 2.25 }, - {"label": "PgDn", "matrix": [9, 8], "x": 0, "y": 18 }, - - {"label": "M4", "matrix": [4, 0], "x": 0, "y": 0 }, // Row 4, Left - {"label":"Shift", "matrix": [4, 1], "x": 0, "y": 1.5, "w": 1.25 }, - {"label": "NUBS", "matrix": [4, 2], "x": 0, "y": 2.75 }, - {"label": "Z", "matrix": [4, 3], "x": 0, "y": 3.75 }, - {"label": "X", "matrix": [4, 4], "x": 0, "y": 4.75 }, - {"label": "C", "matrix": [4, 5], "x": 0, "y": 5.75 }, - {"label": "V", "matrix": [4, 6], "x": 0, "y": 6.75 }, - {"label": "B", "matrix": [4, 7], "x": 0, "y": 7.75 }, - {"label": "N", "matrix": [10, 0], "x": 0, "y": 9.75 }, // Row 4, Right - {"label": "M", "matrix": [10, 1], "x": 0, "y": 10.75 }, - {"label": ",", "matrix": [10, 2], "x": 0, "y": 11.75 }, - {"label": ".", "matrix": [10, 3], "x": 0, "y": 12.75 }, - {"label": "/", "matrix": [10, 4], "x": 0, "y": 13.75 }, - {"label":"Shift", "matrix": [10, 6], "x": 0, "y": 14.75, "w": 1.75 }, - {"label": "Up", "matrix": [10, 7], "x": 0, "y": 16.75 }, - {"label": "End", "matrix": [10, 8], "x": 0, "y": 18 }, - - {"label": "M5", "matrix": [5, 0], "x": 0, "y": 0 }, // Row 5, Left - {"label": "Ctrl", "matrix": [5, 1], "x": 0, "y": 1.5, "w": 1.25 }, - {"label": "Alt", "matrix": [5, 3], "x": 0, "y": 2.75 }, - {"label": "Gui", "matrix": [5, 4], "x": 0, "y": 3.75 }, - {"label":"Space", "matrix": [5, 7], "x": 0, "y": 4.75 }, - {"label": "FN", "matrix": [4, 5], "x": 0, "y": 5.75 }, - {"label":"Space", "matrix": [11, 1], "x": 0, "y": 9.75 }, // Row 5, Right - {"label": "Gui", "matrix": [11, 3], "x": 0, "y": 10.75 }, - {"label": "Alt", "matrix": [11, 4], "x": 0, "y": 11.75 }, - {"label": "Ctrl", "matrix": [11, 5], "x": 0, "y": 12.75 }, - {"label": "Left", "matrix": [11, 6], "x": 0, "y": 13.75 }, - {"label": "Down", "matrix": [11, 7], "x": 0, "y": 14.75, "w": 1.75 }, - {"label": "Rght", "matrix": [11, 8], "x": 0, "y": 16.75 } - - ] - } - } -} diff --git a/keyboards/haverworks/Theseus75/config.h b/keyboards/haverworks/theseus75/config.h similarity index 100% rename from keyboards/haverworks/Theseus75/config.h rename to keyboards/haverworks/theseus75/config.h diff --git a/keyboards/haverworks/Theseus75/halconf.h b/keyboards/haverworks/theseus75/halconf.h similarity index 100% rename from keyboards/haverworks/Theseus75/halconf.h rename to keyboards/haverworks/theseus75/halconf.h diff --git a/keyboards/haverworks/theseus75/info.json b/keyboards/haverworks/theseus75/info.json new file mode 100644 index 00000000000..56dc14ee947 --- /dev/null +++ b/keyboards/haverworks/theseus75/info.json @@ -0,0 +1,530 @@ +{ + "keyboard_name": "Theseus75", + "manufacturer": "haverworks", + "maintainer": "ebastler", + "url": "https://haver.codes/", + "bootloader": "stm32-dfu", + "processor": "STM32G431", + "usb": { + "vid": "0x6877", + "pid": "0x0001", + "device_version": "1.0.0" + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "encoder": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["B11", "C15", "B6", "B5", "B4", "B3", "C11", "C10", "NO_PIN"], // NO_PIN is not actually used, but a pin to keep left and right matrix the same size + "rows": ["A9", "A10", "B15", "B12", "B13", "B14"] + }, + "bootmagic": { + "matrix": [0, 1] + }, + "encoder": { + "rotary": [ + {"pin_a": "A8", "pin_b": "C6", "resolution": 2} + ] + }, + "split": { + "matrix_pins": { + "right": { + "cols": ["A10", "A9", "A8", "C6", "B15", "B14", "B13", "B12", "C15"], + "rows": ["B3", "C10", "C11", "A1", "A0", "B6"] + } + }, + "bootmagic": { + "matrix": [6, 6] + }, + "encoder": { + "right": { + "rotary": [ + {"pin_a": "B5", "pin_b": "B4", "resolution": 2} + ] + } + } + }, + "rgblight": { + "led_count": 53, + "split": true, + "split_count": [27, 26], + "max_brightness": 128 + }, + "ws2812": { + "pin": "B7" + }, + "rgb_matrix": { + "driver": "WS2812", + "layout": [ + {"flags": 8, "matrix": [3, 1], "x": 32, "y": 34}, // L CAPS + {"flags": 2, "x": 28, "y": 1}, // Begin L side UG + {"flags": 2, "x": 43, "y": 1}, + {"flags": 2, "x": 56, "y": 1}, + {"flags": 2, "x": 69, "y": 1}, + {"flags": 2, "x": 84, "y": 1}, + {"flags": 2, "x": 99, "y": 1}, + {"flags": 2, "x": 97, "y": 8}, + {"flags": 2, "x": 91, "y": 19}, + {"flags": 2, "x": 91, "y": 31}, + {"flags": 2, "x": 92, "y": 42}, + {"flags": 2, "x": 96, "y": 53}, + {"flags": 2, "x": 97, "y": 64}, + {"flags": 2, "x": 81, "y": 64}, + {"flags": 2, "x": 66, "y": 64}, + {"flags": 2, "x": 53, "y": 64}, + {"flags": 2, "x": 40, "y": 64}, + {"flags": 2, "x": 26, "y": 64}, + {"flags": 2, "x": 13, "y": 64}, + {"flags": 2, "x": 0, "y": 64}, + {"flags": 2, "x": 0, "y": 53}, + {"flags": 2, "x": 0, "y": 42}, + {"flags": 2, "x": 0, "y": 31}, + {"flags": 2, "x": 0, "y": 19}, + {"flags": 2, "x": 0, "y": 9}, + {"flags": 2, "x": 0, "y": 1}, + {"flags": 2, "x": 13, "y": 1}, + + {"flags": 2, "x": 224, "y": 31}, // Begin right side UG + {"flags": 2, "x": 224, "y": 42}, + {"flags": 2, "x": 224, "y": 53}, + {"flags": 2, "x": 224, "y": 64}, + {"flags": 2, "x": 209, "y": 64}, + {"flags": 2, "x": 194, "y": 64}, + {"flags": 2, "x": 180, "y": 64}, + {"flags": 2, "x": 165, "y": 64}, + {"flags": 2, "x": 152, "y": 64}, + {"flags": 2, "x": 138, "y": 64}, + {"flags": 2, "x": 124, "y": 64}, + {"flags": 2, "x": 124, "y": 64}, + {"flags": 2, "x": 119, "y": 64}, + {"flags": 2, "x": 114, "y": 64}, + {"flags": 2, "x": 117, "y": 64}, + {"flags": 2, "x": 122, "y": 27}, + {"flags": 2, "x": 126, "y": 5}, + {"flags": 2, "x": 140, "y": 5}, + {"flags": 2, "x": 155, "y": 5}, + {"flags": 2, "x": 168, "y": 5}, + {"flags": 2, "x": 181, "y": 5}, + {"flags": 2, "x": 196, "y": 5}, + {"flags": 2, "x": 211, "y": 5}, + {"flags": 2, "x": 224, "y": 5}, + {"flags": 2, "x": 224, "y": 30}, + {"flags": 2, "x": 224, "y": 64} + ] + }, + "layouts": { + "LAYOUT_75xt_all": { // This layout works on both HS and solder PCBs, for ISO and ANSI switch layouts + "layout": [ + {"label": "LENC", "matrix": [ 0, 0], "y": 0, "x": 0 }, // Row 0, Left + {"label": "ESC", "matrix": [ 0, 1], "y": 0, "x": 1.5 }, + {"label": "F1", "matrix": [ 0, 2], "y": 0, "x": 2.75 }, + {"label": "F2", "matrix": [ 0, 3], "y": 0, "x": 3.75 }, + {"label": "F3", "matrix": [ 0, 4], "y": 0, "x": 4.75 }, + {"label": "F4", "matrix": [ 0, 5], "y": 0, "x": 5.75 }, + {"label": "F5", "matrix": [ 0, 6], "y": 0, "x": 7 }, + {"label": "F6", "matrix": [ 0, 7], "y": 0, "x": 8 }, + {"label": "F7", "matrix": [ 6, 0], "y": 0, "x": 10 }, // Row 0, Right + {"label": "F8", "matrix": [ 6, 1], "y": 0, "x": 11 }, + {"label": "F9", "matrix": [ 6, 2], "y": 0, "x": 12.25 }, + {"label": "F10", "matrix": [ 6, 3], "y": 0, "x": 13.25 }, + {"label": "F11", "matrix": [ 6, 4], "y": 0, "x": 14.25 }, + {"label": "F12", "matrix": [ 6, 5], "y": 0, "x": 15.25 }, + {"label": "F13", "matrix": [ 6, 6], "y": 0, "x": 16.5 }, + {"label": "RENC", "matrix": [ 6, 8], "y": 0, "x": 18 }, + + {"label": "M1", "matrix": [ 1, 0], "y": 1, "x": 0 }, // Row 1, Left + {"label": "GRAV", "matrix": [ 1, 1], "y": 1, "x": 1.5 }, + {"label": "1", "matrix": [ 1, 2], "y": 1, "x": 2.5 }, + {"label": "2", "matrix": [ 1, 3], "y": 1, "x": 3.5 }, + {"label": "3", "matrix": [ 1, 4], "y": 1, "x": 4.5 }, + {"label": "4", "matrix": [ 1, 5], "y": 1, "x": 5.5 }, + {"label": "5", "matrix": [ 1, 6], "y": 1, "x": 6.5 }, + {"label": "6", "matrix": [ 1, 7], "y": 1, "x": 7.5 }, + {"label": "7", "matrix": [ 7, 0], "y": 1, "x": 9.5 }, // Row 1, Right + {"label": "8", "matrix": [ 7, 1], "y": 1, "x": 10.5 }, + {"label": "9", "matrix": [ 7, 2], "y": 1, "x": 11.5 }, + {"label": "0", "matrix": [ 7, 3], "y": 1, "x": 12.5 }, + {"label": "-", "matrix": [ 7, 4], "y": 1, "x": 13.5 }, + {"label": "=", "matrix": [ 7, 5], "y": 1, "x": 14.5 }, + {"label": "Back", "matrix": [ 7, 6], "y": 1, "x": 15.5 }, + {"label": "Del", "matrix": [ 7, 7], "y": 1, "x": 16.5 }, + {"label": "Home", "matrix": [ 6, 8], "y": 1, "x": 18 }, + + {"label": "M2", "matrix": [ 2, 0], "y": 2, "x": 0 }, // Row 2, Left + {"label": "Tab", "matrix": [ 2, 1], "y": 2, "x": 1.5, "w": 1.5 }, + {"label": "Q", "matrix": [ 2, 3], "y": 2, "x": 3 }, + {"label": "W", "matrix": [ 2, 4], "y": 2, "x": 4 }, + {"label": "E", "matrix": [ 2, 5], "y": 2, "x": 5 }, + {"label": "R", "matrix": [ 2, 6], "y": 2, "x": 6 }, + {"label": "T", "matrix": [ 2, 7], "y": 2, "x": 7 }, + {"label": "Y", "matrix": [ 8, 0], "y": 2, "x": 9 }, + {"label": "U", "matrix": [ 8, 1], "y": 2, "x": 10 }, // Row 2, Right + {"label": "I", "matrix": [ 8, 2], "y": 2, "x": 11 }, + {"label": "O", "matrix": [ 8, 3], "y": 2, "x": 12 }, + {"label": "P", "matrix": [ 8, 4], "y": 2, "x": 13 }, + {"label": "[", "matrix": [ 8, 5], "y": 2, "x": 14 }, + {"label": "]", "matrix": [ 8, 6], "y": 2, "x": 15 }, + {"label": "BSLS", "matrix": [ 8, 7], "y": 2, "x": 16, "w": 1.5 }, + {"label": "PgUp", "matrix": [ 8, 8], "y": 2, "x": 18 }, + + {"label": "M3", "matrix": [ 3, 0], "y": 3, "x": 0 }, // Row 3, Left + {"label": "Caps", "matrix": [ 3, 1], "y": 3, "x": 1.5, "w": 1.75 }, + {"label": "A", "matrix": [ 3, 3], "y": 3, "x": 3.25 }, + {"label": "S", "matrix": [ 3, 4], "y": 3, "x": 4.25 }, + {"label": "D", "matrix": [ 3, 5], "y": 3, "x": 5.25 }, + {"label": "F", "matrix": [ 3, 6], "y": 3, "x": 6.25 }, + {"label": "G", "matrix": [ 3, 7], "y": 3, "x": 7.25 }, + {"label": "H", "matrix": [ 9, 0], "y": 3, "x": 9.25 }, + {"label": "J", "matrix": [ 9, 1], "y": 3, "x": 10.25 }, // Row 3, Right + {"label": "K", "matrix": [ 9, 2], "y": 3, "x": 11.25 }, + {"label": "L", "matrix": [ 9, 3], "y": 3, "x": 12.25 }, + {"label": ";", "matrix": [ 9, 4], "y": 3, "x": 13.25 }, + {"label": "'", "matrix": [ 9, 5], "y": 3, "x": 14.25 }, + {"label": "NUHS", "matrix": [ 9, 6], "y": 3, "x": 15.25 }, + {"label":"Enter", "matrix": [ 9, 7], "y": 3, "x": 16.25, "w": 1.25 }, + {"label": "PgDn", "matrix": [ 9, 8], "y": 3, "x": 18 }, + + {"label": "M4", "matrix": [ 4, 0], "y": 4, "x": 0 }, // Row 4, Left + {"label":"Shift", "matrix": [ 4, 1], "y": 4, "x": 1.5, "w": 1.25 }, + {"label": "NUBS", "matrix": [ 4, 2], "y": 4, "x": 2.75 }, + {"label": "Z", "matrix": [ 4, 3], "y": 4, "x": 3.75 }, + {"label": "X", "matrix": [ 4, 4], "y": 4, "x": 4.75 }, + {"label": "C", "matrix": [ 4, 5], "y": 4, "x": 5.75 }, + {"label": "V", "matrix": [ 4, 6], "y": 4, "x": 6.75 }, + {"label": "B", "matrix": [ 4, 7], "y": 4, "x": 7.75 }, + {"label": "N", "matrix": [10, 0], "y": 4, "x": 9.75 }, // Row 4, Right + {"label": "M", "matrix": [10, 1], "y": 4, "x": 10.75 }, + {"label": ",", "matrix": [10, 2], "y": 4, "x": 11.75 }, + {"label": ".", "matrix": [10, 3], "y": 4, "x": 12.75 }, + {"label": "/", "matrix": [10, 4], "y": 4, "x": 13.75 }, + {"label":"Shift", "matrix": [10, 6], "y": 4, "x": 14.75, "w": 1.75 }, + {"label": "Up", "matrix": [10, 7], "y": 4, "x": 16.75 }, + {"label": "End", "matrix": [10, 8], "y": 4, "x": 18 }, + + {"label": "M5", "matrix": [ 5, 0], "y": 5, "x": 0 }, // Row 5, Left + {"label": "Ctrl", "matrix": [ 5, 1], "y": 5, "x": 1.5, "w": 1.25 }, + {"label": "Gui", "matrix": [ 5, 3], "y": 5, "x": 2.75, "w": 1.25 }, + {"label": "Alt", "matrix": [ 5, 4], "y": 5, "x": 4, "w": 1.25 }, + {"label":"Space", "matrix": [ 5, 7], "y": 5, "x": 5.25, "w": 2.25 }, + {"label": "FN", "matrix": [ 4, 5], "y": 5, "x": 7.5, "w": 1.25 }, + {"label":"Space", "matrix": [11, 1], "y": 5, "x": 9.75, "w": 2.75 }, // Row 5, Right + {"label": "Alt", "matrix": [11, 3], "y": 5, "x": 12.5 }, + {"label": "Gui", "matrix": [11, 4], "y": 5, "x": 13.5 }, + {"label": "Ctrl", "matrix": [11, 5], "y": 5, "x": 14.5 }, + {"label": "Left", "matrix": [11, 6], "y": 5, "x": 15.75 }, + {"label": "Down", "matrix": [11, 7], "y": 5, "x": 16.75 }, + {"label": "Rght", "matrix": [11, 8], "y": 5, "x": 17.75 } + ] + }, + "LAYOUT_75xt_hs_all": { // This layout enables all keys found on a HS PCB, incl ISO lshift + "layout": [ + {"label": "LENC", "matrix": [ 0, 0], "y": 0, "x": 0 }, // Row 0, Left + {"label": "ESC", "matrix": [ 0, 1], "y": 0, "x": 1.5 }, + {"label": "F1", "matrix": [ 0, 2], "y": 0, "x": 2.75 }, + {"label": "F2", "matrix": [ 0, 3], "y": 0, "x": 3.75 }, + {"label": "F3", "matrix": [ 0, 4], "y": 0, "x": 4.75 }, + {"label": "F4", "matrix": [ 0, 5], "y": 0, "x": 5.75 }, + {"label": "F5", "matrix": [ 0, 6], "y": 0, "x": 7 }, + {"label": "F6", "matrix": [ 0, 7], "y": 0, "x": 8 }, + {"label": "F7", "matrix": [ 6, 0], "y": 0, "x": 10 }, // Row 0, Right + {"label": "F8", "matrix": [ 6, 1], "y": 0, "x": 11 }, + {"label": "F9", "matrix": [ 6, 2], "y": 0, "x": 12.25 }, + {"label": "F10", "matrix": [ 6, 3], "y": 0, "x": 13.25 }, + {"label": "F11", "matrix": [ 6, 4], "y": 0, "x": 14.25 }, + {"label": "F12", "matrix": [ 6, 5], "y": 0, "x": 15.25 }, + {"label": "F13", "matrix": [ 6, 6], "y": 0, "x": 16.5 }, + {"label": "RENC", "matrix": [ 6, 8], "y": 0, "x": 18 }, + + {"label": "M1", "matrix": [ 1, 0], "y": 1, "x": 0 }, // Row 1, Left + {"label": "GRAV", "matrix": [ 1, 1], "y": 1, "x": 1.5 }, + {"label": "1", "matrix": [ 1, 2], "y": 1, "x": 2.5 }, + {"label": "2", "matrix": [ 1, 3], "y": 1, "x": 3.5 }, + {"label": "3", "matrix": [ 1, 4], "y": 1, "x": 4.5 }, + {"label": "4", "matrix": [ 1, 5], "y": 1, "x": 5.5 }, + {"label": "5", "matrix": [ 1, 6], "y": 1, "x": 6.5 }, + {"label": "6", "matrix": [ 1, 7], "y": 1, "x": 7.5 }, + {"label": "7", "matrix": [ 7, 0], "y": 1, "x": 9.5 }, // Row 1, Right + {"label": "8", "matrix": [ 7, 1], "y": 1, "x": 10.5 }, + {"label": "9", "matrix": [ 7, 2], "y": 1, "x": 11.5 }, + {"label": "0", "matrix": [ 7, 3], "y": 1, "x": 12.5 }, + {"label": "-", "matrix": [ 7, 4], "y": 1, "x": 13.5 }, + {"label": "=", "matrix": [ 7, 5], "y": 1, "x": 14.5 }, + {"label": "Back", "matrix": [ 7, 6], "y": 1, "x": 15.5 }, + {"label": "Del", "matrix": [ 7, 7], "y": 1, "x": 16.5 }, + {"label": "Home", "matrix": [ 6, 8], "y": 1, "x": 18 }, + + {"label": "M2", "matrix": [ 2, 0], "y": 2, "x": 0 }, // Row 2, Left + {"label": "Tab", "matrix": [ 2, 1], "y": 2, "x": 1.5, "w": 1.5 }, + {"label": "Q", "matrix": [ 2, 3], "y": 2, "x": 3 }, + {"label": "W", "matrix": [ 2, 4], "y": 2, "x": 4 }, + {"label": "E", "matrix": [ 2, 5], "y": 2, "x": 5 }, + {"label": "R", "matrix": [ 2, 6], "y": 2, "x": 6 }, + {"label": "T", "matrix": [ 2, 7], "y": 2, "x": 7 }, + {"label": "Y", "matrix": [ 8, 0], "y": 2, "x": 9 }, + {"label": "U", "matrix": [ 8, 1], "y": 2, "x": 10 }, // Row 2, Right + {"label": "I", "matrix": [ 8, 2], "y": 2, "x": 11 }, + {"label": "O", "matrix": [ 8, 3], "y": 2, "x": 12 }, + {"label": "P", "matrix": [ 8, 4], "y": 2, "x": 13 }, + {"label": "[", "matrix": [ 8, 5], "y": 2, "x": 14 }, + {"label": "]", "matrix": [ 8, 6], "y": 2, "x": 15 }, + {"label": "BSLS", "matrix": [ 8, 7], "y": 2, "x": 16, "w": 1.5 }, + {"label": "PgUp", "matrix": [ 8, 8], "y": 2, "x": 18 }, + + {"label": "M3", "matrix": [ 3, 0], "y": 3, "x": 0 }, // Row 3, Left + {"label": "Caps", "matrix": [ 3, 1], "y": 3, "x": 1.5, "w": 1.75 }, + {"label": "A", "matrix": [ 3, 3], "y": 3, "x": 3.25 }, + {"label": "S", "matrix": [ 3, 4], "y": 3, "x": 4.25 }, + {"label": "D", "matrix": [ 3, 5], "y": 3, "x": 5.25 }, + {"label": "F", "matrix": [ 3, 6], "y": 3, "x": 6.25 }, + {"label": "G", "matrix": [ 3, 7], "y": 3, "x": 7.25 }, + {"label": "H", "matrix": [ 9, 0], "y": 3, "x": 9.25 }, + {"label": "J", "matrix": [ 9, 1], "y": 3, "x": 10.25 }, // Row 3, Right + {"label": "K", "matrix": [ 9, 2], "y": 3, "x": 11.25 }, + {"label": "L", "matrix": [ 9, 3], "y": 3, "x": 12.25 }, + {"label": ";", "matrix": [ 9, 4], "y": 3, "x": 13.25 }, + {"label": "'", "matrix": [ 9, 5], "y": 3, "x": 14.25 }, + {"label":"Enter", "matrix": [ 9, 7], "y": 3, "x": 15.25, "w": 2.25 }, + {"label": "PgDn", "matrix": [ 9, 8], "y": 3, "x": 18 }, + + {"label": "M4", "matrix": [ 4, 0], "y": 4, "x": 0 }, // Row 4, Left + {"label":"Shift", "matrix": [ 4, 1], "y": 4, "x": 1.5, "w": 1.25 }, + {"label": "NUBS", "matrix": [ 4, 2], "y": 4, "x": 2.75 }, + {"label": "Z", "matrix": [ 4, 3], "y": 4, "x": 3.75 }, + {"label": "X", "matrix": [ 4, 4], "y": 4, "x": 4.75 }, + {"label": "C", "matrix": [ 4, 5], "y": 4, "x": 5.75 }, + {"label": "V", "matrix": [ 4, 6], "y": 4, "x": 6.75 }, + {"label": "B", "matrix": [ 4, 7], "y": 4, "x": 7.75 }, + {"label": "N", "matrix": [10, 0], "y": 4, "x": 9.75 }, // Row 4, Right + {"label": "M", "matrix": [10, 1], "y": 4, "x": 10.75 }, + {"label": ",", "matrix": [10, 2], "y": 4, "x": 11.75 }, + {"label": ".", "matrix": [10, 3], "y": 4, "x": 12.75 }, + {"label": "/", "matrix": [10, 4], "y": 4, "x": 13.75 }, + {"label":"Shift", "matrix": [10, 6], "y": 4, "x": 14.75, "w": 1.75 }, + {"label": "Up", "matrix": [10, 7], "y": 4, "x": 16.75 }, + {"label": "End", "matrix": [10, 8], "y": 4, "x": 18 }, + + {"label": "M5", "matrix": [ 5, 0], "y": 5, "x": 0 }, // Row 5, Left + {"label": "Ctrl", "matrix": [ 5, 1], "y": 5, "x": 1.5, "w": 1.25 }, + {"label": "Gui", "matrix": [ 5, 3], "y": 5, "x": 2.75, "w": 1.25 }, + {"label": "Alt", "matrix": [ 5, 4], "y": 5, "x": 4, "w": 1.25 }, + {"label":"Space", "matrix": [ 5, 7], "y": 5, "x": 5.25, "w": 2.25 }, + {"label": "FN", "matrix": [ 4, 5], "y": 5, "x": 7.5, "w": 1.25 }, + {"label":"Space", "matrix": [11, 1], "y": 5, "x": 9.75, "w": 2.75 }, // Row 5, Right + {"label": "Alt", "matrix": [11, 3], "y": 5, "x": 12.5 }, + {"label": "Gui", "matrix": [11, 4], "y": 5, "x": 13.5 }, + {"label": "Ctrl", "matrix": [11, 5], "y": 5, "x": 14.5 }, + {"label": "Left", "matrix": [11, 6], "y": 5, "x": 15.75 }, + {"label": "Down", "matrix": [11, 7], "y": 5, "x": 16.75 }, + {"label": "Rght", "matrix": [11, 8], "y": 5, "x": 17.75 } + ] + }, + "LAYOUT_75xt_ansi": { // ANSI layout will work on solder and hotswap + "layout": [ + {"label": "LENC", "matrix": [ 0, 0], "y": 0, "x": 0 }, // Row 0, Left + {"label": "ESC", "matrix": [ 0, 1], "y": 0, "x": 1.5 }, + {"label": "F1", "matrix": [ 0, 2], "y": 0, "x": 2.75 }, + {"label": "F2", "matrix": [ 0, 3], "y": 0, "x": 3.75 }, + {"label": "F3", "matrix": [ 0, 4], "y": 0, "x": 4.75 }, + {"label": "F4", "matrix": [ 0, 5], "y": 0, "x": 5.75 }, + {"label": "F5", "matrix": [ 0, 6], "y": 0, "x": 7 }, + {"label": "F6", "matrix": [ 0, 7], "y": 0, "x": 8 }, + {"label": "F7", "matrix": [ 6, 0], "y": 0, "x": 10 }, // Row 0, Right + {"label": "F8", "matrix": [ 6, 1], "y": 0, "x": 11 }, + {"label": "F9", "matrix": [ 6, 2], "y": 0, "x": 12.25 }, + {"label": "F10", "matrix": [ 6, 3], "y": 0, "x": 13.25 }, + {"label": "F11", "matrix": [ 6, 4], "y": 0, "x": 14.25 }, + {"label": "F12", "matrix": [ 6, 5], "y": 0, "x": 15.25 }, + {"label": "F13", "matrix": [ 6, 6], "y": 0, "x": 16.5 }, + {"label": "RENC", "matrix": [ 6, 8], "y": 0, "x": 18 }, + + {"label": "M1", "matrix": [ 1, 0], "y": 1, "x": 0 }, // Row 1, Left + {"label": "GRAV", "matrix": [ 1, 1], "y": 1, "x": 1.5 }, + {"label": "1", "matrix": [ 1, 2], "y": 1, "x": 2.5 }, + {"label": "2", "matrix": [ 1, 3], "y": 1, "x": 3.5 }, + {"label": "3", "matrix": [ 1, 4], "y": 1, "x": 4.5 }, + {"label": "4", "matrix": [ 1, 5], "y": 1, "x": 5.5 }, + {"label": "5", "matrix": [ 1, 6], "y": 1, "x": 6.5 }, + {"label": "6", "matrix": [ 1, 7], "y": 1, "x": 7.5 }, + {"label": "7", "matrix": [ 7, 0], "y": 1, "x": 9.5 }, // Row 1, Right + {"label": "8", "matrix": [ 7, 1], "y": 1, "x": 10.5 }, + {"label": "9", "matrix": [ 7, 2], "y": 1, "x": 11.5 }, + {"label": "0", "matrix": [ 7, 3], "y": 1, "x": 12.5 }, + {"label": "-", "matrix": [ 7, 4], "y": 1, "x": 13.5 }, + {"label": "=", "matrix": [ 7, 5], "y": 1, "x": 14.5 }, + {"label": "Back", "matrix": [ 7, 6], "y": 1, "x": 15.5, "w": 2 }, + {"label": "Home", "matrix": [ 6, 8], "y": 1, "x": 18 }, + + {"label": "M2", "matrix": [ 2, 0], "y": 2, "x": 0 }, // Row 2, Left + {"label": "Tab", "matrix": [ 2, 1], "y": 2, "x": 1.5, "w": 1.5 }, + {"label": "Q", "matrix": [ 2, 3], "y": 2, "x": 3 }, + {"label": "W", "matrix": [ 2, 4], "y": 2, "x": 4 }, + {"label": "E", "matrix": [ 2, 5], "y": 2, "x": 5 }, + {"label": "R", "matrix": [ 2, 6], "y": 2, "x": 6 }, + {"label": "T", "matrix": [ 2, 7], "y": 2, "x": 7 }, + {"label": "Y", "matrix": [ 8, 0], "y": 2, "x": 9 }, + {"label": "U", "matrix": [ 8, 1], "y": 2, "x": 10 }, // Row 2, Right + {"label": "I", "matrix": [ 8, 2], "y": 2, "x": 11 }, + {"label": "O", "matrix": [ 8, 3], "y": 2, "x": 12 }, + {"label": "P", "matrix": [ 8, 4], "y": 2, "x": 13 }, + {"label": "[", "matrix": [ 8, 5], "y": 2, "x": 14 }, + {"label": "]", "matrix": [ 8, 6], "y": 2, "x": 15 }, + {"label": "BSLS", "matrix": [ 8, 7], "y": 2, "x": 16, "w": 1.5 }, + {"label": "PgUp", "matrix": [ 8, 8], "y": 2, "x": 18 }, + + {"label": "M3", "matrix": [ 3, 0], "y": 3, "x": 0 }, // Row 3, Left + {"label": "Caps", "matrix": [ 3, 1], "y": 3, "x": 1.5, "w": 1.75 }, + {"label": "A", "matrix": [ 3, 3], "y": 3, "x": 3.25 }, + {"label": "S", "matrix": [ 3, 4], "y": 3, "x": 4.25 }, + {"label": "D", "matrix": [ 3, 5], "y": 3, "x": 5.25 }, + {"label": "F", "matrix": [ 3, 6], "y": 3, "x": 6.25 }, + {"label": "G", "matrix": [ 3, 7], "y": 3, "x": 7.25 }, + {"label": "H", "matrix": [ 9, 0], "y": 3, "x": 9.25 }, + {"label": "J", "matrix": [ 9, 1], "y": 3, "x": 10.25 }, // Row 3, Right + {"label": "K", "matrix": [ 9, 2], "y": 3, "x": 11.25 }, + {"label": "L", "matrix": [ 9, 3], "y": 3, "x": 12.25 }, + {"label": ";", "matrix": [ 9, 4], "y": 3, "x": 13.25 }, + {"label": "'", "matrix": [ 9, 5], "y": 3, "x": 14.25 }, + {"label":"Enter", "matrix": [ 9, 7], "y": 3, "x": 15.25, "w": 2.25 }, + {"label": "PgDn", "matrix": [ 9, 8], "y": 3, "x": 18 }, + + {"label": "M4", "matrix": [ 4, 0], "y": 4, "x": 0 }, // Row 4, Left + {"label":"Shift", "matrix": [ 4, 1], "y": 4, "x": 1.5, "w": 2.25 }, + {"label": "Z", "matrix": [ 4, 3], "y": 4, "x": 3.75 }, + {"label": "X", "matrix": [ 4, 4], "y": 4, "x": 4.75 }, + {"label": "C", "matrix": [ 4, 5], "y": 4, "x": 5.75 }, + {"label": "V", "matrix": [ 4, 6], "y": 4, "x": 6.75 }, + {"label": "B", "matrix": [ 4, 7], "y": 4, "x": 7.75 }, + {"label": "N", "matrix": [10, 0], "y": 4, "x": 9.75 }, // Row 4, Right + {"label": "M", "matrix": [10, 1], "y": 4, "x": 10.75 }, + {"label": ",", "matrix": [10, 2], "y": 4, "x": 11.75 }, + {"label": ".", "matrix": [10, 3], "y": 4, "x": 12.75 }, + {"label": "/", "matrix": [10, 4], "y": 4, "x": 13.75 }, + {"label":"Shift", "matrix": [10, 6], "y": 4, "x": 14.75, "w": 1.75 }, + {"label": "Up", "matrix": [10, 7], "y": 4, "x": 16.75 }, + {"label": "End", "matrix": [10, 8], "y": 4, "x": 18 }, + + {"label": "M5", "matrix": [ 5, 0], "y": 5, "x": 0 }, // Row 5, Left + {"label": "Ctrl", "matrix": [ 5, 1], "y": 5, "x": 1.5, "w": 1.25 }, + {"label": "Gui", "matrix": [ 5, 3], "y": 5, "x": 2.75, "w": 1.25 }, + {"label": "Alt", "matrix": [ 5, 4], "y": 5, "x": 4, "w": 1.25 }, + {"label":"Space", "matrix": [ 5, 7], "y": 5, "x": 5.25, "w": 2.25 }, + {"label": "FN", "matrix": [ 4, 5], "y": 5, "x": 7.5, "w": 1.25 }, + {"label":"Space", "matrix": [11, 1], "y": 5, "x": 9.75, "w": 2.75 }, // Row 5, Right + {"label": "Alt", "matrix": [11, 3], "y": 5, "x": 12.5 }, + {"label": "Gui", "matrix": [11, 4], "y": 5, "x": 13.5 }, + {"label": "Ctrl", "matrix": [11, 5], "y": 5, "x": 14.5 }, + {"label": "Left", "matrix": [11, 6], "y": 5, "x": 15.75 }, + {"label": "Down", "matrix": [11, 7], "y": 5, "x": 16.75 }, + {"label": "Rght", "matrix": [11, 8], "y": 5, "x": 17.75 } + ] + }, + "LAYOUT_75xt_iso": { // ISO layout requires solder PCB for NUHS/ISO enter + "layout": [ + {"label": "LENC", "matrix": [ 0, 0], "y": 0, "x": 0 }, // Row 0, Left + {"label": "ESC", "matrix": [ 0, 1], "y": 0, "x": 1.5 }, + {"label": "F1", "matrix": [ 0, 2], "y": 0, "x": 2.75 }, + {"label": "F2", "matrix": [ 0, 3], "y": 0, "x": 3.75 }, + {"label": "F3", "matrix": [ 0, 4], "y": 0, "x": 4.75 }, + {"label": "F4", "matrix": [ 0, 5], "y": 0, "x": 5.75 }, + {"label": "F5", "matrix": [ 0, 6], "y": 0, "x": 7 }, + {"label": "F6", "matrix": [ 0, 7], "y": 0, "x": 8 }, + {"label": "F7", "matrix": [ 6, 0], "y": 0, "x": 10 }, // Row 0, Right + {"label": "F8", "matrix": [ 6, 1], "y": 0, "x": 11 }, + {"label": "F9", "matrix": [ 6, 2], "y": 0, "x": 12.25 }, + {"label": "F10", "matrix": [ 6, 3], "y": 0, "x": 13.25 }, + {"label": "F11", "matrix": [ 6, 4], "y": 0, "x": 14.25 }, + {"label": "F12", "matrix": [ 6, 5], "y": 0, "x": 15.25 }, + {"label": "F13", "matrix": [ 6, 6], "y": 0, "x": 16.5 }, + {"label": "RENC", "matrix": [ 6, 8], "y": 0, "x": 18 }, + + {"label": "M1", "matrix": [ 1, 0], "y": 1, "x": 0 }, // Row 1, Left + {"label": "GRAV", "matrix": [ 1, 1], "y": 1, "x": 1.5 }, + {"label": "1", "matrix": [ 1, 2], "y": 1, "x": 2.5 }, + {"label": "2", "matrix": [ 1, 3], "y": 1, "x": 3.5 }, + {"label": "3", "matrix": [ 1, 4], "y": 1, "x": 4.5 }, + {"label": "4", "matrix": [ 1, 5], "y": 1, "x": 5.5 }, + {"label": "5", "matrix": [ 1, 6], "y": 1, "x": 6.5 }, + {"label": "6", "matrix": [ 1, 7], "y": 1, "x": 7.5 }, + {"label": "7", "matrix": [ 7, 0], "y": 1, "x": 9.5 }, // Row 1, Right + {"label": "8", "matrix": [ 7, 1], "y": 1, "x": 10.5 }, + {"label": "9", "matrix": [ 7, 2], "y": 1, "x": 11.5 }, + {"label": "0", "matrix": [ 7, 3], "y": 1, "x": 12.5 }, + {"label": "-", "matrix": [ 7, 4], "y": 1, "x": 13.5 }, + {"label": "=", "matrix": [ 7, 5], "y": 1, "x": 14.5 }, + {"label": "Back", "matrix": [ 7, 6], "y": 1, "x": 15.5 }, + {"label": "Del", "matrix": [ 7, 7], "y": 1, "x": 16.5 }, + {"label": "Home", "matrix": [ 6, 8], "y": 1, "x": 18 }, + + {"label": "M2", "matrix": [ 2, 0], "y": 2, "x": 0 }, // Row 2, Left + {"label": "Tab", "matrix": [ 2, 1], "y": 2, "x": 1.5, "w": 1.5 }, + {"label": "Q", "matrix": [ 2, 3], "y": 2, "x": 3 }, + {"label": "W", "matrix": [ 2, 4], "y": 2, "x": 4 }, + {"label": "E", "matrix": [ 2, 5], "y": 2, "x": 5 }, + {"label": "R", "matrix": [ 2, 6], "y": 2, "x": 6 }, + {"label": "T", "matrix": [ 2, 7], "y": 2, "x": 7 }, + {"label": "Y", "matrix": [ 8, 0], "y": 2, "x": 9 }, + {"label": "U", "matrix": [ 8, 1], "y": 2, "x": 10 }, // Row 2, Right + {"label": "I", "matrix": [ 8, 2], "y": 2, "x": 11 }, + {"label": "O", "matrix": [ 8, 3], "y": 2, "x": 12 }, + {"label": "P", "matrix": [ 8, 4], "y": 2, "x": 13 }, + {"label": "[", "matrix": [ 8, 5], "y": 2, "x": 14 }, + {"label": "]", "matrix": [ 8, 6], "y": 2, "x": 15 }, + {"label": "PgUp", "matrix": [ 8, 8], "y": 2, "x": 18 }, + + {"label": "M3", "matrix": [ 3, 0], "y": 3, "x": 0 }, // Row 3, Left + {"label": "Caps", "matrix": [ 3, 1], "y": 3, "x": 1.5, "w": 1.75 }, + {"label": "A", "matrix": [ 3, 3], "y": 3, "x": 3.25 }, + {"label": "S", "matrix": [ 3, 4], "y": 3, "x": 4.25 }, + {"label": "D", "matrix": [ 3, 5], "y": 3, "x": 5.25 }, + {"label": "F", "matrix": [ 3, 6], "y": 3, "x": 6.25 }, + {"label": "G", "matrix": [ 3, 7], "y": 3, "x": 7.25 }, + {"label": "H", "matrix": [ 9, 0], "y": 3, "x": 9.25 }, + {"label": "J", "matrix": [ 9, 1], "y": 3, "x": 10.25 }, // Row 3, Right + {"label": "K", "matrix": [ 9, 2], "y": 3, "x": 11.25 }, + {"label": "L", "matrix": [ 9, 3], "y": 3, "x": 12.25 }, + {"label": ";", "matrix": [ 9, 4], "y": 3, "x": 13.25 }, + {"label": "'", "matrix": [ 9, 5], "y": 3, "x": 14.25 }, + {"label": "NUHS", "matrix": [ 9, 6], "y": 3, "x": 15.25 }, + {"label":"Enter", "matrix": [ 9, 7], "y": 2, "x": 16.25, "w": 1.25, "h": 2 }, + {"label": "PgDn", "matrix": [ 9, 8], "y": 3, "x": 18 }, + + {"label": "M4", "matrix": [ 4, 0], "y": 4, "x": 0 }, // Row 4, Left + {"label":"Shift", "matrix": [ 4, 1], "y": 4, "x": 1.5, "w": 1.25 }, + {"label": "NUBS", "matrix": [ 4, 2], "y": 4, "x": 2.75 }, + {"label": "Z", "matrix": [ 4, 3], "y": 4, "x": 3.75 }, + {"label": "X", "matrix": [ 4, 4], "y": 4, "x": 4.75 }, + {"label": "C", "matrix": [ 4, 5], "y": 4, "x": 5.75 }, + {"label": "V", "matrix": [ 4, 6], "y": 4, "x": 6.75 }, + {"label": "B", "matrix": [ 4, 7], "y": 4, "x": 7.75 }, + {"label": "N", "matrix": [10, 0], "y": 4, "x": 9.75 }, // Row 4, Right + {"label": "M", "matrix": [10, 1], "y": 4, "x": 10.75 }, + {"label": ",", "matrix": [10, 2], "y": 4, "x": 11.75 }, + {"label": ".", "matrix": [10, 3], "y": 4, "x": 12.75 }, + {"label": "/", "matrix": [10, 4], "y": 4, "x": 13.75 }, + {"label":"Shift", "matrix": [10, 6], "y": 4, "x": 14.75, "w": 1.75 }, + {"label": "Up", "matrix": [10, 7], "y": 4, "x": 16.75 }, + {"label": "End", "matrix": [10, 8], "y": 4, "x": 18 }, + + {"label": "M5", "matrix": [ 5, 0], "y": 5, "x": 0 }, // Row 5, Left + {"label": "Ctrl", "matrix": [ 5, 1], "y": 5, "x": 1.5, "w": 1.25 }, + {"label": "Gui", "matrix": [ 5, 3], "y": 5, "x": 2.75, "w": 1.25 }, + {"label": "Alt", "matrix": [ 5, 4], "y": 5, "x": 4, "w": 1.25 }, + {"label":"Space", "matrix": [ 5, 7], "y": 5, "x": 5.25, "w": 2.25 }, + {"label": "FN", "matrix": [ 4, 5], "y": 5, "x": 7.5, "w": 1.25 }, + {"label":"Space", "matrix": [11, 1], "y": 5, "x": 9.75, "w": 2.75 }, // Row 5, Right + {"label": "Alt", "matrix": [11, 3], "y": 5, "x": 12.5 }, + {"label": "Gui", "matrix": [11, 4], "y": 5, "x": 13.5 }, + {"label": "Ctrl", "matrix": [11, 5], "y": 5, "x": 14.5 }, + {"label": "Left", "matrix": [11, 6], "y": 5, "x": 15.75 }, + {"label": "Down", "matrix": [11, 7], "y": 5, "x": 16.75 }, + {"label": "Rght", "matrix": [11, 8], "y": 5, "x": 17.75 } + ] + }, + } +} diff --git a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c new file mode 100644 index 00000000000..bc5b82d71dc --- /dev/null +++ b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c @@ -0,0 +1,44 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_75xt_ansi( + KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + KC_F13, KC_GRAV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + KC_F16, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1), KC_SPC KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT_75xt_ansi( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, +}; +#endif \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/keymaps/ansi/rules.mk b/keyboards/haverworks/theseus75/keymaps/ansi/rules.mk new file mode 100644 index 00000000000..ee325681483 --- /dev/null +++ b/keyboards/haverworks/theseus75/keymaps/ansi/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/haverworks/theseus75/keymaps/default/keymap.c b/keyboards/haverworks/theseus75/keymaps/default/keymap.c new file mode 100644 index 00000000000..9a7f3b20a38 --- /dev/null +++ b/keyboards/haverworks/theseus75/keymaps/default/keymap.c @@ -0,0 +1,44 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_75xt_all( + KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + KC_F13, KC_GRAV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, + KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, + KC_F16, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1), KC_SPC KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT_75xt_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, +}; +#endif \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/keymaps/default/rules.mk b/keyboards/haverworks/theseus75/keymaps/default/rules.mk new file mode 100644 index 00000000000..ee325681483 --- /dev/null +++ b/keyboards/haverworks/theseus75/keymaps/default/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c b/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c new file mode 100644 index 00000000000..98f34b88e1e --- /dev/null +++ b/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c @@ -0,0 +1,44 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_75xt_hs_all( + KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + KC_F13, KC_GRAV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, + KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + KC_F16, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1), KC_SPC KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT_75xt_hs_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, +}; +#endif \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/keymaps/hotswap/rules.mk b/keyboards/haverworks/theseus75/keymaps/hotswap/rules.mk new file mode 100644 index 00000000000..ee325681483 --- /dev/null +++ b/keyboards/haverworks/theseus75/keymaps/hotswap/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c new file mode 100644 index 00000000000..3f0320d758e --- /dev/null +++ b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c @@ -0,0 +1,44 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_75xt_iso( + KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + KC_F13, KC_GRAV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, + KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, + KC_F16, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1), KC_SPC KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT_75xt_iso( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, +}; +#endif \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/keymaps/iso/rules.mk b/keyboards/haverworks/theseus75/keymaps/iso/rules.mk new file mode 100644 index 00000000000..ee325681483 --- /dev/null +++ b/keyboards/haverworks/theseus75/keymaps/iso/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/haverworks/theseus75/keymaps/via/keymap.c b/keyboards/haverworks/theseus75/keymaps/via/keymap.c new file mode 100644 index 00000000000..9a7f3b20a38 --- /dev/null +++ b/keyboards/haverworks/theseus75/keymaps/via/keymap.c @@ -0,0 +1,44 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_75xt_all( + KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + KC_F13, KC_GRAV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, + KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, + KC_F16, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1), KC_SPC KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT_75xt_all( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, +}; +#endif \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/keymaps/via/rules.mk b/keyboards/haverworks/theseus75/keymaps/via/rules.mk new file mode 100644 index 00000000000..6ccd6d91943 --- /dev/null +++ b/keyboards/haverworks/theseus75/keymaps/via/rules.mk @@ -0,0 +1,2 @@ +ENCODER_MAP_ENABLE = yes +VIA_ENABLE = yes \ No newline at end of file diff --git a/keyboards/haverworks/Theseus75/mcuconf.h b/keyboards/haverworks/theseus75/mcuconf.h similarity index 100% rename from keyboards/haverworks/Theseus75/mcuconf.h rename to keyboards/haverworks/theseus75/mcuconf.h diff --git a/keyboards/haverworks/theseus75/rules.mk b/keyboards/haverworks/theseus75/rules.mk new file mode 100644 index 00000000000..2c49b41d7a0 --- /dev/null +++ b/keyboards/haverworks/theseus75/rules.mk @@ -0,0 +1 @@ +# This file is intentionally left blank \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c new file mode 100644 index 00000000000..9f6f75accaf --- /dev/null +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -0,0 +1,13 @@ +// Copyright 2022 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "quantum.h" + +void keyboard_post_init_kb(void) { + // If the keyboard is master, turn on power to the split half, and to underglow LEDs + if (is_keyboard_master()) { + setPinOutput(A15); + writePinHigh(A15); + }; + keyboard_post_init_user(); +} \ No newline at end of file From 10f6138a447070fd31ac115e425b7307e2b83a7c Mon Sep 17 00:00:00 2001 From: Moritz Date: Fri, 9 Jun 2023 17:30:05 +0200 Subject: [PATCH 03/53] fixed wrong keymaps, added workarounds for chibi bugs --- keyboards/haverworks/theseus75/config.h | 16 +- keyboards/haverworks/theseus75/hal_lld.h | 20 + keyboards/haverworks/theseus75/halconf.h | 2 + keyboards/haverworks/theseus75/info.json | 957 +++++++++--------- .../theseus75/keymaps/ansi/keymap.c | 6 +- .../theseus75/keymaps/default/keymap.c | 6 +- .../theseus75/keymaps/hotswap/keymap.c | 6 +- .../haverworks/theseus75/keymaps/iso/keymap.c | 6 +- .../haverworks/theseus75/keymaps/via/keymap.c | 6 +- keyboards/haverworks/theseus75/mcuconf.h | 7 +- keyboards/haverworks/theseus75/rules.mk | 2 +- .../haverworks/theseus75/stm32_registry.h | 24 + 12 files changed, 551 insertions(+), 507 deletions(-) create mode 100644 keyboards/haverworks/theseus75/hal_lld.h create mode 100644 keyboards/haverworks/theseus75/stm32_registry.h diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index efcf929de28..0ac808c3aa0 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -18,7 +18,7 @@ // Set up split communications #define SERIAL_USART_DRIVER SD3 -#define SERIAL_USART_TX_PIN B10 // The GPIO pin that is used split communication. +#define SOFT_SERIAL_PIN B10 // The GPIO pin that is used split communication. #define USART3_REMAP // Remap USART TX and RX pins for half duplex #define SERIAL_USART_TX_PAL_MODE 7 // Pin alternate function 7 = USART3_TX for PB10 @@ -30,3 +30,17 @@ #define SPLIT_HAND_PIN B9 // The MCUs will probe a pin to determine if they are left or right side. high = left, low = right #define SPLIT_TRANSPORT_MIRROR // Sync data for RGB animations to match + +#if defined(SOFT_SERIAL_PIN) +# define SERIAL_USART_TX_PIN SOFT_SERIAL_PIN +#endif + +// Underglow +/* +#define WS2812_PWM_DRIVER PWMD3 +#define WS2812_PWM_CHANNEL 4 +#define WS2812_PWM_PAL_MODE 10 +#define WS2812_DMA_STREAM STM32_DMA1_STREAM2 +#define WS2812_DMA_CHANNEL 2 +#define RGBLIGHT_SLEEP +*/ \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/hal_lld.h b/keyboards/haverworks/theseus75/hal_lld.h new file mode 100644 index 00000000000..312564092d8 --- /dev/null +++ b/keyboards/haverworks/theseus75/hal_lld.h @@ -0,0 +1,20 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include_next "hal_lld.h" \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/halconf.h b/keyboards/haverworks/theseus75/halconf.h index 131255ef9b5..ea74b760e3a 100644 --- a/keyboards/haverworks/theseus75/halconf.h +++ b/keyboards/haverworks/theseus75/halconf.h @@ -18,4 +18,6 @@ #define HAL_USE_SERIAL TRUE +#define HAL_USE_PWM TRUE + #include_next \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/info.json b/keyboards/haverworks/theseus75/info.json index 56dc14ee947..798649658ba 100644 --- a/keyboards/haverworks/theseus75/info.json +++ b/keyboards/haverworks/theseus75/info.json @@ -1,44 +1,97 @@ { - "keyboard_name": "Theseus75", "manufacturer": "haverworks", + "keyboard_name": "Theseus75", "maintainer": "ebastler", - "url": "https://haver.codes/", "bootloader": "stm32-dfu", - "processor": "STM32G431", - "usb": { - "vid": "0x6877", - "pid": "0x0001", - "device_version": "1.0.0" - }, - "features": { - "bootmagic": true, - "command": false, - "console": false, - "extrakey": true, - "mousekey": true, - "nkro": true, - "encoder": true - }, - "diode_direction": "COL2ROW", - "matrix_pins": { - "cols": ["B11", "C15", "B6", "B5", "B4", "B3", "C11", "C10", "NO_PIN"], // NO_PIN is not actually used, but a pin to keep left and right matrix the same size - "rows": ["A9", "A10", "B15", "B12", "B13", "B14"] - }, "bootmagic": { "matrix": [0, 1] }, + "diode_direction": "COL2ROW", "encoder": { "rotary": [ {"pin_a": "A8", "pin_b": "C6", "resolution": 2} ] }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "encoder": true, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "matrix_pins": { + "cols": ["B11", "C15", "B6", "B5", "B4", "B3", "C11", "C10", null], + "rows": ["A9", "A10", "B15", "B12", "B13", "B14"] + }, + "processor": "STM32G431", + "rgb_matrix": { + "driver": "WS2812", + "layout": [ + {"matrix": [3, 1], "x": 32, "y": 34, "flags": 8}, + {"x": 28, "y": 1, "flags": 2}, + {"x": 43, "y": 1, "flags": 2}, + {"x": 56, "y": 1, "flags": 2}, + {"x": 69, "y": 1, "flags": 2}, + {"x": 84, "y": 1, "flags": 2}, + {"x": 99, "y": 1, "flags": 2}, + {"x": 97, "y": 8, "flags": 2}, + {"x": 91, "y": 19, "flags": 2}, + {"x": 91, "y": 31, "flags": 2}, + {"x": 92, "y": 42, "flags": 2}, + {"x": 96, "y": 53, "flags": 2}, + {"x": 97, "y": 64, "flags": 2}, + {"x": 81, "y": 64, "flags": 2}, + {"x": 66, "y": 64, "flags": 2}, + {"x": 53, "y": 64, "flags": 2}, + {"x": 40, "y": 64, "flags": 2}, + {"x": 26, "y": 64, "flags": 2}, + {"x": 13, "y": 64, "flags": 2}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 0, "y": 53, "flags": 2}, + {"x": 0, "y": 42, "flags": 2}, + {"x": 0, "y": 31, "flags": 2}, + {"x": 0, "y": 19, "flags": 2}, + {"x": 0, "y": 9, "flags": 2}, + {"x": 0, "y": 1, "flags": 2}, + {"x": 13, "y": 1, "flags": 2}, + {"x": 224, "y": 31, "flags": 2}, + {"x": 224, "y": 42, "flags": 2}, + {"x": 224, "y": 53, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 209, "y": 64, "flags": 2}, + {"x": 194, "y": 64, "flags": 2}, + {"x": 180, "y": 64, "flags": 2}, + {"x": 165, "y": 64, "flags": 2}, + {"x": 152, "y": 64, "flags": 2}, + {"x": 138, "y": 64, "flags": 2}, + {"x": 124, "y": 64, "flags": 2}, + {"x": 124, "y": 64, "flags": 2}, + {"x": 119, "y": 64, "flags": 2}, + {"x": 114, "y": 64, "flags": 2}, + {"x": 117, "y": 64, "flags": 2}, + {"x": 122, "y": 27, "flags": 2}, + {"x": 126, "y": 5, "flags": 2}, + {"x": 140, "y": 5, "flags": 2}, + {"x": 155, "y": 5, "flags": 2}, + {"x": 168, "y": 5, "flags": 2}, + {"x": 181, "y": 5, "flags": 2}, + {"x": 196, "y": 5, "flags": 2}, + {"x": 211, "y": 5, "flags": 2}, + {"x": 224, "y": 5, "flags": 2}, + {"x": 224, "y": 30, "flags": 2}, + {"x": 224, "y": 64, "flags": 2} + ] + }, + "rgblight": { + "led_count": 53, + "max_brightness": 128, + "split": true, + "split_count": [27, 26] + }, "split": { - "matrix_pins": { - "right": { - "cols": ["A10", "A9", "A8", "C6", "B15", "B14", "B13", "B12", "C15"], - "rows": ["B3", "C10", "C11", "A1", "A0", "B6"] - } - }, + "enabled": true, "bootmagic": { "matrix": [6, 6] }, @@ -48,483 +101,409 @@ {"pin_a": "B5", "pin_b": "B4", "resolution": 2} ] } + }, + "matrix_pins": { + "right": { + "cols": ["A10", "A9", "A8", "C6", "B15", "B14", "B13", "B12", "C15"], + "rows": ["B3", "C10", "C11", "A1", "A0", "B6"] + } } }, - "rgblight": { - "led_count": 53, - "split": true, - "split_count": [27, 26], - "max_brightness": 128 + "url": "https://haver.codes/", + "usb": { + "device_version": "1.0.0", + "pid": "0x0001", + "vid": "0x6877" }, "ws2812": { "pin": "B7" }, - "rgb_matrix": { - "driver": "WS2812", - "layout": [ - {"flags": 8, "matrix": [3, 1], "x": 32, "y": 34}, // L CAPS - {"flags": 2, "x": 28, "y": 1}, // Begin L side UG - {"flags": 2, "x": 43, "y": 1}, - {"flags": 2, "x": 56, "y": 1}, - {"flags": 2, "x": 69, "y": 1}, - {"flags": 2, "x": 84, "y": 1}, - {"flags": 2, "x": 99, "y": 1}, - {"flags": 2, "x": 97, "y": 8}, - {"flags": 2, "x": 91, "y": 19}, - {"flags": 2, "x": 91, "y": 31}, - {"flags": 2, "x": 92, "y": 42}, - {"flags": 2, "x": 96, "y": 53}, - {"flags": 2, "x": 97, "y": 64}, - {"flags": 2, "x": 81, "y": 64}, - {"flags": 2, "x": 66, "y": 64}, - {"flags": 2, "x": 53, "y": 64}, - {"flags": 2, "x": 40, "y": 64}, - {"flags": 2, "x": 26, "y": 64}, - {"flags": 2, "x": 13, "y": 64}, - {"flags": 2, "x": 0, "y": 64}, - {"flags": 2, "x": 0, "y": 53}, - {"flags": 2, "x": 0, "y": 42}, - {"flags": 2, "x": 0, "y": 31}, - {"flags": 2, "x": 0, "y": 19}, - {"flags": 2, "x": 0, "y": 9}, - {"flags": 2, "x": 0, "y": 1}, - {"flags": 2, "x": 13, "y": 1}, - - {"flags": 2, "x": 224, "y": 31}, // Begin right side UG - {"flags": 2, "x": 224, "y": 42}, - {"flags": 2, "x": 224, "y": 53}, - {"flags": 2, "x": 224, "y": 64}, - {"flags": 2, "x": 209, "y": 64}, - {"flags": 2, "x": 194, "y": 64}, - {"flags": 2, "x": 180, "y": 64}, - {"flags": 2, "x": 165, "y": 64}, - {"flags": 2, "x": 152, "y": 64}, - {"flags": 2, "x": 138, "y": 64}, - {"flags": 2, "x": 124, "y": 64}, - {"flags": 2, "x": 124, "y": 64}, - {"flags": 2, "x": 119, "y": 64}, - {"flags": 2, "x": 114, "y": 64}, - {"flags": 2, "x": 117, "y": 64}, - {"flags": 2, "x": 122, "y": 27}, - {"flags": 2, "x": 126, "y": 5}, - {"flags": 2, "x": 140, "y": 5}, - {"flags": 2, "x": 155, "y": 5}, - {"flags": 2, "x": 168, "y": 5}, - {"flags": 2, "x": 181, "y": 5}, - {"flags": 2, "x": 196, "y": 5}, - {"flags": 2, "x": 211, "y": 5}, - {"flags": 2, "x": 224, "y": 5}, - {"flags": 2, "x": 224, "y": 30}, - {"flags": 2, "x": 224, "y": 64} - ] - }, "layouts": { - "LAYOUT_75xt_all": { // This layout works on both HS and solder PCBs, for ISO and ANSI switch layouts + "LAYOUT_75xt_all": { "layout": [ - {"label": "LENC", "matrix": [ 0, 0], "y": 0, "x": 0 }, // Row 0, Left - {"label": "ESC", "matrix": [ 0, 1], "y": 0, "x": 1.5 }, - {"label": "F1", "matrix": [ 0, 2], "y": 0, "x": 2.75 }, - {"label": "F2", "matrix": [ 0, 3], "y": 0, "x": 3.75 }, - {"label": "F3", "matrix": [ 0, 4], "y": 0, "x": 4.75 }, - {"label": "F4", "matrix": [ 0, 5], "y": 0, "x": 5.75 }, - {"label": "F5", "matrix": [ 0, 6], "y": 0, "x": 7 }, - {"label": "F6", "matrix": [ 0, 7], "y": 0, "x": 8 }, - {"label": "F7", "matrix": [ 6, 0], "y": 0, "x": 10 }, // Row 0, Right - {"label": "F8", "matrix": [ 6, 1], "y": 0, "x": 11 }, - {"label": "F9", "matrix": [ 6, 2], "y": 0, "x": 12.25 }, - {"label": "F10", "matrix": [ 6, 3], "y": 0, "x": 13.25 }, - {"label": "F11", "matrix": [ 6, 4], "y": 0, "x": 14.25 }, - {"label": "F12", "matrix": [ 6, 5], "y": 0, "x": 15.25 }, - {"label": "F13", "matrix": [ 6, 6], "y": 0, "x": 16.5 }, - {"label": "RENC", "matrix": [ 6, 8], "y": 0, "x": 18 }, - - {"label": "M1", "matrix": [ 1, 0], "y": 1, "x": 0 }, // Row 1, Left - {"label": "GRAV", "matrix": [ 1, 1], "y": 1, "x": 1.5 }, - {"label": "1", "matrix": [ 1, 2], "y": 1, "x": 2.5 }, - {"label": "2", "matrix": [ 1, 3], "y": 1, "x": 3.5 }, - {"label": "3", "matrix": [ 1, 4], "y": 1, "x": 4.5 }, - {"label": "4", "matrix": [ 1, 5], "y": 1, "x": 5.5 }, - {"label": "5", "matrix": [ 1, 6], "y": 1, "x": 6.5 }, - {"label": "6", "matrix": [ 1, 7], "y": 1, "x": 7.5 }, - {"label": "7", "matrix": [ 7, 0], "y": 1, "x": 9.5 }, // Row 1, Right - {"label": "8", "matrix": [ 7, 1], "y": 1, "x": 10.5 }, - {"label": "9", "matrix": [ 7, 2], "y": 1, "x": 11.5 }, - {"label": "0", "matrix": [ 7, 3], "y": 1, "x": 12.5 }, - {"label": "-", "matrix": [ 7, 4], "y": 1, "x": 13.5 }, - {"label": "=", "matrix": [ 7, 5], "y": 1, "x": 14.5 }, - {"label": "Back", "matrix": [ 7, 6], "y": 1, "x": 15.5 }, - {"label": "Del", "matrix": [ 7, 7], "y": 1, "x": 16.5 }, - {"label": "Home", "matrix": [ 6, 8], "y": 1, "x": 18 }, - - {"label": "M2", "matrix": [ 2, 0], "y": 2, "x": 0 }, // Row 2, Left - {"label": "Tab", "matrix": [ 2, 1], "y": 2, "x": 1.5, "w": 1.5 }, - {"label": "Q", "matrix": [ 2, 3], "y": 2, "x": 3 }, - {"label": "W", "matrix": [ 2, 4], "y": 2, "x": 4 }, - {"label": "E", "matrix": [ 2, 5], "y": 2, "x": 5 }, - {"label": "R", "matrix": [ 2, 6], "y": 2, "x": 6 }, - {"label": "T", "matrix": [ 2, 7], "y": 2, "x": 7 }, - {"label": "Y", "matrix": [ 8, 0], "y": 2, "x": 9 }, - {"label": "U", "matrix": [ 8, 1], "y": 2, "x": 10 }, // Row 2, Right - {"label": "I", "matrix": [ 8, 2], "y": 2, "x": 11 }, - {"label": "O", "matrix": [ 8, 3], "y": 2, "x": 12 }, - {"label": "P", "matrix": [ 8, 4], "y": 2, "x": 13 }, - {"label": "[", "matrix": [ 8, 5], "y": 2, "x": 14 }, - {"label": "]", "matrix": [ 8, 6], "y": 2, "x": 15 }, - {"label": "BSLS", "matrix": [ 8, 7], "y": 2, "x": 16, "w": 1.5 }, - {"label": "PgUp", "matrix": [ 8, 8], "y": 2, "x": 18 }, - - {"label": "M3", "matrix": [ 3, 0], "y": 3, "x": 0 }, // Row 3, Left - {"label": "Caps", "matrix": [ 3, 1], "y": 3, "x": 1.5, "w": 1.75 }, - {"label": "A", "matrix": [ 3, 3], "y": 3, "x": 3.25 }, - {"label": "S", "matrix": [ 3, 4], "y": 3, "x": 4.25 }, - {"label": "D", "matrix": [ 3, 5], "y": 3, "x": 5.25 }, - {"label": "F", "matrix": [ 3, 6], "y": 3, "x": 6.25 }, - {"label": "G", "matrix": [ 3, 7], "y": 3, "x": 7.25 }, - {"label": "H", "matrix": [ 9, 0], "y": 3, "x": 9.25 }, - {"label": "J", "matrix": [ 9, 1], "y": 3, "x": 10.25 }, // Row 3, Right - {"label": "K", "matrix": [ 9, 2], "y": 3, "x": 11.25 }, - {"label": "L", "matrix": [ 9, 3], "y": 3, "x": 12.25 }, - {"label": ";", "matrix": [ 9, 4], "y": 3, "x": 13.25 }, - {"label": "'", "matrix": [ 9, 5], "y": 3, "x": 14.25 }, - {"label": "NUHS", "matrix": [ 9, 6], "y": 3, "x": 15.25 }, - {"label":"Enter", "matrix": [ 9, 7], "y": 3, "x": 16.25, "w": 1.25 }, - {"label": "PgDn", "matrix": [ 9, 8], "y": 3, "x": 18 }, - - {"label": "M4", "matrix": [ 4, 0], "y": 4, "x": 0 }, // Row 4, Left - {"label":"Shift", "matrix": [ 4, 1], "y": 4, "x": 1.5, "w": 1.25 }, - {"label": "NUBS", "matrix": [ 4, 2], "y": 4, "x": 2.75 }, - {"label": "Z", "matrix": [ 4, 3], "y": 4, "x": 3.75 }, - {"label": "X", "matrix": [ 4, 4], "y": 4, "x": 4.75 }, - {"label": "C", "matrix": [ 4, 5], "y": 4, "x": 5.75 }, - {"label": "V", "matrix": [ 4, 6], "y": 4, "x": 6.75 }, - {"label": "B", "matrix": [ 4, 7], "y": 4, "x": 7.75 }, - {"label": "N", "matrix": [10, 0], "y": 4, "x": 9.75 }, // Row 4, Right - {"label": "M", "matrix": [10, 1], "y": 4, "x": 10.75 }, - {"label": ",", "matrix": [10, 2], "y": 4, "x": 11.75 }, - {"label": ".", "matrix": [10, 3], "y": 4, "x": 12.75 }, - {"label": "/", "matrix": [10, 4], "y": 4, "x": 13.75 }, - {"label":"Shift", "matrix": [10, 6], "y": 4, "x": 14.75, "w": 1.75 }, - {"label": "Up", "matrix": [10, 7], "y": 4, "x": 16.75 }, - {"label": "End", "matrix": [10, 8], "y": 4, "x": 18 }, - - {"label": "M5", "matrix": [ 5, 0], "y": 5, "x": 0 }, // Row 5, Left - {"label": "Ctrl", "matrix": [ 5, 1], "y": 5, "x": 1.5, "w": 1.25 }, - {"label": "Gui", "matrix": [ 5, 3], "y": 5, "x": 2.75, "w": 1.25 }, - {"label": "Alt", "matrix": [ 5, 4], "y": 5, "x": 4, "w": 1.25 }, - {"label":"Space", "matrix": [ 5, 7], "y": 5, "x": 5.25, "w": 2.25 }, - {"label": "FN", "matrix": [ 4, 5], "y": 5, "x": 7.5, "w": 1.25 }, - {"label":"Space", "matrix": [11, 1], "y": 5, "x": 9.75, "w": 2.75 }, // Row 5, Right - {"label": "Alt", "matrix": [11, 3], "y": 5, "x": 12.5 }, - {"label": "Gui", "matrix": [11, 4], "y": 5, "x": 13.5 }, - {"label": "Ctrl", "matrix": [11, 5], "y": 5, "x": 14.5 }, - {"label": "Left", "matrix": [11, 6], "y": 5, "x": 15.75 }, - {"label": "Down", "matrix": [11, 7], "y": 5, "x": 16.75 }, - {"label": "Rght", "matrix": [11, 8], "y": 5, "x": 17.75 } + {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, + {"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0}, + {"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0}, + {"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0}, + {"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0}, + {"label": "F5", "matrix": [0, 6], "x": 7, "y": 0}, + {"label": "F6", "matrix": [0, 7], "x": 8, "y": 0}, + {"label": "F7", "matrix": [6, 0], "x": 10, "y": 0}, + {"label": "F8", "matrix": [6, 1], "x": 11, "y": 0}, + {"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0}, + {"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0}, + {"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0}, + {"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0}, + {"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0}, + {"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0}, + {"label": "M1", "matrix": [1, 0], "x": 0, "y": 1}, + {"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1}, + {"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1}, + {"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1}, + {"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1}, + {"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1}, + {"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1}, + {"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1}, + {"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1}, + {"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1}, + {"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1}, + {"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1}, + {"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1}, + {"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1}, + {"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1}, + {"label": "Del", "matrix": [7, 7], "x": 16.5, "y": 1}, + {"label": "Home", "matrix": [7, 8], "x": 18, "y": 1}, + {"label": "M2", "matrix": [2, 0], "x": 0, "y": 2}, + {"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5}, + {"label": "Q", "matrix": [2, 3], "x": 3, "y": 2}, + {"label": "W", "matrix": [2, 4], "x": 4, "y": 2}, + {"label": "E", "matrix": [2, 5], "x": 5, "y": 2}, + {"label": "R", "matrix": [2, 6], "x": 6, "y": 2}, + {"label": "T", "matrix": [2, 7], "x": 7, "y": 2}, + {"label": "Y", "matrix": [8, 0], "x": 9, "y": 2}, + {"label": "U", "matrix": [8, 1], "x": 10, "y": 2}, + {"label": "I", "matrix": [8, 2], "x": 11, "y": 2}, + {"label": "O", "matrix": [8, 3], "x": 12, "y": 2}, + {"label": "P", "matrix": [8, 4], "x": 13, "y": 2}, + {"label": "[", "matrix": [8, 5], "x": 14, "y": 2}, + {"label": "]", "matrix": [8, 6], "x": 15, "y": 2}, + {"label": "BSLS", "matrix": [8, 7], "x": 16, "y": 2, "w": 1.5}, + {"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2}, + {"label": "M3", "matrix": [3, 0], "x": 0, "y": 3}, + {"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75}, + {"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3}, + {"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3}, + {"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3}, + {"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3}, + {"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3}, + {"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3}, + {"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3}, + {"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3}, + {"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3}, + {"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3}, + {"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3}, + {"label": "NUHS", "matrix": [9, 6], "x": 15.25, "y": 3}, + {"label": "Enter", "matrix": [9, 7], "x": 16.25, "y": 3, "w": 1.25}, + {"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3}, + {"label": "M4", "matrix": [4, 0], "x": 0, "y": 4}, + {"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.25}, + {"label": "NUBS", "matrix": [4, 2], "x": 2.75, "y": 4}, + {"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4}, + {"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4}, + {"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4}, + {"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4}, + {"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4}, + {"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4}, + {"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4}, + {"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4}, + {"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4}, + {"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4}, + {"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75}, + {"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4}, + {"label": "End", "matrix": [10, 8], "x": 18, "y": 4}, + {"label": "M5", "matrix": [5, 0], "x": 0, "y": 5}, + {"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25}, + {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, + {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, + {"label": "FN", "matrix": [5,7], "x": 7.5, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, + {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, + {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, + {"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5}, + {"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5}, + {"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5}, + {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} ] }, - "LAYOUT_75xt_hs_all": { // This layout enables all keys found on a HS PCB, incl ISO lshift + "LAYOUT_75xt_ansi": { "layout": [ - {"label": "LENC", "matrix": [ 0, 0], "y": 0, "x": 0 }, // Row 0, Left - {"label": "ESC", "matrix": [ 0, 1], "y": 0, "x": 1.5 }, - {"label": "F1", "matrix": [ 0, 2], "y": 0, "x": 2.75 }, - {"label": "F2", "matrix": [ 0, 3], "y": 0, "x": 3.75 }, - {"label": "F3", "matrix": [ 0, 4], "y": 0, "x": 4.75 }, - {"label": "F4", "matrix": [ 0, 5], "y": 0, "x": 5.75 }, - {"label": "F5", "matrix": [ 0, 6], "y": 0, "x": 7 }, - {"label": "F6", "matrix": [ 0, 7], "y": 0, "x": 8 }, - {"label": "F7", "matrix": [ 6, 0], "y": 0, "x": 10 }, // Row 0, Right - {"label": "F8", "matrix": [ 6, 1], "y": 0, "x": 11 }, - {"label": "F9", "matrix": [ 6, 2], "y": 0, "x": 12.25 }, - {"label": "F10", "matrix": [ 6, 3], "y": 0, "x": 13.25 }, - {"label": "F11", "matrix": [ 6, 4], "y": 0, "x": 14.25 }, - {"label": "F12", "matrix": [ 6, 5], "y": 0, "x": 15.25 }, - {"label": "F13", "matrix": [ 6, 6], "y": 0, "x": 16.5 }, - {"label": "RENC", "matrix": [ 6, 8], "y": 0, "x": 18 }, - - {"label": "M1", "matrix": [ 1, 0], "y": 1, "x": 0 }, // Row 1, Left - {"label": "GRAV", "matrix": [ 1, 1], "y": 1, "x": 1.5 }, - {"label": "1", "matrix": [ 1, 2], "y": 1, "x": 2.5 }, - {"label": "2", "matrix": [ 1, 3], "y": 1, "x": 3.5 }, - {"label": "3", "matrix": [ 1, 4], "y": 1, "x": 4.5 }, - {"label": "4", "matrix": [ 1, 5], "y": 1, "x": 5.5 }, - {"label": "5", "matrix": [ 1, 6], "y": 1, "x": 6.5 }, - {"label": "6", "matrix": [ 1, 7], "y": 1, "x": 7.5 }, - {"label": "7", "matrix": [ 7, 0], "y": 1, "x": 9.5 }, // Row 1, Right - {"label": "8", "matrix": [ 7, 1], "y": 1, "x": 10.5 }, - {"label": "9", "matrix": [ 7, 2], "y": 1, "x": 11.5 }, - {"label": "0", "matrix": [ 7, 3], "y": 1, "x": 12.5 }, - {"label": "-", "matrix": [ 7, 4], "y": 1, "x": 13.5 }, - {"label": "=", "matrix": [ 7, 5], "y": 1, "x": 14.5 }, - {"label": "Back", "matrix": [ 7, 6], "y": 1, "x": 15.5 }, - {"label": "Del", "matrix": [ 7, 7], "y": 1, "x": 16.5 }, - {"label": "Home", "matrix": [ 6, 8], "y": 1, "x": 18 }, - - {"label": "M2", "matrix": [ 2, 0], "y": 2, "x": 0 }, // Row 2, Left - {"label": "Tab", "matrix": [ 2, 1], "y": 2, "x": 1.5, "w": 1.5 }, - {"label": "Q", "matrix": [ 2, 3], "y": 2, "x": 3 }, - {"label": "W", "matrix": [ 2, 4], "y": 2, "x": 4 }, - {"label": "E", "matrix": [ 2, 5], "y": 2, "x": 5 }, - {"label": "R", "matrix": [ 2, 6], "y": 2, "x": 6 }, - {"label": "T", "matrix": [ 2, 7], "y": 2, "x": 7 }, - {"label": "Y", "matrix": [ 8, 0], "y": 2, "x": 9 }, - {"label": "U", "matrix": [ 8, 1], "y": 2, "x": 10 }, // Row 2, Right - {"label": "I", "matrix": [ 8, 2], "y": 2, "x": 11 }, - {"label": "O", "matrix": [ 8, 3], "y": 2, "x": 12 }, - {"label": "P", "matrix": [ 8, 4], "y": 2, "x": 13 }, - {"label": "[", "matrix": [ 8, 5], "y": 2, "x": 14 }, - {"label": "]", "matrix": [ 8, 6], "y": 2, "x": 15 }, - {"label": "BSLS", "matrix": [ 8, 7], "y": 2, "x": 16, "w": 1.5 }, - {"label": "PgUp", "matrix": [ 8, 8], "y": 2, "x": 18 }, - - {"label": "M3", "matrix": [ 3, 0], "y": 3, "x": 0 }, // Row 3, Left - {"label": "Caps", "matrix": [ 3, 1], "y": 3, "x": 1.5, "w": 1.75 }, - {"label": "A", "matrix": [ 3, 3], "y": 3, "x": 3.25 }, - {"label": "S", "matrix": [ 3, 4], "y": 3, "x": 4.25 }, - {"label": "D", "matrix": [ 3, 5], "y": 3, "x": 5.25 }, - {"label": "F", "matrix": [ 3, 6], "y": 3, "x": 6.25 }, - {"label": "G", "matrix": [ 3, 7], "y": 3, "x": 7.25 }, - {"label": "H", "matrix": [ 9, 0], "y": 3, "x": 9.25 }, - {"label": "J", "matrix": [ 9, 1], "y": 3, "x": 10.25 }, // Row 3, Right - {"label": "K", "matrix": [ 9, 2], "y": 3, "x": 11.25 }, - {"label": "L", "matrix": [ 9, 3], "y": 3, "x": 12.25 }, - {"label": ";", "matrix": [ 9, 4], "y": 3, "x": 13.25 }, - {"label": "'", "matrix": [ 9, 5], "y": 3, "x": 14.25 }, - {"label":"Enter", "matrix": [ 9, 7], "y": 3, "x": 15.25, "w": 2.25 }, - {"label": "PgDn", "matrix": [ 9, 8], "y": 3, "x": 18 }, - - {"label": "M4", "matrix": [ 4, 0], "y": 4, "x": 0 }, // Row 4, Left - {"label":"Shift", "matrix": [ 4, 1], "y": 4, "x": 1.5, "w": 1.25 }, - {"label": "NUBS", "matrix": [ 4, 2], "y": 4, "x": 2.75 }, - {"label": "Z", "matrix": [ 4, 3], "y": 4, "x": 3.75 }, - {"label": "X", "matrix": [ 4, 4], "y": 4, "x": 4.75 }, - {"label": "C", "matrix": [ 4, 5], "y": 4, "x": 5.75 }, - {"label": "V", "matrix": [ 4, 6], "y": 4, "x": 6.75 }, - {"label": "B", "matrix": [ 4, 7], "y": 4, "x": 7.75 }, - {"label": "N", "matrix": [10, 0], "y": 4, "x": 9.75 }, // Row 4, Right - {"label": "M", "matrix": [10, 1], "y": 4, "x": 10.75 }, - {"label": ",", "matrix": [10, 2], "y": 4, "x": 11.75 }, - {"label": ".", "matrix": [10, 3], "y": 4, "x": 12.75 }, - {"label": "/", "matrix": [10, 4], "y": 4, "x": 13.75 }, - {"label":"Shift", "matrix": [10, 6], "y": 4, "x": 14.75, "w": 1.75 }, - {"label": "Up", "matrix": [10, 7], "y": 4, "x": 16.75 }, - {"label": "End", "matrix": [10, 8], "y": 4, "x": 18 }, - - {"label": "M5", "matrix": [ 5, 0], "y": 5, "x": 0 }, // Row 5, Left - {"label": "Ctrl", "matrix": [ 5, 1], "y": 5, "x": 1.5, "w": 1.25 }, - {"label": "Gui", "matrix": [ 5, 3], "y": 5, "x": 2.75, "w": 1.25 }, - {"label": "Alt", "matrix": [ 5, 4], "y": 5, "x": 4, "w": 1.25 }, - {"label":"Space", "matrix": [ 5, 7], "y": 5, "x": 5.25, "w": 2.25 }, - {"label": "FN", "matrix": [ 4, 5], "y": 5, "x": 7.5, "w": 1.25 }, - {"label":"Space", "matrix": [11, 1], "y": 5, "x": 9.75, "w": 2.75 }, // Row 5, Right - {"label": "Alt", "matrix": [11, 3], "y": 5, "x": 12.5 }, - {"label": "Gui", "matrix": [11, 4], "y": 5, "x": 13.5 }, - {"label": "Ctrl", "matrix": [11, 5], "y": 5, "x": 14.5 }, - {"label": "Left", "matrix": [11, 6], "y": 5, "x": 15.75 }, - {"label": "Down", "matrix": [11, 7], "y": 5, "x": 16.75 }, - {"label": "Rght", "matrix": [11, 8], "y": 5, "x": 17.75 } + {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, + {"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0}, + {"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0}, + {"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0}, + {"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0}, + {"label": "F5", "matrix": [0, 6], "x": 7, "y": 0}, + {"label": "F6", "matrix": [0, 7], "x": 8, "y": 0}, + {"label": "F7", "matrix": [6, 0], "x": 10, "y": 0}, + {"label": "F8", "matrix": [6, 1], "x": 11, "y": 0}, + {"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0}, + {"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0}, + {"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0}, + {"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0}, + {"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0}, + {"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0}, + {"label": "M1", "matrix": [1, 0], "x": 0, "y": 1}, + {"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1}, + {"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1}, + {"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1}, + {"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1}, + {"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1}, + {"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1}, + {"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1}, + {"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1}, + {"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1}, + {"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1}, + {"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1}, + {"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1}, + {"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1}, + {"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1, "w": 2}, + {"label": "Home", "matrix": [7, 8], "x": 18, "y": 1}, + {"label": "M2", "matrix": [2, 0], "x": 0, "y": 2}, + {"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5}, + {"label": "Q", "matrix": [2, 3], "x": 3, "y": 2}, + {"label": "W", "matrix": [2, 4], "x": 4, "y": 2}, + {"label": "E", "matrix": [2, 5], "x": 5, "y": 2}, + {"label": "R", "matrix": [2, 6], "x": 6, "y": 2}, + {"label": "T", "matrix": [2, 7], "x": 7, "y": 2}, + {"label": "Y", "matrix": [8, 0], "x": 9, "y": 2}, + {"label": "U", "matrix": [8, 1], "x": 10, "y": 2}, + {"label": "I", "matrix": [8, 2], "x": 11, "y": 2}, + {"label": "O", "matrix": [8, 3], "x": 12, "y": 2}, + {"label": "P", "matrix": [8, 4], "x": 13, "y": 2}, + {"label": "[", "matrix": [8, 5], "x": 14, "y": 2}, + {"label": "]", "matrix": [8, 6], "x": 15, "y": 2}, + {"label": "BSLS", "matrix": [8, 7], "x": 16, "y": 2, "w": 1.5}, + {"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2}, + {"label": "M3", "matrix": [3, 0], "x": 0, "y": 3}, + {"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75}, + {"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3}, + {"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3}, + {"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3}, + {"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3}, + {"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3}, + {"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3}, + {"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3}, + {"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3}, + {"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3}, + {"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3}, + {"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3}, + {"label": "Enter", "matrix": [9, 7], "x": 15.25, "y": 3, "w": 2.25}, + {"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3}, + {"label": "M4", "matrix": [4, 0], "x": 0, "y": 4}, + {"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 2.25}, + {"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4}, + {"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4}, + {"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4}, + {"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4}, + {"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4}, + {"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4}, + {"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4}, + {"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4}, + {"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4}, + {"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4}, + {"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75}, + {"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4}, + {"label": "End", "matrix": [10, 8], "x": 18, "y": 4}, + {"label": "M5", "matrix": [5, 0], "x": 0, "y": 5}, + {"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25}, + {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, + {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, + {"label": "FN", "matrix": [5,7], "x": 7.5, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, + {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, + {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, + {"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5}, + {"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5}, + {"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5}, + {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} ] }, - "LAYOUT_75xt_ansi": { // ANSI layout will work on solder and hotswap + "LAYOUT_75xt_hs_all": { "layout": [ - {"label": "LENC", "matrix": [ 0, 0], "y": 0, "x": 0 }, // Row 0, Left - {"label": "ESC", "matrix": [ 0, 1], "y": 0, "x": 1.5 }, - {"label": "F1", "matrix": [ 0, 2], "y": 0, "x": 2.75 }, - {"label": "F2", "matrix": [ 0, 3], "y": 0, "x": 3.75 }, - {"label": "F3", "matrix": [ 0, 4], "y": 0, "x": 4.75 }, - {"label": "F4", "matrix": [ 0, 5], "y": 0, "x": 5.75 }, - {"label": "F5", "matrix": [ 0, 6], "y": 0, "x": 7 }, - {"label": "F6", "matrix": [ 0, 7], "y": 0, "x": 8 }, - {"label": "F7", "matrix": [ 6, 0], "y": 0, "x": 10 }, // Row 0, Right - {"label": "F8", "matrix": [ 6, 1], "y": 0, "x": 11 }, - {"label": "F9", "matrix": [ 6, 2], "y": 0, "x": 12.25 }, - {"label": "F10", "matrix": [ 6, 3], "y": 0, "x": 13.25 }, - {"label": "F11", "matrix": [ 6, 4], "y": 0, "x": 14.25 }, - {"label": "F12", "matrix": [ 6, 5], "y": 0, "x": 15.25 }, - {"label": "F13", "matrix": [ 6, 6], "y": 0, "x": 16.5 }, - {"label": "RENC", "matrix": [ 6, 8], "y": 0, "x": 18 }, - - {"label": "M1", "matrix": [ 1, 0], "y": 1, "x": 0 }, // Row 1, Left - {"label": "GRAV", "matrix": [ 1, 1], "y": 1, "x": 1.5 }, - {"label": "1", "matrix": [ 1, 2], "y": 1, "x": 2.5 }, - {"label": "2", "matrix": [ 1, 3], "y": 1, "x": 3.5 }, - {"label": "3", "matrix": [ 1, 4], "y": 1, "x": 4.5 }, - {"label": "4", "matrix": [ 1, 5], "y": 1, "x": 5.5 }, - {"label": "5", "matrix": [ 1, 6], "y": 1, "x": 6.5 }, - {"label": "6", "matrix": [ 1, 7], "y": 1, "x": 7.5 }, - {"label": "7", "matrix": [ 7, 0], "y": 1, "x": 9.5 }, // Row 1, Right - {"label": "8", "matrix": [ 7, 1], "y": 1, "x": 10.5 }, - {"label": "9", "matrix": [ 7, 2], "y": 1, "x": 11.5 }, - {"label": "0", "matrix": [ 7, 3], "y": 1, "x": 12.5 }, - {"label": "-", "matrix": [ 7, 4], "y": 1, "x": 13.5 }, - {"label": "=", "matrix": [ 7, 5], "y": 1, "x": 14.5 }, - {"label": "Back", "matrix": [ 7, 6], "y": 1, "x": 15.5, "w": 2 }, - {"label": "Home", "matrix": [ 6, 8], "y": 1, "x": 18 }, - - {"label": "M2", "matrix": [ 2, 0], "y": 2, "x": 0 }, // Row 2, Left - {"label": "Tab", "matrix": [ 2, 1], "y": 2, "x": 1.5, "w": 1.5 }, - {"label": "Q", "matrix": [ 2, 3], "y": 2, "x": 3 }, - {"label": "W", "matrix": [ 2, 4], "y": 2, "x": 4 }, - {"label": "E", "matrix": [ 2, 5], "y": 2, "x": 5 }, - {"label": "R", "matrix": [ 2, 6], "y": 2, "x": 6 }, - {"label": "T", "matrix": [ 2, 7], "y": 2, "x": 7 }, - {"label": "Y", "matrix": [ 8, 0], "y": 2, "x": 9 }, - {"label": "U", "matrix": [ 8, 1], "y": 2, "x": 10 }, // Row 2, Right - {"label": "I", "matrix": [ 8, 2], "y": 2, "x": 11 }, - {"label": "O", "matrix": [ 8, 3], "y": 2, "x": 12 }, - {"label": "P", "matrix": [ 8, 4], "y": 2, "x": 13 }, - {"label": "[", "matrix": [ 8, 5], "y": 2, "x": 14 }, - {"label": "]", "matrix": [ 8, 6], "y": 2, "x": 15 }, - {"label": "BSLS", "matrix": [ 8, 7], "y": 2, "x": 16, "w": 1.5 }, - {"label": "PgUp", "matrix": [ 8, 8], "y": 2, "x": 18 }, - - {"label": "M3", "matrix": [ 3, 0], "y": 3, "x": 0 }, // Row 3, Left - {"label": "Caps", "matrix": [ 3, 1], "y": 3, "x": 1.5, "w": 1.75 }, - {"label": "A", "matrix": [ 3, 3], "y": 3, "x": 3.25 }, - {"label": "S", "matrix": [ 3, 4], "y": 3, "x": 4.25 }, - {"label": "D", "matrix": [ 3, 5], "y": 3, "x": 5.25 }, - {"label": "F", "matrix": [ 3, 6], "y": 3, "x": 6.25 }, - {"label": "G", "matrix": [ 3, 7], "y": 3, "x": 7.25 }, - {"label": "H", "matrix": [ 9, 0], "y": 3, "x": 9.25 }, - {"label": "J", "matrix": [ 9, 1], "y": 3, "x": 10.25 }, // Row 3, Right - {"label": "K", "matrix": [ 9, 2], "y": 3, "x": 11.25 }, - {"label": "L", "matrix": [ 9, 3], "y": 3, "x": 12.25 }, - {"label": ";", "matrix": [ 9, 4], "y": 3, "x": 13.25 }, - {"label": "'", "matrix": [ 9, 5], "y": 3, "x": 14.25 }, - {"label":"Enter", "matrix": [ 9, 7], "y": 3, "x": 15.25, "w": 2.25 }, - {"label": "PgDn", "matrix": [ 9, 8], "y": 3, "x": 18 }, - - {"label": "M4", "matrix": [ 4, 0], "y": 4, "x": 0 }, // Row 4, Left - {"label":"Shift", "matrix": [ 4, 1], "y": 4, "x": 1.5, "w": 2.25 }, - {"label": "Z", "matrix": [ 4, 3], "y": 4, "x": 3.75 }, - {"label": "X", "matrix": [ 4, 4], "y": 4, "x": 4.75 }, - {"label": "C", "matrix": [ 4, 5], "y": 4, "x": 5.75 }, - {"label": "V", "matrix": [ 4, 6], "y": 4, "x": 6.75 }, - {"label": "B", "matrix": [ 4, 7], "y": 4, "x": 7.75 }, - {"label": "N", "matrix": [10, 0], "y": 4, "x": 9.75 }, // Row 4, Right - {"label": "M", "matrix": [10, 1], "y": 4, "x": 10.75 }, - {"label": ",", "matrix": [10, 2], "y": 4, "x": 11.75 }, - {"label": ".", "matrix": [10, 3], "y": 4, "x": 12.75 }, - {"label": "/", "matrix": [10, 4], "y": 4, "x": 13.75 }, - {"label":"Shift", "matrix": [10, 6], "y": 4, "x": 14.75, "w": 1.75 }, - {"label": "Up", "matrix": [10, 7], "y": 4, "x": 16.75 }, - {"label": "End", "matrix": [10, 8], "y": 4, "x": 18 }, - - {"label": "M5", "matrix": [ 5, 0], "y": 5, "x": 0 }, // Row 5, Left - {"label": "Ctrl", "matrix": [ 5, 1], "y": 5, "x": 1.5, "w": 1.25 }, - {"label": "Gui", "matrix": [ 5, 3], "y": 5, "x": 2.75, "w": 1.25 }, - {"label": "Alt", "matrix": [ 5, 4], "y": 5, "x": 4, "w": 1.25 }, - {"label":"Space", "matrix": [ 5, 7], "y": 5, "x": 5.25, "w": 2.25 }, - {"label": "FN", "matrix": [ 4, 5], "y": 5, "x": 7.5, "w": 1.25 }, - {"label":"Space", "matrix": [11, 1], "y": 5, "x": 9.75, "w": 2.75 }, // Row 5, Right - {"label": "Alt", "matrix": [11, 3], "y": 5, "x": 12.5 }, - {"label": "Gui", "matrix": [11, 4], "y": 5, "x": 13.5 }, - {"label": "Ctrl", "matrix": [11, 5], "y": 5, "x": 14.5 }, - {"label": "Left", "matrix": [11, 6], "y": 5, "x": 15.75 }, - {"label": "Down", "matrix": [11, 7], "y": 5, "x": 16.75 }, - {"label": "Rght", "matrix": [11, 8], "y": 5, "x": 17.75 } + {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, + {"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0}, + {"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0}, + {"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0}, + {"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0}, + {"label": "F5", "matrix": [0, 6], "x": 7, "y": 0}, + {"label": "F6", "matrix": [0, 7], "x": 8, "y": 0}, + {"label": "F7", "matrix": [6, 0], "x": 10, "y": 0}, + {"label": "F8", "matrix": [6, 1], "x": 11, "y": 0}, + {"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0}, + {"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0}, + {"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0}, + {"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0}, + {"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0}, + {"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0}, + {"label": "M1", "matrix": [1, 0], "x": 0, "y": 1}, + {"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1}, + {"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1}, + {"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1}, + {"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1}, + {"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1}, + {"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1}, + {"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1}, + {"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1}, + {"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1}, + {"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1}, + {"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1}, + {"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1}, + {"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1}, + {"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1}, + {"label": "Del", "matrix": [7, 7], "x": 16.5, "y": 1}, + {"label": "Home", "matrix": [7, 8], "x": 18, "y": 1}, + {"label": "M2", "matrix": [2, 0], "x": 0, "y": 2}, + {"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5}, + {"label": "Q", "matrix": [2, 3], "x": 3, "y": 2}, + {"label": "W", "matrix": [2, 4], "x": 4, "y": 2}, + {"label": "E", "matrix": [2, 5], "x": 5, "y": 2}, + {"label": "R", "matrix": [2, 6], "x": 6, "y": 2}, + {"label": "T", "matrix": [2, 7], "x": 7, "y": 2}, + {"label": "Y", "matrix": [8, 0], "x": 9, "y": 2}, + {"label": "U", "matrix": [8, 1], "x": 10, "y": 2}, + {"label": "I", "matrix": [8, 2], "x": 11, "y": 2}, + {"label": "O", "matrix": [8, 3], "x": 12, "y": 2}, + {"label": "P", "matrix": [8, 4], "x": 13, "y": 2}, + {"label": "[", "matrix": [8, 5], "x": 14, "y": 2}, + {"label": "]", "matrix": [8, 6], "x": 15, "y": 2}, + {"label": "BSLS", "matrix": [8, 7], "x": 16, "y": 2, "w": 1.5}, + {"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2}, + {"label": "M3", "matrix": [3, 0], "x": 0, "y": 3}, + {"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75}, + {"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3}, + {"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3}, + {"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3}, + {"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3}, + {"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3}, + {"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3}, + {"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3}, + {"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3}, + {"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3}, + {"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3}, + {"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3}, + {"label": "Enter", "matrix": [9, 7], "x": 15.25, "y": 3, "w": 2.25}, + {"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3}, + {"label": "M4", "matrix": [4, 0], "x": 0, "y": 4}, + {"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.25}, + {"label": "NUBS", "matrix": [4, 2], "x": 2.75, "y": 4}, + {"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4}, + {"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4}, + {"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4}, + {"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4}, + {"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4}, + {"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4}, + {"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4}, + {"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4}, + {"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4}, + {"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4}, + {"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75}, + {"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4}, + {"label": "End", "matrix": [10, 8], "x": 18, "y": 4}, + {"label": "M5", "matrix": [5, 0], "x": 0, "y": 5}, + {"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25}, + {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, + {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, + {"label": "FN", "matrix": [5,7], "x": 7.5, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, + {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, + {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, + {"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5}, + {"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5}, + {"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5}, + {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} ] }, - "LAYOUT_75xt_iso": { // ISO layout requires solder PCB for NUHS/ISO enter + "LAYOUT_75xt_iso": { "layout": [ - {"label": "LENC", "matrix": [ 0, 0], "y": 0, "x": 0 }, // Row 0, Left - {"label": "ESC", "matrix": [ 0, 1], "y": 0, "x": 1.5 }, - {"label": "F1", "matrix": [ 0, 2], "y": 0, "x": 2.75 }, - {"label": "F2", "matrix": [ 0, 3], "y": 0, "x": 3.75 }, - {"label": "F3", "matrix": [ 0, 4], "y": 0, "x": 4.75 }, - {"label": "F4", "matrix": [ 0, 5], "y": 0, "x": 5.75 }, - {"label": "F5", "matrix": [ 0, 6], "y": 0, "x": 7 }, - {"label": "F6", "matrix": [ 0, 7], "y": 0, "x": 8 }, - {"label": "F7", "matrix": [ 6, 0], "y": 0, "x": 10 }, // Row 0, Right - {"label": "F8", "matrix": [ 6, 1], "y": 0, "x": 11 }, - {"label": "F9", "matrix": [ 6, 2], "y": 0, "x": 12.25 }, - {"label": "F10", "matrix": [ 6, 3], "y": 0, "x": 13.25 }, - {"label": "F11", "matrix": [ 6, 4], "y": 0, "x": 14.25 }, - {"label": "F12", "matrix": [ 6, 5], "y": 0, "x": 15.25 }, - {"label": "F13", "matrix": [ 6, 6], "y": 0, "x": 16.5 }, - {"label": "RENC", "matrix": [ 6, 8], "y": 0, "x": 18 }, - - {"label": "M1", "matrix": [ 1, 0], "y": 1, "x": 0 }, // Row 1, Left - {"label": "GRAV", "matrix": [ 1, 1], "y": 1, "x": 1.5 }, - {"label": "1", "matrix": [ 1, 2], "y": 1, "x": 2.5 }, - {"label": "2", "matrix": [ 1, 3], "y": 1, "x": 3.5 }, - {"label": "3", "matrix": [ 1, 4], "y": 1, "x": 4.5 }, - {"label": "4", "matrix": [ 1, 5], "y": 1, "x": 5.5 }, - {"label": "5", "matrix": [ 1, 6], "y": 1, "x": 6.5 }, - {"label": "6", "matrix": [ 1, 7], "y": 1, "x": 7.5 }, - {"label": "7", "matrix": [ 7, 0], "y": 1, "x": 9.5 }, // Row 1, Right - {"label": "8", "matrix": [ 7, 1], "y": 1, "x": 10.5 }, - {"label": "9", "matrix": [ 7, 2], "y": 1, "x": 11.5 }, - {"label": "0", "matrix": [ 7, 3], "y": 1, "x": 12.5 }, - {"label": "-", "matrix": [ 7, 4], "y": 1, "x": 13.5 }, - {"label": "=", "matrix": [ 7, 5], "y": 1, "x": 14.5 }, - {"label": "Back", "matrix": [ 7, 6], "y": 1, "x": 15.5 }, - {"label": "Del", "matrix": [ 7, 7], "y": 1, "x": 16.5 }, - {"label": "Home", "matrix": [ 6, 8], "y": 1, "x": 18 }, - - {"label": "M2", "matrix": [ 2, 0], "y": 2, "x": 0 }, // Row 2, Left - {"label": "Tab", "matrix": [ 2, 1], "y": 2, "x": 1.5, "w": 1.5 }, - {"label": "Q", "matrix": [ 2, 3], "y": 2, "x": 3 }, - {"label": "W", "matrix": [ 2, 4], "y": 2, "x": 4 }, - {"label": "E", "matrix": [ 2, 5], "y": 2, "x": 5 }, - {"label": "R", "matrix": [ 2, 6], "y": 2, "x": 6 }, - {"label": "T", "matrix": [ 2, 7], "y": 2, "x": 7 }, - {"label": "Y", "matrix": [ 8, 0], "y": 2, "x": 9 }, - {"label": "U", "matrix": [ 8, 1], "y": 2, "x": 10 }, // Row 2, Right - {"label": "I", "matrix": [ 8, 2], "y": 2, "x": 11 }, - {"label": "O", "matrix": [ 8, 3], "y": 2, "x": 12 }, - {"label": "P", "matrix": [ 8, 4], "y": 2, "x": 13 }, - {"label": "[", "matrix": [ 8, 5], "y": 2, "x": 14 }, - {"label": "]", "matrix": [ 8, 6], "y": 2, "x": 15 }, - {"label": "PgUp", "matrix": [ 8, 8], "y": 2, "x": 18 }, - - {"label": "M3", "matrix": [ 3, 0], "y": 3, "x": 0 }, // Row 3, Left - {"label": "Caps", "matrix": [ 3, 1], "y": 3, "x": 1.5, "w": 1.75 }, - {"label": "A", "matrix": [ 3, 3], "y": 3, "x": 3.25 }, - {"label": "S", "matrix": [ 3, 4], "y": 3, "x": 4.25 }, - {"label": "D", "matrix": [ 3, 5], "y": 3, "x": 5.25 }, - {"label": "F", "matrix": [ 3, 6], "y": 3, "x": 6.25 }, - {"label": "G", "matrix": [ 3, 7], "y": 3, "x": 7.25 }, - {"label": "H", "matrix": [ 9, 0], "y": 3, "x": 9.25 }, - {"label": "J", "matrix": [ 9, 1], "y": 3, "x": 10.25 }, // Row 3, Right - {"label": "K", "matrix": [ 9, 2], "y": 3, "x": 11.25 }, - {"label": "L", "matrix": [ 9, 3], "y": 3, "x": 12.25 }, - {"label": ";", "matrix": [ 9, 4], "y": 3, "x": 13.25 }, - {"label": "'", "matrix": [ 9, 5], "y": 3, "x": 14.25 }, - {"label": "NUHS", "matrix": [ 9, 6], "y": 3, "x": 15.25 }, - {"label":"Enter", "matrix": [ 9, 7], "y": 2, "x": 16.25, "w": 1.25, "h": 2 }, - {"label": "PgDn", "matrix": [ 9, 8], "y": 3, "x": 18 }, - - {"label": "M4", "matrix": [ 4, 0], "y": 4, "x": 0 }, // Row 4, Left - {"label":"Shift", "matrix": [ 4, 1], "y": 4, "x": 1.5, "w": 1.25 }, - {"label": "NUBS", "matrix": [ 4, 2], "y": 4, "x": 2.75 }, - {"label": "Z", "matrix": [ 4, 3], "y": 4, "x": 3.75 }, - {"label": "X", "matrix": [ 4, 4], "y": 4, "x": 4.75 }, - {"label": "C", "matrix": [ 4, 5], "y": 4, "x": 5.75 }, - {"label": "V", "matrix": [ 4, 6], "y": 4, "x": 6.75 }, - {"label": "B", "matrix": [ 4, 7], "y": 4, "x": 7.75 }, - {"label": "N", "matrix": [10, 0], "y": 4, "x": 9.75 }, // Row 4, Right - {"label": "M", "matrix": [10, 1], "y": 4, "x": 10.75 }, - {"label": ",", "matrix": [10, 2], "y": 4, "x": 11.75 }, - {"label": ".", "matrix": [10, 3], "y": 4, "x": 12.75 }, - {"label": "/", "matrix": [10, 4], "y": 4, "x": 13.75 }, - {"label":"Shift", "matrix": [10, 6], "y": 4, "x": 14.75, "w": 1.75 }, - {"label": "Up", "matrix": [10, 7], "y": 4, "x": 16.75 }, - {"label": "End", "matrix": [10, 8], "y": 4, "x": 18 }, - - {"label": "M5", "matrix": [ 5, 0], "y": 5, "x": 0 }, // Row 5, Left - {"label": "Ctrl", "matrix": [ 5, 1], "y": 5, "x": 1.5, "w": 1.25 }, - {"label": "Gui", "matrix": [ 5, 3], "y": 5, "x": 2.75, "w": 1.25 }, - {"label": "Alt", "matrix": [ 5, 4], "y": 5, "x": 4, "w": 1.25 }, - {"label":"Space", "matrix": [ 5, 7], "y": 5, "x": 5.25, "w": 2.25 }, - {"label": "FN", "matrix": [ 4, 5], "y": 5, "x": 7.5, "w": 1.25 }, - {"label":"Space", "matrix": [11, 1], "y": 5, "x": 9.75, "w": 2.75 }, // Row 5, Right - {"label": "Alt", "matrix": [11, 3], "y": 5, "x": 12.5 }, - {"label": "Gui", "matrix": [11, 4], "y": 5, "x": 13.5 }, - {"label": "Ctrl", "matrix": [11, 5], "y": 5, "x": 14.5 }, - {"label": "Left", "matrix": [11, 6], "y": 5, "x": 15.75 }, - {"label": "Down", "matrix": [11, 7], "y": 5, "x": 16.75 }, - {"label": "Rght", "matrix": [11, 8], "y": 5, "x": 17.75 } + {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, + {"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0}, + {"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0}, + {"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0}, + {"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0}, + {"label": "F5", "matrix": [0, 6], "x": 7, "y": 0}, + {"label": "F6", "matrix": [0, 7], "x": 8, "y": 0}, + {"label": "F7", "matrix": [6, 0], "x": 10, "y": 0}, + {"label": "F8", "matrix": [6, 1], "x": 11, "y": 0}, + {"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0}, + {"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0}, + {"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0}, + {"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0}, + {"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0}, + {"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0}, + {"label": "M1", "matrix": [1, 0], "x": 0, "y": 1}, + {"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1}, + {"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1}, + {"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1}, + {"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1}, + {"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1}, + {"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1}, + {"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1}, + {"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1}, + {"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1}, + {"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1}, + {"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1}, + {"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1}, + {"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1}, + {"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1, "w": 2}, + {"label": "Home", "matrix": [7, 8], "x": 18, "y": 1}, + {"label": "M2", "matrix": [2, 0], "x": 0, "y": 2}, + {"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5}, + {"label": "Q", "matrix": [2, 3], "x": 3, "y": 2}, + {"label": "W", "matrix": [2, 4], "x": 4, "y": 2}, + {"label": "E", "matrix": [2, 5], "x": 5, "y": 2}, + {"label": "R", "matrix": [2, 6], "x": 6, "y": 2}, + {"label": "T", "matrix": [2, 7], "x": 7, "y": 2}, + {"label": "Y", "matrix": [8, 0], "x": 9, "y": 2}, + {"label": "U", "matrix": [8, 1], "x": 10, "y": 2}, + {"label": "I", "matrix": [8, 2], "x": 11, "y": 2}, + {"label": "O", "matrix": [8, 3], "x": 12, "y": 2}, + {"label": "P", "matrix": [8, 4], "x": 13, "y": 2}, + {"label": "[", "matrix": [8, 5], "x": 14, "y": 2}, + {"label": "]", "matrix": [8, 6], "x": 15, "y": 2}, + {"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2}, + {"label": "M3", "matrix": [3, 0], "x": 0, "y": 3}, + {"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75}, + {"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3}, + {"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3}, + {"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3}, + {"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3}, + {"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3}, + {"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3}, + {"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3}, + {"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3}, + {"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3}, + {"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3}, + {"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3}, + {"label": "NUHS", "matrix": [9, 6], "x": 15.25, "y": 3}, + {"label": "Enter", "matrix": [9, 7], "x": 16.25, "y": 2, "w": 1.25, "h": 2}, + {"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3}, + {"label": "M4", "matrix": [4, 0], "x": 0, "y": 4}, + {"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.25}, + {"label": "NUBS", "matrix": [4, 2], "x": 2.75, "y": 4}, + {"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4}, + {"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4}, + {"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4}, + {"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4}, + {"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4}, + {"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4}, + {"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4}, + {"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4}, + {"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4}, + {"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4}, + {"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75}, + {"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4}, + {"label": "End", "matrix": [10, 8], "x": 18, "y": 4}, + {"label": "M5", "matrix": [5, 0], "x": 0, "y": 5}, + {"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25}, + {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, + {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, + {"label": "FN", "matrix": [5,7], "x": 7.5, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, + {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, + {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, + {"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5}, + {"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5}, + {"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5}, + {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} ] - }, + } } -} +} \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c index bc5b82d71dc..53c43483f5a 100644 --- a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c @@ -20,11 +20,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_75xt_ansi( KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, - KC_F13, KC_GRAV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, KC_F16, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1), KC_SPC KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), [1] = LAYOUT_75xt_ansi( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ) }; diff --git a/keyboards/haverworks/theseus75/keymaps/default/keymap.c b/keyboards/haverworks/theseus75/keymaps/default/keymap.c index 9a7f3b20a38..1608041aba6 100644 --- a/keyboards/haverworks/theseus75/keymaps/default/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/default/keymap.c @@ -20,11 +20,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_75xt_all( KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, - KC_F13, KC_GRAV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, + KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, KC_F16, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1), KC_SPC KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), [1] = LAYOUT_75xt_all( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ) }; diff --git a/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c b/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c index 98f34b88e1e..390861e65ba 100644 --- a/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c @@ -20,11 +20,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_75xt_hs_all( KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, - KC_F13, KC_GRAV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, + KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, KC_F16, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1), KC_SPC KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), [1] = LAYOUT_75xt_hs_all( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ) }; diff --git a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c index 3f0320d758e..9f1657ef98d 100644 --- a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c @@ -20,11 +20,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_75xt_iso( KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, - KC_F13, KC_GRAV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, KC_F16, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1), KC_SPC KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), [1] = LAYOUT_75xt_iso( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ) }; diff --git a/keyboards/haverworks/theseus75/keymaps/via/keymap.c b/keyboards/haverworks/theseus75/keymaps/via/keymap.c index 9a7f3b20a38..1608041aba6 100644 --- a/keyboards/haverworks/theseus75/keymaps/via/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/via/keymap.c @@ -20,11 +20,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_75xt_all( KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, - KC_F13, KC_GRAV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, + KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, KC_F16, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1), KC_SPC KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), [1] = LAYOUT_75xt_all( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ) }; diff --git a/keyboards/haverworks/theseus75/mcuconf.h b/keyboards/haverworks/theseus75/mcuconf.h index 98172cc99ad..01cf839d71e 100644 --- a/keyboards/haverworks/theseus75/mcuconf.h +++ b/keyboards/haverworks/theseus75/mcuconf.h @@ -18,5 +18,10 @@ #include_next +/* enable USART3, used for split comms */ #undef STM32_SERIAL_USE_USART3 -#define STM32_SERIAL_USE_USART3 TRUE \ No newline at end of file +#define STM32_SERIAL_USE_USART3 TRUE + +/* enable TIM3, used for Underglow PWM driver */ +#undef STM32_PWM_USE_TIM3 +#define STM32_PWM_USE_TIM3 TRUE \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/rules.mk b/keyboards/haverworks/theseus75/rules.mk index 2c49b41d7a0..59b74ac86bd 100644 --- a/keyboards/haverworks/theseus75/rules.mk +++ b/keyboards/haverworks/theseus75/rules.mk @@ -1 +1 @@ -# This file is intentionally left blank \ No newline at end of file +SERIAL_DRIVER = usart \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/stm32_registry.h b/keyboards/haverworks/theseus75/stm32_registry.h new file mode 100644 index 00000000000..b99e7fb2301 --- /dev/null +++ b/keyboards/haverworks/theseus75/stm32_registry.h @@ -0,0 +1,24 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once +#include_next "stm32_registry.h" + +#undef STM32_FLASH_NUMBER_OF_BANKS +#define STM32_FLASH_NUMBER_OF_BANKS 1 + +#undef STM32_FLASH_SECTORS_PER_BANK +#define STM32_FLASH_SECTORS_PER_BANK 64 \ No newline at end of file From 808952d74b438a6f0839dd4c45cd9e49f2a3f6aa Mon Sep 17 00:00:00 2001 From: Moritz Date: Fri, 9 Jun 2023 17:46:11 +0200 Subject: [PATCH 04/53] add some more comments, reserve more eeprom for VIA keymap --- keyboards/haverworks/theseus75/config.h | 17 +++++++++------- keyboards/haverworks/theseus75/hal_lld.h | 1 + keyboards/haverworks/theseus75/info.json | 3 ++- .../haverworks/theseus75/keymaps/via/config.h | 20 +++++++++++++++++++ .../haverworks/theseus75/stm32_registry.h | 2 ++ 5 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 keyboards/haverworks/theseus75/keymaps/via/config.h diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 0ac808c3aa0..db87ce6c2f8 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -16,31 +16,34 @@ #pragma once -// Set up split communications +/* Set up split communications */ #define SERIAL_USART_DRIVER SD3 #define SOFT_SERIAL_PIN B10 // The GPIO pin that is used split communication. #define USART3_REMAP // Remap USART TX and RX pins for half duplex #define SERIAL_USART_TX_PAL_MODE 7 // Pin alternate function 7 = USART3_TX for PB10 +#if defined(SOFT_SERIAL_PIN) +# define SERIAL_USART_TX_PIN SOFT_SERIAL_PIN +#endif + //#define SELECT_SOFT_SERIAL_SPEED {0} // Experimental, will make connection faster but may need testing. -// Set up various split configurations +/* Set up various split configurations */ //#define SPLIT_USB_DETECT // The side that manages to establish a USB connection will be master. Disabled because default on ARM targets. #define SPLIT_HAND_PIN B9 // The MCUs will probe a pin to determine if they are left or right side. high = left, low = right #define SPLIT_TRANSPORT_MIRROR // Sync data for RGB animations to match -#if defined(SOFT_SERIAL_PIN) -# define SERIAL_USART_TX_PIN SOFT_SERIAL_PIN -#endif -// Underglow +/* Underglow - TBD */ /* #define WS2812_PWM_DRIVER PWMD3 #define WS2812_PWM_CHANNEL 4 #define WS2812_PWM_PAL_MODE 10 #define WS2812_DMA_STREAM STM32_DMA1_STREAM2 #define WS2812_DMA_CHANNEL 2 +*/ + #define RGBLIGHT_SLEEP -*/ \ No newline at end of file +#define WS2812_EXTERNAL_PULLUP diff --git a/keyboards/haverworks/theseus75/hal_lld.h b/keyboards/haverworks/theseus75/hal_lld.h index 312564092d8..f15bf45b409 100644 --- a/keyboards/haverworks/theseus75/hal_lld.h +++ b/keyboards/haverworks/theseus75/hal_lld.h @@ -16,5 +16,6 @@ #pragma once +/* Load local stm32_registry after loading the ChibiOS one to patch ChibiOS bugs */ #include #include_next "hal_lld.h" \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/info.json b/keyboards/haverworks/theseus75/info.json index 798649658ba..c04188a66f1 100644 --- a/keyboards/haverworks/theseus75/info.json +++ b/keyboards/haverworks/theseus75/info.json @@ -116,7 +116,8 @@ "vid": "0x6877" }, "ws2812": { - "pin": "B7" + "pin": "B7", + "driver": "bitbang" }, "layouts": { "LAYOUT_75xt_all": { diff --git a/keyboards/haverworks/theseus75/keymaps/via/config.h b/keyboards/haverworks/theseus75/keymaps/via/config.h new file mode 100644 index 00000000000..fd33b00dbbc --- /dev/null +++ b/keyboards/haverworks/theseus75/keymaps/via/config.h @@ -0,0 +1,20 @@ +/* Copyright 2023 Moritz Plattner + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#define WEAR_LEVELING_BACKING_SIZE 16384 +#define WEAR_LEVELING_LOGICAL_SIZE 4096 \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/stm32_registry.h b/keyboards/haverworks/theseus75/stm32_registry.h index b99e7fb2301..0524fdc0457 100644 --- a/keyboards/haverworks/theseus75/stm32_registry.h +++ b/keyboards/haverworks/theseus75/stm32_registry.h @@ -17,8 +17,10 @@ #pragma once #include_next "stm32_registry.h" +/* This config is wrong in ChibiOS upstream. */ #undef STM32_FLASH_NUMBER_OF_BANKS #define STM32_FLASH_NUMBER_OF_BANKS 1 +/* This config is wrong in ChibiOS upstream. */ #undef STM32_FLASH_SECTORS_PER_BANK #define STM32_FLASH_SECTORS_PER_BANK 64 \ No newline at end of file From 762968e4a269a56503263823472d85eac753b718 Mon Sep 17 00:00:00 2001 From: Moritz Date: Fri, 9 Jun 2023 18:03:15 +0200 Subject: [PATCH 05/53] let info.json be re-formatted by qmk format-json --- keyboards/haverworks/theseus75/config.h | 3 --- keyboards/haverworks/theseus75/info.json | 18 +++++++++++------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index db87ce6c2f8..6030c4c2776 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -33,9 +33,6 @@ #define SPLIT_HAND_PIN B9 // The MCUs will probe a pin to determine if they are left or right side. high = left, low = right -#define SPLIT_TRANSPORT_MIRROR // Sync data for RGB animations to match - - /* Underglow - TBD */ /* #define WS2812_PWM_DRIVER PWMD3 diff --git a/keyboards/haverworks/theseus75/info.json b/keyboards/haverworks/theseus75/info.json index c04188a66f1..17835b4d70b 100644 --- a/keyboards/haverworks/theseus75/info.json +++ b/keyboards/haverworks/theseus75/info.json @@ -91,10 +91,10 @@ "split_count": [27, 26] }, "split": { - "enabled": true, "bootmagic": { "matrix": [6, 6] }, + "enabled": true, "encoder": { "right": { "rotary": [ @@ -107,6 +107,10 @@ "cols": ["A10", "A9", "A8", "C6", "B15", "B14", "B13", "B12", "C15"], "rows": ["B3", "C10", "C11", "A1", "A0", "B6"] } + }, + "transport": { + "sync_matrix_state": true, + "watchdog": true } }, "url": "https://haver.codes/", @@ -116,8 +120,8 @@ "vid": "0x6877" }, "ws2812": { - "pin": "B7", - "driver": "bitbang" + "driver": "bitbang", + "pin": "B7" }, "layouts": { "LAYOUT_75xt_all": { @@ -208,7 +212,7 @@ {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, - {"label": "FN", "matrix": [5,7], "x": 7.5, "y": 5, "w": 1.25}, + {"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25}, {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, @@ -303,7 +307,7 @@ {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, - {"label": "FN", "matrix": [5,7], "x": 7.5, "y": 5, "w": 1.25}, + {"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25}, {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, @@ -400,7 +404,7 @@ {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, - {"label": "FN", "matrix": [5,7], "x": 7.5, "y": 5, "w": 1.25}, + {"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25}, {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, @@ -496,7 +500,7 @@ {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, - {"label": "FN", "matrix": [5,7], "x": 7.5, "y": 5, "w": 1.25}, + {"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25}, {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, From 5d02cc76b5d38065b592b3cd13382d8a715f85ac Mon Sep 17 00:00:00 2001 From: Moritz Date: Mon, 3 Jul 2023 17:12:45 +0200 Subject: [PATCH 06/53] change from default (transient) to vendor eeprom driver --- keyboards/haverworks/theseus75/keymaps/via/config.h | 4 ++-- keyboards/haverworks/theseus75/rules.mk | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/keyboards/haverworks/theseus75/keymaps/via/config.h b/keyboards/haverworks/theseus75/keymaps/via/config.h index fd33b00dbbc..b15c0f09480 100644 --- a/keyboards/haverworks/theseus75/keymaps/via/config.h +++ b/keyboards/haverworks/theseus75/keymaps/via/config.h @@ -16,5 +16,5 @@ #pragma once -#define WEAR_LEVELING_BACKING_SIZE 16384 -#define WEAR_LEVELING_LOGICAL_SIZE 4096 \ No newline at end of file +#define WEAR_LEVELING_LOGICAL_SIZE 4096 +#define WEAR_LEVELING_BACKING_SIZE WEAR_LEVELING_LOGICAL_SIZE*2 diff --git a/keyboards/haverworks/theseus75/rules.mk b/keyboards/haverworks/theseus75/rules.mk index 59b74ac86bd..a635a4727ac 100644 --- a/keyboards/haverworks/theseus75/rules.mk +++ b/keyboards/haverworks/theseus75/rules.mk @@ -1 +1,2 @@ -SERIAL_DRIVER = usart \ No newline at end of file +SERIAL_DRIVER = usart +EEPROM_DRIVER ?= vendor From d0fd35e12ade4b4fd48c0bc167f6be701521208a Mon Sep 17 00:00:00 2001 From: Moritz Date: Mon, 3 Jul 2023 17:18:42 +0200 Subject: [PATCH 07/53] switched to explicit selection of eeprom drives --- keyboards/haverworks/theseus75/rules.mk | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/haverworks/theseus75/rules.mk b/keyboards/haverworks/theseus75/rules.mk index a635a4727ac..5c45a24e45b 100644 --- a/keyboards/haverworks/theseus75/rules.mk +++ b/keyboards/haverworks/theseus75/rules.mk @@ -1,2 +1,3 @@ SERIAL_DRIVER = usart -EEPROM_DRIVER ?= vendor +EEPROM_DRIVER = wear_leveling +WEAR_LEVELING_DRIVER = embedded_flash \ No newline at end of file From 68960f04c3463480fbdb17c3a1d46efb4de407cc Mon Sep 17 00:00:00 2001 From: Moritz Date: Mon, 3 Jul 2023 17:38:10 +0200 Subject: [PATCH 08/53] try forcing usb-c db pull-downs off --- keyboards/haverworks/theseus75/theseus75.c | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 9f6f75accaf..a99c86d7eb2 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -4,6 +4,7 @@ #include "quantum.h" void keyboard_post_init_kb(void) { + PWR->CR3 |= PWR_CR3_UCPD_DBDIS; // If the keyboard is master, turn on power to the split half, and to underglow LEDs if (is_keyboard_master()) { setPinOutput(A15); From 0af4e2b44c488e66c76fae83e94f49177fc822ea Mon Sep 17 00:00:00 2001 From: Moritz Date: Tue, 4 Jul 2023 16:43:06 +0200 Subject: [PATCH 09/53] made rgb matrix working --- keyboards/haverworks/theseus75/config.h | 9 +++++++++ keyboards/haverworks/theseus75/info.json | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 6030c4c2776..262b010e023 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -44,3 +44,12 @@ #define RGBLIGHT_SLEEP #define WS2812_EXTERNAL_PULLUP + +// Not yet available in `info.json` +#ifdef RGB_MATRIX_ENABLE +# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 128 +# define RGB_MATRIX_LED_COUNT 53 +# define RGB_MATRIX_SPLIT { 27, 26 } +# define SPLIT_TRANSPORT_MIRROR +# define NOP_FUDGE 0.4 +#endif diff --git a/keyboards/haverworks/theseus75/info.json b/keyboards/haverworks/theseus75/info.json index 17835b4d70b..322c130c80c 100644 --- a/keyboards/haverworks/theseus75/info.json +++ b/keyboards/haverworks/theseus75/info.json @@ -19,7 +19,8 @@ "encoder": true, "extrakey": true, "mousekey": true, - "nkro": true + "nkro": true, + "rgb_matrix": true }, "matrix_pins": { "cols": ["B11", "C15", "B6", "B5", "B4", "B3", "C11", "C10", null], From 3dc0bdc1d92c983fbe27826eaf12699d57e835b8 Mon Sep 17 00:00:00 2001 From: Moritz Date: Tue, 4 Jul 2023 17:00:20 +0200 Subject: [PATCH 10/53] switched from bitbang to PWM ws2812 driver --- keyboards/haverworks/theseus75/config.h | 32 +++++++++++------------- keyboards/haverworks/theseus75/info.json | 2 +- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 262b010e023..6baee04c78d 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -33,23 +33,21 @@ #define SPLIT_HAND_PIN B9 // The MCUs will probe a pin to determine if they are left or right side. high = left, low = right -/* Underglow - TBD */ -/* -#define WS2812_PWM_DRIVER PWMD3 -#define WS2812_PWM_CHANNEL 4 -#define WS2812_PWM_PAL_MODE 10 -#define WS2812_DMA_STREAM STM32_DMA1_STREAM2 -#define WS2812_DMA_CHANNEL 2 -*/ - -#define RGBLIGHT_SLEEP -#define WS2812_EXTERNAL_PULLUP - // Not yet available in `info.json` #ifdef RGB_MATRIX_ENABLE -# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 128 -# define RGB_MATRIX_LED_COUNT 53 -# define RGB_MATRIX_SPLIT { 27, 26 } -# define SPLIT_TRANSPORT_MIRROR -# define NOP_FUDGE 0.4 +# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 128 +# define RGB_MATRIX_LED_COUNT 53 +# define RGB_MATRIX_SPLIT { 27, 26 } +# define SPLIT_TRANSPORT_MIRROR +# define NOP_FUDGE 0.4 + +# define RGBLIGHT_SLEEP + +# define WS2812_EXTERNAL_PULLUP +# define WS2812_PWM_DRIVER PWMD3 +# define WS2812_PWM_CHANNEL 4 +# define WS2812_PWM_PAL_MODE 10 +# define WS2812_DMA_STREAM STM32_DMA1_STREAM2 +# define WS2812_DMA_CHANNEL 2 +# define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM3_UP #endif diff --git a/keyboards/haverworks/theseus75/info.json b/keyboards/haverworks/theseus75/info.json index 322c130c80c..b1f387f99a3 100644 --- a/keyboards/haverworks/theseus75/info.json +++ b/keyboards/haverworks/theseus75/info.json @@ -121,7 +121,7 @@ "vid": "0x6877" }, "ws2812": { - "driver": "bitbang", + "driver": "pwm", "pin": "B7" }, "layouts": { From 5cd5709aa2395303fef6a92190a9fe7b7a426e89 Mon Sep 17 00:00:00 2001 From: Moritz Date: Tue, 4 Jul 2023 17:29:35 +0200 Subject: [PATCH 11/53] added animations, fixed led positions --- keyboards/haverworks/theseus75/info.json | 49 +++++++++++++----------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/keyboards/haverworks/theseus75/info.json b/keyboards/haverworks/theseus75/info.json index b1f387f99a3..8982f42ee86 100644 --- a/keyboards/haverworks/theseus75/info.json +++ b/keyboards/haverworks/theseus75/info.json @@ -68,28 +68,33 @@ {"x": 152, "y": 64, "flags": 2}, {"x": 138, "y": 64, "flags": 2}, {"x": 124, "y": 64, "flags": 2}, - {"x": 124, "y": 64, "flags": 2}, - {"x": 119, "y": 64, "flags": 2}, - {"x": 114, "y": 64, "flags": 2}, - {"x": 117, "y": 64, "flags": 2}, - {"x": 122, "y": 27, "flags": 2}, - {"x": 126, "y": 5, "flags": 2}, - {"x": 140, "y": 5, "flags": 2}, - {"x": 155, "y": 5, "flags": 2}, - {"x": 168, "y": 5, "flags": 2}, - {"x": 181, "y": 5, "flags": 2}, - {"x": 196, "y": 5, "flags": 2}, - {"x": 211, "y": 5, "flags": 2}, - {"x": 224, "y": 5, "flags": 2}, - {"x": 224, "y": 30, "flags": 2}, - {"x": 224, "y": 64, "flags": 2} - ] - }, - "rgblight": { - "led_count": 53, - "max_brightness": 128, - "split": true, - "split_count": [27, 26] + {"x": 124, "y": 53, "flags": 2}, + {"x": 119, "y": 42, "flags": 2}, + {"x": 114, "y": 31, "flags": 2}, + {"x": 117, "y": 19, "flags": 2}, + {"x": 122, "y": 8, "flags": 2}, + {"x": 126, "y": 1, "flags": 2}, + {"x": 140, "y": 1, "flags": 2}, + {"x": 155, "y": 1, "flags": 2}, + {"x": 168, "y": 1, "flags": 2}, + {"x": 181, "y": 1, "flags": 2}, + {"x": 196, "y": 1, "flags": 2}, + {"x": 211, "y": 1, "flags": 2}, + {"x": 224, "y": 1, "flags": 2}, + {"x": 224, "y": 8, "flags": 2}, + {"x": 224, "y": 19, "flags": 2} + ], + "animations": { + "solid_color": true, + "gradient_up_down": true, + "gradient_left_right": true, + "breathing": true, + "cycle_all": true, + "cycle_left_right": true, + "cycle_up_down": true, + "cycle_spiral": true, + "rainbow_beacon": true + } }, "split": { "bootmagic": { From 3baac8ca728930fd3204f375ebe3363979256ff7 Mon Sep 17 00:00:00 2001 From: Moritz Date: Wed, 12 Jul 2023 12:26:29 +0200 Subject: [PATCH 12/53] fixed weird ghost inputs at powerup --- keyboards/haverworks/theseus75/config.h | 2 +- keyboards/haverworks/theseus75/theseus75.c | 34 ++++++++++++++++++++-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 6baee04c78d..e4a41e2d8a0 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -29,7 +29,7 @@ //#define SELECT_SOFT_SERIAL_SPEED {0} // Experimental, will make connection faster but may need testing. /* Set up various split configurations */ -//#define SPLIT_USB_DETECT // The side that manages to establish a USB connection will be master. Disabled because default on ARM targets. +#define SPLIT_USB_DETECT // The side that manages to establish a USB connection will be master. Disabled because default on ARM targets. #define SPLIT_HAND_PIN B9 // The MCUs will probe a pin to determine if they are left or right side. high = left, low = right diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index a99c86d7eb2..6d371eef826 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -3,12 +3,40 @@ #include "quantum.h" -void keyboard_post_init_kb(void) { +void keyboard_pre_init_kb(void) { PWR->CR3 |= PWR_CR3_UCPD_DBDIS; - // If the keyboard is master, turn on power to the split half, and to underglow LEDs +} +void keyboard_post_init_kb(void) { + // If the keyboard is master if (is_keyboard_master()) { + // Turn on power to the split half and to underglow LEDs setPinOutput(A15); writePinHigh(A15); + + // Enable inputs used for current negotiation + setPinInput(F0); + setPinInput(F1); + + // Not needed in this mode (always high-Z with pull-up on PCB if port controller is sink) + setPinInput(A14); + } else { + // Do not turn on power to the USB source port (let the port controller handle VBUS) + setPinOutput(A15); + //writePinHigh(A15); + + // Disable the hub, route USB from split con to USB connector for downstream port + setPinOutput(A13); + writePinHigh(A13); + + // Enable outputs used for current negotiation + setPinOutput(F0); + setPinOutput(F1); + + // For now: 500 mA only + writePinLow(F0); + writePinLow(F1); + + // Use ID pin to check if client is detected (if low: USB source port powered) + setPinInput(A14); }; - keyboard_post_init_user(); } \ No newline at end of file From 1f36909e102b83dcb5852c97374f48e8217abbcd Mon Sep 17 00:00:00 2001 From: Moritz Plattner Date: Mon, 30 Oct 2023 13:54:00 +0800 Subject: [PATCH 13/53] readied for rev2 PCB --- keyboards/haverworks/theseus75/config.h | 4 +-- keyboards/haverworks/theseus75/info.json | 6 ++--- keyboards/haverworks/theseus75/theseus75.c | 31 ++++++++++++++-------- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index e4a41e2d8a0..9cfd6a53905 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -26,10 +26,10 @@ # define SERIAL_USART_TX_PIN SOFT_SERIAL_PIN #endif -//#define SELECT_SOFT_SERIAL_SPEED {0} // Experimental, will make connection faster but may need testing. +//#define SELECT_SOFT_SERIAL_SPEED {0} // Experimental, will make connection faster but may need testing. /* Set up various split configurations */ -#define SPLIT_USB_DETECT // The side that manages to establish a USB connection will be master. Disabled because default on ARM targets. +#define USB_VBUS_PIN C15 // The side that manages to establish a USB connection will be master. Disabled because default on ARM targets. #define SPLIT_HAND_PIN B9 // The MCUs will probe a pin to determine if they are left or right side. high = left, low = right diff --git a/keyboards/haverworks/theseus75/info.json b/keyboards/haverworks/theseus75/info.json index 8982f42ee86..cb5a848f098 100644 --- a/keyboards/haverworks/theseus75/info.json +++ b/keyboards/haverworks/theseus75/info.json @@ -23,12 +23,12 @@ "rgb_matrix": true }, "matrix_pins": { - "cols": ["B11", "C15", "B6", "B5", "B4", "B3", "C11", "C10", null], + "cols": ["B11", "C14", "B6", "B5", "B4", "B3", "C11", "C10", null], "rows": ["A9", "A10", "B15", "B12", "B13", "B14"] }, "processor": "STM32G431", "rgb_matrix": { - "driver": "WS2812", + "driver": "ws2812", "layout": [ {"matrix": [3, 1], "x": 32, "y": 34, "flags": 8}, {"x": 28, "y": 1, "flags": 2}, @@ -110,7 +110,7 @@ }, "matrix_pins": { "right": { - "cols": ["A10", "A9", "A8", "C6", "B15", "B14", "B13", "B12", "C15"], + "cols": ["A10", "A9", "A8", "C6", "B15", "B14", "B13", "B12", "C14"], "rows": ["B3", "C10", "C11", "A1", "A0", "B6"] } }, diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 6d371eef826..896c373c222 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -14,19 +14,18 @@ void keyboard_post_init_kb(void) { writePinHigh(A15); // Enable inputs used for current negotiation - setPinInput(F0); - setPinInput(F1); + setPinInputHigh(F0); + setPinInputHigh(F1); // Not needed in this mode (always high-Z with pull-up on PCB if port controller is sink) - setPinInput(A14); + setPinInputHigh(A13); } else { - // Do not turn on power to the USB source port (let the port controller handle VBUS) + // Prepare output to enable power for USB output after negotiation setPinOutput(A15); - //writePinHigh(A15); - // Disable the hub, route USB from split con to USB connector for downstream port - setPinOutput(A13); - writePinHigh(A13); + // Switch the USB MUXes between hub and ports + setPinOutput(A14); + writePinHigh(A14); // Enable outputs used for current negotiation setPinOutput(F0); @@ -37,6 +36,16 @@ void keyboard_post_init_kb(void) { writePinLow(F1); // Use ID pin to check if client is detected (if low: USB source port powered) - setPinInput(A14); - }; -} \ No newline at end of file + setPinInputHigh(A13); + } +} + +// Todo: Insert timer based delay to avoid spamming pin reads/writes, only set on pin change +void housekeeping_task_kb(void) { + // On peripheral side - If A14 is low: USB client negotiated 5V successfully -> enable power routing + if (!is_keyboard_master()) { + if(!readPin(A13)) { + writePinHigh(A15); + } + } +} From bb73f99638158cb28d1a759a856a29c63b9c6b91 Mon Sep 17 00:00:00 2001 From: Moritz Plattner Date: Fri, 17 Nov 2023 18:04:07 +0100 Subject: [PATCH 14/53] fixed caps, started with current negotiation stuff --- keyboards/haverworks/theseus75/config.h | 22 +++---- keyboards/haverworks/theseus75/info.json | 2 +- .../theseus75/keymaps/ansi/keymap.c | 13 +++- .../theseus75/keymaps/default/keymap.c | 13 +++- .../theseus75/keymaps/hotswap/keymap.c | 13 +++- .../haverworks/theseus75/keymaps/iso/keymap.c | 13 +++- .../haverworks/theseus75/keymaps/via/keymap.c | 13 +++- keyboards/haverworks/theseus75/readme.md | 24 ++++++++ keyboards/haverworks/theseus75/theseus75.c | 61 ++++++++++++++----- 9 files changed, 143 insertions(+), 31 deletions(-) create mode 100644 keyboards/haverworks/theseus75/readme.md diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 9cfd6a53905..629435fc25f 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -16,8 +16,8 @@ #pragma once -/* Set up split communications */ -#define SERIAL_USART_DRIVER SD3 +/* Defines for the split keyboard setup */ +#define SERIAL_USART_DRIVER SD3 // USART 3 #define SOFT_SERIAL_PIN B10 // The GPIO pin that is used split communication. #define USART3_REMAP // Remap USART TX and RX pins for half duplex #define SERIAL_USART_TX_PAL_MODE 7 // Pin alternate function 7 = USART3_TX for PB10 @@ -26,23 +26,21 @@ # define SERIAL_USART_TX_PIN SOFT_SERIAL_PIN #endif -//#define SELECT_SOFT_SERIAL_SPEED {0} // Experimental, will make connection faster but may need testing. +#define SELECT_SOFT_SERIAL_SPEED 0 // Experimental, will make connection faster but may need testing. -/* Set up various split configurations */ -#define USB_VBUS_PIN C15 // The side that manages to establish a USB connection will be master. Disabled because default on ARM targets. +#define USB_VBUS_PIN C15 // Only the master side will have VBUS present at power-up. used to determine master/slave +#define SPLIT_HAND_PIN B9 // The MCUs probe a pin to determine if they are left or right side. high = left, low = right -#define SPLIT_HAND_PIN B9 // The MCUs will probe a pin to determine if they are left or right side. high = left, low = right +#define SPLIT_LAYER_STATE_ENABLE -// Not yet available in `info.json` +/* Defines for the RGB matrix*/ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 128 +# define INDICATOR_MAX_BRIGHTNESS 255 # define RGB_MATRIX_LED_COUNT 53 # define RGB_MATRIX_SPLIT { 27, 26 } -# define SPLIT_TRANSPORT_MIRROR -# define NOP_FUDGE 0.4 - # define RGBLIGHT_SLEEP - +# define NOP_FUDGE 0.4 // Chip/pin specific configs from this lone onward # define WS2812_EXTERNAL_PULLUP # define WS2812_PWM_DRIVER PWMD3 # define WS2812_PWM_CHANNEL 4 @@ -51,3 +49,5 @@ # define WS2812_DMA_CHANNEL 2 # define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM3_UP #endif + +#define USBCPD_TIMESPAN 100 \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/info.json b/keyboards/haverworks/theseus75/info.json index cb5a848f098..81b33c4791b 100644 --- a/keyboards/haverworks/theseus75/info.json +++ b/keyboards/haverworks/theseus75/info.json @@ -15,7 +15,7 @@ "features": { "bootmagic": true, "command": false, - "console": false, + "console": true, "encoder": true, "extrakey": true, "mousekey": true, diff --git a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c index 53c43483f5a..e4dc325aed8 100644 --- a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c @@ -36,9 +36,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; -#if defined(ENCODER_MAP_ENABLE) +#ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; +#endif + +#ifdef RGB_MATRIX_ENABLE +bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (host_keyboard_led_state().caps_lock) { + RGB_MATRIX_INDICATOR_SET_COLOR(0, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); + } else { + RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0); + } + return false; +} #endif \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/keymaps/default/keymap.c b/keyboards/haverworks/theseus75/keymaps/default/keymap.c index 1608041aba6..07feebf49d9 100644 --- a/keyboards/haverworks/theseus75/keymaps/default/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/default/keymap.c @@ -36,9 +36,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; -#if defined(ENCODER_MAP_ENABLE) +#ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; +#endif + +#ifdef RGB_MATRIX_ENABLE +bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (host_keyboard_led_state().caps_lock) { + RGB_MATRIX_INDICATOR_SET_COLOR(0, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); + } else { + RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0); + } + return false; +} #endif \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c b/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c index 390861e65ba..8651f040045 100644 --- a/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c @@ -36,9 +36,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; -#if defined(ENCODER_MAP_ENABLE) +#ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; +#endif + +#ifdef RGB_MATRIX_ENABLE +bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (host_keyboard_led_state().caps_lock) { + RGB_MATRIX_INDICATOR_SET_COLOR(0, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); + } else { + RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0); + } + return false; +} #endif \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c index 9f1657ef98d..928a32dcc55 100644 --- a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c @@ -36,9 +36,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; -#if defined(ENCODER_MAP_ENABLE) +#ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; +#endif + +#ifdef RGB_MATRIX_ENABLE +bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (host_keyboard_led_state().caps_lock) { + RGB_MATRIX_INDICATOR_SET_COLOR(0, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); + } else { + RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0); + } + return false; +} #endif \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/keymaps/via/keymap.c b/keyboards/haverworks/theseus75/keymaps/via/keymap.c index 1608041aba6..07feebf49d9 100644 --- a/keyboards/haverworks/theseus75/keymaps/via/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/via/keymap.c @@ -36,9 +36,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; -#if defined(ENCODER_MAP_ENABLE) +#ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; +#endif + +#ifdef RGB_MATRIX_ENABLE +bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (host_keyboard_led_state().caps_lock) { + RGB_MATRIX_INDICATOR_SET_COLOR(0, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); + } else { + RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0); + } + return false; +} #endif \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/readme.md b/keyboards/haverworks/theseus75/readme.md new file mode 100644 index 00000000000..e8b92bff698 --- /dev/null +++ b/keyboards/haverworks/theseus75/readme.md @@ -0,0 +1,24 @@ +# haverworks Theseus75 +![Theseus Render](https://i.imgur.com/yzCfVSth.png) + +The Theseus 75 is a 75% row-stagger split keyboard with a macro column + encoder on both sides. It features one USB-C dual role port per side, and USB hubs, that allow the unused port to turn into a USB-C 2.0 High-Speed host port to connect flash drives, cell phones and similar. Up to 5V 1.5A current are offered, depending on negotiations with the host. + +* Keyboard Maintainer: [ebastler](https://github.com/ebastler) +* Hardware Supported: Haverworks Theseus75 r1 PCBs (Hotswap and solder) +* Hardware Availability: Groupbuy + +How to enter the Bootloader: +* Follow instructions on the PCB (Hold Boot/Flash button for approx. 1s) +* Bootmagic reset, left half: Hold the first key to the right of the encoder while plugging the board in +* Bootmagic reset, right half: Hold the first key to the left of the encoder while plugging the board in + +Make example for this keyboard (after setting up your build environment): + + qmk compile haverworks/theseus75:default + +Flash example for this keyboard (after setting up your build environment): + + qmk flash haverworks/theseus75:default + + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 896c373c222..35becad68f4 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -2,34 +2,39 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "quantum.h" +#include +#include "print.h" +/* Disable the PD peripheral in pre-init because its pins are being used in the matrix */ void keyboard_pre_init_kb(void) { PWR->CR3 |= PWR_CR3_UCPD_DBDIS; } + void keyboard_post_init_kb(void) { // If the keyboard is master if (is_keyboard_master()) { // Turn on power to the split half and to underglow LEDs - setPinOutput(A15); + setPinOutput(A15); //PSW writePinHigh(A15); // Enable inputs used for current negotiation - setPinInputHigh(F0); - setPinInputHigh(F1); + setPinInputHigh(F0); // OUT1 + setPinInputHigh(F1); // OUT2 + // Not needed in this mode (always high-Z with pull-up on PCB if port controller is sink) - setPinInputHigh(A13); + setPinInputHigh(A13); // ID } else { // Prepare output to enable power for USB output after negotiation - setPinOutput(A15); + setPinOutput(A15); // PSW // Switch the USB MUXes between hub and ports - setPinOutput(A14); + setPinOutput(A14); // USBSW writePinHigh(A14); // Enable outputs used for current negotiation - setPinOutput(F0); - setPinOutput(F1); + setPinOutput(F0); // OUT1 + setPinOutput(F1); // OUT2 // For now: 500 mA only writePinLow(F0); @@ -37,15 +42,43 @@ void keyboard_post_init_kb(void) { // Use ID pin to check if client is detected (if low: USB source port powered) setPinInputHigh(A13); + + // Set BUS_B low to indicate a bus-powered hub (Test) + setPinOutput(C13); // BUS_B + writePinHigh(C13); } } // Todo: Insert timer based delay to avoid spamming pin reads/writes, only set on pin change void housekeeping_task_kb(void) { - // On peripheral side - If A14 is low: USB client negotiated 5V successfully -> enable power routing - if (!is_keyboard_master()) { - if(!readPin(A13)) { - writePinHigh(A15); - } - } + static uint32_t usbcpd_timer = 0; + if (timer_elapsed32(usbcpd_timer) > USBCPD_TIMESPAN) { + // On master side: check F0 and F1 to determine current negotiated with host + if (is_keyboard_master()) { + bool out1 = readPin(F0); + bool out2 = readPin(F1); + uint8_t host_current = 0; // 0: 500 mA, 1: 1500 mA, 2:3000 mA + + if (out1 == 1) { + host_current = 0; + dprintf("Host negotiated current: 500 mA"); + } else if (out1 == 0 && out2 == 1) { + host_current = 1; + dprintf("Host negotiated current: 1500 mA"); + } else if (out1 == 0 && out2 == 0) { + host_current = 2; + dprintf("Host negotiated current: 3000 mA"); + }; + dprintf("Host current variable: %d", host_current); + + } else { + // On peripheral side - If A13 is low: USB client negotiated 5V successfully -> enable power routing + // Check if A15 is not already high to avoid wasting time + if(!readPin(A13) && !readPin(A15)) { + writePinHigh(A15); + dprintf("USB downstream device detected"); + }; + }; + usbcpd_timer = timer_read32(); + }; } From 085021a86834df9a29e3f4ecc96a95fa8d356f96 Mon Sep 17 00:00:00 2001 From: Moritz Plattner Date: Sat, 18 Nov 2023 00:59:20 +0100 Subject: [PATCH 15/53] tried to fix logging --- keyboards/haverworks/theseus75/theseus75.c | 24 ++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 35becad68f4..67153a846b9 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -10,6 +10,14 @@ void keyboard_pre_init_kb(void) { PWR->CR3 |= PWR_CR3_UCPD_DBDIS; } +void keyboard_post_init_user(void) { + // Customise these values to desired behaviour + debug_enable=true; + //debug_matrix=true; + //debug_keyboard=true; + //debug_mouse=true; +} + void keyboard_post_init_kb(void) { // If the keyboard is master if (is_keyboard_master()) { @@ -61,22 +69,22 @@ void housekeeping_task_kb(void) { if (out1 == 1) { host_current = 0; - dprintf("Host negotiated current: 500 mA"); - } else if (out1 == 0 && out2 == 1) { + printf("Host negotiated current: 500 mA\n"); + } else if (out2 == 1) { host_current = 1; - dprintf("Host negotiated current: 1500 mA"); - } else if (out1 == 0 && out2 == 0) { + printf("Host negotiated current: 1500 mA\n"); + } else { host_current = 2; - dprintf("Host negotiated current: 3000 mA"); + printf("Host negotiated current: 3000 mA\n"); }; - dprintf("Host current variable: %d", host_current); - + printf("Host current variable: %d\n", host_current); } else { + printf("Im slave, you shouldn't see this\n"); // On peripheral side - If A13 is low: USB client negotiated 5V successfully -> enable power routing // Check if A15 is not already high to avoid wasting time if(!readPin(A13) && !readPin(A15)) { writePinHigh(A15); - dprintf("USB downstream device detected"); + printf("USB downstream device detected\n"); }; }; usbcpd_timer = timer_read32(); From cac10be820c8465001aefed92b01d5fa2225e878 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Mon, 20 Nov 2023 15:27:07 -0500 Subject: [PATCH 16/53] Add all static animations, fix split LED state --- keyboards/haverworks/theseus75/config.h | 6 ++-- keyboards/haverworks/theseus75/info.json | 29 ++++++++++++++++--- .../theseus75/keymaps/default/keymap.c | 6 ++-- .../theseus75/keymaps/hotswap/keymap.c | 6 ++-- .../haverworks/theseus75/keymaps/iso/keymap.c | 6 ++-- .../haverworks/theseus75/keymaps/via/keymap.c | 6 ++-- keyboards/haverworks/theseus75/theseus75.c | 2 +- 7 files changed, 42 insertions(+), 19 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 629435fc25f..646d4237273 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -32,11 +32,13 @@ #define SPLIT_HAND_PIN B9 // The MCUs probe a pin to determine if they are left or right side. high = left, low = right #define SPLIT_LAYER_STATE_ENABLE +#define SPLIT_LED_STATE_ENABLE // Required to sync LED indicator state info to the slave half (see https://docs.qmk.fm/#/feature_led_indicators) -/* Defines for the RGB matrix*/ +/* Defines for the RGB matrix */ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 128 # define INDICATOR_MAX_BRIGHTNESS 255 +# define CAPS_LOCK_LED_INDEX 0 // LED1 on PCB # define RGB_MATRIX_LED_COUNT 53 # define RGB_MATRIX_SPLIT { 27, 26 } # define RGBLIGHT_SLEEP @@ -50,4 +52,4 @@ # define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM3_UP #endif -#define USBCPD_TIMESPAN 100 \ No newline at end of file +#define USBCPD_TIMESPAN 100 diff --git a/keyboards/haverworks/theseus75/info.json b/keyboards/haverworks/theseus75/info.json index 81b33c4791b..880b8d15e8c 100644 --- a/keyboards/haverworks/theseus75/info.json +++ b/keyboards/haverworks/theseus75/info.json @@ -1,7 +1,8 @@ { - "manufacturer": "haverworks", "keyboard_name": "Theseus75", "maintainer": "ebastler", + "manufacturer": "Haverworks", + "url": "https://haver.works/", "bootloader": "stm32-dfu", "bootmagic": { "matrix": [0, 1] @@ -86,14 +87,35 @@ ], "animations": { "solid_color": true, + "alphas_mods": true, "gradient_up_down": true, "gradient_left_right": true, "breathing": true, + "band_sat": true, + "band_val": true, + "band_pinwheel_sat": true, + "band_pinwheel_val": true, + "band_spiral_sat": true, + "band_spiral_val": true, "cycle_all": true, "cycle_left_right": true, "cycle_up_down": true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "rainbow_moving_chevron": true, + "cycle_pinwheel": true, "cycle_spiral": true, - "rainbow_beacon": true + "dual_beacon": true, + "rainbow_beacon": true, + "rainbow_pinwheels": true, + "raindrops": true, + "jellybean_raindrops": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": true, + "pixel_fractal": true, + "pixel_flow": true, + "pixel_rain": true } }, "split": { @@ -119,7 +141,6 @@ "watchdog": true } }, - "url": "https://haver.codes/", "usb": { "device_version": "1.0.0", "pid": "0x0001", @@ -517,4 +538,4 @@ ] } } -} \ No newline at end of file +} diff --git a/keyboards/haverworks/theseus75/keymaps/default/keymap.c b/keyboards/haverworks/theseus75/keymaps/default/keymap.c index 07feebf49d9..bdccb3539c8 100644 --- a/keyboards/haverworks/theseus75/keymaps/default/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/default/keymap.c @@ -46,10 +46,10 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { #ifdef RGB_MATRIX_ENABLE bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { if (host_keyboard_led_state().caps_lock) { - RGB_MATRIX_INDICATOR_SET_COLOR(0, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); + RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); } else { - RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0); + RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0); } return false; } -#endif \ No newline at end of file +#endif diff --git a/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c b/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c index 8651f040045..e288ec41ac7 100644 --- a/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c @@ -46,10 +46,10 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { #ifdef RGB_MATRIX_ENABLE bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { if (host_keyboard_led_state().caps_lock) { - RGB_MATRIX_INDICATOR_SET_COLOR(0, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); + RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); } else { - RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0); + RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0); } return false; } -#endif \ No newline at end of file +#endif diff --git a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c index 928a32dcc55..2de33ae4b7d 100644 --- a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c @@ -46,10 +46,10 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { #ifdef RGB_MATRIX_ENABLE bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { if (host_keyboard_led_state().caps_lock) { - RGB_MATRIX_INDICATOR_SET_COLOR(0, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); + RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); } else { - RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0); + RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0); } return false; } -#endif \ No newline at end of file +#endif diff --git a/keyboards/haverworks/theseus75/keymaps/via/keymap.c b/keyboards/haverworks/theseus75/keymaps/via/keymap.c index 07feebf49d9..bdccb3539c8 100644 --- a/keyboards/haverworks/theseus75/keymaps/via/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/via/keymap.c @@ -46,10 +46,10 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { #ifdef RGB_MATRIX_ENABLE bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { if (host_keyboard_led_state().caps_lock) { - RGB_MATRIX_INDICATOR_SET_COLOR(0, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); + RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); } else { - RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0); + RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0); } return false; } -#endif \ No newline at end of file +#endif diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 67153a846b9..5f457d9cb05 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -28,7 +28,7 @@ void keyboard_post_init_kb(void) { // Enable inputs used for current negotiation setPinInputHigh(F0); // OUT1 setPinInputHigh(F1); // OUT2 - + // Not needed in this mode (always high-Z with pull-up on PCB if port controller is sink) setPinInputHigh(A13); // ID From 91d1317a7dcafdf705b05b5a1a38ba82d6422c1c Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Mon, 20 Nov 2023 16:24:58 -0500 Subject: [PATCH 17/53] update encoder mappings --- keyboards/haverworks/theseus75/keymaps/ansi/keymap.c | 10 +++++----- .../haverworks/theseus75/keymaps/default/keymap.c | 8 ++++---- .../haverworks/theseus75/keymaps/hotswap/keymap.c | 8 ++++---- keyboards/haverworks/theseus75/keymaps/iso/keymap.c | 8 ++++---- keyboards/haverworks/theseus75/keymaps/via/keymap.c | 8 ++++---- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c index e4dc325aed8..32c4f16d32d 100644 --- a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c @@ -19,7 +19,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_75xt_ansi( - KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + RGB_TOG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, @@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), [1] = LAYOUT_75xt_ansi( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -38,8 +38,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [0] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; #endif @@ -52,4 +52,4 @@ bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { } return false; } -#endif \ No newline at end of file +#endif diff --git a/keyboards/haverworks/theseus75/keymaps/default/keymap.c b/keyboards/haverworks/theseus75/keymaps/default/keymap.c index bdccb3539c8..4bf0eb850f9 100644 --- a/keyboards/haverworks/theseus75/keymaps/default/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/default/keymap.c @@ -19,7 +19,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_75xt_all( - KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + RGB_TOG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, @@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), [1] = LAYOUT_75xt_all( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -38,8 +38,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [0] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; #endif diff --git a/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c b/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c index e288ec41ac7..cbba6b3349d 100644 --- a/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c @@ -19,7 +19,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_75xt_hs_all( - KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + RGB_TOG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, @@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), [1] = LAYOUT_75xt_hs_all( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -38,8 +38,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [0] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; #endif diff --git a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c index 2de33ae4b7d..a7101b21db4 100644 --- a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c @@ -19,7 +19,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_75xt_iso( - KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + RGB_TOG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, @@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), [1] = LAYOUT_75xt_iso( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -38,8 +38,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [0] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; #endif diff --git a/keyboards/haverworks/theseus75/keymaps/via/keymap.c b/keyboards/haverworks/theseus75/keymaps/via/keymap.c index bdccb3539c8..4bf0eb850f9 100644 --- a/keyboards/haverworks/theseus75/keymaps/via/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/via/keymap.c @@ -19,7 +19,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_75xt_all( - KC_MUTE, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + RGB_TOG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, @@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), [1] = LAYOUT_75xt_all( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -38,8 +38,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [1] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [0] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; #endif From a683890564938673b545f1fad2d53ef27c90142c Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Tue, 21 Nov 2023 12:59:08 -0500 Subject: [PATCH 18/53] wip: syncing EEPROM user data across split comms --- keyboards/haverworks/theseus75/config.h | 3 + .../haverworks/theseus75/keymaps/via/keymap.c | 169 +++++++++++++++++- keyboards/haverworks/theseus75/theseus75.c | 2 +- 3 files changed, 171 insertions(+), 3 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 646d4237273..345bb342d78 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -33,6 +33,9 @@ #define SPLIT_LAYER_STATE_ENABLE #define SPLIT_LED_STATE_ENABLE // Required to sync LED indicator state info to the slave half (see https://docs.qmk.fm/#/feature_led_indicators) +#define SPLIT_TRANSACTION_IDS_USER RPC_ID_INDICATOR_CONFIG + +#define EECONFIG_USER_DATA_SIZE 4 /* Defines for the RGB matrix */ #ifdef RGB_MATRIX_ENABLE diff --git a/keyboards/haverworks/theseus75/keymaps/via/keymap.c b/keyboards/haverworks/theseus75/keymaps/via/keymap.c index 4bf0eb850f9..2998d2636ff 100644 --- a/keyboards/haverworks/theseus75/keymaps/via/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/via/keymap.c @@ -16,6 +16,8 @@ #include QMK_KEYBOARD_H +#include "transactions.h" + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_75xt_all( @@ -43,13 +45,176 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { }; #endif +typedef struct _indicator_t { + uint8_t h; + uint8_t s; + uint8_t v; + bool enabled; +} indicator_t; + +typedef struct _indicator_config_t { + indicator_t caps; +} indicator_config_t; + +indicator_config_t indicator_config; + +void indicator_config_write(void) { +# ifdef EECONFIG_USER_DATA_SIZE + eeconfig_update_user_datablock(&indicator_config); + // #else // if using uint32 union + struct instead of datablock: + // eeconfig_update_user(indicator_config.raw); +# endif + printf("Data written to EEPROM\n"); +} + +void indicator_config_read(void) { +# ifdef EECONFIG_USER_DATA_SIZE + eeconfig_read_user_datablock(&indicator_config); + // #else // if using uint32 union + struct instead of datablock: + // indicator_config.raw = eeconfig_read_user(); +# endif + printf("Data read from EEPROM\n"); +} + +void indicator_config_slave_handler(uint8_t m2s_size, const void* m2s_buffer, uint8_t s2m_size, void* s2m_buffer) { + printf("Slave handler called\n"); + if (m2s_size == sizeof(indicator_config_t)) { + // Copy the buffer data to the indicator config: + memcpy(&indicator_config, m2s_buffer, sizeof(indicator_config_t)); + // And update the EEPROM: + indicator_config_write(); + } else { + printf("Unexpected response in slave handler\n"); + } +} + +void eeconfig_init_user(void) { + // Set default values and write them to user space in EEPROM: + indicator_config.caps.h = 0; + indicator_config.caps.s = 0; + indicator_config.caps.v = INDICATOR_MAX_BRIGHTNESS; + indicator_config.caps.enabled = true; + indicator_config_write(); +} + +void keyboard_post_init_user(void) { + // Register the split transaction callback: + transaction_register_rpc(RPC_ID_INDICATOR_CONFIG, indicator_config_slave_handler); + // Read values from memory: + indicator_config_read(); + printf("config enabled: %d\n", indicator_config.caps.enabled); +} + #ifdef RGB_MATRIX_ENABLE bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { - if (host_keyboard_led_state().caps_lock) { - RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); + if (host_keyboard_led_state().caps_lock && indicator_config.caps.enabled) { + HSV hsv = {indicator_config.caps.h, indicator_config.caps.s, indicator_config.caps.v}; + RGB rgb = hsv_to_rgb(hsv); + RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, rgb.r, rgb.g, rgb.b); } else { RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0); } return false; } #endif + +enum indicator_value { + id_caps_indicator_enabled = 1, + id_caps_indicator_brightness = 2, + id_caps_indicator_color = 3 +}; + +void indicator_config_set_value(uint8_t *data) { + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch (*value_id) { + case id_caps_indicator_enabled: + { + indicator_config.caps.enabled = value_data[0]; + break; + } + case id_caps_indicator_brightness: + { + indicator_config.caps.v = value_data[0]; + break; + } + case id_caps_indicator_color: + { + indicator_config.caps.h = value_data[0]; + indicator_config.caps.s = value_data[1]; + break; + } + } +} + +void indicator_config_get_value(uint8_t *data) { + // data = [ value_id, value_data ] + uint8_t *value_id = &(data[0]); + uint8_t *value_data = &(data[1]); + + switch (*value_id) { + case id_caps_indicator_enabled: + { + value_data[0] = indicator_config.caps.enabled; + break; + } + case id_caps_indicator_brightness: + { + value_data[0] = indicator_config.caps.v; + break; + } + case id_caps_indicator_color: + { + value_data[0] = indicator_config.caps.h; + value_data[1] = indicator_config.caps.s; + break; + } + } +} + +void indicator_config_save(void) { + indicator_config_write(); + // Send data to slave half so that it can be set in its EEPROM as well: + transaction_rpc_send(RPC_ID_INDICATOR_CONFIG, sizeof(indicator_config_t), &indicator_config); + printf("Config saved\n"); +} + +void via_custom_value_command_kb(uint8_t *data, uint8_t length) { + // data = [ command_id, channel_id, value_id, value_data ] + uint8_t *command_id = &(data[0]); + uint8_t *channel_id = &(data[1]); + uint8_t *value_id_and_data = &(data[2]); + + if ( *channel_id == id_custom_channel ) { + switch ( *command_id ) + { + case id_custom_set_value: + { + indicator_config_set_value(value_id_and_data); + break; + } + case id_custom_get_value: + { + indicator_config_get_value(value_id_and_data); + break; + } + case id_custom_save: + { + indicator_config_save(); + break; + } + default: + { + // Unhandled message: + *command_id = id_unhandled; + break; + } + } + return; + } + + // Return the unhandled state: + *command_id = id_unhandled; +} diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 5f457d9cb05..54d026a8a34 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -10,7 +10,7 @@ void keyboard_pre_init_kb(void) { PWR->CR3 |= PWR_CR3_UCPD_DBDIS; } -void keyboard_post_init_user(void) { +void keyboard_pre_init_user(void) { // Customise these values to desired behaviour debug_enable=true; //debug_matrix=true; From 2af97a8113eacc2da8bb784d111fcfb098bfb2fd Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Tue, 21 Nov 2023 15:38:27 -0500 Subject: [PATCH 19/53] fix: move RPC callback registration to housekeeping task --- keyboards/haverworks/theseus75/keymaps/via/keymap.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keyboards/haverworks/theseus75/keymaps/via/keymap.c b/keyboards/haverworks/theseus75/keymaps/via/keymap.c index 2998d2636ff..c22e4f76655 100644 --- a/keyboards/haverworks/theseus75/keymaps/via/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/via/keymap.c @@ -97,9 +97,12 @@ void eeconfig_init_user(void) { indicator_config_write(); } -void keyboard_post_init_user(void) { +void housekeeping_task_user(void) { // Register the split transaction callback: transaction_register_rpc(RPC_ID_INDICATOR_CONFIG, indicator_config_slave_handler); +} + +void keyboard_post_init_user(void) { // Read values from memory: indicator_config_read(); printf("config enabled: %d\n", indicator_config.caps.enabled); From 1fb687661bbdded9430c79020bb3963f6a865a0f Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Tue, 21 Nov 2023 20:22:14 -0500 Subject: [PATCH 20/53] refactor: clean up keymap code, separate _kb and _user usage --- keyboards/haverworks/theseus75/config.h | 3 -- .../haverworks/theseus75/keymaps/via/config.h | 2 + .../haverworks/theseus75/keymaps/via/keymap.c | 42 ++++++++----------- keyboards/haverworks/theseus75/theseus75.c | 25 ++++++----- 4 files changed, 35 insertions(+), 37 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 345bb342d78..646d4237273 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -33,9 +33,6 @@ #define SPLIT_LAYER_STATE_ENABLE #define SPLIT_LED_STATE_ENABLE // Required to sync LED indicator state info to the slave half (see https://docs.qmk.fm/#/feature_led_indicators) -#define SPLIT_TRANSACTION_IDS_USER RPC_ID_INDICATOR_CONFIG - -#define EECONFIG_USER_DATA_SIZE 4 /* Defines for the RGB matrix */ #ifdef RGB_MATRIX_ENABLE diff --git a/keyboards/haverworks/theseus75/keymaps/via/config.h b/keyboards/haverworks/theseus75/keymaps/via/config.h index b15c0f09480..8e373d2aab2 100644 --- a/keyboards/haverworks/theseus75/keymaps/via/config.h +++ b/keyboards/haverworks/theseus75/keymaps/via/config.h @@ -16,5 +16,7 @@ #pragma once +#define EECONFIG_USER_DATA_SIZE 4 #define WEAR_LEVELING_LOGICAL_SIZE 4096 #define WEAR_LEVELING_BACKING_SIZE WEAR_LEVELING_LOGICAL_SIZE*2 +#define SPLIT_TRANSACTION_IDS_USER RPC_ID_INDICATOR_CONFIG diff --git a/keyboards/haverworks/theseus75/keymaps/via/keymap.c b/keyboards/haverworks/theseus75/keymaps/via/keymap.c index c22e4f76655..9fb106afead 100644 --- a/keyboards/haverworks/theseus75/keymaps/via/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/via/keymap.c @@ -1,4 +1,4 @@ -/* Copyright 2023 Moritz Plattner +/* Copyright 2023 Moritz Plattner, Alex Havermale * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,7 +15,6 @@ */ #include QMK_KEYBOARD_H - #include "transactions.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -45,6 +44,9 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { }; #endif +/** + * A struct containing config data for a single LED indicator. + */ typedef struct _indicator_t { uint8_t h; uint8_t s; @@ -52,60 +54,53 @@ typedef struct _indicator_t { bool enabled; } indicator_t; +/** + * A struct containing config data for all LED indicators. + */ typedef struct _indicator_config_t { indicator_t caps; } indicator_config_t; indicator_config_t indicator_config; -void indicator_config_write(void) { +void indicator_config_write_to_eeprom(void) { # ifdef EECONFIG_USER_DATA_SIZE eeconfig_update_user_datablock(&indicator_config); + dprintf("Indicator config written to EEPROM\n"); // #else // if using uint32 union + struct instead of datablock: // eeconfig_update_user(indicator_config.raw); # endif - printf("Data written to EEPROM\n"); } -void indicator_config_read(void) { +void indicator_config_read_from_eeprom(void) { # ifdef EECONFIG_USER_DATA_SIZE eeconfig_read_user_datablock(&indicator_config); + dprintf("Indicator config read from EEPROM\n"); // #else // if using uint32 union + struct instead of datablock: // indicator_config.raw = eeconfig_read_user(); # endif - printf("Data read from EEPROM\n"); } void indicator_config_slave_handler(uint8_t m2s_size, const void* m2s_buffer, uint8_t s2m_size, void* s2m_buffer) { - printf("Slave handler called\n"); if (m2s_size == sizeof(indicator_config_t)) { - // Copy the buffer data to the indicator config: memcpy(&indicator_config, m2s_buffer, sizeof(indicator_config_t)); - // And update the EEPROM: - indicator_config_write(); + indicator_config_write_to_eeprom(); } else { - printf("Unexpected response in slave handler\n"); + dprintf("Unexpected response in slave handler\n"); // TODO: add split debug logging } } void eeconfig_init_user(void) { - // Set default values and write them to user space in EEPROM: indicator_config.caps.h = 0; indicator_config.caps.s = 0; indicator_config.caps.v = INDICATOR_MAX_BRIGHTNESS; indicator_config.caps.enabled = true; - indicator_config_write(); -} - -void housekeeping_task_user(void) { - // Register the split transaction callback: - transaction_register_rpc(RPC_ID_INDICATOR_CONFIG, indicator_config_slave_handler); + indicator_config_write_to_eeprom(); } void keyboard_post_init_user(void) { - // Read values from memory: - indicator_config_read(); - printf("config enabled: %d\n", indicator_config.caps.enabled); + transaction_register_rpc(RPC_ID_INDICATOR_CONFIG, indicator_config_slave_handler); + indicator_config_read_from_eeprom(); } #ifdef RGB_MATRIX_ENABLE @@ -178,10 +173,9 @@ void indicator_config_get_value(uint8_t *data) { } void indicator_config_save(void) { - indicator_config_write(); - // Send data to slave half so that it can be set in its EEPROM as well: + indicator_config_write_to_eeprom(); + // Send data to slave so that it can be written to its EEPROM as well: transaction_rpc_send(RPC_ID_INDICATOR_CONFIG, sizeof(indicator_config_t), &indicator_config); - printf("Config saved\n"); } void via_custom_value_command_kb(uint8_t *data, uint8_t length) { diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 54d026a8a34..701bc6f3d0e 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -2,27 +2,27 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "quantum.h" +#include "transactions.h" #include #include "print.h" -/* Disable the PD peripheral in pre-init because its pins are being used in the matrix */ void keyboard_pre_init_kb(void) { + // Disable the PD peripheral in pre-init because its pins are being used in the matrix: PWR->CR3 |= PWR_CR3_UCPD_DBDIS; -} - -void keyboard_pre_init_user(void) { - // Customise these values to desired behaviour - debug_enable=true; - //debug_matrix=true; - //debug_keyboard=true; - //debug_mouse=true; + // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions) + keyboard_pre_init_user(); + // Customise these values to desired behaviour: + debug_enable=true; + //debug_matrix=true; + //debug_keyboard=true; + //debug_mouse=true; } void keyboard_post_init_kb(void) { // If the keyboard is master if (is_keyboard_master()) { // Turn on power to the split half and to underglow LEDs - setPinOutput(A15); //PSW + setPinOutput(A15); // PSW writePinHigh(A15); // Enable inputs used for current negotiation @@ -55,10 +55,15 @@ void keyboard_post_init_kb(void) { setPinOutput(C13); // BUS_B writePinHigh(C13); } + // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions) + keyboard_post_init_user(); } // Todo: Insert timer based delay to avoid spamming pin reads/writes, only set on pin change void housekeeping_task_kb(void) { + // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions) + housekeeping_task_user(); + static uint32_t usbcpd_timer = 0; if (timer_elapsed32(usbcpd_timer) > USBCPD_TIMESPAN) { // On master side: check F0 and F1 to determine current negotiated with host From 1528c9520d789e9808f97118460d5b5aef97fa82 Mon Sep 17 00:00:00 2001 From: Moritz Plattner Date: Mon, 27 Nov 2023 17:01:35 +0100 Subject: [PATCH 21/53] forced 1.5A output --- keyboards/haverworks/theseus75/theseus75.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 701bc6f3d0e..6cb4c80dab3 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -45,8 +45,8 @@ void keyboard_post_init_kb(void) { setPinOutput(F1); // OUT2 // For now: 500 mA only - writePinLow(F0); - writePinLow(F1); + writePinLow(F0); // OUT1 + writePinHigh(F1); // OUT2 // Use ID pin to check if client is detected (if low: USB source port powered) setPinInputHigh(A13); From 82f2560f380ac297aafac7c4fc6eefc53a44ab63 Mon Sep 17 00:00:00 2001 From: Moritz Plattner Date: Mon, 27 Nov 2023 17:03:22 +0100 Subject: [PATCH 22/53] fixed comments to reflect change from last commit --- keyboards/haverworks/theseus75/theseus75.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 6cb4c80dab3..8ea65d88b3f 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -44,7 +44,7 @@ void keyboard_post_init_kb(void) { setPinOutput(F0); // OUT1 setPinOutput(F1); // OUT2 - // For now: 500 mA only + // Test: 1.5A forced output writePinLow(F0); // OUT1 writePinHigh(F1); // OUT2 From 8f55c89ea7f32efb46f262a2eea79136d1541575 Mon Sep 17 00:00:00 2001 From: Moritz Plattner Date: Wed, 27 Dec 2023 16:22:31 +0100 Subject: [PATCH 23/53] add ability to detect usb client disconnect --- keyboards/haverworks/theseus75/theseus75.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 8ea65d88b3f..b18de2db181 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -45,7 +45,7 @@ void keyboard_post_init_kb(void) { setPinOutput(F1); // OUT2 // Test: 1.5A forced output - writePinLow(F0); // OUT1 + writePinLow(F0); // OUT1 writePinHigh(F1); // OUT2 // Use ID pin to check if client is detected (if low: USB source port powered) @@ -90,7 +90,10 @@ void housekeeping_task_kb(void) { if(!readPin(A13) && !readPin(A15)) { writePinHigh(A15); printf("USB downstream device detected\n"); - }; + } else if(readPin(A13) && readPin(A15)) { + writePinLow(A15); + printf("USB downstream device disconnected\n"); + } }; usbcpd_timer = timer_read32(); }; From 060512aefa9d2f4be3245b40cf032b318efc5986 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Tue, 11 Jun 2024 13:28:39 -0400 Subject: [PATCH 24/53] update to latest GPIO function conventions, define pins --- keyboards/haverworks/theseus75/config.h | 14 +++- keyboards/haverworks/theseus75/theseus75.c | 76 +++++++++++++--------- 2 files changed, 55 insertions(+), 35 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 646d4237273..900da28d561 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -1,4 +1,4 @@ -/* Copyright 2023 Moritz Plattner +/* Copyright 2023 Moritz Plattner (@ebastler), Alex Havermale (@haversnail) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,8 +28,16 @@ #define SELECT_SOFT_SERIAL_SPEED 0 // Experimental, will make connection faster but may need testing. -#define USB_VBUS_PIN C15 // Only the master side will have VBUS present at power-up. used to determine master/slave -#define SPLIT_HAND_PIN B9 // The MCUs probe a pin to determine if they are left or right side. high = left, low = right +#define ID_PIN A13 +#define USBSW_PIN A14 // Switches the hub input/output with the MUXes +#define PSW_PIN A15 // Turns the power routing to the usb-c port on/off +#define SPLIT_HAND_PIN B9 // The MCUs probe a pin to determine if they are left or right side. high = left, low = right +#define BUS_B_PIN C13 // Tells the hub to be bus powered or self powered (which in turn tells the clients connected to it to be 100 mA or 500 mA) +#define USB_VBUS_PIN C15 // Only the master side will have VBUS present at power-up (used to determine master/slave) +#define USBPD_1_PIN F0 +#define USBPD_2_PIN F1 + +#define SPLIT_TRANSACTION_IDS_KB RPC_ID_KB_STATE #define SPLIT_LAYER_STATE_ENABLE #define SPLIT_LED_STATE_ENABLE // Required to sync LED indicator state info to the slave half (see https://docs.qmk.fm/#/feature_led_indicators) diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index b18de2db181..dd1d5e42f53 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -1,5 +1,18 @@ -// Copyright 2022 QMK -// SPDX-License-Identifier: GPL-2.0-or-later +/* Copyright 2023 Moritz Plattner (@ebastler), Alex Havermale (@haversnail) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #include "quantum.h" #include "transactions.h" @@ -12,48 +25,47 @@ void keyboard_pre_init_kb(void) { // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions) keyboard_pre_init_user(); // Customise these values to desired behaviour: - debug_enable=true; - //debug_matrix=true; - //debug_keyboard=true; - //debug_mouse=true; + debug_enable = true; + // debug_matrix = true; + // debug_keyboard = true; + // debug_mouse = true; } void keyboard_post_init_kb(void) { // If the keyboard is master if (is_keyboard_master()) { // Turn on power to the split half and to underglow LEDs - setPinOutput(A15); // PSW - writePinHigh(A15); + gpio_set_pin_output(PSW_PIN); + gpio_write_pin_high(PSW_PIN); // Enable inputs used for current negotiation - setPinInputHigh(F0); // OUT1 - setPinInputHigh(F1); // OUT2 - + gpio_set_pin_input_high(USBPD_1_PIN); + gpio_set_pin_input_high(USBPD_2_PIN); // Not needed in this mode (always high-Z with pull-up on PCB if port controller is sink) - setPinInputHigh(A13); // ID + gpio_set_pin_input_high(ID_PIN); } else { // Prepare output to enable power for USB output after negotiation - setPinOutput(A15); // PSW + gpio_set_pin_output(PSW_PIN); // Switch the USB MUXes between hub and ports - setPinOutput(A14); // USBSW - writePinHigh(A14); + gpio_set_pin_output(USBSW_PIN); + gpio_write_pin_high(USBSW_PIN); // Enable outputs used for current negotiation - setPinOutput(F0); // OUT1 - setPinOutput(F1); // OUT2 + gpio_set_pin_output(USBPD_1_PIN); + gpio_set_pin_output(USBPD_2_PIN); // Test: 1.5A forced output - writePinLow(F0); // OUT1 - writePinHigh(F1); // OUT2 + gpio_write_pin_low(USBPD_1_PIN); + gpio_write_pin_high(USBPD_2_PIN); // Use ID pin to check if client is detected (if low: USB source port powered) - setPinInputHigh(A13); + gpio_set_pin_input_high(ID_PIN); // Set BUS_B low to indicate a bus-powered hub (Test) - setPinOutput(C13); // BUS_B - writePinHigh(C13); + gpio_set_pin_output(BUS_B_PIN); + gpio_write_pin_high(BUS_B_PIN); } // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions) keyboard_post_init_user(); @@ -66,11 +78,11 @@ void housekeeping_task_kb(void) { static uint32_t usbcpd_timer = 0; if (timer_elapsed32(usbcpd_timer) > USBCPD_TIMESPAN) { - // On master side: check F0 and F1 to determine current negotiated with host + // On master side: check USBPD_1_PIN and USBPD_2_PIN to determine current negotiated with host if (is_keyboard_master()) { - bool out1 = readPin(F0); - bool out2 = readPin(F1); - uint8_t host_current = 0; // 0: 500 mA, 1: 1500 mA, 2:3000 mA + bool out1 = gpio_read_pin(USBPD_1_PIN); + bool out2 = gpio_read_pin(USBPD_2_PIN); + uint8_t host_current = 0; // 0: 500 mA, 1: 1500 mA, 2:3000 mA if (out1 == 1) { host_current = 0; @@ -85,13 +97,13 @@ void housekeeping_task_kb(void) { printf("Host current variable: %d\n", host_current); } else { printf("Im slave, you shouldn't see this\n"); - // On peripheral side - If A13 is low: USB client negotiated 5V successfully -> enable power routing - // Check if A15 is not already high to avoid wasting time - if(!readPin(A13) && !readPin(A15)) { - writePinHigh(A15); + // On peripheral side - If ID_PIN is low: USB client negotiated 5V successfully -> enable power routing + // Check if PSW_PIN is not already high to avoid wasting time + if (!gpio_read_pin(ID_PIN) && !gpio_read_pin(PSW_PIN)) { + gpio_write_pin_high(PSW_PIN); printf("USB downstream device detected\n"); - } else if(readPin(A13) && readPin(A15)) { - writePinLow(A15); + } else if (gpio_read_pin(ID_PIN) && gpio_read_pin(PSW_PIN)) { + gpio_write_pin_low(PSW_PIN); printf("USB downstream device disconnected\n"); } }; From 078030de73c2694acbb84f957707d7e90191756e Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Tue, 11 Jun 2024 16:07:20 -0400 Subject: [PATCH 25/53] refactor allowance check logic, write to local state --- keyboards/haverworks/theseus75/config.h | 2 +- keyboards/haverworks/theseus75/theseus75.c | 57 ++++++++++++++++------ 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 900da28d561..2f74a7a6e87 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -60,4 +60,4 @@ # define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM3_UP #endif -#define USBCPD_TIMESPAN 100 +#define USBPD_ALLOWANCE_CHECK_INTERVAL 100 diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index dd1d5e42f53..032141a3ddf 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -18,6 +18,27 @@ #include "transactions.h" #include #include "print.h" +#include "usbpd.h" + +typedef struct _kb_state_t { + usbpd_allowance_t allowance; +} kb_state_t; + +kb_state_t kb_state; + +const char* usbpd_str(usbpd_allowance_t allowance) { + switch (allowance) { + case USBPD_500MA: + return "500mA"; + case USBPD_1500MA: + return "1500mA"; + case USBPD_3000MA: + return "3000mA"; + default: + dprintf("Encountered unknown allowance enum value: %d\n", allowance); + return "UNKNOWN"; + } +} void keyboard_pre_init_kb(void) { // Disable the PD peripheral in pre-init because its pins are being used in the matrix: @@ -32,6 +53,9 @@ void keyboard_pre_init_kb(void) { } void keyboard_post_init_kb(void) { + // Set default state values + kb_state.allowance = USBPD_500MA; + // If the keyboard is master if (is_keyboard_master()) { // Turn on power to the split half and to underglow LEDs @@ -76,25 +100,26 @@ void housekeeping_task_kb(void) { // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions) housekeeping_task_user(); - static uint32_t usbcpd_timer = 0; - if (timer_elapsed32(usbcpd_timer) > USBCPD_TIMESPAN) { + static uint32_t last_usbpd_allowance_check_time = 0; + if (timer_elapsed32(last_usbpd_allowance_check_time) > USBPD_ALLOWANCE_CHECK_INTERVAL) { // On master side: check USBPD_1_PIN and USBPD_2_PIN to determine current negotiated with host + // (Can't use the usbpd_get_allowance() function this uses this uses the native CC PD interface + // of the G series MCU, while we're using dedicated port controllers instead) if (is_keyboard_master()) { - bool out1 = gpio_read_pin(USBPD_1_PIN); - bool out2 = gpio_read_pin(USBPD_2_PIN); - uint8_t host_current = 0; // 0: 500 mA, 1: 1500 mA, 2:3000 mA + usbpd_allowance_t allowance; - if (out1 == 1) { - host_current = 0; - printf("Host negotiated current: 500 mA\n"); - } else if (out2 == 1) { - host_current = 1; - printf("Host negotiated current: 1500 mA\n"); + if (gpio_read_pin(USBPD_1_PIN)) { + allowance = USBPD_500MA; + } else if (gpio_read_pin(USBPD_2_PIN)) { + allowance = USBPD_1500MA; } else { - host_current = 2; - printf("Host negotiated current: 3000 mA\n"); - }; - printf("Host current variable: %d\n", host_current); + allowance = USBPD_3000MA; + } + + if (kb_state.allowance != allowance) { + printf("Host negotiated current: %s -> %s\n", usbpd_str(kb_state.allowance), usbpd_str(allowance)); + kb_state.allowance = allowance; + } } else { printf("Im slave, you shouldn't see this\n"); // On peripheral side - If ID_PIN is low: USB client negotiated 5V successfully -> enable power routing @@ -107,6 +132,6 @@ void housekeeping_task_kb(void) { printf("USB downstream device disconnected\n"); } }; - usbcpd_timer = timer_read32(); + last_usbpd_allowance_check_time = timer_read32(); }; } From ba0f7795a83d4b99aef30a2ca6d958aec3e4efec Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Tue, 11 Jun 2024 16:37:25 -0400 Subject: [PATCH 26/53] set defaults to 500mA and bus-powered --- keyboards/haverworks/theseus75/theseus75.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 032141a3ddf..95941833396 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -76,20 +76,19 @@ void keyboard_post_init_kb(void) { gpio_set_pin_output(USBSW_PIN); gpio_write_pin_high(USBSW_PIN); - // Enable outputs used for current negotiation + // Enable outputs used for current negotiation and default to 500mA gpio_set_pin_output(USBPD_1_PIN); + gpio_write_pin_high(USBPD_1_PIN); gpio_set_pin_output(USBPD_2_PIN); - - // Test: 1.5A forced output - gpio_write_pin_low(USBPD_1_PIN); gpio_write_pin_high(USBPD_2_PIN); // Use ID pin to check if client is detected (if low: USB source port powered) gpio_set_pin_input_high(ID_PIN); - // Set BUS_B low to indicate a bus-powered hub (Test) + // Default to indicating the hub is bus-powered, and that high-powered devices should not try to connect or fast charge + // TODO: make this configurable for users who would rather always have their device connect, regardless of whether they meet the specs gpio_set_pin_output(BUS_B_PIN); - gpio_write_pin_high(BUS_B_PIN); + gpio_write_pin_low(BUS_B_PIN); } // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions) keyboard_post_init_user(); From 7d31530bb5fd01ae475438ac9d87454e4a9d5bdc Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Tue, 11 Jun 2024 17:19:06 -0400 Subject: [PATCH 27/53] sync kb state between master and slave, set USBPD pins accordingly --- keyboards/haverworks/theseus75/config.h | 1 + keyboards/haverworks/theseus75/theseus75.c | 77 ++++++++++++++++++++++ 2 files changed, 78 insertions(+) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 2f74a7a6e87..783c47a08cd 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -61,3 +61,4 @@ #endif #define USBPD_ALLOWANCE_CHECK_INTERVAL 100 +#define KB_STATE_SYNC_INTERVAL 500 diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 95941833396..e23b3f9aace 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -18,6 +18,7 @@ #include "transactions.h" #include #include "print.h" +#include "split_util.h" #include "usbpd.h" typedef struct _kb_state_t { @@ -40,6 +41,14 @@ const char* usbpd_str(usbpd_allowance_t allowance) { } } +void kb_state_slave_handler(uint8_t m2s_size, const void* m2s_buffer, uint8_t s2m_size, void* s2m_buffer) { + if (m2s_size == sizeof(kb_state_t)) { + memcpy(&kb_state, m2s_buffer, sizeof(kb_state_t)); + } else { + printf("Unexpected response in slave handler\n"); // TODO: add split debug logging + } +} + void keyboard_pre_init_kb(void) { // Disable the PD peripheral in pre-init because its pins are being used in the matrix: PWR->CR3 |= PWR_CR3_UCPD_DBDIS; @@ -53,6 +62,9 @@ void keyboard_pre_init_kb(void) { } void keyboard_post_init_kb(void) { + // Register keyboard state transaction + transaction_register_rpc(RPC_ID_KB_STATE, kb_state_slave_handler); + // Set default state values kb_state.allowance = USBPD_500MA; @@ -99,6 +111,7 @@ void housekeeping_task_kb(void) { // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions) housekeeping_task_user(); + // Update any shared kb state to send to slave: static uint32_t last_usbpd_allowance_check_time = 0; if (timer_elapsed32(last_usbpd_allowance_check_time) > USBPD_ALLOWANCE_CHECK_INTERVAL) { // On master side: check USBPD_1_PIN and USBPD_2_PIN to determine current negotiated with host @@ -133,4 +146,68 @@ void housekeeping_task_kb(void) { }; last_usbpd_allowance_check_time = timer_read32(); }; + + // Sync state from master to slave: + if (is_keyboard_master() && is_transport_connected()) { + bool needs_sync = false; + static uint32_t last_kb_state_sync_time; + static kb_state_t last_kb_state; + + // Check if the state values are different + if (memcmp(&kb_state, &last_kb_state, sizeof(kb_state_t))) { + needs_sync = true; + memcpy(&last_kb_state, &kb_state, sizeof(kb_state_t)); + } + + // Sync state every so often regardless + if (timer_elapsed32(last_kb_state_sync_time) > KB_STATE_SYNC_INTERVAL) { + needs_sync = true; + } + + if (needs_sync) { + bool did_sync = transaction_rpc_send(RPC_ID_KB_STATE, sizeof(kb_state_t), &kb_state); + if (did_sync) { + dprintf("Synced to slave\n"); + last_kb_state_sync_time = timer_read32(); + } else { + dprintf("Failed to sync state\n"); + } + } + } + + // Update the USBPD output pins on slave half whenever allowance has changed: + if (!is_keyboard_master()) { + static usbpd_allowance_t last_allowance; + + if (last_allowance != kb_state.allowance) { + last_allowance = kb_state.allowance; + + printf("Setting USB-PD output to %s (%s-powered)\n", usbpd_str(kb_state.allowance), kb_state.allowance == USBPD_500MA ? "bus" : "self"); + + switch (kb_state.allowance) { + default: + case USBPD_500MA: + // Set USBPD output to 500 mA: + gpio_write_pin_high(USBPD_1_PIN); + gpio_write_pin_high(USBPD_2_PIN); + // Indicate hub is bus-powered and devices should not try to connect or fast charge: + gpio_write_pin_low(BUS_B_PIN); + break; + case USBPD_1500MA: + // Set USBPD output to 500 mA: + gpio_write_pin_high(USBPD_1_PIN); + gpio_write_pin_high(USBPD_2_PIN); + // Indicate hub is self-powered and devices can try to connect or fast charge: + gpio_write_pin_high(BUS_B_PIN); + break; + case USBPD_3000MA: + // Set USBPD output to 1500 mA: + gpio_write_pin_low(USBPD_1_PIN); + gpio_write_pin_high(USBPD_2_PIN); + // Indicate hub is self-powered and devices can try to connect or fast charge: + gpio_write_pin_high(BUS_B_PIN); + break; + } + } + } } From 821f33cc643cf442e79eb24b763e0449241dd272 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Tue, 22 Oct 2024 09:54:36 -0400 Subject: [PATCH 28/53] add config to set bus power mode for 500mA --- keyboards/haverworks/theseus75/config.h | 2 ++ keyboards/haverworks/theseus75/theseus75.c | 12 ++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 783c47a08cd..a096bf5a253 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -16,6 +16,8 @@ #pragma once +#define DISABLE_BUS_POWER_MODE TRUE + /* Defines for the split keyboard setup */ #define SERIAL_USART_DRIVER SD3 // USART 3 #define SOFT_SERIAL_PIN B10 // The GPIO pin that is used split communication. diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index e23b3f9aace..211c5764679 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -100,7 +100,11 @@ void keyboard_post_init_kb(void) { // Default to indicating the hub is bus-powered, and that high-powered devices should not try to connect or fast charge // TODO: make this configurable for users who would rather always have their device connect, regardless of whether they meet the specs gpio_set_pin_output(BUS_B_PIN); - gpio_write_pin_low(BUS_B_PIN); + if (DISABLE_BUS_POWER_MODE == TRUE) { + gpio_write_pin_high(BUS_B_PIN); + } else { + gpio_write_pin_low(BUS_B_PIN); + } } // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions) keyboard_post_init_user(); @@ -191,7 +195,11 @@ void housekeeping_task_kb(void) { gpio_write_pin_high(USBPD_1_PIN); gpio_write_pin_high(USBPD_2_PIN); // Indicate hub is bus-powered and devices should not try to connect or fast charge: - gpio_write_pin_low(BUS_B_PIN); + if (DISABLE_BUS_POWER_MODE == TRUE) { + gpio_write_pin_high(BUS_B_PIN); + } else { + gpio_write_pin_low(BUS_B_PIN); + } break; case USBPD_1500MA: // Set USBPD output to 500 mA: From 673a416e574ed1183765b5c29fdd4313b37defcb Mon Sep 17 00:00:00 2001 From: Moritz Plattner Date: Tue, 22 Oct 2024 16:53:12 +0200 Subject: [PATCH 29/53] renamed to keyboard.json --- keyboards/haverworks/theseus75/info.json | 541 ----------------------- 1 file changed, 541 deletions(-) delete mode 100644 keyboards/haverworks/theseus75/info.json diff --git a/keyboards/haverworks/theseus75/info.json b/keyboards/haverworks/theseus75/info.json deleted file mode 100644 index 880b8d15e8c..00000000000 --- a/keyboards/haverworks/theseus75/info.json +++ /dev/null @@ -1,541 +0,0 @@ -{ - "keyboard_name": "Theseus75", - "maintainer": "ebastler", - "manufacturer": "Haverworks", - "url": "https://haver.works/", - "bootloader": "stm32-dfu", - "bootmagic": { - "matrix": [0, 1] - }, - "diode_direction": "COL2ROW", - "encoder": { - "rotary": [ - {"pin_a": "A8", "pin_b": "C6", "resolution": 2} - ] - }, - "features": { - "bootmagic": true, - "command": false, - "console": true, - "encoder": true, - "extrakey": true, - "mousekey": true, - "nkro": true, - "rgb_matrix": true - }, - "matrix_pins": { - "cols": ["B11", "C14", "B6", "B5", "B4", "B3", "C11", "C10", null], - "rows": ["A9", "A10", "B15", "B12", "B13", "B14"] - }, - "processor": "STM32G431", - "rgb_matrix": { - "driver": "ws2812", - "layout": [ - {"matrix": [3, 1], "x": 32, "y": 34, "flags": 8}, - {"x": 28, "y": 1, "flags": 2}, - {"x": 43, "y": 1, "flags": 2}, - {"x": 56, "y": 1, "flags": 2}, - {"x": 69, "y": 1, "flags": 2}, - {"x": 84, "y": 1, "flags": 2}, - {"x": 99, "y": 1, "flags": 2}, - {"x": 97, "y": 8, "flags": 2}, - {"x": 91, "y": 19, "flags": 2}, - {"x": 91, "y": 31, "flags": 2}, - {"x": 92, "y": 42, "flags": 2}, - {"x": 96, "y": 53, "flags": 2}, - {"x": 97, "y": 64, "flags": 2}, - {"x": 81, "y": 64, "flags": 2}, - {"x": 66, "y": 64, "flags": 2}, - {"x": 53, "y": 64, "flags": 2}, - {"x": 40, "y": 64, "flags": 2}, - {"x": 26, "y": 64, "flags": 2}, - {"x": 13, "y": 64, "flags": 2}, - {"x": 0, "y": 64, "flags": 2}, - {"x": 0, "y": 53, "flags": 2}, - {"x": 0, "y": 42, "flags": 2}, - {"x": 0, "y": 31, "flags": 2}, - {"x": 0, "y": 19, "flags": 2}, - {"x": 0, "y": 9, "flags": 2}, - {"x": 0, "y": 1, "flags": 2}, - {"x": 13, "y": 1, "flags": 2}, - {"x": 224, "y": 31, "flags": 2}, - {"x": 224, "y": 42, "flags": 2}, - {"x": 224, "y": 53, "flags": 2}, - {"x": 224, "y": 64, "flags": 2}, - {"x": 209, "y": 64, "flags": 2}, - {"x": 194, "y": 64, "flags": 2}, - {"x": 180, "y": 64, "flags": 2}, - {"x": 165, "y": 64, "flags": 2}, - {"x": 152, "y": 64, "flags": 2}, - {"x": 138, "y": 64, "flags": 2}, - {"x": 124, "y": 64, "flags": 2}, - {"x": 124, "y": 53, "flags": 2}, - {"x": 119, "y": 42, "flags": 2}, - {"x": 114, "y": 31, "flags": 2}, - {"x": 117, "y": 19, "flags": 2}, - {"x": 122, "y": 8, "flags": 2}, - {"x": 126, "y": 1, "flags": 2}, - {"x": 140, "y": 1, "flags": 2}, - {"x": 155, "y": 1, "flags": 2}, - {"x": 168, "y": 1, "flags": 2}, - {"x": 181, "y": 1, "flags": 2}, - {"x": 196, "y": 1, "flags": 2}, - {"x": 211, "y": 1, "flags": 2}, - {"x": 224, "y": 1, "flags": 2}, - {"x": 224, "y": 8, "flags": 2}, - {"x": 224, "y": 19, "flags": 2} - ], - "animations": { - "solid_color": true, - "alphas_mods": true, - "gradient_up_down": true, - "gradient_left_right": true, - "breathing": true, - "band_sat": true, - "band_val": true, - "band_pinwheel_sat": true, - "band_pinwheel_val": true, - "band_spiral_sat": true, - "band_spiral_val": true, - "cycle_all": true, - "cycle_left_right": true, - "cycle_up_down": true, - "cycle_out_in": true, - "cycle_out_in_dual": true, - "rainbow_moving_chevron": true, - "cycle_pinwheel": true, - "cycle_spiral": true, - "dual_beacon": true, - "rainbow_beacon": true, - "rainbow_pinwheels": true, - "raindrops": true, - "jellybean_raindrops": true, - "hue_breathing": true, - "hue_pendulum": true, - "hue_wave": true, - "pixel_fractal": true, - "pixel_flow": true, - "pixel_rain": true - } - }, - "split": { - "bootmagic": { - "matrix": [6, 6] - }, - "enabled": true, - "encoder": { - "right": { - "rotary": [ - {"pin_a": "B5", "pin_b": "B4", "resolution": 2} - ] - } - }, - "matrix_pins": { - "right": { - "cols": ["A10", "A9", "A8", "C6", "B15", "B14", "B13", "B12", "C14"], - "rows": ["B3", "C10", "C11", "A1", "A0", "B6"] - } - }, - "transport": { - "sync_matrix_state": true, - "watchdog": true - } - }, - "usb": { - "device_version": "1.0.0", - "pid": "0x0001", - "vid": "0x6877" - }, - "ws2812": { - "driver": "pwm", - "pin": "B7" - }, - "layouts": { - "LAYOUT_75xt_all": { - "layout": [ - {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, - {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, - {"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0}, - {"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0}, - {"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0}, - {"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0}, - {"label": "F5", "matrix": [0, 6], "x": 7, "y": 0}, - {"label": "F6", "matrix": [0, 7], "x": 8, "y": 0}, - {"label": "F7", "matrix": [6, 0], "x": 10, "y": 0}, - {"label": "F8", "matrix": [6, 1], "x": 11, "y": 0}, - {"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0}, - {"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0}, - {"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0}, - {"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0}, - {"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0}, - {"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0}, - {"label": "M1", "matrix": [1, 0], "x": 0, "y": 1}, - {"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1}, - {"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1}, - {"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1}, - {"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1}, - {"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1}, - {"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1}, - {"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1}, - {"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1}, - {"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1}, - {"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1}, - {"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1}, - {"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1}, - {"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1}, - {"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1}, - {"label": "Del", "matrix": [7, 7], "x": 16.5, "y": 1}, - {"label": "Home", "matrix": [7, 8], "x": 18, "y": 1}, - {"label": "M2", "matrix": [2, 0], "x": 0, "y": 2}, - {"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5}, - {"label": "Q", "matrix": [2, 3], "x": 3, "y": 2}, - {"label": "W", "matrix": [2, 4], "x": 4, "y": 2}, - {"label": "E", "matrix": [2, 5], "x": 5, "y": 2}, - {"label": "R", "matrix": [2, 6], "x": 6, "y": 2}, - {"label": "T", "matrix": [2, 7], "x": 7, "y": 2}, - {"label": "Y", "matrix": [8, 0], "x": 9, "y": 2}, - {"label": "U", "matrix": [8, 1], "x": 10, "y": 2}, - {"label": "I", "matrix": [8, 2], "x": 11, "y": 2}, - {"label": "O", "matrix": [8, 3], "x": 12, "y": 2}, - {"label": "P", "matrix": [8, 4], "x": 13, "y": 2}, - {"label": "[", "matrix": [8, 5], "x": 14, "y": 2}, - {"label": "]", "matrix": [8, 6], "x": 15, "y": 2}, - {"label": "BSLS", "matrix": [8, 7], "x": 16, "y": 2, "w": 1.5}, - {"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2}, - {"label": "M3", "matrix": [3, 0], "x": 0, "y": 3}, - {"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75}, - {"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3}, - {"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3}, - {"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3}, - {"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3}, - {"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3}, - {"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3}, - {"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3}, - {"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3}, - {"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3}, - {"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3}, - {"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3}, - {"label": "NUHS", "matrix": [9, 6], "x": 15.25, "y": 3}, - {"label": "Enter", "matrix": [9, 7], "x": 16.25, "y": 3, "w": 1.25}, - {"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3}, - {"label": "M4", "matrix": [4, 0], "x": 0, "y": 4}, - {"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.25}, - {"label": "NUBS", "matrix": [4, 2], "x": 2.75, "y": 4}, - {"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4}, - {"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4}, - {"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4}, - {"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4}, - {"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4}, - {"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4}, - {"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4}, - {"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4}, - {"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4}, - {"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4}, - {"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75}, - {"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4}, - {"label": "End", "matrix": [10, 8], "x": 18, "y": 4}, - {"label": "M5", "matrix": [5, 0], "x": 0, "y": 5}, - {"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25}, - {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, - {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, - {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, - {"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25}, - {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, - {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, - {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, - {"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5}, - {"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5}, - {"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5}, - {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} - ] - }, - "LAYOUT_75xt_ansi": { - "layout": [ - {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, - {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, - {"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0}, - {"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0}, - {"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0}, - {"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0}, - {"label": "F5", "matrix": [0, 6], "x": 7, "y": 0}, - {"label": "F6", "matrix": [0, 7], "x": 8, "y": 0}, - {"label": "F7", "matrix": [6, 0], "x": 10, "y": 0}, - {"label": "F8", "matrix": [6, 1], "x": 11, "y": 0}, - {"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0}, - {"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0}, - {"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0}, - {"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0}, - {"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0}, - {"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0}, - {"label": "M1", "matrix": [1, 0], "x": 0, "y": 1}, - {"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1}, - {"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1}, - {"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1}, - {"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1}, - {"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1}, - {"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1}, - {"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1}, - {"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1}, - {"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1}, - {"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1}, - {"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1}, - {"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1}, - {"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1}, - {"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1, "w": 2}, - {"label": "Home", "matrix": [7, 8], "x": 18, "y": 1}, - {"label": "M2", "matrix": [2, 0], "x": 0, "y": 2}, - {"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5}, - {"label": "Q", "matrix": [2, 3], "x": 3, "y": 2}, - {"label": "W", "matrix": [2, 4], "x": 4, "y": 2}, - {"label": "E", "matrix": [2, 5], "x": 5, "y": 2}, - {"label": "R", "matrix": [2, 6], "x": 6, "y": 2}, - {"label": "T", "matrix": [2, 7], "x": 7, "y": 2}, - {"label": "Y", "matrix": [8, 0], "x": 9, "y": 2}, - {"label": "U", "matrix": [8, 1], "x": 10, "y": 2}, - {"label": "I", "matrix": [8, 2], "x": 11, "y": 2}, - {"label": "O", "matrix": [8, 3], "x": 12, "y": 2}, - {"label": "P", "matrix": [8, 4], "x": 13, "y": 2}, - {"label": "[", "matrix": [8, 5], "x": 14, "y": 2}, - {"label": "]", "matrix": [8, 6], "x": 15, "y": 2}, - {"label": "BSLS", "matrix": [8, 7], "x": 16, "y": 2, "w": 1.5}, - {"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2}, - {"label": "M3", "matrix": [3, 0], "x": 0, "y": 3}, - {"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75}, - {"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3}, - {"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3}, - {"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3}, - {"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3}, - {"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3}, - {"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3}, - {"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3}, - {"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3}, - {"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3}, - {"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3}, - {"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3}, - {"label": "Enter", "matrix": [9, 7], "x": 15.25, "y": 3, "w": 2.25}, - {"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3}, - {"label": "M4", "matrix": [4, 0], "x": 0, "y": 4}, - {"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 2.25}, - {"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4}, - {"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4}, - {"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4}, - {"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4}, - {"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4}, - {"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4}, - {"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4}, - {"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4}, - {"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4}, - {"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4}, - {"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75}, - {"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4}, - {"label": "End", "matrix": [10, 8], "x": 18, "y": 4}, - {"label": "M5", "matrix": [5, 0], "x": 0, "y": 5}, - {"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25}, - {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, - {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, - {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, - {"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25}, - {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, - {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, - {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, - {"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5}, - {"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5}, - {"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5}, - {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} - ] - }, - "LAYOUT_75xt_hs_all": { - "layout": [ - {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, - {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, - {"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0}, - {"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0}, - {"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0}, - {"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0}, - {"label": "F5", "matrix": [0, 6], "x": 7, "y": 0}, - {"label": "F6", "matrix": [0, 7], "x": 8, "y": 0}, - {"label": "F7", "matrix": [6, 0], "x": 10, "y": 0}, - {"label": "F8", "matrix": [6, 1], "x": 11, "y": 0}, - {"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0}, - {"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0}, - {"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0}, - {"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0}, - {"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0}, - {"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0}, - {"label": "M1", "matrix": [1, 0], "x": 0, "y": 1}, - {"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1}, - {"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1}, - {"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1}, - {"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1}, - {"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1}, - {"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1}, - {"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1}, - {"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1}, - {"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1}, - {"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1}, - {"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1}, - {"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1}, - {"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1}, - {"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1}, - {"label": "Del", "matrix": [7, 7], "x": 16.5, "y": 1}, - {"label": "Home", "matrix": [7, 8], "x": 18, "y": 1}, - {"label": "M2", "matrix": [2, 0], "x": 0, "y": 2}, - {"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5}, - {"label": "Q", "matrix": [2, 3], "x": 3, "y": 2}, - {"label": "W", "matrix": [2, 4], "x": 4, "y": 2}, - {"label": "E", "matrix": [2, 5], "x": 5, "y": 2}, - {"label": "R", "matrix": [2, 6], "x": 6, "y": 2}, - {"label": "T", "matrix": [2, 7], "x": 7, "y": 2}, - {"label": "Y", "matrix": [8, 0], "x": 9, "y": 2}, - {"label": "U", "matrix": [8, 1], "x": 10, "y": 2}, - {"label": "I", "matrix": [8, 2], "x": 11, "y": 2}, - {"label": "O", "matrix": [8, 3], "x": 12, "y": 2}, - {"label": "P", "matrix": [8, 4], "x": 13, "y": 2}, - {"label": "[", "matrix": [8, 5], "x": 14, "y": 2}, - {"label": "]", "matrix": [8, 6], "x": 15, "y": 2}, - {"label": "BSLS", "matrix": [8, 7], "x": 16, "y": 2, "w": 1.5}, - {"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2}, - {"label": "M3", "matrix": [3, 0], "x": 0, "y": 3}, - {"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75}, - {"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3}, - {"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3}, - {"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3}, - {"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3}, - {"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3}, - {"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3}, - {"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3}, - {"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3}, - {"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3}, - {"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3}, - {"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3}, - {"label": "Enter", "matrix": [9, 7], "x": 15.25, "y": 3, "w": 2.25}, - {"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3}, - {"label": "M4", "matrix": [4, 0], "x": 0, "y": 4}, - {"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.25}, - {"label": "NUBS", "matrix": [4, 2], "x": 2.75, "y": 4}, - {"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4}, - {"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4}, - {"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4}, - {"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4}, - {"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4}, - {"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4}, - {"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4}, - {"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4}, - {"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4}, - {"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4}, - {"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75}, - {"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4}, - {"label": "End", "matrix": [10, 8], "x": 18, "y": 4}, - {"label": "M5", "matrix": [5, 0], "x": 0, "y": 5}, - {"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25}, - {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, - {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, - {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, - {"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25}, - {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, - {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, - {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, - {"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5}, - {"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5}, - {"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5}, - {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} - ] - }, - "LAYOUT_75xt_iso": { - "layout": [ - {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, - {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, - {"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0}, - {"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0}, - {"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0}, - {"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0}, - {"label": "F5", "matrix": [0, 6], "x": 7, "y": 0}, - {"label": "F6", "matrix": [0, 7], "x": 8, "y": 0}, - {"label": "F7", "matrix": [6, 0], "x": 10, "y": 0}, - {"label": "F8", "matrix": [6, 1], "x": 11, "y": 0}, - {"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0}, - {"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0}, - {"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0}, - {"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0}, - {"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0}, - {"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0}, - {"label": "M1", "matrix": [1, 0], "x": 0, "y": 1}, - {"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1}, - {"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1}, - {"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1}, - {"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1}, - {"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1}, - {"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1}, - {"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1}, - {"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1}, - {"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1}, - {"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1}, - {"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1}, - {"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1}, - {"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1}, - {"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1, "w": 2}, - {"label": "Home", "matrix": [7, 8], "x": 18, "y": 1}, - {"label": "M2", "matrix": [2, 0], "x": 0, "y": 2}, - {"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5}, - {"label": "Q", "matrix": [2, 3], "x": 3, "y": 2}, - {"label": "W", "matrix": [2, 4], "x": 4, "y": 2}, - {"label": "E", "matrix": [2, 5], "x": 5, "y": 2}, - {"label": "R", "matrix": [2, 6], "x": 6, "y": 2}, - {"label": "T", "matrix": [2, 7], "x": 7, "y": 2}, - {"label": "Y", "matrix": [8, 0], "x": 9, "y": 2}, - {"label": "U", "matrix": [8, 1], "x": 10, "y": 2}, - {"label": "I", "matrix": [8, 2], "x": 11, "y": 2}, - {"label": "O", "matrix": [8, 3], "x": 12, "y": 2}, - {"label": "P", "matrix": [8, 4], "x": 13, "y": 2}, - {"label": "[", "matrix": [8, 5], "x": 14, "y": 2}, - {"label": "]", "matrix": [8, 6], "x": 15, "y": 2}, - {"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2}, - {"label": "M3", "matrix": [3, 0], "x": 0, "y": 3}, - {"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75}, - {"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3}, - {"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3}, - {"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3}, - {"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3}, - {"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3}, - {"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3}, - {"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3}, - {"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3}, - {"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3}, - {"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3}, - {"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3}, - {"label": "NUHS", "matrix": [9, 6], "x": 15.25, "y": 3}, - {"label": "Enter", "matrix": [9, 7], "x": 16.25, "y": 2, "w": 1.25, "h": 2}, - {"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3}, - {"label": "M4", "matrix": [4, 0], "x": 0, "y": 4}, - {"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.25}, - {"label": "NUBS", "matrix": [4, 2], "x": 2.75, "y": 4}, - {"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4}, - {"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4}, - {"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4}, - {"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4}, - {"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4}, - {"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4}, - {"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4}, - {"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4}, - {"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4}, - {"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4}, - {"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75}, - {"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4}, - {"label": "End", "matrix": [10, 8], "x": 18, "y": 4}, - {"label": "M5", "matrix": [5, 0], "x": 0, "y": 5}, - {"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25}, - {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, - {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, - {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, - {"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25}, - {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, - {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, - {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, - {"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5}, - {"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5}, - {"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5}, - {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} - ] - } - } -} From ba82fbafdc2947ca319c8c1c33e29a379c41e31c Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Tue, 22 Oct 2024 12:35:51 -0400 Subject: [PATCH 30/53] clean up comments, disable debug --- keyboards/haverworks/theseus75/theseus75.c | 53 +++++++++++----------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 211c5764679..1390168077f 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -45,60 +45,61 @@ void kb_state_slave_handler(uint8_t m2s_size, const void* m2s_buffer, uint8_t s2 if (m2s_size == sizeof(kb_state_t)) { memcpy(&kb_state, m2s_buffer, sizeof(kb_state_t)); } else { - printf("Unexpected response in slave handler\n"); // TODO: add split debug logging + dprintf("Unexpected response in slave handler\n"); // TODO: add split debug logging } } void keyboard_pre_init_kb(void) { + // Customise these values to desired behaviour: + // debug_enable = true; + // debug_matrix = true; + // debug_keyboard = true; + // debug_mouse = true; + // Disable the PD peripheral in pre-init because its pins are being used in the matrix: PWR->CR3 |= PWR_CR3_UCPD_DBDIS; // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions) keyboard_pre_init_user(); - // Customise these values to desired behaviour: - debug_enable = true; - // debug_matrix = true; - // debug_keyboard = true; - // debug_mouse = true; } void keyboard_post_init_kb(void) { - // Register keyboard state transaction + // Register keyboard state transaction: transaction_register_rpc(RPC_ID_KB_STATE, kb_state_slave_handler); - // Set default state values + // Set default state values: kb_state.allowance = USBPD_500MA; - // If the keyboard is master + // If the keyboard is master, if (is_keyboard_master()) { - // Turn on power to the split half and to underglow LEDs + // Turn on power to the split half and to underglow LEDs: gpio_set_pin_output(PSW_PIN); gpio_write_pin_high(PSW_PIN); - // Enable inputs used for current negotiation + // Enable inputs used for current negotiation: gpio_set_pin_input_high(USBPD_1_PIN); gpio_set_pin_input_high(USBPD_2_PIN); // Not needed in this mode (always high-Z with pull-up on PCB if port controller is sink) gpio_set_pin_input_high(ID_PIN); } else { - // Prepare output to enable power for USB output after negotiation + // Prepare output to enable power for USB output after negotiation: gpio_set_pin_output(PSW_PIN); - // Switch the USB MUXes between hub and ports + // Switch the USB MUXes between hub and ports: gpio_set_pin_output(USBSW_PIN); gpio_write_pin_high(USBSW_PIN); - // Enable outputs used for current negotiation and default to 500mA + // Enable outputs used for current negotiation and default to 500mA: gpio_set_pin_output(USBPD_1_PIN); gpio_write_pin_high(USBPD_1_PIN); gpio_set_pin_output(USBPD_2_PIN); gpio_write_pin_high(USBPD_2_PIN); - // Use ID pin to check if client is detected (if low: USB source port powered) + // Use ID pin to check if client is detected (if low: USB source port powered): gpio_set_pin_input_high(ID_PIN); - // Default to indicating the hub is bus-powered, and that high-powered devices should not try to connect or fast charge - // TODO: make this configurable for users who would rather always have their device connect, regardless of whether they meet the specs + // Indicate that the hub is either self-powered or bus-powered based on whether the bus-power mode flag is enabled + // (configurable for users who would rather always have their device connect, regardless of whether they meet the specs): gpio_set_pin_output(BUS_B_PIN); if (DISABLE_BUS_POWER_MODE == TRUE) { gpio_write_pin_high(BUS_B_PIN); @@ -119,8 +120,8 @@ void housekeeping_task_kb(void) { static uint32_t last_usbpd_allowance_check_time = 0; if (timer_elapsed32(last_usbpd_allowance_check_time) > USBPD_ALLOWANCE_CHECK_INTERVAL) { // On master side: check USBPD_1_PIN and USBPD_2_PIN to determine current negotiated with host - // (Can't use the usbpd_get_allowance() function this uses this uses the native CC PD interface - // of the G series MCU, while we're using dedicated port controllers instead) + // (Can't use the usbpd_get_allowance() function, as this uses this uses the native CC PD interface + // of the G series MCU, while we're using dedicated port controllers instead): if (is_keyboard_master()) { usbpd_allowance_t allowance; @@ -137,15 +138,14 @@ void housekeeping_task_kb(void) { kb_state.allowance = allowance; } } else { - printf("Im slave, you shouldn't see this\n"); // On peripheral side - If ID_PIN is low: USB client negotiated 5V successfully -> enable power routing // Check if PSW_PIN is not already high to avoid wasting time if (!gpio_read_pin(ID_PIN) && !gpio_read_pin(PSW_PIN)) { gpio_write_pin_high(PSW_PIN); - printf("USB downstream device detected\n"); + dprintf("USB downstream device connected\n"); // TODO: add split debug logging } else if (gpio_read_pin(ID_PIN) && gpio_read_pin(PSW_PIN)) { gpio_write_pin_low(PSW_PIN); - printf("USB downstream device disconnected\n"); + dprintf("USB downstream device disconnected\n"); // TODO: add split debug logging } }; last_usbpd_allowance_check_time = timer_read32(); @@ -157,13 +157,13 @@ void housekeeping_task_kb(void) { static uint32_t last_kb_state_sync_time; static kb_state_t last_kb_state; - // Check if the state values are different + // Check if the state values are different: if (memcmp(&kb_state, &last_kb_state, sizeof(kb_state_t))) { needs_sync = true; memcpy(&last_kb_state, &kb_state, sizeof(kb_state_t)); } - // Sync state every so often regardless + // Sync state every so often regardless: if (timer_elapsed32(last_kb_state_sync_time) > KB_STATE_SYNC_INTERVAL) { needs_sync = true; } @@ -186,7 +186,7 @@ void housekeeping_task_kb(void) { if (last_allowance != kb_state.allowance) { last_allowance = kb_state.allowance; - printf("Setting USB-PD output to %s (%s-powered)\n", usbpd_str(kb_state.allowance), kb_state.allowance == USBPD_500MA ? "bus" : "self"); + printf("Setting USB-PD output to %s (%s-powered)\n", usbpd_str(kb_state.allowance), kb_state.allowance == USBPD_500MA ? "bus" : "self"); // TODO: add split debug logging switch (kb_state.allowance) { default: @@ -194,10 +194,11 @@ void housekeeping_task_kb(void) { // Set USBPD output to 500 mA: gpio_write_pin_high(USBPD_1_PIN); gpio_write_pin_high(USBPD_2_PIN); - // Indicate hub is bus-powered and devices should not try to connect or fast charge: if (DISABLE_BUS_POWER_MODE == TRUE) { + // Indicate hub is self-powered and devices can try to connect or fast charge: gpio_write_pin_high(BUS_B_PIN); } else { + // Indicate hub is bus-powered and devices should not try to connect or fast charge: gpio_write_pin_low(BUS_B_PIN); } break; From 66fb639d342cbca2495c26f148df5eeaf5dfbc86 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Wed, 23 Oct 2024 11:46:20 -0400 Subject: [PATCH 31/53] Update readme.md --- keyboards/haverworks/theseus75/readme.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/haverworks/theseus75/readme.md b/keyboards/haverworks/theseus75/readme.md index e8b92bff698..214feab0aee 100644 --- a/keyboards/haverworks/theseus75/readme.md +++ b/keyboards/haverworks/theseus75/readme.md @@ -1,10 +1,10 @@ -# haverworks Theseus75 -![Theseus Render](https://i.imgur.com/yzCfVSth.png) +# Haverworks Theseus75 -The Theseus 75 is a 75% row-stagger split keyboard with a macro column + encoder on both sides. It features one USB-C dual role port per side, and USB hubs, that allow the unused port to turn into a USB-C 2.0 High-Speed host port to connect flash drives, cell phones and similar. Up to 5V 1.5A current are offered, depending on negotiations with the host. +![Theseus75 HS PCB v1](https://imgur.com/xwFV8i6.png) +The Theseus75 is a 75% row-stagger split keyboard with a macro column + encoder on both sides. It features one USB-C dual role port per side, and USB hubs, that allow the unused port to turn into a USB-C 2.0 High-Speed host port to connect flash drives, cell phones, and similar devices. Up to 5V 1.5A current is offered, depending on negotiations with the host. -* Keyboard Maintainer: [ebastler](https://github.com/ebastler) -* Hardware Supported: Haverworks Theseus75 r1 PCBs (Hotswap and solder) +* Keyboard Maintainers: [ebastler](https://github.com/ebastler), [haversnail](https://github.com/haversnail) +* Hardware Supported: Haverworks Theseus75 v1 PCBs (Hot-swap and solder) * Hardware Availability: Groupbuy How to enter the Bootloader: @@ -21,4 +21,4 @@ Flash example for this keyboard (after setting up your build environment): qmk flash haverworks/theseus75:default -See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). From d3418ee9fd360251ddc23699ec1b9c368e667613 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Wed, 23 Oct 2024 12:05:30 -0400 Subject: [PATCH 32/53] Update readme image --- keyboards/haverworks/theseus75/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/haverworks/theseus75/readme.md b/keyboards/haverworks/theseus75/readme.md index 214feab0aee..21412ca0ef9 100644 --- a/keyboards/haverworks/theseus75/readme.md +++ b/keyboards/haverworks/theseus75/readme.md @@ -1,11 +1,11 @@ # Haverworks Theseus75 -![Theseus75 HS PCB v1](https://imgur.com/xwFV8i6.png) +![Theseus75 HS PCB v1](https://imgur.com/N81LsCO.png) The Theseus75 is a 75% row-stagger split keyboard with a macro column + encoder on both sides. It features one USB-C dual role port per side, and USB hubs, that allow the unused port to turn into a USB-C 2.0 High-Speed host port to connect flash drives, cell phones, and similar devices. Up to 5V 1.5A current is offered, depending on negotiations with the host. * Keyboard Maintainers: [ebastler](https://github.com/ebastler), [haversnail](https://github.com/haversnail) * Hardware Supported: Haverworks Theseus75 v1 PCBs (Hot-swap and solder) -* Hardware Availability: Groupbuy +* Hardware Availability: [Group buy](https://haver.works/theseus75) How to enter the Bootloader: * Follow instructions on the PCB (Hold Boot/Flash button for approx. 1s) From ea21c278046f130592fb3f8361f7c47017ecaa33 Mon Sep 17 00:00:00 2001 From: Moritz Plattner Date: Thu, 24 Oct 2024 14:51:49 +0200 Subject: [PATCH 33/53] add keyboard json after accidentally deleting it --- keyboards/haverworks/theseus75/keyboard.json | 541 +++++++++++++++++++ 1 file changed, 541 insertions(+) create mode 100644 keyboards/haverworks/theseus75/keyboard.json diff --git a/keyboards/haverworks/theseus75/keyboard.json b/keyboards/haverworks/theseus75/keyboard.json new file mode 100644 index 00000000000..880b8d15e8c --- /dev/null +++ b/keyboards/haverworks/theseus75/keyboard.json @@ -0,0 +1,541 @@ +{ + "keyboard_name": "Theseus75", + "maintainer": "ebastler", + "manufacturer": "Haverworks", + "url": "https://haver.works/", + "bootloader": "stm32-dfu", + "bootmagic": { + "matrix": [0, 1] + }, + "diode_direction": "COL2ROW", + "encoder": { + "rotary": [ + {"pin_a": "A8", "pin_b": "C6", "resolution": 2} + ] + }, + "features": { + "bootmagic": true, + "command": false, + "console": true, + "encoder": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgb_matrix": true + }, + "matrix_pins": { + "cols": ["B11", "C14", "B6", "B5", "B4", "B3", "C11", "C10", null], + "rows": ["A9", "A10", "B15", "B12", "B13", "B14"] + }, + "processor": "STM32G431", + "rgb_matrix": { + "driver": "ws2812", + "layout": [ + {"matrix": [3, 1], "x": 32, "y": 34, "flags": 8}, + {"x": 28, "y": 1, "flags": 2}, + {"x": 43, "y": 1, "flags": 2}, + {"x": 56, "y": 1, "flags": 2}, + {"x": 69, "y": 1, "flags": 2}, + {"x": 84, "y": 1, "flags": 2}, + {"x": 99, "y": 1, "flags": 2}, + {"x": 97, "y": 8, "flags": 2}, + {"x": 91, "y": 19, "flags": 2}, + {"x": 91, "y": 31, "flags": 2}, + {"x": 92, "y": 42, "flags": 2}, + {"x": 96, "y": 53, "flags": 2}, + {"x": 97, "y": 64, "flags": 2}, + {"x": 81, "y": 64, "flags": 2}, + {"x": 66, "y": 64, "flags": 2}, + {"x": 53, "y": 64, "flags": 2}, + {"x": 40, "y": 64, "flags": 2}, + {"x": 26, "y": 64, "flags": 2}, + {"x": 13, "y": 64, "flags": 2}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 0, "y": 53, "flags": 2}, + {"x": 0, "y": 42, "flags": 2}, + {"x": 0, "y": 31, "flags": 2}, + {"x": 0, "y": 19, "flags": 2}, + {"x": 0, "y": 9, "flags": 2}, + {"x": 0, "y": 1, "flags": 2}, + {"x": 13, "y": 1, "flags": 2}, + {"x": 224, "y": 31, "flags": 2}, + {"x": 224, "y": 42, "flags": 2}, + {"x": 224, "y": 53, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 209, "y": 64, "flags": 2}, + {"x": 194, "y": 64, "flags": 2}, + {"x": 180, "y": 64, "flags": 2}, + {"x": 165, "y": 64, "flags": 2}, + {"x": 152, "y": 64, "flags": 2}, + {"x": 138, "y": 64, "flags": 2}, + {"x": 124, "y": 64, "flags": 2}, + {"x": 124, "y": 53, "flags": 2}, + {"x": 119, "y": 42, "flags": 2}, + {"x": 114, "y": 31, "flags": 2}, + {"x": 117, "y": 19, "flags": 2}, + {"x": 122, "y": 8, "flags": 2}, + {"x": 126, "y": 1, "flags": 2}, + {"x": 140, "y": 1, "flags": 2}, + {"x": 155, "y": 1, "flags": 2}, + {"x": 168, "y": 1, "flags": 2}, + {"x": 181, "y": 1, "flags": 2}, + {"x": 196, "y": 1, "flags": 2}, + {"x": 211, "y": 1, "flags": 2}, + {"x": 224, "y": 1, "flags": 2}, + {"x": 224, "y": 8, "flags": 2}, + {"x": 224, "y": 19, "flags": 2} + ], + "animations": { + "solid_color": true, + "alphas_mods": true, + "gradient_up_down": true, + "gradient_left_right": true, + "breathing": true, + "band_sat": true, + "band_val": true, + "band_pinwheel_sat": true, + "band_pinwheel_val": true, + "band_spiral_sat": true, + "band_spiral_val": true, + "cycle_all": true, + "cycle_left_right": true, + "cycle_up_down": true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "rainbow_moving_chevron": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "dual_beacon": true, + "rainbow_beacon": true, + "rainbow_pinwheels": true, + "raindrops": true, + "jellybean_raindrops": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": true, + "pixel_fractal": true, + "pixel_flow": true, + "pixel_rain": true + } + }, + "split": { + "bootmagic": { + "matrix": [6, 6] + }, + "enabled": true, + "encoder": { + "right": { + "rotary": [ + {"pin_a": "B5", "pin_b": "B4", "resolution": 2} + ] + } + }, + "matrix_pins": { + "right": { + "cols": ["A10", "A9", "A8", "C6", "B15", "B14", "B13", "B12", "C14"], + "rows": ["B3", "C10", "C11", "A1", "A0", "B6"] + } + }, + "transport": { + "sync_matrix_state": true, + "watchdog": true + } + }, + "usb": { + "device_version": "1.0.0", + "pid": "0x0001", + "vid": "0x6877" + }, + "ws2812": { + "driver": "pwm", + "pin": "B7" + }, + "layouts": { + "LAYOUT_75xt_all": { + "layout": [ + {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, + {"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0}, + {"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0}, + {"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0}, + {"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0}, + {"label": "F5", "matrix": [0, 6], "x": 7, "y": 0}, + {"label": "F6", "matrix": [0, 7], "x": 8, "y": 0}, + {"label": "F7", "matrix": [6, 0], "x": 10, "y": 0}, + {"label": "F8", "matrix": [6, 1], "x": 11, "y": 0}, + {"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0}, + {"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0}, + {"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0}, + {"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0}, + {"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0}, + {"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0}, + {"label": "M1", "matrix": [1, 0], "x": 0, "y": 1}, + {"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1}, + {"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1}, + {"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1}, + {"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1}, + {"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1}, + {"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1}, + {"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1}, + {"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1}, + {"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1}, + {"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1}, + {"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1}, + {"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1}, + {"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1}, + {"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1}, + {"label": "Del", "matrix": [7, 7], "x": 16.5, "y": 1}, + {"label": "Home", "matrix": [7, 8], "x": 18, "y": 1}, + {"label": "M2", "matrix": [2, 0], "x": 0, "y": 2}, + {"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5}, + {"label": "Q", "matrix": [2, 3], "x": 3, "y": 2}, + {"label": "W", "matrix": [2, 4], "x": 4, "y": 2}, + {"label": "E", "matrix": [2, 5], "x": 5, "y": 2}, + {"label": "R", "matrix": [2, 6], "x": 6, "y": 2}, + {"label": "T", "matrix": [2, 7], "x": 7, "y": 2}, + {"label": "Y", "matrix": [8, 0], "x": 9, "y": 2}, + {"label": "U", "matrix": [8, 1], "x": 10, "y": 2}, + {"label": "I", "matrix": [8, 2], "x": 11, "y": 2}, + {"label": "O", "matrix": [8, 3], "x": 12, "y": 2}, + {"label": "P", "matrix": [8, 4], "x": 13, "y": 2}, + {"label": "[", "matrix": [8, 5], "x": 14, "y": 2}, + {"label": "]", "matrix": [8, 6], "x": 15, "y": 2}, + {"label": "BSLS", "matrix": [8, 7], "x": 16, "y": 2, "w": 1.5}, + {"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2}, + {"label": "M3", "matrix": [3, 0], "x": 0, "y": 3}, + {"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75}, + {"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3}, + {"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3}, + {"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3}, + {"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3}, + {"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3}, + {"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3}, + {"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3}, + {"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3}, + {"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3}, + {"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3}, + {"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3}, + {"label": "NUHS", "matrix": [9, 6], "x": 15.25, "y": 3}, + {"label": "Enter", "matrix": [9, 7], "x": 16.25, "y": 3, "w": 1.25}, + {"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3}, + {"label": "M4", "matrix": [4, 0], "x": 0, "y": 4}, + {"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.25}, + {"label": "NUBS", "matrix": [4, 2], "x": 2.75, "y": 4}, + {"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4}, + {"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4}, + {"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4}, + {"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4}, + {"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4}, + {"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4}, + {"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4}, + {"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4}, + {"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4}, + {"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4}, + {"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75}, + {"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4}, + {"label": "End", "matrix": [10, 8], "x": 18, "y": 4}, + {"label": "M5", "matrix": [5, 0], "x": 0, "y": 5}, + {"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25}, + {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, + {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, + {"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, + {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, + {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, + {"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5}, + {"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5}, + {"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5}, + {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} + ] + }, + "LAYOUT_75xt_ansi": { + "layout": [ + {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, + {"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0}, + {"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0}, + {"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0}, + {"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0}, + {"label": "F5", "matrix": [0, 6], "x": 7, "y": 0}, + {"label": "F6", "matrix": [0, 7], "x": 8, "y": 0}, + {"label": "F7", "matrix": [6, 0], "x": 10, "y": 0}, + {"label": "F8", "matrix": [6, 1], "x": 11, "y": 0}, + {"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0}, + {"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0}, + {"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0}, + {"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0}, + {"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0}, + {"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0}, + {"label": "M1", "matrix": [1, 0], "x": 0, "y": 1}, + {"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1}, + {"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1}, + {"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1}, + {"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1}, + {"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1}, + {"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1}, + {"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1}, + {"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1}, + {"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1}, + {"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1}, + {"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1}, + {"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1}, + {"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1}, + {"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1, "w": 2}, + {"label": "Home", "matrix": [7, 8], "x": 18, "y": 1}, + {"label": "M2", "matrix": [2, 0], "x": 0, "y": 2}, + {"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5}, + {"label": "Q", "matrix": [2, 3], "x": 3, "y": 2}, + {"label": "W", "matrix": [2, 4], "x": 4, "y": 2}, + {"label": "E", "matrix": [2, 5], "x": 5, "y": 2}, + {"label": "R", "matrix": [2, 6], "x": 6, "y": 2}, + {"label": "T", "matrix": [2, 7], "x": 7, "y": 2}, + {"label": "Y", "matrix": [8, 0], "x": 9, "y": 2}, + {"label": "U", "matrix": [8, 1], "x": 10, "y": 2}, + {"label": "I", "matrix": [8, 2], "x": 11, "y": 2}, + {"label": "O", "matrix": [8, 3], "x": 12, "y": 2}, + {"label": "P", "matrix": [8, 4], "x": 13, "y": 2}, + {"label": "[", "matrix": [8, 5], "x": 14, "y": 2}, + {"label": "]", "matrix": [8, 6], "x": 15, "y": 2}, + {"label": "BSLS", "matrix": [8, 7], "x": 16, "y": 2, "w": 1.5}, + {"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2}, + {"label": "M3", "matrix": [3, 0], "x": 0, "y": 3}, + {"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75}, + {"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3}, + {"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3}, + {"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3}, + {"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3}, + {"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3}, + {"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3}, + {"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3}, + {"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3}, + {"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3}, + {"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3}, + {"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3}, + {"label": "Enter", "matrix": [9, 7], "x": 15.25, "y": 3, "w": 2.25}, + {"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3}, + {"label": "M4", "matrix": [4, 0], "x": 0, "y": 4}, + {"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 2.25}, + {"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4}, + {"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4}, + {"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4}, + {"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4}, + {"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4}, + {"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4}, + {"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4}, + {"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4}, + {"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4}, + {"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4}, + {"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75}, + {"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4}, + {"label": "End", "matrix": [10, 8], "x": 18, "y": 4}, + {"label": "M5", "matrix": [5, 0], "x": 0, "y": 5}, + {"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25}, + {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, + {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, + {"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, + {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, + {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, + {"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5}, + {"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5}, + {"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5}, + {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} + ] + }, + "LAYOUT_75xt_hs_all": { + "layout": [ + {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, + {"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0}, + {"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0}, + {"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0}, + {"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0}, + {"label": "F5", "matrix": [0, 6], "x": 7, "y": 0}, + {"label": "F6", "matrix": [0, 7], "x": 8, "y": 0}, + {"label": "F7", "matrix": [6, 0], "x": 10, "y": 0}, + {"label": "F8", "matrix": [6, 1], "x": 11, "y": 0}, + {"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0}, + {"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0}, + {"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0}, + {"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0}, + {"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0}, + {"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0}, + {"label": "M1", "matrix": [1, 0], "x": 0, "y": 1}, + {"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1}, + {"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1}, + {"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1}, + {"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1}, + {"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1}, + {"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1}, + {"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1}, + {"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1}, + {"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1}, + {"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1}, + {"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1}, + {"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1}, + {"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1}, + {"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1}, + {"label": "Del", "matrix": [7, 7], "x": 16.5, "y": 1}, + {"label": "Home", "matrix": [7, 8], "x": 18, "y": 1}, + {"label": "M2", "matrix": [2, 0], "x": 0, "y": 2}, + {"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5}, + {"label": "Q", "matrix": [2, 3], "x": 3, "y": 2}, + {"label": "W", "matrix": [2, 4], "x": 4, "y": 2}, + {"label": "E", "matrix": [2, 5], "x": 5, "y": 2}, + {"label": "R", "matrix": [2, 6], "x": 6, "y": 2}, + {"label": "T", "matrix": [2, 7], "x": 7, "y": 2}, + {"label": "Y", "matrix": [8, 0], "x": 9, "y": 2}, + {"label": "U", "matrix": [8, 1], "x": 10, "y": 2}, + {"label": "I", "matrix": [8, 2], "x": 11, "y": 2}, + {"label": "O", "matrix": [8, 3], "x": 12, "y": 2}, + {"label": "P", "matrix": [8, 4], "x": 13, "y": 2}, + {"label": "[", "matrix": [8, 5], "x": 14, "y": 2}, + {"label": "]", "matrix": [8, 6], "x": 15, "y": 2}, + {"label": "BSLS", "matrix": [8, 7], "x": 16, "y": 2, "w": 1.5}, + {"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2}, + {"label": "M3", "matrix": [3, 0], "x": 0, "y": 3}, + {"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75}, + {"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3}, + {"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3}, + {"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3}, + {"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3}, + {"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3}, + {"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3}, + {"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3}, + {"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3}, + {"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3}, + {"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3}, + {"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3}, + {"label": "Enter", "matrix": [9, 7], "x": 15.25, "y": 3, "w": 2.25}, + {"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3}, + {"label": "M4", "matrix": [4, 0], "x": 0, "y": 4}, + {"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.25}, + {"label": "NUBS", "matrix": [4, 2], "x": 2.75, "y": 4}, + {"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4}, + {"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4}, + {"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4}, + {"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4}, + {"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4}, + {"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4}, + {"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4}, + {"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4}, + {"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4}, + {"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4}, + {"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75}, + {"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4}, + {"label": "End", "matrix": [10, 8], "x": 18, "y": 4}, + {"label": "M5", "matrix": [5, 0], "x": 0, "y": 5}, + {"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25}, + {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, + {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, + {"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, + {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, + {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, + {"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5}, + {"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5}, + {"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5}, + {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} + ] + }, + "LAYOUT_75xt_iso": { + "layout": [ + {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, + {"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0}, + {"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0}, + {"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0}, + {"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0}, + {"label": "F5", "matrix": [0, 6], "x": 7, "y": 0}, + {"label": "F6", "matrix": [0, 7], "x": 8, "y": 0}, + {"label": "F7", "matrix": [6, 0], "x": 10, "y": 0}, + {"label": "F8", "matrix": [6, 1], "x": 11, "y": 0}, + {"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0}, + {"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0}, + {"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0}, + {"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0}, + {"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0}, + {"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0}, + {"label": "M1", "matrix": [1, 0], "x": 0, "y": 1}, + {"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1}, + {"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1}, + {"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1}, + {"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1}, + {"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1}, + {"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1}, + {"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1}, + {"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1}, + {"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1}, + {"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1}, + {"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1}, + {"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1}, + {"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1}, + {"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1, "w": 2}, + {"label": "Home", "matrix": [7, 8], "x": 18, "y": 1}, + {"label": "M2", "matrix": [2, 0], "x": 0, "y": 2}, + {"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5}, + {"label": "Q", "matrix": [2, 3], "x": 3, "y": 2}, + {"label": "W", "matrix": [2, 4], "x": 4, "y": 2}, + {"label": "E", "matrix": [2, 5], "x": 5, "y": 2}, + {"label": "R", "matrix": [2, 6], "x": 6, "y": 2}, + {"label": "T", "matrix": [2, 7], "x": 7, "y": 2}, + {"label": "Y", "matrix": [8, 0], "x": 9, "y": 2}, + {"label": "U", "matrix": [8, 1], "x": 10, "y": 2}, + {"label": "I", "matrix": [8, 2], "x": 11, "y": 2}, + {"label": "O", "matrix": [8, 3], "x": 12, "y": 2}, + {"label": "P", "matrix": [8, 4], "x": 13, "y": 2}, + {"label": "[", "matrix": [8, 5], "x": 14, "y": 2}, + {"label": "]", "matrix": [8, 6], "x": 15, "y": 2}, + {"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2}, + {"label": "M3", "matrix": [3, 0], "x": 0, "y": 3}, + {"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75}, + {"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3}, + {"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3}, + {"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3}, + {"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3}, + {"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3}, + {"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3}, + {"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3}, + {"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3}, + {"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3}, + {"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3}, + {"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3}, + {"label": "NUHS", "matrix": [9, 6], "x": 15.25, "y": 3}, + {"label": "Enter", "matrix": [9, 7], "x": 16.25, "y": 2, "w": 1.25, "h": 2}, + {"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3}, + {"label": "M4", "matrix": [4, 0], "x": 0, "y": 4}, + {"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.25}, + {"label": "NUBS", "matrix": [4, 2], "x": 2.75, "y": 4}, + {"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4}, + {"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4}, + {"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4}, + {"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4}, + {"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4}, + {"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4}, + {"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4}, + {"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4}, + {"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4}, + {"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4}, + {"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75}, + {"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4}, + {"label": "End", "matrix": [10, 8], "x": 18, "y": 4}, + {"label": "M5", "matrix": [5, 0], "x": 0, "y": 5}, + {"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25}, + {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, + {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, + {"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25}, + {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, + {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, + {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, + {"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5}, + {"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5}, + {"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5}, + {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} + ] + } + } +} From dc202479014126348e296aae3041fa843142b30b Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sun, 6 Jul 2025 09:51:57 -0400 Subject: [PATCH 34/53] lint: remove via keymap --- .../haverworks/theseus75/keymaps/via/config.h | 22 -- .../haverworks/theseus75/keymaps/via/keymap.c | 217 ------------------ .../haverworks/theseus75/keymaps/via/rules.mk | 2 - 3 files changed, 241 deletions(-) delete mode 100644 keyboards/haverworks/theseus75/keymaps/via/config.h delete mode 100644 keyboards/haverworks/theseus75/keymaps/via/keymap.c delete mode 100644 keyboards/haverworks/theseus75/keymaps/via/rules.mk diff --git a/keyboards/haverworks/theseus75/keymaps/via/config.h b/keyboards/haverworks/theseus75/keymaps/via/config.h deleted file mode 100644 index 8e373d2aab2..00000000000 --- a/keyboards/haverworks/theseus75/keymaps/via/config.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2023 Moritz Plattner - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#define EECONFIG_USER_DATA_SIZE 4 -#define WEAR_LEVELING_LOGICAL_SIZE 4096 -#define WEAR_LEVELING_BACKING_SIZE WEAR_LEVELING_LOGICAL_SIZE*2 -#define SPLIT_TRANSACTION_IDS_USER RPC_ID_INDICATOR_CONFIG diff --git a/keyboards/haverworks/theseus75/keymaps/via/keymap.c b/keyboards/haverworks/theseus75/keymaps/via/keymap.c deleted file mode 100644 index 9fb106afead..00000000000 --- a/keyboards/haverworks/theseus75/keymaps/via/keymap.c +++ /dev/null @@ -1,217 +0,0 @@ -/* Copyright 2023 Moritz Plattner, Alex Havermale - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H -#include "transactions.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [0] = LAYOUT_75xt_all( - RGB_TOG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, - KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, - KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, - KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, - KC_F16, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT - ), - [1] = LAYOUT_75xt_all( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS - ) -}; - -#ifdef ENCODER_MAP_ENABLE -const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [1] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, -}; -#endif - -/** - * A struct containing config data for a single LED indicator. - */ -typedef struct _indicator_t { - uint8_t h; - uint8_t s; - uint8_t v; - bool enabled; -} indicator_t; - -/** - * A struct containing config data for all LED indicators. - */ -typedef struct _indicator_config_t { - indicator_t caps; -} indicator_config_t; - -indicator_config_t indicator_config; - -void indicator_config_write_to_eeprom(void) { -# ifdef EECONFIG_USER_DATA_SIZE - eeconfig_update_user_datablock(&indicator_config); - dprintf("Indicator config written to EEPROM\n"); - // #else // if using uint32 union + struct instead of datablock: - // eeconfig_update_user(indicator_config.raw); -# endif -} - -void indicator_config_read_from_eeprom(void) { -# ifdef EECONFIG_USER_DATA_SIZE - eeconfig_read_user_datablock(&indicator_config); - dprintf("Indicator config read from EEPROM\n"); - // #else // if using uint32 union + struct instead of datablock: - // indicator_config.raw = eeconfig_read_user(); -# endif -} - -void indicator_config_slave_handler(uint8_t m2s_size, const void* m2s_buffer, uint8_t s2m_size, void* s2m_buffer) { - if (m2s_size == sizeof(indicator_config_t)) { - memcpy(&indicator_config, m2s_buffer, sizeof(indicator_config_t)); - indicator_config_write_to_eeprom(); - } else { - dprintf("Unexpected response in slave handler\n"); // TODO: add split debug logging - } -} - -void eeconfig_init_user(void) { - indicator_config.caps.h = 0; - indicator_config.caps.s = 0; - indicator_config.caps.v = INDICATOR_MAX_BRIGHTNESS; - indicator_config.caps.enabled = true; - indicator_config_write_to_eeprom(); -} - -void keyboard_post_init_user(void) { - transaction_register_rpc(RPC_ID_INDICATOR_CONFIG, indicator_config_slave_handler); - indicator_config_read_from_eeprom(); -} - -#ifdef RGB_MATRIX_ENABLE -bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { - if (host_keyboard_led_state().caps_lock && indicator_config.caps.enabled) { - HSV hsv = {indicator_config.caps.h, indicator_config.caps.s, indicator_config.caps.v}; - RGB rgb = hsv_to_rgb(hsv); - RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, rgb.r, rgb.g, rgb.b); - } else { - RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0); - } - return false; -} -#endif - -enum indicator_value { - id_caps_indicator_enabled = 1, - id_caps_indicator_brightness = 2, - id_caps_indicator_color = 3 -}; - -void indicator_config_set_value(uint8_t *data) { - // data = [ value_id, value_data ] - uint8_t *value_id = &(data[0]); - uint8_t *value_data = &(data[1]); - - switch (*value_id) { - case id_caps_indicator_enabled: - { - indicator_config.caps.enabled = value_data[0]; - break; - } - case id_caps_indicator_brightness: - { - indicator_config.caps.v = value_data[0]; - break; - } - case id_caps_indicator_color: - { - indicator_config.caps.h = value_data[0]; - indicator_config.caps.s = value_data[1]; - break; - } - } -} - -void indicator_config_get_value(uint8_t *data) { - // data = [ value_id, value_data ] - uint8_t *value_id = &(data[0]); - uint8_t *value_data = &(data[1]); - - switch (*value_id) { - case id_caps_indicator_enabled: - { - value_data[0] = indicator_config.caps.enabled; - break; - } - case id_caps_indicator_brightness: - { - value_data[0] = indicator_config.caps.v; - break; - } - case id_caps_indicator_color: - { - value_data[0] = indicator_config.caps.h; - value_data[1] = indicator_config.caps.s; - break; - } - } -} - -void indicator_config_save(void) { - indicator_config_write_to_eeprom(); - // Send data to slave so that it can be written to its EEPROM as well: - transaction_rpc_send(RPC_ID_INDICATOR_CONFIG, sizeof(indicator_config_t), &indicator_config); -} - -void via_custom_value_command_kb(uint8_t *data, uint8_t length) { - // data = [ command_id, channel_id, value_id, value_data ] - uint8_t *command_id = &(data[0]); - uint8_t *channel_id = &(data[1]); - uint8_t *value_id_and_data = &(data[2]); - - if ( *channel_id == id_custom_channel ) { - switch ( *command_id ) - { - case id_custom_set_value: - { - indicator_config_set_value(value_id_and_data); - break; - } - case id_custom_get_value: - { - indicator_config_get_value(value_id_and_data); - break; - } - case id_custom_save: - { - indicator_config_save(); - break; - } - default: - { - // Unhandled message: - *command_id = id_unhandled; - break; - } - } - return; - } - - // Return the unhandled state: - *command_id = id_unhandled; -} diff --git a/keyboards/haverworks/theseus75/keymaps/via/rules.mk b/keyboards/haverworks/theseus75/keymaps/via/rules.mk deleted file mode 100644 index 6ccd6d91943..00000000000 --- a/keyboards/haverworks/theseus75/keymaps/via/rules.mk +++ /dev/null @@ -1,2 +0,0 @@ -ENCODER_MAP_ENABLE = yes -VIA_ENABLE = yes \ No newline at end of file From ccc4f6e786c4c9c425c1a216b97848bee50b06ca Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sun, 6 Jul 2025 11:34:02 -0400 Subject: [PATCH 35/53] docs: update README to use latest template See https://github.com/qmk/qmk_firmware/blob/master/data/templates/keyboard/readme.md --- keyboards/haverworks/theseus75/keyboard.json | 2 +- keyboards/haverworks/theseus75/readme.md | 33 ++++++++++++-------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/keyboards/haverworks/theseus75/keyboard.json b/keyboards/haverworks/theseus75/keyboard.json index 880b8d15e8c..9b9a805f012 100644 --- a/keyboards/haverworks/theseus75/keyboard.json +++ b/keyboards/haverworks/theseus75/keyboard.json @@ -2,7 +2,7 @@ "keyboard_name": "Theseus75", "maintainer": "ebastler", "manufacturer": "Haverworks", - "url": "https://haver.works/", + "url": "https://haver.works/theseus75", "bootloader": "stm32-dfu", "bootmagic": { "matrix": [0, 1] diff --git a/keyboards/haverworks/theseus75/readme.md b/keyboards/haverworks/theseus75/readme.md index 21412ca0ef9..7119f61a643 100644 --- a/keyboards/haverworks/theseus75/readme.md +++ b/keyboards/haverworks/theseus75/readme.md @@ -1,24 +1,31 @@ # Haverworks Theseus75 -![Theseus75 HS PCB v1](https://imgur.com/N81LsCO.png) -The Theseus75 is a 75% row-stagger split keyboard with a macro column + encoder on both sides. It features one USB-C dual role port per side, and USB hubs, that allow the unused port to turn into a USB-C 2.0 High-Speed host port to connect flash drives, cell phones, and similar devices. Up to 5V 1.5A current is offered, depending on negotiations with the host. +![Theseus75 v1 PCB](https://imgur.com/N81LsCO.png) -* Keyboard Maintainers: [ebastler](https://github.com/ebastler), [haversnail](https://github.com/haversnail) -* Hardware Supported: Haverworks Theseus75 v1 PCBs (Hot-swap and solder) +The Theseus75 is a 75% row-staggered split keyboard with a macro column and rotary encoders on both sides. Each half features a dual-role USB-C port and integrated USB hub, allowing the unused port to act as a USB-C 2.0 High-Speed host for connecting a numpad, mouse, flash drive, security key, mobile phone, or similar device. + +> [!NOTE] +> Up to 5V at 1.5A can be supplied, depending on negotiations with the host. + +* Keyboard Maintainers: [Moritz Plattner](https://github.com/ebastler), [Alex Havermale](https://github.com/haversnail) +* Hardware Supported: Haverworks Theseus75 v1 PCBs (hot-swap and solder) * Hardware Availability: [Group buy](https://haver.works/theseus75) -How to enter the Bootloader: -* Follow instructions on the PCB (Hold Boot/Flash button for approx. 1s) -* Bootmagic reset, left half: Hold the first key to the right of the encoder while plugging the board in -* Bootmagic reset, right half: Hold the first key to the left of the encoder while plugging the board in - Make example for this keyboard (after setting up your build environment): - qmk compile haverworks/theseus75:default + make haverworks/theseus75:default -Flash example for this keyboard (after setting up your build environment): - - qmk flash haverworks/theseus75:default +Flashing example for this keyboard: + make haverworks/theseus75:default:flash See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in two ways: + +* **Physical reset button**: Hold the Reset/Flash button on the back of the PCB for approximately one second (instructions are also included on the PCB) +* **Bootmagic reset**: + * **Left half**: Hold down the first key to the right of the encoder (Esc by default) and plug in the keyboard + * **Right half**: Hold down the first key to the left of the encoder (Print Screen by default) and plug in the keyboard From 21009d48437364c5c1e28c7fa80feae7757615f9 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sun, 6 Jul 2025 16:50:21 -0400 Subject: [PATCH 36/53] style: format keyboard.json using `qmk format-json` --- keyboards/haverworks/theseus75/keyboard.json | 70 ++++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/keyboards/haverworks/theseus75/keyboard.json b/keyboards/haverworks/theseus75/keyboard.json index 9b9a805f012..fb5f19b1562 100644 --- a/keyboards/haverworks/theseus75/keyboard.json +++ b/keyboards/haverworks/theseus75/keyboard.json @@ -1,8 +1,7 @@ { + "manufacturer": "Haverworks", "keyboard_name": "Theseus75", "maintainer": "ebastler", - "manufacturer": "Haverworks", - "url": "https://haver.works/theseus75", "bootloader": "stm32-dfu", "bootmagic": { "matrix": [0, 1] @@ -29,6 +28,38 @@ }, "processor": "STM32G431", "rgb_matrix": { + "animations": { + "alphas_mods": true, + "band_pinwheel_sat": true, + "band_pinwheel_val": true, + "band_sat": true, + "band_spiral_sat": true, + "band_spiral_val": true, + "band_val": true, + "breathing": true, + "cycle_all": true, + "cycle_left_right": true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "cycle_up_down": true, + "dual_beacon": true, + "gradient_left_right": true, + "gradient_up_down": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": true, + "jellybean_raindrops": true, + "pixel_flow": true, + "pixel_fractal": true, + "pixel_rain": true, + "rainbow_beacon": true, + "rainbow_moving_chevron": true, + "rainbow_pinwheels": true, + "raindrops": true, + "solid_color": true + }, "driver": "ws2812", "layout": [ {"matrix": [3, 1], "x": 32, "y": 34, "flags": 8}, @@ -84,39 +115,7 @@ {"x": 224, "y": 1, "flags": 2}, {"x": 224, "y": 8, "flags": 2}, {"x": 224, "y": 19, "flags": 2} - ], - "animations": { - "solid_color": true, - "alphas_mods": true, - "gradient_up_down": true, - "gradient_left_right": true, - "breathing": true, - "band_sat": true, - "band_val": true, - "band_pinwheel_sat": true, - "band_pinwheel_val": true, - "band_spiral_sat": true, - "band_spiral_val": true, - "cycle_all": true, - "cycle_left_right": true, - "cycle_up_down": true, - "cycle_out_in": true, - "cycle_out_in_dual": true, - "rainbow_moving_chevron": true, - "cycle_pinwheel": true, - "cycle_spiral": true, - "dual_beacon": true, - "rainbow_beacon": true, - "rainbow_pinwheels": true, - "raindrops": true, - "jellybean_raindrops": true, - "hue_breathing": true, - "hue_pendulum": true, - "hue_wave": true, - "pixel_fractal": true, - "pixel_flow": true, - "pixel_rain": true - } + ] }, "split": { "bootmagic": { @@ -141,6 +140,7 @@ "watchdog": true } }, + "url": "https://haver.works/theseus75", "usb": { "device_version": "1.0.0", "pid": "0x0001", From 92c37960d75637cdc83add2b6f5579aa4cda82ac Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sun, 6 Jul 2025 17:25:39 -0400 Subject: [PATCH 37/53] style: clean up formatting in header files --- keyboards/haverworks/theseus75/config.h | 57 ++++++++++++------------ keyboards/haverworks/theseus75/hal_lld.h | 4 +- keyboards/haverworks/theseus75/halconf.h | 4 +- keyboards/haverworks/theseus75/mcuconf.h | 4 +- 4 files changed, 35 insertions(+), 34 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index a096bf5a253..40d7039ba5e 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -16,51 +16,52 @@ #pragma once -#define DISABLE_BUS_POWER_MODE TRUE - /* Defines for the split keyboard setup */ -#define SERIAL_USART_DRIVER SD3 // USART 3 -#define SOFT_SERIAL_PIN B10 // The GPIO pin that is used split communication. -#define USART3_REMAP // Remap USART TX and RX pins for half duplex -#define SERIAL_USART_TX_PAL_MODE 7 // Pin alternate function 7 = USART3_TX for PB10 +#define SERIAL_USART_DRIVER SD3 // USART 3 +#define SOFT_SERIAL_PIN B10 // The GPIO pin used for split communication +#define USART3_REMAP // Remap USART TX and RX pins for half duplex +#define SERIAL_USART_TX_PAL_MODE 7 // Pin alternate function 7 = USART3_TX for PB10 -#if defined(SOFT_SERIAL_PIN) +#ifdef SOFT_SERIAL_PIN # define SERIAL_USART_TX_PIN SOFT_SERIAL_PIN #endif -#define SELECT_SOFT_SERIAL_SPEED 0 // Experimental, will make connection faster but may need testing. +#define SELECT_SOFT_SERIAL_SPEED 0 // Experimental, will make connection faster but may need testing. +/* Defines for required pins */ #define ID_PIN A13 #define USBSW_PIN A14 // Switches the hub input/output with the MUXes -#define PSW_PIN A15 // Turns the power routing to the usb-c port on/off +#define PSW_PIN A15 // Turns the power routing to the USB-C port on/off #define SPLIT_HAND_PIN B9 // The MCUs probe a pin to determine if they are left or right side. high = left, low = right #define BUS_B_PIN C13 // Tells the hub to be bus powered or self powered (which in turn tells the clients connected to it to be 100 mA or 500 mA) #define USB_VBUS_PIN C15 // Only the master side will have VBUS present at power-up (used to determine master/slave) #define USBPD_1_PIN F0 #define USBPD_2_PIN F1 +/* Additional defines for managing power and state scross split */ +#define DISABLE_BUS_POWER_MODE TRUE +#define KB_STATE_SYNC_INTERVAL 500 +#define USBPD_ALLOWANCE_CHECK_INTERVAL 100 #define SPLIT_TRANSACTION_IDS_KB RPC_ID_KB_STATE - #define SPLIT_LAYER_STATE_ENABLE -#define SPLIT_LED_STATE_ENABLE // Required to sync LED indicator state info to the slave half (see https://docs.qmk.fm/#/feature_led_indicators) +#define SPLIT_LED_STATE_ENABLE // Required to sync LED indicator state info to the slave half (see https://docs.qmk.fm/#/feature_led_indicators /* Defines for the RGB matrix */ #ifdef RGB_MATRIX_ENABLE -# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 128 -# define INDICATOR_MAX_BRIGHTNESS 255 -# define CAPS_LOCK_LED_INDEX 0 // LED1 on PCB -# define RGB_MATRIX_LED_COUNT 53 -# define RGB_MATRIX_SPLIT { 27, 26 } -# define RGBLIGHT_SLEEP -# define NOP_FUDGE 0.4 // Chip/pin specific configs from this lone onward -# define WS2812_EXTERNAL_PULLUP -# define WS2812_PWM_DRIVER PWMD3 -# define WS2812_PWM_CHANNEL 4 -# define WS2812_PWM_PAL_MODE 10 -# define WS2812_DMA_STREAM STM32_DMA1_STREAM2 -# define WS2812_DMA_CHANNEL 2 -# define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM3_UP +# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 128 +# define INDICATOR_MAX_BRIGHTNESS 255 +# define CAPS_LOCK_LED_INDEX 0 // LED1 on PCB +# define RGB_MATRIX_LED_COUNT 53 +# define RGB_MATRIX_SPLIT {27, 26} +# define RGBLIGHT_SLEEP +# +# /* Chip/pin-specific configs */ +# define NOP_FUDGE 0.4 +# define WS2812_EXTERNAL_PULLUP +# define WS2812_PWM_DRIVER PWMD3 +# define WS2812_PWM_CHANNEL 4 +# define WS2812_PWM_PAL_MODE 10 +# define WS2812_DMA_STREAM STM32_DMA1_STREAM2 +# define WS2812_DMA_CHANNEL 2 +# define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM3_UP #endif - -#define USBPD_ALLOWANCE_CHECK_INTERVAL 100 -#define KB_STATE_SYNC_INTERVAL 500 diff --git a/keyboards/haverworks/theseus75/hal_lld.h b/keyboards/haverworks/theseus75/hal_lld.h index f15bf45b409..4a77d2c9e2e 100644 --- a/keyboards/haverworks/theseus75/hal_lld.h +++ b/keyboards/haverworks/theseus75/hal_lld.h @@ -13,9 +13,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + #pragma once /* Load local stm32_registry after loading the ChibiOS one to patch ChibiOS bugs */ #include -#include_next "hal_lld.h" \ No newline at end of file +#include_next "hal_lld.h" diff --git a/keyboards/haverworks/theseus75/halconf.h b/keyboards/haverworks/theseus75/halconf.h index ea74b760e3a..948c4ce2402 100644 --- a/keyboards/haverworks/theseus75/halconf.h +++ b/keyboards/haverworks/theseus75/halconf.h @@ -13,11 +13,11 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + #pragma once #define HAL_USE_SERIAL TRUE #define HAL_USE_PWM TRUE -#include_next \ No newline at end of file +#include_next diff --git a/keyboards/haverworks/theseus75/mcuconf.h b/keyboards/haverworks/theseus75/mcuconf.h index 01cf839d71e..52fe13ec49e 100644 --- a/keyboards/haverworks/theseus75/mcuconf.h +++ b/keyboards/haverworks/theseus75/mcuconf.h @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + #pragma once #include_next @@ -24,4 +24,4 @@ /* enable TIM3, used for Underglow PWM driver */ #undef STM32_PWM_USE_TIM3 -#define STM32_PWM_USE_TIM3 TRUE \ No newline at end of file +#define STM32_PWM_USE_TIM3 TRUE From a8b4d75b27ecda4d83eef08cdbb70cbd5c30d21f Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sun, 6 Jul 2025 17:52:26 -0400 Subject: [PATCH 38/53] style: shorten comments in config.h --- keyboards/haverworks/theseus75/config.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 40d7039ba5e..600fb2c954b 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -33,7 +33,7 @@ #define USBSW_PIN A14 // Switches the hub input/output with the MUXes #define PSW_PIN A15 // Turns the power routing to the USB-C port on/off #define SPLIT_HAND_PIN B9 // The MCUs probe a pin to determine if they are left or right side. high = left, low = right -#define BUS_B_PIN C13 // Tells the hub to be bus powered or self powered (which in turn tells the clients connected to it to be 100 mA or 500 mA) +#define BUS_B_PIN C13 // Tells the hub to be bus-powered or self-powered (which in turn tells the clients to use 100 mA or 500 mA) #define USB_VBUS_PIN C15 // Only the master side will have VBUS present at power-up (used to determine master/slave) #define USBPD_1_PIN F0 #define USBPD_2_PIN F1 @@ -44,7 +44,7 @@ #define USBPD_ALLOWANCE_CHECK_INTERVAL 100 #define SPLIT_TRANSACTION_IDS_KB RPC_ID_KB_STATE #define SPLIT_LAYER_STATE_ENABLE -#define SPLIT_LED_STATE_ENABLE // Required to sync LED indicator state info to the slave half (see https://docs.qmk.fm/#/feature_led_indicators +#define SPLIT_LED_STATE_ENABLE /* Defines for the RGB matrix */ #ifdef RGB_MATRIX_ENABLE @@ -54,9 +54,7 @@ # define RGB_MATRIX_LED_COUNT 53 # define RGB_MATRIX_SPLIT {27, 26} # define RGBLIGHT_SLEEP -# -# /* Chip/pin-specific configs */ -# define NOP_FUDGE 0.4 +# define NOP_FUDGE 0.4 /* Chip/pin-specific configs from this line onward */ # define WS2812_EXTERNAL_PULLUP # define WS2812_PWM_DRIVER PWMD3 # define WS2812_PWM_CHANNEL 4 From c123e5664fb98379cf55e8227a223bd739fb94fe Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sun, 6 Jul 2025 18:41:08 -0400 Subject: [PATCH 39/53] feat: remove hotswap layout in favor of ANSI or ISO --- keyboards/haverworks/theseus75/keyboard.json | 97 ------------------- .../theseus75/keymaps/hotswap/keymap.c | 55 ----------- .../theseus75/keymaps/hotswap/rules.mk | 1 - 3 files changed, 153 deletions(-) delete mode 100644 keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c delete mode 100644 keyboards/haverworks/theseus75/keymaps/hotswap/rules.mk diff --git a/keyboards/haverworks/theseus75/keyboard.json b/keyboards/haverworks/theseus75/keyboard.json index fb5f19b1562..afd11ab83d7 100644 --- a/keyboards/haverworks/theseus75/keyboard.json +++ b/keyboards/haverworks/theseus75/keyboard.json @@ -344,103 +344,6 @@ {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} ] }, - "LAYOUT_75xt_hs_all": { - "layout": [ - {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, - {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, - {"label": "F1", "matrix": [0, 2], "x": 2.75, "y": 0}, - {"label": "F2", "matrix": [0, 3], "x": 3.75, "y": 0}, - {"label": "F3", "matrix": [0, 4], "x": 4.75, "y": 0}, - {"label": "F4", "matrix": [0, 5], "x": 5.75, "y": 0}, - {"label": "F5", "matrix": [0, 6], "x": 7, "y": 0}, - {"label": "F6", "matrix": [0, 7], "x": 8, "y": 0}, - {"label": "F7", "matrix": [6, 0], "x": 10, "y": 0}, - {"label": "F8", "matrix": [6, 1], "x": 11, "y": 0}, - {"label": "F9", "matrix": [6, 2], "x": 12.25, "y": 0}, - {"label": "F10", "matrix": [6, 3], "x": 13.25, "y": 0}, - {"label": "F11", "matrix": [6, 4], "x": 14.25, "y": 0}, - {"label": "F12", "matrix": [6, 5], "x": 15.25, "y": 0}, - {"label": "F13", "matrix": [6, 6], "x": 16.5, "y": 0}, - {"label": "RENC", "matrix": [6, 8], "x": 18, "y": 0}, - {"label": "M1", "matrix": [1, 0], "x": 0, "y": 1}, - {"label": "GRAV", "matrix": [1, 1], "x": 1.5, "y": 1}, - {"label": "1", "matrix": [1, 2], "x": 2.5, "y": 1}, - {"label": "2", "matrix": [1, 3], "x": 3.5, "y": 1}, - {"label": "3", "matrix": [1, 4], "x": 4.5, "y": 1}, - {"label": "4", "matrix": [1, 5], "x": 5.5, "y": 1}, - {"label": "5", "matrix": [1, 6], "x": 6.5, "y": 1}, - {"label": "6", "matrix": [1, 7], "x": 7.5, "y": 1}, - {"label": "7", "matrix": [7, 0], "x": 9.5, "y": 1}, - {"label": "8", "matrix": [7, 1], "x": 10.5, "y": 1}, - {"label": "9", "matrix": [7, 2], "x": 11.5, "y": 1}, - {"label": "0", "matrix": [7, 3], "x": 12.5, "y": 1}, - {"label": "-", "matrix": [7, 4], "x": 13.5, "y": 1}, - {"label": "=", "matrix": [7, 5], "x": 14.5, "y": 1}, - {"label": "Back", "matrix": [7, 6], "x": 15.5, "y": 1}, - {"label": "Del", "matrix": [7, 7], "x": 16.5, "y": 1}, - {"label": "Home", "matrix": [7, 8], "x": 18, "y": 1}, - {"label": "M2", "matrix": [2, 0], "x": 0, "y": 2}, - {"label": "Tab", "matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.5}, - {"label": "Q", "matrix": [2, 3], "x": 3, "y": 2}, - {"label": "W", "matrix": [2, 4], "x": 4, "y": 2}, - {"label": "E", "matrix": [2, 5], "x": 5, "y": 2}, - {"label": "R", "matrix": [2, 6], "x": 6, "y": 2}, - {"label": "T", "matrix": [2, 7], "x": 7, "y": 2}, - {"label": "Y", "matrix": [8, 0], "x": 9, "y": 2}, - {"label": "U", "matrix": [8, 1], "x": 10, "y": 2}, - {"label": "I", "matrix": [8, 2], "x": 11, "y": 2}, - {"label": "O", "matrix": [8, 3], "x": 12, "y": 2}, - {"label": "P", "matrix": [8, 4], "x": 13, "y": 2}, - {"label": "[", "matrix": [8, 5], "x": 14, "y": 2}, - {"label": "]", "matrix": [8, 6], "x": 15, "y": 2}, - {"label": "BSLS", "matrix": [8, 7], "x": 16, "y": 2, "w": 1.5}, - {"label": "PgUp", "matrix": [8, 8], "x": 18, "y": 2}, - {"label": "M3", "matrix": [3, 0], "x": 0, "y": 3}, - {"label": "Caps", "matrix": [3, 1], "x": 1.5, "y": 3, "w": 1.75}, - {"label": "A", "matrix": [3, 3], "x": 3.25, "y": 3}, - {"label": "S", "matrix": [3, 4], "x": 4.25, "y": 3}, - {"label": "D", "matrix": [3, 5], "x": 5.25, "y": 3}, - {"label": "F", "matrix": [3, 6], "x": 6.25, "y": 3}, - {"label": "G", "matrix": [3, 7], "x": 7.25, "y": 3}, - {"label": "H", "matrix": [9, 0], "x": 9.25, "y": 3}, - {"label": "J", "matrix": [9, 1], "x": 10.25, "y": 3}, - {"label": "K", "matrix": [9, 2], "x": 11.25, "y": 3}, - {"label": "L", "matrix": [9, 3], "x": 12.25, "y": 3}, - {"label": ";", "matrix": [9, 4], "x": 13.25, "y": 3}, - {"label": "'", "matrix": [9, 5], "x": 14.25, "y": 3}, - {"label": "Enter", "matrix": [9, 7], "x": 15.25, "y": 3, "w": 2.25}, - {"label": "PgDn", "matrix": [9, 8], "x": 18, "y": 3}, - {"label": "M4", "matrix": [4, 0], "x": 0, "y": 4}, - {"label": "Shift", "matrix": [4, 1], "x": 1.5, "y": 4, "w": 1.25}, - {"label": "NUBS", "matrix": [4, 2], "x": 2.75, "y": 4}, - {"label": "Z", "matrix": [4, 3], "x": 3.75, "y": 4}, - {"label": "X", "matrix": [4, 4], "x": 4.75, "y": 4}, - {"label": "C", "matrix": [4, 5], "x": 5.75, "y": 4}, - {"label": "V", "matrix": [4, 6], "x": 6.75, "y": 4}, - {"label": "B", "matrix": [4, 7], "x": 7.75, "y": 4}, - {"label": "N", "matrix": [10, 0], "x": 9.75, "y": 4}, - {"label": "M", "matrix": [10, 1], "x": 10.75, "y": 4}, - {"label": ",", "matrix": [10, 2], "x": 11.75, "y": 4}, - {"label": ".", "matrix": [10, 3], "x": 12.75, "y": 4}, - {"label": "/", "matrix": [10, 4], "x": 13.75, "y": 4}, - {"label": "Shift", "matrix": [10, 6], "x": 14.75, "y": 4, "w": 1.75}, - {"label": "Up", "matrix": [10, 7], "x": 16.75, "y": 4}, - {"label": "End", "matrix": [10, 8], "x": 18, "y": 4}, - {"label": "M5", "matrix": [5, 0], "x": 0, "y": 5}, - {"label": "Ctrl", "matrix": [5, 1], "x": 1.5, "y": 5, "w": 1.25}, - {"label": "Gui", "matrix": [5, 2], "x": 2.75, "y": 5, "w": 1.25}, - {"label": "Alt", "matrix": [5, 3], "x": 4, "y": 5, "w": 1.25}, - {"label": "Space", "matrix": [5, 4], "x": 5.25, "y": 5, "w": 2.25}, - {"label": "FN", "matrix": [5, 7], "x": 7.5, "y": 5, "w": 1.25}, - {"label": "Space", "matrix": [11, 1], "x": 9.75, "y": 5, "w": 2.75}, - {"label": "Alt", "matrix": [11, 3], "x": 12.5, "y": 5}, - {"label": "Gui", "matrix": [11, 4], "x": 13.5, "y": 5}, - {"label": "Ctrl", "matrix": [11, 5], "x": 14.5, "y": 5}, - {"label": "Left", "matrix": [11, 6], "x": 15.75, "y": 5}, - {"label": "Down", "matrix": [11, 7], "x": 16.75, "y": 5}, - {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} - ] - }, "LAYOUT_75xt_iso": { "layout": [ {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, diff --git a/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c b/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c deleted file mode 100644 index cbba6b3349d..00000000000 --- a/keyboards/haverworks/theseus75/keymaps/hotswap/keymap.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright 2023 Moritz Plattner - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include QMK_KEYBOARD_H - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [0] = LAYOUT_75xt_hs_all( - RGB_TOG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, - KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, - KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, - KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, - KC_F16, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT - ), - [1] = LAYOUT_75xt_hs_all( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS - ) -}; - -#ifdef ENCODER_MAP_ENABLE -const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [1] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, -}; -#endif - -#ifdef RGB_MATRIX_ENABLE -bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { - if (host_keyboard_led_state().caps_lock) { - RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); - } else { - RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0); - } - return false; -} -#endif diff --git a/keyboards/haverworks/theseus75/keymaps/hotswap/rules.mk b/keyboards/haverworks/theseus75/keymaps/hotswap/rules.mk deleted file mode 100644 index ee325681483..00000000000 --- a/keyboards/haverworks/theseus75/keymaps/hotswap/rules.mk +++ /dev/null @@ -1 +0,0 @@ -ENCODER_MAP_ENABLE = yes From 6aadb78e8f98c49e166842bc59b94d5303e3b7c4 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sun, 6 Jul 2025 18:52:06 -0400 Subject: [PATCH 40/53] nit: remove completed TODO --- keyboards/haverworks/theseus75/theseus75.c | 1 - 1 file changed, 1 deletion(-) diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 1390168077f..84e61de1a52 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -111,7 +111,6 @@ void keyboard_post_init_kb(void) { keyboard_post_init_user(); } -// Todo: Insert timer based delay to avoid spamming pin reads/writes, only set on pin change void housekeeping_task_kb(void) { // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions) housekeeping_task_user(); From 7326185e54d8a233cff6e6094746d6115db911ad Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sun, 6 Jul 2025 22:38:08 -0400 Subject: [PATCH 41/53] refactor: address PR feedback, move configs to `keyboard.json` --- keyboards/haverworks/theseus75/config.h | 17 ++------------- keyboards/haverworks/theseus75/keyboard.json | 21 +++++++++++++++++-- .../theseus75/keymaps/ansi/keymap.c | 4 ++-- .../theseus75/keymaps/default/keymap.c | 4 ++-- .../haverworks/theseus75/keymaps/iso/keymap.c | 4 ++-- keyboards/haverworks/theseus75/rules.mk | 3 --- keyboards/haverworks/theseus75/theseus75.c | 9 -------- 7 files changed, 27 insertions(+), 35 deletions(-) delete mode 100644 keyboards/haverworks/theseus75/rules.mk diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 600fb2c954b..299bb221b16 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -16,18 +16,11 @@ #pragma once -/* Defines for the split keyboard setup */ +/* Defines for configuring the serial driver for split comms (see https://docs.qmk.fm/drivers/serial) */ #define SERIAL_USART_DRIVER SD3 // USART 3 -#define SOFT_SERIAL_PIN B10 // The GPIO pin used for split communication #define USART3_REMAP // Remap USART TX and RX pins for half duplex #define SERIAL_USART_TX_PAL_MODE 7 // Pin alternate function 7 = USART3_TX for PB10 -#ifdef SOFT_SERIAL_PIN -# define SERIAL_USART_TX_PIN SOFT_SERIAL_PIN -#endif - -#define SELECT_SOFT_SERIAL_SPEED 0 // Experimental, will make connection faster but may need testing. - /* Defines for required pins */ #define ID_PIN A13 #define USBSW_PIN A14 // Switches the hub input/output with the MUXes @@ -43,18 +36,12 @@ #define KB_STATE_SYNC_INTERVAL 500 #define USBPD_ALLOWANCE_CHECK_INTERVAL 100 #define SPLIT_TRANSACTION_IDS_KB RPC_ID_KB_STATE -#define SPLIT_LAYER_STATE_ENABLE -#define SPLIT_LED_STATE_ENABLE /* Defines for the RGB matrix */ #ifdef RGB_MATRIX_ENABLE -# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 128 # define INDICATOR_MAX_BRIGHTNESS 255 # define CAPS_LOCK_LED_INDEX 0 // LED1 on PCB -# define RGB_MATRIX_LED_COUNT 53 -# define RGB_MATRIX_SPLIT {27, 26} -# define RGBLIGHT_SLEEP -# define NOP_FUDGE 0.4 /* Chip/pin-specific configs from this line onward */ +# define WS2812_BITBANG_NOP_FUDGE 0.4 # define WS2812_EXTERNAL_PULLUP # define WS2812_PWM_DRIVER PWMD3 # define WS2812_PWM_CHANNEL 4 diff --git a/keyboards/haverworks/theseus75/keyboard.json b/keyboards/haverworks/theseus75/keyboard.json index afd11ab83d7..64cbb13b4a5 100644 --- a/keyboards/haverworks/theseus75/keyboard.json +++ b/keyboards/haverworks/theseus75/keyboard.json @@ -7,6 +7,12 @@ "matrix": [0, 1] }, "diode_direction": "COL2ROW", + "eeprom": { + "driver": "wear_leveling", + "wear_leveling": { + "driver": "embedded_flash" + } + }, "encoder": { "rotary": [ {"pin_a": "A8", "pin_b": "C6", "resolution": 2} @@ -115,7 +121,9 @@ {"x": 224, "y": 1, "flags": 2}, {"x": 224, "y": 8, "flags": 2}, {"x": 224, "y": 19, "flags": 2} - ] + ], + "max_brightness": 128, + "split_count": [27, 26] }, "split": { "bootmagic": { @@ -135,8 +143,17 @@ "rows": ["B3", "C10", "C11", "A1", "A0", "B6"] } }, + "serial": { + "driver": "usart", + "pin": "B10" + }, + "soft_serial_speed": 0, "transport": { - "sync_matrix_state": true, + "sync": { + "indicators": true, + "layer_state": true, + "matrix_state": true + }, "watchdog": true } }, diff --git a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c index 32c4f16d32d..acef9721dc0 100644 --- a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c @@ -38,8 +38,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [1] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [0] = { ENCODER_CCW_CW(RM_VALD, RM_VALU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(RM_PREV, RM_NEXT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; #endif diff --git a/keyboards/haverworks/theseus75/keymaps/default/keymap.c b/keyboards/haverworks/theseus75/keymaps/default/keymap.c index 4bf0eb850f9..92b8064a026 100644 --- a/keyboards/haverworks/theseus75/keymaps/default/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/default/keymap.c @@ -38,8 +38,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [1] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [0] = { ENCODER_CCW_CW(RM_VALD, RM_VALU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(RM_PREV, RM_NEXT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; #endif diff --git a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c index a7101b21db4..72a1eeb3513 100644 --- a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c @@ -38,8 +38,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [1] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, + [0] = { ENCODER_CCW_CW(RM_VALD, RM_VALU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(RM_PREV, RM_NEXT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; #endif diff --git a/keyboards/haverworks/theseus75/rules.mk b/keyboards/haverworks/theseus75/rules.mk deleted file mode 100644 index 5c45a24e45b..00000000000 --- a/keyboards/haverworks/theseus75/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -SERIAL_DRIVER = usart -EEPROM_DRIVER = wear_leveling -WEAR_LEVELING_DRIVER = embedded_flash \ No newline at end of file diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 84e61de1a52..570b08c8c97 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -50,12 +50,6 @@ void kb_state_slave_handler(uint8_t m2s_size, const void* m2s_buffer, uint8_t s2 } void keyboard_pre_init_kb(void) { - // Customise these values to desired behaviour: - // debug_enable = true; - // debug_matrix = true; - // debug_keyboard = true; - // debug_mouse = true; - // Disable the PD peripheral in pre-init because its pins are being used in the matrix: PWR->CR3 |= PWR_CR3_UCPD_DBDIS; // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions) @@ -112,9 +106,6 @@ void keyboard_post_init_kb(void) { } void housekeeping_task_kb(void) { - // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions) - housekeeping_task_user(); - // Update any shared kb state to send to slave: static uint32_t last_usbpd_allowance_check_time = 0; if (timer_elapsed32(last_usbpd_allowance_check_time) > USBPD_ALLOWANCE_CHECK_INTERVAL) { From 3ebc277877bdd6cab0e3f1aaa2578225e04cd2d8 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sun, 6 Jul 2025 22:49:05 -0400 Subject: [PATCH 42/53] nit: disable and remove `command` and `console` features --- keyboards/haverworks/theseus75/keyboard.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/keyboards/haverworks/theseus75/keyboard.json b/keyboards/haverworks/theseus75/keyboard.json index 64cbb13b4a5..cc211d46c9f 100644 --- a/keyboards/haverworks/theseus75/keyboard.json +++ b/keyboards/haverworks/theseus75/keyboard.json @@ -20,8 +20,6 @@ }, "features": { "bootmagic": true, - "command": false, - "console": true, "encoder": true, "extrakey": true, "mousekey": true, From fae9e943f4519c16e61e486d0093f387ce7e762c Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sun, 6 Jul 2025 23:25:25 -0400 Subject: [PATCH 43/53] feat: enable sleep for RGB matrix --- keyboards/haverworks/theseus75/keyboard.json | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/haverworks/theseus75/keyboard.json b/keyboards/haverworks/theseus75/keyboard.json index cc211d46c9f..a973fb0de1d 100644 --- a/keyboards/haverworks/theseus75/keyboard.json +++ b/keyboards/haverworks/theseus75/keyboard.json @@ -121,6 +121,7 @@ {"x": 224, "y": 19, "flags": 2} ], "max_brightness": 128, + "sleep": true, "split_count": [27, 26] }, "split": { From e2b404128ae4a664e9deb65272d57b922a009a12 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Mon, 7 Jul 2025 13:34:51 -0400 Subject: [PATCH 44/53] refactor: address PR feedback * replace `rgb_matrix_indicators_advanced_user` with regular `_user` function, use `rgb_matrix_set_color` to avoid dependency on `led_min`/`_max` args * remove `stm32_registry` and `hal_lld` header files in favor of patch from #23002 * remove unused WS2812 bitbang config * remove redundant default configs from `keyboard.json` --- keyboards/haverworks/theseus75/config.h | 1 - keyboards/haverworks/theseus75/hal_lld.h | 21 --------------- keyboards/haverworks/theseus75/keyboard.json | 9 +------ .../theseus75/keymaps/ansi/keymap.c | 6 ++--- .../theseus75/keymaps/default/keymap.c | 6 ++--- .../haverworks/theseus75/keymaps/iso/keymap.c | 6 ++--- .../haverworks/theseus75/stm32_registry.h | 26 ------------------- 7 files changed, 10 insertions(+), 65 deletions(-) delete mode 100644 keyboards/haverworks/theseus75/hal_lld.h delete mode 100644 keyboards/haverworks/theseus75/stm32_registry.h diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 299bb221b16..92deff5bbfe 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -41,7 +41,6 @@ #ifdef RGB_MATRIX_ENABLE # define INDICATOR_MAX_BRIGHTNESS 255 # define CAPS_LOCK_LED_INDEX 0 // LED1 on PCB -# define WS2812_BITBANG_NOP_FUDGE 0.4 # define WS2812_EXTERNAL_PULLUP # define WS2812_PWM_DRIVER PWMD3 # define WS2812_PWM_CHANNEL 4 diff --git a/keyboards/haverworks/theseus75/hal_lld.h b/keyboards/haverworks/theseus75/hal_lld.h deleted file mode 100644 index 4a77d2c9e2e..00000000000 --- a/keyboards/haverworks/theseus75/hal_lld.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright 2023 Moritz Plattner - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -/* Load local stm32_registry after loading the ChibiOS one to patch ChibiOS bugs */ -#include -#include_next "hal_lld.h" diff --git a/keyboards/haverworks/theseus75/keyboard.json b/keyboards/haverworks/theseus75/keyboard.json index a973fb0de1d..571f112a5d7 100644 --- a/keyboards/haverworks/theseus75/keyboard.json +++ b/keyboards/haverworks/theseus75/keyboard.json @@ -7,12 +7,6 @@ "matrix": [0, 1] }, "diode_direction": "COL2ROW", - "eeprom": { - "driver": "wear_leveling", - "wear_leveling": { - "driver": "embedded_flash" - } - }, "encoder": { "rotary": [ {"pin_a": "A8", "pin_b": "C6", "resolution": 2} @@ -61,8 +55,7 @@ "rainbow_beacon": true, "rainbow_moving_chevron": true, "rainbow_pinwheels": true, - "raindrops": true, - "solid_color": true + "raindrops": true }, "driver": "ws2812", "layout": [ diff --git a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c index acef9721dc0..2f5b89830bf 100644 --- a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c @@ -44,11 +44,11 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { #endif #ifdef RGB_MATRIX_ENABLE -bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { +bool rgb_matrix_indicators_user(void) { if (host_keyboard_led_state().caps_lock) { - RGB_MATRIX_INDICATOR_SET_COLOR(0, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); + rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); } else { - RGB_MATRIX_INDICATOR_SET_COLOR(0, 0, 0, 0); + rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, 0, 0, 0); } return false; } diff --git a/keyboards/haverworks/theseus75/keymaps/default/keymap.c b/keyboards/haverworks/theseus75/keymaps/default/keymap.c index 92b8064a026..cc5daf12115 100644 --- a/keyboards/haverworks/theseus75/keymaps/default/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/default/keymap.c @@ -44,11 +44,11 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { #endif #ifdef RGB_MATRIX_ENABLE -bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { +bool rgb_matrix_indicators_user(void) { if (host_keyboard_led_state().caps_lock) { - RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); + rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); } else { - RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0); + rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, 0, 0, 0); } return false; } diff --git a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c index 72a1eeb3513..c6dfe065a52 100644 --- a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c @@ -44,11 +44,11 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { #endif #ifdef RGB_MATRIX_ENABLE -bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { +bool rgb_matrix_indicators_user(void) { if (host_keyboard_led_state().caps_lock) { - RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); + rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); } else { - RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_LED_INDEX, 0, 0, 0); + rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, 0, 0, 0); } return false; } diff --git a/keyboards/haverworks/theseus75/stm32_registry.h b/keyboards/haverworks/theseus75/stm32_registry.h deleted file mode 100644 index 0524fdc0457..00000000000 --- a/keyboards/haverworks/theseus75/stm32_registry.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright 2023 Moritz Plattner - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once -#include_next "stm32_registry.h" - -/* This config is wrong in ChibiOS upstream. */ -#undef STM32_FLASH_NUMBER_OF_BANKS -#define STM32_FLASH_NUMBER_OF_BANKS 1 - -/* This config is wrong in ChibiOS upstream. */ -#undef STM32_FLASH_SECTORS_PER_BANK -#define STM32_FLASH_SECTORS_PER_BANK 64 \ No newline at end of file From 10858bd8da0a127d286c5de746e92d05f50db596 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sat, 12 Jul 2025 19:11:39 -0400 Subject: [PATCH 45/53] docs: use condensed SPDX blocks --- keyboards/haverworks/theseus75/config.h | 17 ++--------------- keyboards/haverworks/theseus75/halconf.h | 17 ++--------------- .../haverworks/theseus75/keymaps/ansi/keymap.c | 17 ++--------------- .../theseus75/keymaps/default/keymap.c | 17 ++--------------- .../haverworks/theseus75/keymaps/iso/keymap.c | 17 ++--------------- keyboards/haverworks/theseus75/mcuconf.h | 17 ++--------------- keyboards/haverworks/theseus75/theseus75.c | 17 ++--------------- 7 files changed, 14 insertions(+), 105 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 92deff5bbfe..4e2e8225d67 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -1,18 +1,5 @@ -/* Copyright 2023 Moritz Plattner (@ebastler), Alex Havermale (@haversnail) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ +// Copyright 2023 Moritz Plattner (@ebastler), Alex Havermale (@haversnail) +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once diff --git a/keyboards/haverworks/theseus75/halconf.h b/keyboards/haverworks/theseus75/halconf.h index 948c4ce2402..e7da7271bb4 100644 --- a/keyboards/haverworks/theseus75/halconf.h +++ b/keyboards/haverworks/theseus75/halconf.h @@ -1,18 +1,5 @@ -/* Copyright 2023 Moritz Plattner - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ +// Copyright 2023 Moritz Plattner (@ebastler) +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once diff --git a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c index 2f5b89830bf..cea148f53b8 100644 --- a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c @@ -1,18 +1,5 @@ -/* Copyright 2023 Moritz Plattner - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ +// Copyright 2023 Moritz Plattner (@ebastler), Alex Havermale (@haversnail) +// SPDX-License-Identifier: GPL-2.0-or-later #include QMK_KEYBOARD_H diff --git a/keyboards/haverworks/theseus75/keymaps/default/keymap.c b/keyboards/haverworks/theseus75/keymaps/default/keymap.c index cc5daf12115..4b6f0ecb715 100644 --- a/keyboards/haverworks/theseus75/keymaps/default/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/default/keymap.c @@ -1,18 +1,5 @@ -/* Copyright 2023 Moritz Plattner - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ +// Copyright 2023 Moritz Plattner (@ebastler), Alex Havermale (@haversnail) +// SPDX-License-Identifier: GPL-2.0-or-later #include QMK_KEYBOARD_H diff --git a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c index c6dfe065a52..3bc40804dab 100644 --- a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c @@ -1,18 +1,5 @@ -/* Copyright 2023 Moritz Plattner - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ +// Copyright 2023 Moritz Plattner (@ebastler), Alex Havermale (@haversnail) +// SPDX-License-Identifier: GPL-2.0-or-later #include QMK_KEYBOARD_H diff --git a/keyboards/haverworks/theseus75/mcuconf.h b/keyboards/haverworks/theseus75/mcuconf.h index 52fe13ec49e..a3dbdb4ba26 100644 --- a/keyboards/haverworks/theseus75/mcuconf.h +++ b/keyboards/haverworks/theseus75/mcuconf.h @@ -1,18 +1,5 @@ -/* Copyright 2023 Moritz Plattner - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ +// Copyright 2023 Moritz Plattner (@ebastler) +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index 570b08c8c97..a334c001047 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -1,18 +1,5 @@ -/* Copyright 2023 Moritz Plattner (@ebastler), Alex Havermale (@haversnail) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ +// Copyright 2023 Moritz Plattner (@ebastler), Alex Havermale (@haversnail) +// SPDX-License-Identifier: GPL-2.0-or-later #include "quantum.h" #include "transactions.h" From e44af5093d62469e924729ecc5011b01fa84226b Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sat, 12 Jul 2025 19:16:25 -0400 Subject: [PATCH 46/53] refactor: move RGB matrix indicator logic to `kb` function --- keyboards/haverworks/theseus75/keymaps/ansi/keymap.c | 11 ----------- .../haverworks/theseus75/keymaps/default/keymap.c | 11 ----------- keyboards/haverworks/theseus75/keymaps/iso/keymap.c | 11 ----------- keyboards/haverworks/theseus75/theseus75.c | 11 +++++++++++ 4 files changed, 11 insertions(+), 33 deletions(-) diff --git a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c index cea148f53b8..da88f49c23e 100644 --- a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c @@ -29,14 +29,3 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [1] = { ENCODER_CCW_CW(RM_PREV, RM_NEXT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; #endif - -#ifdef RGB_MATRIX_ENABLE -bool rgb_matrix_indicators_user(void) { - if (host_keyboard_led_state().caps_lock) { - rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); - } else { - rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, 0, 0, 0); - } - return false; -} -#endif diff --git a/keyboards/haverworks/theseus75/keymaps/default/keymap.c b/keyboards/haverworks/theseus75/keymaps/default/keymap.c index 4b6f0ecb715..327b9865149 100644 --- a/keyboards/haverworks/theseus75/keymaps/default/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/default/keymap.c @@ -29,14 +29,3 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [1] = { ENCODER_CCW_CW(RM_PREV, RM_NEXT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; #endif - -#ifdef RGB_MATRIX_ENABLE -bool rgb_matrix_indicators_user(void) { - if (host_keyboard_led_state().caps_lock) { - rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); - } else { - rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, 0, 0, 0); - } - return false; -} -#endif diff --git a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c index 3bc40804dab..7c596d27189 100644 --- a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c @@ -29,14 +29,3 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [1] = { ENCODER_CCW_CW(RM_PREV, RM_NEXT), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, }; #endif - -#ifdef RGB_MATRIX_ENABLE -bool rgb_matrix_indicators_user(void) { - if (host_keyboard_led_state().caps_lock) { - rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); - } else { - rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, 0, 0, 0); - } - return false; -} -#endif diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index a334c001047..f3ae491b60e 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -197,3 +197,14 @@ void housekeeping_task_kb(void) { } } } + +#ifdef RGB_MATRIX_ENABLE +bool rgb_matrix_indicators_kb(void) { + if (host_keyboard_led_state().caps_lock) { + rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); + } else { + rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, 0, 0, 0); + } + return false; +} +#endif From 45929fc1c3f120fa9b7c0175cc121b75b6383216 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sat, 12 Jul 2025 19:19:29 -0400 Subject: [PATCH 47/53] nit: remove `RGB_MATRIX_ENABLE` guard in config --- keyboards/haverworks/theseus75/config.h | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 4e2e8225d67..f8110bb92fa 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -25,14 +25,12 @@ #define SPLIT_TRANSACTION_IDS_KB RPC_ID_KB_STATE /* Defines for the RGB matrix */ -#ifdef RGB_MATRIX_ENABLE -# define INDICATOR_MAX_BRIGHTNESS 255 -# define CAPS_LOCK_LED_INDEX 0 // LED1 on PCB -# define WS2812_EXTERNAL_PULLUP -# define WS2812_PWM_DRIVER PWMD3 -# define WS2812_PWM_CHANNEL 4 -# define WS2812_PWM_PAL_MODE 10 -# define WS2812_DMA_STREAM STM32_DMA1_STREAM2 -# define WS2812_DMA_CHANNEL 2 -# define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM3_UP -#endif +#define INDICATOR_MAX_BRIGHTNESS 255 +#define CAPS_LOCK_LED_INDEX 0 // LED1 on PCB +#define WS2812_EXTERNAL_PULLUP +#define WS2812_PWM_DRIVER PWMD3 +#define WS2812_PWM_CHANNEL 4 +#define WS2812_PWM_PAL_MODE 10 +#define WS2812_DMA_STREAM STM32_DMA1_STREAM2 +#define WS2812_DMA_CHANNEL 2 +#define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM3_UP From e837a6b556f96f20a820d410ce7d0a60d606f5c0 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sun, 13 Jul 2025 13:39:57 -0400 Subject: [PATCH 48/53] nit: replace legacy `RGB_` keycode with `RM_` --- keyboards/haverworks/theseus75/keymaps/ansi/keymap.c | 2 +- keyboards/haverworks/theseus75/keymaps/default/keymap.c | 2 +- keyboards/haverworks/theseus75/keymaps/iso/keymap.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c index da88f49c23e..3102d62f76b 100644 --- a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c @@ -6,7 +6,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_75xt_ansi( - RGB_TOG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + RM_TOGG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, diff --git a/keyboards/haverworks/theseus75/keymaps/default/keymap.c b/keyboards/haverworks/theseus75/keymaps/default/keymap.c index 327b9865149..fe18a10d2eb 100644 --- a/keyboards/haverworks/theseus75/keymaps/default/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/default/keymap.c @@ -6,7 +6,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_75xt_all( - RGB_TOG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + RM_TOGG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, diff --git a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c index 7c596d27189..946047d90b9 100644 --- a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c @@ -6,7 +6,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_75xt_iso( - RGB_TOG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + RM_TOGG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, KC_F15, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN, From 65229be4ee8fb090e3f73dbdbe0bd3723ea9bdbc Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Sun, 13 Jul 2025 13:45:36 -0400 Subject: [PATCH 49/53] fix: return `rgb_matrix_indicators_kb` early if user function returns false --- keyboards/haverworks/theseus75/theseus75.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index f3ae491b60e..fc160836340 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -200,6 +200,10 @@ void housekeeping_task_kb(void) { #ifdef RGB_MATRIX_ENABLE bool rgb_matrix_indicators_kb(void) { + if (!rgb_matrix_indicators_user()) { + return false; + } + if (host_keyboard_led_state().caps_lock) { rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS, INDICATOR_MAX_BRIGHTNESS); } else { From 891001cf058b0b5574e517dbeff42dab96ec6dbf Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Fri, 18 Jul 2025 11:06:10 -0400 Subject: [PATCH 50/53] nit: rename layouts --- keyboards/haverworks/theseus75/keyboard.json | 6 +++--- keyboards/haverworks/theseus75/keymaps/ansi/keymap.c | 4 ++-- keyboards/haverworks/theseus75/keymaps/default/keymap.c | 4 ++-- keyboards/haverworks/theseus75/keymaps/iso/keymap.c | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboards/haverworks/theseus75/keyboard.json b/keyboards/haverworks/theseus75/keyboard.json index 571f112a5d7..c09e1475584 100644 --- a/keyboards/haverworks/theseus75/keyboard.json +++ b/keyboards/haverworks/theseus75/keyboard.json @@ -160,7 +160,7 @@ "pin": "B7" }, "layouts": { - "LAYOUT_75xt_all": { + "LAYOUT_all": { "layout": [ {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, @@ -258,7 +258,7 @@ {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} ] }, - "LAYOUT_75xt_ansi": { + "LAYOUT_ansi": { "layout": [ {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, @@ -353,7 +353,7 @@ {"label": "Rght", "matrix": [11, 8], "x": 17.75, "y": 5} ] }, - "LAYOUT_75xt_iso": { + "LAYOUT_iso": { "layout": [ {"label": "LENC", "matrix": [0, 0], "x": 0, "y": 0}, {"label": "ESC", "matrix": [0, 1], "x": 1.5, "y": 0}, diff --git a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c index 3102d62f76b..25494f7e47d 100644 --- a/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/ansi/keymap.c @@ -5,7 +5,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT_75xt_ansi( + [0] = LAYOUT_ansi( RM_TOGG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, @@ -13,7 +13,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_F16, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), - [1] = LAYOUT_75xt_ansi( + [1] = LAYOUT_ansi( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, diff --git a/keyboards/haverworks/theseus75/keymaps/default/keymap.c b/keyboards/haverworks/theseus75/keymaps/default/keymap.c index fe18a10d2eb..5e56d121ebe 100644 --- a/keyboards/haverworks/theseus75/keymaps/default/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/default/keymap.c @@ -5,7 +5,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT_75xt_all( + [0] = LAYOUT_all( RM_TOGG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, @@ -13,7 +13,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_F16, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), - [1] = LAYOUT_75xt_all( + [1] = LAYOUT_all( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, diff --git a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c index 946047d90b9..d7487010ee7 100644 --- a/keyboards/haverworks/theseus75/keymaps/iso/keymap.c +++ b/keyboards/haverworks/theseus75/keymaps/iso/keymap.c @@ -5,7 +5,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT_75xt_iso( + [0] = LAYOUT_iso( RM_TOGG, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, KC_F13, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_F14, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, @@ -13,7 +13,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_F16, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, KC_F17, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), - [1] = LAYOUT_75xt_iso( + [1] = LAYOUT_iso( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, From 8efefa45495301e87f8cddb104b8b3f6cabc4283 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Fri, 18 Jul 2025 11:14:04 -0400 Subject: [PATCH 51/53] refactor: move split hand pin to keyboard.json --- keyboards/haverworks/theseus75/config.h | 1 - keyboards/haverworks/theseus75/keyboard.json | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index f8110bb92fa..332c98bb7b4 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -12,7 +12,6 @@ #define ID_PIN A13 #define USBSW_PIN A14 // Switches the hub input/output with the MUXes #define PSW_PIN A15 // Turns the power routing to the USB-C port on/off -#define SPLIT_HAND_PIN B9 // The MCUs probe a pin to determine if they are left or right side. high = left, low = right #define BUS_B_PIN C13 // Tells the hub to be bus-powered or self-powered (which in turn tells the clients to use 100 mA or 500 mA) #define USB_VBUS_PIN C15 // Only the master side will have VBUS present at power-up (used to determine master/slave) #define USBPD_1_PIN F0 diff --git a/keyboards/haverworks/theseus75/keyboard.json b/keyboards/haverworks/theseus75/keyboard.json index c09e1475584..60f791ae9d7 100644 --- a/keyboards/haverworks/theseus75/keyboard.json +++ b/keyboards/haverworks/theseus75/keyboard.json @@ -129,6 +129,9 @@ ] } }, + "handedness": { + "pin": "B9" + }, "matrix_pins": { "right": { "cols": ["A10", "A9", "A8", "C6", "B15", "B14", "B13", "B12", "C14"], From 7b2daf8dd805bf496b7b71aa251486f13985dfd9 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Fri, 18 Jul 2025 11:16:45 -0400 Subject: [PATCH 52/53] fix: return true in kb-level matrix indicators --- keyboards/haverworks/theseus75/theseus75.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/haverworks/theseus75/theseus75.c b/keyboards/haverworks/theseus75/theseus75.c index fc160836340..45ead4811d1 100644 --- a/keyboards/haverworks/theseus75/theseus75.c +++ b/keyboards/haverworks/theseus75/theseus75.c @@ -209,6 +209,6 @@ bool rgb_matrix_indicators_kb(void) { } else { rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, 0, 0, 0); } - return false; + return true; } #endif From 9f0ad9fcbced872e1d6a41e2e7cfb9791fb4dd45 Mon Sep 17 00:00:00 2001 From: Alex Havermale Date: Fri, 18 Jul 2025 11:20:15 -0400 Subject: [PATCH 53/53] nit: remove unused/default serial configs --- keyboards/haverworks/theseus75/config.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/keyboards/haverworks/theseus75/config.h b/keyboards/haverworks/theseus75/config.h index 332c98bb7b4..7627837e766 100644 --- a/keyboards/haverworks/theseus75/config.h +++ b/keyboards/haverworks/theseus75/config.h @@ -5,8 +5,6 @@ /* Defines for configuring the serial driver for split comms (see https://docs.qmk.fm/drivers/serial) */ #define SERIAL_USART_DRIVER SD3 // USART 3 -#define USART3_REMAP // Remap USART TX and RX pins for half duplex -#define SERIAL_USART_TX_PAL_MODE 7 // Pin alternate function 7 = USART3_TX for PB10 /* Defines for required pins */ #define ID_PIN A13