From 58ebb39d8161236f015175231cc858bbbb57b738 Mon Sep 17 00:00:00 2001 From: "Ricardo (XenGi) Band" Date: Mon, 4 Oct 2021 21:13:01 +0200 Subject: [PATCH 01/99] mkbd65 added --- keyboards/mkbd65/README.md | 17 ++ keyboards/mkbd65/config.h | 158 +++++++++++ keyboards/mkbd65/info.json | 310 +++++++++++++++++++++ keyboards/mkbd65/keymaps/default/README.md | 52 ++++ keyboards/mkbd65/keymaps/default/config.h | 19 ++ keyboards/mkbd65/keymaps/default/keymap.c | 45 +++ keyboards/mkbd65/mkbd65.c | 43 +++ keyboards/mkbd65/mkbd65.h | 56 ++++ keyboards/mkbd65/rules.mk | 80 ++++++ 9 files changed, 780 insertions(+) create mode 100644 keyboards/mkbd65/README.md create mode 100644 keyboards/mkbd65/config.h create mode 100644 keyboards/mkbd65/info.json create mode 100644 keyboards/mkbd65/keymaps/default/README.md create mode 100644 keyboards/mkbd65/keymaps/default/config.h create mode 100644 keyboards/mkbd65/keymaps/default/keymap.c create mode 100644 keyboards/mkbd65/mkbd65.c create mode 100644 keyboards/mkbd65/mkbd65.h create mode 100644 keyboards/mkbd65/rules.mk diff --git a/keyboards/mkbd65/README.md b/keyboards/mkbd65/README.md new file mode 100644 index 0000000000..b9946cfd26 --- /dev/null +++ b/keyboards/mkbd65/README.md @@ -0,0 +1,17 @@ +# mkbd65 + +![mkbd65](https://gitlab.com/mkbd65/pcb/raw/master/mkbd65.png) + +A mobile keyboard addon for smartphones. + +Keyboard Maintainer: [XenGi](https://xengi.de) +Hardware Supported: [mkbd65 PCB](https://gitlab.com/mkbd65) +Hardware Availability: - + +Make example for this keyboard (after setting up your build environment): + +``` +make mkbd65: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). diff --git a/keyboards/mkbd65/config.h b/keyboards/mkbd65/config.h new file mode 100644 index 0000000000..704fe8f4dc --- /dev/null +++ b/keyboards/mkbd65/config.h @@ -0,0 +1,158 @@ +/* +Copyright 2018 XenGi + +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 . +*/ + +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xDEAD +#define PRODUCT_ID 0xBEAF +#define DEVICE_VER 0x0001 +#define MANUFACTURER XenGi +#define PRODUCT mkbd65 +#define DESCRIPTION Custom keyboard addon for smartphones + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 12 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { D4, D6, D7, B4, B5 } +#define MATRIX_COL_PINS { D5, C7, C6, D3, D2, D1, D0, B7, B3, B2, B1, B0 } +#define UNUSED_PINS { E6, F0, F1, F4, F5, F6, F7 } + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN B6 +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 3 + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +// #define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +// #define LOCKING_RESYNC_ENABLE + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +#define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION diff --git a/keyboards/mkbd65/info.json b/keyboards/mkbd65/info.json new file mode 100644 index 0000000000..a63e1f9a43 --- /dev/null +++ b/keyboards/mkbd65/info.json @@ -0,0 +1,310 @@ +{ + "keyboard_name": "MKBD65", + "url": "https://gitlab.com/xengi/mkbd65", + "maintainer": "XenGi", + "width": 12, + "height": 5, + "layouts": { + "LAYOUT": { + "key_count": 58, + "layout": [ + { + "label": "Esc", + "x": 0, + "y": 0 + }, + { + "label": "1", + "x": 1, + "y": 0 + }, + { + "label": "2", + "x": 2, + "y": 0 + }, + { + "label": "3", + "x": 3, + "y": 0 + }, + { + "label": "4", + "x": 4, + "y": 0 + }, + { + "label": "5", + "x": 5, + "y": 0 + }, + { + "label": "6", + "x": 6, + "y": 0 + }, + { + "label": "7", + "x": 7, + "y": 0 + }, + { + "label": "8", + "x": 8, + "y": 0 + }, + { + "label": "9", + "x": 9, + "y": 0 + }, + { + "label": "0", + "x": 10, + "y": 0 + }, + { + "label": "Delete", + "x": 11, + "y": 0 + }, + { + "label": "Q", + "x": 0, + "y": 1 + }, + { + "label": "W", + "x": 1, + "y": 1 + }, + { + "label": "E", + "x": 2, + "y": 1 + }, + { + "label": "R", + "x": 3, + "y": 1 + }, + { + "label": "T", + "x": 4, + "y": 1 + }, + { + "label": "Y", + "x": 5, + "y": 1 + }, + { + "label": "U", + "x": 6, + "y": 1 + }, + { + "label": "I", + "x": 7, + "y": 1 + }, + { + "label": "O", + "x": 8, + "y": 1 + }, + { + "label": "P", + "x": 9, + "y": 1 + }, + { + "label": "{", + "x": 10, + "y": 1 + }, + { + "label": "}", + "x": 11, + "y": 1 + }, + { + "label": "A", + "x": 0, + "y": 3 + }, + { + "label": "S", + "x": 1, + "y": 3 + }, + { + "label": "D", + "x": 2, + "y": 3 + }, + { + "label": "F", + "x": 3, + "y": 3 + }, + { + "label": "G", + "x": 4, + "y": 3 + }, + { + "label": "H", + "x": 5, + "y": 3 + }, + { + "label": "J", + "x": 6, + "y": 3 + }, + { + "label": "K", + "x": 7, + "y": 3 + }, + { + "label": "L", + "x": 8, + "y": 3 + }, + { + "label": ":", + "x": 9, + "y": 3 + }, + { + "label": "\"", + "x": 10, + "y": 3 + }, + { + "label": "Enter", + "x": 11, + "y": 3, + "w": 2.25 + }, + { + "label": "Z", + "x": 0, + "y": 4 + }, + { + "label": "X", + "x": 1, + "y": 4 + }, + { + "label": "C", + "x": 2, + "y": 4 + }, + { + "label": "V", + "x": 3, + "y": 4 + }, + { + "label": "B", + "x": 4, + "y": 4 + }, + { + "label": "N", + "x": 5, + "y": 4 + }, + { + "label": "M", + "x": 6, + "y": 4 + }, + { + "label": "<", + "x": 7, + "y": 4 + }, + { + "label": ">", + "x": 8, + "y": 4 + }, + { + "label": "?", + "x": 9, + "y": 4 + }, + { + "label": "↑", + "x": 10, + "y": 4 + }, + { + "label": "Shift", + "x": 11, + "y": 4 + }, + { + "label": "Ctrl", + "x": 0, + "y": 5 + }, + { + "label": "Fn", + "x": 1, + "y": 5 + }, + { + "label": "Shift", + "x": 2, + "y": 5 + }, + { + "label": "Alt", + "x": 3, + "y": 5 + }, + { + "label": "|", + "x": 4, + "y": 5 + }, + { + "x": 5, + "y": 5, + "w": 2 + }, + { + "label": "_", + "x": 7, + "y": 5 + }, + { + "label": "+", + "x": 8, + "y": 5 + }, + { + "label": "←", + "x": 9, + "y": 5 + }, + { + "label": "↓", + "x": 10, + "y": 5 + }, + { + "label": "→", + "x": 11, + "y": 5 + } + ] + } + } +} diff --git a/keyboards/mkbd65/keymaps/default/README.md b/keyboards/mkbd65/keymaps/default/README.md new file mode 100644 index 0000000000..2f7e9c220f --- /dev/null +++ b/keyboards/mkbd65/keymaps/default/README.md @@ -0,0 +1,52 @@ +# The default keymap for mkbd65 + +``` +0: no mod +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╗ +║ ESC║ 1 ║ 2 ║ 3 ║ 4 ║ 5 ║ 6 ║ 7 ║ 8 ║ 9 ║ 0 ║BKSP║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ q ║ w ║ e ║ r ║ t ║ y ║ u ║ i ║ o ║ p ║ [ ║ ] ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ a ║ s ║ d ║ f ║ g ║ h ║ j ║ k ║ l ║ ; ║ ' ║ RET║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ z ║ x ║ c ║ v ║ b ║ n ║ m ║ , ║ . ║ / ║ ▲ ║SHFT║ +╠════╬════╬════╬════╬════╬════╩════╬════╬════╬════╬════╬════╣ +║CTRL║ FN ║SHFT║ ALT║ \ ║ SPACE ║ - ║ = ║ ◀ ║ ▼ ║ ▶ ║ +╚════╩════╩════╩════╩════╩═════════╩════╩════╩════╩════╩════╝ +1: mod shift +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╗ +║ ~ ║ ! ║ @ ║ # ║ $ ║ % ║ ^ ║ & ║ * ║ ( ║ ) ║BKSP║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ Q ║ W ║ E ║ R ║ T ║ Y ║ U ║ I ║ O ║ P ║ { ║ } ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ A ║ S ║ D ║ F ║ G ║ H ║ J ║ K ║ L ║ : ║ " ║ RET║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ Z ║ X ║ C ║ V ║ B ║ N ║ M ║ < ║ > ║ ? ║ ▲ ║░░░░║ +╠════╬════╬════╬════╬════╬════╩════╬════╬════╬════╬════╬════╣ +║CTRL║ FN ║░░░░║ ALT║ | ║ SPACE ║ _ ║ + ║ ◀ ║ ▼ ║ ▶ ║ +╚════╩════╩════╩════╩════╩═════════╩════╩════╩════╩════╩════╝ +2: mod alt +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╗ +║ ║ ¹ ║ ² ║ ³ ║ ║ € ║ ║ ║ ║ ║ ║BKSP║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ ä ║ ║ ║ ║ ║ ü ║ ║ ║ ║ ö ║ « ║ » ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ ║ ß ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ RET║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ¿ ║ ▲ ║SHFT║ +╠════╬════╬════╬════╬════╬════╩════╬════╬════╬════╬════╬════╣ +║CTRL║ FN ║SHFT║░░░░║ ║ SPACE ║ ║ ║ ◀ ║ ▼ ║ ▶ ║ +╚════╩════╩════╩════╩════╩═════════╩════╩════╩════╩════╩════╝ +3: mod fn +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╗ +║ Esc║ F1 ║ F2 ║ F3 ║ F4 ║ F5 ║ F6 ║ F7 ║ F8 ║ F9 ║ F10║ Del║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ F11║ F12║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║SUPR║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║PgUp║SHFT║ +╠════╬════╬════╬════╬════╬════╩════╬════╬════╬════╬════╬════╣ +║CTRL║░░░░║SHFT║ ALT║ ║ Tab ║ ║ ` ║Pos1║PgDn║ End║ +╚════╩════╩════╩════╩════╩═════════╩════╩════╩════╩════╩════╝ +``` diff --git a/keyboards/mkbd65/keymaps/default/config.h b/keyboards/mkbd65/keymaps/default/config.h new file mode 100644 index 0000000000..d08c67c094 --- /dev/null +++ b/keyboards/mkbd65/keymaps/default/config.h @@ -0,0 +1,19 @@ +/* Copyright 2018 XenGi + * + * 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 . + */ + +#pragma once + +// place overrides here diff --git a/keyboards/mkbd65/keymaps/default/keymap.c b/keyboards/mkbd65/keymaps/default/keymap.c new file mode 100644 index 0000000000..f57e6871fb --- /dev/null +++ b/keyboards/mkbd65/keymaps/default/keymap.c @@ -0,0 +1,45 @@ +/* Copyright 2018 XenGi + * + * 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( /* Base layer */ + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, + KC_LCTL, MO(1), KC_LSFT, KC_RALT, KC_BSLS, KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( /* Function layer */ + RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F11, KC_F12, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_LGUI, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, + _______, _______, _______, _______, _______, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END + ), +}; + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +void led_set_user(uint8_t usb_led) { +} + diff --git a/keyboards/mkbd65/mkbd65.c b/keyboards/mkbd65/mkbd65.c new file mode 100644 index 0000000000..ab03178a44 --- /dev/null +++ b/keyboards/mkbd65/mkbd65.c @@ -0,0 +1,43 @@ +/* Copyright 2018 XenGi + * + * 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 "mkbd65.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboards/mkbd65/mkbd65.h b/keyboards/mkbd65/mkbd65.h new file mode 100644 index 0000000000..b9437d02b3 --- /dev/null +++ b/keyboards/mkbd65/mkbd65.h @@ -0,0 +1,56 @@ +/* Copyright 2018 XenGi + * + * 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 . + */ +#ifndef MKBD65_H +#define MKBD65_H + +#include "quantum.h" + +/* LAYOUT + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │ │ │ │ │ │ │ │ │ │ │ │ │ + * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ + * │ │ │ │ │ │ │ │ │ │ │ │ │ + * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ + * │ │ │ │ │ │ │ │ │ │ │ │ │ + * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ + * │ │ │ │ │ │ │ │ │ │ │ │ │ + * ├───┼───┼───┼───┼───┼───┴───┼───┼───┼───┼───┼───┤ + * │ │ │ │ │ │ 2.0U │ │ │ │ │ │ + * └───┴───┴───┴───┴───┴───────┴───┴───┴───┴───┴───┘ + * This a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ +#define LAYOUT( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, \ + K40, K41, K42, K43, K44, K45, K47, K48, K49, K410, K411 \ +) \ +{ \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011 }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111 }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211 }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311 }, \ + { K40, K41, K42, K43, K44, K45, KC_NO, K47, K48, K49, K410, K411 } \ +} + +#endif diff --git a/keyboards/mkbd65/rules.mk b/keyboards/mkbd65/rules.mk new file mode 100644 index 0000000000..0187f822d3 --- /dev/null +++ b/keyboards/mkbd65/rules.mk @@ -0,0 +1,80 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Bootloader selection +# Teensy halfkay +# Pro Micro caterina +# Atmel DFU atmel-dfu +# LUFA DFU lufa-dfu +# QMK DFU qmk-dfu +# atmega32a bootloadHID +BOOTLOADER = halfkay + + +# If you don't know the bootloader type, then you can specify the +# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) From d7ebb14089b49446dfdbbdd293290288eaec615c Mon Sep 17 00:00:00 2001 From: XenGi Date: Thu, 4 Nov 2021 17:45:28 +0000 Subject: [PATCH 02/99] Update README.md --- keyboards/mkbd65/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/mkbd65/README.md b/keyboards/mkbd65/README.md index b9946cfd26..887aa2a795 100644 --- a/keyboards/mkbd65/README.md +++ b/keyboards/mkbd65/README.md @@ -2,11 +2,11 @@ ![mkbd65](https://gitlab.com/mkbd65/pcb/raw/master/mkbd65.png) -A mobile keyboard addon for smartphones. +A mobile keyboard addon for modern smartphones. -Keyboard Maintainer: [XenGi](https://xengi.de) -Hardware Supported: [mkbd65 PCB](https://gitlab.com/mkbd65) -Hardware Availability: - +- Keyboard Maintainer: [XenGi](https://xengi.de) +- Hardware Supported: [mkbd65 PCB](https://gitlab.com/mkbd65/pcb) +- Hardware Availability: - Make example for this keyboard (after setting up your build environment): From 822e0caf42e190d846d4ef2496a740f1af625ef2 Mon Sep 17 00:00:00 2001 From: XenGi Date: Thu, 4 Nov 2021 17:48:29 +0000 Subject: [PATCH 03/99] Update keyboards/mkbd65/mkbd65.png, keyboards/mkbd65/README.md --- keyboards/mkbd65/README.md | 2 +- keyboards/mkbd65/mkbd65.png | Bin 0 -> 812 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 keyboards/mkbd65/mkbd65.png diff --git a/keyboards/mkbd65/README.md b/keyboards/mkbd65/README.md index 887aa2a795..08852e8fc2 100644 --- a/keyboards/mkbd65/README.md +++ b/keyboards/mkbd65/README.md @@ -1,6 +1,6 @@ # mkbd65 -![mkbd65](https://gitlab.com/mkbd65/pcb/raw/master/mkbd65.png) +![mkbd65](https://gitlab.com/mkbd65/qmk-firmware/-/raw/mkbd65/keyboards/mkbd65/mkbd65.png?inline=false) A mobile keyboard addon for modern smartphones. diff --git a/keyboards/mkbd65/mkbd65.png b/keyboards/mkbd65/mkbd65.png new file mode 100644 index 0000000000000000000000000000000000000000..b873771c748a467ea808d6c7f91220fe7642e11c GIT binary patch literal 812 zcmeAS@N?(olHy`uVBq!ia0y~yVDMsKU@+%kVqjoU;q$g+U|?*?baoE#baqxKD9TUE z%t>Wn(3n^|(bnUzgUr$R%UwZQO}ZM7CM>jy6c8=Eq9wA>X@zK1slm=K+_OwnboKh0 zvJW2YKf0>9d-FQJbxjIC7#}@*w&aD9>OXzWEgc^p?2v!|&i36sMyJJROtcO7GODin zs6I+k+pSf$U#WxPm*BC6GdjtBlO}zTiU0oL<5#_7oA;dmYgu)5&QXT>9yX_WHhb-H zwAmYJYVls!Jt8oy^L*!VpIr(cm9L9Vzi%NfBUX`i#Ao@lPURy>3!A6%rMU(x&r|AK zHOud()3Ma4pT*MG#w4$;{v_U3^y`$-^-MnHMpqrjCJt89DFJSxhEb(KI!iL_-#wHs z`XjVcq-g4a6B`@2OiuL4|KYDI&wi?|erHL5%!{gxZ~FxoREuX^%l-ZP#HAX4HWh(Z*iu2j;oqsWVlfw@&j&(ct zZv9sHi($#i)lYZ}3OIViG^+1DzH2*o@89ZWSMT$y&MWHZ6T5Pofq{Xuz$3Dlfk96h zgc&QA+LtjfFtC?+`ns||EZzkx!g~flkEm$e^vd7w~p1<#LG+X z*IfVhA#h>pBrff{Vawkv`gAnB?yBC`poGZxYvVRQS74qSe0$f27ImAh88;6swplmr z+l&v>$^!TQ5Wg?M;Zo6ZGT&?A$+H{^h3@A9WQsy!D$hO4KNXqFv;By~|DTgsa@wO} ztLrr0dRAYW_surb|JLMhOKdaW`)?_K8Q@~Md`tPVy$Al9uk*e5KsMk`{ULjX`!&i( VH6?xTGcYhPc)I$ztaD0e0s!C_ZHNE> literal 0 HcmV?d00001 From 706bbd9228da354a6a653421b4030b5f72e7fc19 Mon Sep 17 00:00:00 2001 From: "Ricardo (XenGi) Band" Date: Wed, 5 Jan 2022 00:59:33 +0100 Subject: [PATCH 04/99] support new PCB and ANSI and ISO layout --- keyboards/mkbd65/README.md | 11 ++- keyboards/mkbd65/config.h | 19 ++-- keyboards/mkbd65/info.json | 2 +- .../keymaps/{default => ansi}/README.md | 92 ++++++++++--------- .../mkbd65/keymaps/{default => ansi}/config.h | 2 +- keyboards/mkbd65/keymaps/ansi/keymap.c | 45 +++++++++ keyboards/mkbd65/keymaps/default | 1 + keyboards/mkbd65/keymaps/iso/README.md | 54 +++++++++++ keyboards/mkbd65/keymaps/iso/config.h | 19 ++++ .../mkbd65/keymaps/{default => iso}/keymap.c | 14 +-- keyboards/mkbd65/mkbd65.c | 2 +- keyboards/mkbd65/mkbd65.h | 78 +++++++++++----- 12 files changed, 248 insertions(+), 91 deletions(-) rename keyboards/mkbd65/keymaps/{default => ansi}/README.md (52%) rename keyboards/mkbd65/keymaps/{default => ansi}/config.h (96%) create mode 100644 keyboards/mkbd65/keymaps/ansi/keymap.c create mode 120000 keyboards/mkbd65/keymaps/default create mode 100644 keyboards/mkbd65/keymaps/iso/README.md create mode 100644 keyboards/mkbd65/keymaps/iso/config.h rename keyboards/mkbd65/keymaps/{default => iso}/keymap.c (78%) diff --git a/keyboards/mkbd65/README.md b/keyboards/mkbd65/README.md index 08852e8fc2..045589252f 100644 --- a/keyboards/mkbd65/README.md +++ b/keyboards/mkbd65/README.md @@ -1,7 +1,7 @@ -# mkbd65 - ![mkbd65](https://gitlab.com/mkbd65/qmk-firmware/-/raw/mkbd65/keyboards/mkbd65/mkbd65.png?inline=false) +# mkbd65 + A mobile keyboard addon for modern smartphones. - Keyboard Maintainer: [XenGi](https://xengi.de) @@ -14,4 +14,11 @@ Make example for this keyboard (after setting up your build environment): make mkbd65:default ``` +Available layouts: + + - ansi (default) + - iso (upright `Enter` key) + +_Don't forget to connect the correct solder joints on the PCB to switch the layout._ + 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). diff --git a/keyboards/mkbd65/config.h b/keyboards/mkbd65/config.h index 704fe8f4dc..6b4e2fbe05 100644 --- a/keyboards/mkbd65/config.h +++ b/keyboards/mkbd65/config.h @@ -1,5 +1,5 @@ /* -Copyright 2018 XenGi +Copyright 2022 XenGi 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 @@ -20,8 +20,8 @@ along with this program. If not, see . #include "config_common.h" /* USB Device descriptor parameter */ -#define VENDOR_ID 0xDEAD -#define PRODUCT_ID 0xBEAF +#define VENDOR_ID 0x1209 +#define PRODUCT_ID 0x4803 #define DEVICE_VER 0x0001 #define MANUFACTURER XenGi #define PRODUCT mkbd65 @@ -29,7 +29,7 @@ along with this program. If not, see . /* key matrix size */ #define MATRIX_ROWS 5 -#define MATRIX_COLS 12 +#define MATRIX_COLS 13 /* * Keyboard Matrix Assignments @@ -41,16 +41,17 @@ along with this program. If not, see . * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) * */ -#define MATRIX_ROW_PINS { D4, D6, D7, B4, B5 } -#define MATRIX_COL_PINS { D5, C7, C6, D3, D2, D1, D0, B7, B3, B2, B1, B0 } -#define UNUSED_PINS { E6, F0, F1, F4, F5, F6, F7 } +#define MATRIX_COL_PINS { D4, D7, B4, B5, B6, C6, C7, F7, F6, F5, F4, F1, F0 } +#define MATRIX_ROW_PINS { D5, D3, D2, D1, D0 } +#define UNUSED_PINS { B3, B2, B1, B0, E6 } /* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ -#define DIODE_DIRECTION COL2ROW +#define DIODE_DIRECTION ROW2COL -#define BACKLIGHT_PIN B6 +#define BACKLIGHT_PIN B7 #define BACKLIGHT_BREATHING #define BACKLIGHT_LEVELS 3 +#define BACKLIGHT_ON_STATE 1 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ #define DEBOUNCING_DELAY 5 diff --git a/keyboards/mkbd65/info.json b/keyboards/mkbd65/info.json index a63e1f9a43..dd4edfcd06 100644 --- a/keyboards/mkbd65/info.json +++ b/keyboards/mkbd65/info.json @@ -1,6 +1,6 @@ { "keyboard_name": "MKBD65", - "url": "https://gitlab.com/xengi/mkbd65", + "url": "https://gitlab.com/mkbd65", "maintainer": "XenGi", "width": 12, "height": 5, diff --git a/keyboards/mkbd65/keymaps/default/README.md b/keyboards/mkbd65/keymaps/ansi/README.md similarity index 52% rename from keyboards/mkbd65/keymaps/default/README.md rename to keyboards/mkbd65/keymaps/ansi/README.md index 2f7e9c220f..00feeefc77 100644 --- a/keyboards/mkbd65/keymaps/default/README.md +++ b/keyboards/mkbd65/keymaps/ansi/README.md @@ -1,52 +1,54 @@ -# The default keymap for mkbd65 +# The ANSI keymap for mkbd65 + +This is the default layout. ``` 0: no mod -╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╗ -║ ESC║ 1 ║ 2 ║ 3 ║ 4 ║ 5 ║ 6 ║ 7 ║ 8 ║ 9 ║ 0 ║BKSP║ -╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ -║ q ║ w ║ e ║ r ║ t ║ y ║ u ║ i ║ o ║ p ║ [ ║ ] ║ -╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ -║ a ║ s ║ d ║ f ║ g ║ h ║ j ║ k ║ l ║ ; ║ ' ║ RET║ -╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ -║ z ║ x ║ c ║ v ║ b ║ n ║ m ║ , ║ . ║ / ║ ▲ ║SHFT║ -╠════╬════╬════╬════╬════╬════╩════╬════╬════╬════╬════╬════╣ -║CTRL║ FN ║SHFT║ ALT║ \ ║ SPACE ║ - ║ = ║ ◀ ║ ▼ ║ ▶ ║ -╚════╩════╩════╩════╩════╩═════════╩════╩════╩════╩════╩════╝ +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ Esc║ 1 ║ 2 ║ 3 ║ 4 ║ 5 ║ 6 ║ 7 ║ 8 ║ 9 ║ 0 ║Backspace║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ q ║ w ║ e ║ r ║ t ║ y ║ u ║ i ║ o ║ p ║ [ ║ ] ║ \ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ +║ a ║ s ║ d ║ f ║ g ║ h ║ j ║ k ║ l ║ ; ║ ' ║ Return ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ +║ z ║ x ║ c ║ v ║ b ║ n ║ m ║ , ║ . ║ / ║ ▲ ║ Shift ║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ +║Ctrl║ Fn ║Shft║AltG║ Space ║ - ║ = ║ ◀ ║ ▼ ║ ▶ ║Ctrl║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ 1: mod shift -╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╗ -║ ~ ║ ! ║ @ ║ # ║ $ ║ % ║ ^ ║ & ║ * ║ ( ║ ) ║BKSP║ -╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ -║ Q ║ W ║ E ║ R ║ T ║ Y ║ U ║ I ║ O ║ P ║ { ║ } ║ -╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ -║ A ║ S ║ D ║ F ║ G ║ H ║ J ║ K ║ L ║ : ║ " ║ RET║ -╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ -║ Z ║ X ║ C ║ V ║ B ║ N ║ M ║ < ║ > ║ ? ║ ▲ ║░░░░║ -╠════╬════╬════╬════╬════╬════╩════╬════╬════╬════╬════╬════╣ -║CTRL║ FN ║░░░░║ ALT║ | ║ SPACE ║ _ ║ + ║ ◀ ║ ▼ ║ ▶ ║ -╚════╩════╩════╩════╩════╩═════════╩════╩════╩════╩════╩════╝ +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ ~ ║ ! ║ @ ║ # ║ $ ║ % ║ ^ ║ & ║ * ║ ( ║ ) ║Backspace║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ Q ║ W ║ E ║ R ║ T ║ Y ║ U ║ I ║ O ║ P ║ { ║ } ║ | ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ +║ A ║ S ║ D ║ F ║ G ║ H ║ J ║ K ║ L ║ : ║ " ║ Return ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ +║ Z ║ X ║ C ║ V ║ B ║ N ║ M ║ < ║ > ║ ? ║ ▲ ║░░░░░░░░░║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ +║Ctrl║ Fn ║░░░░║AltG║ Space ║ _ ║ + ║ ◀ ║ ▼ ║ ▶ ║Ctrl║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ 2: mod alt -╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╗ -║ ║ ¹ ║ ² ║ ³ ║ ║ € ║ ║ ║ ║ ║ ║BKSP║ -╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ -║ ä ║ ║ ║ ║ ║ ü ║ ║ ║ ║ ö ║ « ║ » ║ -╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ -║ ║ ß ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ RET║ -╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ -║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ¿ ║ ▲ ║SHFT║ -╠════╬════╬════╬════╬════╬════╩════╬════╬════╬════╬════╬════╣ -║CTRL║ FN ║SHFT║░░░░║ ║ SPACE ║ ║ ║ ◀ ║ ▼ ║ ▶ ║ -╚════╩════╩════╩════╩════╩═════════╩════╩════╩════╩════╩════╝ +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ ║ ¹ ║ ² ║ ³ ║ ║ € ║ ║ ║ ║ ║ ║Backspace║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ ä ║ ║ ║ ║ ║ ü ║ ║ ║ ║ ö ║ « ║ » ║ ¬ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ +║ ║ ß ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ Return ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ +║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ¿ ║ ▲ ║ Shift ║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ +║Ctrl║ Fn ║Shft║░░░░║ Space ║ ║ ║ ◀ ║ ▼ ║ ▶ ║Ctrl║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ 3: mod fn -╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╗ -║ Esc║ F1 ║ F2 ║ F3 ║ F4 ║ F5 ║ F6 ║ F7 ║ F8 ║ F9 ║ F10║ Del║ -╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ -║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ F11║ F12║ -╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ -║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║SUPR║ -╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ -║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║PgUp║SHFT║ -╠════╬════╬════╬════╬════╬════╩════╬════╬════╬════╬════╬════╣ -║CTRL║░░░░║SHFT║ ALT║ ║ Tab ║ ║ ` ║Pos1║PgDn║ End║ -╚════╩════╩════╩════╩════╩═════════╩════╩════╩════╩════╩════╝ +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ Esc║ F1 ║ F2 ║ F3 ║ F4 ║ F5 ║ F6 ║ F7 ║ F8 ║ F9 ║ F10║ Delete ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ F11║ F12║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ Super ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║PgUp║ Shift ║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ +║Ctrl║░░░░║Shft║AltG║ Tab ║ ║ ` ║Pos1║PgDn║ End║Ctrl║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ ``` diff --git a/keyboards/mkbd65/keymaps/default/config.h b/keyboards/mkbd65/keymaps/ansi/config.h similarity index 96% rename from keyboards/mkbd65/keymaps/default/config.h rename to keyboards/mkbd65/keymaps/ansi/config.h index d08c67c094..b0d0727509 100644 --- a/keyboards/mkbd65/keymaps/default/config.h +++ b/keyboards/mkbd65/keymaps/ansi/config.h @@ -1,4 +1,4 @@ -/* Copyright 2018 XenGi +/* Copyright 2022 XenGi * * 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 diff --git a/keyboards/mkbd65/keymaps/ansi/keymap.c b/keyboards/mkbd65/keymaps/ansi/keymap.c new file mode 100644 index 0000000000..4b7b3520a4 --- /dev/null +++ b/keyboards/mkbd65/keymaps/ansi/keymap.c @@ -0,0 +1,45 @@ +/* Copyright 2022 XenGi + * + * 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_ANSI( /* Base layer */ + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, + KC_LCTL, MO(1), KC_LSFT, KC_RALT, KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL, + ), + + [1] = LAYOUT_ANSI( /* Function layer */ + RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F11, KC_F12, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_LGUI, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, + _______, _______, _______, _______, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______, + ), +}; + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +void led_set_user(uint8_t usb_led) { +} + diff --git a/keyboards/mkbd65/keymaps/default b/keyboards/mkbd65/keymaps/default new file mode 120000 index 0000000000..44ad4f4f7e --- /dev/null +++ b/keyboards/mkbd65/keymaps/default @@ -0,0 +1 @@ +ansi \ No newline at end of file diff --git a/keyboards/mkbd65/keymaps/iso/README.md b/keyboards/mkbd65/keymaps/iso/README.md new file mode 100644 index 0000000000..d08f8c1b9e --- /dev/null +++ b/keyboards/mkbd65/keymaps/iso/README.md @@ -0,0 +1,54 @@ +# The iso-like keymap for mkbd65 + +It's actually just ANSI but with an upright `Enter` key. + +``` +0: no mod +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ Esc║ 1 ║ 2 ║ 3 ║ 4 ║ 5 ║ 6 ║ 7 ║ 8 ║ 9 ║ 0 ║Backspace║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ q ║ w ║ e ║ r ║ t ║ y ║ u ║ i ║ o ║ p ║ [ ║ ] ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ Ret║ +║ a ║ s ║ d ║ f ║ g ║ h ║ j ║ k ║ l ║ ; ║ ' ║ \ ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ +║ z ║ x ║ c ║ v ║ b ║ n ║ m ║ , ║ . ║ / ║ ▲ ║ Shift ║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ +║Ctrl║ Fn ║Shft║AltG║ SPACE ║ - ║ = ║ ◀ ║ ▼ ║ ▶ ║Ctrl║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ +1: mod shift +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ ~ ║ ! ║ @ ║ # ║ $ ║ % ║ ^ ║ & ║ * ║ ( ║ ) ║Backspace║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ Q ║ W ║ E ║ R ║ T ║ Y ║ U ║ I ║ O ║ P ║ { ║ } ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ Ret║ +║ A ║ S ║ D ║ F ║ G ║ H ║ J ║ K ║ L ║ : ║ " ║ | ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ +║ Z ║ X ║ C ║ V ║ B ║ N ║ M ║ < ║ > ║ ? ║ ▲ ║░░░░░░░░░║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ +║Ctrl║ Fn ║░░░░║AltG║ SPACE ║ _ ║ + ║ ◀ ║ ▼ ║ ▶ ║Ctrl║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ +2: mod alt +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ ║ ¹ ║ ² ║ ³ ║ ║ € ║ ║ ║ ║ ║ ║Backspace║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ ä ║ ║ ║ ║ ║ ü ║ ║ ║ ║ ö ║ « ║ » ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ Ret║ +║ ║ ß ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ¬ ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ +║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ¿ ║ ▲ ║ Shift ║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ +║Ctrl║ Fn ║Shft║░░░░║ SPACE ║ ║ ║ ◀ ║ ▼ ║ ▶ ║Ctrl║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ +3: mod fn +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ Esc║ F1 ║ F2 ║ F3 ║ F4 ║ F5 ║ F6 ║ F7 ║ F8 ║ F9 ║ F10║ Delete ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ F11║ F12║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣Supr║ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║PgUp║ Shift ║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ +║Ctrl║░░░░║Shft║AltG║ Tab ║ ║ ` ║Pos1║PgDn║ End║Ctrl║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ +``` diff --git a/keyboards/mkbd65/keymaps/iso/config.h b/keyboards/mkbd65/keymaps/iso/config.h new file mode 100644 index 0000000000..b0d0727509 --- /dev/null +++ b/keyboards/mkbd65/keymaps/iso/config.h @@ -0,0 +1,19 @@ +/* Copyright 2022 XenGi + * + * 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 . + */ + +#pragma once + +// place overrides here diff --git a/keyboards/mkbd65/keymaps/default/keymap.c b/keyboards/mkbd65/keymaps/iso/keymap.c similarity index 78% rename from keyboards/mkbd65/keymaps/default/keymap.c rename to keyboards/mkbd65/keymaps/iso/keymap.c index f57e6871fb..155a2b205b 100644 --- a/keyboards/mkbd65/keymaps/default/keymap.c +++ b/keyboards/mkbd65/keymaps/iso/keymap.c @@ -1,4 +1,4 @@ -/* Copyright 2018 XenGi +/* Copyright 2022 XenGi * * 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 @@ -17,20 +17,20 @@ #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( /* Base layer */ + [0] = LAYOUT_ISO( /* Base layer */ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, - KC_LCTL, MO(1), KC_LSFT, KC_RALT, KC_BSLS, KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT + KC_LCTL, MO(1), KC_LSFT, KC_RALT, KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL, ), - [1] = LAYOUT( /* Function layer */ + [1] = LAYOUT_ISO( /* Function layer */ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F11, KC_F12, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_LGUI, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV, _______, KC_LGUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, - _______, _______, _______, _______, _______, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END + _______, _______, _______, _______, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______, ), }; diff --git a/keyboards/mkbd65/mkbd65.c b/keyboards/mkbd65/mkbd65.c index ab03178a44..fae93a8ea5 100644 --- a/keyboards/mkbd65/mkbd65.c +++ b/keyboards/mkbd65/mkbd65.c @@ -1,4 +1,4 @@ -/* Copyright 2018 XenGi +/* Copyright 2022 XenGi * * 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 diff --git a/keyboards/mkbd65/mkbd65.h b/keyboards/mkbd65/mkbd65.h index b9437d02b3..1a53cad69f 100644 --- a/keyboards/mkbd65/mkbd65.h +++ b/keyboards/mkbd65/mkbd65.h @@ -1,4 +1,4 @@ -/* Copyright 2018 XenGi +/* Copyright 2022 XenGi * * 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 @@ -18,19 +18,19 @@ #include "quantum.h" -/* LAYOUT - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ - * │ │ │ │ │ │ │ │ │ │ │ │ │ - * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ - * │ │ │ │ │ │ │ │ │ │ │ │ │ - * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ - * │ │ │ │ │ │ │ │ │ │ │ │ │ - * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ - * │ │ │ │ │ │ │ │ │ │ │ │ │ - * ├───┼───┼───┼───┼───┼───┴───┼───┼───┼───┼───┼───┤ - * │ │ │ │ │ │ 2.0U │ │ │ │ │ │ - * └───┴───┴───┴───┴───┴───────┴───┴───┴───┴───┴───┘ - * This a shortcut to help you visually see your layout. +/* LAYOUT_ANSI + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │ │ │ │ │ │ │ │ │ │ │ │ 2.0U │ + * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┬───┤ + * │ │ │ │ │ │ │ │ │ │ │ │ │ │ + * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┤ + * │ │ │ │ │ │ │ │ │ │ │ │ 2.0U │ + * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───────┤ + * │ │ │ │ │ │ │ │ │ │ │ │ 2.0U │ + * ├───┼───┼───┼───┼───┴───┴───┼───┼───┼───┼───┼───┬───┤ + * │ │ │ │ │ 3.0U │ │ │ │ │ │ │ + * └───┴───┴───┴───┴───────────┴───┴───┴───┴───┴───┴───┘ + * This is a shortcut to help you visually see your layout. * * The first section contains all of the arguments representing the physical * layout of the board and position of the keys. @@ -38,19 +38,47 @@ * The second converts the arguments into a two-dimensional array which * represents the switch matrix. */ -#define LAYOUT( \ - K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, \ - K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, \ - K40, K41, K42, K43, K44, K45, K47, K48, K49, K410, K411 \ +#define LAYOUT_ANSI( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, \ + K40, K41, K42, K43, K44, K47, K48, K49, K410, K411, K412 \ ) \ { \ - { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011 }, \ - { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111 }, \ - { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211 }, \ - { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311 }, \ - { K40, K41, K42, K43, K44, K45, KC_NO, K47, K48, K49, K410, K411 } \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, KC_NO }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112 }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, KC_NO }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, KC_NO }, \ + { K40, K41, K42, K43, K44, KC_NO, KC_NO, K47, K48, K49, K410, K411, K412 } \ +} + +/* LAYOUT_ISO + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │ │ │ │ │ │ │ │ │ │ │ │ 2.0U │ + * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┬───┤ + * │ │ │ │ │ │ │ │ │ │ │ │ │ │ + * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ │ + * │ │ │ │ │ │ │ │ │ │ │ │ │ │ + * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┤ + * │ │ │ │ │ │ │ │ │ │ │ │ 2.0U │ + * ├───┼───┼───┼───┼───┴───┴───┼───┼───┼───┼───┼───┬───┤ + * │ │ │ │ │ 3.0U │ │ │ │ │ │ │ + * └───┴───┴───┴───┴───────────┴───┴───┴───┴───┴───┴───┘ + */ +#define LAYOUT_ISO( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, \ + K40, K41, K42, K43, K44, K47, K48, K49, K410, K411, K412 \ +) \ +{ \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, KC_NO }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, KC_NO }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212 }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, KC_NO }, \ + { K40, K41, K42, K43, K44, KC_NO, KC_NO, K47, K48, K49, K410, K411, K412 } \ } #endif From ae675071394ce10ae1698f34b4bbae446cf070bc Mon Sep 17 00:00:00 2001 From: "Ricardo (XenGi) Band" Date: Wed, 26 Jan 2022 00:06:05 +0100 Subject: [PATCH 05/99] fix code; first successful flash --- keyboards/mkbd65/README.md | 4 +- keyboards/mkbd65/info.json | 310 ------------------------- keyboards/mkbd65/keymaps/ansi/keymap.c | 6 +- keyboards/mkbd65/rules.mk | 2 +- 4 files changed, 6 insertions(+), 316 deletions(-) delete mode 100644 keyboards/mkbd65/info.json diff --git a/keyboards/mkbd65/README.md b/keyboards/mkbd65/README.md index 045589252f..d130cbf8e2 100644 --- a/keyboards/mkbd65/README.md +++ b/keyboards/mkbd65/README.md @@ -8,10 +8,10 @@ A mobile keyboard addon for modern smartphones. - Hardware Supported: [mkbd65 PCB](https://gitlab.com/mkbd65/pcb) - Hardware Availability: - -Make example for this keyboard (after setting up your build environment): +Flashing this keyboard with ANSI layout (after setting up your build environment): ``` -make mkbd65:default +qmk flash -kb mkbd65 -km ansi ``` Available layouts: diff --git a/keyboards/mkbd65/info.json b/keyboards/mkbd65/info.json deleted file mode 100644 index dd4edfcd06..0000000000 --- a/keyboards/mkbd65/info.json +++ /dev/null @@ -1,310 +0,0 @@ -{ - "keyboard_name": "MKBD65", - "url": "https://gitlab.com/mkbd65", - "maintainer": "XenGi", - "width": 12, - "height": 5, - "layouts": { - "LAYOUT": { - "key_count": 58, - "layout": [ - { - "label": "Esc", - "x": 0, - "y": 0 - }, - { - "label": "1", - "x": 1, - "y": 0 - }, - { - "label": "2", - "x": 2, - "y": 0 - }, - { - "label": "3", - "x": 3, - "y": 0 - }, - { - "label": "4", - "x": 4, - "y": 0 - }, - { - "label": "5", - "x": 5, - "y": 0 - }, - { - "label": "6", - "x": 6, - "y": 0 - }, - { - "label": "7", - "x": 7, - "y": 0 - }, - { - "label": "8", - "x": 8, - "y": 0 - }, - { - "label": "9", - "x": 9, - "y": 0 - }, - { - "label": "0", - "x": 10, - "y": 0 - }, - { - "label": "Delete", - "x": 11, - "y": 0 - }, - { - "label": "Q", - "x": 0, - "y": 1 - }, - { - "label": "W", - "x": 1, - "y": 1 - }, - { - "label": "E", - "x": 2, - "y": 1 - }, - { - "label": "R", - "x": 3, - "y": 1 - }, - { - "label": "T", - "x": 4, - "y": 1 - }, - { - "label": "Y", - "x": 5, - "y": 1 - }, - { - "label": "U", - "x": 6, - "y": 1 - }, - { - "label": "I", - "x": 7, - "y": 1 - }, - { - "label": "O", - "x": 8, - "y": 1 - }, - { - "label": "P", - "x": 9, - "y": 1 - }, - { - "label": "{", - "x": 10, - "y": 1 - }, - { - "label": "}", - "x": 11, - "y": 1 - }, - { - "label": "A", - "x": 0, - "y": 3 - }, - { - "label": "S", - "x": 1, - "y": 3 - }, - { - "label": "D", - "x": 2, - "y": 3 - }, - { - "label": "F", - "x": 3, - "y": 3 - }, - { - "label": "G", - "x": 4, - "y": 3 - }, - { - "label": "H", - "x": 5, - "y": 3 - }, - { - "label": "J", - "x": 6, - "y": 3 - }, - { - "label": "K", - "x": 7, - "y": 3 - }, - { - "label": "L", - "x": 8, - "y": 3 - }, - { - "label": ":", - "x": 9, - "y": 3 - }, - { - "label": "\"", - "x": 10, - "y": 3 - }, - { - "label": "Enter", - "x": 11, - "y": 3, - "w": 2.25 - }, - { - "label": "Z", - "x": 0, - "y": 4 - }, - { - "label": "X", - "x": 1, - "y": 4 - }, - { - "label": "C", - "x": 2, - "y": 4 - }, - { - "label": "V", - "x": 3, - "y": 4 - }, - { - "label": "B", - "x": 4, - "y": 4 - }, - { - "label": "N", - "x": 5, - "y": 4 - }, - { - "label": "M", - "x": 6, - "y": 4 - }, - { - "label": "<", - "x": 7, - "y": 4 - }, - { - "label": ">", - "x": 8, - "y": 4 - }, - { - "label": "?", - "x": 9, - "y": 4 - }, - { - "label": "↑", - "x": 10, - "y": 4 - }, - { - "label": "Shift", - "x": 11, - "y": 4 - }, - { - "label": "Ctrl", - "x": 0, - "y": 5 - }, - { - "label": "Fn", - "x": 1, - "y": 5 - }, - { - "label": "Shift", - "x": 2, - "y": 5 - }, - { - "label": "Alt", - "x": 3, - "y": 5 - }, - { - "label": "|", - "x": 4, - "y": 5 - }, - { - "x": 5, - "y": 5, - "w": 2 - }, - { - "label": "_", - "x": 7, - "y": 5 - }, - { - "label": "+", - "x": 8, - "y": 5 - }, - { - "label": "←", - "x": 9, - "y": 5 - }, - { - "label": "↓", - "x": 10, - "y": 5 - }, - { - "label": "→", - "x": 11, - "y": 5 - } - ] - } - } -} diff --git a/keyboards/mkbd65/keymaps/ansi/keymap.c b/keyboards/mkbd65/keymaps/ansi/keymap.c index 4b7b3520a4..cc7c6018cc 100644 --- a/keyboards/mkbd65/keymaps/ansi/keymap.c +++ b/keyboards/mkbd65/keymaps/ansi/keymap.c @@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, - KC_LCTL, MO(1), KC_LSFT, KC_RALT, KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL, + KC_LCTL, MO(1), KC_LSFT, KC_RALT, KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL ), [1] = LAYOUT_ANSI( /* Function layer */ @@ -30,8 +30,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_LGUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, - _______, _______, _______, _______, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______, - ), + _______, _______, _______, _______, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______ + ) }; void matrix_init_user(void) { diff --git a/keyboards/mkbd65/rules.mk b/keyboards/mkbd65/rules.mk index 0187f822d3..a6bdd38bae 100644 --- a/keyboards/mkbd65/rules.mk +++ b/keyboards/mkbd65/rules.mk @@ -45,7 +45,7 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT # LUFA DFU lufa-dfu # QMK DFU qmk-dfu # atmega32a bootloadHID -BOOTLOADER = halfkay +BOOTLOADER = atmel-dfu # If you don't know the bootloader type, then you can specify the From 7b8e2a8ea070d6bf4b9878788fb52892fef71447 Mon Sep 17 00:00:00 2001 From: XenGi Date: Thu, 27 Jan 2022 19:46:54 +0000 Subject: [PATCH 06/99] Update keyboards/mkbd65/keymaps/ansi/README.md --- keyboards/mkbd65/keymaps/ansi/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/mkbd65/keymaps/ansi/README.md b/keyboards/mkbd65/keymaps/ansi/README.md index 00feeefc77..99bec108a1 100644 --- a/keyboards/mkbd65/keymaps/ansi/README.md +++ b/keyboards/mkbd65/keymaps/ansi/README.md @@ -30,7 +30,7 @@ This is the default layout. 2: mod alt ╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ ║ ║ ¹ ║ ² ║ ³ ║ ║ € ║ ║ ║ ║ ║ ║Backspace║ -╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +╠════╬════╬════╬════╬════╬════╬════╬════╬══` ══╬════╬════╬════╦════╣ ║ ä ║ ║ ║ ║ ║ ü ║ ║ ║ ║ ö ║ « ║ » ║ ¬ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ ║ ║ ß ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ Return ║ @@ -45,10 +45,10 @@ This is the default layout. ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ F11║ F12║ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ -║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ Super ║ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ` ║ Super ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║PgUp║ Shift ║ ╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ -║Ctrl║░░░░║Shft║AltG║ Tab ║ ║ ` ║Pos1║PgDn║ End║Ctrl║ +║Ctrl║░░░░║Shft║AltG║ Tab ║ ║ ║Pos1║PgDn║ End║Ctrl║ ╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ ``` From f0cb73c17581fb40cc5db36d7a182218aaabfb49 Mon Sep 17 00:00:00 2001 From: XenGi Date: Thu, 27 Jan 2022 19:47:25 +0000 Subject: [PATCH 07/99] Update keyboards/mkbd65/keymaps/ansi/README.md --- keyboards/mkbd65/keymaps/ansi/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/mkbd65/keymaps/ansi/README.md b/keyboards/mkbd65/keymaps/ansi/README.md index 99bec108a1..87759b323b 100644 --- a/keyboards/mkbd65/keymaps/ansi/README.md +++ b/keyboards/mkbd65/keymaps/ansi/README.md @@ -30,12 +30,12 @@ This is the default layout. 2: mod alt ╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ ║ ║ ¹ ║ ² ║ ³ ║ ║ € ║ ║ ║ ║ ║ ║Backspace║ -╠════╬════╬════╬════╬════╬════╬════╬════╬══` ══╬════╬════╬════╦════╣ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ ║ ä ║ ║ ║ ║ ║ ü ║ ║ ║ ║ ö ║ « ║ » ║ ¬ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ ║ ║ ß ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ Return ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ -║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ¿ ║ ▲ ║ Shift ║ +║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ¿ ║ ▲ ║ Shift ║ ╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ ║Ctrl║ Fn ║Shft║░░░░║ Space ║ ║ ║ ◀ ║ ▼ ║ ▶ ║Ctrl║ ╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ From acb282080a689bfe8eb64792f15433f8a14501c4 Mon Sep 17 00:00:00 2001 From: "Ricardo (XenGi) Band" Date: Sat, 19 Feb 2022 18:31:46 +0100 Subject: [PATCH 08/99] make AltGr a sticky key, Fixes #1 --- keyboards/mkbd65/config.h | 5 +++-- keyboards/mkbd65/keymaps/ansi/keymap.c | 2 +- keyboards/mkbd65/keymaps/iso/keymap.c | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/keyboards/mkbd65/config.h b/keyboards/mkbd65/config.h index 6b4e2fbe05..8eff7c175d 100644 --- a/keyboards/mkbd65/config.h +++ b/keyboards/mkbd65/config.h @@ -22,9 +22,9 @@ along with this program. If not, see . /* USB Device descriptor parameter */ #define VENDOR_ID 0x1209 #define PRODUCT_ID 0x4803 -#define DEVICE_VER 0x0001 +#define DEVICE_VER 0x0002 #define MANUFACTURER XenGi -#define PRODUCT mkbd65 +#define PRODUCT mkbd65 rev1 #define DESCRIPTION Custom keyboard addon for smartphones /* key matrix size */ @@ -48,6 +48,7 @@ along with this program. If not, see . /* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ #define DIODE_DIRECTION ROW2COL +/* (back)light configuration */ #define BACKLIGHT_PIN B7 #define BACKLIGHT_BREATHING #define BACKLIGHT_LEVELS 3 diff --git a/keyboards/mkbd65/keymaps/ansi/keymap.c b/keyboards/mkbd65/keymaps/ansi/keymap.c index cc7c6018cc..52e6bb289e 100644 --- a/keyboards/mkbd65/keymaps/ansi/keymap.c +++ b/keyboards/mkbd65/keymaps/ansi/keymap.c @@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, - KC_LCTL, MO(1), KC_LSFT, KC_RALT, KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL + KC_LCTL, MO(1), KC_LSFT, OSM(MOD_RALT), KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL ), [1] = LAYOUT_ANSI( /* Function layer */ diff --git a/keyboards/mkbd65/keymaps/iso/keymap.c b/keyboards/mkbd65/keymaps/iso/keymap.c index 155a2b205b..9187478d99 100644 --- a/keyboards/mkbd65/keymaps/iso/keymap.c +++ b/keyboards/mkbd65/keymaps/iso/keymap.c @@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, - KC_LCTL, MO(1), KC_LSFT, KC_RALT, KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL, + KC_LCTL, MO(1), KC_LSFT, OSM(MOD_RALT), KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL, ), [1] = LAYOUT_ISO( /* Function layer */ From 4dcbaafb78c86cdbb7d0bdf70413bcd55db1c8ae Mon Sep 17 00:00:00 2001 From: "Ricardo (XenGi) Band" Date: Sat, 19 Feb 2022 21:58:06 +0100 Subject: [PATCH 09/99] add media controls --- keyboards/mkbd65/keymaps/ansi/keymap.c | 6 +++--- keyboards/mkbd65/keymaps/iso/keymap.c | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/keyboards/mkbd65/keymaps/ansi/keymap.c b/keyboards/mkbd65/keymaps/ansi/keymap.c index 52e6bb289e..972410b3dd 100644 --- a/keyboards/mkbd65/keymaps/ansi/keymap.c +++ b/keyboards/mkbd65/keymaps/ansi/keymap.c @@ -27,9 +27,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [1] = LAYOUT_ANSI( /* Function layer */ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F11, KC_F12, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_LGUI, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F11, KC_F12, KC_APP, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_GRV, KC_LGUI, + _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PGUP, _______, _______, _______, _______, _______, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______ ) }; diff --git a/keyboards/mkbd65/keymaps/iso/keymap.c b/keyboards/mkbd65/keymaps/iso/keymap.c index 9187478d99..eff19b0c4f 100644 --- a/keyboards/mkbd65/keymaps/iso/keymap.c +++ b/keyboards/mkbd65/keymaps/iso/keymap.c @@ -28,8 +28,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [1] = LAYOUT_ISO( /* Function layer */ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F11, KC_F12, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV, _______, KC_LGUI, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_GRV, KC_APP, KC_LGUI, + _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PGUP, _______, _______, _______, _______, _______, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______, ), }; From 9c3912ba8fb9cc211bbe57ee56b08cbb057affa6 Mon Sep 17 00:00:00 2001 From: XenGi Date: Fri, 26 May 2023 11:11:10 +0000 Subject: [PATCH 10/99] Update README.md --- keyboards/mkbd65/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/keyboards/mkbd65/README.md b/keyboards/mkbd65/README.md index d130cbf8e2..6c694a5f92 100644 --- a/keyboards/mkbd65/README.md +++ b/keyboards/mkbd65/README.md @@ -19,6 +19,4 @@ Available layouts: - ansi (default) - iso (upright `Enter` key) -_Don't forget to connect the correct solder joints on the PCB to switch the layout._ - 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 2ba9ed711088e7ccfa0df89fa9948aed6161cae9 Mon Sep 17 00:00:00 2001 From: XenGi Date: Fri, 26 May 2023 11:13:43 +0000 Subject: [PATCH 11/99] Update README.md --- keyboards/mkbd65/README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/keyboards/mkbd65/README.md b/keyboards/mkbd65/README.md index 6c694a5f92..f30b7c91ea 100644 --- a/keyboards/mkbd65/README.md +++ b/keyboards/mkbd65/README.md @@ -8,15 +8,19 @@ A mobile keyboard addon for modern smartphones. - Hardware Supported: [mkbd65 PCB](https://gitlab.com/mkbd65/pcb) - Hardware Availability: - -Flashing this keyboard with ANSI layout (after setting up your build environment): +Flashing this keyboard with `en-us-intl` layout (after setting up your build environment): ``` -qmk flash -kb mkbd65 -km ansi +qmk flash -kb mkbd65 -km en-us-intl ``` Available layouts: - - ansi (default) - - iso (upright `Enter` key) + - en-us-intl (ansi) + - de-de (iso) + +You can find community provided layouts here: https://gitlab.com/mkbd65/community + +--- 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 1bb2a178572b1fb6416032b5898d956436902aab Mon Sep 17 00:00:00 2001 From: XenGi Date: Fri, 26 May 2023 11:27:32 +0000 Subject: [PATCH 12/99] Update README.md --- keyboards/mkbd65/keymaps/ansi/README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/keyboards/mkbd65/keymaps/ansi/README.md b/keyboards/mkbd65/keymaps/ansi/README.md index 87759b323b..923a3ccf57 100644 --- a/keyboards/mkbd65/keymaps/ansi/README.md +++ b/keyboards/mkbd65/keymaps/ansi/README.md @@ -1,6 +1,9 @@ -# The ANSI keymap for mkbd65 +# The English US International keymap for mkbd65 by XenGi + +This is the default layout for the mkbd65 keyboard. You can use it as a reference for other layouts. + +It is based on the "English (intl., with AltGr dead keys)" layout. -This is the default layout. ``` 0: no mod From 462077f2dd3d5069986ac9a34ac779c36047c900 Mon Sep 17 00:00:00 2001 From: XenGi Date: Fri, 26 May 2023 11:33:48 +0000 Subject: [PATCH 13/99] Update README.md --- keyboards/mkbd65/keymaps/ansi/README.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/keyboards/mkbd65/keymaps/ansi/README.md b/keyboards/mkbd65/keymaps/ansi/README.md index 923a3ccf57..b394d98f2c 100644 --- a/keyboards/mkbd65/keymaps/ansi/README.md +++ b/keyboards/mkbd65/keymaps/ansi/README.md @@ -4,6 +4,7 @@ This is the default layout for the mkbd65 keyboard. You can use it as a referenc It is based on the "English (intl., with AltGr dead keys)" layout. +This is the key matrix (no label means the key from layer 0 will be used): ``` 0: no mod @@ -20,27 +21,27 @@ It is based on the "English (intl., with AltGr dead keys)" layout. ╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ 1: mod shift ╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ -║ ~ ║ ! ║ @ ║ # ║ $ ║ % ║ ^ ║ & ║ * ║ ( ║ ) ║Backspace║ +║ ~ ║ ! ║ @ ║ # ║ $ ║ % ║ ^ ║ & ║ * ║ ( ║ ) ║ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ ║ Q ║ W ║ E ║ R ║ T ║ Y ║ U ║ I ║ O ║ P ║ { ║ } ║ | ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ -║ A ║ S ║ D ║ F ║ G ║ H ║ J ║ K ║ L ║ : ║ " ║ Return ║ +║ A ║ S ║ D ║ F ║ G ║ H ║ J ║ K ║ L ║ : ║ " ║ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ -║ Z ║ X ║ C ║ V ║ B ║ N ║ M ║ < ║ > ║ ? ║ ▲ ║░░░░░░░░░║ +║ Z ║ X ║ C ║ V ║ B ║ N ║ M ║ < ║ > ║ ? ║ ║░░░░░░░░░║ ╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ -║Ctrl║ Fn ║░░░░║AltG║ Space ║ _ ║ + ║ ◀ ║ ▼ ║ ▶ ║Ctrl║ +║ ║ ║░░░░║ ║ ║ _ ║ + ║ ║ ║ ║ ║ ╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ -2: mod alt +2: mod altgr ╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ -║ ║ ¹ ║ ² ║ ³ ║ ║ € ║ ║ ║ ║ ║ ║Backspace║ +║ ║ ¹ ║ ² ║ ³ ║ ║ € ║ ║ ║ ║ ║ ║ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ ║ ä ║ ║ ║ ║ ║ ü ║ ║ ║ ║ ö ║ « ║ » ║ ¬ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ -║ ║ ß ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ Return ║ +║ ║ ß ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ -║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ¿ ║ ▲ ║ Shift ║ +║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ¿ ║ ║ ║ ╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ -║Ctrl║ Fn ║Shft║░░░░║ Space ║ ║ ║ ◀ ║ ▼ ║ ▶ ║Ctrl║ +║ ║ ║ ║░░░░║ ║ ║ ║ ║ ║ ║ ║ ╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ 3: mod fn ╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ @@ -50,8 +51,8 @@ It is based on the "English (intl., with AltGr dead keys)" layout. ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ` ║ Super ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ -║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║PgUp║ Shift ║ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║PgUp║ ║ ╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ -║Ctrl║░░░░║Shft║AltG║ Tab ║ ║ ║Pos1║PgDn║ End║Ctrl║ +║ ║░░░░║ ║ ║ Tab ║ ║ ║Pos1║PgDn║ End║ ║ ╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ ``` From 725bf551684ee117cea6e60208289ecb043c6593 Mon Sep 17 00:00:00 2001 From: "Ricardo (XenGi) Band" Date: Sun, 11 Jun 2023 19:51:12 +0200 Subject: [PATCH 14/99] updated to fit qmk standards --- keyboards/mkbd65/README.md | 21 ++- keyboards/mkbd65/config.h | 159 +----------------- keyboards/mkbd65/info.json | 20 +++ keyboards/mkbd65/keymaps/ansi/README.md | 2 +- keyboards/mkbd65/keymaps/ansi/config.h | 19 --- keyboards/mkbd65/keymaps/ansi/keymap.c | 49 ++---- keyboards/mkbd65/keymaps/de/README.md | 56 ++++++ keyboards/mkbd65/keymaps/de/keymap.c | 23 +++ .../mkbd65/keymaps/{default => en-us-intl} | 0 keyboards/mkbd65/keymaps/iso/README.md | 2 +- keyboards/mkbd65/keymaps/iso/config.h | 19 --- keyboards/mkbd65/keymaps/iso/keymap.c | 27 +-- keyboards/mkbd65/mkbd65.c | 43 ----- keyboards/mkbd65/rev0/info.json | 147 ++++++++++++++++ keyboards/mkbd65/rev0/mkbd65.c | 4 + keyboards/mkbd65/{ => rev0}/mkbd65.h | 48 ++---- keyboards/mkbd65/rev0/rules.mk | 9 + keyboards/mkbd65/rev1/info.json | 157 +++++++++++++++++ keyboards/mkbd65/rev1/mkbd65.c | 4 + keyboards/mkbd65/rev1/mkbd65.h | 42 +++++ keyboards/mkbd65/rev1/rules.mk | 3 + keyboards/mkbd65/rules.mk | 85 +--------- 22 files changed, 530 insertions(+), 409 deletions(-) create mode 100644 keyboards/mkbd65/info.json delete mode 100644 keyboards/mkbd65/keymaps/ansi/config.h create mode 100644 keyboards/mkbd65/keymaps/de/README.md create mode 100644 keyboards/mkbd65/keymaps/de/keymap.c rename keyboards/mkbd65/keymaps/{default => en-us-intl} (100%) delete mode 100644 keyboards/mkbd65/keymaps/iso/config.h delete mode 100644 keyboards/mkbd65/mkbd65.c create mode 100644 keyboards/mkbd65/rev0/info.json create mode 100644 keyboards/mkbd65/rev0/mkbd65.c rename keyboards/mkbd65/{ => rev0}/mkbd65.h (65%) create mode 100644 keyboards/mkbd65/rev0/rules.mk create mode 100644 keyboards/mkbd65/rev1/info.json create mode 100644 keyboards/mkbd65/rev1/mkbd65.c create mode 100644 keyboards/mkbd65/rev1/mkbd65.h create mode 100644 keyboards/mkbd65/rev1/rules.mk diff --git a/keyboards/mkbd65/README.md b/keyboards/mkbd65/README.md index f30b7c91ea..817bde28b3 100644 --- a/keyboards/mkbd65/README.md +++ b/keyboards/mkbd65/README.md @@ -11,16 +11,31 @@ A mobile keyboard addon for modern smartphones. Flashing this keyboard with `en-us-intl` layout (after setting up your build environment): ``` -qmk flash -kb mkbd65 -km en-us-intl +qmk flash -kb mkbd65:rev1 -km en-us-intl ``` Available layouts: - en-us-intl (ansi) - - de-de (iso) + - de (iso) You can find community provided layouts here: https://gitlab.com/mkbd65/community +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). + --- -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). +Copyright 2023 XenGi mkbd65@xengi.de @XenGi + +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 . diff --git a/keyboards/mkbd65/config.h b/keyboards/mkbd65/config.h index 8eff7c175d..4ac3a7eaf5 100644 --- a/keyboards/mkbd65/config.h +++ b/keyboards/mkbd65/config.h @@ -1,160 +1,13 @@ -/* -Copyright 2022 XenGi - -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 XenGi (@XenGi) +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#include "config_common.h" - -/* USB Device descriptor parameter */ -#define VENDOR_ID 0x1209 -#define PRODUCT_ID 0x4803 -#define DEVICE_VER 0x0002 -#define MANUFACTURER XenGi -#define PRODUCT mkbd65 rev1 -#define DESCRIPTION Custom keyboard addon for smartphones - -/* key matrix size */ -#define MATRIX_ROWS 5 -#define MATRIX_COLS 13 - -/* - * Keyboard Matrix Assignments - * - * Change this to how you wired your keyboard - * COLS: AVR pins used for columns, left to right - * ROWS: AVR pins used for rows, top to bottom - * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) - * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) - * -*/ -#define MATRIX_COL_PINS { D4, D7, B4, B5, B6, C6, C7, F7, F6, F5, F4, F1, F0 } -#define MATRIX_ROW_PINS { D5, D3, D2, D1, D0 } -#define UNUSED_PINS { B3, B2, B1, B0, E6 } - -/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ -#define DIODE_DIRECTION ROW2COL - -/* (back)light configuration */ -#define BACKLIGHT_PIN B7 -#define BACKLIGHT_BREATHING -#define BACKLIGHT_LEVELS 3 -#define BACKLIGHT_ON_STATE 1 - -/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ -#define DEBOUNCING_DELAY 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -// #define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -// #define LOCKING_RESYNC_ENABLE - -/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. - * This is userful for the Windows task manager shortcut (ctrl+shift+esc). - */ -#define GRAVE_ESC_CTRL_OVERRIDE - -/* - * Force NKRO - * - * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved - * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the - * makefile for this to work.) - * - * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) - * until the next keyboard reset. - * - * NKRO may prevent your keystrokes from being detected in the BIOS, but it is - * fully operational during normal computer usage. - * - * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) - * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by - * bootmagic, NKRO mode will always be enabled until it is toggled again during a - * power-up. - * - */ -//#define FORCE_NKRO - -/* - * Magic Key Options - * - * Magic keys are hotkey commands that allow control over firmware functions of - * the keyboard. They are best used in combination with the HID Listen program, - * found here: https://www.pjrc.com/teensy/hid_listen.html - * - * The options below allow the magic key functionality to be changed. This is - * useful if your keyboard/keypad is missing keys and you want magic key support. - * - */ - -/* key combination for magic key command */ -#define IS_COMMAND() ( \ - keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ -) - -/* control how magic key switches layers */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false - -/* override magic key keymap */ -//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS -//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM -//#define MAGIC_KEY_HELP1 H -//#define MAGIC_KEY_HELP2 SLASH -//#define MAGIC_KEY_DEBUG D -//#define MAGIC_KEY_DEBUG_MATRIX X -//#define MAGIC_KEY_DEBUG_KBD K -//#define MAGIC_KEY_DEBUG_MOUSE M -//#define MAGIC_KEY_VERSION V -//#define MAGIC_KEY_STATUS S -//#define MAGIC_KEY_CONSOLE C -//#define MAGIC_KEY_LAYER0_ALT1 ESC -//#define MAGIC_KEY_LAYER0_ALT2 GRAVE -//#define MAGIC_KEY_LAYER0 0 -//#define MAGIC_KEY_LAYER1 1 -//#define MAGIC_KEY_LAYER2 2 -//#define MAGIC_KEY_LAYER3 3 -//#define MAGIC_KEY_LAYER4 4 -//#define MAGIC_KEY_LAYER5 5 -//#define MAGIC_KEY_LAYER6 6 -//#define MAGIC_KEY_LAYER7 7 -//#define MAGIC_KEY_LAYER8 8 -//#define MAGIC_KEY_LAYER9 9 -//#define MAGIC_KEY_BOOTLOADER PAUSE -//#define MAGIC_KEY_LOCK CAPS -//#define MAGIC_KEY_EEPROM E -//#define MAGIC_KEY_NKRO N -//#define MAGIC_KEY_SLEEP_LED Z - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ +// disable debugging //#define NO_DEBUG - -/* disable print */ +// disable printing/debugging using hid_listen //#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER +// disable tap dance and other tapping features //#define NO_ACTION_TAPPING +// disable one-shot modifiers //#define NO_ACTION_ONESHOT -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION diff --git a/keyboards/mkbd65/info.json b/keyboards/mkbd65/info.json new file mode 100644 index 0000000000..aea164d043 --- /dev/null +++ b/keyboards/mkbd65/info.json @@ -0,0 +1,20 @@ +{ + "keyboard_name": "mkbd65", + "manufacturer": "XenGi", + "url": "https://mkbd65.xengi.de", + "maintainer": "XenGi", + "author": ["XenGi"], + "usb": { + "vid": "0x1209", + "pid": "0x4803" + }, + "debounce": 5, + "diode_direction": "ROW2COL", + "bootmagic": { + "enabled": true, + "matrix": [0, 0] + }, + "tags": ["mobile", "65%"], + "description": "A mobile keyboard addon for modern smartphones. Fits any smartphones within some minimal size requirements. Supports any keyboard layout you want, as long as it doesn't need more keys.", + "short": "A mobile keyboard addon for modern smartphones." +} diff --git a/keyboards/mkbd65/keymaps/ansi/README.md b/keyboards/mkbd65/keymaps/ansi/README.md index b394d98f2c..96e8f7bb14 100644 --- a/keyboards/mkbd65/keymaps/ansi/README.md +++ b/keyboards/mkbd65/keymaps/ansi/README.md @@ -1,4 +1,4 @@ -# The English US International keymap for mkbd65 by XenGi +# The English US International keymap for mkbd65 rev0 by XenGi This is the default layout for the mkbd65 keyboard. You can use it as a reference for other layouts. diff --git a/keyboards/mkbd65/keymaps/ansi/config.h b/keyboards/mkbd65/keymaps/ansi/config.h deleted file mode 100644 index b0d0727509..0000000000 --- a/keyboards/mkbd65/keymaps/ansi/config.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright 2022 XenGi - * - * 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 . - */ - -#pragma once - -// place overrides here diff --git a/keyboards/mkbd65/keymaps/ansi/keymap.c b/keyboards/mkbd65/keymaps/ansi/keymap.c index 972410b3dd..ddda2b83bc 100644 --- a/keyboards/mkbd65/keymaps/ansi/keymap.c +++ b/keyboards/mkbd65/keymaps/ansi/keymap.c @@ -1,45 +1,22 @@ -/* Copyright 2022 XenGi - * - * 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 XenGi (@XenGi) +// SPDX-License-Identifier: GPL-2.0-or-later #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT_ANSI( /* Base layer */ - KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, - 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, - KC_LCTL, MO(1), KC_LSFT, OSM(MOD_RALT), KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL + [0] = LAYOUT( /* Base layer */ + KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC, + 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, KC_RSFT, + KC_LCTL, MO(1), KC_LSFT, OSM(MOD_RALT), KC_SPC, KC_SPC, KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL ), - [1] = LAYOUT_ANSI( /* Function layer */ - RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, + [1] = LAYOUT( /* Function layer */ + RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, KC_DEL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F11, KC_F12, KC_APP, - _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_GRV, KC_LGUI, - _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PGUP, _______, - _______, _______, _______, _______, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_GRV, KC_LGUI, KC_LGUI, + _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PGUP, _______, _______, + _______, _______, _______, _______, KC_TAB, KC_TAB, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______ ) }; - -void matrix_init_user(void) { -} - -void matrix_scan_user(void) { -} - -void led_set_user(uint8_t usb_led) { -} - diff --git a/keyboards/mkbd65/keymaps/de/README.md b/keyboards/mkbd65/keymaps/de/README.md new file mode 100644 index 0000000000..f5c29d8e85 --- /dev/null +++ b/keyboards/mkbd65/keymaps/de/README.md @@ -0,0 +1,56 @@ +# The German keymap for mkbd65 rev1 by XenGi + +This is the german layout for the mkbd65 keyboard. You can use it as a reference for other ISO based layouts. + +This is the key matrix (no label means the key from layer 0 will be used): + +``` +0: no mod +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ Esc║ 1 ║ 2 ║ 3 ║ 4 ║ 5 ║ 6 ║ 7 ║ 8 ║ 9 ║ 0 ║Backspace║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ q ║ w ║ e ║ r ║ t ║ z ║ u ║ i ║ o ║ p ║ ü ║ + ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ Ret║ +║ a ║ s ║ d ║ f ║ g ║ h ║ j ║ k ║ l ║ ö ║ ä ║ # ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ y ║ x ║ c ║ v ║ b ║ n ║ m ║ , ║ . ║ - ║ ▲ ║ < ║Shft║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╬════╣ +║Ctrl║ Fn ║Shft║AltG║ Space ║ ß ║ ´ ║ ◀ ║ ▼ ║ ▶ ║Ctrl║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ +1: mod shift +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ ° ║ ! ║ " ║ § ║ $ ║ % ║ & ║ / ║ ( ║ ) ║ = ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ Q ║ W ║ E ║ R ║ T ║ Y ║ U ║ I ║ O ║ P ║ Ü ║ * ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ ║ +║ A ║ S ║ D ║ F ║ G ║ H ║ J ║ K ║ L ║ Ö ║ Ä ║ ' ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ Z ║ X ║ C ║ V ║ B ║ N ║ M ║ ; ║ : ║ _ ║ ║ > ║░░░░║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╬════╣ +║ ║ ║░░░░║ ║ ║ ? ║ ` ║ ║ ║ ║ ║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ +2: mod altgr +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ ║ ¹ ║ ² ║ ³ ║ ║ ║ ║ { ║ [ ║ ] ║ } ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ @ ║ ║ € ║ ║ ║ ║ ║ ║ ║ ║ ║ ~ ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ ║ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ║ ║ | ║ ║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╬════╣ +║ ║ ║ ║░░░░║ ║ \ ║ ║ ║ ║ ║ ║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ +3: mod fn +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ Esc║ F1 ║ F2 ║ F3 ║ F4 ║ F5 ║ F6 ║ F7 ║ F8 ║ F9 ║ F10║ Delete ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ F11║ F12║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣Supr║ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ^ ║ ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║PgUp║ ║ ║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╬════╣ +║ ║░░░░║ ║ ║ Tab ║ ║ ║Pos1║PgDn║ End║ ║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ +``` diff --git a/keyboards/mkbd65/keymaps/de/keymap.c b/keyboards/mkbd65/keymaps/de/keymap.c new file mode 100644 index 0000000000..1246f1e8bc --- /dev/null +++ b/keyboards/mkbd65/keymaps/de/keymap.c @@ -0,0 +1,23 @@ +// Copyright 2023 XenGi (@XenGi) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H +#include "keymap_german.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( /* Base layer */ + KC_GESC, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7, DE_8, DE_9, DE_0, KC_BSPC, KC_BSPC, + DE_Q, DE_W, DE_E, DE_R, DE_T, DE_Z, DE_U, DE_I, DE_O, DE_P, DE_UDIA, DE_PLUS, KC_ENT, + DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, DE_ODIA, DE_ADIA, DE_HASH, KC_ENT, + DE_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, DE_COMM, DE_DOT, DE_MINS, KC_UP, DE_LABK, KC_RSFT, + KC_LCTL, MO(1), KC_LSFT, OSM(MOD_RALT), KC_SPC, KC_SPC, KC_SPC, DE_SS, DE_ACUT, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL + ), + + [1] = LAYOUT( /* Function layer */ + RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, KC_DEL, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F11, KC_F12, KC_APP, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_GRV, KC_LGUI, KC_LGUI, + _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PGUP, _______, _______, + _______, _______, _______, _______, KC_TAB, KC_TAB, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______ + ) +}; diff --git a/keyboards/mkbd65/keymaps/default b/keyboards/mkbd65/keymaps/en-us-intl similarity index 100% rename from keyboards/mkbd65/keymaps/default rename to keyboards/mkbd65/keymaps/en-us-intl diff --git a/keyboards/mkbd65/keymaps/iso/README.md b/keyboards/mkbd65/keymaps/iso/README.md index d08f8c1b9e..beb5cc2783 100644 --- a/keyboards/mkbd65/keymaps/iso/README.md +++ b/keyboards/mkbd65/keymaps/iso/README.md @@ -1,4 +1,4 @@ -# The iso-like keymap for mkbd65 +# The iso-like keymap for mkbd65 rev0 It's actually just ANSI but with an upright `Enter` key. diff --git a/keyboards/mkbd65/keymaps/iso/config.h b/keyboards/mkbd65/keymaps/iso/config.h deleted file mode 100644 index b0d0727509..0000000000 --- a/keyboards/mkbd65/keymaps/iso/config.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright 2022 XenGi - * - * 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 . - */ - -#pragma once - -// place overrides here diff --git a/keyboards/mkbd65/keymaps/iso/keymap.c b/keyboards/mkbd65/keymaps/iso/keymap.c index eff19b0c4f..2b59ffd0cf 100644 --- a/keyboards/mkbd65/keymaps/iso/keymap.c +++ b/keyboards/mkbd65/keymaps/iso/keymap.c @@ -1,18 +1,5 @@ -/* Copyright 2022 XenGi - * - * 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 XenGi (@XenGi) +// SPDX-License-Identifier: GPL-2.0-or-later #include QMK_KEYBOARD_H @@ -33,13 +20,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______, ), }; - -void matrix_init_user(void) { -} - -void matrix_scan_user(void) { -} - -void led_set_user(uint8_t usb_led) { -} - diff --git a/keyboards/mkbd65/mkbd65.c b/keyboards/mkbd65/mkbd65.c deleted file mode 100644 index fae93a8ea5..0000000000 --- a/keyboards/mkbd65/mkbd65.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright 2022 XenGi - * - * 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 "mkbd65.h" - -void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - - matrix_init_user(); -} - -void matrix_scan_kb(void) { - // put your looping keyboard code here - // runs every cycle (a lot) - - matrix_scan_user(); -} - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - // put your per-action keyboard code here - // runs for every action, just before processing by the firmware - - return process_record_user(keycode, record); -} - -void led_set_kb(uint8_t usb_led) { - // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here - - led_set_user(usb_led); -} diff --git a/keyboards/mkbd65/rev0/info.json b/keyboards/mkbd65/rev0/info.json new file mode 100644 index 0000000000..cea5523e84 --- /dev/null +++ b/keyboards/mkbd65/rev0/info.json @@ -0,0 +1,147 @@ +{ + "usb": { + "device_version": "0.0.0" + }, + "layouts": { + "LAYOUT_ansi": { + "layout": [ + {"x": 0, "y": 0, "label": "Esc", "matrix": [0, 0]}, + {"x": 1, "y": 0, "label": "1", "matrix": [0, 1]}, + {"x": 2, "y": 0, "label": "2", "matrix": [0, 2]}, + {"x": 3, "y": 0, "label": "3", "matrix": [0, 3]}, + {"x": 4, "y": 0, "label": "4", "matrix": [0, 4]}, + {"x": 5, "y": 0, "label": "5", "matrix": [0, 5]}, + {"x": 6, "y": 0, "label": "6", "matrix": [0, 6]}, + {"x": 7, "y": 0, "label": "7", "matrix": [0, 7]}, + {"x": 8, "y": 0, "label": "8", "matrix": [0, 8]}, + {"x": 9, "y": 0, "label": "9", "matrix": [0, 9]}, + {"x": 10, "y": 0, "label": "0", "matrix": [0, 10]}, + {"x": 11, "y": 0, "w": 2, "label": "Backspace", "matrix": [0, 11]}, + + {"x": 0, "y": 1, "label": "Q", "matrix": [1, 0]}, + {"x": 1, "y": 1, "label": "W", "matrix": [1, 1]}, + {"x": 2, "y": 1, "label": "E", "matrix": [1, 2]}, + {"x": 3, "y": 1, "label": "R", "matrix": [1, 3]}, + {"x": 4, "y": 1, "label": "T", "matrix": [1, 4]}, + {"x": 5, "y": 1, "label": "Y", "matrix": [1, 5]}, + {"x": 6, "y": 1, "label": "U", "matrix": [1, 6]}, + {"x": 7, "y": 1, "label": "I", "matrix": [1, 7]}, + {"x": 8, "y": 1, "label": "O", "matrix": [1, 8]}, + {"x": 9, "y": 1, "label": "P", "matrix": [1, 9]}, + {"x": 10, "y": 1, "label": "[", "matrix": [1, 10]}, + {"x": 11, "y": 1, "label": "]", "matrix": [1, 11]}, + {"x": 12, "y": 1, "label": "\\", "matrix": [1, 12]}, + + {"x": 0, "y": 2, "label": "A", "matrix": [2, 0]}, + {"x": 1, "y": 2, "label": "S", "matrix": [2, 1]}, + {"x": 2, "y": 2, "label": "D", "matrix": [2, 2]}, + {"x": 3, "y": 2, "label": "F", "matrix": [2, 3]}, + {"x": 4, "y": 2, "label": "G", "matrix": [2, 4]}, + {"x": 5, "y": 2, "label": "H", "matrix": [2, 5]}, + {"x": 6, "y": 2, "label": "J", "matrix": [2, 6]}, + {"x": 7, "y": 2, "label": "K", "matrix": [2, 7]}, + {"x": 8, "y": 2, "label": "L", "matrix": [2, 8]}, + {"x": 9, "y": 2, "label": ";", "matrix": [2, 9]}, + {"x": 10, "y": 2, "label": "'", "matrix": [2, 10]}, + {"x": 11, "y": 2, "w": 2, "label": "Enter", "matrix": [2, 11]}, + + {"x": 0, "y": 3, "label": "Z", "matrix": [3, 0]}, + {"x": 1, "y": 3, "label": "X", "matrix": [3, 1]}, + {"x": 2, "y": 3, "label": "C", "matrix": [3, 2]}, + {"x": 3, "y": 3, "label": "V", "matrix": [3, 3]}, + {"x": 4, "y": 3, "label": "B", "matrix": [3, 4]}, + {"x": 5, "y": 3, "label": "N", "matrix": [3, 5]}, + {"x": 6, "y": 3, "label": "M", "matrix": [3, 6]}, + {"x": 7, "y": 3, "label": ",", "matrix": [3, 7]}, + {"x": 8, "y": 3, "label": ".", "matrix": [3, 8]}, + {"x": 9, "y": 3, "label": "/", "matrix": [3, 9]}, + {"x": 10, "y": 3, "label": "Up", "matrix": [3, 10]}, + {"x": 11, "y": 3, "w": 2, "label": "RShift", "matrix": [3, 11]}, + + {"x": 0, "y": 4, "label": "LCtrl", "matrix": [4, 0]}, + {"x": 1, "y": 4, "label": "LShift", "matrix": [4, 1]}, + {"x": 2, "y": 4, "label": "Fn", "matrix": [4, 2]}, + {"x": 3, "y": 4, "label": "AltGr", "matrix": [4, 3]}, + {"x": 4, "y": 4, "w": 3, "label": "Space", "matrix": [4, 4]}, + {"x": 7, "y": 4, "label": "-", "matrix": [4, 7]}, + {"x": 8, "y": 4, "label": "=", "matrix": [4, 8]}, + {"x": 9, "y": 4, "label": "Left", "matrix": [4, 9]}, + {"x": 10, "y": 4, "label": "Down", "matrix": [4, 10]}, + {"x": 11, "y": 4, "label": "Right", "matrix": [4, 11]}, + {"x": 12, "y": 4, "label": "RCtrl", "matrix": [4, 12]} + ] + }, + "LAYOUT_iso": { + "layout": [ + {"x": 0, "y": 0, "label": "Esc", "matrix": [0, 0]}, + {"x": 1, "y": 0, "label": "1", "matrix": [0, 1]}, + {"x": 2, "y": 0, "label": "2", "matrix": [0, 2]}, + {"x": 3, "y": 0, "label": "3", "matrix": [0, 3]}, + {"x": 4, "y": 0, "label": "4", "matrix": [0, 4]}, + {"x": 5, "y": 0, "label": "5", "matrix": [0, 5]}, + {"x": 6, "y": 0, "label": "6", "matrix": [0, 6]}, + {"x": 7, "y": 0, "label": "7", "matrix": [0, 7]}, + {"x": 8, "y": 0, "label": "8", "matrix": [0, 8]}, + {"x": 9, "y": 0, "label": "9", "matrix": [0, 9]}, + {"x": 10, "y": 0, "label": "0", "matrix": [0, 10]}, + {"x": 11, "y": 0, "w": 2, "label": "Backspace", "matrix": [0, 11]}, + + {"x": 0, "y": 1, "label": "Q", "matrix": [1, 0]}, + {"x": 1, "y": 1, "label": "W", "matrix": [1, 1]}, + {"x": 2, "y": 1, "label": "E", "matrix": [1, 2]}, + {"x": 3, "y": 1, "label": "R", "matrix": [1, 3]}, + {"x": 4, "y": 1, "label": "T", "matrix": [1, 4]}, + {"x": 5, "y": 1, "label": "Y", "matrix": [1, 5]}, + {"x": 6, "y": 1, "label": "U", "matrix": [1, 6]}, + {"x": 7, "y": 1, "label": "I", "matrix": [1, 7]}, + {"x": 8, "y": 1, "label": "O", "matrix": [1, 8]}, + {"x": 9, "y": 1, "label": "P", "matrix": [1, 9]}, + {"x": 10, "y": 1, "label": "[", "matrix": [1, 10]}, + {"x": 11, "y": 1, "label": "]", "matrix": [1, 11]}, + + {"x": 0, "y": 2, "label": "A", "matrix": [2, 0]}, + {"x": 1, "y": 2, "label": "S", "matrix": [2, 1]}, + {"x": 2, "y": 2, "label": "D", "matrix": [2, 2]}, + {"x": 3, "y": 2, "label": "F", "matrix": [2, 3]}, + {"x": 4, "y": 2, "label": "G", "matrix": [2, 4]}, + {"x": 5, "y": 2, "label": "H", "matrix": [2, 5]}, + {"x": 6, "y": 2, "label": "J", "matrix": [2, 6]}, + {"x": 7, "y": 2, "label": "K", "matrix": [2, 7]}, + {"x": 8, "y": 2, "label": "L", "matrix": [2, 8]}, + {"x": 9, "y": 2, "label": ";", "matrix": [2, 9]}, + {"x": 10, "y": 2, "label": "'", "matrix": [2, 10]}, + {"x": 11, "y": 2, "label": "\\", "matrix": [2, 11]}, + {"x": 12, "y": 2, "h": 2, "label": "Enter", "matrix": [2, 12]}, + + {"x": 0, "y": 3, "label": "Z", "matrix": [3, 0]}, + {"x": 1, "y": 3, "label": "X", "matrix": [3, 1]}, + {"x": 2, "y": 3, "label": "C", "matrix": [3, 2]}, + {"x": 3, "y": 3, "label": "V", "matrix": [3, 3]}, + {"x": 4, "y": 3, "label": "B", "matrix": [3, 4]}, + {"x": 5, "y": 3, "label": "N", "matrix": [3, 5]}, + {"x": 6, "y": 3, "label": "M", "matrix": [3, 6]}, + {"x": 7, "y": 3, "label": ",", "matrix": [3, 7]}, + {"x": 8, "y": 3, "label": ".", "matrix": [3, 8]}, + {"x": 9, "y": 3, "label": "/", "matrix": [3, 9]}, + {"x": 10, "y": 3, "label": "Up", "matrix": [3, 10]}, + {"x": 11, "y": 3, "w": 2, "label": "RShift", "matrix": [3, 11]}, + + {"x": 0, "y": 4, "label": "LCtrl", "matrix": [4, 0]}, + {"x": 1, "y": 4, "label": "LShift", "matrix": [4, 1]}, + {"x": 2, "y": 4, "label": "Fn", "matrix": [4, 2]}, + {"x": 3, "y": 4, "label": "AltGr", "matrix": [4, 3]}, + {"x": 4, "y": 4, "w": 3, "label": "Space", "matrix": [4, 4]}, + {"x": 7, "y": 4, "label": "-", "matrix": [4, 7]}, + {"x": 8, "y": 4, "label": "=", "matrix": [4, 8]}, + {"x": 9, "y": 4, "label": "Left", "matrix": [4, 9]}, + {"x": 10, "y": 4, "label": "Down", "matrix": [4, 10]}, + {"x": 11, "y": 4, "label": "Right", "matrix": [4, 11]}, + {"x": 12, "y": 4, "label": "RCtrl", "matrix": [4, 12]} + ] + } + }, + "matrix_pins": { + "cols": ["D4", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0"], + "rows": ["D5", "D3", "D2", "D1", "D0"] + } +} diff --git a/keyboards/mkbd65/rev0/mkbd65.c b/keyboards/mkbd65/rev0/mkbd65.c new file mode 100644 index 0000000000..baca6508d4 --- /dev/null +++ b/keyboards/mkbd65/rev0/mkbd65.c @@ -0,0 +1,4 @@ +// Copyright 2023 XenGi (@XenGi) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "mkbd65.h" diff --git a/keyboards/mkbd65/mkbd65.h b/keyboards/mkbd65/rev0/mkbd65.h similarity index 65% rename from keyboards/mkbd65/mkbd65.h rename to keyboards/mkbd65/rev0/mkbd65.h index 1a53cad69f..aae0d388fa 100644 --- a/keyboards/mkbd65/mkbd65.h +++ b/keyboards/mkbd65/rev0/mkbd65.h @@ -1,24 +1,12 @@ -/* Copyright 2022 XenGi - * - * 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 XenGi (@XenGi) +// SPDX-License-Identifier: GPL-2.0-or-later + #ifndef MKBD65_H #define MKBD65_H #include "quantum.h" -/* LAYOUT_ANSI +/* LAYOUT_ansi * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ * │ │ │ │ │ │ │ │ │ │ │ │ 2.0U │ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┬───┤ @@ -38,7 +26,7 @@ * The second converts the arguments into a two-dimensional array which * represents the switch matrix. */ -#define LAYOUT_ANSI( \ +#define LAYOUT_ansi( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, \ @@ -53,20 +41,20 @@ { K40, K41, K42, K43, K44, KC_NO, KC_NO, K47, K48, K49, K410, K411, K412 } \ } -/* LAYOUT_ISO - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ - * │ │ │ │ │ │ │ │ │ │ │ │ 2.0U │ - * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┬───┤ - * │ │ │ │ │ │ │ │ │ │ │ │ │ │ - * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ │ - * │ │ │ │ │ │ │ │ │ │ │ │ │ │ - * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┤ - * │ │ │ │ │ │ │ │ │ │ │ │ 2.0U │ - * ├───┼───┼───┼───┼───┴───┴───┼───┼───┼───┼───┼───┬───┤ - * │ │ │ │ │ 3.0U │ │ │ │ │ │ │ - * └───┴───┴───┴───┴───────────┴───┴───┴───┴───┴───┴───┘ +/* LAYOUT_iso + * ╔═══╤═══╤═══╤═══╤═══╤═══╤═══╤═══╤═══╤═══╤═══╤═══════╗ + * ║ │ │ │ │ │ │ │ │ │ │ │ 2.0U ║ + * ╟───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┬───╢ + * ║ │ │ │ │ │ │ │ │ │ │ │ │ ║ + * ╟───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ ║ + * ║ │ │ │ │ │ │ │ │ │ │ │ │ ║ + * ╟───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───╢ + * ║ │ │ │ │ │ │ │ │ │ │ │ 2.0U ║ + * ╟───┼───┼───┼───┼───┴───┴───┼───┼───┼───┼───┼───┬───╢ + * ║ │ │ │ │ 3.0U │ │ │ │ │ │ ║ + * ╚═══╧═══╧═══╧═══╧═══════════╧═══╧═══╧═══╧═══╧═══╧═══╝ */ -#define LAYOUT_ISO( \ +#define LAYOUT_iso( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \ diff --git a/keyboards/mkbd65/rev0/rules.mk b/keyboards/mkbd65/rev0/rules.mk new file mode 100644 index 0000000000..94d4ac53b6 --- /dev/null +++ b/keyboards/mkbd65/rev0/rules.mk @@ -0,0 +1,9 @@ +# A list of layouts this keyboard supports. +LAYOUTS = ansi iso + +MCU = atmega32u4 +F_CPU = 16000000 +ARCH = AVR8 +F_USB = $(F_CPU) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT +BOOTLOADER = atmel-dfu diff --git a/keyboards/mkbd65/rev1/info.json b/keyboards/mkbd65/rev1/info.json new file mode 100644 index 0000000000..276775db17 --- /dev/null +++ b/keyboards/mkbd65/rev1/info.json @@ -0,0 +1,157 @@ +{ + "usb": { + "device_version": "1.0.0" + }, + "layouts": { + "LAYOUT_en-us-intl": { + "layout": [ + {"x": 0, "y": 0, "label": "Esc", "matrix": [0, 0]}, + {"x": 1, "y": 0, "label": "1", "matrix": [0, 1]}, + {"x": 2, "y": 0, "label": "2", "matrix": [0, 2]}, + {"x": 3, "y": 0, "label": "3", "matrix": [0, 3]}, + {"x": 4, "y": 0, "label": "4", "matrix": [0, 4]}, + {"x": 5, "y": 0, "label": "5", "matrix": [0, 5]}, + {"x": 6, "y": 0, "label": "6", "matrix": [0, 6]}, + {"x": 7, "y": 0, "label": "7", "matrix": [0, 7]}, + {"x": 8, "y": 0, "label": "8", "matrix": [0, 8]}, + {"x": 9, "y": 0, "label": "9", "matrix": [0, 9]}, + {"x": 10, "y": 0, "label": "0", "matrix": [0, 10]}, + {"x": 11, "y": 0, "label": "Backspace", "matrix": [0, 11]}, + {"x": 12, "y": 0, "label": "Backspace", "matrix": [0, 12]}, + + {"x": 0, "y": 1, "label": "Q", "matrix": [1, 0]}, + {"x": 1, "y": 1, "label": "W", "matrix": [1, 1]}, + {"x": 2, "y": 1, "label": "E", "matrix": [1, 2]}, + {"x": 3, "y": 1, "label": "R", "matrix": [1, 3]}, + {"x": 4, "y": 1, "label": "T", "matrix": [1, 4]}, + {"x": 5, "y": 1, "label": "Y", "matrix": [1, 5]}, + {"x": 6, "y": 1, "label": "U", "matrix": [1, 6]}, + {"x": 7, "y": 1, "label": "I", "matrix": [1, 7]}, + {"x": 8, "y": 1, "label": "O", "matrix": [1, 8]}, + {"x": 9, "y": 1, "label": "P", "matrix": [1, 9]}, + {"x": 10, "y": 1, "label": "[", "matrix": [1, 10]}, + {"x": 11, "y": 1, "label": "]", "matrix": [1, 11]}, + {"x": 12, "y": 1, "label": "\\", "matrix": [1, 12]}, + + {"x": 0, "y": 2, "label": "A", "matrix": [2, 0]}, + {"x": 1, "y": 2, "label": "S", "matrix": [2, 1]}, + {"x": 2, "y": 2, "label": "D", "matrix": [2, 2]}, + {"x": 3, "y": 2, "label": "F", "matrix": [2, 3]}, + {"x": 4, "y": 2, "label": "G", "matrix": [2, 4]}, + {"x": 5, "y": 2, "label": "H", "matrix": [2, 5]}, + {"x": 6, "y": 2, "label": "J", "matrix": [2, 6]}, + {"x": 7, "y": 2, "label": "K", "matrix": [2, 7]}, + {"x": 8, "y": 2, "label": "L", "matrix": [2, 8]}, + {"x": 9, "y": 2, "label": ";", "matrix": [2, 9]}, + {"x": 10, "y": 2, "label": "'", "matrix": [2, 10]}, + {"x": 11, "y": 2, "label": "Enter", "matrix": [2, 11]}, + {"x": 12, "y": 2, "label": "Enter", "matrix": [2, 12]}, + + {"x": 0, "y": 3, "label": "Z", "matrix": [3, 0]}, + {"x": 1, "y": 3, "label": "X", "matrix": [3, 1]}, + {"x": 2, "y": 3, "label": "C", "matrix": [3, 2]}, + {"x": 3, "y": 3, "label": "V", "matrix": [3, 3]}, + {"x": 4, "y": 3, "label": "B", "matrix": [3, 4]}, + {"x": 5, "y": 3, "label": "N", "matrix": [3, 5]}, + {"x": 6, "y": 3, "label": "M", "matrix": [3, 6]}, + {"x": 7, "y": 3, "label": ",", "matrix": [3, 7]}, + {"x": 8, "y": 3, "label": ".", "matrix": [3, 8]}, + {"x": 9, "y": 3, "label": "/", "matrix": [3, 9]}, + {"x": 10, "y": 3, "label": "Up", "matrix": [3, 10]}, + {"x": 11, "y": 3, "label": "RShift", "matrix": [3, 11]}, + {"x": 12, "y": 3, "label": "RShift", "matrix": [3, 12]}, + + {"x": 0, "y": 4, "label": "LCtrl", "matrix": [4, 0]}, + {"x": 1, "y": 4, "label": "LShift", "matrix": [4, 1]}, + {"x": 2, "y": 4, "label": "Fn", "matrix": [4, 2]}, + {"x": 3, "y": 4, "label": "AltGr", "matrix": [4, 3]}, + {"x": 4, "y": 4, "label": "Space", "matrix": [4, 4]}, + {"x": 5, "y": 4, "label": "Space", "matrix": [4, 5]}, + {"x": 6, "y": 4, "label": "Space", "matrix": [4, 6]}, + {"x": 7, "y": 4, "label": "-", "matrix": [4, 7]}, + {"x": 8, "y": 4, "label": "=", "matrix": [4, 8]}, + {"x": 9, "y": 4, "label": "Left", "matrix": [4, 9]}, + {"x": 10, "y": 4, "label": "Down", "matrix": [4, 10]}, + {"x": 11, "y": 4, "label": "Right", "matrix": [4, 11]}, + {"x": 12, "y": 4, "label": "RCtrl", "matrix": [4, 12]} + ] + }, + "LAYOUT_de": { + "layout": [ + {"x": 0, "y": 0, "label": "Esc", "matrix": [0, 0]}, + {"x": 1, "y": 0, "label": "1", "matrix": [0, 1]}, + {"x": 2, "y": 0, "label": "2", "matrix": [0, 2]}, + {"x": 3, "y": 0, "label": "3", "matrix": [0, 3]}, + {"x": 4, "y": 0, "label": "4", "matrix": [0, 4]}, + {"x": 5, "y": 0, "label": "5", "matrix": [0, 5]}, + {"x": 6, "y": 0, "label": "6", "matrix": [0, 6]}, + {"x": 7, "y": 0, "label": "7", "matrix": [0, 7]}, + {"x": 8, "y": 0, "label": "8", "matrix": [0, 8]}, + {"x": 9, "y": 0, "label": "9", "matrix": [0, 9]}, + {"x": 10, "y": 0, "label": "0", "matrix": [0, 10]}, + {"x": 11, "y": 0, "label": "Backspace", "matrix": [0, 11]}, + {"x": 12, "y": 0, "label": "Backspace", "matrix": [0, 12]}, + + {"x": 0, "y": 1, "label": "Q", "matrix": [1, 0]}, + {"x": 1, "y": 1, "label": "W", "matrix": [1, 1]}, + {"x": 2, "y": 1, "label": "E", "matrix": [1, 2]}, + {"x": 3, "y": 1, "label": "R", "matrix": [1, 3]}, + {"x": 4, "y": 1, "label": "T", "matrix": [1, 4]}, + {"x": 5, "y": 1, "label": "Z", "matrix": [1, 5]}, + {"x": 6, "y": 1, "label": "U", "matrix": [1, 6]}, + {"x": 7, "y": 1, "label": "I", "matrix": [1, 7]}, + {"x": 8, "y": 1, "label": "O", "matrix": [1, 8]}, + {"x": 9, "y": 1, "label": "P", "matrix": [1, 9]}, + {"x": 10, "y": 1, "label": "Ü", "matrix": [1, 10]}, + {"x": 11, "y": 1, "label": "+", "matrix": [1, 11]}, + {"x": 12, "y": 1, "label": "Enter", "matrix": [1, 12]}, + + {"x": 0, "y": 2, "label": "A", "matrix": [2, 0]}, + {"x": 1, "y": 2, "label": "S", "matrix": [2, 1]}, + {"x": 2, "y": 2, "label": "D", "matrix": [2, 2]}, + {"x": 3, "y": 2, "label": "F", "matrix": [2, 3]}, + {"x": 4, "y": 2, "label": "G", "matrix": [2, 4]}, + {"x": 5, "y": 2, "label": "H", "matrix": [2, 5]}, + {"x": 6, "y": 2, "label": "J", "matrix": [2, 6]}, + {"x": 7, "y": 2, "label": "K", "matrix": [2, 7]}, + {"x": 8, "y": 2, "label": "L", "matrix": [2, 8]}, + {"x": 9, "y": 2, "label": "Ö", "matrix": [2, 9]}, + {"x": 10, "y": 2, "label": "Ä", "matrix": [2, 10]}, + {"x": 11, "y": 2, "label": "#", "matrix": [2, 11]}, + {"x": 12, "y": 2, "label": "Enter", "matrix": [2, 12]}, + + {"x": 0, "y": 3, "label": "Y", "matrix": [3, 0]}, + {"x": 1, "y": 3, "label": "X", "matrix": [3, 1]}, + {"x": 2, "y": 3, "label": "C", "matrix": [3, 2]}, + {"x": 3, "y": 3, "label": "V", "matrix": [3, 3]}, + {"x": 4, "y": 3, "label": "B", "matrix": [3, 4]}, + {"x": 5, "y": 3, "label": "N", "matrix": [3, 5]}, + {"x": 6, "y": 3, "label": "M", "matrix": [3, 6]}, + {"x": 7, "y": 3, "label": ",", "matrix": [3, 7]}, + {"x": 8, "y": 3, "label": ".", "matrix": [3, 8]}, + {"x": 9, "y": 3, "label": "-", "matrix": [3, 9]}, + {"x": 10, "y": 3, "label": "Up", "matrix": [3, 10]}, + {"x": 11, "y": 3, "label": "<", "matrix": [3, 11]}, + {"x": 12, "y": 3, "label": "RShift", "matrix": [3, 12]}, + + {"x": 0, "y": 4, "label": "LCtrl", "matrix": [4, 0]}, + {"x": 1, "y": 4, "label": "LShift", "matrix": [4, 1]}, + {"x": 2, "y": 4, "label": "Fn", "matrix": [4, 2]}, + {"x": 3, "y": 4, "label": "AltGr", "matrix": [4, 3]}, + {"x": 4, "y": 4, "label": "Space", "matrix": [4, 4]}, + {"x": 5, "y": 4, "label": "Space", "matrix": [4, 5]}, + {"x": 6, "y": 4, "label": "Space", "matrix": [4, 6]}, + {"x": 7, "y": 4, "label": "ß", "matrix": [4, 7]}, + {"x": 8, "y": 4, "label": "´", "matrix": [4, 8]}, + {"x": 9, "y": 4, "label": "Left", "matrix": [4, 9]}, + {"x": 10, "y": 4, "label": "Down", "matrix": [4, 10]}, + {"x": 11, "y": 4, "label": "Right", "matrix": [4, 11]}, + {"x": 12, "y": 4, "label": "RCtrl", "matrix": [4, 12]} + ] + } + }, + "matrix_pins": { + "cols": [], + "rows": [] + } +} diff --git a/keyboards/mkbd65/rev1/mkbd65.c b/keyboards/mkbd65/rev1/mkbd65.c new file mode 100644 index 0000000000..baca6508d4 --- /dev/null +++ b/keyboards/mkbd65/rev1/mkbd65.c @@ -0,0 +1,4 @@ +// Copyright 2023 XenGi (@XenGi) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "mkbd65.h" diff --git a/keyboards/mkbd65/rev1/mkbd65.h b/keyboards/mkbd65/rev1/mkbd65.h new file mode 100644 index 0000000000..0e4293dd98 --- /dev/null +++ b/keyboards/mkbd65/rev1/mkbd65.h @@ -0,0 +1,42 @@ +// Copyright 2023 XenGi (@XenGi) +// SPDX-License-Identifier: GPL-2.0-or-later + +#ifndef MKBD65_H +#define MKBD65_H + +#include "quantum.h" + +/* LAYOUT + * ╔═══╤═══╤═══╤═══╤═══╤═══╤═══╤═══╤═══╤═══╤═══╤═══╤═══╗ + * ║ │ │ │ │ │ │ │ │ │ │ │ │ ║ + * ╟───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───╢ + * ║ │ │ │ │ │ │ │ │ │ │ │ │ ║ + * ╟───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───╢ + * ║ │ │ │ │ │ │ │ │ │ │ │ │ ║ + * ╟───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───╢ + * ║ │ │ │ │ │ │ │ │ │ │ │ │ ║ + * ╟───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───╢ + * ║ │ │ │ │ │ │ │ │ │ │ │ │ ║ + * ╚═══╧═══╧═══╧═══╧═══╧═══╧═══╧═══╧═══╧═══╧═══╧═══╧═══╝ + * This is a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ +#define LAYOUT( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412 \ +) \ +{ \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012 }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112 }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212 }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312 }, \ + { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412 } \ +} diff --git a/keyboards/mkbd65/rev1/rules.mk b/keyboards/mkbd65/rev1/rules.mk new file mode 100644 index 0000000000..84345ec0aa --- /dev/null +++ b/keyboards/mkbd65/rev1/rules.mk @@ -0,0 +1,3 @@ +# A list of layouts this keyboard supports. +LAYOUTS = en-us-intl de + \ No newline at end of file diff --git a/keyboards/mkbd65/rules.mk b/keyboards/mkbd65/rules.mk index a6bdd38bae..8e66f2e4d8 100644 --- a/keyboards/mkbd65/rules.mk +++ b/keyboards/mkbd65/rules.mk @@ -1,80 +1,7 @@ -# MCU name -MCU = atmega32u4 +DEFAULT_FOLDER = rev1 +# Enables Link Time Optimization (LTO) when compiling the keyboard. This makes the process take longer, but it can +# significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable). +LTO_ENABLE = 1 -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -# -# This will be an integer division of F_USB below, as it is sourced by -# F_USB after it has run through any CPU prescalers. Note that this value -# does not *change* the processor frequency - it should merely be updated to -# reflect the processor speed set externally so that the code can use accurate -# software delays. -F_CPU = 16000000 - - -# -# LUFA specific -# -# Target architecture (see library "Board Types" documentation). -ARCH = AVR8 - -# Input clock frequency. -# This will define a symbol, F_USB, in all source code files equal to the -# input clock frequency (before any prescaling is performed) in Hz. This value may -# differ from F_CPU if prescaling is used on the latter, and is required as the -# raw input clock is fed directly to the PLL sections of the AVR for high speed -# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' -# at the end, this will be done automatically to create a 32-bit value in your -# source code. -# -# If no clock division is performed on the input clock inside the AVR (via the -# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. -F_USB = $(F_CPU) - -# Interrupt driven control endpoint task(+60) -OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT - - -# Bootloader selection -# Teensy halfkay -# Pro Micro caterina -# Atmel DFU atmel-dfu -# LUFA DFU lufa-dfu -# QMK DFU qmk-dfu -# atmega32a bootloadHID -BOOTLOADER = atmel-dfu - - -# If you don't know the bootloader type, then you can specify the -# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line -# Teensy halfKay 512 -# Teensy++ halfKay 1024 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -# USBaspLoader 2048 -# OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = no # Mouse keys(+4700) -EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = yes # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -NKRO_ENABLE = no # USB Nkey Rollover -BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default -RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow -MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -AUDIO_ENABLE = no # Audio output on port C6 -FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches -HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) +BOOTMAGIC_ENABLE = 1 +EXTRAKEY_ENABLE = 1 From f57bc9bdca5a63636cc0e1bff5de00a39dcdd850 Mon Sep 17 00:00:00 2001 From: "Ricardo (XenGi) Band" Date: Sun, 11 Jun 2023 20:22:50 +0200 Subject: [PATCH 15/99] fix layout name --- keyboards/mkbd65/config.h | 4 ++++ keyboards/mkbd65/info.json | 4 ---- keyboards/mkbd65/keymaps/{en-us-intl => en_us_intl} | 0 keyboards/mkbd65/rev0/info.json | 2 ++ keyboards/mkbd65/rev0/rules.mk | 3 +++ keyboards/mkbd65/rev1/info.json | 2 ++ keyboards/mkbd65/rev1/rules.mk | 9 +++++++-- 7 files changed, 18 insertions(+), 6 deletions(-) rename keyboards/mkbd65/keymaps/{en-us-intl => en_us_intl} (100%) diff --git a/keyboards/mkbd65/config.h b/keyboards/mkbd65/config.h index 4ac3a7eaf5..c6367adeab 100644 --- a/keyboards/mkbd65/config.h +++ b/keyboards/mkbd65/config.h @@ -11,3 +11,7 @@ //#define NO_ACTION_TAPPING // disable one-shot modifiers //#define NO_ACTION_ONESHOT + +// disable these deprecated features by default +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION \ No newline at end of file diff --git a/keyboards/mkbd65/info.json b/keyboards/mkbd65/info.json index aea164d043..7a2cd0c8f7 100644 --- a/keyboards/mkbd65/info.json +++ b/keyboards/mkbd65/info.json @@ -4,10 +4,6 @@ "url": "https://mkbd65.xengi.de", "maintainer": "XenGi", "author": ["XenGi"], - "usb": { - "vid": "0x1209", - "pid": "0x4803" - }, "debounce": 5, "diode_direction": "ROW2COL", "bootmagic": { diff --git a/keyboards/mkbd65/keymaps/en-us-intl b/keyboards/mkbd65/keymaps/en_us_intl similarity index 100% rename from keyboards/mkbd65/keymaps/en-us-intl rename to keyboards/mkbd65/keymaps/en_us_intl diff --git a/keyboards/mkbd65/rev0/info.json b/keyboards/mkbd65/rev0/info.json index cea5523e84..5d2c940129 100644 --- a/keyboards/mkbd65/rev0/info.json +++ b/keyboards/mkbd65/rev0/info.json @@ -1,5 +1,7 @@ { "usb": { + "vid": "0x1209", + "pid": "0x4803", "device_version": "0.0.0" }, "layouts": { diff --git a/keyboards/mkbd65/rev0/rules.mk b/keyboards/mkbd65/rev0/rules.mk index 94d4ac53b6..2f6c65ff11 100644 --- a/keyboards/mkbd65/rev0/rules.mk +++ b/keyboards/mkbd65/rev0/rules.mk @@ -7,3 +7,6 @@ ARCH = AVR8 F_USB = $(F_CPU) OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT BOOTLOADER = atmel-dfu + +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +EXTRAKEY_ENABLE = yes # Audio control and System control \ No newline at end of file diff --git a/keyboards/mkbd65/rev1/info.json b/keyboards/mkbd65/rev1/info.json index 276775db17..9e3dd7105e 100644 --- a/keyboards/mkbd65/rev1/info.json +++ b/keyboards/mkbd65/rev1/info.json @@ -1,5 +1,7 @@ { "usb": { + "vid": "0x1209", + "pid": "0x4803", "device_version": "1.0.0" }, "layouts": { diff --git a/keyboards/mkbd65/rev1/rules.mk b/keyboards/mkbd65/rev1/rules.mk index 84345ec0aa..ef6c3bb862 100644 --- a/keyboards/mkbd65/rev1/rules.mk +++ b/keyboards/mkbd65/rev1/rules.mk @@ -1,3 +1,8 @@ # A list of layouts this keyboard supports. -LAYOUTS = en-us-intl de - \ No newline at end of file +LAYOUTS = en_us_intl de + +MCU = STM32F072 +BOOTLOADER = stm32-dfu + +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +EXTRAKEY_ENABLE = yes # Audio control and System control \ No newline at end of file From 6f63dca06f1d9c4c9e61725bd5479c0252aad6b7 Mon Sep 17 00:00:00 2001 From: "Ricardo (XenGi) Band" Date: Sun, 11 Jun 2023 20:58:20 +0200 Subject: [PATCH 16/99] rev0 compiles --- keyboards/mkbd65/config.h | 4 -- keyboards/mkbd65/keymaps/ansi/keymap.c | 20 +++---- keyboards/mkbd65/keymaps/de/keymap.c | 4 +- keyboards/mkbd65/keymaps/en_us_intl | 1 - keyboards/mkbd65/keymaps/en_us_intl/README.md | 58 +++++++++++++++++++ keyboards/mkbd65/keymaps/en_us_intl/keymap.c | 22 +++++++ keyboards/mkbd65/keymaps/iso/keymap.c | 12 ++-- keyboards/mkbd65/rev0/rules.mk | 6 -- keyboards/mkbd65/rev1/info.json | 6 +- keyboards/mkbd65/rev1/mkbd65.h | 4 +- keyboards/mkbd65/rev1/rules.mk | 6 -- keyboards/mkbd65/rules.mk | 5 +- 12 files changed, 106 insertions(+), 42 deletions(-) delete mode 120000 keyboards/mkbd65/keymaps/en_us_intl create mode 100644 keyboards/mkbd65/keymaps/en_us_intl/README.md create mode 100644 keyboards/mkbd65/keymaps/en_us_intl/keymap.c diff --git a/keyboards/mkbd65/config.h b/keyboards/mkbd65/config.h index c6367adeab..4ac3a7eaf5 100644 --- a/keyboards/mkbd65/config.h +++ b/keyboards/mkbd65/config.h @@ -11,7 +11,3 @@ //#define NO_ACTION_TAPPING // disable one-shot modifiers //#define NO_ACTION_ONESHOT - -// disable these deprecated features by default -#define NO_ACTION_MACRO -#define NO_ACTION_FUNCTION \ No newline at end of file diff --git a/keyboards/mkbd65/keymaps/ansi/keymap.c b/keyboards/mkbd65/keymaps/ansi/keymap.c index ddda2b83bc..fb5f196098 100644 --- a/keyboards/mkbd65/keymaps/ansi/keymap.c +++ b/keyboards/mkbd65/keymaps/ansi/keymap.c @@ -4,19 +4,19 @@ #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( /* Base layer */ - KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC, + [0] = LAYOUT_ansi( /* Base layer */ + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, KC_RSFT, - KC_LCTL, MO(1), KC_LSFT, OSM(MOD_RALT), KC_SPC, KC_SPC, KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL + 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_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, + KC_LCTL, MO(1), KC_LSFT, OSM(MOD_RALT), KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL ), - [1] = LAYOUT( /* Function layer */ - RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, KC_DEL, + [1] = LAYOUT_ansi( /* Function layer */ + QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F11, KC_F12, KC_APP, - _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_GRV, KC_LGUI, KC_LGUI, - _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PGUP, _______, _______, - _______, _______, _______, _______, KC_TAB, KC_TAB, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_GRV, KC_LGUI, + _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PGUP, _______, + _______, _______, _______, _______, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______ ) }; diff --git a/keyboards/mkbd65/keymaps/de/keymap.c b/keyboards/mkbd65/keymaps/de/keymap.c index 1246f1e8bc..6ba90e876f 100644 --- a/keyboards/mkbd65/keymaps/de/keymap.c +++ b/keyboards/mkbd65/keymaps/de/keymap.c @@ -6,7 +6,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT( /* Base layer */ - KC_GESC, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7, DE_8, DE_9, DE_0, KC_BSPC, KC_BSPC, + QK_GESC, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7, DE_8, DE_9, DE_0, KC_BSPC, KC_BSPC, DE_Q, DE_W, DE_E, DE_R, DE_T, DE_Z, DE_U, DE_I, DE_O, DE_P, DE_UDIA, DE_PLUS, KC_ENT, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, DE_ODIA, DE_ADIA, DE_HASH, KC_ENT, DE_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, DE_COMM, DE_DOT, DE_MINS, KC_UP, DE_LABK, KC_RSFT, @@ -14,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), [1] = LAYOUT( /* Function layer */ - RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, KC_DEL, + QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, KC_DEL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F11, KC_F12, KC_APP, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_GRV, KC_LGUI, KC_LGUI, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PGUP, _______, _______, diff --git a/keyboards/mkbd65/keymaps/en_us_intl b/keyboards/mkbd65/keymaps/en_us_intl deleted file mode 120000 index 44ad4f4f7e..0000000000 --- a/keyboards/mkbd65/keymaps/en_us_intl +++ /dev/null @@ -1 +0,0 @@ -ansi \ No newline at end of file diff --git a/keyboards/mkbd65/keymaps/en_us_intl/README.md b/keyboards/mkbd65/keymaps/en_us_intl/README.md new file mode 100644 index 0000000000..96e8f7bb14 --- /dev/null +++ b/keyboards/mkbd65/keymaps/en_us_intl/README.md @@ -0,0 +1,58 @@ +# The English US International keymap for mkbd65 rev0 by XenGi + +This is the default layout for the mkbd65 keyboard. You can use it as a reference for other layouts. + +It is based on the "English (intl., with AltGr dead keys)" layout. + +This is the key matrix (no label means the key from layer 0 will be used): + +``` +0: no mod +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ Esc║ 1 ║ 2 ║ 3 ║ 4 ║ 5 ║ 6 ║ 7 ║ 8 ║ 9 ║ 0 ║Backspace║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ q ║ w ║ e ║ r ║ t ║ y ║ u ║ i ║ o ║ p ║ [ ║ ] ║ \ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ +║ a ║ s ║ d ║ f ║ g ║ h ║ j ║ k ║ l ║ ; ║ ' ║ Return ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ +║ z ║ x ║ c ║ v ║ b ║ n ║ m ║ , ║ . ║ / ║ ▲ ║ Shift ║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ +║Ctrl║ Fn ║Shft║AltG║ Space ║ - ║ = ║ ◀ ║ ▼ ║ ▶ ║Ctrl║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ +1: mod shift +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ ~ ║ ! ║ @ ║ # ║ $ ║ % ║ ^ ║ & ║ * ║ ( ║ ) ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ Q ║ W ║ E ║ R ║ T ║ Y ║ U ║ I ║ O ║ P ║ { ║ } ║ | ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ +║ A ║ S ║ D ║ F ║ G ║ H ║ J ║ K ║ L ║ : ║ " ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ +║ Z ║ X ║ C ║ V ║ B ║ N ║ M ║ < ║ > ║ ? ║ ║░░░░░░░░░║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ +║ ║ ║░░░░║ ║ ║ _ ║ + ║ ║ ║ ║ ║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ +2: mod altgr +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ ║ ¹ ║ ² ║ ³ ║ ║ € ║ ║ ║ ║ ║ ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ ä ║ ║ ║ ║ ║ ü ║ ║ ║ ║ ö ║ « ║ » ║ ¬ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ +║ ║ ß ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ +║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ¿ ║ ║ ║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ +║ ║ ║ ║░░░░║ ║ ║ ║ ║ ║ ║ ║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ +3: mod fn +╔════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦════╦═════════╗ +║ Esc║ F1 ║ F2 ║ F3 ║ F4 ║ F5 ║ F6 ║ F7 ║ F8 ║ F9 ║ F10║ Delete ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ F11║ F12║ ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ` ║ Super ║ +╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║PgUp║ ║ +╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ +║ ║░░░░║ ║ ║ Tab ║ ║ ║Pos1║PgDn║ End║ ║ +╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ +``` diff --git a/keyboards/mkbd65/keymaps/en_us_intl/keymap.c b/keyboards/mkbd65/keymaps/en_us_intl/keymap.c new file mode 100644 index 0000000000..96d7855ff8 --- /dev/null +++ b/keyboards/mkbd65/keymaps/en_us_intl/keymap.c @@ -0,0 +1,22 @@ +// Copyright 2023 XenGi (@XenGi) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_all( /* Base layer */ + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC, + 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, KC_RSFT, + KC_LCTL, MO(1), KC_LSFT, OSM(MOD_RALT), KC_SPC, KC_SPC, KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL + ), + + [1] = LAYOUT_all( /* Function layer */ + QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, KC_DEL, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F11, KC_F12, KC_APP, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_GRV, KC_LGUI, KC_LGUI, + _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PGUP, _______, _______, + _______, _______, _______, _______, KC_TAB, KC_TAB, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______ + ) +}; diff --git a/keyboards/mkbd65/keymaps/iso/keymap.c b/keyboards/mkbd65/keymaps/iso/keymap.c index 2b59ffd0cf..a7dd99463e 100644 --- a/keyboards/mkbd65/keymaps/iso/keymap.c +++ b/keyboards/mkbd65/keymaps/iso/keymap.c @@ -4,19 +4,19 @@ #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT_ISO( /* Base layer */ - KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + [0] = LAYOUT_iso( /* Base layer */ + QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, - KC_LCTL, MO(1), KC_LSFT, OSM(MOD_RALT), KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL, + KC_LCTL, MO(1), KC_LSFT, OSM(MOD_RALT), KC_SPC, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCTL ), - [1] = LAYOUT_ISO( /* Function layer */ - RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, + [1] = LAYOUT_iso( /* Function layer */ + QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_GRV, KC_APP, KC_LGUI, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PGUP, _______, - _______, _______, _______, _______, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______, + _______, _______, _______, _______, KC_TAB, _______, _______, KC_HOME, KC_PGDN, KC_END, _______ ), }; diff --git a/keyboards/mkbd65/rev0/rules.mk b/keyboards/mkbd65/rev0/rules.mk index 2f6c65ff11..2d23977af0 100644 --- a/keyboards/mkbd65/rev0/rules.mk +++ b/keyboards/mkbd65/rev0/rules.mk @@ -1,12 +1,6 @@ -# A list of layouts this keyboard supports. -LAYOUTS = ansi iso - MCU = atmega32u4 F_CPU = 16000000 ARCH = AVR8 F_USB = $(F_CPU) OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT BOOTLOADER = atmel-dfu - -BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -EXTRAKEY_ENABLE = yes # Audio control and System control \ No newline at end of file diff --git a/keyboards/mkbd65/rev1/info.json b/keyboards/mkbd65/rev1/info.json index 9e3dd7105e..42ed48f137 100644 --- a/keyboards/mkbd65/rev1/info.json +++ b/keyboards/mkbd65/rev1/info.json @@ -5,7 +5,7 @@ "device_version": "1.0.0" }, "layouts": { - "LAYOUT_en-us-intl": { + "LAYOUT_en_us_intl": { "layout": [ {"x": 0, "y": 0, "label": "Esc", "matrix": [0, 0]}, {"x": 1, "y": 0, "label": "1", "matrix": [0, 1]}, @@ -153,7 +153,7 @@ } }, "matrix_pins": { - "cols": [], - "rows": [] + "cols": ["A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "B2", "B10", "B11"], + "rows": ["B12", "B13", "B14", "B15", "A8"] } } diff --git a/keyboards/mkbd65/rev1/mkbd65.h b/keyboards/mkbd65/rev1/mkbd65.h index 0e4293dd98..759166bbcf 100644 --- a/keyboards/mkbd65/rev1/mkbd65.h +++ b/keyboards/mkbd65/rev1/mkbd65.h @@ -26,7 +26,7 @@ * The second converts the arguments into a two-dimensional array which * represents the switch matrix. */ -#define LAYOUT( \ +#define LAYOUT_all( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \ @@ -40,3 +40,5 @@ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312 }, \ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412 } \ } + +#endif diff --git a/keyboards/mkbd65/rev1/rules.mk b/keyboards/mkbd65/rev1/rules.mk index ef6c3bb862..e5116166cc 100644 --- a/keyboards/mkbd65/rev1/rules.mk +++ b/keyboards/mkbd65/rev1/rules.mk @@ -1,8 +1,2 @@ -# A list of layouts this keyboard supports. -LAYOUTS = en_us_intl de - MCU = STM32F072 BOOTLOADER = stm32-dfu - -BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -EXTRAKEY_ENABLE = yes # Audio control and System control \ No newline at end of file diff --git a/keyboards/mkbd65/rules.mk b/keyboards/mkbd65/rules.mk index 8e66f2e4d8..cc4a04ee68 100644 --- a/keyboards/mkbd65/rules.mk +++ b/keyboards/mkbd65/rules.mk @@ -1,7 +1,6 @@ DEFAULT_FOLDER = rev1 # Enables Link Time Optimization (LTO) when compiling the keyboard. This makes the process take longer, but it can # significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable). -LTO_ENABLE = 1 +LTO_ENABLE = yes -BOOTMAGIC_ENABLE = 1 -EXTRAKEY_ENABLE = 1 +EXTRAKEY_ENABLE = yes # Audio control and System control From 9455c6adec9285438ef63d5b0538505da1b0479f Mon Sep 17 00:00:00 2001 From: Nick Brassel Date: Sat, 6 Sep 2025 17:57:39 +1000 Subject: [PATCH 17/99] Branch point for 2025q4 breaking changes --- readme.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/readme.md b/readme.md index 62aed12066..e5c0d41b7b 100644 --- a/readme.md +++ b/readme.md @@ -1,3 +1,7 @@ +# THIS IS THE DEVELOP BRANCH + +Warning- This is the `develop` branch of QMK Firmware. You may encounter broken code here. Please see [Breaking Changes](https://docs.qmk.fm/#/breaking_changes) for more information. + # Quantum Mechanical Keyboard Firmware [![Current Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags) From 248d7c1d6d0cc9d5a5403e81e7a59ae6f3ebbea1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Sat, 6 Sep 2025 17:04:42 +0800 Subject: [PATCH 18/99] Simplify tap_code16_delay (#25595) * Replaced for-loop with single wait_ms(delay) call * Improve code consistency with tap_code_delay --- quantum/quantum.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/quantum/quantum.c b/quantum/quantum.c index 09e5fe1dac..128f8fb66d 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -157,9 +157,7 @@ __attribute__((weak)) void unregister_code16(uint16_t code) { */ __attribute__((weak)) void tap_code16_delay(uint16_t code, uint16_t delay) { register_code16(code); - for (uint16_t i = delay; i > 0; i--) { - wait_ms(1); - } + wait_ms(delay); unregister_code16(code); } From d8ce8cd204313a15a600a9d4d3038f76d267f0b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Sun, 7 Sep 2025 05:43:01 +0800 Subject: [PATCH 19/99] Simplify hue calculation in raindrops animation (#25587) --- quantum/rgb_matrix/animations/raindrops_anim.h | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/quantum/rgb_matrix/animations/raindrops_anim.h b/quantum/rgb_matrix/animations/raindrops_anim.h index d4f79adb56..f3656a5c0d 100644 --- a/quantum/rgb_matrix/animations/raindrops_anim.h +++ b/quantum/rgb_matrix/animations/raindrops_anim.h @@ -7,14 +7,9 @@ static void raindrops_set_color(uint8_t i, effect_params_t* params) { hsv_t hsv = rgb_matrix_config.hsv; // Take the shortest path between hues - int16_t deltaH = ((hsv.h + 180) % 360 - hsv.h) / 4; - if (deltaH > 127) { - deltaH -= 256; - } else if (deltaH < -127) { - deltaH += 256; - } - + int8_t deltaH = (int8_t)((hsv.h + 128) - hsv.h) / 4; hsv.h += (deltaH * random8_max(3)); + rgb_t rgb = rgb_matrix_hsv_to_rgb(hsv); rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); } From 19527e8399184c8496400f4b8f3d79af8a847c36 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sat, 6 Sep 2025 22:48:07 +0100 Subject: [PATCH 20/99] Remove duplication of RP2040 config defaults (#25563) --- keyboards/an_achronism/tetromino/config.h | 31 ------------------- keyboards/archetype/minervalx/config.h | 4 +-- keyboards/boardsource/equals/48/config.h | 3 -- keyboards/boardsource/equals/60/config.h | 3 -- keyboards/boardsource/lulu/rp2040/config.h | 4 +-- keyboards/boardsource/unicorne/config.h | 2 -- keyboards/cannonkeys/ortho48v2/config.h | 3 -- keyboards/cannonkeys/ortho60v2/config.h | 3 -- keyboards/chew/mono/config.h | 8 ----- keyboards/chew/split/config.h | 8 ----- keyboards/cornia/config.h | 3 -- keyboards/fruitykeeb/fruitbar/r2/config.h | 3 -- keyboards/gl516/xr63gl/config.h | 1 - keyboards/handwired/alcor_dactyl/config.h | 20 ------------ .../dactyl_manuform_pi_pico/config.h | 3 +- keyboards/silakka54/config.h | 1 - 16 files changed, 4 insertions(+), 96 deletions(-) delete mode 100644 keyboards/an_achronism/tetromino/config.h delete mode 100644 keyboards/chew/mono/config.h delete mode 100644 keyboards/chew/split/config.h diff --git a/keyboards/an_achronism/tetromino/config.h b/keyboards/an_achronism/tetromino/config.h deleted file mode 100644 index c7087edb88..0000000000 --- a/keyboards/an_achronism/tetromino/config.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -Copyright 2022 an_achronism (@an-achronism) - -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 . -*/ - -#pragma once - -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT diff --git a/keyboards/archetype/minervalx/config.h b/keyboards/archetype/minervalx/config.h index 3b5eb8e56a..5c99920073 100644 --- a/keyboards/archetype/minervalx/config.h +++ b/keyboards/archetype/minervalx/config.h @@ -16,7 +16,5 @@ #pragma once -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET - #define BACKLIGHT_PWM_DRIVER PWMD5 -#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A \ No newline at end of file +#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A diff --git a/keyboards/boardsource/equals/48/config.h b/keyboards/boardsource/equals/48/config.h index 39d114872f..7132189cdd 100644 --- a/keyboards/boardsource/equals/48/config.h +++ b/keyboards/boardsource/equals/48/config.h @@ -2,9 +2,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U - #define AUDIO_PIN GP29 #define AUDIO_PWM_DRIVER PWMD6 #define AUDIO_PWM_CHANNEL RP2040_PWM_CHANNEL_B diff --git a/keyboards/boardsource/equals/60/config.h b/keyboards/boardsource/equals/60/config.h index 39d114872f..7132189cdd 100644 --- a/keyboards/boardsource/equals/60/config.h +++ b/keyboards/boardsource/equals/60/config.h @@ -2,9 +2,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U - #define AUDIO_PIN GP29 #define AUDIO_PWM_DRIVER PWMD6 #define AUDIO_PWM_CHANNEL RP2040_PWM_CHANNEL_B diff --git a/keyboards/boardsource/lulu/rp2040/config.h b/keyboards/boardsource/lulu/rp2040/config.h index 2c86e48e6f..5a43521918 100644 --- a/keyboards/boardsource/lulu/rp2040/config.h +++ b/keyboards/boardsource/lulu/rp2040/config.h @@ -1,11 +1,11 @@ // Copyright 2022 jack (@waffle87) // SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U + #define SERIAL_USART_FULL_DUPLEX #define SERIAL_USART_TX_PIN GP0 #define SERIAL_USART_RX_PIN GP1 + #define I2C_DRIVER I2CD1 #define I2C1_SDA_PIN GP22 #define I2C1_SCL_PIN GP23 diff --git a/keyboards/boardsource/unicorne/config.h b/keyboards/boardsource/unicorne/config.h index e79c00f14d..843d377cbe 100644 --- a/keyboards/boardsource/unicorne/config.h +++ b/keyboards/boardsource/unicorne/config.h @@ -2,8 +2,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET - #define I2C_DRIVER I2CD1 #define I2C1_SDA_PIN GP22 #define I2C1_SCL_PIN GP23 diff --git a/keyboards/cannonkeys/ortho48v2/config.h b/keyboards/cannonkeys/ortho48v2/config.h index 2af75a1715..18edaab2ab 100644 --- a/keyboards/cannonkeys/ortho48v2/config.h +++ b/keyboards/cannonkeys/ortho48v2/config.h @@ -16,8 +16,5 @@ along with this program. If not, see . */ #pragma once -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET // Activates the double-tap behavior -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U // Timeout window in ms in which the double tap can occur. - #define BACKLIGHT_PWM_DRIVER PWMD6 #define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A diff --git a/keyboards/cannonkeys/ortho60v2/config.h b/keyboards/cannonkeys/ortho60v2/config.h index 2af75a1715..18edaab2ab 100644 --- a/keyboards/cannonkeys/ortho60v2/config.h +++ b/keyboards/cannonkeys/ortho60v2/config.h @@ -16,8 +16,5 @@ along with this program. If not, see . */ #pragma once -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET // Activates the double-tap behavior -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U // Timeout window in ms in which the double tap can occur. - #define BACKLIGHT_PWM_DRIVER PWMD6 #define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A diff --git a/keyboards/chew/mono/config.h b/keyboards/chew/mono/config.h deleted file mode 100644 index bb047c0adf..0000000000 --- a/keyboards/chew/mono/config.h +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2024 Florent (@FLinguenheld) -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -/* Flash */ -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET // Activates the double-tap behavior -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U // In ms in which the double tap can occur diff --git a/keyboards/chew/split/config.h b/keyboards/chew/split/config.h deleted file mode 100644 index bb047c0adf..0000000000 --- a/keyboards/chew/split/config.h +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2024 Florent (@FLinguenheld) -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -/* Flash */ -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET // Activates the double-tap behavior -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U // In ms in which the double tap can occur diff --git a/keyboards/cornia/config.h b/keyboards/cornia/config.h index dbf7031b62..8aff7e6336 100644 --- a/keyboards/cornia/config.h +++ b/keyboards/cornia/config.h @@ -25,6 +25,3 @@ #define I2C_DRIVER I2CD1 #define I2C1_SDA_PIN GP10 #define I2C1_SCL_PIN GP11 - -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET // Activates the double-tap behavior -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U // Timeout window in ms in which the double tap can occur. \ No newline at end of file diff --git a/keyboards/fruitykeeb/fruitbar/r2/config.h b/keyboards/fruitykeeb/fruitbar/r2/config.h index 320889eb91..c1f6f883a6 100644 --- a/keyboards/fruitykeeb/fruitbar/r2/config.h +++ b/keyboards/fruitykeeb/fruitbar/r2/config.h @@ -19,6 +19,3 @@ along with this program. If not, see . #define I2C_DRIVER I2CD1 #define I2C1_SCL_PIN GP27 #define I2C1_SDA_PIN GP26 - -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U diff --git a/keyboards/gl516/xr63gl/config.h b/keyboards/gl516/xr63gl/config.h index 928fde7d86..d0af2e5b1d 100644 --- a/keyboards/gl516/xr63gl/config.h +++ b/keyboards/gl516/xr63gl/config.h @@ -23,4 +23,3 @@ #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED_MASK 0U diff --git a/keyboards/handwired/alcor_dactyl/config.h b/keyboards/handwired/alcor_dactyl/config.h index 42c45acdbf..3da8cebf4d 100644 --- a/keyboards/handwired/alcor_dactyl/config.h +++ b/keyboards/handwired/alcor_dactyl/config.h @@ -3,26 +3,6 @@ #pragma once - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT - -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U - #define SERIAL_USART_FULL_DUPLEX #define SERIAL_USART_TX_PIN GP10 #define SERIAL_USART_RX_PIN GP9 diff --git a/keyboards/handwired/dactyl_manuform_pi_pico/config.h b/keyboards/handwired/dactyl_manuform_pi_pico/config.h index c622149a4a..9b5e919b1b 100644 --- a/keyboards/handwired/dactyl_manuform_pi_pico/config.h +++ b/keyboards/handwired/dactyl_manuform_pi_pico/config.h @@ -2,8 +2,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U + #define SERIAL_USART_FULL_DUPLEX #define SERIAL_USART_TX_PIN GP9 #define SERIAL_USART_RX_PIN GP8 diff --git a/keyboards/silakka54/config.h b/keyboards/silakka54/config.h index 220b85cd08..b3d1742042 100644 --- a/keyboards/silakka54/config.h +++ b/keyboards/silakka54/config.h @@ -21,5 +21,4 @@ #define SERIAL_USART_RX_PIN GP1 #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 From bcc546aa3f32ad68ed0e1ae9ebd3013c6d5399b7 Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 7 Sep 2025 22:05:34 +1000 Subject: [PATCH 21/99] Update USBaspLoader ISP instructions (#25590) --- docs/isp_flashing_guide.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/isp_flashing_guide.md b/docs/isp_flashing_guide.md index 6f3f0a8f7d..1eaec3b59d 100644 --- a/docs/isp_flashing_guide.md +++ b/docs/isp_flashing_guide.md @@ -220,14 +220,18 @@ This bootloader is primarily for keyboards originally designed for the PS2AVRGB USBaspLoader is a bootloader based on V-USB that emulates a hardware USBasp device. It runs on ATmega32A and ATmega328P MCUs. -Precompiled `.hex` files are generally not available, but you can compile it yourself by setting up the QMK environment and following Coseyfannitutti's guide for the appropriate MCU: +Precompiled `.hex` files are generally not available, but you can compile it yourself by setting up the QMK environment and cloning the appropriate branch of Coseyfannitutti's USBaspLoader fork: -|MCU |Low |High |Extended|USB ID | -|-------------------------------------------------------------------------------------|------|------|--------|-----------| -|[ATmega32A](https://github.com/coseyfannitutti/discipline/tree/master/doc/bootloader)|`0x1F`|`0xC0`|*n/a* |`16C0:05DC`| -|[ATmega328P](https://github.com/coseyfannitutti/discipad/tree/master/doc/bootloader) |`0xD7`|`0xD0`|`0x04` |`16C0:05DC`| +|MCU |Low |High |Extended|USB ID | +|-----------------------------------------------------------------------------|------|------|--------|-----------| +|[ATmega32A](https://github.com/coseyfannitutti/USBaspLoader/tree/atmega32a) |`0x1F`|`0xC0`|*n/a* |`16C0:05DC`| +|[ATmega328P](https://github.com/coseyfannitutti/USBaspLoader/tree/atmega328p)|`0xD7`|`0xD0`|`0x04` |`16C0:05DC`| -Note that some boards may have their own specialized build of this bootloader in a separate repository. This will usually be linked to in the board's readme. +From there, simply `cd` to the `firmware/` directory and run `make`, which should produce a file called `main.hex`. + +:::tip +Some boards may have their own specialized build of this bootloader in a separate repository. This will usually be linked to in the board's readme. +::: ## Flashing the Bootloader From 4bd5c033c3135576010baded53c44720d8030d32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Sun, 7 Sep 2025 20:34:05 +0800 Subject: [PATCH 22/99] Refactor debounce algorithm with static allocation (#25515) * Refactor debounce counters with direct indexing * Refactor code to use array indexing for debounce_counters * Use global MATRIX_ROW_SHIFTER macro * Refactor debounce algorithm with static allocation * Converted arrays to static allocation * Standardised use of MATRIX_ROWS_PER_HAND for array sizing * Added Doxygen comments for primary debounce functions * Removed debounce_free() * Rewrite sym_defer_pr * Modernise code using sym_defer_pk as template * Format consistency with other current algorithms * Use shorter SPDX-License-Identifier * Remove ChibiOS core memory manager guard * Keep type definition within DEBOUNCE guard * Add change log * Minor optimisation refactor * Pre-calculate row_offset in per-key matrix loops * Add inline compiler hints * Improve readability with blank lines * Limit elapsed time to the maximum debounce value * Apply suggestions from code review Declare counters with "DEBOUNCE_ELAPSED" Co-authored-by: Joel Challis * Update change log to new breaking change date --------- Co-authored-by: Joel Challis --- docs/ChangeLog/20251130/PR25515.md | 3 + quantum/debounce.h | 2 - quantum/debounce/asym_eager_defer_pk.c | 163 ++++++++---------- quantum/debounce/none.c | 2 - quantum/debounce/sym_defer_g.c | 31 +--- quantum/debounce/sym_defer_pk.c | 149 ++++++++-------- quantum/debounce/sym_defer_pr.c | 148 ++++++++++------ quantum/debounce/sym_eager_pk.c | 125 +++++++------- quantum/debounce/sym_eager_pr.c | 136 +++++++-------- .../debounce/tests/debounce_test_common.cpp | 2 - 10 files changed, 369 insertions(+), 392 deletions(-) create mode 100644 docs/ChangeLog/20251130/PR25515.md diff --git a/docs/ChangeLog/20251130/PR25515.md b/docs/ChangeLog/20251130/PR25515.md new file mode 100644 index 0000000000..ccc88e0c64 --- /dev/null +++ b/docs/ChangeLog/20251130/PR25515.md @@ -0,0 +1,3 @@ +# Refactor debounce algorithm with static allocation [#25515](https://github.com/qmk/qmk_firmware/pull/25515) + +Removed dynamic memory allocation (malloc, free) from all debounce implementations for improved efficiency on embedded systems and to avoid runtime allocation overhead. Refactored state arrays to use direct indexing, simplifying code and eliminating pointer arithmetic. Standardized usage of MATRIX_ROWS_PER_HAND throughout the codebase to ensure consistent support for split keyboards. diff --git a/quantum/debounce.h b/quantum/debounce.h index cea1f2b526..30d2621d18 100644 --- a/quantum/debounce.h +++ b/quantum/debounce.h @@ -17,5 +17,3 @@ bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed); void debounce_init(uint8_t num_rows); - -void debounce_free(void); diff --git a/quantum/debounce/asym_eager_defer_pk.c b/quantum/debounce/asym_eager_defer_pk.c index b6fcdc3d4e..a385301c90 100644 --- a/quantum/debounce/asym_eager_defer_pk.c +++ b/quantum/debounce/asym_eager_defer_pk.c @@ -1,37 +1,15 @@ -/* - * Copyright 2017 Alex Ong - * Copyright 2020 Andrei Purdea - * Copyright 2021 Simon Arlott - * - * 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 . - */ - -/* -Asymetric per-key algorithm. After pressing a key, it immediately changes state, -with no further inputs accepted until DEBOUNCE milliseconds have occurred. After -releasing a key, that state is pushed after no changes occur for DEBOUNCE milliseconds. -*/ +// Copyright 2017 Alex Ong +// Copyright 2020 Andrei Purdea +// Copyright 2021 Simon Arlott +// SPDX-License-Identifier: GPL-2.0-or-later +// +// Asymetric per-key algorithm. After pressing a key, it immediately changes state, +// with no further inputs accepted until DEBOUNCE milliseconds have occurred. After +// releasing a key, that state is pushed after no changes occur for DEBOUNCE milliseconds. #include "debounce.h" #include "timer.h" -#include - -#ifdef PROTOCOL_CHIBIOS -# if CH_CFG_USE_MEMCORE == FALSE -# error ChibiOS is configured without a memory allocator. Your keyboard may have set `#define CH_CFG_USE_MEMCORE FALSE`, which is incompatible with this debounce algorithm. -# endif -#endif +#include "util.h" #ifndef DEBOUNCE # define DEBOUNCE 5 @@ -43,44 +21,29 @@ releasing a key, that state is pushed after no changes occur for DEBOUNCE millis # define DEBOUNCE 127 #endif -#define ROW_SHIFTER ((matrix_row_t)1) +#define DEBOUNCE_ELAPSED 0 +#if DEBOUNCE > 0 typedef struct { bool pressed : 1; uint8_t time : 7; } debounce_counter_t; -#if DEBOUNCE > 0 -static debounce_counter_t *debounce_counters; -static fast_timer_t last_time; -static bool counters_need_update; -static bool matrix_need_update; -static bool cooked_changed; +// Uses MATRIX_ROWS_PER_HAND instead of MATRIX_ROWS to support split keyboards +static debounce_counter_t debounce_counters[MATRIX_ROWS_PER_HAND * MATRIX_COLS] = {DEBOUNCE_ELAPSED}; +static bool counters_need_update; +static bool matrix_need_update; +static bool cooked_changed; -# define DEBOUNCE_ELAPSED 0 +static inline void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t elapsed_time); +static inline void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[]); -static void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t elapsed_time); -static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); - -// we use num_rows rather than MATRIX_ROWS to support split keyboards -void debounce_init(uint8_t num_rows) { - debounce_counters = malloc(num_rows * MATRIX_COLS * sizeof(debounce_counter_t)); - int i = 0; - for (uint8_t r = 0; r < num_rows; r++) { - for (uint8_t c = 0; c < MATRIX_COLS; c++) { - debounce_counters[i++].time = DEBOUNCE_ELAPSED; - } - } -} - -void debounce_free(void) { - free(debounce_counters); - debounce_counters = NULL; -} +void debounce_init(uint8_t num_rows) {} bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - bool updated_last = false; - cooked_changed = false; + static fast_timer_t last_time; + bool updated_last = false; + cooked_changed = false; if (counters_need_update) { fast_timer_t now = timer_read_fast(); @@ -88,12 +51,10 @@ bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool last_time = now; updated_last = true; - if (elapsed_time > UINT8_MAX) { - elapsed_time = UINT8_MAX; - } if (elapsed_time > 0) { - update_debounce_counters_and_transfer_if_expired(raw, cooked, num_rows, elapsed_time); + // Update debounce counters with elapsed timer clamped to 127 (maximum debounce) + update_debounce_counters_and_transfer_if_expired(raw, cooked, MIN(elapsed_time, 127)); } } @@ -102,74 +63,96 @@ bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool last_time = timer_read_fast(); } - transfer_matrix_values(raw, cooked, num_rows); + transfer_matrix_values(raw, cooked); } return cooked_changed; } -static void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t elapsed_time) { - debounce_counter_t *debounce_pointer = debounce_counters; - +/** + * @brief Processes per-key debounce counters and updates the debounced matrix state. + * + * This function iterates through each key in the matrix and updates its debounce counter + * based on the elapsed time. If the debounce period has expired, the debounced state is + * updated accordingly for key-down (eager) and key-up (defer) events. + * + * @param raw The current raw key state matrix. + * @param cooked The debounced key state matrix to be updated. + * @param elapsed_time The time elapsed since the last debounce update, in milliseconds. + */ +static inline void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t elapsed_time) { counters_need_update = false; matrix_need_update = false; - for (uint8_t row = 0; row < num_rows; row++) { + for (uint8_t row = 0; row < MATRIX_ROWS_PER_HAND; row++) { + uint16_t row_offset = row * MATRIX_COLS; + for (uint8_t col = 0; col < MATRIX_COLS; col++) { - matrix_row_t col_mask = (ROW_SHIFTER << col); + uint16_t index = row_offset + col; - if (debounce_pointer->time != DEBOUNCE_ELAPSED) { - if (debounce_pointer->time <= elapsed_time) { - debounce_pointer->time = DEBOUNCE_ELAPSED; + if (debounce_counters[index].time != DEBOUNCE_ELAPSED) { + if (debounce_counters[index].time <= elapsed_time) { + debounce_counters[index].time = DEBOUNCE_ELAPSED; - if (debounce_pointer->pressed) { + if (debounce_counters[index].pressed) { // key-down: eager matrix_need_update = true; } else { // key-up: defer + matrix_row_t col_mask = (MATRIX_ROW_SHIFTER << col); matrix_row_t cooked_next = (cooked[row] & ~col_mask) | (raw[row] & col_mask); cooked_changed |= cooked_next ^ cooked[row]; cooked[row] = cooked_next; } } else { - debounce_pointer->time -= elapsed_time; + debounce_counters[index].time -= elapsed_time; counters_need_update = true; } } - debounce_pointer++; } } } -static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows) { - debounce_counter_t *debounce_pointer = debounce_counters; - +/** + * @brief Applies debounced changes to the matrix state based on per-key counters. + * + * This function compares the raw and cooked key state matrices to detect changes. + * For each key, it updates the debounce counter and the debounced state according + * to the debounce algorithm. Key-down events are handled eagerly, while key-up + * events are deferred until the debounce period has elapsed. + * + * @param raw The current raw key state matrix. + * @param cooked The debounced key state matrix to be updated. + */ +static inline void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[]) { matrix_need_update = false; - for (uint8_t row = 0; row < num_rows; row++) { - matrix_row_t delta = raw[row] ^ cooked[row]; + for (uint8_t row = 0; row < MATRIX_ROWS_PER_HAND; row++) { + uint16_t row_offset = row * MATRIX_COLS; + matrix_row_t delta = raw[row] ^ cooked[row]; + for (uint8_t col = 0; col < MATRIX_COLS; col++) { - matrix_row_t col_mask = (ROW_SHIFTER << col); + uint16_t index = row_offset + col; + matrix_row_t col_mask = (MATRIX_ROW_SHIFTER << col); if (delta & col_mask) { - if (debounce_pointer->time == DEBOUNCE_ELAPSED) { - debounce_pointer->pressed = (raw[row] & col_mask); - debounce_pointer->time = DEBOUNCE; - counters_need_update = true; + if (debounce_counters[index].time == DEBOUNCE_ELAPSED) { + debounce_counters[index].pressed = (raw[row] & col_mask); + debounce_counters[index].time = DEBOUNCE; + counters_need_update = true; - if (debounce_pointer->pressed) { + if (debounce_counters[index].pressed) { // key-down: eager cooked[row] ^= col_mask; cooked_changed = true; } } - } else if (debounce_pointer->time != DEBOUNCE_ELAPSED) { - if (!debounce_pointer->pressed) { + } else if (debounce_counters[index].time != DEBOUNCE_ELAPSED) { + if (!debounce_counters[index].pressed) { // key-up: defer - debounce_pointer->time = DEBOUNCE_ELAPSED; + debounce_counters[index].time = DEBOUNCE_ELAPSED; } } - debounce_pointer++; } } } diff --git a/quantum/debounce/none.c b/quantum/debounce/none.c index 0a8ccfc4ee..0111dd6e31 100644 --- a/quantum/debounce/none.c +++ b/quantum/debounce/none.c @@ -32,5 +32,3 @@ bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool return cooked_changed; } - -void debounce_free(void) {} diff --git a/quantum/debounce/sym_defer_g.c b/quantum/debounce/sym_defer_g.c index d96758fab3..81f351c126 100644 --- a/quantum/debounce/sym_defer_g.c +++ b/quantum/debounce/sym_defer_g.c @@ -1,22 +1,10 @@ -/* -Copyright 2017 Alex Ong -Copyright 2021 Simon Arlott -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 2017 Alex Ong +// Copyright 2021 Simon Arlott +// SPDX-License-Identifier: GPL-2.0-or-later +// +// Basic global debounce algorithm. Used in 99% of keyboards at time of implementation +// When no state changes have occured for DEBOUNCE milliseconds, we push the state. -/* -Basic global debounce algorithm. Used in 99% of keyboards at time of implementation -When no state changes have occured for DEBOUNCE milliseconds, we push the state. -*/ #include "debounce.h" #include "timer.h" #include @@ -31,13 +19,13 @@ When no state changes have occured for DEBOUNCE milliseconds, we push the state. #endif #if DEBOUNCE > 0 -static bool debouncing = false; -static fast_timer_t debouncing_time; void debounce_init(uint8_t num_rows) {} bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - bool cooked_changed = false; + static fast_timer_t debouncing_time; + static bool debouncing = false; + bool cooked_changed = false; if (changed) { debouncing = true; @@ -54,7 +42,6 @@ bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool return cooked_changed; } -void debounce_free(void) {} #else // no debouncing. # include "none.c" #endif diff --git a/quantum/debounce/sym_defer_pk.c b/quantum/debounce/sym_defer_pk.c index 156535a373..063094efe5 100644 --- a/quantum/debounce/sym_defer_pk.c +++ b/quantum/debounce/sym_defer_pk.c @@ -1,33 +1,14 @@ -/* -Copyright 2017 Alex Ong -Copyright 2020 Andrei Purdea -Copyright 2021 Simon Arlott -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 . -*/ - -/* -Basic symmetric per-key algorithm. Uses an 8-bit counter per key. -When no state changes have occured for DEBOUNCE milliseconds, we push the state. -*/ +// Copyright 2017 Alex Ong +// Copyright 2020 Andrei Purdea +// Copyright 2021 Simon Arlott +// SPDX-License-Identifier: GPL-2.0-or-later +// +// Basic symmetric per-key algorithm. Uses an 8-bit counter per key. +// When no state changes have occured for DEBOUNCE milliseconds, we push the state. #include "debounce.h" #include "timer.h" -#include - -#ifdef PROTOCOL_CHIBIOS -# if CH_CFG_USE_MEMCORE == FALSE -# error ChibiOS is configured without a memory allocator. Your keyboard may have set `#define CH_CFG_USE_MEMCORE FALSE`, which is incompatible with this debounce algorithm. -# endif -#endif +#include "util.h" #ifndef DEBOUNCE # define DEBOUNCE 5 @@ -39,40 +20,24 @@ When no state changes have occured for DEBOUNCE milliseconds, we push the state. # define DEBOUNCE UINT8_MAX #endif -#define ROW_SHIFTER ((matrix_row_t)1) - -typedef uint8_t debounce_counter_t; +#define DEBOUNCE_ELAPSED 0 #if DEBOUNCE > 0 -static debounce_counter_t *debounce_counters; -static fast_timer_t last_time; -static bool counters_need_update; -static bool cooked_changed; +typedef uint8_t debounce_counter_t; +// Uses MATRIX_ROWS_PER_HAND instead of MATRIX_ROWS to support split keyboards +static debounce_counter_t debounce_counters[MATRIX_ROWS_PER_HAND * MATRIX_COLS] = {DEBOUNCE_ELAPSED}; +static bool counters_need_update; +static bool cooked_changed; -# define DEBOUNCE_ELAPSED 0 +static inline void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t elapsed_time); +static inline void start_debounce_counters(matrix_row_t raw[], matrix_row_t cooked[]); -static void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t elapsed_time); -static void start_debounce_counters(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); - -// we use num_rows rather than MATRIX_ROWS to support split keyboards -void debounce_init(uint8_t num_rows) { - debounce_counters = (debounce_counter_t *)malloc(num_rows * MATRIX_COLS * sizeof(debounce_counter_t)); - int i = 0; - for (uint8_t r = 0; r < num_rows; r++) { - for (uint8_t c = 0; c < MATRIX_COLS; c++) { - debounce_counters[i++] = DEBOUNCE_ELAPSED; - } - } -} - -void debounce_free(void) { - free(debounce_counters); - debounce_counters = NULL; -} +void debounce_init(uint8_t num_rows) {} bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - bool updated_last = false; - cooked_changed = false; + static fast_timer_t last_time; + bool updated_last = false; + cooked_changed = false; if (counters_need_update) { fast_timer_t now = timer_read_fast(); @@ -80,12 +45,10 @@ bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool last_time = now; updated_last = true; - if (elapsed_time > UINT8_MAX) { - elapsed_time = UINT8_MAX; - } if (elapsed_time > 0) { - update_debounce_counters_and_transfer_if_expired(raw, cooked, num_rows, elapsed_time); + // Update debounce counters with elapsed timer clamped to UINT8_MAX + update_debounce_counters_and_transfer_if_expired(raw, cooked, MIN(elapsed_time, UINT8_MAX)); } } @@ -94,47 +57,73 @@ bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool last_time = timer_read_fast(); } - start_debounce_counters(raw, cooked, num_rows); + start_debounce_counters(raw, cooked); } return cooked_changed; } -static void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t elapsed_time) { - counters_need_update = false; - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { +/** + * @brief Updates debounce counters and transfers debounced key states if the debounce period has expired. + * + * Iterates through each key in the matrix and checks its debounce counter. If the debounce period has expired + * for a key, the debounced state is updated to match the raw state. Otherwise, the debounce counter is decremented + * by the elapsed time and marked for further updates. + * + * @param raw The current raw key state matrix. + * @param cooked The debounced key state matrix to be updated. + * @param elapsed_time The time elapsed since the last debounce update, in milliseconds. + */ +static inline void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t elapsed_time) { + counters_need_update = false; + for (uint8_t row = 0; row < MATRIX_ROWS_PER_HAND; row++) { + uint16_t row_offset = row * MATRIX_COLS; + for (uint8_t col = 0; col < MATRIX_COLS; col++) { - if (*debounce_pointer != DEBOUNCE_ELAPSED) { - if (*debounce_pointer <= elapsed_time) { - *debounce_pointer = DEBOUNCE_ELAPSED; - matrix_row_t cooked_next = (cooked[row] & ~(ROW_SHIFTER << col)) | (raw[row] & (ROW_SHIFTER << col)); + uint16_t index = row_offset + col; + + if (debounce_counters[index] != DEBOUNCE_ELAPSED) { + if (debounce_counters[index] <= elapsed_time) { + debounce_counters[index] = DEBOUNCE_ELAPSED; + matrix_row_t col_mask = (MATRIX_ROW_SHIFTER << col); + matrix_row_t cooked_next = (cooked[row] & ~col_mask) | (raw[row] & col_mask); cooked_changed |= cooked[row] ^ cooked_next; cooked[row] = cooked_next; } else { - *debounce_pointer -= elapsed_time; + debounce_counters[index] -= elapsed_time; counters_need_update = true; } } - debounce_pointer++; } } } -static void start_debounce_counters(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows) { - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { - matrix_row_t delta = raw[row] ^ cooked[row]; +/** + * @brief Initializes debounce counters for keys with changed states. + * + * For each key in the matrix, this function checks if the raw state differs from the debounced state. + * If a change is detected and the debounce counter has elapsed, the counter is set to the debounce period + * and marked for update. Otherwise, the counter is cleared. + * + * @param raw The current raw key state matrix. + * @param cooked The debounced key state matrix. + */ +static inline void start_debounce_counters(matrix_row_t raw[], matrix_row_t cooked[]) { + for (uint8_t row = 0; row < MATRIX_ROWS_PER_HAND; row++) { + uint16_t row_offset = row * MATRIX_COLS; + matrix_row_t delta = raw[row] ^ cooked[row]; + for (uint8_t col = 0; col < MATRIX_COLS; col++) { - if (delta & (ROW_SHIFTER << col)) { - if (*debounce_pointer == DEBOUNCE_ELAPSED) { - *debounce_pointer = DEBOUNCE; - counters_need_update = true; + uint16_t index = row_offset + col; + + if (delta & (MATRIX_ROW_SHIFTER << col)) { + if (debounce_counters[index] == DEBOUNCE_ELAPSED) { + debounce_counters[index] = DEBOUNCE; + counters_need_update = true; } } else { - *debounce_pointer = DEBOUNCE_ELAPSED; + debounce_counters[index] = DEBOUNCE_ELAPSED; } - debounce_pointer++; } } } diff --git a/quantum/debounce/sym_defer_pr.c b/quantum/debounce/sym_defer_pr.c index d6222af5b2..2382fae898 100644 --- a/quantum/debounce/sym_defer_pr.c +++ b/quantum/debounce/sym_defer_pr.c @@ -1,77 +1,117 @@ -/* -Copyright 2021 Chad Austin -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 . -*/ - -/* -Symmetric per-row debounce algorithm. Changes only apply when -DEBOUNCE milliseconds have elapsed since the last change. -*/ +// Copyright 2017 Alex Ong +// Copyright 2020 Andrei Purdea +// Copyright 2021 Simon Arlott +// Copyright @filterpaper +// SPDX-License-Identifier: GPL-2.0-or-later +// +// Basic symmetric per-row algorithm. Uses an 8-bit counter per row. +// When no state changes have occured for DEBOUNCE milliseconds, we push the state. #include "debounce.h" #include "timer.h" -#include +#include "util.h" #ifndef DEBOUNCE # define DEBOUNCE 5 #endif -static uint16_t last_time; -// [row] milliseconds until key's state is considered debounced. -static uint8_t* countdowns; -// [row] -static matrix_row_t* last_raw; +// Maximum debounce: 255ms +#if DEBOUNCE > UINT8_MAX +# undef DEBOUNCE +# define DEBOUNCE UINT8_MAX +#endif -void debounce_init(uint8_t num_rows) { - countdowns = (uint8_t*)calloc(num_rows, sizeof(uint8_t)); - last_raw = (matrix_row_t*)calloc(num_rows, sizeof(matrix_row_t)); +#define DEBOUNCE_ELAPSED 0 - last_time = timer_read(); -} +#if DEBOUNCE > 0 +typedef uint8_t debounce_counter_t; +// Uses MATRIX_ROWS_PER_HAND instead of MATRIX_ROWS to support split keyboards +static debounce_counter_t debounce_counters[MATRIX_ROWS_PER_HAND] = {DEBOUNCE_ELAPSED}; +static bool counters_need_update; +static bool cooked_changed; -void debounce_free(void) { - free(countdowns); - countdowns = NULL; - free(last_raw); - last_raw = NULL; -} +static inline void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t elapsed_time); +static inline void start_debounce_counters(matrix_row_t raw[], matrix_row_t cooked[]); + +void debounce_init(uint8_t num_rows) {} bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - uint16_t now = timer_read(); - uint16_t elapsed16 = TIMER_DIFF_16(now, last_time); - last_time = now; - uint8_t elapsed = (elapsed16 > 255) ? 255 : elapsed16; - bool cooked_changed = false; + static fast_timer_t last_time; + bool updated_last = false; + cooked_changed = false; - uint8_t* countdown = countdowns; + if (counters_need_update) { + fast_timer_t now = timer_read_fast(); + fast_timer_t elapsed_time = TIMER_DIFF_FAST(now, last_time); - for (uint8_t row = 0; row < num_rows; ++row, ++countdown) { - matrix_row_t raw_row = raw[row]; + last_time = now; + updated_last = true; - if (raw_row != last_raw[row]) { - *countdown = DEBOUNCE; - last_raw[row] = raw_row; - } else if (*countdown > elapsed) { - *countdown -= elapsed; - } else if (*countdown) { - cooked_changed |= cooked[row] ^ raw_row; - cooked[row] = raw_row; - *countdown = 0; + if (elapsed_time > 0) { + // Update debounce counters with elapsed timer clamped to UINT8_MAX + update_debounce_counters_and_transfer_if_expired(raw, cooked, MIN(elapsed_time, UINT8_MAX)); } } + if (changed) { + if (!updated_last) { + last_time = timer_read_fast(); + } + + start_debounce_counters(raw, cooked); + } + return cooked_changed; } -bool debounce_active(void) { - return true; +/** + * @brief Updates debounce counters and transfers debounced row states if the debounce period has expired. + * + * Iterates through each row in the matrix and checks its debounce counter. If the debounce period has expired + * for a row, the debounced state is updated to match the raw state. Otherwise, the debounce counter is decremented + * by the elapsed time and marked for further updates. + * + * @param raw The current raw key state matrix. + * @param cooked The debounced key state matrix to be updated. + * @param elapsed_time The time elapsed since the last debounce update, in milliseconds. + */ +static inline void update_debounce_counters_and_transfer_if_expired(matrix_row_t raw[], matrix_row_t cooked[], uint8_t elapsed_time) { + counters_need_update = false; + for (uint8_t row = 0; row < MATRIX_ROWS_PER_HAND; row++) { + if (debounce_counters[row] != DEBOUNCE_ELAPSED) { + if (debounce_counters[row] <= elapsed_time) { + debounce_counters[row] = DEBOUNCE_ELAPSED; + cooked_changed |= cooked[row] ^ raw[row]; + cooked[row] = raw[row]; + } else { + debounce_counters[row] -= elapsed_time; + counters_need_update = true; + } + } + } } + +/** + * @brief Initializes debounce counters for rows with changed states. + * + * For each row in the matrix, this function checks if the raw state differs from the debounced state. + * If a change is detected and the debounce counter has elapsed, the counter is set to the debounce period + * and marked for update. Otherwise, the counter is cleared. + * + * @param raw The current raw key state matrix. + * @param cooked The debounced key state matrix. + */ +static inline void start_debounce_counters(matrix_row_t raw[], matrix_row_t cooked[]) { + for (uint8_t row = 0; row < MATRIX_ROWS_PER_HAND; row++) { + if (raw[row] != cooked[row]) { + debounce_counters[row] = DEBOUNCE; + counters_need_update = true; + } else { + debounce_counters[row] = DEBOUNCE_ELAPSED; + } + } +} + +#else +# include "none.c" +#endif diff --git a/quantum/debounce/sym_eager_pk.c b/quantum/debounce/sym_eager_pk.c index b359e79287..c3a7afde24 100644 --- a/quantum/debounce/sym_eager_pk.c +++ b/quantum/debounce/sym_eager_pk.c @@ -21,13 +21,7 @@ No further inputs are accepted until DEBOUNCE milliseconds have occurred. #include "debounce.h" #include "timer.h" -#include - -#ifdef PROTOCOL_CHIBIOS -# if CH_CFG_USE_MEMCORE == FALSE -# error ChibiOS is configured without a memory allocator. Your keyboard may have set `#define CH_CFG_USE_MEMCORE FALSE`, which is incompatible with this debounce algorithm. -# endif -#endif +#include "util.h" #ifndef DEBOUNCE # define DEBOUNCE 5 @@ -39,41 +33,25 @@ No further inputs are accepted until DEBOUNCE milliseconds have occurred. # define DEBOUNCE UINT8_MAX #endif -#define ROW_SHIFTER ((matrix_row_t)1) - -typedef uint8_t debounce_counter_t; +#define DEBOUNCE_ELAPSED 0 #if DEBOUNCE > 0 -static debounce_counter_t *debounce_counters; -static fast_timer_t last_time; -static bool counters_need_update; -static bool matrix_need_update; -static bool cooked_changed; +typedef uint8_t debounce_counter_t; +// Uses MATRIX_ROWS_PER_HAND instead of MATRIX_ROWS to support split keyboards +static debounce_counter_t debounce_counters[MATRIX_ROWS_PER_HAND * MATRIX_COLS] = {DEBOUNCE_ELAPSED}; +static bool counters_need_update; +static bool matrix_need_update; +static bool cooked_changed; -# define DEBOUNCE_ELAPSED 0 +static inline void update_debounce_counters(uint8_t elapsed_time); +static inline void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[]); -static void update_debounce_counters(uint8_t num_rows, uint8_t elapsed_time); -static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); - -// we use num_rows rather than MATRIX_ROWS to support split keyboards -void debounce_init(uint8_t num_rows) { - debounce_counters = (debounce_counter_t *)malloc(num_rows * MATRIX_COLS * sizeof(debounce_counter_t)); - int i = 0; - for (uint8_t r = 0; r < num_rows; r++) { - for (uint8_t c = 0; c < MATRIX_COLS; c++) { - debounce_counters[i++] = DEBOUNCE_ELAPSED; - } - } -} - -void debounce_free(void) { - free(debounce_counters); - debounce_counters = NULL; -} +void debounce_init(uint8_t num_rows) {} bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - bool updated_last = false; - cooked_changed = false; + static fast_timer_t last_time; + bool updated_last = false; + cooked_changed = false; if (counters_need_update) { fast_timer_t now = timer_read_fast(); @@ -81,12 +59,10 @@ bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool last_time = now; updated_last = true; - if (elapsed_time > UINT8_MAX) { - elapsed_time = UINT8_MAX; - } if (elapsed_time > 0) { - update_debounce_counters(num_rows, elapsed_time); + // Update debounce counters with elapsed timer clamped to UINT8_MAX + update_debounce_counters(MIN(elapsed_time, UINT8_MAX)); } } @@ -95,51 +71,74 @@ bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool last_time = timer_read_fast(); } - transfer_matrix_values(raw, cooked, num_rows); + transfer_matrix_values(raw, cooked); } return cooked_changed; } -// If the current time is > debounce counter, set the counter to enable input. -static void update_debounce_counters(uint8_t num_rows, uint8_t elapsed_time) { - counters_need_update = false; - matrix_need_update = false; - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { +/** + * @brief Updates per-key debounce counters and determines if matrix needs updating. + * + * Iterates through each key in the matrix and checks its debounce counter. If the debounce + * period has elapsed, the counter is reset and the matrix is marked for update. Otherwise, + * the counter is decremented by the elapsed time and marked for further updates if needed. + * + * @param elapsed_time The time elapsed since the last debounce update, in milliseconds. + */ +static inline void update_debounce_counters(uint8_t elapsed_time) { + counters_need_update = false; + matrix_need_update = false; + + for (uint8_t row = 0; row < MATRIX_ROWS_PER_HAND; row++) { + uint16_t row_offset = row * MATRIX_COLS; + for (uint8_t col = 0; col < MATRIX_COLS; col++) { - if (*debounce_pointer != DEBOUNCE_ELAPSED) { - if (*debounce_pointer <= elapsed_time) { - *debounce_pointer = DEBOUNCE_ELAPSED; - matrix_need_update = true; + uint16_t index = row_offset + col; + + if (debounce_counters[index] != DEBOUNCE_ELAPSED) { + if (debounce_counters[index] <= elapsed_time) { + debounce_counters[index] = DEBOUNCE_ELAPSED; + matrix_need_update = true; } else { - *debounce_pointer -= elapsed_time; + debounce_counters[index] -= elapsed_time; counters_need_update = true; } } - debounce_pointer++; } } } -// upload from raw_matrix to final matrix; -static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows) { - matrix_need_update = false; - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { +/** + * @brief Transfers debounced key states from the raw matrix to the cooked matrix. + * + * For each key in the matrix, this function checks if its state has changed and if its + * debounce counter has elapsed. If so, the debounce counter is reset, the cooked matrix + * is updated to reflect the new state, and the matrix is marked for further updates. + * + * @param raw The current raw key state matrix. + * @param cooked The debounced key state matrix to be updated. + */ +static inline void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[]) { + matrix_need_update = false; + + for (uint8_t row = 0; row < MATRIX_ROWS_PER_HAND; row++) { + uint16_t row_offset = row * MATRIX_COLS; matrix_row_t delta = raw[row] ^ cooked[row]; matrix_row_t existing_row = cooked[row]; + for (uint8_t col = 0; col < MATRIX_COLS; col++) { - matrix_row_t col_mask = (ROW_SHIFTER << col); + uint16_t index = row_offset + col; + + matrix_row_t col_mask = (MATRIX_ROW_SHIFTER << col); if (delta & col_mask) { - if (*debounce_pointer == DEBOUNCE_ELAPSED) { - *debounce_pointer = DEBOUNCE; - counters_need_update = true; + if (debounce_counters[index] == DEBOUNCE_ELAPSED) { + debounce_counters[index] = DEBOUNCE; + counters_need_update = true; existing_row ^= col_mask; // flip the bit. cooked_changed = true; } } - debounce_pointer++; } cooked[row] = existing_row; } diff --git a/quantum/debounce/sym_eager_pr.c b/quantum/debounce/sym_eager_pr.c index 6cd9308aff..5a1e3a1bda 100644 --- a/quantum/debounce/sym_eager_pr.c +++ b/quantum/debounce/sym_eager_pr.c @@ -1,33 +1,14 @@ -/* -Copyright 2019 Alex Ong -Copyright 2021 Simon Arlott -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 . -*/ - -/* -Basic per-row algorithm. Uses an 8-bit counter per row. -After pressing a key, it immediately changes state, and sets a counter. -No further inputs are accepted until DEBOUNCE milliseconds have occurred. -*/ +// Copyright 2017 Alex Ong +// Copyright 2021 Simon Arlott +// SPDX-License-Identifier: GPL-2.0-or-later +// +// Basic per-row algorithm. Uses an 8-bit counter per key. +// After pressing a key, it immediately changes state, and sets a counter. +// No further inputs are accepted until DEBOUNCE milliseconds have occurred. #include "debounce.h" #include "timer.h" -#include - -#ifdef PROTOCOL_CHIBIOS -# if CH_CFG_USE_MEMCORE == FALSE -# error ChibiOS is configured without a memory allocator. Your keyboard may have set `#define CH_CFG_USE_MEMCORE FALSE`, which is incompatible with this debounce algorithm. -# endif -#endif +#include "util.h" #ifndef DEBOUNCE # define DEBOUNCE 5 @@ -39,37 +20,25 @@ No further inputs are accepted until DEBOUNCE milliseconds have occurred. # define DEBOUNCE UINT8_MAX #endif -typedef uint8_t debounce_counter_t; +#define DEBOUNCE_ELAPSED 0 #if DEBOUNCE > 0 -static bool matrix_need_update; +typedef uint8_t debounce_counter_t; +// Uses MATRIX_ROWS_PER_HAND instead of MATRIX_ROWS to support split keyboards +static debounce_counter_t debounce_counters[MATRIX_ROWS_PER_HAND] = {DEBOUNCE_ELAPSED}; +static bool counters_need_update; +static bool matrix_need_update; +static bool cooked_changed; -static debounce_counter_t *debounce_counters; -static fast_timer_t last_time; -static bool counters_need_update; -static bool cooked_changed; +static inline void update_debounce_counters(uint8_t elapsed_time); +static inline void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[]); -# define DEBOUNCE_ELAPSED 0 - -static void update_debounce_counters(uint8_t num_rows, uint8_t elapsed_time); -static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows); - -// we use num_rows rather than MATRIX_ROWS to support split keyboards -void debounce_init(uint8_t num_rows) { - debounce_counters = (debounce_counter_t *)malloc(num_rows * sizeof(debounce_counter_t)); - for (uint8_t r = 0; r < num_rows; r++) { - debounce_counters[r] = DEBOUNCE_ELAPSED; - } -} - -void debounce_free(void) { - free(debounce_counters); - debounce_counters = NULL; -} +void debounce_init(uint8_t num_rows) {} bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed) { - bool updated_last = false; - cooked_changed = false; + static fast_timer_t last_time; + bool updated_last = false; + cooked_changed = false; if (counters_need_update) { fast_timer_t now = timer_read_fast(); @@ -77,12 +46,10 @@ bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool last_time = now; updated_last = true; - if (elapsed_time > UINT8_MAX) { - elapsed_time = UINT8_MAX; - } if (elapsed_time > 0) { - update_debounce_counters(num_rows, elapsed_time); + // Update debounce counters with elapsed timer clamped to UINT8_MAX + update_debounce_counters(MIN(elapsed_time, UINT8_MAX)); } } @@ -91,49 +58,64 @@ bool debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool last_time = timer_read_fast(); } - transfer_matrix_values(raw, cooked, num_rows); + transfer_matrix_values(raw, cooked); } return cooked_changed; } -// If the current time is > debounce counter, set the counter to enable input. -static void update_debounce_counters(uint8_t num_rows, uint8_t elapsed_time) { - counters_need_update = false; - matrix_need_update = false; - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { - if (*debounce_pointer != DEBOUNCE_ELAPSED) { - if (*debounce_pointer <= elapsed_time) { - *debounce_pointer = DEBOUNCE_ELAPSED; - matrix_need_update = true; +/** + * @brief Updates per-row debounce counters and determines if matrix needs updating. + * + * Iterates through each row in the matrix and checks its debounce counter. If the debounce + * period has elapsed, the counter is reset and the matrix is marked for update. Otherwise, + * the counter is decremented by the elapsed time and marked for further updates if needed. + * + * @param elapsed_time The time elapsed since the last debounce update, in milliseconds. + */ +static inline void update_debounce_counters(uint8_t elapsed_time) { + counters_need_update = false; + matrix_need_update = false; + + for (uint8_t row = 0; row < MATRIX_ROWS_PER_HAND; row++) { + if (debounce_counters[row] != DEBOUNCE_ELAPSED) { + if (debounce_counters[row] <= elapsed_time) { + debounce_counters[row] = DEBOUNCE_ELAPSED; + matrix_need_update = true; } else { - *debounce_pointer -= elapsed_time; + debounce_counters[row] -= elapsed_time; counters_need_update = true; } } - debounce_pointer++; } } -// upload from raw_matrix to final matrix; -static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows) { - matrix_need_update = false; - debounce_counter_t *debounce_pointer = debounce_counters; - for (uint8_t row = 0; row < num_rows; row++) { +/** + * @brief Transfers debounced key states from the raw matrix to the cooked matrix. + * + * For each row in the matrix, this function checks if its state has changed and if its + * debounce counter has elapsed. If so, the debounce counter is reset, the cooked matrix + * is updated to reflect the new state, and the matrix is marked for further updates. + * + * @param raw The current raw key state matrix. + * @param cooked The debounced key state matrix + */ +static inline void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[]) { + matrix_need_update = false; + + for (uint8_t row = 0; row < MATRIX_ROWS_PER_HAND; row++) { matrix_row_t existing_row = cooked[row]; matrix_row_t raw_row = raw[row]; // determine new value basd on debounce pointer + raw value if (existing_row != raw_row) { - if (*debounce_pointer == DEBOUNCE_ELAPSED) { - *debounce_pointer = DEBOUNCE; + if (debounce_counters[row] == DEBOUNCE_ELAPSED) { + debounce_counters[row] = DEBOUNCE; cooked_changed |= cooked[row] ^ raw_row; cooked[row] = raw_row; counters_need_update = true; } } - debounce_pointer++; } } diff --git a/quantum/debounce/tests/debounce_test_common.cpp b/quantum/debounce/tests/debounce_test_common.cpp index fd4b6f01a6..3782f51411 100644 --- a/quantum/debounce/tests/debounce_test_common.cpp +++ b/quantum/debounce/tests/debounce_test_common.cpp @@ -121,8 +121,6 @@ void DebounceTest::runEventsInternal() { checkCookedMatrix(false, "debounce() modified cooked matrix"); advance_time(1); } - - debounce_free(); } void DebounceTest::runDebounce(bool changed) { From 4b1b83f42fca1ce73ccb1d21b39212f3067241d2 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 02:58:29 -0600 Subject: [PATCH 23/99] Migrate `g_led_config` to DD (B, C) (#25559) --- keyboards/bandominedoni/bandominedoni.c | 52 ---------- keyboards/bandominedoni/keyboard.json | 78 +++++++++++++++ keyboards/blockboy/ac980mini/ac980mini.c | 54 ----------- keyboards/blockboy/ac980mini/keyboard.json | 83 ++++++++++++++++ keyboards/boston_meetup/2019/2019.c | 15 --- keyboards/boston_meetup/2019/keyboard.json | 10 +- keyboards/canary/canary60rgb/v1/keyboard.json | 65 +++++++++++++ keyboards/canary/canary60rgb/v1/v1.c | 22 ----- keyboards/capsunlocked/cu80/v2/ansi/ansi.c | 20 ---- .../capsunlocked/cu80/v2/ansi/keyboard.json | 91 ++++++++++++++++++ keyboards/capsunlocked/cu80/v2/iso/iso.c | 20 ---- .../capsunlocked/cu80/v2/iso/keyboard.json | 92 ++++++++++++++++++ .../checkerboards/quark_lp/keyboard.json | 53 +++++++++++ keyboards/checkerboards/quark_lp/quark_lp.c | 39 -------- keyboards/cherrybstudio/cb87rgb/cb87rgb.c | 34 ------- keyboards/cherrybstudio/cb87rgb/keyboard.json | 94 +++++++++++++++++++ keyboards/concreteflowers/cor_tkl/cor_tkl.c | 16 ---- .../concreteflowers/cor_tkl/keyboard.json | 6 +- 18 files changed, 570 insertions(+), 274 deletions(-) delete mode 100644 keyboards/blockboy/ac980mini/ac980mini.c delete mode 100644 keyboards/capsunlocked/cu80/v2/ansi/ansi.c delete mode 100644 keyboards/capsunlocked/cu80/v2/iso/iso.c delete mode 100644 keyboards/checkerboards/quark_lp/quark_lp.c diff --git a/keyboards/bandominedoni/bandominedoni.c b/keyboards/bandominedoni/bandominedoni.c index 76d9e6cb3b..84c0f27bcd 100644 --- a/keyboards/bandominedoni/bandominedoni.c +++ b/keyboards/bandominedoni/bandominedoni.c @@ -16,58 +16,6 @@ #include "bandominedoni.h" -#ifdef RGB_MATRIX_ENABLE - -led_config_t g_led_config = { - { - { 75, 46, 45, 44, 43, 42, NO_LED }, - { 47, 48, 49, 50, 51, 52, 53 }, - { 60, 59, 58, 57, 56, 55, 54 }, - { 61, 62, 63, 64, 65, 66, 67 }, - { 74, 73, 72, 71, 70, 69, 68 }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { 7, 6, 4, 3, 2, 1, 5}, - { 8, 9, 10, 11, 12, 13, 0 }, - { 19, 18, 17, 16, 15, 14, 41 }, - { 20, 21, 22, 23, 24, 25, 40 }, - { 30, 29, 28, 27, 26, 39, 38 }, - { 31, 32, 33, 34, 35, 36, 37 } - }, { - { 145, 6 }, { 157, 5 }, { 153, 14 }, { 149, 22 }, { 145, 32 }, { 136, 35 }, { 139, 48 }, { 134, 61 }, - { 142, 60 }, { 148, 43 }, { 154, 29 }, { 158, 20 }, { 163, 12 }, { 168, 4 }, - { 178, 5 }, { 173, 12 }, { 168, 20 }, { 163, 28 }, { 157, 40 }, { 151, 55 }, - { 160, 52 }, { 166, 39 }, { 172, 28 }, { 177, 20 }, { 182, 13 }, { 188, 7 }, - { 192, 17 }, { 186, 23 }, { 181, 30 }, { 175, 39 }, { 169, 50 }, - { 178, 51 }, { 184, 41 }, { 190, 33 }, { 196, 27 }, - { 199, 37 }, { 193, 45 }, { 187, 53 }, - { 196, 56 }, { 202, 49 }, - { 205, 61 }, - { 202, 4 }, - { 84, 18 }, { 73, 13 }, { 62, 10 }, { 51, 8 }, { 39, 11 }, { 24, 22 }, - { 34, 19 }, { 45, 16 }, { 56, 16 }, { 66, 18 }, { 77, 22 }, { 87, 28 }, - { 92, 40 }, { 81, 32 }, { 71, 27 }, { 61, 24 }, { 51, 24 }, { 41, 24 }, { 30, 28 }, - { 24, 42 }, { 34, 37 }, { 44, 35 }, { 54, 34 }, { 64, 36 }, { 74, 38 }, { 84, 44 }, - { 87, 54 }, { 77, 49 }, { 67, 47 }, { 57, 45 }, { 47, 45 }, { 37, 48 }, { 27, 52 }, { 19, 56 }, - }, { - 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, - 4, 4, - 4, - 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4 - } -}; -#endif - #if defined(SPLIT_HAND_MATRIX_GRID) static uint8_t peek_matrix_intersection(pin_t out_pin, pin_t in_pin) { gpio_set_pin_input_high(in_pin); diff --git a/keyboards/bandominedoni/keyboard.json b/keyboards/bandominedoni/keyboard.json index f6ea0f43c3..7184e2e90c 100644 --- a/keyboards/bandominedoni/keyboard.json +++ b/keyboards/bandominedoni/keyboard.json @@ -20,6 +20,84 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"matrix": [7, 6], "x": 145, "y": 6, "flags": 4}, + {"matrix": [6, 5], "x": 157, "y": 5, "flags": 4}, + {"matrix": [6, 4], "x": 153, "y": 14, "flags": 4}, + {"matrix": [6, 3], "x": 149, "y": 22, "flags": 4}, + {"matrix": [6, 2], "x": 145, "y": 32, "flags": 4}, + {"matrix": [6, 6], "x": 136, "y": 35, "flags": 4}, + {"matrix": [6, 1], "x": 139, "y": 48, "flags": 4}, + {"matrix": [6, 0], "x": 134, "y": 61, "flags": 4}, + {"matrix": [7, 0], "x": 142, "y": 60, "flags": 4}, + {"matrix": [7, 1], "x": 148, "y": 43, "flags": 4}, + {"matrix": [7, 2], "x": 154, "y": 29, "flags": 4}, + {"matrix": [7, 3], "x": 158, "y": 20, "flags": 4}, + {"matrix": [7, 4], "x": 163, "y": 12, "flags": 4}, + {"matrix": [7, 5], "x": 168, "y": 4, "flags": 4}, + {"matrix": [8, 5], "x": 178, "y": 5, "flags": 4}, + {"matrix": [8, 4], "x": 173, "y": 12, "flags": 4}, + {"matrix": [8, 3], "x": 168, "y": 20, "flags": 4}, + {"matrix": [8, 2], "x": 163, "y": 28, "flags": 4}, + {"matrix": [8, 1], "x": 157, "y": 40, "flags": 4}, + {"matrix": [8, 0], "x": 151, "y": 55, "flags": 4}, + {"matrix": [9, 0], "x": 160, "y": 52, "flags": 4}, + {"matrix": [9, 1], "x": 166, "y": 39, "flags": 4}, + {"matrix": [9, 2], "x": 172, "y": 28, "flags": 4}, + {"matrix": [9, 3], "x": 177, "y": 20, "flags": 4}, + {"matrix": [9, 4], "x": 182, "y": 13, "flags": 4}, + {"matrix": [9, 5], "x": 188, "y": 7, "flags": 4}, + {"matrix": [10, 4], "x": 192, "y": 17, "flags": 4}, + {"matrix": [10, 3], "x": 186, "y": 23, "flags": 4}, + {"matrix": [10, 2], "x": 181, "y": 30, "flags": 4}, + {"matrix": [10, 1], "x": 175, "y": 39, "flags": 4}, + {"matrix": [10, 0], "x": 169, "y": 50, "flags": 4}, + {"matrix": [11, 0], "x": 178, "y": 51, "flags": 4}, + {"matrix": [11, 1], "x": 184, "y": 41, "flags": 4}, + {"matrix": [11, 2], "x": 190, "y": 33, "flags": 4}, + {"matrix": [11, 3], "x": 196, "y": 27, "flags": 4}, + {"matrix": [11, 4], "x": 199, "y": 37, "flags": 4}, + {"matrix": [11, 5], "x": 193, "y": 45, "flags": 4}, + {"matrix": [11, 6], "x": 187, "y": 53, "flags": 4}, + {"matrix": [10, 6], "x": 196, "y": 56, "flags": 4}, + {"matrix": [10, 5], "x": 202, "y": 49, "flags": 4}, + {"matrix": [9, 6], "x": 205, "y": 61, "flags": 4}, + {"matrix": [8, 6], "x": 202, "y": 4, "flags": 4}, + {"matrix": [0, 5], "x": 84, "y": 18, "flags": 4}, + {"matrix": [0, 4], "x": 73, "y": 13, "flags": 4}, + {"matrix": [0, 3], "x": 62, "y": 10, "flags": 4}, + {"matrix": [0, 2], "x": 51, "y": 8, "flags": 4}, + {"matrix": [0, 1], "x": 39, "y": 11, "flags": 4}, + {"matrix": [1, 0], "x": 24, "y": 22, "flags": 4}, + {"matrix": [1, 1], "x": 34, "y": 19, "flags": 4}, + {"matrix": [1, 2], "x": 45, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 66, "y": 18, "flags": 4}, + {"matrix": [1, 5], "x": 77, "y": 22, "flags": 4}, + {"matrix": [1, 6], "x": 87, "y": 28, "flags": 4}, + {"matrix": [2, 6], "x": 92, "y": 40, "flags": 4}, + {"matrix": [2, 5], "x": 81, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 61, "y": 24, "flags": 4}, + {"matrix": [2, 2], "x": 51, "y": 24, "flags": 4}, + {"matrix": [2, 1], "x": 41, "y": 24, "flags": 4}, + {"matrix": [2, 0], "x": 30, "y": 28, "flags": 4}, + {"matrix": [3, 0], "x": 24, "y": 42, "flags": 4}, + {"matrix": [3, 1], "x": 34, "y": 37, "flags": 4}, + {"matrix": [3, 2], "x": 44, "y": 35, "flags": 4}, + {"matrix": [3, 3], "x": 54, "y": 34, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 36, "flags": 4}, + {"matrix": [3, 5], "x": 74, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 84, "y": 44, "flags": 4}, + {"matrix": [4, 6], "x": 87, "y": 54, "flags": 4}, + {"matrix": [4, 5], "x": 77, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 67, "y": 47, "flags": 4}, + {"matrix": [4, 3], "x": 57, "y": 45, "flags": 4}, + {"matrix": [4, 2], "x": 47, "y": 45, "flags": 4}, + {"matrix": [4, 1], "x": 37, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 27, "y": 52, "flags": 4}, + {"matrix": [0, 0], "x": 19, "y": 56, "flags": 4} + ], "max_brightness": 50, "sleep": true }, diff --git a/keyboards/blockboy/ac980mini/ac980mini.c b/keyboards/blockboy/ac980mini/ac980mini.c deleted file mode 100644 index b6a29f94ea..0000000000 --- a/keyboards/blockboy/ac980mini/ac980mini.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright 2022 rooski15 - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -// LED location configuration -led_config_t g_led_config = { { - - { 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80 }, - { 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, NO_LED }, - { 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, NO_LED, 41, 42, 43, 44, 45 }, - { 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, NO_LED, 24, 25, 26, 27, 28, NO_LED }, - { 0, 1, 2, NO_LED, NO_LED, 3, NO_LED, NO_LED, NO_LED, 4, 5, 6, 7, 8, 9, 10, 11, 12 } - -},{ - - // Physical X,Y coordinates of each LED, starting with LED 0 above. - { 1 , 64 }, { 16 , 64 }, { 31 , 64 }, { 75 , 64 }, { 123 , 64 }, { 132 , 64 }, { 144 , 64 }, { 159 , 64 }, { 171 , 64 }, { 183 , 64 }, { 198 , 64 }, { 210 , 64 }, { 224 , 64 }, - { 7 , 48 }, { 27 , 48 }, { 39 , 48 }, { 51 , 48 }, { 63 , 48 }, { 75 , 48 }, { 87 , 48 }, { 99 , 48 }, { 111 , 48 }, { 123 , 48 }, { 135 , 48 }, { 151 , 48 }, { 171 , 48 }, { 186 , 48 }, { 198 , 48 }, { 210 , 48 }, - { 4 , 36 }, { 20 , 36 }, { 32 , 36 }, { 44 , 36 }, { 56 , 36 }, { 68 , 36 }, { 80 , 36 }, { 92 , 36 }, { 104 , 36 }, { 116 , 36 }, { 128 , 36 }, { 140 , 36 }, { 160 , 36 }, { 186 , 36 }, { 198 , 36 }, { 210 , 36 }, { 224 , 36 }, - { 3 , 16 }, { 18 , 16 }, { 30 , 16 }, { 42 , 16 }, { 54 , 16 }, { 66 , 16 }, { 78 , 16 }, { 90 , 16 }, { 102 , 16 }, { 114 , 16 }, { 126 , 16 }, { 138 , 16 }, { 150 , 16 }, { 165 , 16 }, { 186 , 16 }, { 198 , 16 }, { 210 , 16 }, - { 0 , 0 }, { 12 , 0 }, { 24 , 0 }, { 36 , 0 }, { 48 , 0 }, { 60 , 0 }, { 72 , 0 }, { 84 , 0 }, { 96 , 0 }, { 108 , 0 }, { 120 , 0 }, { 132 , 0 }, { 144 , 0 }, { 162 , 0 }, { 186 , 0 }, { 198 , 0 }, { 210 , 0 }, { 224 , 0 }, - -},{ - // "Flag Assignment" of each key - // 4 = Alpha - // 1 = Mod - // See https://docs.qmk.fm/#/feature_rgb_matrix?id=flags - // No Caps / Num indicators - 1,1,1, 1, 1,1,1, 1,1,1, 4,4,1, - 1,4,4,4,4,4,4,4,4,4,4,1, 1, 4,4,4, - 1,4,4,4,4,4,4,4,4,4,4,4,1, 4,4,4,1, - 1,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4, - 1,4,4,4,4,4,4,4,4,4,4,4,4,1, 1,1,1,1 - -} }; -/* - -*/ -#endif \ No newline at end of file diff --git a/keyboards/blockboy/ac980mini/keyboard.json b/keyboards/blockboy/ac980mini/keyboard.json index ce261639e2..8df9c03dcc 100644 --- a/keyboards/blockboy/ac980mini/keyboard.json +++ b/keyboards/blockboy/ac980mini/keyboard.json @@ -74,6 +74,89 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [4, 0], "x": 1, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 16, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 31, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 75, "y": 64, "flags": 1}, + {"matrix": [4, 9], "x": 123, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 132, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 144, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 159, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 171, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 183, "y": 64, "flags": 1}, + {"matrix": [4, 15], "x": 198, "y": 64, "flags": 4}, + {"matrix": [4, 16], "x": 210, "y": 64, "flags": 4}, + {"matrix": [4, 17], "x": 224, "y": 64, "flags": 1}, + {"matrix": [3, 0], "x": 7, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 27, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 39, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 51, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 63, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 87, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 99, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 111, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 123, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 135, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 151, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 171, "y": 48, "flags": 1}, + {"matrix": [3, 14], "x": 186, "y": 48, "flags": 4}, + {"matrix": [3, 15], "x": 198, "y": 48, "flags": 4}, + {"matrix": [3, 16], "x": 210, "y": 48, "flags": 4}, + {"matrix": [2, 0], "x": 4, "y": 36, "flags": 1}, + {"matrix": [2, 1], "x": 20, "y": 36, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 36, "flags": 4}, + {"matrix": [2, 3], "x": 44, "y": 36, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 36, "flags": 4}, + {"matrix": [2, 5], "x": 68, "y": 36, "flags": 4}, + {"matrix": [2, 6], "x": 80, "y": 36, "flags": 4}, + {"matrix": [2, 7], "x": 92, "y": 36, "flags": 4}, + {"matrix": [2, 8], "x": 104, "y": 36, "flags": 4}, + {"matrix": [2, 9], "x": 116, "y": 36, "flags": 4}, + {"matrix": [2, 10], "x": 128, "y": 36, "flags": 4}, + {"matrix": [2, 11], "x": 140, "y": 36, "flags": 4}, + {"matrix": [2, 13], "x": 160, "y": 36, "flags": 1}, + {"matrix": [2, 14], "x": 186, "y": 36, "flags": 4}, + {"matrix": [2, 15], "x": 198, "y": 36, "flags": 4}, + {"matrix": [2, 16], "x": 210, "y": 36, "flags": 4}, + {"matrix": [2, 17], "x": 224, "y": 36, "flags": 1}, + {"matrix": [1, 0], "x": 3, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 18, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 30, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 42, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 54, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 66, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 78, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 90, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 102, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 114, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 126, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 138, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 150, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 165, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 186, "y": 16, "flags": 4}, + {"matrix": [1, 15], "x": 198, "y": 16, "flags": 4}, + {"matrix": [1, 16], "x": 210, "y": 16, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 12, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 24, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 36, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 72, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 84, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 108, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 132, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 162, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 186, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 198, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 210, "y": 0, "flags": 1}, + {"matrix": [0, 17], "x": 224, "y": 0, "flags": 1} + ], "sat_steps": 8, "val_steps": 8, "max_brightness": 150, diff --git a/keyboards/boston_meetup/2019/2019.c b/keyboards/boston_meetup/2019/2019.c index 1097c58de2..87ce108bc3 100644 --- a/keyboards/boston_meetup/2019/2019.c +++ b/keyboards/boston_meetup/2019/2019.c @@ -15,21 +15,6 @@ */ #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE -#include "rgb_matrix.h" - -led_config_t g_led_config = { { - { 5, NO_LED, NO_LED, 0 }, - { NO_LED, NO_LED, NO_LED, NO_LED }, - { 4, NO_LED, NO_LED, 1 }, - { 3, NO_LED, NO_LED, 2 } -}, { - { 188, 16 }, { 187, 48 }, { 149, 64 }, { 112, 64 }, { 37, 48 }, { 38, 16 } -}, { - 4, 4, 4, 4, 4, 4 -} }; -#endif - #ifdef OLED_ENABLE oled_rotation_t oled_init_kb(oled_rotation_t rotation) { return OLED_ROTATION_180; } diff --git a/keyboards/boston_meetup/2019/keyboard.json b/keyboards/boston_meetup/2019/keyboard.json index 4f07e0c631..c56a8f6c06 100644 --- a/keyboards/boston_meetup/2019/keyboard.json +++ b/keyboards/boston_meetup/2019/keyboard.json @@ -20,7 +20,15 @@ "driver": "drv2605l" }, "rgb_matrix": { - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [0, 3], "x": 188, "y": 16, "flags": 4}, + {"matrix": [2, 3], "x": 187, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 149, "y": 64, "flags": 4}, + {"matrix": [3, 0], "x": 112, "y": 64, "flags": 4}, + {"matrix": [2, 0], "x": 37, "y": 48, "flags": 4}, + {"matrix": [0, 0], "x": 38, "y": 16, "flags": 4} + ] }, "matrix_pins": { "cols": ["A7", "A8", "B2", "B10"], diff --git a/keyboards/canary/canary60rgb/v1/keyboard.json b/keyboards/canary/canary60rgb/v1/keyboard.json index a1247769e6..de2daaf00d 100644 --- a/keyboards/canary/canary60rgb/v1/keyboard.json +++ b/keyboards/canary/canary60rgb/v1/keyboard.json @@ -73,6 +73,71 @@ "pixel_rain": true }, "driver": "is31fl3733", + "layout": [ + {"matrix": [0, 13], "x": 216, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [1, 13], "x": 220, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 184, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 104, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 88, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [2, 13], "x": 214, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 188, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 156, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 140, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 124, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 208, "y": 48, "flags": 1}, + {"matrix": [3, 10], "x": 186, "y": 48, "flags": 1}, + {"matrix": [3, 9], "x": 164, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 148, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 132, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 116, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 100, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 84, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 68, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 208, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 192, "y": 64, "flags": 1}, + {"matrix": [4, 9], "x": 176, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 160, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 102, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1} + ], "sleep": true }, "matrix_pins": { diff --git a/keyboards/canary/canary60rgb/v1/v1.c b/keyboards/canary/canary60rgb/v1/v1.c index b14878ff22..a6e9dea796 100644 --- a/keyboards/canary/canary60rgb/v1/v1.c +++ b/keyboards/canary/canary60rgb/v1/v1.c @@ -86,28 +86,6 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, SW10_CS16, SW11_CS16, SW12_CS16 } }; -led_config_t g_led_config = { - { - { 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }, - { 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 }, - { 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, NO_LED, 28 }, - { 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, NO_LED, 41 }, - { 62, 61, 60, NO_LED, NO_LED, 59, NO_LED, NO_LED, 58, 57, 56, 55, NO_LED, 54 } - }, { - { 216, 0 }, { 192, 0 }, { 176, 0 }, { 160, 0 }, { 144, 0 }, { 128, 0 }, { 112, 0 }, { 96, 0 }, { 80, 0 }, { 64, 0 }, { 48, 0 }, { 32, 0 }, { 16, 0 }, { 0, 0 }, - { 220, 16 }, { 200, 16 }, { 184, 16 }, { 168, 16 }, { 152, 16 }, { 136, 16 }, { 120, 16 }, { 104, 16 }, { 88, 16 }, { 72, 16 }, { 56, 16 }, { 40, 16 }, { 24, 16 }, { 4, 16 }, - { 214, 32 }, { 188, 32 }, { 172, 32 }, { 156, 32 }, { 140, 32 }, { 124, 32 }, { 108, 32 }, { 92, 32 }, { 76, 32 }, { 60, 32 }, { 44, 32 }, { 28, 32 }, { 6, 32 }, - { 224, 48 }, { 208, 48 }, { 186, 48 }, { 164, 48 }, { 148, 48 }, { 132, 48 }, { 116, 48 }, { 100, 48 }, { 84, 48 }, { 68, 48 }, { 52, 48 }, { 36, 48 }, { 9, 48 }, - { 224, 64 }, { 208, 64 }, { 192, 64 }, { 176, 64 }, { 160, 64 }, { 102, 64 }, { 42, 64 }, { 22, 64 }, { 2, 64 } - }, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 4, 1, 1, 1 - } -}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/capsunlocked/cu80/v2/ansi/ansi.c b/keyboards/capsunlocked/cu80/v2/ansi/ansi.c deleted file mode 100644 index 2d4055d984..0000000000 --- a/keyboards/capsunlocked/cu80/v2/ansi/ansi.c +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2021 CapsUnlocked -// SPDX-License-Identifier: GPL-2.0-or-later -#include "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - {0, NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - {32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16}, - {33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49}, - {62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, NO_LED, NO_LED, NO_LED, NO_LED}, - {63, NO_LED, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, NO_LED, NO_LED, 75, NO_LED}, - {86, 85, 84, NO_LED, NO_LED, 83, NO_LED, NO_LED, NO_LED, 82, 81, 80, 79, 78, NO_LED, 77, 76} - }, { - {0, 0}, {28, 0}, {42, 0}, {56, 0}, {71, 0}, {85, 0}, {99, 0}, {113, 0}, {127, 0}, {141, 0}, {155, 0}, {169, 0}, {184, 0}, {198, 0}, {212, 0}, {226, 0}, {226, 13}, {212, 13}, {198, 13}, {184, 13}, {169, 13}, {155, 13}, {141, 13}, {127, 13}, {113, 13}, {99, 13}, {85, 13}, {71, 13}, {56, 13}, {42, 13}, {28, 13}, {14, 13}, {0, 13}, {0, 26}, {14, 26}, {28, 26}, {42, 26}, {56, 26}, {71, 26}, {85, 26}, {99, 26}, {113, 26}, {127, 26}, {141, 26}, {155, 26}, {169, 26}, {184, 26}, {198, 26}, {212, 26}, {226, 26}, {169, 38}, {155, 38}, {141, 38}, {127, 38}, {113, 38}, {99, 38}, {85, 38}, {71, 38}, {56, 38}, {42, 38}, {28, 38}, {14, 38}, {0, 38}, {0, 51}, {28, 51}, {42, 51}, {56, 51}, {71, 51}, {85, 51}, {99, 51}, {113, 51}, {127, 51}, {141, 51}, {155, 51}, {169, 51}, {212, 51}, {226, 64}, {212, 64}, {184, 64}, {169, 64}, {155, 64}, {141, 64}, {127, 64}, {71, 64}, {28, 64}, {14, 64}, {0, 64} - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 1, 1, 1 - } -}; -#endif diff --git a/keyboards/capsunlocked/cu80/v2/ansi/keyboard.json b/keyboards/capsunlocked/cu80/v2/ansi/keyboard.json index 9dc24b5e40..fe38c3dff8 100644 --- a/keyboards/capsunlocked/cu80/v2/ansi/keyboard.json +++ b/keyboards/capsunlocked/cu80/v2/ansi/keyboard.json @@ -2,5 +2,96 @@ "keyboard_name": "CU80 v2 ANSI", "usb": { "pid": "0x0081" + }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 28, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 56, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 71, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 85, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 99, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 113, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 127, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 141, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 155, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 169, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 184, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 198, "y": 0, "flags": 4}, + {"matrix": [0, 15], "x": 212, "y": 0, "flags": 8}, + {"matrix": [0, 16], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 16], "x": 224, "y": 13, "flags": 4}, + {"matrix": [1, 15], "x": 212, "y": 13, "flags": 4}, + {"matrix": [1, 14], "x": 198, "y": 13, "flags": 4}, + {"matrix": [1, 13], "x": 184, "y": 13, "flags": 4}, + {"matrix": [1, 12], "x": 169, "y": 13, "flags": 4}, + {"matrix": [1, 11], "x": 155, "y": 13, "flags": 4}, + {"matrix": [1, 10], "x": 141, "y": 13, "flags": 4}, + {"matrix": [1, 9], "x": 127, "y": 13, "flags": 4}, + {"matrix": [1, 8], "x": 113, "y": 13, "flags": 4}, + {"matrix": [1, 7], "x": 99, "y": 13, "flags": 4}, + {"matrix": [1, 6], "x": 85, "y": 13, "flags": 4}, + {"matrix": [1, 5], "x": 71, "y": 13, "flags": 4}, + {"matrix": [1, 4], "x": 56, "y": 13, "flags": 4}, + {"matrix": [1, 3], "x": 42, "y": 13, "flags": 4}, + {"matrix": [1, 2], "x": 28, "y": 13, "flags": 4}, + {"matrix": [1, 1], "x": 14, "y": 13, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 13, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 26, "flags": 4}, + {"matrix": [2, 1], "x": 14, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 28, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 42, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 71, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 85, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 99, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 113, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 127, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 141, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 155, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 169, "y": 26, "flags": 4}, + {"matrix": [2, 13], "x": 184, "y": 26, "flags": 4}, + {"matrix": [2, 14], "x": 198, "y": 26, "flags": 4}, + {"matrix": [2, 15], "x": 212, "y": 26, "flags": 4}, + {"matrix": [2, 16], "x": 224, "y": 26, "flags": 4}, + {"matrix": [3, 12], "x": 169, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 155, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 141, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 127, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 113, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 99, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 85, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 71, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 56, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 42, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 28, "y": 38, "flags": 4}, + {"matrix": [3, 1], "x": 14, "y": 38, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 38, "flags": 8}, + {"matrix": [4, 0], "x": 0, "y": 51, "flags": 1}, + {"matrix": [4, 2], "x": 28, "y": 51, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 51, "flags": 4}, + {"matrix": [4, 4], "x": 56, "y": 51, "flags": 4}, + {"matrix": [4, 5], "x": 71, "y": 51, "flags": 4}, + {"matrix": [4, 6], "x": 85, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 99, "y": 51, "flags": 4}, + {"matrix": [4, 8], "x": 113, "y": 51, "flags": 4}, + {"matrix": [4, 9], "x": 127, "y": 51, "flags": 4}, + {"matrix": [4, 10], "x": 141, "y": 51, "flags": 4}, + {"matrix": [4, 11], "x": 155, "y": 51, "flags": 4}, + {"matrix": [4, 12], "x": 169, "y": 51, "flags": 1}, + {"matrix": [4, 15], "x": 212, "y": 51, "flags": 4}, + {"matrix": [5, 16], "x": 224, "y": 64, "flags": 4}, + {"matrix": [5, 15], "x": 212, "y": 64, "flags": 4}, + {"matrix": [5, 13], "x": 184, "y": 64, "flags": 4}, + {"matrix": [5, 12], "x": 169, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 155, "y": 64, "flags": 1}, + {"matrix": [5, 10], "x": 141, "y": 64, "flags": 1}, + {"matrix": [5, 9], "x": 127, "y": 64, "flags": 1}, + {"matrix": [5, 5], "x": 71, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 28, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [5, 0], "x": 0, "y": 64, "flags": 1} + ] } } diff --git a/keyboards/capsunlocked/cu80/v2/iso/iso.c b/keyboards/capsunlocked/cu80/v2/iso/iso.c deleted file mode 100644 index 0e8e26e5dd..0000000000 --- a/keyboards/capsunlocked/cu80/v2/iso/iso.c +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2021 CapsUnlocked -// SPDX-License-Identifier: GPL-2.0-or-later -#include "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - {0, NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - {32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16}, - {33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49}, - {62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, NO_LED, NO_LED, NO_LED, NO_LED}, - {63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, NO_LED, NO_LED, 76, NO_LED}, - {87, 86, 85, NO_LED, NO_LED, 84, NO_LED, NO_LED, NO_LED, 83, 82, 81, 80, 79, NO_LED, 78, 77} - }, { - {0, 0}, {28, 0}, {42, 0}, {56, 0}, {71, 0}, {85, 0}, {99, 0}, {113, 0}, {127, 0}, {141, 0}, {155, 0}, {169, 0}, {184, 0}, {198, 0}, {212, 0}, {226, 0}, {226, 26}, {212, 26}, {198, 26}, {184, 26}, {169, 26}, {155, 26}, {141, 26}, {127, 26}, {113, 26}, {99, 26}, {85, 26}, {71, 26}, {56, 26}, {42, 26}, {28, 26}, {14, 26}, {0, 26}, {0, 26}, {14, 26}, {28, 26}, {42, 26}, {56, 26}, {71, 26}, {85, 26}, {99, 26}, {113, 26}, {127, 26}, {141, 26}, {155, 26}, {169, 26}, {184, 26}, {198, 26}, {212, 26}, {226, 26}, {169, 38}, {155, 38}, {141, 38}, {127, 38}, {113, 38}, {99, 38}, {85, 38}, {71, 38}, {56, 38}, {42, 38}, {28, 38}, {14, 38}, {0, 38}, {0, 51}, {14, 51}, {28, 51}, {42, 51}, {56, 51}, {71, 51}, {85, 51}, {99, 51}, {113, 51}, {127, 51}, {141, 51}, {155, 51}, {169, 51}, {212, 51}, {226, 64}, {212, 64}, {184, 64}, {169, 64}, {155, 64}, {141, 64}, {127, 64}, {71, 64}, {28, 64}, {14, 64}, {0, 64} - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 1, 1, 1 - } -}; -#endif diff --git a/keyboards/capsunlocked/cu80/v2/iso/keyboard.json b/keyboards/capsunlocked/cu80/v2/iso/keyboard.json index 33d49db64a..b78b8af41e 100644 --- a/keyboards/capsunlocked/cu80/v2/iso/keyboard.json +++ b/keyboards/capsunlocked/cu80/v2/iso/keyboard.json @@ -2,5 +2,97 @@ "keyboard_name": "CU80 v2 ISO", "usb": { "pid": "0x0083" + }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 28, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 56, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 71, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 85, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 99, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 113, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 127, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 141, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 155, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 169, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 184, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 198, "y": 0, "flags": 4}, + {"matrix": [0, 15], "x": 212, "y": 0, "flags": 8}, + {"matrix": [0, 16], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 16], "x": 224, "y": 26, "flags": 4}, + {"matrix": [1, 15], "x": 212, "y": 26, "flags": 4}, + {"matrix": [1, 14], "x": 198, "y": 26, "flags": 4}, + {"matrix": [1, 13], "x": 184, "y": 26, "flags": 4}, + {"matrix": [1, 12], "x": 169, "y": 26, "flags": 4}, + {"matrix": [1, 11], "x": 155, "y": 26, "flags": 4}, + {"matrix": [1, 10], "x": 141, "y": 26, "flags": 4}, + {"matrix": [1, 9], "x": 127, "y": 26, "flags": 4}, + {"matrix": [1, 8], "x": 113, "y": 26, "flags": 4}, + {"matrix": [1, 7], "x": 99, "y": 26, "flags": 4}, + {"matrix": [1, 6], "x": 85, "y": 26, "flags": 4}, + {"matrix": [1, 5], "x": 71, "y": 26, "flags": 4}, + {"matrix": [1, 4], "x": 56, "y": 26, "flags": 4}, + {"matrix": [1, 3], "x": 42, "y": 26, "flags": 4}, + {"matrix": [1, 2], "x": 28, "y": 26, "flags": 4}, + {"matrix": [1, 1], "x": 14, "y": 26, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 26, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 26, "flags": 4}, + {"matrix": [2, 1], "x": 14, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 28, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 42, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 71, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 85, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 99, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 113, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 127, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 141, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 155, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 169, "y": 26, "flags": 4}, + {"matrix": [2, 13], "x": 184, "y": 26, "flags": 4}, + {"matrix": [2, 14], "x": 198, "y": 26, "flags": 4}, + {"matrix": [2, 15], "x": 212, "y": 26, "flags": 4}, + {"matrix": [2, 16], "x": 224, "y": 26, "flags": 4}, + {"matrix": [3, 12], "x": 169, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 155, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 141, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 127, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 113, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 99, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 85, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 71, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 56, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 42, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 28, "y": 38, "flags": 4}, + {"matrix": [3, 1], "x": 14, "y": 38, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 38, "flags": 8}, + {"matrix": [4, 0], "x": 0, "y": 51, "flags": 1}, + {"matrix": [4, 1], "x": 14, "y": 51, "flags": 4}, + {"matrix": [4, 2], "x": 28, "y": 51, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 51, "flags": 4}, + {"matrix": [4, 4], "x": 56, "y": 51, "flags": 4}, + {"matrix": [4, 5], "x": 71, "y": 51, "flags": 4}, + {"matrix": [4, 6], "x": 85, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 99, "y": 51, "flags": 4}, + {"matrix": [4, 8], "x": 113, "y": 51, "flags": 4}, + {"matrix": [4, 9], "x": 127, "y": 51, "flags": 4}, + {"matrix": [4, 10], "x": 141, "y": 51, "flags": 4}, + {"matrix": [4, 11], "x": 155, "y": 51, "flags": 4}, + {"matrix": [4, 12], "x": 169, "y": 51, "flags": 1}, + {"matrix": [4, 15], "x": 212, "y": 51, "flags": 4}, + {"matrix": [5, 16], "x": 224, "y": 64, "flags": 4}, + {"matrix": [5, 15], "x": 212, "y": 64, "flags": 4}, + {"matrix": [5, 13], "x": 184, "y": 64, "flags": 4}, + {"matrix": [5, 12], "x": 169, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 155, "y": 64, "flags": 1}, + {"matrix": [5, 10], "x": 141, "y": 64, "flags": 1}, + {"matrix": [5, 9], "x": 127, "y": 64, "flags": 1}, + {"matrix": [5, 5], "x": 71, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 28, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [5, 0], "x": 0, "y": 64, "flags": 1} + ] } } diff --git a/keyboards/checkerboards/quark_lp/keyboard.json b/keyboards/checkerboards/quark_lp/keyboard.json index 7634a71d3e..59666f8d69 100644 --- a/keyboards/checkerboards/quark_lp/keyboard.json +++ b/keyboards/checkerboards/quark_lp/keyboard.json @@ -32,6 +32,59 @@ "pixel_flow": true }, "driver": "ws2812", + "layout": [ + {"matrix": [3, 11], "x": 224, "y": 64, "flags": 1}, + {"matrix": [3, 10], "x": 204, "y": 64, "flags": 1}, + {"matrix": [3, 9], "x": 183, "y": 64, "flags": 1}, + {"matrix": [3, 8], "x": 163, "y": 64, "flags": 1}, + {"x": 153, "y": 64, "flags": 1}, + {"matrix": [3, 7], "x": 143, "y": 64, "flags": 1}, + {"x": 133, "y": 64, "flags": 1}, + {"matrix": [3, 6], "x": 123, "y": 64, "flags": 1}, + {"x": 113, "y": 64, "flags": 1}, + {"matrix": [3, 5], "x": 102, "y": 64, "flags": 1}, + {"matrix": [3, 4], "x": 82, "y": 64, "flags": 1}, + {"matrix": [3, 3], "x": 61, "y": 64, "flags": 1}, + {"matrix": [3, 2], "x": 41, "y": 64, "flags": 1}, + {"matrix": [3, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 43, "flags": 1}, + {"matrix": [2, 1], "x": 21, "y": 43, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 43, "flags": 4}, + {"matrix": [2, 3], "x": 61, "y": 43, "flags": 4}, + {"matrix": [2, 4], "x": 82, "y": 43, "flags": 4}, + {"matrix": [2, 5], "x": 102, "y": 43, "flags": 4}, + {"matrix": [2, 6], "x": 123, "y": 43, "flags": 4}, + {"matrix": [2, 7], "x": 143, "y": 43, "flags": 4}, + {"matrix": [2, 8], "x": 163, "y": 43, "flags": 4}, + {"matrix": [2, 9], "x": 183, "y": 43, "flags": 4}, + {"matrix": [2, 10], "x": 204, "y": 43, "flags": 4}, + {"matrix": [2, 11], "x": 224, "y": 43, "flags": 1}, + {"matrix": [1, 11], "x": 224, "y": 21, "flags": 1}, + {"matrix": [1, 10], "x": 204, "y": 21, "flags": 4}, + {"matrix": [1, 9], "x": 183, "y": 21, "flags": 4}, + {"matrix": [1, 8], "x": 163, "y": 21, "flags": 4}, + {"matrix": [1, 7], "x": 143, "y": 21, "flags": 4}, + {"matrix": [1, 6], "x": 123, "y": 21, "flags": 4}, + {"matrix": [1, 5], "x": 102, "y": 21, "flags": 4}, + {"matrix": [1, 4], "x": 82, "y": 21, "flags": 4}, + {"matrix": [1, 3], "x": 61, "y": 21, "flags": 4}, + {"matrix": [1, 2], "x": 41, "y": 21, "flags": 4}, + {"matrix": [1, 1], "x": 21, "y": 21, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 21, "flags": 1}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 21, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 41, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 61, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 82, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 102, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 123, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 143, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 163, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 183, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 204, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 224, "y": 0, "flags": 1} + ], "max_brightness": 125, "sat_steps": 8, "val_steps": 8, diff --git a/keyboards/checkerboards/quark_lp/quark_lp.c b/keyboards/checkerboards/quark_lp/quark_lp.c deleted file mode 100644 index 89c685f2b5..0000000000 --- a/keyboards/checkerboards/quark_lp/quark_lp.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2021 Nathan Spears - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 }, - { 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 }, - { 14, 13, 12, 11, 10, 9, 7, 5, 3, 2, 1, 0 } -}, { - // LED Index to Physical Position - { 244, 0 }, { 224, 0 }, { 203, 0 }, { 183, 0 }, { 173, 0 }, { 163, 0 }, { 153, 0 }, { 143, 0 }, { 133, 0 }, { 122, 0 }, { 102, 0 }, { 81, 0 }, { 61, 0 }, { 41, 0 }, { 20, 0 }, - { 20, 21 }, { 41, 21 }, { 61, 21 }, { 81, 21 }, { 102, 21 }, { 122, 21 }, { 143, 21 }, { 163, 21 }, { 183, 21 }, { 203, 21 }, { 224, 21 }, { 244, 21 }, - { 244, 43 }, { 224, 43 }, { 203, 43 }, { 183, 43 }, { 163, 43 }, { 143, 43 }, { 122, 43 }, { 102, 43 }, { 81, 43 }, { 61, 43 }, { 41, 43 }, { 20, 43 }, - { 20, 64 }, { 41, 64 }, { 61, 64 }, { 81, 64 }, { 102, 64 }, { 112, 64 }, { 122, 64 }, { 132, 64 }, { 143, 64 }, { 153, 64 }, { 163, 64 }, { 183, 64 } -}, { - // LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1 -} }; -#endif diff --git a/keyboards/cherrybstudio/cb87rgb/cb87rgb.c b/keyboards/cherrybstudio/cb87rgb/cb87rgb.c index 5c2480f3fb..40ef6d6506 100644 --- a/keyboards/cherrybstudio/cb87rgb/cb87rgb.c +++ b/keyboards/cherrybstudio/cb87rgb/cb87rgb.c @@ -13,41 +13,7 @@ along with this program. If not, see . #include "quantum.h" -//x = 224 / (NUMBER_OF_COLS - 1) * COL_POSITION -//y = 64 / (NUMBER_OF_ROWS - 1) * ROW_POSITION - #ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, - { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }, - { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 }, - { 40, 41, 42, 43, 44, 45, 46, 47, 48, 49 }, - { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59 }, - { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 }, - { 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 }, - { 80, 81, 82, 83, 84, 85, 86, 87, 88, 89 }, - { 90, 91, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } -}, { - // LED Index to Physical Position - { 0, 0 }, { 13, 0 }, { 26, 0 }, { 39, 0 }, { 52, 0 }, { 65, 0 }, { 78, 0 }, { 91, 0 }, { 104, 0 }, { 117, 0 }, { 130, 0 }, { 143, 0 }, { 156, 0 }, { 195, 0 }, { 208, 0 }, { 224, 0 }, - { 0, 12 }, { 13, 12 }, { 26, 12 }, { 39, 12 }, { 52, 12 }, { 65, 12 }, { 78, 12 }, { 91, 12 }, { 104, 12 }, { 117, 12 }, { 130, 12 }, { 143, 12 }, { 156, 12 }, { 169, 12 }, { 182, 24 }, { 195, 12 }, { 208, 12 }, { 224, 12 }, - { 0, 24 }, { 13, 24 }, { 26, 24 }, { 39, 24 }, { 52, 24 }, { 65, 24 }, { 78, 24 }, { 91, 24 }, { 104, 24 }, { 117, 24 }, { 130, 24 }, { 143, 24 }, { 156, 24 }, { 169, 24 }, { 195, 24 }, { 208, 24 }, { 224, 24 }, - { 0, 36 }, { 13, 36 }, { 26, 36 }, { 39, 36 }, { 52, 36 }, { 65, 36 }, { 78, 36 }, { 91, 36 }, { 104, 36 }, { 117, 36 }, { 130, 36 }, { 143, 36 }, { 156, 36 }, { 169, 36 }, - { 0, 48 }, { 13, 48 }, { 26, 48 }, { 39, 48 }, { 52, 48 }, { 65, 48 }, { 78, 48 }, { 91, 48 }, { 104, 48 }, { 117, 48 }, { 130, 48 }, { 143, 48 }, { 156, 48 }, { 169, 48 }, { 208, 48 }, - { 0, 64 }, { 13, 64 }, { 26, 64 }, { 78, 64 }, { 130, 64 }, { 143, 64 }, { 156, 64 }, { 169, 64 }, { 195, 64 }, { 208, 64 }, { 224, 64 }, { 182, 0 } -}, { - // LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - -} }; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/cherrybstudio/cb87rgb/keyboard.json b/keyboards/cherrybstudio/cb87rgb/keyboard.json index 1ce2fab78f..710bc2ab50 100644 --- a/keyboards/cherrybstudio/cb87rgb/keyboard.json +++ b/keyboards/cherrybstudio/cb87rgb/keyboard.json @@ -53,6 +53,100 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 13, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 26, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 39, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 52, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 65, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 78, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 91, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 104, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 117, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 130, "y": 0, "flags": 1}, + {"matrix": [1, 1], "x": 143, "y": 0, "flags": 1}, + {"matrix": [1, 2], "x": 156, "y": 0, "flags": 1}, + {"matrix": [1, 3], "x": 195, "y": 0, "flags": 1}, + {"matrix": [1, 4], "x": 208, "y": 0, "flags": 1}, + {"matrix": [1, 5], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 6], "x": 0, "y": 12, "flags": 1}, + {"matrix": [1, 7], "x": 13, "y": 12, "flags": 1}, + {"matrix": [1, 8], "x": 26, "y": 12, "flags": 1}, + {"matrix": [1, 9], "x": 39, "y": 12, "flags": 1}, + {"matrix": [2, 0], "x": 52, "y": 12, "flags": 1}, + {"matrix": [2, 1], "x": 65, "y": 12, "flags": 1}, + {"matrix": [2, 2], "x": 78, "y": 12, "flags": 1}, + {"matrix": [2, 3], "x": 91, "y": 12, "flags": 1}, + {"matrix": [2, 4], "x": 104, "y": 12, "flags": 1}, + {"matrix": [2, 5], "x": 117, "y": 12, "flags": 1}, + {"matrix": [2, 6], "x": 130, "y": 12, "flags": 1}, + {"matrix": [2, 7], "x": 143, "y": 12, "flags": 1}, + {"matrix": [2, 8], "x": 156, "y": 12, "flags": 1}, + {"matrix": [2, 9], "x": 169, "y": 12, "flags": 1}, + {"matrix": [3, 0], "x": 182, "y": 24, "flags": 1}, + {"matrix": [3, 1], "x": 195, "y": 12, "flags": 1}, + {"matrix": [3, 2], "x": 208, "y": 12, "flags": 1}, + {"matrix": [3, 3], "x": 224, "y": 12, "flags": 1}, + {"matrix": [3, 4], "x": 0, "y": 24, "flags": 1}, + {"matrix": [3, 5], "x": 13, "y": 24, "flags": 1}, + {"matrix": [3, 6], "x": 26, "y": 24, "flags": 1}, + {"matrix": [3, 7], "x": 39, "y": 24, "flags": 1}, + {"matrix": [3, 8], "x": 52, "y": 24, "flags": 1}, + {"matrix": [3, 9], "x": 65, "y": 24, "flags": 1}, + {"matrix": [4, 0], "x": 78, "y": 24, "flags": 1}, + {"matrix": [4, 1], "x": 91, "y": 24, "flags": 1}, + {"matrix": [4, 2], "x": 104, "y": 24, "flags": 1}, + {"matrix": [4, 3], "x": 117, "y": 24, "flags": 1}, + {"matrix": [4, 4], "x": 130, "y": 24, "flags": 1}, + {"matrix": [4, 5], "x": 143, "y": 24, "flags": 1}, + {"matrix": [4, 6], "x": 156, "y": 24, "flags": 1}, + {"matrix": [4, 7], "x": 169, "y": 24, "flags": 1}, + {"matrix": [4, 8], "x": 195, "y": 24, "flags": 1}, + {"matrix": [4, 9], "x": 208, "y": 24, "flags": 1}, + {"matrix": [5, 0], "x": 224, "y": 24, "flags": 1}, + {"matrix": [5, 1], "x": 0, "y": 36, "flags": 1}, + {"matrix": [5, 2], "x": 13, "y": 36, "flags": 1}, + {"matrix": [5, 3], "x": 26, "y": 36, "flags": 1}, + {"matrix": [5, 4], "x": 39, "y": 36, "flags": 1}, + {"matrix": [5, 5], "x": 52, "y": 36, "flags": 1}, + {"matrix": [5, 6], "x": 65, "y": 36, "flags": 1}, + {"matrix": [5, 7], "x": 78, "y": 36, "flags": 1}, + {"matrix": [5, 8], "x": 91, "y": 36, "flags": 1}, + {"matrix": [5, 9], "x": 104, "y": 36, "flags": 1}, + {"matrix": [6, 0], "x": 117, "y": 36, "flags": 1}, + {"matrix": [6, 1], "x": 130, "y": 36, "flags": 1}, + {"matrix": [6, 2], "x": 143, "y": 36, "flags": 1}, + {"matrix": [6, 3], "x": 156, "y": 36, "flags": 1}, + {"matrix": [6, 4], "x": 169, "y": 36, "flags": 1}, + {"matrix": [6, 5], "x": 0, "y": 48, "flags": 1}, + {"matrix": [6, 6], "x": 13, "y": 48, "flags": 1}, + {"matrix": [6, 7], "x": 26, "y": 48, "flags": 1}, + {"matrix": [6, 8], "x": 39, "y": 48, "flags": 1}, + {"matrix": [6, 9], "x": 52, "y": 48, "flags": 1}, + {"matrix": [7, 0], "x": 65, "y": 48, "flags": 1}, + {"matrix": [7, 1], "x": 78, "y": 48, "flags": 1}, + {"matrix": [7, 2], "x": 91, "y": 48, "flags": 1}, + {"matrix": [7, 3], "x": 104, "y": 48, "flags": 1}, + {"matrix": [7, 4], "x": 117, "y": 48, "flags": 1}, + {"matrix": [7, 5], "x": 130, "y": 48, "flags": 1}, + {"matrix": [7, 6], "x": 143, "y": 48, "flags": 1}, + {"matrix": [7, 7], "x": 156, "y": 48, "flags": 1}, + {"matrix": [7, 8], "x": 169, "y": 48, "flags": 1}, + {"matrix": [7, 9], "x": 208, "y": 48, "flags": 1}, + {"matrix": [8, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [8, 1], "x": 13, "y": 64, "flags": 1}, + {"matrix": [8, 2], "x": 26, "y": 64, "flags": 1}, + {"matrix": [8, 3], "x": 78, "y": 64, "flags": 1}, + {"matrix": [8, 4], "x": 130, "y": 64, "flags": 1}, + {"matrix": [8, 5], "x": 143, "y": 64, "flags": 1}, + {"matrix": [8, 6], "x": 156, "y": 64, "flags": 1}, + {"matrix": [8, 7], "x": 169, "y": 64, "flags": 1}, + {"matrix": [8, 8], "x": 195, "y": 64, "flags": 1}, + {"matrix": [8, 9], "x": 208, "y": 64, "flags": 1}, + {"matrix": [9, 0], "x": 224, "y": 64, "flags": 1}, + {"matrix": [9, 1], "x": 182, "y": 0, "flags": 1} + ], "max_brightness": 200, "sleep": true }, diff --git a/keyboards/concreteflowers/cor_tkl/cor_tkl.c b/keyboards/concreteflowers/cor_tkl/cor_tkl.c index d4f0ec0082..a90931439b 100644 --- a/keyboards/concreteflowers/cor_tkl/cor_tkl.c +++ b/keyboards/concreteflowers/cor_tkl/cor_tkl.c @@ -16,22 +16,6 @@ #include "quantum.h" -led_config_t g_led_config = {{ - // Key Matrix to LED Index - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 1, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { 0, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } -}, { - // LED Index to Physical Position - { 5, 40 }, { 211, 0 } -}, { - // LED Index to Flag - LED_FLAG_INDICATOR, LED_FLAG_INDICATOR -}}; - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; diff --git a/keyboards/concreteflowers/cor_tkl/keyboard.json b/keyboards/concreteflowers/cor_tkl/keyboard.json index d5a293eaa3..ccdd0935fa 100644 --- a/keyboards/concreteflowers/cor_tkl/keyboard.json +++ b/keyboards/concreteflowers/cor_tkl/keyboard.json @@ -32,7 +32,11 @@ "rows": ["GP0", "GP1", "GP2", "GP21", "GP3", "GP4"] }, "rgb_matrix": { - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [3, 0], "x": 5, "y": 40, "flags": 8}, + {"matrix": [0, 15], "x": 211, "y": 0, "flags": 8} + ] }, "ws2812": { "pin": "GP19", From 330d195f9a6880ee2212be512ab9e2ae5765f733 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 02:58:45 -0600 Subject: [PATCH 24/99] Migrate `g_led_config` to DD (D) (#25560) --- keyboards/deng/djam/djam.c | 43 --------- keyboards/deng/djam/keyboard.json | 35 +++++++- keyboards/deng/thirty/keyboard.json | 32 +++++++ keyboards/deng/thirty/thirty.c | 32 ------- keyboards/doro67/rgb/keyboard.json | 71 ++++++++++++++- keyboards/doro67/rgb/rgb.c | 46 ---------- keyboards/dotmod/dymium65/dymium65.c | 24 ----- keyboards/dotmod/dymium65/keyboard.json | 68 ++++++++++++++ keyboards/dtisaac/dosa40rgb/dosa40rgb.c | 39 -------- keyboards/dtisaac/dosa40rgb/keyboard.json | 44 ++++++++++ keyboards/dumbpad/v3x/keyboard.json | 18 ++++ keyboards/dumbpad/v3x/v3x.c | 30 ------- keyboards/durgod/dgk6x/galaxy/galaxy.c | 25 +----- keyboards/durgod/dgk6x/galaxy/keyboard.json | 88 +++++++++++++++++++ .../durgod/dgk6x/hades_ansi/hades_ansi.c | 22 +---- .../durgod/dgk6x/hades_ansi/keyboard.json | 72 +++++++++++++++ keyboards/durgod/dgk6x/venus/keyboard.json | 65 ++++++++++++++ keyboards/durgod/dgk6x/venus/venus.c | 20 ----- keyboards/dztech/dz60rgb/dz60rgb.c | 22 ----- keyboards/dztech/dz60rgb/info.json | 67 ++++++++++++++ keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c | 22 ----- keyboards/dztech/dz60rgb_ansi/info.json | 65 ++++++++++++++ keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c | 22 ----- keyboards/dztech/dz60rgb_wkl/info.json | 66 ++++++++++++++ keyboards/dztech/dz64rgb/dz64rgb.c | 23 ----- keyboards/dztech/dz64rgb/keyboard.json | 66 ++++++++++++++ keyboards/dztech/dz65rgb/v1/keyboard.json | 70 +++++++++++++++ keyboards/dztech/dz65rgb/v1/v1.c | 23 ----- keyboards/dztech/dz65rgb/v2/keyboard.json | 70 +++++++++++++++ keyboards/dztech/dz65rgb/v2/v2.c | 23 ----- keyboards/dztech/dz65rgb/v3/keyboard.json | 70 +++++++++++++++ keyboards/dztech/dz65rgb/v3/v3.c | 20 ----- 32 files changed, 967 insertions(+), 436 deletions(-) delete mode 100644 keyboards/deng/djam/djam.c delete mode 100644 keyboards/doro67/rgb/rgb.c delete mode 100644 keyboards/dtisaac/dosa40rgb/dosa40rgb.c diff --git a/keyboards/deng/djam/djam.c b/keyboards/deng/djam/djam.c deleted file mode 100644 index 3514ff050c..0000000000 --- a/keyboards/deng/djam/djam.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright 2022 Leo Deng (@myst729) - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - /* Key Matrix to LED Index */ - { 17, 16, 15, NO_LED, NO_LED, 7, 6, 5 }, - { 21, 17, 16, 15, 7, 6, 5, 1 }, - { 19, 18, 13, 11, 9, 4, 3, NO_LED } - }, - { - /* LED Index to Physical Position */ - // Switch LEDs - {224,14}, {224,24}, {224,33}, {212,57}, {192,57}, {192,38}, {172,38}, {152,38}, - {152,57}, {142,57}, {132,57}, {112,57}, {92,57}, {82,57}, {72,57}, - {72,38}, {52,38}, {32,38}, {32,57}, {12,57}, {0,33}, {0,24}, {0,14}, - // Underglow LEDs - {0,0}, {92,0}, {132,0}, {224,0}, {222,64}, {172,64}, {72,64}, {2,64}, - }, - { - /* LED Index to Flag */ - 2, 4, 2, 4, 4, 4, 4, 4, - 2, 4, 2, 4, 2, 4, 2, - 4, 4, 4, 4, 4, 2, 4, 2, - 2, 2, 2, 2, 2, 2, 2, 2 - } -}; -#endif diff --git a/keyboards/deng/djam/keyboard.json b/keyboards/deng/djam/keyboard.json index a39c234bfa..51b2f45ce7 100644 --- a/keyboards/deng/djam/keyboard.json +++ b/keyboards/deng/djam/keyboard.json @@ -15,7 +15,40 @@ "solid_reactive_multinexus": true, "solid_multisplash": true }, - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"x": 224, "y": 14, "flags": 2}, + {"matrix": [1, 7], "x": 224, "y": 24, "flags": 4}, + {"x": 224, "y": 33, "flags": 2}, + {"matrix": [2, 6], "x": 212, "y": 57, "flags": 4}, + {"matrix": [2, 5], "x": 192, "y": 57, "flags": 4}, + {"matrix": [1, 6], "x": 192, "y": 38, "flags": 4}, + {"matrix": [1, 5], "x": 172, "y": 38, "flags": 4}, + {"matrix": [1, 4], "x": 152, "y": 38, "flags": 4}, + {"x": 152, "y": 57, "flags": 2}, + {"matrix": [2, 4], "x": 142, "y": 57, "flags": 4}, + {"x": 132, "y": 57, "flags": 2}, + {"matrix": [2, 3], "x": 112, "y": 57, "flags": 4}, + {"x": 92, "y": 57, "flags": 2}, + {"matrix": [2, 2], "x": 82, "y": 57, "flags": 4}, + {"x": 72, "y": 57, "flags": 2}, + {"matrix": [1, 3], "x": 72, "y": 38, "flags": 4}, + {"matrix": [1, 2], "x": 52, "y": 38, "flags": 4}, + {"matrix": [1, 1], "x": 32, "y": 38, "flags": 4}, + {"matrix": [2, 1], "x": 32, "y": 57, "flags": 4}, + {"matrix": [2, 0], "x": 12, "y": 57, "flags": 4}, + {"x": 0, "y": 33, "flags": 2}, + {"matrix": [1, 0], "x": 0, "y": 24, "flags": 4}, + {"x": 0, "y": 14, "flags": 2}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 92, "y": 0, "flags": 2}, + {"x": 132, "y": 0, "flags": 2}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 222, "y": 64, "flags": 2}, + {"x": 172, "y": 64, "flags": 2}, + {"x": 72, "y": 64, "flags": 2}, + {"x": 2, "y": 64, "flags": 2} + ] }, "features": { "backlight": true, diff --git a/keyboards/deng/thirty/keyboard.json b/keyboards/deng/thirty/keyboard.json index da36ae19f5..394d7b427b 100644 --- a/keyboards/deng/thirty/keyboard.json +++ b/keyboards/deng/thirty/keyboard.json @@ -57,6 +57,38 @@ "animation": "cycle_all" }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 4, "y": 4, "flags": 4}, + {"matrix": [0, 1], "x": 28, "y": 4, "flags": 4}, + {"matrix": [0, 2], "x": 52, "y": 4, "flags": 4}, + {"matrix": [0, 3], "x": 76, "y": 4, "flags": 4}, + {"matrix": [0, 4], "x": 100, "y": 4, "flags": 4}, + {"matrix": [1, 4], "x": 100, "y": 32, "flags": 4}, + {"matrix": [1, 3], "x": 76, "y": 32, "flags": 4}, + {"matrix": [1, 2], "x": 52, "y": 32, "flags": 4}, + {"matrix": [1, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 4, "y": 60, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 60, "flags": 4}, + {"matrix": [2, 2], "x": 52, "y": 60, "flags": 4}, + {"matrix": [2, 3], "x": 76, "y": 60, "flags": 4}, + {"matrix": [2, 4], "x": 100, "y": 60, "flags": 4}, + {"matrix": [5, 4], "x": 124, "y": 60, "flags": 4}, + {"matrix": [5, 3], "x": 148, "y": 60, "flags": 4}, + {"matrix": [5, 2], "x": 172, "y": 60, "flags": 4}, + {"matrix": [5, 1], "x": 196, "y": 60, "flags": 4}, + {"matrix": [5, 0], "x": 220, "y": 60, "flags": 4}, + {"matrix": [4, 0], "x": 220, "y": 32, "flags": 4}, + {"matrix": [4, 1], "x": 196, "y": 32, "flags": 4}, + {"matrix": [4, 2], "x": 172, "y": 32, "flags": 4}, + {"matrix": [4, 3], "x": 148, "y": 32, "flags": 4}, + {"matrix": [4, 4], "x": 124, "y": 32, "flags": 4}, + {"matrix": [3, 4], "x": 124, "y": 4, "flags": 4}, + {"matrix": [3, 3], "x": 148, "y": 4, "flags": 4}, + {"matrix": [3, 2], "x": 172, "y": 4, "flags": 4}, + {"matrix": [3, 1], "x": 196, "y": 4, "flags": 4}, + {"matrix": [3, 0], "x": 220, "y": 4, "flags": 4} + ], "max_brightness": 200 }, "matrix_pins": { diff --git a/keyboards/deng/thirty/thirty.c b/keyboards/deng/thirty/thirty.c index 7d49bc1b03..ce7a76c703 100644 --- a/keyboards/deng/thirty/thirty.c +++ b/keyboards/deng/thirty/thirty.c @@ -15,38 +15,6 @@ */ #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - /* Key Matrix to LED Index */ - { 0, 1, 2, 3, 4 }, - { 9, 8, 7, 6, 5 }, - { 10, 11, 12, 13, 14 }, - { 29, 28, 27, 26, 25 }, - { 20, 21, 22, 23, 24 }, - { 19, 18, 17, 16, 15 }, - }, - { - /* LED Index to Physical Position */ - // Switch LEDs - {4,4}, {28,4}, {52,4}, {76,4}, {100,4}, - {100,32}, {76,32}, {52,32}, {28,32}, {4,32}, - {4,60}, {28,60}, {52,60}, {76,60}, {100,60}, - {124,60}, {148,60}, {172,60}, {196,60}, {220,60}, - {220,32}, {196,32}, {172,32}, {148,32}, {124,32}, - {124,4}, {148,4}, {172,4}, {196,4}, {220,4}, - // Underglow LEDs - }, - { - /* LED Index to Flag */ - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 - } -}; - -#endif - void board_init(void) { // Remap B11 AF to TIM2_CH4 AFIO->MAPR |= AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2; diff --git a/keyboards/doro67/rgb/keyboard.json b/keyboards/doro67/rgb/keyboard.json index de95db63d6..46f1d775ab 100644 --- a/keyboards/doro67/rgb/keyboard.json +++ b/keyboards/doro67/rgb/keyboard.json @@ -51,7 +51,76 @@ "solid_splash": true, "solid_multisplash": true }, - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 1}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 11, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 198, "y": 32, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 18, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 30, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 45, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 60, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 90, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 105, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 120, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 135, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 150, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 165, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 191, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 3, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 33, "y": 64, "flags": 1}, + {"matrix": [4, 3], "x": 101, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 135, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 153, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ] }, "features": { "bootmagic": true, diff --git a/keyboards/doro67/rgb/rgb.c b/keyboards/doro67/rgb/rgb.c deleted file mode 100644 index 280c1b6774..0000000000 --- a/keyboards/doro67/rgb/rgb.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright 2019 MechMerlin - * - * 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 "quantum.h" - -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED, 42, 43 }, - { 44, NO_LED, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 }, - { 58, 59, 60, 61, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 62, 63, NO_LED, 64, 65, 66 } -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Ins - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 202, 0 }, { 225, 0 }, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , Del - { 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 }, { 225, 16 }, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter, Pgup - { 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 }, { 225, 32 }, - // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, Pgdn - { 18, 48 }, { 30, 48 }, { 45, 48 }, { 60, 48 }, { 75, 48 }, { 90, 48 }, { 105, 48 }, { 120, 48 }, { 135, 48 }, { 150, 48 }, { 165, 48 }, { 191, 48 }, { 210, 48 }, { 225, 48 }, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 195, 64 }, { 210, 64 }, { 225, 64 } -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Ins - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , Del - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter, Pgup - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, Pgdn - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - 1, 1, 1, 4, 1, 1, 1, 1, 1 -} }; diff --git a/keyboards/dotmod/dymium65/dymium65.c b/keyboards/dotmod/dymium65/dymium65.c index 45eaa0251c..fd3bab633e 100644 --- a/keyboards/dotmod/dymium65/dymium65.c +++ b/keyboards/dotmod/dymium65/dymium65.c @@ -18,30 +18,6 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - {0, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - {NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, NO_LED, NO_LED}, - {28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, NO_LED, NO_LED}, - {29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, NO_LED, 41, 14, 42}, - {55, NO_LED, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, NO_LED, 44, 43, NO_LED}, - {56, 57, 58, NO_LED, NO_LED, NO_LED, 59, NO_LED, NO_LED, 60, 61, NO_LED, 62, 63, 64, 65} - }, { - {14, 0}, {28, 0}, {42, 0}, {56, 0}, {70, 0}, {84, 0}, {98, 0}, {112, 0}, {126, 0}, {140, 0}, {154, 0}, {168, 0}, {182, 0},{196, 0}, - {224, 16},{196, 16},{182, 16},{168, 16},{154, 16},{140, 16},{126, 16},{112, 16}, {98, 16}, {84, 16}, {70, 16}, {56, 16}, {42, 16} ,{28, 16}, {14, 16}, - {14, 32}, {28, 32}, {42, 32}, {56, 32}, {70, 32}, {84, 32}, {98, 32}, {112, 32}, {126, 32}, {140, 32}, {154, 32}, {168, 32}, {196, 32}, {224, 32}, - {224, 48}, {196, 48},{168, 48},{154, 48},{140, 48},{126, 48},{112, 48}, {98, 48}, {84, 48}, {70, 48}, {56, 48}, {42, 48}, {14, 48}, - {14, 64}, {28, 64}, {42, 64}, {98, 64}, {140, 64}, {154, 64}, {168, 64}, {182, 64},{196, 64}, {224, 64} - }, { - 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 12, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 - } -}; - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; diff --git a/keyboards/dotmod/dymium65/keyboard.json b/keyboards/dotmod/dymium65/keyboard.json index a76bc91cd6..8ef9587489 100644 --- a/keyboards/dotmod/dymium65/keyboard.json +++ b/keyboards/dotmod/dymium65/keyboard.json @@ -68,6 +68,74 @@ "solid_reactive_nexus": true, "splash": true }, + "layout": [ + {"matrix": [0, 0], "x": 14, "y": 0, "flags": 4}, + {"matrix": [1, 1], "x": 28, "y": 0, "flags": 4}, + {"matrix": [1, 2], "x": 42, "y": 0, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 0, "flags": 4}, + {"matrix": [1, 4], "x": 70, "y": 0, "flags": 4}, + {"matrix": [1, 5], "x": 84, "y": 0, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 0, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [1, 8], "x": 126, "y": 0, "flags": 4}, + {"matrix": [1, 9], "x": 140, "y": 0, "flags": 4}, + {"matrix": [1, 10], "x": 154, "y": 0, "flags": 4}, + {"matrix": [1, 11], "x": 168, "y": 0, "flags": 4}, + {"matrix": [1, 12], "x": 182, "y": 0, "flags": 4}, + {"matrix": [1, 13], "x": 196, "y": 0, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 16, "flags": 4}, + {"matrix": [2, 13], "x": 196, "y": 16, "flags": 4}, + {"matrix": [2, 12], "x": 182, "y": 16, "flags": 4}, + {"matrix": [2, 11], "x": 168, "y": 16, "flags": 4}, + {"matrix": [2, 10], "x": 154, "y": 16, "flags": 4}, + {"matrix": [2, 9], "x": 140, "y": 16, "flags": 4}, + {"matrix": [2, 8], "x": 126, "y": 16, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [2, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [2, 5], "x": 84, "y": 16, "flags": 4}, + {"matrix": [2, 4], "x": 70, "y": 16, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [2, 2], "x": 42, "y": 16, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 14, "y": 16, "flags": 4}, + {"matrix": [3, 0], "x": 14, "y": 32, "flags": 12}, + {"matrix": [3, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [3, 2], "x": 42, "y": 32, "flags": 4}, + {"matrix": [3, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [3, 4], "x": 70, "y": 32, "flags": 4}, + {"matrix": [3, 5], "x": 84, "y": 32, "flags": 4}, + {"matrix": [3, 6], "x": 98, "y": 32, "flags": 4}, + {"matrix": [3, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [3, 8], "x": 126, "y": 32, "flags": 4}, + {"matrix": [3, 9], "x": 140, "y": 32, "flags": 4}, + {"matrix": [3, 10], "x": 154, "y": 32, "flags": 4}, + {"matrix": [3, 11], "x": 168, "y": 32, "flags": 4}, + {"matrix": [3, 13], "x": 196, "y": 32, "flags": 4}, + {"matrix": [3, 15], "x": 224, "y": 32, "flags": 4}, + {"matrix": [4, 14], "x": 224, "y": 48, "flags": 4}, + {"matrix": [4, 13], "x": 196, "y": 48, "flags": 4}, + {"matrix": [4, 11], "x": 168, "y": 48, "flags": 4}, + {"matrix": [4, 10], "x": 154, "y": 48, "flags": 4}, + {"matrix": [4, 9], "x": 140, "y": 48, "flags": 4}, + {"matrix": [4, 8], "x": 126, "y": 48, "flags": 4}, + {"matrix": [4, 7], "x": 112, "y": 48, "flags": 4}, + {"matrix": [4, 6], "x": 98, "y": 48, "flags": 4}, + {"matrix": [4, 5], "x": 84, "y": 48, "flags": 4}, + {"matrix": [4, 4], "x": 70, "y": 48, "flags": 4}, + {"matrix": [4, 3], "x": 56, "y": 48, "flags": 4}, + {"matrix": [4, 2], "x": 42, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 14, "y": 48, "flags": 4}, + {"matrix": [5, 0], "x": 14, "y": 64, "flags": 4}, + {"matrix": [5, 1], "x": 28, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 42, "y": 64, "flags": 4}, + {"matrix": [5, 6], "x": 98, "y": 64, "flags": 4}, + {"matrix": [5, 9], "x": 140, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 154, "y": 64, "flags": 4}, + {"matrix": [5, 12], "x": 168, "y": 64, "flags": 4}, + {"matrix": [5, 13], "x": 182, "y": 64, "flags": 4}, + {"matrix": [5, 14], "x": 196, "y": 64, "flags": 4}, + {"matrix": [5, 15], "x": 224, "y": 64, "flags": 4} + ], "max_brightness": 200, "react_on_keyup": true }, diff --git a/keyboards/dtisaac/dosa40rgb/dosa40rgb.c b/keyboards/dtisaac/dosa40rgb/dosa40rgb.c deleted file mode 100644 index 35ae8eb018..0000000000 --- a/keyboards/dtisaac/dosa40rgb/dosa40rgb.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2021 DTIsaac - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - //Key Matrix to LED Index - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, - {22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12 }, - {23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33}, - {41, 40, 39, NO_LED, 38, NO_LED, 37, 36, 35, 34, 11} -}, { - //LED Index to Physical Positon - { 0, 0}, { 20, 0}, { 40, 0 }, { 61, 0 }, { 81, 0}, { 101, 0}, { 122, 0}, { 142, 0}, { 162, 0}, { 183, 0}, { 203, 0}, { 224, 0}, - {203, 21}, {183, 21}, {162,21 }, {142, 21}, {122,21}, { 101,21}, { 81 ,21}, { 61 ,21}, { 40 ,21}, { 20 ,21}, { 0 ,21}, - { 0, 42}, { 20, 42}, { 40,42 }, { 61, 42}, { 81,42}, { 101,42}, { 122,42}, { 142,42}, { 162,42}, { 183,42}, { 203,42}, - {203, 64}, {183, 64}, {162,64 }, {122, 64}, { 81,64}, { 40, 64}, { 20, 64}, { 0, 64}, -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, -} }; - -#endif \ No newline at end of file diff --git a/keyboards/dtisaac/dosa40rgb/keyboard.json b/keyboards/dtisaac/dosa40rgb/keyboard.json index 4f5522947a..29a63e80f3 100644 --- a/keyboards/dtisaac/dosa40rgb/keyboard.json +++ b/keyboards/dtisaac/dosa40rgb/keyboard.json @@ -62,6 +62,50 @@ "animation": "cycle_pinwheel" }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 20, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 40, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 61, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 81, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 101, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 122, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 142, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 162, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 183, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 203, "y": 0, "flags": 4}, + {"matrix": [3, 10], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 10], "x": 203, "y": 21, "flags": 1}, + {"matrix": [1, 9], "x": 183, "y": 21, "flags": 4}, + {"matrix": [1, 8], "x": 162, "y": 21, "flags": 4}, + {"matrix": [1, 7], "x": 142, "y": 21, "flags": 4}, + {"matrix": [1, 6], "x": 122, "y": 21, "flags": 4}, + {"matrix": [1, 5], "x": 101, "y": 21, "flags": 4}, + {"matrix": [1, 4], "x": 81, "y": 21, "flags": 4}, + {"matrix": [1, 3], "x": 61, "y": 21, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 21, "flags": 4}, + {"matrix": [1, 1], "x": 20, "y": 21, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 21, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 42, "flags": 1}, + {"matrix": [2, 1], "x": 20, "y": 42, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 42, "flags": 4}, + {"matrix": [2, 3], "x": 61, "y": 42, "flags": 4}, + {"matrix": [2, 4], "x": 81, "y": 42, "flags": 4}, + {"matrix": [2, 5], "x": 101, "y": 42, "flags": 4}, + {"matrix": [2, 6], "x": 122, "y": 42, "flags": 4}, + {"matrix": [2, 7], "x": 142, "y": 42, "flags": 4}, + {"matrix": [2, 8], "x": 162, "y": 42, "flags": 4}, + {"matrix": [2, 9], "x": 183, "y": 42, "flags": 4}, + {"matrix": [2, 10], "x": 203, "y": 42, "flags": 1}, + {"matrix": [3, 9], "x": 203, "y": 64, "flags": 1}, + {"matrix": [3, 8], "x": 183, "y": 64, "flags": 1}, + {"matrix": [3, 7], "x": 162, "y": 64, "flags": 1}, + {"matrix": [3, 6], "x": 122, "y": 64, "flags": 1}, + {"matrix": [3, 4], "x": 81, "y": 64, "flags": 1}, + {"matrix": [3, 2], "x": 40, "y": 64, "flags": 1}, + {"matrix": [3, 1], "x": 20, "y": 64, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 64, "flags": 1} + ], "max_brightness": 150, "react_on_keyup": true }, diff --git a/keyboards/dumbpad/v3x/keyboard.json b/keyboards/dumbpad/v3x/keyboard.json index 58b8da5b3a..0e1c5bc791 100644 --- a/keyboards/dumbpad/v3x/keyboard.json +++ b/keyboards/dumbpad/v3x/keyboard.json @@ -36,6 +36,24 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 1], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 149, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 4], "x": 224, "y": 21, "flags": 4}, + {"matrix": [1, 3], "x": 149, "y": 21, "flags": 4}, + {"matrix": [1, 2], "x": 75, "y": 21, "flags": 4}, + {"matrix": [1, 1], "x": 0, "y": 21, "flags": 4}, + {"matrix": [2, 1], "x": 0, "y": 43, "flags": 4}, + {"matrix": [2, 2], "x": 75, "y": 43, "flags": 4}, + {"matrix": [2, 3], "x": 149, "y": 43, "flags": 4}, + {"matrix": [2, 4], "x": 224, "y": 43, "flags": 4}, + {"matrix": [3, 4], "x": 224, "y": 64, "flags": 4}, + {"matrix": [3, 3], "x": 149, "y": 64, "flags": 4}, + {"matrix": [3, 2], "x": 75, "y": 64, "flags": 4}, + {"matrix": [3, 1], "x": 0, "y": 64, "flags": 4} + ], "timeout": 300000, "sleep": true }, diff --git a/keyboards/dumbpad/v3x/v3x.c b/keyboards/dumbpad/v3x/v3x.c index 181e9d4a0d..ebc829d91a 100644 --- a/keyboards/dumbpad/v3x/v3x.c +++ b/keyboards/dumbpad/v3x/v3x.c @@ -16,36 +16,6 @@ #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = {{// Key Matrix to LED Index - {NO_LED, 0, 1, 2, 3}, - {NO_LED, 7, 6, 5, 4}, - {NO_LED, 8, 9, 10, 11}, - {NO_LED, 15, 14, 13, 12}}, - {// LED Index to Physical Position - {0, 0}, - {75, 0}, - {149, 0}, - {224, 0}, - - {224, 21}, - {149, 21}, - {75, 21}, - {0, 21}, - - {0, 43}, - {75, 43}, - {149, 43}, - {224, 43}, - - {224, 64}, - {149, 64}, - {75, 64}, - {0, 64}}, - {// LED Index to Flag - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}; -#endif - void keyboard_pre_init_kb(void) { // Set LED IO as outputs gpio_set_pin_output(LED_00); diff --git a/keyboards/durgod/dgk6x/galaxy/galaxy.c b/keyboards/durgod/dgk6x/galaxy/galaxy.c index 5d08163109..a0f5126bf6 100644 --- a/keyboards/durgod/dgk6x/galaxy/galaxy.c +++ b/keyboards/durgod/dgk6x/galaxy/galaxy.c @@ -1,4 +1,4 @@ -/* Copyright 2021 Don Kjer +/* Copyright 2021 Don Kjer * * 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 @@ -116,27 +116,4 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { {1, SW6_CS14, SW5_CS14, SW4_CS14}, // Down {1, SW6_CS15, SW5_CS15, SW4_CS15} // Right }; - -led_config_t g_led_config = {{ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, NO_LED }, - { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, NO_LED }, - { 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, NO_LED, 58, 59, NO_LED }, - { 60, NO_LED, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, NO_LED }, - { 74, 75, 76, NO_LED, NO_LED, NO_LED, 77, NO_LED, NO_LED, 78, 79, 80, 81, 82, 83, NO_LED } -}, { - { 0, 0 }, { 16, 0 }, { 32, 0 }, { 48, 0 }, { 64, 0 }, { 80, 0 }, { 96, 0 }, { 112, 0 }, { 128, 0 }, { 144, 0 }, { 160, 0 }, { 176, 0 }, { 192, 0 }, { 208, 0 }, { 224, 0 }, { 240, 0 }, - { 0, 13 }, { 16, 13 }, { 32, 13 }, { 48, 13 }, { 64, 13 }, { 80, 13 }, { 96, 13 }, { 112, 13 }, { 128, 13 }, { 144, 13 }, { 160, 13 }, { 176, 13 }, { 192, 13 }, { 216, 13 }, { 240, 13 }, - { 4, 26 }, { 24, 26 }, { 40, 26 }, { 56, 26 }, { 72, 26 }, { 88, 26 }, { 104, 26 }, { 120, 26 }, { 136, 26 }, { 152, 26 }, { 168, 26 }, { 184, 26 }, { 200, 26 }, { 220, 26 }, { 240, 26 }, - { 6, 38 }, { 28, 38 }, { 44, 38 }, { 60, 38 }, { 76, 38 }, { 92, 38 }, { 108, 38 }, { 124, 38 }, { 140, 38 }, { 156, 38 }, { 172, 38 }, { 188, 38 }, { 214, 38 }, { 240, 38 }, - { 10, 51 }, { 36, 51 }, { 52, 51 }, { 68, 51 }, { 84, 51 }, { 100, 51 }, { 116, 51 }, { 132, 51 }, { 148, 51 }, { 164, 51 }, { 180, 51 }, { 202, 51 }, { 224, 51 }, { 240, 51 }, - { 2, 64 }, { 22, 64 }, { 42, 64 }, { 101, 64 }, { 160, 64 }, { 176, 64 }, { 192, 64 }, { 208, 64 }, { 224, 64 }, { 240, 64 } -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, - 1, 1, 1, 4, 1, 1, 1, 4, 4, 4 -}}; #endif /* RGB_MATRIX_ENABLE */ diff --git a/keyboards/durgod/dgk6x/galaxy/keyboard.json b/keyboards/durgod/dgk6x/galaxy/keyboard.json index 4f80ef9d51..7421f70481 100644 --- a/keyboards/durgod/dgk6x/galaxy/keyboard.json +++ b/keyboards/durgod/dgk6x/galaxy/keyboard.json @@ -13,6 +13,94 @@ "rows": ["A0", "A1", "A2", "A3", "A4", "A5"] }, "diode_direction": "ROW2COL", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 195, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 210, "y": 0, "flags": 4}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 13, "flags": 4}, + {"matrix": [1, 1], "x": 15, "y": 13, "flags": 4}, + {"matrix": [1, 2], "x": 30, "y": 13, "flags": 4}, + {"matrix": [1, 3], "x": 45, "y": 13, "flags": 4}, + {"matrix": [1, 4], "x": 60, "y": 13, "flags": 4}, + {"matrix": [1, 5], "x": 75, "y": 13, "flags": 4}, + {"matrix": [1, 6], "x": 90, "y": 13, "flags": 4}, + {"matrix": [1, 7], "x": 105, "y": 13, "flags": 4}, + {"matrix": [1, 8], "x": 120, "y": 13, "flags": 4}, + {"matrix": [1, 9], "x": 135, "y": 13, "flags": 4}, + {"matrix": [1, 10], "x": 150, "y": 13, "flags": 4}, + {"matrix": [1, 11], "x": 165, "y": 13, "flags": 4}, + {"matrix": [1, 12], "x": 180, "y": 13, "flags": 4}, + {"matrix": [1, 13], "x": 202, "y": 13, "flags": 1}, + {"matrix": [1, 14], "x": 224, "y": 13, "flags": 4}, + {"matrix": [2, 0], "x": 4, "y": 26, "flags": 4}, + {"matrix": [2, 1], "x": 22, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 67, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 82, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 97, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 127, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 142, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 157, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 172, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 187, "y": 26, "flags": 4}, + {"matrix": [2, 13], "x": 205, "y": 26, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 26, "flags": 4}, + {"matrix": [3, 0], "x": 6, "y": 38, "flags": 4}, + {"matrix": [3, 1], "x": 28, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 43, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 58, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 73, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 88, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 103, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 118, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 133, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 148, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 163, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 178, "y": 38, "flags": 4}, + {"matrix": [3, 13], "x": 200, "y": 38, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 38, "flags": 4}, + {"matrix": [4, 0], "x": 10, "y": 51, "flags": 1}, + {"matrix": [4, 2], "x": 36, "y": 51, "flags": 4}, + {"matrix": [4, 3], "x": 51, "y": 51, "flags": 4}, + {"matrix": [4, 4], "x": 66, "y": 51, "flags": 4}, + {"matrix": [4, 5], "x": 81, "y": 51, "flags": 4}, + {"matrix": [4, 6], "x": 96, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 111, "y": 51, "flags": 4}, + {"matrix": [4, 8], "x": 126, "y": 51, "flags": 4}, + {"matrix": [4, 9], "x": 141, "y": 51, "flags": 4}, + {"matrix": [4, 10], "x": 156, "y": 51, "flags": 4}, + {"matrix": [4, 11], "x": 171, "y": 51, "flags": 4}, + {"matrix": [4, 12], "x": 192, "y": 51, "flags": 1}, + {"matrix": [4, 13], "x": 209, "y": 51, "flags": 4}, + {"matrix": [4, 14], "x": 224, "y": 51, "flags": 4}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 38, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 98, "y": 64, "flags": 4}, + {"matrix": [5, 9], "x": 149, "y": 64, "flags": 1}, + {"matrix": [5, 10], "x": 164, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 179, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 194, "y": 64, "flags": 4}, + {"matrix": [5, 13], "x": 209, "y": 64, "flags": 4}, + {"matrix": [5, 14], "x": 224, "y": 64, "flags": 4} + ] + }, "community_layouts": ["75_ansi"], "layouts": { "LAYOUT_75_ansi": { diff --git a/keyboards/durgod/dgk6x/hades_ansi/hades_ansi.c b/keyboards/durgod/dgk6x/hades_ansi/hades_ansi.c index d092310814..d62acf1bc3 100644 --- a/keyboards/durgod/dgk6x/hades_ansi/hades_ansi.c +++ b/keyboards/durgod/dgk6x/hades_ansi/hades_ansi.c @@ -1,4 +1,4 @@ -/* Copyright 2021 Jessica Sullivan and Don Kjer +/* Copyright 2021 Jessica Sullivan and Don Kjer * * 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 @@ -100,24 +100,4 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { {1, SW3_CS14, SW2_CS14, SW1_CS14}, // DOWN {1, SW3_CS15, SW2_CS15, SW1_CS15} // RIGHT }; - -led_config_t g_led_config = {{ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED, 42, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, 56, 57 }, - { 58, 59, 60, NO_LED, NO_LED, 61, NO_LED, NO_LED, NO_LED, 62, 63, 64, 65, 66, 67 } -}, { - { 0, 0 }, { 16, 0 }, { 32, 0 }, { 48, 0 }, { 64, 0 }, { 80, 0 }, { 96, 0 }, { 112, 0 }, { 128, 0 }, { 144, 0 }, { 160, 0 }, { 176, 0 }, { 192, 0 }, { 216, 0 }, { 240, 0 }, - { 4, 16 }, { 24, 16 }, { 40, 16 }, { 56, 16 }, { 72, 16 }, { 88, 16 }, { 104, 16 }, { 120, 16 }, { 136, 16 }, { 152, 16 }, { 168, 16 }, { 184, 16 }, { 200, 16 }, { 220, 16 }, { 240, 16 }, - { 6, 32 }, { 28, 32 }, { 44, 32 }, { 60, 32 }, { 76, 32 }, { 92, 32 }, { 108, 32 }, { 124, 32 }, { 140, 32 }, { 156, 32 }, { 172, 32 }, { 188, 32 }, { 214, 32 }, { 240, 32 }, - { 10, 48 }, { 36, 48 }, { 52, 48 }, { 68, 48 }, { 84, 48 }, { 100, 48 }, { 116, 48 }, { 132, 48 }, { 148, 48 }, { 164, 48 }, { 180, 48 }, { 202, 48 }, { 224, 48 }, { 240, 48 }, - { 2, 64 }, { 22, 64 }, { 42, 64 }, { 101, 64 }, { 160, 64 }, { 176, 64 }, { 192, 64 }, { 208, 64 }, { 224, 64 }, { 240, 64 } -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, - 1, 1, 1, 4, 1, 1, 1, 4, 4, 4 -}}; #endif /* RGB_MATRIX_ENABLE */ diff --git a/keyboards/durgod/dgk6x/hades_ansi/keyboard.json b/keyboards/durgod/dgk6x/hades_ansi/keyboard.json index 00cfcdc5f0..7a41352d20 100644 --- a/keyboards/durgod/dgk6x/hades_ansi/keyboard.json +++ b/keyboards/durgod/dgk6x/hades_ansi/keyboard.json @@ -13,6 +13,78 @@ "rows": ["A0", "A1", "A2", "A3", "A4"] }, "diode_direction": "ROW2COL", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 205, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 43, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 58, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 73, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 88, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 103, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 118, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 133, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 148, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 163, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 178, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 200, "y": 32, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 10, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 51, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 66, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 81, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 111, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 126, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 141, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 156, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 171, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 192, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 209, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 38, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 98, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 149, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 164, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 179, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 194, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 209, "y": 64, "flags": 4}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 4} + ] + }, "community_layouts": ["65_ansi"], "layouts": { "LAYOUT_65_ansi": { diff --git a/keyboards/durgod/dgk6x/venus/keyboard.json b/keyboards/durgod/dgk6x/venus/keyboard.json index cc7b321e23..a32a5b1065 100644 --- a/keyboards/durgod/dgk6x/venus/keyboard.json +++ b/keyboards/durgod/dgk6x/venus/keyboard.json @@ -13,6 +13,71 @@ "rows": ["A0", "A1", "A2", "A3", "A4"] }, "diode_direction": "ROW2COL", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 216, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 88, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 104, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 184, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 220, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 124, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 140, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 156, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 188, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 214, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 10, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 68, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 84, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 100, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 116, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 132, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 148, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 164, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 180, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 210, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 102, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 162, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 182, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 202, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 222, "y": 64, "flags": 1} + ] + }, "community_layouts": ["60_ansi"], "layouts": { "LAYOUT_60_ansi": { diff --git a/keyboards/durgod/dgk6x/venus/venus.c b/keyboards/durgod/dgk6x/venus/venus.c index 5433266e3b..30735fc80e 100644 --- a/keyboards/durgod/dgk6x/venus/venus.c +++ b/keyboards/durgod/dgk6x/venus/venus.c @@ -92,24 +92,4 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { {1, SW3_CS12, SW2_CS12, SW1_CS12}, // RCtrl/Fn2 {1, SW3_CS13, SW2_CS13, SW1_CS13}, // LEFT/RCtrl }; - -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, NO_LED, 40 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, NO_LED, NO_LED }, - { 53, 54, 55, NO_LED, NO_LED, 56, NO_LED, NO_LED, NO_LED, 57, 58, 59, 60, NO_LED } -}, { - { 0, 0 }, { 16, 0 }, { 32, 0 }, { 48, 0 }, { 64, 0 }, { 80, 0 }, { 96, 0 }, { 112, 0 }, { 128, 0 }, { 144, 0 }, { 160, 0 }, { 176, 0 }, { 192, 0 }, { 216, 0 }, - { 4, 16 }, { 24, 16 }, { 40, 16 }, { 56, 16 }, { 72, 16 }, { 88, 16 }, { 104, 16 }, { 120, 16 }, { 136, 16 }, { 152, 16 }, { 168, 16 }, { 184, 16 }, { 200, 16 }, { 220, 16 }, - { 6, 32 }, { 28, 32 }, { 44, 32 }, { 60, 32 }, { 76, 32 }, { 92, 32 }, { 108, 32 }, { 124, 32 }, { 140, 32 }, { 156, 32 }, { 172, 32 }, { 188, 32 }, { 214, 32 }, - { 10, 48 }, { 36, 48 }, { 52, 48 }, { 68, 48 }, { 84, 48 }, { 100, 48 }, { 116, 48 }, { 132, 48 }, { 148, 48 }, { 164, 48 }, { 180, 48 }, { 210, 48 }, - { 2, 64 }, { 22, 64 }, { 42, 64 }, { 102, 64 }, { 162, 64 }, { 182, 64 }, { 202, 64 }, { 222, 64 }, -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1 -} }; #endif /* RGB_MATRIX_ENABLE */ diff --git a/keyboards/dztech/dz60rgb/dz60rgb.c b/keyboards/dztech/dz60rgb/dz60rgb.c index 207fccd4f9..e729f6d578 100644 --- a/keyboards/dztech/dz60rgb/dz60rgb.c +++ b/keyboards/dztech/dz60rgb/dz60rgb.c @@ -71,28 +71,6 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, SW11_CS16, SW10_CS16, SW12_CS16 } }; -led_config_t g_led_config = { - { - { 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }, - { 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 }, - { 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, NO_LED, 28 }, - { 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, NO_LED, 41 }, - { 62, 61, 60, NO_LED, NO_LED, 59, NO_LED, NO_LED, 58, 57, 56, 55, NO_LED, 54 } - }, { - { 216, 0 }, { 192, 0 }, { 176, 0 }, { 160, 0 }, { 144, 0 }, { 128, 0 }, { 112, 0 }, { 96, 0 }, { 80, 0 }, { 64, 0 }, { 48, 0 }, { 32, 0 }, { 16, 0 }, { 0, 0 }, - { 220, 16 }, { 200, 16 }, { 184, 16 }, { 168, 16 }, { 152, 16 }, { 136, 16 }, { 120, 16 }, { 104, 16 }, { 88, 16 }, { 72, 16 }, { 56, 16 }, { 40, 16 }, { 24, 16 }, { 4, 16 }, - { 214, 32 }, { 188, 32 }, { 172, 32 }, { 156, 32 }, { 140, 32 }, { 124, 32 }, { 108, 32 }, { 92, 32 }, { 76, 32 }, { 60, 32 }, { 44, 32 }, { 28, 32 }, { 6, 32 }, - { 224, 48 }, { 208, 48 }, { 186, 48 }, { 164, 48 }, { 148, 48 }, { 132, 48 }, { 116, 48 }, { 100, 48 }, { 84, 48 }, { 68, 48 }, { 52, 48 }, { 36, 48 }, { 9, 48 }, - { 224, 64 }, { 208, 64 }, { 192, 64 }, { 176, 64 }, { 160, 64 }, { 102, 64 }, { 42, 64 }, { 22, 64 }, { 2, 64 } - }, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 4, 1, 1, 1 - } -}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/dztech/dz60rgb/info.json b/keyboards/dztech/dz60rgb/info.json index 1bcc77c605..c4f87c70f0 100644 --- a/keyboards/dztech/dz60rgb/info.json +++ b/keyboards/dztech/dz60rgb/info.json @@ -5,6 +5,73 @@ "usb": { "vid": "0x445A" }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 13], "x": 216, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [1, 13], "x": 220, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 184, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 104, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 88, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [2, 13], "x": 214, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 188, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 156, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 140, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 124, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 208, "y": 48, "flags": 1}, + {"matrix": [3, 10], "x": 186, "y": 48, "flags": 1}, + {"matrix": [3, 9], "x": 164, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 148, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 132, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 116, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 100, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 84, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 68, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 208, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 192, "y": 64, "flags": 1}, + {"matrix": [4, 9], "x": 176, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 160, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 102, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT": { "layout": [ diff --git a/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c b/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c index cdc5148e11..20dd1a8b95 100644 --- a/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c +++ b/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c @@ -69,28 +69,6 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, SW11_CS16, SW10_CS16, SW12_CS16 } }; -led_config_t g_led_config = { - { - { 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }, - { 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 }, - { 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, NO_LED, 28 }, - { 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, NO_LED, NO_LED }, - { 60, 59, 58, NO_LED, NO_LED, 57, NO_LED, NO_LED, NO_LED, 56, 55, 54, NO_LED, 53 } - }, { - { 216, 0 }, { 192, 0 }, { 176, 0 }, { 160, 0 }, { 144, 0 }, { 128, 0 }, { 112, 0 }, { 96, 0 }, { 80, 0 }, { 64, 0 }, { 48, 0 }, { 32, 0 }, { 16, 0 }, { 0, 0 }, - { 220, 16 }, { 200, 16 }, { 184, 16 }, { 168, 16 }, { 152, 16 }, { 136, 16 }, { 120, 16 }, { 104, 16 }, { 88, 16 }, { 72, 16 }, { 56, 16 }, { 40, 16 }, { 24, 16 }, { 4, 16 }, - { 214, 24 }, { 188, 32 }, { 172, 32 }, { 156, 32 }, { 140, 32 }, { 124, 32 }, { 108, 32 }, { 92, 32 }, { 76, 32 }, { 60, 32 }, { 44, 32 }, { 28, 32 }, { 6, 32 }, - { 210, 48 }, { 180, 48 }, { 164, 48 }, { 148, 48 }, { 132, 48 }, { 116, 48 }, { 100, 48 }, { 84, 48 }, { 68, 48 }, { 52, 48 }, { 20, 48 }, { 10, 48 }, - { 222, 64 }, { 202, 64 }, { 182, 64 }, { 162, 64 }, { 102, 64 }, { 42, 64 }, { 22, 64 }, { 2, 64 } - }, { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 4, 1, 1, 1 - } -}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/dztech/dz60rgb_ansi/info.json b/keyboards/dztech/dz60rgb_ansi/info.json index dddbd47315..b5f962b997 100644 --- a/keyboards/dztech/dz60rgb_ansi/info.json +++ b/keyboards/dztech/dz60rgb_ansi/info.json @@ -5,6 +5,71 @@ "usb": { "vid": "0x445A" }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 13], "x": 216, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 1}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [1, 13], "x": 220, "y": 16, "flags": 1}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 184, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 104, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 88, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [2, 13], "x": 214, "y": 24, "flags": 1}, + {"matrix": [2, 11], "x": 188, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 156, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 140, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 124, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [3, 11], "x": 210, "y": 48, "flags": 1}, + {"matrix": [3, 10], "x": 180, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 164, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 148, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 132, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 116, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 100, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 84, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 68, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 20, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 10, "y": 48, "flags": 1}, + {"matrix": [4, 13], "x": 222, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 202, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 182, "y": 64, "flags": 1}, + {"matrix": [4, 9], "x": 162, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 102, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1} + ] + }, "community_layouts": ["60_ansi"], "layouts": { "LAYOUT_60_ansi": { diff --git a/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c b/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c index b5af34be38..59cbb09a1b 100644 --- a/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c +++ b/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c @@ -70,28 +70,6 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, SW11_CS16, SW10_CS16, SW12_CS16 } }; -led_config_t g_led_config = { - { - { 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }, - { 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15 }, - { 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 0, 29 }, - { 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, NO_LED, 42 }, - { 61, 60, 59, NO_LED, NO_LED, 58, NO_LED, NO_LED, NO_LED, NO_LED, 57, 56, NO_LED, 55 } - }, { - { 224, 0 }, { 208, 0 }, { 192, 0 }, { 176, 0 }, { 160, 0 }, { 144, 0 }, { 128, 0 }, { 112, 0 }, { 96, 0 }, { 80, 0 }, { 64, 0 }, { 48, 0 }, { 32, 0 }, { 16, 0 }, { 0, 0 }, - { 220, 16 }, { 200, 16 }, { 184, 16 }, { 168, 16 }, { 152, 16 }, { 136, 16 }, { 120, 16 }, { 104, 16 }, { 88, 16 }, { 72, 16 }, { 56, 16 }, { 40, 16 }, { 24, 16 }, { 4, 16 }, - { 204, 32 }, { 188, 32 }, { 172, 32 }, { 156, 32 }, { 140, 32 }, { 124, 32 }, { 108, 32 }, { 92, 32 }, { 76, 32 }, { 60, 32 }, { 44, 32 }, { 28, 32 }, { 6, 32 }, - { 224, 48 }, { 202, 48 }, { 180, 48 }, { 164, 48 }, { 148, 48 }, { 132, 48 }, { 116, 48 }, { 100, 48 }, { 84, 48 }, { 68, 48 }, { 52, 48 }, { 20, 48 }, { 10, 48 }, - { 218, 64 }, { 198, 64 }, { 178, 64 }, { 112, 64 }, { 46, 64 }, { 26, 64 }, { 6, 64 } - }, { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1 - } -}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/dztech/dz60rgb_wkl/info.json b/keyboards/dztech/dz60rgb_wkl/info.json index a4dfb63c7a..d0d66d046c 100644 --- a/keyboards/dztech/dz60rgb_wkl/info.json +++ b/keyboards/dztech/dz60rgb_wkl/info.json @@ -5,6 +5,72 @@ "usb": { "vid": "0x445A" }, + "rgb_matrix": { + "layout": [ + {"matrix": [2, 12], "x": 224, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 1}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [1, 13], "x": 220, "y": 16, "flags": 1}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 184, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 104, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 88, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [2, 13], "x": 204, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 188, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 156, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 140, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 124, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 202, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 180, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 164, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 148, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 132, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 116, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 100, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 84, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 68, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 20, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 10, "y": 48, "flags": 1}, + {"matrix": [4, 13], "x": 218, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 198, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 178, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 46, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 26, "y": 64, "flags": 1}, + {"matrix": [4, 0], "x": 6, "y": 64, "flags": 1} + ] + }, "community_layouts": ["60_ansi_tsangan_split_bs_rshift"], "layout_aliases": { "LAYOUT_HHKB": "LAYOUT_60_ansi_tsangan_split_bs_rshift", diff --git a/keyboards/dztech/dz64rgb/dz64rgb.c b/keyboards/dztech/dz64rgb/dz64rgb.c index e2512c72a5..788658bdce 100644 --- a/keyboards/dztech/dz64rgb/dz64rgb.c +++ b/keyboards/dztech/dz64rgb/dz64rgb.c @@ -88,29 +88,6 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, SW11_CS16, SW10_CS16, SW12_CS16 } }; -led_config_t g_led_config = { - { - { 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }, - { 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 }, - { 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, NO_LED, 28 }, - { 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41 }, - { 63, 62, 61, NO_LED, NO_LED, 60, NO_LED, NO_LED, 59, 58, 57, 56, NO_LED, 55 } - }, { - { 216, 0 }, { 192, 0 }, { 176, 0 }, { 160, 0 }, { 144, 0 }, { 128, 0 }, { 112, 0 }, { 96, 0 }, { 80, 0 }, { 64, 0 }, { 48, 0 }, { 32, 0 }, { 16, 0 }, { 0, 0 }, - { 220, 16 }, { 200, 16 }, { 184, 16 }, { 168, 16 }, { 152, 16 }, { 136, 16 }, { 120, 16 }, { 104, 16 }, { 88, 16 }, { 72, 16 }, { 56, 16 }, { 40, 16 }, { 24, 16 }, { 4, 16 }, - { 214, 32 }, { 188, 32 }, { 172, 32 }, { 156, 32 }, { 140, 32 }, { 124, 32 }, { 108, 32 }, { 92, 32 }, { 76, 32 }, { 60, 32 }, { 44, 32 }, { 28, 32 }, { 6, 32 }, - { 224, 48 }, { 218, 48 }, { 192, 48 }, { 176, 48 }, { 160, 48 }, { 144, 48 }, { 128, 48 }, { 112, 48 }, { 96, 48 },{80, 48}, { 64, 48 }, { 48, 48 }, { 32, 48 }, { 8, 48 }, - { 224, 64 }, { 208, 64 }, { 192, 64 }, { 176, 64 }, { 160, 64 }, { 102, 64 }, { 42, 64 }, { 22, 64 }, { 2, 64 } - }, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1 - } -}; - - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/dztech/dz64rgb/keyboard.json b/keyboards/dztech/dz64rgb/keyboard.json index ef95b52400..926721a12e 100644 --- a/keyboards/dztech/dz64rgb/keyboard.json +++ b/keyboards/dztech/dz64rgb/keyboard.json @@ -40,6 +40,72 @@ "animation": "cycle_all" }, "driver": "is31fl3733", + "layout": [ + {"matrix": [0, 13], "x": 216, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [1, 13], "x": 220, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 184, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 104, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 88, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [2, 13], "x": 214, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 188, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 156, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 140, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 124, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 218, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 192, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 8, "y": 48, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 208, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 192, "y": 64, "flags": 1}, + {"matrix": [4, 9], "x": 176, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 160, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 102, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1} + ], "sleep": true }, "matrix_pins": { diff --git a/keyboards/dztech/dz65rgb/v1/keyboard.json b/keyboards/dztech/dz65rgb/v1/keyboard.json index 32b830052d..cdbd9ae10d 100644 --- a/keyboards/dztech/dz65rgb/v1/keyboard.json +++ b/keyboards/dztech/dz65rgb/v1/keyboard.json @@ -39,6 +39,76 @@ "animation": "cycle_all" }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 188, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 201, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 189, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 8], "x": 150, "y": 64, "flags": 1}, + {"matrix": [4, 9], "x": 165, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 180, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "led_process_limit": 4, "led_flush_limit": 26, "max_brightness": 200, diff --git a/keyboards/dztech/dz65rgb/v1/v1.c b/keyboards/dztech/dz65rgb/v1/v1.c index 6e8cf96e4c..e05e35b74b 100644 --- a/keyboards/dztech/dz65rgb/v1/v1.c +++ b/keyboards/dztech/dz65rgb/v1/v1.c @@ -91,29 +91,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { { 0, C9_16, C7_15, C6_15 } }; -led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED, 42, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, 56, 57 }, - { 58, 59, 60, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, 63, 64, 65, NO_LED, 66, 67 } - }, { - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 203, 0 }, { 224, 0 }, - { 4, 16 }, { 23, 16 }, { 38, 16 }, { 53, 16 }, { 68, 16 }, { 83, 16 }, { 98, 16 }, { 113, 16 }, { 128, 16 }, { 143, 16 }, { 158, 16 }, { 173, 16 }, { 188, 16 }, { 206, 16 }, { 224, 16 }, - { 6, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 201, 32 }, { 224, 32 }, - { 9, 48 }, { 34, 48 }, { 49, 48 }, { 64, 48 }, { 79, 48 }, { 94, 48 }, { 109, 48 }, { 124, 48 }, { 139, 48 }, { 154, 48 }, { 169, 48 }, { 189, 48 }, { 210, 48 }, { 224, 48 }, - { 2, 64 }, { 21, 64 }, { 39, 64 }, { 96, 64 }, { 150, 64 }, { 165, 64 }, { 180, 64 }, { 195, 64 }, { 210, 64 }, { 224, 64 } - }, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 - } -}; - - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/dztech/dz65rgb/v2/keyboard.json b/keyboards/dztech/dz65rgb/v2/keyboard.json index bf7331e101..7c922bc273 100644 --- a/keyboards/dztech/dz65rgb/v2/keyboard.json +++ b/keyboards/dztech/dz65rgb/v2/keyboard.json @@ -39,6 +39,76 @@ "animation": "cycle_all" }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 188, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 201, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 189, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 8], "x": 150, "y": 64, "flags": 1}, + {"matrix": [4, 9], "x": 165, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 180, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "led_process_limit": 4, "led_flush_limit": 26, "max_brightness": 200, diff --git a/keyboards/dztech/dz65rgb/v2/v2.c b/keyboards/dztech/dz65rgb/v2/v2.c index a9f7fc104f..2591a4ddcb 100644 --- a/keyboards/dztech/dz65rgb/v2/v2.c +++ b/keyboards/dztech/dz65rgb/v2/v2.c @@ -91,29 +91,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { { 0, C9_16, C7_15, C6_15 } }; -led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED, 42, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, 56, 57 }, - { 58, 59, 60, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, 63, 64, 65, NO_LED, 66, 67 } - }, { - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 203, 0 }, { 224, 0 }, - { 4, 16 }, { 23, 16 }, { 38, 16 }, { 53, 16 }, { 68, 16 }, { 83, 16 }, { 98, 16 }, { 113, 16 }, { 128, 16 }, { 143, 16 }, { 158, 16 }, { 173, 16 }, { 188, 16 }, { 206, 16 }, { 224, 16 }, - { 6, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 201, 32 }, { 224, 32 }, - { 9, 48 }, { 34, 48 }, { 49, 48 }, { 64, 48 }, { 79, 48 }, { 94, 48 }, { 109, 48 }, { 124, 48 }, { 139, 48 }, { 154, 48 }, { 169, 48 }, { 189, 48 }, { 210, 48 }, { 224, 48 }, - { 2, 64 }, { 21, 64 }, { 39, 64 }, { 96, 64 }, { 150, 64 }, { 165, 64 }, { 180, 64 }, { 195, 64 }, { 210, 64 }, { 224, 64 } - }, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 - } -}; - - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/dztech/dz65rgb/v3/keyboard.json b/keyboards/dztech/dz65rgb/v3/keyboard.json index 8fef8b3468..6ed8b8c9da 100644 --- a/keyboards/dztech/dz65rgb/v3/keyboard.json +++ b/keyboards/dztech/dz65rgb/v3/keyboard.json @@ -53,6 +53,76 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 188, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 201, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 189, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 150, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 165, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 180, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "led_process_limit": 4, "led_flush_limit": 26, "sleep": true diff --git a/keyboards/dztech/dz65rgb/v3/v3.c b/keyboards/dztech/dz65rgb/v3/v3.c index bf54a8cdfc..f5f863de9a 100755 --- a/keyboards/dztech/dz65rgb/v3/v3.c +++ b/keyboards/dztech/dz65rgb/v3/v3.c @@ -93,26 +93,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW7_CS39, SW7_CS38, SW7_CS37} }; -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED,42, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, NO_LED,55, 56, 57 }, - { 58, 59, 60, NO_LED, NO_LED, 61, NO_LED, NO_LED, NO_LED, 62, 63, 64, 65, 66, 67 } -}, { - {0,0},{15,0},{30,0},{45,0},{60,0},{75,0},{90,0},{105,0},{120,0},{135,0},{150,0},{165,0},{180,0},{203,0},{224,0}, - {4,16},{23,16},{38,16},{53,16},{68,16},{83,16},{98,16},{113,16},{128,16},{143,16},{158,16},{173,16},{188,16},{206,16},{224,16}, - {6,32},{26,32},{41,32},{56,32},{71,32},{86,32},{101,32},{116,32},{131,32},{146,32},{161,32},{176,32},{201,32},{224,32}, - {9,48},{34,48},{49,48},{64,48},{79,48},{94,48},{109,48},{124,48},{139,48},{154,48},{169,48},{189,48},{210,48},{224,48}, - { 2, 64 }, { 21, 64 }, { 39, 64 }, { 96, 64 }, { 150, 64 }, { 165, 64 }, { 180, 64 }, { 195, 64 }, { 210, 64 }, { 224, 64 } -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 -} }; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { From 6aa85699a5626c084a1cfd4ea2ecca3c14783c33 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 02:59:42 -0600 Subject: [PATCH 25/99] Migrate `g_led_config` to DD (E, F) (#25561) --- keyboards/eek/eek.c | 55 --------- keyboards/eek/info.json | 38 ++++++ keyboards/ein_60/ein_60.c | 31 ----- keyboards/ein_60/keyboard.json | 40 ++++++ keyboards/elephant42/elephant42.c | 66 ---------- keyboards/elephant42/keyboard.json | 56 +++++++++ keyboards/ergodox_ez/ergodox_ez.c | 36 ------ keyboards/ergodox_ez/info.json | 50 ++++++++ keyboards/evyd13/atom47/rev5/keyboard.json | 52 +++++++- keyboards/evyd13/atom47/rev5/rev5.c | 67 ---------- keyboards/exclusive/e6_rgb/e6_rgb.c | 75 ------------ keyboards/exclusive/e6_rgb/keyboard.json | 67 +++++++++- keyboards/feker/ik75/ik75.c | 27 ---- keyboards/feker/ik75/keyboard.json | 129 ++++++++++++++++++++ keyboards/frooastboard/walnut/keyboard.json | 50 ++++++++ keyboards/frooastboard/walnut/walnut.c | 22 ---- 16 files changed, 480 insertions(+), 381 deletions(-) delete mode 100644 keyboards/eek/eek.c delete mode 100644 keyboards/elephant42/elephant42.c diff --git a/keyboards/eek/eek.c b/keyboards/eek/eek.c deleted file mode 100644 index 8e7a19f820..0000000000 --- a/keyboards/eek/eek.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright 2020 klackygears - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE - - // Logical Layout - // Columns - // 0 1 2 3 4 - // ROWS - // 4 3 2 1 0 0 - // 5 6 7 8 9 1 - // 14 13 12 11 10 2 - // 15 16 17 3 - - // Logical Layout v1.3 - // Columns - // 0 1 2 3 4 5 6 7 8 9 - // ROWS - // 0 1 2 3 4 5 6 7 8 9 0 - // 19 18 17 16 15 14 13 12 11 10 1 - // 20 21 22 23 24 25 26 27 28 29 2 - // 35 34 33 32 31 30 3 - - -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, - { 19, 18, 17, 16, 15, 14, 13, 12, 11, 10 }, - { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { NO_LED, NO_LED, 35, 34, 33, 32, 31, 30, NO_LED, NO_LED } -}, { - { 31, 0 }, { 46, 0 }, { 62, 0 }, { 77, 7 }, { 93, 13 }, { 131, 13 }, { 147, 7 }, { 162, 0 }, { 178, 0 }, { 193, 0 }, - { 201, 10 }, { 185, 10 }, { 170, 10 }, { 154, 17 }, { 139, 24 }, { 85, 24 }, { 70, 17 }, { 54, 10 }, { 39, 10 }, { 23, 10 }, - { 15, 20 }, { 31, 20 }, { 46, 20 }, { 62, 27 }, { 77, 34 }, { 147, 34 }, { 162, 27 }, { 178, 20 }, { 193, 20 }, { 209, 20 }, - { 185, 34 }, { 170, 37 }, { 154, 44 }, { 70, 44 }, { 54, 37 }, { 39, 34 }, -}, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 1, 1, 1, 1, 1, 1, -} }; -#endif diff --git a/keyboards/eek/info.json b/keyboards/eek/info.json index 0e510e282a..eaa68c9b41 100644 --- a/keyboards/eek/info.json +++ b/keyboards/eek/info.json @@ -13,6 +13,44 @@ "val": 150 }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 31, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 46, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 62, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 77, "y": 7, "flags": 4}, + {"matrix": [0, 4], "x": 93, "y": 13, "flags": 4}, + {"matrix": [0, 5], "x": 131, "y": 13, "flags": 4}, + {"matrix": [0, 6], "x": 147, "y": 7, "flags": 4}, + {"matrix": [0, 7], "x": 162, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 178, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 193, "y": 0, "flags": 4}, + {"matrix": [1, 9], "x": 201, "y": 10, "flags": 4}, + {"matrix": [1, 8], "x": 185, "y": 10, "flags": 4}, + {"matrix": [1, 7], "x": 170, "y": 10, "flags": 4}, + {"matrix": [1, 6], "x": 154, "y": 17, "flags": 4}, + {"matrix": [1, 5], "x": 139, "y": 24, "flags": 4}, + {"matrix": [1, 4], "x": 85, "y": 24, "flags": 4}, + {"matrix": [1, 3], "x": 70, "y": 17, "flags": 4}, + {"matrix": [1, 2], "x": 54, "y": 10, "flags": 4}, + {"matrix": [1, 1], "x": 39, "y": 10, "flags": 4}, + {"matrix": [1, 0], "x": 23, "y": 10, "flags": 4}, + {"matrix": [2, 0], "x": 15, "y": 20, "flags": 4}, + {"matrix": [2, 1], "x": 31, "y": 20, "flags": 4}, + {"matrix": [2, 2], "x": 46, "y": 20, "flags": 4}, + {"matrix": [2, 3], "x": 62, "y": 27, "flags": 4}, + {"matrix": [2, 4], "x": 77, "y": 34, "flags": 4}, + {"matrix": [2, 5], "x": 147, "y": 34, "flags": 4}, + {"matrix": [2, 6], "x": 162, "y": 27, "flags": 4}, + {"matrix": [2, 7], "x": 178, "y": 20, "flags": 4}, + {"matrix": [2, 8], "x": 193, "y": 20, "flags": 4}, + {"matrix": [2, 9], "x": 209, "y": 20, "flags": 4}, + {"matrix": [3, 7], "x": 185, "y": 34, "flags": 1}, + {"matrix": [3, 6], "x": 170, "y": 37, "flags": 1}, + {"matrix": [3, 5], "x": 154, "y": 44, "flags": 1}, + {"matrix": [3, 4], "x": 70, "y": 44, "flags": 1}, + {"matrix": [3, 3], "x": 54, "y": 37, "flags": 1}, + {"matrix": [3, 2], "x": 39, "y": 34, "flags": 1} + ], "max_brightness": 200 }, "features": { diff --git a/keyboards/ein_60/ein_60.c b/keyboards/ein_60/ein_60.c index af11e48235..8a0e69cee4 100644 --- a/keyboards/ein_60/ein_60.c +++ b/keyboards/ein_60/ein_60.c @@ -15,37 +15,6 @@ */ #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE - - // Logical Layout - // Columns - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 - // ROWS - // 37 0 1 2 3 4 5 6 7 8 9 10 11 12 0 - // 36 13 1 - // 35 14 2 - // 34 15 3 - // 33 16 3 - // 32 17 4 - // 31 30 29 28 27 26 25 24 23 22 21 20 19 18 5 - -led_config_t g_led_config = { { - { 36, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10, 13 }, - { 34, 1, 2, 3, 4, 5, NO_LED, 6, 7, 8, 9, 10, 15 }, - { 33, 30, 29, 28, 27, 26, NO_LED, 23, 22, 21, 20, 19, 16 }, - { 32, 30, 29, 28, 27, 26, 24, 23, 22, 21, 20, 19, 17 } -}, { - { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 119, 0 }, { 134, 0 }, { 149, 0 }, { 164, 0 }, { 179, 0 }, { 194, 0 }, { 209, 0 }, { 224, 11 }, - { 224, 21 }, { 224, 32 }, { 224, 43 }, { 224, 53 }, { 209, 64 }, { 194, 64 }, { 179, 64 }, { 164, 64 }, { 149, 64 }, { 134, 64 }, { 119, 64 }, { 105, 64 }, { 90, 64 }, - { 75, 64 }, { 60, 64 }, { 45, 64 }, { 30, 64 }, { 15, 64 }, { 0, 53 }, { 0, 43 }, { 0, 32 }, { 0, 21 }, { 0, 11 }, { 15, 0 }, -}, { - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, -} }; -#endif - #ifdef AUDIO_ENABLE const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS] = { {30, 31, 32, 33, 34, 35, 35, 36, 37, 38, 39, 40, 41}, diff --git a/keyboards/ein_60/keyboard.json b/keyboards/ein_60/keyboard.json index b1e48f1747..99c5040f8d 100644 --- a/keyboards/ein_60/keyboard.json +++ b/keyboards/ein_60/keyboard.json @@ -12,6 +12,46 @@ "val": 150 }, "driver": "ws2812", + "layout": [ + {"x": 30, "y": 0, "flags": 2}, + {"matrix": [1, 1], "x": 45, "y": 0, "flags": 2}, + {"matrix": [1, 2], "x": 60, "y": 0, "flags": 2}, + {"matrix": [1, 3], "x": 75, "y": 0, "flags": 2}, + {"matrix": [1, 4], "x": 90, "y": 0, "flags": 2}, + {"matrix": [1, 5], "x": 105, "y": 0, "flags": 2}, + {"matrix": [1, 7], "x": 119, "y": 0, "flags": 2}, + {"matrix": [1, 8], "x": 134, "y": 0, "flags": 2}, + {"matrix": [1, 9], "x": 149, "y": 0, "flags": 2}, + {"matrix": [1, 10], "x": 164, "y": 0, "flags": 2}, + {"matrix": [1, 11], "x": 179, "y": 0, "flags": 2}, + {"x": 194, "y": 0, "flags": 2}, + {"x": 209, "y": 0, "flags": 2}, + {"matrix": [0, 12], "x": 224, "y": 11, "flags": 1}, + {"x": 224, "y": 21, "flags": 1}, + {"matrix": [1, 12], "x": 224, "y": 32, "flags": 1}, + {"matrix": [2, 12], "x": 224, "y": 43, "flags": 1}, + {"matrix": [3, 12], "x": 224, "y": 53, "flags": 1}, + {"x": 209, "y": 64, "flags": 1}, + {"matrix": [3, 11], "x": 194, "y": 64, "flags": 1}, + {"matrix": [3, 10], "x": 179, "y": 64, "flags": 1}, + {"matrix": [3, 9], "x": 164, "y": 64, "flags": 1}, + {"matrix": [3, 8], "x": 149, "y": 64, "flags": 1}, + {"matrix": [3, 7], "x": 134, "y": 64, "flags": 1}, + {"matrix": [3, 6], "x": 119, "y": 64, "flags": 1}, + {"x": 105, "y": 64, "flags": 1}, + {"matrix": [3, 5], "x": 90, "y": 64, "flags": 1}, + {"matrix": [3, 4], "x": 75, "y": 64, "flags": 1}, + {"matrix": [3, 3], "x": 60, "y": 64, "flags": 1}, + {"matrix": [3, 2], "x": 45, "y": 64, "flags": 1}, + {"matrix": [3, 1], "x": 30, "y": 64, "flags": 1}, + {"x": 15, "y": 64, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 53, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 43, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 32, "flags": 1}, + {"x": 0, "y": 21, "flags": 1}, + {"matrix": [0, 0], "x": 0, "y": 11, "flags": 1}, + {"x": 15, "y": 0, "flags": 2} + ], "max_brightness": 200 }, "rgblight": { diff --git a/keyboards/elephant42/elephant42.c b/keyboards/elephant42/elephant42.c deleted file mode 100644 index 1ffb5e8083..0000000000 --- a/keyboards/elephant42/elephant42.c +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright 2021 illness072 - * - * 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 "quantum.h" - -#if defined(RGB_MATRIX_ENABLE) -led_config_t g_led_config = { - { // keymap to LED number - // left - { 19, 18, 13, 12, 7, 6}, // R3 - { 20, 17, 14, 11, 8, 5}, // R2 - {NO_LED, 16, 15, 10, 9, 4}, // R1 - {NO_LED, NO_LED, 0, 1, 2, 3}, // R0 - // right - { 46, 45, 40, 39, 34, 33}, // R3 - { 47, 44, 41, 38, 35, 32}, // R2 - {NO_LED, 43, 42, 37, 36, 31}, // R1 - {NO_LED, NO_LED, 27, 28, 29, 30}, // R0 - }, - {// phisical LED position, {x, y} : x = 0..224, y = 0..64 - // left-bg [LED_01-21] - {56, 65}, {77, 68}, {95, 79}, {109, 91}, - {87, 46}, {87, 29}, {87, 12}, { 69, 43}, { 69, 26}, { 69, 8}, - {52, 35}, {52, 17}, {52, 0}, { 35, 4}, { 35, 21}, { 35, 38}, - {17, 54}, {17, 36}, {17, 19}, { 0, 26}, { 0, 43}, - // left-ug [LED_22-27] - {25, 49}, {26, 19}, {60, 14}, {106, 33}, {107, 72}, { 70, 66}, - // right-bg [LED_28-48] - {199, 65}, {179, 68}, {160, 79}, {146, 91}, - {168, 46}, {168, 29}, {168, 12}, {186, 43}, {186, 26}, {186, 8}, - {203, 35}, {203, 17}, {203, 0}, {220, 4}, {220, 21}, {220, 38}, - {238, 54}, {238, 36}, {238, 19}, {255, 26}, {255, 43}, - // right-ug [LED_49-54] - {230, 49}, {230, 19}, {195, 14}, {149, 33}, {148, 72}, {185, 66}, - }, - {// LED Index to Flag - // Left-bg [LED_01-21] - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - // left-ug [LED_22-27] - LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, - // right-bg [LED_28-48] - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - // right-ug [LED_49-54] - LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW - } -}; -#endif diff --git a/keyboards/elephant42/keyboard.json b/keyboards/elephant42/keyboard.json index 60b135b086..be0f1c81a0 100644 --- a/keyboards/elephant42/keyboard.json +++ b/keyboards/elephant42/keyboard.json @@ -13,6 +13,62 @@ "sat_steps": 8, "val_steps": 8, "speed_steps": 8, + "layout": [ + {"matrix": [3, 2], "x": 52, "y": 45, "flags": 4}, + {"matrix": [3, 3], "x": 69, "y": 51, "flags": 4}, + {"matrix": [3, 4], "x": 86, "y": 58, "flags": 4}, + {"matrix": [3, 5], "x": 103, "y": 64, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 34, "flags": 4}, + {"matrix": [1, 5], "x": 86, "y": 21, "flags": 4}, + {"matrix": [0, 5], "x": 86, "y": 8, "flags": 4}, + {"matrix": [0, 4], "x": 69, "y": 7, "flags": 4}, + {"matrix": [1, 4], "x": 69, "y": 20, "flags": 4}, + {"matrix": [2, 4], "x": 69, "y": 33, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 26, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 13, "flags": 4}, + {"matrix": [0, 3], "x": 52, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 34, "y": 6, "flags": 4}, + {"matrix": [1, 2], "x": 34, "y": 19, "flags": 4}, + {"matrix": [2, 2], "x": 34, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 17, "y": 44, "flags": 4}, + {"matrix": [1, 1], "x": 17, "y": 31, "flags": 4}, + {"matrix": [0, 1], "x": 17, "y": 18, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 24, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 37, "flags": 4}, + {"x": 26, "y": 42, "flags": 2}, + {"x": 26, "y": 19, "flags": 2}, + {"x": 61, "y": 7, "flags": 2}, + {"x": 103, "y": 21, "flags": 2}, + {"x": 103, "y": 51, "flags": 2}, + {"x": 69, "y": 45, "flags": 2}, + {"matrix": [7, 2], "x": 172, "y": 45, "flags": 4}, + {"matrix": [7, 3], "x": 155, "y": 51, "flags": 4}, + {"matrix": [7, 4], "x": 138, "y": 58, "flags": 4}, + {"matrix": [7, 5], "x": 121, "y": 64, "flags": 4}, + {"matrix": [6, 5], "x": 138, "y": 34, "flags": 4}, + {"matrix": [5, 5], "x": 138, "y": 21, "flags": 4}, + {"matrix": [4, 5], "x": 138, "y": 8, "flags": 4}, + {"matrix": [4, 4], "x": 155, "y": 7, "flags": 4}, + {"matrix": [5, 4], "x": 155, "y": 20, "flags": 4}, + {"matrix": [6, 4], "x": 155, "y": 33, "flags": 4}, + {"matrix": [6, 3], "x": 172, "y": 26, "flags": 4}, + {"matrix": [5, 3], "x": 172, "y": 13, "flags": 4}, + {"matrix": [4, 3], "x": 172, "y": 0, "flags": 4}, + {"matrix": [4, 2], "x": 189, "y": 6, "flags": 4}, + {"matrix": [5, 2], "x": 189, "y": 19, "flags": 4}, + {"matrix": [6, 2], "x": 189, "y": 32, "flags": 4}, + {"matrix": [6, 1], "x": 206, "y": 44, "flags": 4}, + {"matrix": [5, 1], "x": 206, "y": 31, "flags": 4}, + {"matrix": [4, 1], "x": 206, "y": 18, "flags": 4}, + {"matrix": [4, 0], "x": 224, "y": 24, "flags": 4}, + {"matrix": [5, 0], "x": 224, "y": 37, "flags": 4}, + {"x": 197, "y": 42, "flags": 2}, + {"x": 197, "y": 19, "flags": 2}, + {"x": 163, "y": 7, "flags": 2}, + {"x": 121, "y": 21, "flags": 2}, + {"x": 121, "y": 51, "flags": 2}, + {"x": 155, "y": 45, "flags": 2} + ], "max_brightness": 170, "split_count": [27, 27] }, diff --git a/keyboards/ergodox_ez/ergodox_ez.c b/keyboards/ergodox_ez/ergodox_ez.c index 9fdc814834..d2e89772c6 100644 --- a/keyboards/ergodox_ez/ergodox_ez.c +++ b/keyboards/ergodox_ez/ergodox_ez.c @@ -275,42 +275,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {1, C2_11, C1_11, C3_11}, // LED23 {1, C5_11, C4_11, C6_11} // LED24 }; - - -led_config_t g_led_config = { { - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { 28, 33, 38, 43, 47, NO_LED }, - { 27, 32, 37, 42, 46, NO_LED }, - { 26, 31, 36, 41, 45, NO_LED }, - { 25, 30, 35, 40, 44, NO_LED }, - { 24, 29, 34, 39, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { 0, 5, 10, 15, NO_LED, NO_LED }, - { 1, 6, 11, 16, 20, NO_LED }, - { 2, 7, 12, 17, 21, NO_LED }, - { 3, 8, 13, 18, 22, NO_LED }, - { 4, 9, 14, 19, 23, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } -}, { - { 137, 0 }, { 154, 0 }, { 172, 0 }, { 189, 0 }, { 206, 0 }, { 137, 12 }, - { 154, 12 }, { 172, 12 }, { 189, 12 }, { 206, 12 }, { 137, 25 }, { 154, 25 }, - { 172, 25 }, { 189, 25 }, { 206, 25 }, { 137, 38 }, { 154, 38 }, { 172, 38 }, - { 189, 38 }, { 206, 38 }, { 154, 51 }, { 172, 51 }, { 189, 51 }, { 206, 51 }, - { 86, 0 }, { 68, 0 }, { 51, 0 }, { 34, 0 }, { 17, 0 }, { 86, 12 }, - { 68, 12 }, { 51, 12 }, { 34, 12 }, { 17, 12 }, { 86, 25 }, { 68, 25 }, - { 51, 25 }, { 34, 25 }, { 17, 25 }, { 86, 38 }, { 68, 38 }, { 51, 38 }, - { 34, 38 }, { 17, 38 }, { 68, 51 }, { 51, 51 }, { 34, 51 }, { 17, 51 } -}, { - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 1, 1, 1, 1, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 1, 1, 1, 1 -} }; // clang-format on # ifdef ORYX_CONFIGURATOR diff --git a/keyboards/ergodox_ez/info.json b/keyboards/ergodox_ez/info.json index f7b20b19e0..8ef8ed376d 100644 --- a/keyboards/ergodox_ez/info.json +++ b/keyboards/ergodox_ez/info.json @@ -69,6 +69,56 @@ "pixel_fractal": true }, "driver": "is31fl3731", + "layout": [ + {"matrix": [8, 0], "x": 137, "y": 0, "flags": 4}, + {"matrix": [9, 0], "x": 154, "y": 0, "flags": 4}, + {"matrix": [10, 0], "x": 172, "y": 0, "flags": 4}, + {"matrix": [11, 0], "x": 189, "y": 0, "flags": 4}, + {"matrix": [12, 0], "x": 206, "y": 0, "flags": 4}, + {"matrix": [8, 1], "x": 137, "y": 12, "flags": 4}, + {"matrix": [9, 1], "x": 154, "y": 12, "flags": 4}, + {"matrix": [10, 1], "x": 172, "y": 12, "flags": 4}, + {"matrix": [11, 1], "x": 189, "y": 12, "flags": 4}, + {"matrix": [12, 1], "x": 206, "y": 12, "flags": 4}, + {"matrix": [8, 2], "x": 137, "y": 25, "flags": 4}, + {"matrix": [9, 2], "x": 154, "y": 25, "flags": 4}, + {"matrix": [10, 2], "x": 172, "y": 25, "flags": 4}, + {"matrix": [11, 2], "x": 189, "y": 25, "flags": 4}, + {"matrix": [12, 2], "x": 206, "y": 25, "flags": 4}, + {"matrix": [8, 3], "x": 137, "y": 38, "flags": 4}, + {"matrix": [9, 3], "x": 154, "y": 38, "flags": 4}, + {"matrix": [10, 3], "x": 172, "y": 38, "flags": 4}, + {"matrix": [11, 3], "x": 189, "y": 38, "flags": 4}, + {"matrix": [12, 3], "x": 206, "y": 38, "flags": 4}, + {"matrix": [9, 4], "x": 154, "y": 51, "flags": 1}, + {"matrix": [10, 4], "x": 172, "y": 51, "flags": 1}, + {"matrix": [11, 4], "x": 189, "y": 51, "flags": 1}, + {"matrix": [12, 4], "x": 206, "y": 51, "flags": 1}, + {"matrix": [5, 0], "x": 86, "y": 0, "flags": 4}, + {"matrix": [4, 0], "x": 68, "y": 0, "flags": 4}, + {"matrix": [3, 0], "x": 51, "y": 0, "flags": 4}, + {"matrix": [2, 0], "x": 34, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 17, "y": 0, "flags": 4}, + {"matrix": [5, 1], "x": 86, "y": 12, "flags": 4}, + {"matrix": [4, 1], "x": 68, "y": 12, "flags": 4}, + {"matrix": [3, 1], "x": 51, "y": 12, "flags": 4}, + {"matrix": [2, 1], "x": 34, "y": 12, "flags": 4}, + {"matrix": [1, 1], "x": 17, "y": 12, "flags": 4}, + {"matrix": [5, 2], "x": 86, "y": 25, "flags": 4}, + {"matrix": [4, 2], "x": 68, "y": 25, "flags": 4}, + {"matrix": [3, 2], "x": 51, "y": 25, "flags": 4}, + {"matrix": [2, 2], "x": 34, "y": 25, "flags": 4}, + {"matrix": [1, 2], "x": 17, "y": 25, "flags": 4}, + {"matrix": [5, 3], "x": 86, "y": 38, "flags": 4}, + {"matrix": [4, 3], "x": 68, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 51, "y": 38, "flags": 4}, + {"matrix": [2, 3], "x": 34, "y": 38, "flags": 4}, + {"matrix": [1, 3], "x": 17, "y": 38, "flags": 4}, + {"matrix": [4, 4], "x": 68, "y": 51, "flags": 1}, + {"matrix": [3, 4], "x": 51, "y": 51, "flags": 1}, + {"matrix": [2, 4], "x": 34, "y": 51, "flags": 1}, + {"matrix": [1, 4], "x": 17, "y": 51, "flags": 1} + ], "led_flush_limit": 26, "led_process_limit": 5, "sleep": true diff --git a/keyboards/evyd13/atom47/rev5/keyboard.json b/keyboards/evyd13/atom47/rev5/keyboard.json index 86ff90c19c..daf7e3677f 100644 --- a/keyboards/evyd13/atom47/rev5/keyboard.json +++ b/keyboards/evyd13/atom47/rev5/keyboard.json @@ -39,7 +39,57 @@ "pixel_flow": true, "pixel_fractal": true }, - "driver": "is31fl3733" + "driver": "is31fl3733", + "layout": [ + {"matrix": [0, 0], "x": 9, "y": 8, "flags": 1}, + {"matrix": [0, 1], "x": 26, "y": 8, "flags": 4}, + {"matrix": [0, 2], "x": 43, "y": 8, "flags": 4}, + {"matrix": [0, 3], "x": 60, "y": 8, "flags": 4}, + {"matrix": [0, 4], "x": 78, "y": 8, "flags": 4}, + {"matrix": [0, 5], "x": 95, "y": 8, "flags": 4}, + {"matrix": [0, 6], "x": 112, "y": 8, "flags": 4}, + {"matrix": [0, 7], "x": 129, "y": 8, "flags": 4}, + {"matrix": [0, 8], "x": 146, "y": 8, "flags": 4}, + {"matrix": [0, 9], "x": 164, "y": 8, "flags": 4}, + {"matrix": [0, 10], "x": 181, "y": 8, "flags": 4}, + {"matrix": [0, 11], "x": 198, "y": 8, "flags": 1}, + {"matrix": [0, 12], "x": 215, "y": 8, "flags": 1}, + {"matrix": [1, 0], "x": 11, "y": 24, "flags": 1}, + {"matrix": [1, 1], "x": 30, "y": 24, "flags": 4}, + {"matrix": [1, 2], "x": 47, "y": 24, "flags": 4}, + {"matrix": [1, 3], "x": 64, "y": 24, "flags": 4}, + {"matrix": [1, 4], "x": 82, "y": 24, "flags": 4}, + {"matrix": [1, 5], "x": 99, "y": 24, "flags": 4}, + {"matrix": [1, 6], "x": 116, "y": 24, "flags": 4}, + {"matrix": [1, 7], "x": 134, "y": 24, "flags": 4}, + {"matrix": [1, 8], "x": 151, "y": 24, "flags": 4}, + {"matrix": [1, 9], "x": 168, "y": 24, "flags": 4}, + {"matrix": [1, 10], "x": 185, "y": 24, "flags": 4}, + {"matrix": [1, 12], "x": 209, "y": 24, "flags": 1}, + {"matrix": [2, 0], "x": 15, "y": 40, "flags": 1}, + {"matrix": [2, 1], "x": 20, "y": 22, "flags": 8}, + {"matrix": [2, 2], "x": 39, "y": 40, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 40, "flags": 4}, + {"matrix": [2, 4], "x": 73, "y": 40, "flags": 4}, + {"matrix": [2, 5], "x": 90, "y": 40, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 40, "flags": 4}, + {"matrix": [2, 7], "x": 125, "y": 40, "flags": 4}, + {"matrix": [2, 8], "x": 142, "y": 40, "flags": 4}, + {"matrix": [2, 9], "x": 159, "y": 40, "flags": 4}, + {"matrix": [2, 10], "x": 177, "y": 40, "flags": 4}, + {"matrix": [2, 11], "x": 196, "y": 40, "flags": 1}, + {"matrix": [2, 12], "x": 215, "y": 40, "flags": 1}, + {"matrix": [3, 0], "x": 11, "y": 56, "flags": 1}, + {"matrix": [3, 1], "x": 30, "y": 56, "flags": 1}, + {"matrix": [3, 2], "x": 47, "y": 56, "flags": 1}, + {"matrix": [3, 3], "x": 64, "y": 56, "flags": 1}, + {"matrix": [3, 5], "x": 88, "y": 56, "flags": 1}, + {"matrix": [3, 7], "x": 127, "y": 56, "flags": 1}, + {"matrix": [3, 9], "x": 159, "y": 56, "flags": 1}, + {"matrix": [3, 10], "x": 177, "y": 56, "flags": 1}, + {"matrix": [3, 11], "x": 194, "y": 56, "flags": 1}, + {"matrix": [3, 12], "x": 213, "y": 56, "flags": 1} + ] }, "matrix_pins": { "cols": ["F0", "F1", "F4", "F5", "F6", "F7", "E6", "D7", "B4", "B5", "B6", "C6", "C7"], diff --git a/keyboards/evyd13/atom47/rev5/rev5.c b/keyboards/evyd13/atom47/rev5/rev5.c index b8ea0688cd..7e9eb6307d 100644 --- a/keyboards/evyd13/atom47/rev5/rev5.c +++ b/keyboards/evyd13/atom47/rev5/rev5.c @@ -77,73 +77,6 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { {0, SW11_CS13, SW12_CS13, SW10_CS13} }; -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }, - { 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, NO_LED, 24 }, - { 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37 }, - { 38, 39, 40, 41, NO_LED, 42, NO_LED, 43, NO_LED, 44, 45, 46, 47 } -}, { - // LED Index to Physical Position - { 9, 8 }, - { 26, 8 }, - { 43, 8 }, - { 60, 8 }, - { 78, 8 }, - { 95, 8 }, - { 112, 8 }, - { 129, 8 }, - { 146, 8 }, - { 164, 8 }, - { 181, 8 }, - { 198, 8 }, - { 215, 8 }, - - { 11, 24 }, - { 30, 24 }, - { 47, 24 }, - { 64, 24 }, - { 82, 24 }, - { 99, 24 }, - { 116, 24 }, - { 134, 24 }, - { 151, 24 }, - { 168, 24 }, - { 185, 24 }, - { 209, 24 }, - - { 15, 40 }, - { 20, 22 }, - { 39, 40 }, - { 56, 40 }, - { 73, 40 }, - { 90, 40 }, - { 108, 40 }, - { 125, 40 }, - { 142, 40 }, - { 159, 40 }, - { 177, 40 }, - { 196, 40 }, - { 215, 40 }, - - { 11, 56 }, - { 30, 56 }, - { 47, 56 }, - { 64, 56 }, - { 88, 56 }, - { 127, 56 }, - { 159, 56 }, - { 177, 56 }, - { 194, 56 }, - { 213, 56 }, -}, { - // LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 -} }; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/exclusive/e6_rgb/e6_rgb.c b/keyboards/exclusive/e6_rgb/e6_rgb.c index 9a7856306b..7e3bed8f2f 100644 --- a/keyboards/exclusive/e6_rgb/e6_rgb.c +++ b/keyboards/exclusive/e6_rgb/e6_rgb.c @@ -90,81 +90,6 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { {0, SW5_CS16, SW4_CS16, SW6_CS16}, {0, SW2_CS16, SW1_CS16, SW3_CS16}, }; - -led_config_t g_led_config = { { - { 0, 1, 4, 5, 12, 13, 36, 20, 21, 24, 25, 16, 17, 28 }, - { 2, 6, 7, 14, 15, 37, 38, 22, 23, 26, 27, 18, 19, 30 }, - { 3, 8, 9, 32, 33, 39, 40, 44, 45, 48, 49, 52, 31, NO_LED }, - { 59, 10, 11, 34, 35, 41, 42, 46, 47, 50, 53, 54, 56, NO_LED }, - { 60, 61, 62, NO_LED, NO_LED, 43, 51, 55, 58, 57, NO_LED, NO_LED, NO_LED, NO_LED } -}, { -//cs1 - { 0, 0 }, { 17, 0 }, { 0, 16 }, { 0, 32 }, -//cs2 - { 34, 0 }, { 51, 0 }, { 17, 16 }, { 34, 16 }, -//cs3 - { 17, 32 }, { 34, 32 }, { 17, 48 }, { 34, 48 }, -//cs4 - { 68, 0 }, { 85, 0 }, { 51, 16 }, { 68, 16 }, -//cs5 - { 187, 0 }, { 204, 0 }, { 187, 16 }, { 204, 16 }, -//cs6 - { 119, 0 }, { 136, 0 }, { 119, 16 }, { 136, 16 }, -//cs7 - { 153, 0 }, { 170, 0 }, { 153, 16 }, { 170, 16 }, -//cs8 - { 221, 0 }, { 221, 0 }, { 221, 32 }, { 221, 16 }, -//cs9 - { 51, 32 }, { 68, 32 }, { 51, 48 }, { 68, 48 }, -//cs10 - { 102, 0 }, { 85, 16 }, { 102, 16 }, { 85, 32 }, -//cs11 - { 102, 32 }, { 85, 48 }, { 102, 48 }, { 102, 64 }, -//cs12 - { 119, 32 }, { 136, 32 }, { 119, 48 }, { 136, 48 }, -//cs13 - { 153, 32 }, { 170, 32 }, { 153, 48 }, { 136, 48 }, -//cs14 - { 187, 32 }, { 170, 48 }, { 187, 48 }, { 153, 48 }, -//cs15 - { 221, 48 }, { 221, 64 }, { 204, 64 }, -//cs16 - { 0, 48 }, { 0, 64 }, { 17, 64 }, { 34, 64 } -}, { -//cs1 - 1, 4, 1, 1, -//cs2 - 4, 4, 4, 4, -//cs3 - 4, 4, 4, 4, -//cs4 - 4, 4, 4, 4, -//cs5 - 4, 4, 4, 4, -//cs6 - 4, 4, 4, 4, -//cs7 - 4, 4, 4, 4, -//cs8 - 4, 4, 1, 1, -//cs9 - 4, 4, 4, 4, -//cs10 - 4, 4, 4, 4, -//cs11 - 4, 4, 4, 4, -//cs12 - 4, 4, 4, 4, -//cs13 - 4, 4, 4, 1, -//cs14 - 4, 4, 1, 1, -//cs15 - 1, 1, 1, -//cs16 - 1, 1, 1, 1 -} }; - #endif bool process_record_kb(uint16_t keycode, keyrecord_t *record) { diff --git a/keyboards/exclusive/e6_rgb/keyboard.json b/keyboards/exclusive/e6_rgb/keyboard.json index 52d77dfcaa..d65893cf31 100644 --- a/keyboards/exclusive/e6_rgb/keyboard.json +++ b/keyboards/exclusive/e6_rgb/keyboard.json @@ -8,7 +8,72 @@ "device_version": "0.6.2" }, "rgb_matrix": { - "driver": "is31fl3733" + "driver": "is31fl3733", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 17, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 1}, + {"matrix": [0, 2], "x": 34, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 51, "y": 0, "flags": 4}, + {"matrix": [1, 1], "x": 17, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 34, "y": 16, "flags": 4}, + {"matrix": [2, 1], "x": 17, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 34, "y": 32, "flags": 4}, + {"matrix": [3, 1], "x": 17, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 4}, + {"matrix": [0, 4], "x": 68, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 85, "y": 0, "flags": 4}, + {"matrix": [1, 3], "x": 51, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [0, 11], "x": 187, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 204, "y": 0, "flags": 4}, + {"matrix": [1, 11], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 204, "y": 16, "flags": 4}, + {"matrix": [0, 7], "x": 119, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 136, "y": 0, "flags": 4}, + {"matrix": [1, 7], "x": 119, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [0, 9], "x": 153, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 170, "y": 0, "flags": 4}, + {"matrix": [1, 9], "x": 153, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 170, "y": 16, "flags": 4}, + {"matrix": [0, 13], "x": 221, "y": 0, "flags": 4}, + {"x": 221, "y": 0, "flags": 4}, + {"matrix": [1, 13], "x": 221, "y": 32, "flags": 1}, + {"matrix": [2, 12], "x": 221, "y": 16, "flags": 1}, + {"matrix": [2, 3], "x": 51, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 68, "y": 32, "flags": 4}, + {"matrix": [3, 3], "x": 51, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 68, "y": 48, "flags": 4}, + {"matrix": [0, 6], "x": 102, "y": 0, "flags": 4}, + {"matrix": [1, 5], "x": 85, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 102, "y": 16, "flags": 4}, + {"matrix": [2, 5], "x": 85, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 102, "y": 32, "flags": 4}, + {"matrix": [3, 5], "x": 85, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 102, "y": 48, "flags": 4}, + {"matrix": [4, 5], "x": 102, "y": 64, "flags": 4}, + {"matrix": [2, 7], "x": 119, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 136, "y": 32, "flags": 4}, + {"matrix": [3, 7], "x": 119, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 136, "y": 48, "flags": 4}, + {"matrix": [2, 9], "x": 153, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 170, "y": 32, "flags": 4}, + {"matrix": [3, 9], "x": 153, "y": 48, "flags": 4}, + {"matrix": [4, 6], "x": 136, "y": 48, "flags": 1}, + {"matrix": [2, 11], "x": 187, "y": 32, "flags": 4}, + {"matrix": [3, 10], "x": 170, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 187, "y": 48, "flags": 1}, + {"matrix": [4, 7], "x": 153, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 221, "y": 48, "flags": 1}, + {"matrix": [4, 9], "x": 221, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 204, "y": 64, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 17, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 34, "y": 64, "flags": 1} + ] }, "features": { "bootmagic": true, diff --git a/keyboards/feker/ik75/ik75.c b/keyboards/feker/ik75/ik75.c index c4da77a844..d93de7f2ec 100644 --- a/keyboards/feker/ik75/ik75.c +++ b/keyboards/feker/ik75/ik75.c @@ -161,31 +161,4 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { {1, SW10_CS15, SW12_CS15, SW11_CS15}, // 125, Underglow 39 {1, SW10_CS16, SW12_CS16, SW11_CS16}, // 126, Underglow 40 }; - -led_config_t g_led_config = { { - { 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, NO_LED, NO_LED }, - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, NO_LED, 102 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, NO_LED, 105 }, - { 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, NO_LED, 44, 103, 106 }, - { 48, NO_LED, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, NO_LED, 59, 45, 101 }, - { 93, 94, 14, NO_LED, NO_LED, NO_LED, 15, NO_LED, NO_LED, 30, 31, NO_LED, 47, 60, 61, 62 } -}, { - {0 , 15}, {14 , 15}, {29 , 15}, {43 , 15}, {58 , 15}, {72 , 15}, {87 , 15}, {101, 15}, {116, 15}, {130, 15}, {145, 15}, {159, 15}, {173, 15}, {195, 15}, {38 , 61}, {92 , 61}, - {4 , 26}, {22 , 26}, {36 , 26}, {51 , 26}, {65 , 26}, {79 , 26}, {94 , 26}, {108, 26}, {123, 26}, {137, 26}, {152, 26}, {166, 26}, {181, 26}, {199, 26}, {173, 61}, {159, 61}, - {5 , 38}, {25 , 38}, {40 , 38}, {54 , 38}, {69 , 38}, {83 , 38}, {98 , 38}, {112, 38}, {126, 38}, {141, 38}, {155, 38}, {170, 38}, {193, 38}, {206, 52}, {210, 12}, {145, 61}, - {9 , 49}, {33 , 49}, {47 , 49}, {61 , 49}, {76 , 49}, {90 , 49}, {105, 49}, {119, 49}, {134, 49}, {148, 49}, {163, 49}, {182, 49}, {191, 64}, {206, 64}, {220, 64}, - {14 , 0}, {28 , 0}, {53 , 0}, {63 , 0}, {74 , 0}, {88 , 0}, {102, 0}, {116, 0}, {130, 0}, {144, 0}, {158, 0}, {172, 0}, {189, 0}, {210, 0}, {224, 0}, {224, 11}, - {0 , 0}, {18 , 0}, {33 , 0}, {47 , 0}, {61 , 0}, {79 , 0}, {94 , 0}, {108, 0}, {123, 0}, {141, 0}, {155, 0}, {170, 0}, {184, 0}, {202, 0}, {2 , 61}, {20 , 61}, - {0 , 0}, {0 , 11}, {0 , 27}, {0 , 37}, {224, 5}, {210, 5}, {217, 0}, {224, 15}, {224, 38}, {210, 18}, {224, 26}, {224, 49}, {224, 56}, {224, 45}, {224, 35}, {224, 24}, - {0 , 48}, {0 , 56}, {0 , 64}, {14 , 64}, {28 , 64}, {49 , 64}, {67 , 64}, {84 , 64}, {98 , 64}, {112, 64}, {126, 64}, {140, 64}, {158, 64}, {172, 64}, {196, 64}, {224, 64}, -}, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 8, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 2, 2, 2, 2, 1, 1, 4, 4, 4, 8, 4, 4, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -} }; #endif diff --git a/keyboards/feker/ik75/keyboard.json b/keyboards/feker/ik75/keyboard.json index 03b86e5d8b..c368c188a7 100644 --- a/keyboards/feker/ik75/keyboard.json +++ b/keyboards/feker/ik75/keyboard.json @@ -55,6 +55,135 @@ "solid_multisplash": true }, "driver": "is31fl3733", + "layout": [ + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 14, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 29, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 43, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 58, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 72, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 87, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 101, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 116, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 130, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 145, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 159, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 173, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 195, "y": 15, "flags": 1}, + {"matrix": [5, 2], "x": 38, "y": 61, "flags": 1}, + {"matrix": [5, 6], "x": 92, "y": 61, "flags": 4}, + {"matrix": [2, 0], "x": 4, "y": 26, "flags": 1}, + {"matrix": [2, 1], "x": 22, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 36, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 51, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 65, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 79, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 94, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 108, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 123, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 137, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 152, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 166, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 181, "y": 26, "flags": 4}, + {"matrix": [2, 13], "x": 199, "y": 26, "flags": 4}, + {"matrix": [5, 9], "x": 173, "y": 61, "flags": 1}, + {"matrix": [5, 10], "x": 159, "y": 61, "flags": 1}, + {"matrix": [3, 0], "x": 5, "y": 38, "flags": 8}, + {"matrix": [3, 1], "x": 25, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 40, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 54, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 69, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 83, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 98, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 112, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 126, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 141, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 155, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 170, "y": 38, "flags": 4}, + {"matrix": [3, 13], "x": 193, "y": 38, "flags": 1}, + {"matrix": [4, 14], "x": 206, "y": 52, "flags": 4}, + {"x": 210, "y": 12, "flags": 8}, + {"matrix": [5, 12], "x": 145, "y": 61, "flags": 1}, + {"matrix": [4, 0], "x": 9, "y": 49, "flags": 1}, + {"matrix": [4, 2], "x": 33, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 47, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 61, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 76, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 90, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 105, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 119, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 134, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 148, "y": 49, "flags": 4}, + {"matrix": [4, 11], "x": 163, "y": 49, "flags": 4}, + {"matrix": [4, 13], "x": 182, "y": 49, "flags": 1}, + {"matrix": [5, 13], "x": 191, "y": 64, "flags": 4}, + {"matrix": [5, 14], "x": 206, "y": 64, "flags": 4}, + {"matrix": [5, 15], "x": 220, "y": 64, "flags": 4}, + {"x": 14, "y": 0, "flags": 2}, + {"x": 28, "y": 0, "flags": 2}, + {"x": 53, "y": 0, "flags": 2}, + {"x": 63, "y": 0, "flags": 2}, + {"x": 74, "y": 0, "flags": 2}, + {"x": 88, "y": 0, "flags": 2}, + {"x": 102, "y": 0, "flags": 2}, + {"x": 116, "y": 0, "flags": 2}, + {"x": 130, "y": 0, "flags": 2}, + {"x": 144, "y": 0, "flags": 2}, + {"x": 158, "y": 0, "flags": 2}, + {"x": 172, "y": 0, "flags": 2}, + {"x": 189, "y": 0, "flags": 2}, + {"x": 210, "y": 0, "flags": 2}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 224, "y": 11, "flags": 2}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 18, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 33, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 47, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 61, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 79, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 94, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 108, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 123, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 141, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 155, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 170, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 184, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 4}, + {"matrix": [5, 0], "x": 2, "y": 61, "flags": 1}, + {"matrix": [5, 1], "x": 20, "y": 61, "flags": 1}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 0, "y": 11, "flags": 2}, + {"x": 0, "y": 27, "flags": 2}, + {"x": 0, "y": 37, "flags": 2}, + {"x": 224, "y": 5, "flags": 1}, + {"x": 210, "y": 5, "flags": 1}, + {"matrix": [4, 15], "x": 217, "y": 0, "flags": 4}, + {"matrix": [1, 15], "x": 224, "y": 15, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 38, "flags": 4}, + {"x": 210, "y": 18, "flags": 8}, + {"matrix": [2, 15], "x": 224, "y": 26, "flags": 4}, + {"matrix": [3, 15], "x": 224, "y": 49, "flags": 4}, + {"x": 224, "y": 56, "flags": 2}, + {"x": 224, "y": 45, "flags": 2}, + {"x": 224, "y": 35, "flags": 2}, + {"x": 224, "y": 24, "flags": 2}, + {"x": 0, "y": 48, "flags": 2}, + {"x": 0, "y": 56, "flags": 2}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 14, "y": 64, "flags": 2}, + {"x": 28, "y": 64, "flags": 2}, + {"x": 49, "y": 64, "flags": 2}, + {"x": 67, "y": 64, "flags": 2}, + {"x": 84, "y": 64, "flags": 2}, + {"x": 98, "y": 64, "flags": 2}, + {"x": 112, "y": 64, "flags": 2}, + {"x": 126, "y": 64, "flags": 2}, + {"x": 140, "y": 64, "flags": 2}, + {"x": 158, "y": 64, "flags": 2}, + {"x": 172, "y": 64, "flags": 2}, + {"x": 196, "y": 64, "flags": 2}, + {"x": 224, "y": 64, "flags": 2} + ], "max_brightness": 200 }, "build": { diff --git a/keyboards/frooastboard/walnut/keyboard.json b/keyboards/frooastboard/walnut/keyboard.json index f1958c04a2..923a0e97de 100644 --- a/keyboards/frooastboard/walnut/keyboard.json +++ b/keyboards/frooastboard/walnut/keyboard.json @@ -48,6 +48,56 @@ "speed": 191 }, "driver": "is31fl3737", + "layout": [ + {"x": 0, "y": 62, "flags": 2}, + {"x": 0, "y": 50, "flags": 2}, + {"x": 0, "y": 38, "flags": 2}, + {"x": 0, "y": 26, "flags": 2}, + {"x": 0, "y": 14, "flags": 2}, + {"x": 0, "y": 2, "flags": 2}, + {"x": 0, "y": 2, "flags": 2}, + {"x": 12, "y": 2, "flags": 2}, + {"x": 24, "y": 2, "flags": 2}, + {"x": 36, "y": 2, "flags": 2}, + {"x": 48, "y": 2, "flags": 2}, + {"x": 60, "y": 2, "flags": 2}, + {"x": 72, "y": 2, "flags": 2}, + {"x": 84, "y": 2, "flags": 2}, + {"x": 96, "y": 2, "flags": 2}, + {"x": 108, "y": 2, "flags": 2}, + {"x": 120, "y": 2, "flags": 2}, + {"x": 132, "y": 2, "flags": 2}, + {"x": 144, "y": 2, "flags": 2}, + {"x": 156, "y": 2, "flags": 2}, + {"x": 168, "y": 2, "flags": 2}, + {"x": 180, "y": 2, "flags": 2}, + {"x": 192, "y": 2, "flags": 2}, + {"x": 204, "y": 2, "flags": 2}, + {"x": 204, "y": 2, "flags": 2}, + {"x": 204, "y": 14, "flags": 2}, + {"x": 204, "y": 26, "flags": 2}, + {"x": 204, "y": 38, "flags": 2}, + {"x": 204, "y": 50, "flags": 2}, + {"x": 204, "y": 62, "flags": 2}, + {"x": 204, "y": 62, "flags": 2}, + {"x": 192, "y": 62, "flags": 2}, + {"x": 180, "y": 62, "flags": 2}, + {"x": 168, "y": 62, "flags": 2}, + {"x": 156, "y": 62, "flags": 2}, + {"x": 144, "y": 62, "flags": 2}, + {"x": 132, "y": 62, "flags": 2}, + {"x": 120, "y": 62, "flags": 2}, + {"x": 108, "y": 62, "flags": 2}, + {"x": 96, "y": 62, "flags": 2}, + {"x": 84, "y": 62, "flags": 2}, + {"x": 72, "y": 62, "flags": 2}, + {"x": 60, "y": 62, "flags": 2}, + {"x": 48, "y": 62, "flags": 2}, + {"x": 36, "y": 62, "flags": 2}, + {"x": 24, "y": 62, "flags": 2}, + {"x": 12, "y": 62, "flags": 2}, + {"x": 0, "y": 62, "flags": 2} + ], "max_brightness": 191, "sleep": true }, diff --git a/keyboards/frooastboard/walnut/walnut.c b/keyboards/frooastboard/walnut/walnut.c index 0de3467ae4..448895ec68 100644 --- a/keyboards/frooastboard/walnut/walnut.c +++ b/keyboards/frooastboard/walnut/walnut.c @@ -61,26 +61,4 @@ const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT] = { {0, SW2_CS11, SW1_CS11, SW3_CS11}, {0, SW2_CS12, SW1_CS12, SW3_CS12} }; - -led_config_t g_led_config = { - { - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } - }, { - {0, 62}, {0, 50}, {0, 38}, {0, 26}, {0, 14}, {0, 2}, - {0, 2}, {12, 2}, {24, 2}, {36, 2}, {48, 2}, {60, 2}, {72, 2}, {84, 2}, {96, 2}, {108, 2}, {120, 2}, {132, 2}, {144, 2}, {156, 2}, {168, 2}, {180, 2}, {192, 2}, {204, 2}, - {204, 2}, {204, 14}, {204, 26}, {204, 38}, {204, 50}, {204, 62}, - {204, 62}, {192, 62}, {180, 62}, {168, 62}, {156, 62}, {144, 62}, {132, 62}, {120, 62}, {108, 62}, {96, 62}, {84, 62}, {72, 62}, {60, 62}, {48, 62}, {36, 62}, {24, 62}, {12, 62}, {0, 62} - }, { - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 - } -}; - #endif // defined(RGB_MATRIX_ENABLE) From 2d5cb23503d3a2a94a52713f9280b8a80b703385 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:00:32 -0600 Subject: [PATCH 26/99] Migrate `g_led_config` to DD (G) (#25598) --- .../geekboards/macropad_v2/keyboard.json | 44 +++++ .../geekboards/macropad_v2/macropad_v2.c | 56 ------- keyboards/geekboards/tester/keyboard.json | 10 ++ keyboards/geekboards/tester/tester.c | 13 -- keyboards/giabalanai/giabalanai.c | 60 ------- keyboards/giabalanai/keyboard.json | 125 ++++++++++++++ keyboards/gizmo_engineering/gk6/gk6.c | 98 ----------- keyboards/gizmo_engineering/gk6/keyboard.json | 65 ++++++++ keyboards/gmmk/gmmk2/p65/ansi/ansi.c | 115 ------------- keyboards/gmmk/gmmk2/p65/ansi/keyboard.json | 91 +++++++++++ keyboards/gmmk/gmmk2/p65/iso/iso.c | 116 ------------- keyboards/gmmk/gmmk2/p65/iso/keyboard.json | 92 +++++++++++ keyboards/gmmk/gmmk2/p96/ansi/ansi.c | 154 ------------------ keyboards/gmmk/gmmk2/p96/ansi/keyboard.json | 123 ++++++++++++++ keyboards/gmmk/gmmk2/p96/iso/iso.c | 149 ----------------- keyboards/gmmk/gmmk2/p96/iso/keyboard.json | 124 ++++++++++++++ keyboards/gmmk/numpad/keyboard.json | 35 +++- keyboards/gmmk/numpad/numpad.c | 48 ------ keyboards/gmmk/pro/rev1/ansi/ansi.c | 118 -------------- keyboards/gmmk/pro/rev1/ansi/keyboard.json | 102 ++++++++++++ keyboards/gmmk/pro/rev1/iso/iso.c | 119 -------------- keyboards/gmmk/pro/rev1/iso/keyboard.json | 103 ++++++++++++ keyboards/gmmk/pro/rev2/ansi/ansi.c | 118 -------------- keyboards/gmmk/pro/rev2/ansi/keyboard.json | 102 ++++++++++++ keyboards/gmmk/pro/rev2/iso/iso.c | 119 -------------- keyboards/gmmk/pro/rev2/iso/keyboard.json | 103 ++++++++++++ keyboards/gopolar/gg86/gg86.c | 35 +--- keyboards/gopolar/gg86/keyboard.json | 102 ++++++++++++ 28 files changed, 1222 insertions(+), 1317 deletions(-) delete mode 100644 keyboards/geekboards/macropad_v2/macropad_v2.c diff --git a/keyboards/geekboards/macropad_v2/keyboard.json b/keyboards/geekboards/macropad_v2/keyboard.json index a34912aee3..2719faa764 100644 --- a/keyboards/geekboards/macropad_v2/keyboard.json +++ b/keyboards/geekboards/macropad_v2/keyboard.json @@ -51,6 +51,50 @@ "val": 192 }, "driver": "ws2812", + "layout": [ + {"matrix": [1, 1], "x": 85, "y": 46, "flags": 4}, + {"x": 85, "y": 64, "flags": 2}, + {"x": 67, "y": 64, "flags": 2}, + {"x": 49, "y": 64, "flags": 2}, + {"x": 31, "y": 64, "flags": 2}, + {"x": 13, "y": 64, "flags": 2}, + {"matrix": [1, 0], "x": 31, "y": 46, "flags": 4}, + {"x": 0, "y": 55, "flags": 2}, + {"x": 0, "y": 46, "flags": 2}, + {"x": 0, "y": 37, "flags": 2}, + {"x": 0, "y": 27, "flags": 2}, + {"x": 0, "y": 18, "flags": 2}, + {"x": 0, "y": 9, "flags": 2}, + {"matrix": [0, 0], "x": 31, "y": 18, "flags": 4}, + {"x": 13, "y": 0, "flags": 2}, + {"x": 31, "y": 0, "flags": 2}, + {"x": 49, "y": 0, "flags": 2}, + {"x": 67, "y": 0, "flags": 2}, + {"x": 85, "y": 0, "flags": 2}, + {"matrix": [0, 1], "x": 85, "y": 18, "flags": 4}, + {"matrix": [0, 2], "x": 139, "y": 18, "flags": 4}, + {"x": 139, "y": 0, "flags": 2}, + {"x": 157, "y": 0, "flags": 2}, + {"x": 175, "y": 0, "flags": 2}, + {"x": 193, "y": 0, "flags": 2}, + {"x": 211, "y": 0, "flags": 2}, + {"matrix": [0, 3], "x": 193, "y": 18, "flags": 4}, + {"x": 224, "y": 9, "flags": 2}, + {"x": 224, "y": 18, "flags": 2}, + {"x": 224, "y": 27, "flags": 2}, + {"x": 224, "y": 37, "flags": 2}, + {"x": 224, "y": 46, "flags": 2}, + {"x": 224, "y": 55, "flags": 2}, + {"matrix": [1, 3], "x": 193, "y": 46, "flags": 4}, + {"x": 211, "y": 64, "flags": 2}, + {"x": 193, "y": 64, "flags": 2}, + {"x": 175, "y": 64, "flags": 2}, + {"x": 157, "y": 64, "flags": 2}, + {"matrix": [1, 2], "x": 139, "y": 46, "flags": 4}, + {"x": 139, "y": 64, "flags": 2}, + {"x": 121, "y": 64, "flags": 2}, + {"x": 103, "y": 64, "flags": 2} + ], "sleep": true }, "processor": "STM32F072", diff --git a/keyboards/geekboards/macropad_v2/macropad_v2.c b/keyboards/geekboards/macropad_v2/macropad_v2.c deleted file mode 100644 index ba65697988..0000000000 --- a/keyboards/geekboards/macropad_v2/macropad_v2.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright 2020 Geekboards ltd. (geekboards.ru / geekboards.de) - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - {13,19,20,26}, {6,0,38,33}, -}, { - // LED Index to Physical Position - {85,46}, - {85,64},{67,64},{49,64},{31,64},{13,64}, - {31,46}, - {0,55},{0,46},{0,37},{0,27},{0,18},{0,9}, - {31,18}, - {13,0},{31,0},{49,0},{67,0},{85,0}, - {85,18},{139,18}, - {139,0},{157,0},{175,0},{193,0},{211,0}, - {193,18}, - {224,9},{224,18},{224,27},{224,37},{224,46},{224,55}, - {193,46}, - {211,64},{193,64},{175,64},{157,64}, - {139,46}, - {139,64},{121,64},{103,64}, -}, { - // LED Index to Flag, 2=backlight, 4=key - 4, - 2, 2, 2, 2, 2, - 4, - 2, 2, 2, 2, 2, 2, - 4, - 2, 2, 2, 2, 2, - 4, 4, - 2, 2, 2, 2, 2, - 4, - 2, 2, 2, 2, 2, 2, - 4, - 2, 2, 2, 2, - 4, - 2, 2, 2 -} }; - -#endif diff --git a/keyboards/geekboards/tester/keyboard.json b/keyboards/geekboards/tester/keyboard.json index 2b85961df8..236c2c697f 100644 --- a/keyboards/geekboards/tester/keyboard.json +++ b/keyboards/geekboards/tester/keyboard.json @@ -50,6 +50,16 @@ "solid_reactive_multinexus": true }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 151, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [1, 1], "x": 75, "y": 64, "flags": 4}, + {"matrix": [1, 2], "x": 151, "y": 64, "flags": 4}, + {"matrix": [1, 3], "x": 224, "y": 64, "flags": 4} + ], "sleep": true }, "features": { diff --git a/keyboards/geekboards/tester/tester.c b/keyboards/geekboards/tester/tester.c index 4daa4ef062..001fd06e9d 100644 --- a/keyboards/geekboards/tester/tester.c +++ b/keyboards/geekboards/tester/tester.c @@ -16,16 +16,3 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C1_7, C2_7, C3_7}, //A7 {0, C1_8, C2_8, C3_8}, //A8 }; - -led_config_t g_led_config = { -{ - { 0, 1, 2, 3}, - { 4, 5, 6, 7} -}, -{ - { 0, 0 }, { 75, 0 }, { 151, 0 }, { 224, 0 }, { 0, 64 }, { 75, 64 }, { 151, 64 }, { 224, 64 } -}, -{ - 4, 4, 4, 4, 4, 4, 4, 4 -} -}; diff --git a/keyboards/giabalanai/giabalanai.c b/keyboards/giabalanai/giabalanai.c index 6f8e359479..ae6a1547da 100644 --- a/keyboards/giabalanai/giabalanai.c +++ b/keyboards/giabalanai/giabalanai.c @@ -88,66 +88,6 @@ NO_LED, 84, 83, 82, 81, 80, 79, NO_LED, NO_LED, NO_LED # endif #endif // RGBLIGHT_ENABLE -#ifdef RGB_MATRIX_ENABLE - -led_config_t g_led_config = { - { - { 74, 75, 98, 99, 122, 63, 86, 87, 110, 111 }, - { 73, 76, 97, 100, 121, 64, 85, 88, 109, 112 }, - { 72, 77, 96, 101, 120, 65, 84, 89, 108, 113 }, - { 71, 78, 95, 102, 119, 66, 83, 90, 107, 114 }, - { 70, 79, 94, 103, 118, 67, 82, 91, 106, 115 }, - { 69, 80, 93, 104, 117, 68, 81, 92, 105, 116 }, - { 26, 27, 28, 29, 30, 31, 32, NO_LED, NO_LED, NO_LED }, - { 50, 49, 48, 47, 46, 45, 44, NO_LED, NO_LED, NO_LED }, - { 25, 51, 52, 53, 54, 55, 56, NO_LED, NO_LED, NO_LED }, - { NO_LED, 12, 37, 36, 35, 34, 33, NO_LED, NO_LED, NO_LED }, - { NO_LED, 38, 39, 40, 41, 42, 43, NO_LED, NO_LED, NO_LED }, - { NO_LED, 62, 61, 60, 59, 58, 57, NO_LED, NO_LED, NO_LED } - }, { - { 120, 0 }, { 128, 0 }, { 136, 0 }, { 144, 0 }, { 152, 0 }, { 160, 0 }, { 168, 0 }, { 176, 0 }, { 184, 0 }, { 192, 0 }, { 200, 0 }, { 208, 0 }, - { 224, 32 }, - { 212, 16 }, { 204, 16 }, { 196, 16 }, { 188, 16 }, { 180, 16 }, { 172, 16 }, { 164, 16 }, { 156, 16 }, { 148, 16 }, { 140, 16 }, { 132, 16 }, { 124, 16 }, { 116, 16 }, - { 120, 32 }, { 128, 32 }, { 136, 32 }, { 144, 32 }, { 152, 32 }, { 160, 32 }, { 168, 32 }, { 176, 32 }, { 184, 32 }, { 192, 32 }, { 200, 32 }, { 208, 32 }, - { 212, 48 }, { 204, 48 }, { 196, 48 }, { 188, 48 }, { 180, 48 }, { 172, 48 }, { 164, 48 }, { 156, 48 }, { 148, 48 }, { 140, 48 }, { 132, 48 }, { 124, 48 }, { 116, 48 }, - { 120, 64 }, { 128, 64 }, { 136, 64 }, { 144, 64 }, { 152, 64 }, { 160, 64 }, { 168, 64 }, { 176, 64 }, { 184, 64 }, { 192, 64 }, { 200, 64 }, { 208, 64 }, - - { 88, 0 }, { 80, 0 }, { 72, 0 }, { 64, 0 }, { 56, 0 }, { 48, 0 }, { 40, 0 }, { 32, 0 }, { 24, 0 }, { 16, 0 }, { 8, 0 }, { 0, 0 }, - { 4, 16 }, { 12, 16 }, { 20, 16 }, { 28, 16 }, { 36, 16 }, { 44, 16 }, { 52, 16 }, { 60, 16 }, { 68, 16 }, { 76, 16 }, { 84, 16 }, { 92, 16 }, - { 96, 32 }, { 88, 32 }, { 80, 32 }, { 72, 32 }, { 64, 32 }, { 56, 32 }, { 48, 32 }, { 40, 32 }, { 32, 32 }, { 24, 32 }, { 16, 32 }, { 8, 32 }, - { 12, 48 }, { 20, 48 }, { 28, 48 }, { 36, 48 }, { 44, 48 }, { 52, 48 }, { 60, 48 }, { 68, 48 }, { 76, 48 }, { 84, 48 }, { 92, 48 }, { 100, 48 }, - { 104, 64 }, { 96, 64 }, { 88, 64 }, { 80, 64 }, { 72, 64 }, { 64, 64 }, { 56, 64 }, { 48, 64 }, { 40, 64 }, { 32, 64 }, { 24, 64 }, { 16, 64 } - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - } -}; - -// const uint8_t PROGMEM convert_led_location2number[] = { -// 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, -// 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, -// 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, -// 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, -// 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, -// -// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, -// 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, -// 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 12, -// 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, -// 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62 -// }; -#endif - void my_process_midi4Bass(uint8_t channel, keyrecord_t *record, uint8_t *chord_status, uint8_t chord, uint16_t root_note, bool is_single_bass) { uint8_t velocity = midi_config.velocity; diff --git a/keyboards/giabalanai/keyboard.json b/keyboards/giabalanai/keyboard.json index 2e2357fe4c..9bb6b49336 100644 --- a/keyboards/giabalanai/keyboard.json +++ b/keyboards/giabalanai/keyboard.json @@ -17,6 +17,131 @@ "multisplash": true }, "driver": "ws2812", + "layout": [ + {"x": 120, "y": 0, "flags": 4}, + {"x": 128, "y": 0, "flags": 4}, + {"x": 136, "y": 0, "flags": 4}, + {"x": 144, "y": 0, "flags": 4}, + {"x": 152, "y": 0, "flags": 4}, + {"x": 160, "y": 0, "flags": 4}, + {"x": 168, "y": 0, "flags": 4}, + {"x": 176, "y": 0, "flags": 4}, + {"x": 184, "y": 0, "flags": 4}, + {"x": 192, "y": 0, "flags": 4}, + {"x": 200, "y": 0, "flags": 4}, + {"x": 208, "y": 0, "flags": 4}, + {"matrix": [9, 1], "x": 224, "y": 32, "flags": 4}, + {"x": 212, "y": 16, "flags": 4}, + {"x": 204, "y": 16, "flags": 4}, + {"x": 196, "y": 16, "flags": 4}, + {"x": 188, "y": 16, "flags": 4}, + {"x": 180, "y": 16, "flags": 4}, + {"x": 172, "y": 16, "flags": 4}, + {"x": 164, "y": 16, "flags": 4}, + {"x": 156, "y": 16, "flags": 4}, + {"x": 148, "y": 16, "flags": 4}, + {"x": 140, "y": 16, "flags": 4}, + {"x": 132, "y": 16, "flags": 4}, + {"x": 124, "y": 16, "flags": 4}, + {"matrix": [8, 0], "x": 116, "y": 16, "flags": 4}, + {"matrix": [6, 0], "x": 120, "y": 32, "flags": 4}, + {"matrix": [6, 1], "x": 128, "y": 32, "flags": 4}, + {"matrix": [6, 2], "x": 136, "y": 32, "flags": 4}, + {"matrix": [6, 3], "x": 144, "y": 32, "flags": 4}, + {"matrix": [6, 4], "x": 152, "y": 32, "flags": 4}, + {"matrix": [6, 5], "x": 160, "y": 32, "flags": 4}, + {"matrix": [6, 6], "x": 168, "y": 32, "flags": 4}, + {"matrix": [9, 6], "x": 176, "y": 32, "flags": 4}, + {"matrix": [9, 5], "x": 184, "y": 32, "flags": 4}, + {"matrix": [9, 4], "x": 192, "y": 32, "flags": 4}, + {"matrix": [9, 3], "x": 200, "y": 32, "flags": 4}, + {"matrix": [9, 2], "x": 208, "y": 32, "flags": 4}, + {"matrix": [10, 1], "x": 212, "y": 48, "flags": 4}, + {"matrix": [10, 2], "x": 204, "y": 48, "flags": 4}, + {"matrix": [10, 3], "x": 196, "y": 48, "flags": 4}, + {"matrix": [10, 4], "x": 188, "y": 48, "flags": 4}, + {"matrix": [10, 5], "x": 180, "y": 48, "flags": 4}, + {"matrix": [10, 6], "x": 172, "y": 48, "flags": 4}, + {"matrix": [7, 6], "x": 164, "y": 48, "flags": 4}, + {"matrix": [7, 5], "x": 156, "y": 48, "flags": 4}, + {"matrix": [7, 4], "x": 148, "y": 48, "flags": 4}, + {"matrix": [7, 3], "x": 140, "y": 48, "flags": 4}, + {"matrix": [7, 2], "x": 132, "y": 48, "flags": 4}, + {"matrix": [7, 1], "x": 124, "y": 48, "flags": 4}, + {"matrix": [7, 0], "x": 116, "y": 48, "flags": 4}, + {"matrix": [8, 1], "x": 120, "y": 64, "flags": 4}, + {"matrix": [8, 2], "x": 128, "y": 64, "flags": 4}, + {"matrix": [8, 3], "x": 136, "y": 64, "flags": 4}, + {"matrix": [8, 4], "x": 144, "y": 64, "flags": 4}, + {"matrix": [8, 5], "x": 152, "y": 64, "flags": 4}, + {"matrix": [8, 6], "x": 160, "y": 64, "flags": 4}, + {"matrix": [11, 6], "x": 168, "y": 64, "flags": 4}, + {"matrix": [11, 5], "x": 176, "y": 64, "flags": 4}, + {"matrix": [11, 4], "x": 184, "y": 64, "flags": 4}, + {"matrix": [11, 3], "x": 192, "y": 64, "flags": 4}, + {"matrix": [11, 2], "x": 200, "y": 64, "flags": 4}, + {"matrix": [11, 1], "x": 208, "y": 64, "flags": 4}, + {"matrix": [0, 5], "x": 88, "y": 0, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [2, 5], "x": 72, "y": 0, "flags": 4}, + {"matrix": [3, 5], "x": 64, "y": 0, "flags": 4}, + {"matrix": [4, 5], "x": 56, "y": 0, "flags": 4}, + {"matrix": [5, 5], "x": 48, "y": 0, "flags": 4}, + {"matrix": [5, 0], "x": 40, "y": 0, "flags": 4}, + {"matrix": [4, 0], "x": 32, "y": 0, "flags": 4}, + {"matrix": [3, 0], "x": 24, "y": 0, "flags": 4}, + {"matrix": [2, 0], "x": 16, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 8, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 4, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 12, "y": 16, "flags": 4}, + {"matrix": [2, 1], "x": 20, "y": 16, "flags": 4}, + {"matrix": [3, 1], "x": 28, "y": 16, "flags": 4}, + {"matrix": [4, 1], "x": 36, "y": 16, "flags": 4}, + {"matrix": [5, 1], "x": 44, "y": 16, "flags": 4}, + {"matrix": [5, 6], "x": 52, "y": 16, "flags": 4}, + {"matrix": [4, 6], "x": 60, "y": 16, "flags": 4}, + {"matrix": [3, 6], "x": 68, "y": 16, "flags": 4}, + {"matrix": [2, 6], "x": 76, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 84, "y": 16, "flags": 4}, + {"matrix": [0, 6], "x": 92, "y": 16, "flags": 4}, + {"matrix": [0, 7], "x": 96, "y": 32, "flags": 4}, + {"matrix": [1, 7], "x": 88, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 80, "y": 32, "flags": 4}, + {"matrix": [3, 7], "x": 72, "y": 32, "flags": 4}, + {"matrix": [4, 7], "x": 64, "y": 32, "flags": 4}, + {"matrix": [5, 7], "x": 56, "y": 32, "flags": 4}, + {"matrix": [5, 2], "x": 48, "y": 32, "flags": 4}, + {"matrix": [4, 2], "x": 40, "y": 32, "flags": 4}, + {"matrix": [3, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 24, "y": 32, "flags": 4}, + {"matrix": [1, 2], "x": 16, "y": 32, "flags": 4}, + {"matrix": [0, 2], "x": 8, "y": 32, "flags": 4}, + {"matrix": [0, 3], "x": 12, "y": 48, "flags": 4}, + {"matrix": [1, 3], "x": 20, "y": 48, "flags": 4}, + {"matrix": [2, 3], "x": 28, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 36, "y": 48, "flags": 4}, + {"matrix": [4, 3], "x": 44, "y": 48, "flags": 4}, + {"matrix": [5, 3], "x": 52, "y": 48, "flags": 4}, + {"matrix": [5, 8], "x": 60, "y": 48, "flags": 4}, + {"matrix": [4, 8], "x": 68, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 76, "y": 48, "flags": 4}, + {"matrix": [2, 8], "x": 84, "y": 48, "flags": 4}, + {"matrix": [1, 8], "x": 92, "y": 48, "flags": 4}, + {"matrix": [0, 8], "x": 100, "y": 48, "flags": 4}, + {"matrix": [0, 9], "x": 104, "y": 64, "flags": 4}, + {"matrix": [1, 9], "x": 96, "y": 64, "flags": 4}, + {"matrix": [2, 9], "x": 88, "y": 64, "flags": 4}, + {"matrix": [3, 9], "x": 80, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 72, "y": 64, "flags": 4}, + {"matrix": [5, 9], "x": 64, "y": 64, "flags": 4}, + {"matrix": [5, 4], "x": 56, "y": 64, "flags": 4}, + {"matrix": [4, 4], "x": 48, "y": 64, "flags": 4}, + {"matrix": [3, 4], "x": 40, "y": 64, "flags": 4}, + {"matrix": [2, 4], "x": 32, "y": 64, "flags": 4}, + {"matrix": [1, 4], "x": 24, "y": 64, "flags": 4}, + {"matrix": [0, 4], "x": 16, "y": 64, "flags": 4} + ], "max_brightness": 50 }, "rgblight": { diff --git a/keyboards/gizmo_engineering/gk6/gk6.c b/keyboards/gizmo_engineering/gk6/gk6.c index fe85ecc235..a6f6d93438 100755 --- a/keyboards/gizmo_engineering/gk6/gk6.c +++ b/keyboards/gizmo_engineering/gk6/gk6.c @@ -82,102 +82,4 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {1, C9_15, C8_15, C6_14}, //61 led59 {1, C9_16, C7_15, C6_15}, //62 led60 }; - -led_config_t g_led_config = { { - // Key Matrix to LED Index -// 1, 6, 10, 15, 20, 26, 31, 37, 42, 47, 52, 56 - {0, 5, 10, 15, 20, 26, 31, 37, 43, 48, 53, 58}, -// 2, 7, 11, 16, 21, 27, 32, 37b, 43, 48, 52b, 57 - {1, 6, 11, 16, 21, 27, 32, 38, 44, 49, 54, 59}, -// 3, 7b, 12, 17, 22, 28, 33, 38, 44, 49, 53, 58 - {2, 7, 12, 17, 22, 28, 33, 39, 45, 50, 55, 60}, -// 4, 8, 13, 18, 23, 29, 34, 39, 45, 50, 54, 59 - {3, 8, 13, 18, 23, 29, 34, 40, 46, 51, 56, 61}, -// 5, 9, 14, 19, 25, NO_LED, NO_LED, 41, 46, 51, 55, 60 - {4, 9, 14, 19, 25, NO_LED, NO_LED, 42, 47, 52, 57, 62}, -}, { - // LED Index to Physical Position - {0, 0}, // 0 - {0, 16}, // 1 - {0, 32}, // 2 - {0, 48}, // 3 - {0, 64}, // 4 - - {21, 0}, // 5 - {21, 16}, // 6 - {21, 32}, // 7 - {21, 48}, // 8 - {21, 64}, // 9 - - {41, 0}, // 10 - {41, 16}, // 11 - {41, 32}, // 12 - {41, 48}, // 13 - {41, 64}, // 14 - - {61, 0}, // 15 - {61, 16}, // 16 - {61, 32}, // 17 - {61, 48}, // 18 - {61, 64}, // 19 - - {82, 0}, // 20 - {82, 16}, // 21 - {82, 32}, // 22 - {82, 48}, // 23 - {82, 64}, // 24 - {92, 64}, // 25 - - {102, 0}, // 26 - {102, 16}, // 27 - {102, 32}, // 28 - {102, 48}, // 29 - {102, 64}, // 30 - - {122, 0}, // 31 - {122, 16}, // 32 - {122, 32}, // 33 - {122, 48}, // 34 - {122, 64}, // 35 - {112, 64}, // 36 - - {142, 0}, // 37 - {142, 16}, // 38 - {142, 32}, // 39 - {142, 48}, // 40 - {142, 64}, // 41 - {132, 64}, // 42 - - {163, 0}, // 43 - {163, 16}, // 44 - {163, 32}, // 45 - {163, 48}, // 46 - {163, 64}, // 47 - - {183, 0}, // 48 - {183, 16}, // 49 - {183, 32}, // 50 - {183, 48}, // 51 - {183, 64}, // 52 - - {203, 0}, // 53 - {203, 16}, // 54 - {203, 32}, // 55 - {203, 48}, // 56 - {203, 64}, // 57 - - {224, 0}, // 58 - {224, 16}, // 59 - {224, 32}, // 60 - {224, 48}, // 61 - {224, 64}, // 62 -}, { - // LED Index to Flag - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04 -} }; #endif diff --git a/keyboards/gizmo_engineering/gk6/keyboard.json b/keyboards/gizmo_engineering/gk6/keyboard.json index 45e5bf0706..70ab615a7c 100644 --- a/keyboards/gizmo_engineering/gk6/keyboard.json +++ b/keyboards/gizmo_engineering/gk6/keyboard.json @@ -24,6 +24,71 @@ "solid_reactive_multicross": true }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [0, 1], "x": 21, "y": 0, "flags": 4}, + {"matrix": [1, 1], "x": 21, "y": 16, "flags": 4}, + {"matrix": [2, 1], "x": 21, "y": 32, "flags": 4}, + {"matrix": [3, 1], "x": 21, "y": 48, "flags": 4}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 4}, + {"matrix": [0, 2], "x": 41, "y": 0, "flags": 4}, + {"matrix": [1, 2], "x": 41, "y": 16, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [3, 2], "x": 41, "y": 48, "flags": 4}, + {"matrix": [4, 2], "x": 41, "y": 64, "flags": 4}, + {"matrix": [0, 3], "x": 61, "y": 0, "flags": 4}, + {"matrix": [1, 3], "x": 61, "y": 16, "flags": 4}, + {"matrix": [2, 3], "x": 61, "y": 32, "flags": 4}, + {"matrix": [3, 3], "x": 61, "y": 48, "flags": 4}, + {"matrix": [4, 3], "x": 61, "y": 64, "flags": 4}, + {"matrix": [0, 4], "x": 82, "y": 0, "flags": 4}, + {"matrix": [1, 4], "x": 82, "y": 16, "flags": 4}, + {"matrix": [2, 4], "x": 82, "y": 32, "flags": 4}, + {"matrix": [3, 4], "x": 82, "y": 48, "flags": 4}, + {"x": 82, "y": 64, "flags": 4}, + {"matrix": [4, 4], "x": 92, "y": 64, "flags": 4}, + {"matrix": [0, 5], "x": 102, "y": 0, "flags": 4}, + {"matrix": [1, 5], "x": 102, "y": 16, "flags": 4}, + {"matrix": [2, 5], "x": 102, "y": 32, "flags": 4}, + {"matrix": [3, 5], "x": 102, "y": 48, "flags": 4}, + {"x": 102, "y": 64, "flags": 4}, + {"matrix": [0, 6], "x": 122, "y": 0, "flags": 4}, + {"matrix": [1, 6], "x": 122, "y": 16, "flags": 4}, + {"matrix": [2, 6], "x": 122, "y": 32, "flags": 4}, + {"matrix": [3, 6], "x": 122, "y": 48, "flags": 4}, + {"x": 122, "y": 64, "flags": 4}, + {"x": 112, "y": 64, "flags": 4}, + {"matrix": [0, 7], "x": 142, "y": 0, "flags": 4}, + {"matrix": [1, 7], "x": 142, "y": 16, "flags": 4}, + {"matrix": [2, 7], "x": 142, "y": 32, "flags": 4}, + {"matrix": [3, 7], "x": 142, "y": 48, "flags": 4}, + {"x": 142, "y": 64, "flags": 4}, + {"matrix": [4, 7], "x": 132, "y": 64, "flags": 4}, + {"matrix": [0, 8], "x": 163, "y": 0, "flags": 4}, + {"matrix": [1, 8], "x": 163, "y": 16, "flags": 4}, + {"matrix": [2, 8], "x": 163, "y": 32, "flags": 4}, + {"matrix": [3, 8], "x": 163, "y": 48, "flags": 4}, + {"matrix": [4, 8], "x": 163, "y": 64, "flags": 4}, + {"matrix": [0, 9], "x": 183, "y": 0, "flags": 4}, + {"matrix": [1, 9], "x": 183, "y": 16, "flags": 4}, + {"matrix": [2, 9], "x": 183, "y": 32, "flags": 4}, + {"matrix": [3, 9], "x": 183, "y": 48, "flags": 4}, + {"matrix": [4, 9], "x": 183, "y": 64, "flags": 4}, + {"matrix": [0, 10], "x": 203, "y": 0, "flags": 4}, + {"matrix": [1, 10], "x": 203, "y": 16, "flags": 4}, + {"matrix": [2, 10], "x": 203, "y": 32, "flags": 4}, + {"matrix": [3, 10], "x": 203, "y": 48, "flags": 4}, + {"matrix": [4, 10], "x": 203, "y": 64, "flags": 4}, + {"matrix": [0, 11], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 11], "x": 224, "y": 16, "flags": 4}, + {"matrix": [2, 11], "x": 224, "y": 32, "flags": 4}, + {"matrix": [3, 11], "x": 224, "y": 48, "flags": 4}, + {"matrix": [4, 11], "x": 224, "y": 64, "flags": 4} + ], "react_on_keyup": true, "sleep": true }, diff --git a/keyboards/gmmk/gmmk2/p65/ansi/ansi.c b/keyboards/gmmk/gmmk2/p65/ansi/ansi.c index b3ac9906db..94aa93d8ea 100644 --- a/keyboards/gmmk/gmmk2/p65/ansi/ansi.c +++ b/keyboards/gmmk/gmmk2/p65/ansi/ansi.c @@ -118,119 +118,4 @@ const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { {1, SW9_CS16, SW9_CS17, SW9_CS18 }, // 87 LED 19 {1, SW10_CS16, SW10_CS17, SW10_CS18} // 88 LED 20 }; - -#define __ NO_LED - -led_config_t g_led_config = {{ - { 44, 57, __, 64, __, 66, 58, 55}, - { 16, 15, 31, 0, 45, 59, __, 1}, - { 17, 30, 32, 60, 46, 14, 29, 2}, - { 18, 61, 33, 63, 47, 56, 62, 3}, - { 19, 20, 34, 35, 48, 49, 5, 4}, - { 22, 21, 37, 36, 51, 50, 6, 7}, - { 23, 27, 38, __, 52, 43, 12, 8}, - { 24, 13, 39, 65, 53, __, 28, 9}, - { 25, 26, 40, 41, 42, 54, 11, 10} -}, { - {14, 0 }, // 0 Esc - {28, 0 }, // 1 1 - {42, 0 }, // 2 2 - {56, 0 }, // 3 3 - {70, 0 }, // 4 4 - {84, 0 }, // 5 5 - {98, 0 }, // 6 6 - {112, 0 }, // 7 7 - {126, 0 }, // 8 8 - {140, 0 }, // 9 9 - {154, 0 }, // 10 0 - {168, 0 }, // 11 - - {182, 0 }, // 12 = - {196, 0 }, // 13 Backspace - {210, 0 }, // 14 Del - - {14, 16}, // 15 Tab - {28, 16}, // 16 Q - {42, 16}, // 17 W - {56, 16}, // 18 E - {70, 16}, // 19 R - {84, 16}, // 20 T - {98, 16}, // 21 Y - {112, 16}, // 22 U - {126, 16}, // 23 I - {140, 16}, // 24 O - {154, 16}, // 25 P - {168, 16}, // 26 [ - {182, 16}, // 27 ] - {196, 16}, // 28 \| - {210, 16}, // 29 PgUp - - {14, 32}, // 30 Caps Lock - {28, 32}, // 31 A - {42, 32}, // 32 S - {56, 32}, // 33 D - {70, 32}, // 34 F - {84, 32}, // 35 G - {98, 32}, // 36 H - {112, 32}, // 37 J - {126, 32}, // 38 K - {140, 32}, // 39 L - {154, 32}, // 40 ; - {168, 32}, // 41 ' - {196, 32}, // 42 Enter - {210, 32}, // 43 PgDn - - {14, 48}, // 44 Shift_L - {42, 48}, // 45 Z - {56, 48}, // 46 X - {70, 48}, // 47 C - {84, 48}, // 48 V - {98, 48}, // 49 B - {112, 48}, // 50 N - {126, 48}, // 51 M - {140, 48}, // 52 , - {154, 48}, // 53 . - {168, 48}, // 54 / - {182, 48}, // 55 Shift_R - {196, 48}, // 56 Up - {210, 48}, // 57 END - - {14, 64}, // 58 Ctrl_L - {28, 64}, // 59 Win_L - {42, 64}, // 60 Alt_L - {84, 64}, // 61 Space - {126, 64}, // 62 Alt_R - {140, 64}, // 63 FN - {182, 64}, // 64 Left - {196, 64}, // 65 Down - {210, 64}, // 66 Right - - {224, 0 }, // 69 LED 1 - {224, 7 }, // 70 LED 2 - {224, 14}, // 71 LED 3 - {224, 21}, // 72 LED 4 - {224, 28}, // 73 LED 5 - {224, 35}, // 74 LED 6 - {224, 42}, // 75 LED 7 - {224, 49}, // 76 LED 8 - {224, 56}, // 77 LED 9 - {224, 64}, // 78 LED 10 - {0, 0 }, // 79 LED 11 - {0, 7 }, // 80 LED 12 - {0, 14}, // 81 LED 13 - {0, 21}, // 82 LED 14 - {0, 28}, // 83 LED 15 - {0, 35}, // 84 LED 16 - {0, 42}, // 85 LED 17 - {0, 49}, // 86 LED 18 - {0, 56}, // 87 LED 19 - {0, 64}, // 88 LED 20 -}, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -} }; #endif diff --git a/keyboards/gmmk/gmmk2/p65/ansi/keyboard.json b/keyboards/gmmk/gmmk2/p65/ansi/keyboard.json index 70c308da5f..14603e0283 100644 --- a/keyboards/gmmk/gmmk2/p65/ansi/keyboard.json +++ b/keyboards/gmmk/gmmk2/p65/ansi/keyboard.json @@ -28,6 +28,97 @@ }, "processor": "WB32F3G71", "bootloader": "wb32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [1, 3], "x": 14, "y": 0, "flags": 4}, + {"matrix": [1, 7], "x": 28, "y": 0, "flags": 4}, + {"matrix": [2, 7], "x": 42, "y": 0, "flags": 4}, + {"matrix": [3, 7], "x": 56, "y": 0, "flags": 4}, + {"matrix": [4, 7], "x": 70, "y": 0, "flags": 4}, + {"matrix": [4, 6], "x": 84, "y": 0, "flags": 4}, + {"matrix": [5, 6], "x": 98, "y": 0, "flags": 4}, + {"matrix": [5, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [6, 7], "x": 126, "y": 0, "flags": 4}, + {"matrix": [7, 7], "x": 140, "y": 0, "flags": 4}, + {"matrix": [8, 7], "x": 154, "y": 0, "flags": 4}, + {"matrix": [8, 6], "x": 168, "y": 0, "flags": 4}, + {"matrix": [6, 6], "x": 182, "y": 0, "flags": 4}, + {"matrix": [7, 1], "x": 196, "y": 0, "flags": 4}, + {"matrix": [2, 5], "x": 210, "y": 0, "flags": 4}, + {"matrix": [1, 1], "x": 14, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 28, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 42, "y": 16, "flags": 4}, + {"matrix": [3, 0], "x": 56, "y": 16, "flags": 4}, + {"matrix": [4, 0], "x": 70, "y": 16, "flags": 4}, + {"matrix": [4, 1], "x": 84, "y": 16, "flags": 4}, + {"matrix": [5, 1], "x": 98, "y": 16, "flags": 4}, + {"matrix": [5, 0], "x": 112, "y": 16, "flags": 4}, + {"matrix": [6, 0], "x": 126, "y": 16, "flags": 4}, + {"matrix": [7, 0], "x": 140, "y": 16, "flags": 4}, + {"matrix": [8, 0], "x": 154, "y": 16, "flags": 4}, + {"matrix": [8, 1], "x": 168, "y": 16, "flags": 4}, + {"matrix": [6, 1], "x": 182, "y": 16, "flags": 4}, + {"matrix": [7, 6], "x": 196, "y": 16, "flags": 4}, + {"matrix": [2, 6], "x": 210, "y": 16, "flags": 4}, + {"matrix": [2, 1], "x": 14, "y": 32, "flags": 4}, + {"matrix": [1, 2], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 42, "y": 32, "flags": 4}, + {"matrix": [3, 2], "x": 56, "y": 32, "flags": 4}, + {"matrix": [4, 2], "x": 70, "y": 32, "flags": 4}, + {"matrix": [4, 3], "x": 84, "y": 32, "flags": 4}, + {"matrix": [5, 3], "x": 98, "y": 32, "flags": 4}, + {"matrix": [5, 2], "x": 112, "y": 32, "flags": 4}, + {"matrix": [6, 2], "x": 126, "y": 32, "flags": 4}, + {"matrix": [7, 2], "x": 140, "y": 32, "flags": 4}, + {"matrix": [8, 2], "x": 154, "y": 32, "flags": 4}, + {"matrix": [8, 3], "x": 168, "y": 32, "flags": 4}, + {"matrix": [8, 4], "x": 196, "y": 32, "flags": 4}, + {"matrix": [6, 5], "x": 210, "y": 32, "flags": 4}, + {"matrix": [0, 0], "x": 14, "y": 48, "flags": 4}, + {"matrix": [1, 4], "x": 42, "y": 48, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 70, "y": 48, "flags": 4}, + {"matrix": [4, 4], "x": 84, "y": 48, "flags": 4}, + {"matrix": [4, 5], "x": 98, "y": 48, "flags": 4}, + {"matrix": [5, 5], "x": 112, "y": 48, "flags": 4}, + {"matrix": [5, 4], "x": 126, "y": 48, "flags": 4}, + {"matrix": [6, 4], "x": 140, "y": 48, "flags": 4}, + {"matrix": [7, 4], "x": 154, "y": 48, "flags": 4}, + {"matrix": [8, 5], "x": 168, "y": 48, "flags": 4}, + {"matrix": [0, 7], "x": 182, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 196, "y": 48, "flags": 4}, + {"matrix": [0, 1], "x": 210, "y": 48, "flags": 4}, + {"matrix": [0, 6], "x": 14, "y": 64, "flags": 4}, + {"matrix": [1, 5], "x": 28, "y": 64, "flags": 4}, + {"matrix": [2, 3], "x": 42, "y": 64, "flags": 4}, + {"matrix": [3, 1], "x": 84, "y": 64, "flags": 4}, + {"matrix": [3, 6], "x": 126, "y": 64, "flags": 4}, + {"matrix": [3, 3], "x": 140, "y": 64, "flags": 4}, + {"matrix": [0, 3], "x": 182, "y": 64, "flags": 4}, + {"matrix": [7, 3], "x": 196, "y": 64, "flags": 4}, + {"matrix": [0, 5], "x": 210, "y": 64, "flags": 4}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 224, "y": 7, "flags": 2}, + {"x": 224, "y": 14, "flags": 2}, + {"x": 224, "y": 21, "flags": 2}, + {"x": 224, "y": 28, "flags": 2}, + {"x": 224, "y": 35, "flags": 2}, + {"x": 224, "y": 42, "flags": 2}, + {"x": 224, "y": 49, "flags": 2}, + {"x": 224, "y": 56, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 0, "y": 7, "flags": 2}, + {"x": 0, "y": 14, "flags": 2}, + {"x": 0, "y": 21, "flags": 2}, + {"x": 0, "y": 28, "flags": 2}, + {"x": 0, "y": 35, "flags": 2}, + {"x": 0, "y": 42, "flags": 2}, + {"x": 0, "y": 49, "flags": 2}, + {"x": 0, "y": 56, "flags": 2}, + {"x": 0, "y": 64, "flags": 2} + ] + }, "layout_aliases": { "LAYOUT": "LAYOUT_65_ansi_blocker" }, diff --git a/keyboards/gmmk/gmmk2/p65/iso/iso.c b/keyboards/gmmk/gmmk2/p65/iso/iso.c index abadaccd34..bc9cfe6a83 100644 --- a/keyboards/gmmk/gmmk2/p65/iso/iso.c +++ b/keyboards/gmmk/gmmk2/p65/iso/iso.c @@ -119,120 +119,4 @@ const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { {1, SW9_CS16, SW9_CS17, SW9_CS18 }, // 86 LED 19 {1, SW10_CS16, SW10_CS17, SW10_CS18} // 87 LED 20 }; - -#define __ NO_LED - -led_config_t g_led_config = {{ - { 44, 58, 45, 65, __, 67, 59, 56}, - { 16, 15, 31, 0, 46, 60, __, 1}, - { 17, 30, 32, 61, 47, 14, 29, 2}, - { 18, 62, 33, 64, 48, 57, 63, 3}, - { 19, 20, 34, 35, 49, 50, 5, 4}, - { 22, 21, 37, 36, 52, 51, 6, 7}, - { 23, 27, 38, __, 53, 43, 12, 8}, - { 24, 13, 39, 66, 54, 42, __, 9}, - { 25, 26, 40, 41, 28, 55, 11, 10} -}, { - {14, 0 }, // 0 Esc - {28, 0 }, // 1 1 - {42, 0 }, // 2 2 - {56, 0 }, // 3 3 - {70, 0 }, // 4 4 - {84, 0 }, // 5 5 - {98, 0 }, // 6 6 - {112, 0 }, // 7 7 - {126, 0 }, // 8 8 - {140, 0 }, // 9 9 - {154, 0 }, // 10 0 - {168, 0 }, // 11 - - {182, 0 }, // 12 = - {196, 0 }, // 13 Backspace - {210, 0 }, // 14 HOME - - {14, 16}, // 15 Tab - {28, 16}, // 16 Q - {42, 16}, // 17 W - {56, 16}, // 18 E - {70, 16}, // 19 R - {84, 16}, // 20 T - {98, 16}, // 21 Y - {112, 16}, // 22 U - {126, 16}, // 23 I - {140, 16}, // 24 O - {154, 16}, // 25 P - {168, 16}, // 26 [ - {182, 16}, // 27 ] - {196, 16}, // 28 ENTER - {210, 16}, // 29 PgUp - - {14, 32}, // 30 Caps Lock - {28, 32}, // 31 A - {42, 32}, // 32 S - {56, 32}, // 33 D - {70, 32}, // 34 F - {84, 32}, // 35 G - {98, 32}, // 36 H - {112, 32}, // 37 J - {126, 32}, // 38 K - {140, 32}, // 39 L - {154, 32}, // 40 ; - {168, 32}, // 41 ' - {182, 32}, // 42 k42 - {210, 32}, // 43 PgDn - - {14, 48}, // 44 Shift_L - {28, 48}, // 45 k45 - {42, 48}, // 46 Z - {56, 48}, // 47 X - {70, 48}, // 48 C - {84, 48}, // 49 V - {98, 48}, // 50 B - {112, 48}, // 51 N - {126, 48}, // 52 M - {140, 48}, // 53 , - {154, 48}, // 54 . - {168, 48}, // 55 / - {182, 48}, // 56 Shift_R - {196, 48}, // 57 Up - {210, 48}, // 58 END - - {14, 64}, // 59 Ctrl_L - {28, 64}, // 60 Win_L - {42, 64}, // 61 Alt_L - {84, 64}, // 62 Space - {126, 64}, // 63 Alt_R - {140, 64}, // 64 FN - {182, 64}, // 65 Left - {196, 64}, // 66 Down - {210, 64}, // 67 Right - - {224, 0 }, // 68 LED 1 - {224, 7 }, // 69 LED 2 - {224, 14}, // 70 LED 3 - {224, 21}, // 71 LED 4 - {224, 28}, // 72 LED 5 - {224, 35}, // 73 LED 6 - {224, 42}, // 74 LED 7 - {224, 49}, // 75 LED 8 - {224, 56}, // 76 LED 9 - {224, 64}, // 77 LED 10 - {0, 0 }, // 78 LED 11 - {0, 7 }, // 79 LED 12 - {0, 14}, // 80 LED 13 - {0, 21}, // 81 LED 14 - {0, 28}, // 82 LED 15 - {0, 35}, // 83 LED 16 - {0, 42}, // 84 LED 17 - {0, 49}, // 85 LED 18 - {0, 56}, // 86 LED 19 - {0, 64}, // 87 LED 20 -}, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -} }; #endif diff --git a/keyboards/gmmk/gmmk2/p65/iso/keyboard.json b/keyboards/gmmk/gmmk2/p65/iso/keyboard.json index 9240268b4f..6a2f848ea6 100644 --- a/keyboards/gmmk/gmmk2/p65/iso/keyboard.json +++ b/keyboards/gmmk/gmmk2/p65/iso/keyboard.json @@ -28,6 +28,98 @@ }, "processor": "WB32F3G71", "bootloader": "wb32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [1, 3], "x": 14, "y": 0, "flags": 4}, + {"matrix": [1, 7], "x": 28, "y": 0, "flags": 4}, + {"matrix": [2, 7], "x": 42, "y": 0, "flags": 4}, + {"matrix": [3, 7], "x": 56, "y": 0, "flags": 4}, + {"matrix": [4, 7], "x": 70, "y": 0, "flags": 4}, + {"matrix": [4, 6], "x": 84, "y": 0, "flags": 4}, + {"matrix": [5, 6], "x": 98, "y": 0, "flags": 4}, + {"matrix": [5, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [6, 7], "x": 126, "y": 0, "flags": 4}, + {"matrix": [7, 7], "x": 140, "y": 0, "flags": 4}, + {"matrix": [8, 7], "x": 154, "y": 0, "flags": 4}, + {"matrix": [8, 6], "x": 168, "y": 0, "flags": 4}, + {"matrix": [6, 6], "x": 182, "y": 0, "flags": 4}, + {"matrix": [7, 1], "x": 196, "y": 0, "flags": 4}, + {"matrix": [2, 5], "x": 210, "y": 0, "flags": 4}, + {"matrix": [1, 1], "x": 14, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 28, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 42, "y": 16, "flags": 4}, + {"matrix": [3, 0], "x": 56, "y": 16, "flags": 4}, + {"matrix": [4, 0], "x": 70, "y": 16, "flags": 4}, + {"matrix": [4, 1], "x": 84, "y": 16, "flags": 4}, + {"matrix": [5, 1], "x": 98, "y": 16, "flags": 4}, + {"matrix": [5, 0], "x": 112, "y": 16, "flags": 4}, + {"matrix": [6, 0], "x": 126, "y": 16, "flags": 4}, + {"matrix": [7, 0], "x": 140, "y": 16, "flags": 4}, + {"matrix": [8, 0], "x": 154, "y": 16, "flags": 4}, + {"matrix": [8, 1], "x": 168, "y": 16, "flags": 4}, + {"matrix": [6, 1], "x": 182, "y": 16, "flags": 4}, + {"matrix": [8, 4], "x": 196, "y": 16, "flags": 4}, + {"matrix": [2, 6], "x": 210, "y": 16, "flags": 4}, + {"matrix": [2, 1], "x": 14, "y": 32, "flags": 4}, + {"matrix": [1, 2], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 42, "y": 32, "flags": 4}, + {"matrix": [3, 2], "x": 56, "y": 32, "flags": 4}, + {"matrix": [4, 2], "x": 70, "y": 32, "flags": 4}, + {"matrix": [4, 3], "x": 84, "y": 32, "flags": 4}, + {"matrix": [5, 3], "x": 98, "y": 32, "flags": 4}, + {"matrix": [5, 2], "x": 112, "y": 32, "flags": 4}, + {"matrix": [6, 2], "x": 126, "y": 32, "flags": 4}, + {"matrix": [7, 2], "x": 140, "y": 32, "flags": 4}, + {"matrix": [8, 2], "x": 154, "y": 32, "flags": 4}, + {"matrix": [8, 3], "x": 168, "y": 32, "flags": 4}, + {"matrix": [7, 5], "x": 182, "y": 32, "flags": 4}, + {"matrix": [6, 5], "x": 210, "y": 32, "flags": 4}, + {"matrix": [0, 0], "x": 14, "y": 48, "flags": 4}, + {"matrix": [0, 2], "x": 28, "y": 48, "flags": 4}, + {"matrix": [1, 4], "x": 42, "y": 48, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 70, "y": 48, "flags": 4}, + {"matrix": [4, 4], "x": 84, "y": 48, "flags": 4}, + {"matrix": [4, 5], "x": 98, "y": 48, "flags": 4}, + {"matrix": [5, 5], "x": 112, "y": 48, "flags": 4}, + {"matrix": [5, 4], "x": 126, "y": 48, "flags": 4}, + {"matrix": [6, 4], "x": 140, "y": 48, "flags": 4}, + {"matrix": [7, 4], "x": 154, "y": 48, "flags": 4}, + {"matrix": [8, 5], "x": 168, "y": 48, "flags": 4}, + {"matrix": [0, 7], "x": 182, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 196, "y": 48, "flags": 4}, + {"matrix": [0, 1], "x": 210, "y": 48, "flags": 4}, + {"matrix": [0, 6], "x": 14, "y": 64, "flags": 4}, + {"matrix": [1, 5], "x": 28, "y": 64, "flags": 4}, + {"matrix": [2, 3], "x": 42, "y": 64, "flags": 4}, + {"matrix": [3, 1], "x": 84, "y": 64, "flags": 4}, + {"matrix": [3, 6], "x": 126, "y": 64, "flags": 4}, + {"matrix": [3, 3], "x": 140, "y": 64, "flags": 4}, + {"matrix": [0, 3], "x": 182, "y": 64, "flags": 4}, + {"matrix": [7, 3], "x": 196, "y": 64, "flags": 4}, + {"matrix": [0, 5], "x": 210, "y": 64, "flags": 4}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 224, "y": 7, "flags": 2}, + {"x": 224, "y": 14, "flags": 2}, + {"x": 224, "y": 21, "flags": 2}, + {"x": 224, "y": 28, "flags": 2}, + {"x": 224, "y": 35, "flags": 2}, + {"x": 224, "y": 42, "flags": 2}, + {"x": 224, "y": 49, "flags": 2}, + {"x": 224, "y": 56, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 0, "y": 7, "flags": 2}, + {"x": 0, "y": 14, "flags": 2}, + {"x": 0, "y": 21, "flags": 2}, + {"x": 0, "y": 28, "flags": 2}, + {"x": 0, "y": 35, "flags": 2}, + {"x": 0, "y": 42, "flags": 2}, + {"x": 0, "y": 49, "flags": 2}, + {"x": 0, "y": 56, "flags": 2}, + {"x": 0, "y": 64, "flags": 2} + ] + }, "community_layouts": ["65_iso_blocker"], "layouts": { "LAYOUT_65_iso_blocker": { diff --git a/keyboards/gmmk/gmmk2/p96/ansi/ansi.c b/keyboards/gmmk/gmmk2/p96/ansi/ansi.c index 5b2b5893f7..dc61fd813f 100644 --- a/keyboards/gmmk/gmmk2/p96/ansi/ansi.c +++ b/keyboards/gmmk/gmmk2/p96/ansi/ansi.c @@ -151,160 +151,6 @@ const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { {1, SW9_CS16, SW9_CS17, SW9_CS18}, // 119, LED 19 {1, SW10_CS16, SW10_CS17, SW10_CS18} // 120, LED 20 }; - -#define __ NO_LED - -led_config_t g_led_config = {{ - { 0, 18, 36, 54, 70, 87, 14, 94}, - { 1, 19, 37, 55, __, 88, 15, 82}, - { 2, 20, 38, 56, 71, 89, 16, 95}, - { 3, 21, 39, 57, 72, __, 17, 96}, - { 4, 22, 40, 58, 73, __, 32, 97}, - { 5, 23, 41, 59, 74, __, 33, 98}, - { 6, 24, 42, 60, 75, 90, 34, 83}, - { 7, 25, 43, 61, 76, __, 35, 84}, - { 8, 26, 44, 62, 77, __, 50, 85}, - { 9, 27, 45, 63, 78, 91, 51, 86}, - {10, 28, 46, 64, 79, 92, 52, 67}, - {11, 29, 47, 65, 80, __, 53, 68}, - {12, 30, 48, __, __, 93, __, 69}, - {13, 31, 49, 66, 81, __, __, __} -}, { - { 11, 0}, // 0, k00, Esc - { 22, 0}, // 1, k10, F1 - { 33, 0}, // 2, k20, F2 - { 44, 0}, // 3, k30, F3 - { 55, 0}, // 4, k40, F4 - { 66, 0}, // 5, k50, F5 - { 77, 0}, // 6, k60, F6 - { 88, 0}, // 7, k70, F7 - { 99, 0}, // 8, k80, F8 - { 110, 0}, // 9, k90, F9 - { 121, 0}, // 10, ka0, F10 - { 132, 0}, // 11, kb0, F11 - { 143, 0}, // 12, kc0, F12 - { 154, 0}, // 13, kd0, Printscreen - { 165, 0}, // 14, k06, Delete - { 176, 0}, // 15, k16, Insert - { 187, 0}, // 16, k26, Page Up - { 198, 0}, // 17, k36, Page Down - - { 11, 11}, // 18, k01, ` - { 22, 11}, // 19, k11, 1 - { 33, 11}, // 20, k21, 2 - { 44, 11}, // 21, k31, 3 - { 55, 11}, // 22, k41, 4 - { 66, 11}, // 23, k51, 5 - { 77, 11}, // 24, k61, 6 - { 88, 11}, // 25, k71, 7 - { 99, 11}, // 26, k81, 8 - { 110, 11}, // 27, k91, 9 - { 121, 11}, // 28, ka1, 0 - { 132, 11}, // 29, kb1, - - { 143, 11}, // 30, kc1, = - { 154, 11}, // 31, kd1, Backspace - { 165, 11}, // 32, k46, Num Lock - { 176, 11}, // 33, k56, Num / - { 187, 11}, // 34, k66, Num * - { 198, 11}, // 35, k76, Num - - - { 11, 22}, // 36, k02, Tab - { 22, 22}, // 37, k12, Q - { 33, 22}, // 38, k22, W - { 44, 22}, // 39, k32, E - { 55, 22}, // 40, k42, R - { 66, 22}, // 41, k52, T - { 77, 22}, // 42, k62, Y - { 88, 22}, // 43, k72, U - { 99, 22}, // 44, k82, I - { 110, 22}, // 45, k92, O - { 121, 22}, // 46, ka2, P - { 132, 22}, // 47, kb2, [ - { 143, 22}, // 48, kc2, ] - { 154, 22}, // 49, kd3, "\\" - { 165, 22}, // 50, k86, Num 7 - { 176, 22}, // 51, k96, Num 8 - { 187, 22}, // 52, ka6, Num 9 - { 198, 22}, // 53, kb6, Num + - - { 11, 33}, // 54, k03, Caps Lock - { 22, 33}, // 55, k13, A - { 33, 33}, // 56, k23, S - { 44, 33}, // 57, k33, D - { 55, 33}, // 58, k43, F - { 66, 33}, // 59, k53, G - { 77, 33}, // 60, k63, H - { 88, 33}, // 61, k73, J - { 99, 33}, // 62, k83, K - { 110, 33}, // 63, k93, L - { 121, 33}, // 64, ka3, ; - { 132, 33}, // 65, kb3, ' - { 154, 33}, // 66, kc3, Enter - { 165, 33}, // 67, ka7, Num 4 - { 176, 33}, // 68, kb7, Num 5 - { 187, 33}, // 69, kc7, Num 6 - - { 11, 44}, // 70, k04, Shift_L - { 33, 44}, // 71, k24, Z - { 44, 44}, // 72, k34, X - { 55, 44}, // 73, k44, C - { 66, 44}, // 74, k54, V - { 77, 44}, // 75, k64, B - { 88, 44}, // 76, k74, N - { 99, 44}, // 77, k84, M - { 110, 44}, // 78, k94, , - { 121, 44}, // 79, ka4, . - { 132, 44}, // 80, kb4, / - { 143, 44}, // 81, kd4, Shift_R - { 154, 44}, // 82, k17, Up - { 165, 44}, // 83, k67, Num 1 - { 176, 44}, // 84, k77, Num 2 - { 187, 44}, // 85, k87, Num 3 - { 198, 44}, // 86, k97, Enter_R - - { 11, 55}, // 87, k05, Ctrl_L - { 22, 55}, // 88, k15, Win_L - { 33, 55}, // 89, k25, Alt_L - { 77, 55}, // 90, k65, Space - { 110, 55}, // 91, k95, Alt_R - { 121, 55}, // 92, ka5, FN - { 132, 55}, // 93, kc5, Ctrl_R - { 143, 55}, // 94, k07, Left - { 154, 55}, // 95, k27, Down - { 165, 55}, // 96, k37, Right - { 176, 55}, // 97, k47, Num 0 - { 187, 55}, // 98, k57, Num . - - { 0, 0}, // 101, LED 1 - { 0, 6}, // 102, LED 2 - { 0, 12}, // 103, LED 3 - { 0, 18}, // 104, LED 4 - { 0, 24}, // 105, LED 5 - { 0, 30}, // 106, LED 6 - { 0, 36}, // 107, LED 7 - { 0, 42}, // 108, LED 8 - { 0, 48}, // 109, LED 9 - { 0, 54}, // 110, LED 10 - { 209, 0}, // 111, LED 11 - { 209, 6}, // 112, LED 12 - { 209, 12}, // 113, LED 13 - { 209, 18}, // 114, LED 14 - { 209, 24}, // 115, LED 15 - { 209, 30}, // 116, LED 16 - { 209, 36}, // 117, LED 17 - { 209, 42}, // 118, LED 18 - { 209, 48}, // 119, LED 19 - { 209, 54} // 120, LED 20 -}, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -} }; #endif #ifdef EEPROM_ENABLE diff --git a/keyboards/gmmk/gmmk2/p96/ansi/keyboard.json b/keyboards/gmmk/gmmk2/p96/ansi/keyboard.json index 0646be8c88..74332b1f84 100644 --- a/keyboards/gmmk/gmmk2/p96/ansi/keyboard.json +++ b/keyboards/gmmk/gmmk2/p96/ansi/keyboard.json @@ -32,6 +32,129 @@ }, "processor": "WB32F3G71", "bootloader": "wb32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 11, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 22, "y": 0, "flags": 4}, + {"matrix": [2, 0], "x": 33, "y": 0, "flags": 4}, + {"matrix": [3, 0], "x": 44, "y": 0, "flags": 4}, + {"matrix": [4, 0], "x": 55, "y": 0, "flags": 4}, + {"matrix": [5, 0], "x": 66, "y": 0, "flags": 4}, + {"matrix": [6, 0], "x": 77, "y": 0, "flags": 4}, + {"matrix": [7, 0], "x": 88, "y": 0, "flags": 4}, + {"matrix": [8, 0], "x": 99, "y": 0, "flags": 4}, + {"matrix": [9, 0], "x": 110, "y": 0, "flags": 4}, + {"matrix": [10, 0], "x": 121, "y": 0, "flags": 4}, + {"matrix": [11, 0], "x": 132, "y": 0, "flags": 4}, + {"matrix": [12, 0], "x": 143, "y": 0, "flags": 4}, + {"matrix": [13, 0], "x": 154, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 165, "y": 0, "flags": 4}, + {"matrix": [1, 6], "x": 176, "y": 0, "flags": 4}, + {"matrix": [2, 6], "x": 187, "y": 0, "flags": 4}, + {"matrix": [3, 6], "x": 198, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 11, "y": 11, "flags": 4}, + {"matrix": [1, 1], "x": 22, "y": 11, "flags": 4}, + {"matrix": [2, 1], "x": 33, "y": 11, "flags": 4}, + {"matrix": [3, 1], "x": 44, "y": 11, "flags": 4}, + {"matrix": [4, 1], "x": 55, "y": 11, "flags": 4}, + {"matrix": [5, 1], "x": 66, "y": 11, "flags": 4}, + {"matrix": [6, 1], "x": 77, "y": 11, "flags": 4}, + {"matrix": [7, 1], "x": 88, "y": 11, "flags": 4}, + {"matrix": [8, 1], "x": 99, "y": 11, "flags": 4}, + {"matrix": [9, 1], "x": 110, "y": 11, "flags": 4}, + {"matrix": [10, 1], "x": 121, "y": 11, "flags": 4}, + {"matrix": [11, 1], "x": 132, "y": 11, "flags": 4}, + {"matrix": [12, 1], "x": 143, "y": 11, "flags": 4}, + {"matrix": [13, 1], "x": 154, "y": 11, "flags": 4}, + {"matrix": [4, 6], "x": 165, "y": 11, "flags": 1}, + {"matrix": [5, 6], "x": 176, "y": 11, "flags": 4}, + {"matrix": [6, 6], "x": 187, "y": 11, "flags": 4}, + {"matrix": [7, 6], "x": 198, "y": 11, "flags": 4}, + {"matrix": [0, 2], "x": 11, "y": 22, "flags": 4}, + {"matrix": [1, 2], "x": 22, "y": 22, "flags": 4}, + {"matrix": [2, 2], "x": 33, "y": 22, "flags": 4}, + {"matrix": [3, 2], "x": 44, "y": 22, "flags": 4}, + {"matrix": [4, 2], "x": 55, "y": 22, "flags": 4}, + {"matrix": [5, 2], "x": 66, "y": 22, "flags": 4}, + {"matrix": [6, 2], "x": 77, "y": 22, "flags": 4}, + {"matrix": [7, 2], "x": 88, "y": 22, "flags": 4}, + {"matrix": [8, 2], "x": 99, "y": 22, "flags": 4}, + {"matrix": [9, 2], "x": 110, "y": 22, "flags": 4}, + {"matrix": [10, 2], "x": 121, "y": 22, "flags": 4}, + {"matrix": [11, 2], "x": 132, "y": 22, "flags": 4}, + {"matrix": [12, 2], "x": 143, "y": 22, "flags": 4}, + {"matrix": [13, 2], "x": 154, "y": 22, "flags": 4}, + {"matrix": [8, 6], "x": 165, "y": 22, "flags": 4}, + {"matrix": [9, 6], "x": 176, "y": 22, "flags": 4}, + {"matrix": [10, 6], "x": 187, "y": 22, "flags": 4}, + {"matrix": [11, 6], "x": 198, "y": 22, "flags": 4}, + {"matrix": [0, 3], "x": 11, "y": 33, "flags": 1}, + {"matrix": [1, 3], "x": 22, "y": 33, "flags": 4}, + {"matrix": [2, 3], "x": 33, "y": 33, "flags": 4}, + {"matrix": [3, 3], "x": 44, "y": 33, "flags": 4}, + {"matrix": [4, 3], "x": 55, "y": 33, "flags": 4}, + {"matrix": [5, 3], "x": 66, "y": 33, "flags": 4}, + {"matrix": [6, 3], "x": 77, "y": 33, "flags": 4}, + {"matrix": [7, 3], "x": 88, "y": 33, "flags": 4}, + {"matrix": [8, 3], "x": 99, "y": 33, "flags": 4}, + {"matrix": [9, 3], "x": 110, "y": 33, "flags": 4}, + {"matrix": [10, 3], "x": 121, "y": 33, "flags": 4}, + {"matrix": [11, 3], "x": 132, "y": 33, "flags": 4}, + {"matrix": [13, 3], "x": 154, "y": 33, "flags": 4}, + {"matrix": [10, 7], "x": 165, "y": 33, "flags": 4}, + {"matrix": [11, 7], "x": 176, "y": 33, "flags": 4}, + {"matrix": [12, 7], "x": 187, "y": 33, "flags": 4}, + {"matrix": [0, 4], "x": 11, "y": 44, "flags": 4}, + {"matrix": [2, 4], "x": 33, "y": 44, "flags": 4}, + {"matrix": [3, 4], "x": 44, "y": 44, "flags": 4}, + {"matrix": [4, 4], "x": 55, "y": 44, "flags": 4}, + {"matrix": [5, 4], "x": 66, "y": 44, "flags": 4}, + {"matrix": [6, 4], "x": 77, "y": 44, "flags": 4}, + {"matrix": [7, 4], "x": 88, "y": 44, "flags": 4}, + {"matrix": [8, 4], "x": 99, "y": 44, "flags": 4}, + {"matrix": [9, 4], "x": 110, "y": 44, "flags": 4}, + {"matrix": [10, 4], "x": 121, "y": 44, "flags": 4}, + {"matrix": [11, 4], "x": 132, "y": 44, "flags": 4}, + {"matrix": [13, 4], "x": 143, "y": 44, "flags": 4}, + {"matrix": [1, 7], "x": 154, "y": 44, "flags": 4}, + {"matrix": [6, 7], "x": 165, "y": 44, "flags": 4}, + {"matrix": [7, 7], "x": 176, "y": 44, "flags": 4}, + {"matrix": [8, 7], "x": 187, "y": 44, "flags": 4}, + {"matrix": [9, 7], "x": 198, "y": 44, "flags": 4}, + {"matrix": [0, 5], "x": 11, "y": 55, "flags": 4}, + {"matrix": [1, 5], "x": 22, "y": 55, "flags": 4}, + {"matrix": [2, 5], "x": 33, "y": 55, "flags": 4}, + {"matrix": [6, 5], "x": 77, "y": 55, "flags": 4}, + {"matrix": [9, 5], "x": 110, "y": 55, "flags": 4}, + {"matrix": [10, 5], "x": 121, "y": 55, "flags": 4}, + {"matrix": [12, 5], "x": 132, "y": 55, "flags": 4}, + {"matrix": [0, 7], "x": 143, "y": 55, "flags": 4}, + {"matrix": [2, 7], "x": 154, "y": 55, "flags": 4}, + {"matrix": [3, 7], "x": 165, "y": 55, "flags": 4}, + {"matrix": [4, 7], "x": 176, "y": 55, "flags": 4}, + {"matrix": [5, 7], "x": 187, "y": 55, "flags": 4}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 0, "y": 6, "flags": 2}, + {"x": 0, "y": 12, "flags": 2}, + {"x": 0, "y": 18, "flags": 2}, + {"x": 0, "y": 24, "flags": 2}, + {"x": 0, "y": 30, "flags": 2}, + {"x": 0, "y": 36, "flags": 2}, + {"x": 0, "y": 42, "flags": 2}, + {"x": 0, "y": 48, "flags": 2}, + {"x": 0, "y": 54, "flags": 2}, + {"x": 209, "y": 0, "flags": 2}, + {"x": 209, "y": 6, "flags": 2}, + {"x": 209, "y": 12, "flags": 2}, + {"x": 209, "y": 18, "flags": 2}, + {"x": 209, "y": 24, "flags": 2}, + {"x": 209, "y": 30, "flags": 2}, + {"x": 209, "y": 36, "flags": 2}, + {"x": 209, "y": 42, "flags": 2}, + {"x": 209, "y": 48, "flags": 2}, + {"x": 209, "y": 54, "flags": 2} + ] + }, "layouts": { "LAYOUT": { "layout": [ diff --git a/keyboards/gmmk/gmmk2/p96/iso/iso.c b/keyboards/gmmk/gmmk2/p96/iso/iso.c index 9a5c357307..7da63dfae6 100644 --- a/keyboards/gmmk/gmmk2/p96/iso/iso.c +++ b/keyboards/gmmk/gmmk2/p96/iso/iso.c @@ -152,155 +152,6 @@ const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { {1, SW9_CS16, SW9_CS17, SW9_CS18}, // 119, LED 19 {1, SW10_CS16, SW10_CS17, SW10_CS18} // 120, LED 20 }; - -#define __ NO_LED - -led_config_t g_led_config = {{ - { 0, 18, 36, 54, 70, 88, 14, 95}, - { 1, 19, 37, 55, 71, 89, 15, 83}, - { 2, 20, 38, 56, 72, 90, 16, 96}, - { 3, 21, 39, 57, 73, __, 17, 97}, - { 4, 22, 40, 58, 74, __, 32, 98}, - { 5, 23, 41, 59, 75, __, 33, 99}, - { 6, 24, 42, 60, 76, 91, 34, 84}, - { 7, 25, 43, 61, 77, __, 35, 85}, - { 8, 26, 44, 62, 78, __, 50, 86}, - { 9, 27, 45, 63, 79, 92, 51, 87}, - {10, 28, 46, 64, 80, 93, 52, 67}, - {11, 29, 47, 65, 81, __, 53, 68}, - {12, 30, 48, 66, __, 94, __, 69}, - {13, 31, __, 49, 82, __, __, __} -}, { - { 11, 0}, // 0, k00, Esc - { 22, 0}, // 1, k10, F1 - { 33, 0}, // 2, k20, F2 - { 44, 0}, // 3, k30, F3 - { 55, 0}, // 4, k40, F4 - { 66, 0}, // 5, k50, F5 - { 77, 0}, // 6, k60, F6 - { 88, 0}, // 7, k70, F7 - { 99, 0}, // 8, k80, F8 - { 110, 0}, // 9, k90, F9 - { 121, 0}, // 10, ka0, F10 - { 132, 0}, // 11, kb0, F11 - { 143, 0}, // 12, kc0, F12 - { 154, 0}, // 13, kd0, Printscreen - { 165, 0}, // 14, k06, Delete - { 176, 0}, // 15, k16, Insert - { 187, 0}, // 16, k26, Page Up - { 198, 0}, // 17, k36, Page Down - { 11, 11}, // 18, k01, ` - { 22, 11}, // 19, k11, 1 - { 33, 11}, // 20, k21, 2 - { 44, 11}, // 21, k31, 3 - { 55, 11}, // 22, k41, 4 - { 66, 11}, // 23, k51, 5 - { 77, 11}, // 24, k61, 6 - { 88, 11}, // 25, k71, 7 - { 99, 11}, // 26, k81, 8 - { 110, 11}, // 27, k91, 9 - { 121, 11}, // 28, ka1, 0 - { 132, 11}, // 29, kb1, - - { 143, 11}, // 30, kc1, = - { 154, 11}, // 31, kd1, Backspace - { 165, 11}, // 32, k46, Num Lock - { 176, 11}, // 33, k56, Num / - { 187, 11}, // 34, k66, Num * - { 198, 11}, // 35, k76, Num - - { 11, 22}, // 36, k02, Tab - { 22, 22}, // 37, k12, Q - { 33, 22}, // 38, k22, W - { 44, 22}, // 39, k32, E - { 55, 22}, // 40, k42, R - { 66, 22}, // 41, k52, T - { 77, 22}, // 42, k62, Y - { 88, 22}, // 43, k72, U - { 99, 22}, // 44, k82, I - { 110, 22}, // 45, k92, O - { 121, 22}, // 46, ka2, P - { 132, 22}, // 47, kb2, [ - { 143, 22}, // 48, kc2, ] - { 154, 22}, // 49, kd3, Enter - { 165, 22}, // 50, k86, Num 7 - { 176, 22}, // 51, k96, Num 8 - { 187, 22}, // 52, ka6, Num 9 - { 198, 22}, // 53, kb6, Num + - { 11, 33}, // 54, k03, Caps Lock - { 22, 33}, // 55, k13, A - { 33, 33}, // 56, k23, S - { 44, 33}, // 57, k33, D - { 55, 33}, // 58, k43, F - { 66, 33}, // 59, k53, G - { 77, 33}, // 60, k63, H - { 88, 33}, // 61, k73, J - { 99, 33}, // 62, k83, K - { 110, 33}, // 63, k93, L - { 121, 33}, // 64, ka3, ; - { 132, 33}, // 65, kb3, ' - { 143, 33}, // 66, kc3, # - { 165, 33}, // 67, ka7, Num 4 - { 176, 33}, // 68, kb7, Num 5 - { 187, 33}, // 69, kc7, Num 6 - { 11, 44}, // 70, k04, Shift_L - { 22, 44}, // 71, k14, "\\" - { 33, 44}, // 72, k24, Z - { 44, 44}, // 73, k34, X - { 55, 44}, // 74, k44, C - { 66, 44}, // 75, k54, V - { 77, 44}, // 76, k64, B - { 88, 44}, // 77, k74, N - { 99, 44}, // 78, k84, M - { 110, 44}, // 79, k94, , - { 121, 44}, // 80, ka4, . - { 132, 44}, // 81, kb4, / - { 143, 44}, // 82, kd4, Shift_R - { 154, 44}, // 83, k17, Up - { 165, 44}, // 84, k67, Num 1 - { 176, 44}, // 85, k77, Num 2 - { 187, 44}, // 86, k87, Num 3 - { 198, 44}, // 87, k97, Enter_R - { 11, 55}, // 88, k05, Ctrl_L - { 22, 55}, // 89, k15, Win_L - { 33, 55}, // 90, k25, Alt_L - { 77, 55}, // 91, k65, Space - { 110, 55}, // 92, k95, Alt_R - { 121, 55}, // 93, ka5, FN - { 132, 55}, // 94, kc5, Ctrl_R - { 143, 55}, // 95, k07, Left - { 154, 55}, // 96, k27, Down - { 165, 55}, // 97, k37, Right - { 176, 55}, // 98, k47, Num 0 - { 187, 55}, // 99, k57, Num . - { 0, 0}, // 101, LED 1 - { 0, 6}, // 102, LED 2 - { 0, 12}, // 103, LED 3 - { 0, 18}, // 104, LED 4 - { 0, 24}, // 105, LED 5 - { 0, 30}, // 106, LED 6 - { 0, 36}, // 107, LED 7 - { 0, 42}, // 108, LED 8 - { 0, 48}, // 109, LED 9 - { 0, 54}, // 110, LED 10 - { 209, 0}, // 111, LED 11 - { 209, 6}, // 112, LED 12 - { 209, 12}, // 113, LED 13 - { 209, 18}, // 114, LED 14 - { 209, 24}, // 115, LED 15 - { 209, 30}, // 116, LED 16 - { 209, 36}, // 117, LED 17 - { 209, 42}, // 118, LED 18 - { 209, 48}, // 119, LED 19 - { 209, 54} // 120, LED 20 -}, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -} }; #endif #ifdef EEPROM_ENABLE diff --git a/keyboards/gmmk/gmmk2/p96/iso/keyboard.json b/keyboards/gmmk/gmmk2/p96/iso/keyboard.json index 679881a94b..3463293a70 100644 --- a/keyboards/gmmk/gmmk2/p96/iso/keyboard.json +++ b/keyboards/gmmk/gmmk2/p96/iso/keyboard.json @@ -32,6 +32,130 @@ }, "processor": "WB32F3G71", "bootloader": "wb32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 11, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 22, "y": 0, "flags": 4}, + {"matrix": [2, 0], "x": 33, "y": 0, "flags": 4}, + {"matrix": [3, 0], "x": 44, "y": 0, "flags": 4}, + {"matrix": [4, 0], "x": 55, "y": 0, "flags": 4}, + {"matrix": [5, 0], "x": 66, "y": 0, "flags": 4}, + {"matrix": [6, 0], "x": 77, "y": 0, "flags": 4}, + {"matrix": [7, 0], "x": 88, "y": 0, "flags": 4}, + {"matrix": [8, 0], "x": 99, "y": 0, "flags": 4}, + {"matrix": [9, 0], "x": 110, "y": 0, "flags": 4}, + {"matrix": [10, 0], "x": 121, "y": 0, "flags": 4}, + {"matrix": [11, 0], "x": 132, "y": 0, "flags": 4}, + {"matrix": [12, 0], "x": 143, "y": 0, "flags": 4}, + {"matrix": [13, 0], "x": 154, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 165, "y": 0, "flags": 4}, + {"matrix": [1, 6], "x": 176, "y": 0, "flags": 4}, + {"matrix": [2, 6], "x": 187, "y": 0, "flags": 4}, + {"matrix": [3, 6], "x": 198, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 11, "y": 11, "flags": 4}, + {"matrix": [1, 1], "x": 22, "y": 11, "flags": 4}, + {"matrix": [2, 1], "x": 33, "y": 11, "flags": 4}, + {"matrix": [3, 1], "x": 44, "y": 11, "flags": 4}, + {"matrix": [4, 1], "x": 55, "y": 11, "flags": 4}, + {"matrix": [5, 1], "x": 66, "y": 11, "flags": 4}, + {"matrix": [6, 1], "x": 77, "y": 11, "flags": 4}, + {"matrix": [7, 1], "x": 88, "y": 11, "flags": 4}, + {"matrix": [8, 1], "x": 99, "y": 11, "flags": 4}, + {"matrix": [9, 1], "x": 110, "y": 11, "flags": 4}, + {"matrix": [10, 1], "x": 121, "y": 11, "flags": 4}, + {"matrix": [11, 1], "x": 132, "y": 11, "flags": 4}, + {"matrix": [12, 1], "x": 143, "y": 11, "flags": 4}, + {"matrix": [13, 1], "x": 154, "y": 11, "flags": 4}, + {"matrix": [4, 6], "x": 165, "y": 11, "flags": 1}, + {"matrix": [5, 6], "x": 176, "y": 11, "flags": 4}, + {"matrix": [6, 6], "x": 187, "y": 11, "flags": 4}, + {"matrix": [7, 6], "x": 198, "y": 11, "flags": 4}, + {"matrix": [0, 2], "x": 11, "y": 22, "flags": 4}, + {"matrix": [1, 2], "x": 22, "y": 22, "flags": 4}, + {"matrix": [2, 2], "x": 33, "y": 22, "flags": 4}, + {"matrix": [3, 2], "x": 44, "y": 22, "flags": 4}, + {"matrix": [4, 2], "x": 55, "y": 22, "flags": 4}, + {"matrix": [5, 2], "x": 66, "y": 22, "flags": 4}, + {"matrix": [6, 2], "x": 77, "y": 22, "flags": 4}, + {"matrix": [7, 2], "x": 88, "y": 22, "flags": 4}, + {"matrix": [8, 2], "x": 99, "y": 22, "flags": 4}, + {"matrix": [9, 2], "x": 110, "y": 22, "flags": 4}, + {"matrix": [10, 2], "x": 121, "y": 22, "flags": 4}, + {"matrix": [11, 2], "x": 132, "y": 22, "flags": 4}, + {"matrix": [12, 2], "x": 143, "y": 22, "flags": 4}, + {"matrix": [13, 3], "x": 154, "y": 22, "flags": 4}, + {"matrix": [8, 6], "x": 165, "y": 22, "flags": 4}, + {"matrix": [9, 6], "x": 176, "y": 22, "flags": 4}, + {"matrix": [10, 6], "x": 187, "y": 22, "flags": 4}, + {"matrix": [11, 6], "x": 198, "y": 22, "flags": 4}, + {"matrix": [0, 3], "x": 11, "y": 33, "flags": 1}, + {"matrix": [1, 3], "x": 22, "y": 33, "flags": 4}, + {"matrix": [2, 3], "x": 33, "y": 33, "flags": 4}, + {"matrix": [3, 3], "x": 44, "y": 33, "flags": 4}, + {"matrix": [4, 3], "x": 55, "y": 33, "flags": 4}, + {"matrix": [5, 3], "x": 66, "y": 33, "flags": 4}, + {"matrix": [6, 3], "x": 77, "y": 33, "flags": 4}, + {"matrix": [7, 3], "x": 88, "y": 33, "flags": 4}, + {"matrix": [8, 3], "x": 99, "y": 33, "flags": 4}, + {"matrix": [9, 3], "x": 110, "y": 33, "flags": 4}, + {"matrix": [10, 3], "x": 121, "y": 33, "flags": 4}, + {"matrix": [11, 3], "x": 132, "y": 33, "flags": 4}, + {"matrix": [12, 3], "x": 143, "y": 33, "flags": 4}, + {"matrix": [10, 7], "x": 165, "y": 33, "flags": 4}, + {"matrix": [11, 7], "x": 176, "y": 33, "flags": 4}, + {"matrix": [12, 7], "x": 187, "y": 33, "flags": 4}, + {"matrix": [0, 4], "x": 11, "y": 44, "flags": 4}, + {"matrix": [1, 4], "x": 22, "y": 44, "flags": 4}, + {"matrix": [2, 4], "x": 33, "y": 44, "flags": 4}, + {"matrix": [3, 4], "x": 44, "y": 44, "flags": 4}, + {"matrix": [4, 4], "x": 55, "y": 44, "flags": 4}, + {"matrix": [5, 4], "x": 66, "y": 44, "flags": 4}, + {"matrix": [6, 4], "x": 77, "y": 44, "flags": 4}, + {"matrix": [7, 4], "x": 88, "y": 44, "flags": 4}, + {"matrix": [8, 4], "x": 99, "y": 44, "flags": 4}, + {"matrix": [9, 4], "x": 110, "y": 44, "flags": 4}, + {"matrix": [10, 4], "x": 121, "y": 44, "flags": 4}, + {"matrix": [11, 4], "x": 132, "y": 44, "flags": 4}, + {"matrix": [13, 4], "x": 143, "y": 44, "flags": 4}, + {"matrix": [1, 7], "x": 154, "y": 44, "flags": 4}, + {"matrix": [6, 7], "x": 165, "y": 44, "flags": 4}, + {"matrix": [7, 7], "x": 176, "y": 44, "flags": 4}, + {"matrix": [8, 7], "x": 187, "y": 44, "flags": 4}, + {"matrix": [9, 7], "x": 198, "y": 44, "flags": 4}, + {"matrix": [0, 5], "x": 11, "y": 55, "flags": 4}, + {"matrix": [1, 5], "x": 22, "y": 55, "flags": 4}, + {"matrix": [2, 5], "x": 33, "y": 55, "flags": 4}, + {"matrix": [6, 5], "x": 77, "y": 55, "flags": 4}, + {"matrix": [9, 5], "x": 110, "y": 55, "flags": 4}, + {"matrix": [10, 5], "x": 121, "y": 55, "flags": 4}, + {"matrix": [12, 5], "x": 132, "y": 55, "flags": 4}, + {"matrix": [0, 7], "x": 143, "y": 55, "flags": 4}, + {"matrix": [2, 7], "x": 154, "y": 55, "flags": 4}, + {"matrix": [3, 7], "x": 165, "y": 55, "flags": 4}, + {"matrix": [4, 7], "x": 176, "y": 55, "flags": 4}, + {"matrix": [5, 7], "x": 187, "y": 55, "flags": 4}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 0, "y": 6, "flags": 2}, + {"x": 0, "y": 12, "flags": 2}, + {"x": 0, "y": 18, "flags": 2}, + {"x": 0, "y": 24, "flags": 2}, + {"x": 0, "y": 30, "flags": 2}, + {"x": 0, "y": 36, "flags": 2}, + {"x": 0, "y": 42, "flags": 2}, + {"x": 0, "y": 48, "flags": 2}, + {"x": 0, "y": 54, "flags": 2}, + {"x": 209, "y": 0, "flags": 2}, + {"x": 209, "y": 6, "flags": 2}, + {"x": 209, "y": 12, "flags": 2}, + {"x": 209, "y": 18, "flags": 2}, + {"x": 209, "y": 24, "flags": 2}, + {"x": 209, "y": 30, "flags": 2}, + {"x": 209, "y": 36, "flags": 2}, + {"x": 209, "y": 42, "flags": 2}, + {"x": 209, "y": 48, "flags": 2}, + {"x": 209, "y": 54, "flags": 2} + ] + }, "layouts": { "LAYOUT": { "layout": [ diff --git a/keyboards/gmmk/numpad/keyboard.json b/keyboards/gmmk/numpad/keyboard.json index f5d64bf6cb..23dd46ca1a 100644 --- a/keyboards/gmmk/numpad/keyboard.json +++ b/keyboards/gmmk/numpad/keyboard.json @@ -69,7 +69,40 @@ "solid_splash": true, "solid_multisplash": true }, - "driver": "aw20216s" + "driver": "aw20216s", + "layout": [ + {"matrix": [0, 0], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 134, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 179, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 45, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 90, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 134, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 179, "y": 24, "flags": 4}, + {"matrix": [2, 0], "x": 45, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 90, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 134, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 45, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 90, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 134, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 179, "y": 56, "flags": 4}, + {"matrix": [4, 0], "x": 67, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 134, "y": 64, "flags": 4}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 0, "y": 11, "flags": 2}, + {"x": 0, "y": 21, "flags": 2}, + {"x": 0, "y": 32, "flags": 2}, + {"x": 0, "y": 43, "flags": 2}, + {"x": 0, "y": 53, "flags": 2}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 224, "y": 11, "flags": 2}, + {"x": 224, "y": 21, "flags": 2}, + {"x": 224, "y": 32, "flags": 2}, + {"x": 224, "y": 43, "flags": 2}, + {"x": 224, "y": 53, "flags": 2}, + {"x": 224, "y": 64, "flags": 2} + ] }, "processor": "WB32F3G71", "bootloader": "wb32-dfu", diff --git a/keyboards/gmmk/numpad/numpad.c b/keyboards/gmmk/numpad/numpad.c index 87446d8f49..fa8a28bf8b 100644 --- a/keyboards/gmmk/numpad/numpad.c +++ b/keyboards/gmmk/numpad/numpad.c @@ -59,54 +59,6 @@ const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { {0, SW7_CS10, SW7_CS11, SW7_CS12 }, // 30 LED33 }; -led_config_t g_led_config = {{ - { 0, 1, 2, 3 }, - { 4, 5, 6, 7 }, - { 8, 9, 10, NO_LED}, - { 11, 12, 13, 14 }, - { 15, NO_LED, NO_LED, 16 } -}, { - {45, 0 }, // 0 NUM - {90, 0 }, // 1 / - {134, 0 }, // 2 * - {179, 0 }, // 3 - - {45, 16 }, // 4 7 - {90, 16 }, // 5 8 - {134, 16 }, // 6 9 - {179, 24 }, // 7 + - {45, 32 }, // 8 4 - {90, 32 }, // 9 5 - {134, 32 }, // 10 6 - {45, 48 }, // 11 1 - {90, 48 }, // 12 2 - {134, 48 }, // 13 3 - {179, 56 }, // 14 ENTER - {67, 64 }, // 15 0 - {134, 64 }, // 16 . - {0, 0 }, // 17 LED18 - {0, 11 }, // 18 LED19 - {0, 21 }, // 19 LED20 - {0, 32 }, // 20 LED21 - {0, 43 }, // 21 LED22 - {0, 53 }, // 22 LED23 - {0, 64 }, // 23 LED24 - {224, 0 }, // 24 LED27 - {224, 11 }, // 25 LED28 - {224, 21 }, // 26 LED29 - {224, 32 }, // 27 LED30 - {224, 43 }, // 28 LED31 - {224, 53 }, // 29 LED32 - {224, 64 } // 30 LED33 -}, { - 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, - 4, 4, 4, 4, - 4, 4, - 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2 -} }; - # ifdef AW20216S_PW_EN_PIN void keyboard_pre_init_kb(void) { diff --git a/keyboards/gmmk/pro/rev1/ansi/ansi.c b/keyboards/gmmk/pro/rev1/ansi/ansi.c index 77e0a8c1a1..05365ee9f9 100644 --- a/keyboards/gmmk/pro/rev1/ansi/ansi.c +++ b/keyboards/gmmk/pro/rev1/ansi/ansi.c @@ -18,124 +18,6 @@ #ifdef RGB_MATRIX_ENABLE // clang-format off -led_config_t g_led_config = {{ - { 4, NO_LED, NO_LED, 95, 65, 79, 5, 28 }, - { 8, 2, 9, 0, 10, 75, 1, 7 }, - { 14, 3, 15, NO_LED, 16, 86, 6, 13 }, - { 20, 18, 21, 23, 22, 94, 12, 19 }, - { 25, 30, 26, 31, 27, 32, 29, 24 }, - { 41, 36, 42, 37, 43, 38, 35, 40 }, - { 46, 89, 47, 34, 48, 72, 78, 45 }, - { 52, 39, 53, 97, 54, 82, 44, 51 }, - { 58, 63, 59, 64, NO_LED, 60, 62, 57 }, - { 11, 90, 55, 17, 33, 49, NO_LED, 69 }, - { NO_LED, 85, 93, 61, 96, 66, 50, 56 } -}, { - {0, 0}, // 0, ESC, k13 - {0, 15}, // 1, ~, k16 - {4, 26}, // 2, Tab, k11 - {5, 38}, // 3, Caps, k21 - {9, 49}, // 4, Sh_L, k00 - {2, 61}, // 5, Ct_L, k06 - {18, 0}, // 6, F1, k26 - {14, 15}, // 7, 1, k17 - {22, 26}, // 8, Q, k10 - {25, 38}, // 9, A, k12 - {33, 49}, // 10, Z, k14 - {20, 61}, // 11, Win_L, k90 - {33, 0}, // 12, F2, k36 - {29, 15}, // 13, 2, k27 - {36, 26}, // 14, W, k20 - {40, 38}, // 15, S, k22 - {47, 49}, // 16, X, k24 - {38, 61}, // 17, Alt_L, k93 - {47, 0}, // 18, F3, k31 - {43, 15}, // 19, 3, k37 - {51, 26}, // 20, E, k30 - {54, 38}, // 21, D, k32 - {61, 49}, // 22, C, k34 - {61, 0}, // 23, F4, k33 - {58, 15}, // 24, 4, k47 - {65, 26}, // 25, R, k40 - {69, 38}, // 26, F, k42 - {76, 49}, // 27, V, k44 - {79, 0}, // 28, F5, k07 - {72, 15}, // 29, 5, k46 - {79, 26}, // 30, T, k41 - {83, 38}, // 31, G, k43 - {90, 49}, // 32, B, k45 - {92, 61}, // 33, SPACE, k94 - {94, 0}, // 34, F6, k63 - {87, 15}, // 35, 6, k56 - {94, 26}, // 36, Y, k51 - {98, 38}, // 37, H, k53 - {105, 49}, // 38, N, k55 - {108, 0}, // 39, F7, k71 - {101, 15}, // 40, 7, k57 - {108, 26}, // 41, U, k50 - {112, 38}, // 42, J, k52 - {119, 49}, // 43, M, k54 - {123, 0}, // 44, F8, k76 - {116, 15}, // 45, 8, k67 - {123, 26}, // 46, I, k60 - {126, 38}, // 47, K, k62 - {134, 49}, // 48, ,, k64 - {145, 61}, // 49, Alt_R, k95 - {141, 0}, // 50, F9, ka6 - {130, 15}, // 51, 9, k77 - {137, 26}, // 52, O, k70 - {141, 38}, // 53, L, k72 - {148, 49}, // 54, ., k74 - {159, 61}, // 55, FN, k92 - {155, 0}, // 56, F10, ka7 - {145, 15}, // 57, 0, k87 - {152, 26}, // 58, P, k80 - {155, 38}, // 59, ;, k82 - {163, 49}, // 60, ?, k85 - {170, 0}, // 61, F11, ka3 - {159, 15}, // 62, -, k86 - {166, 26}, // 63, [, k81 - {170, 38}, // 64, ", k83 - {173, 61}, // 65, Ct_R, k04 - {184, 0}, // 66, F12, ka5 - {0, 8}, // 67, LED, l01 - {224, 8}, // 68, LED, l11 - {202, 0}, // 69, Prt, k97 - {0, 15}, // 70, LED, l02 - {224, 15}, // 71, LED, l12 - {224, 15}, // 72, Del, k65 - {0, 21}, // 73, LED, l03 - {224, 21}, // 74, LED, l13 - {224, 26}, // 75, PgUp, k15 - {0, 28}, // 76, LED, l04 - {224, 28}, // 77, LED, l14 - {173, 15}, // 78, =, k66 - {220, 64}, // 79, Right, k05 - {0, 35}, // 80, LED, l05 - {224, 35}, // 81, LED, l15 - {224, 49}, // 82, End, k75 - {0, 42}, // 83, LED, l06 - {224, 42}, // 84, LED, l16 - {195, 15}, // 85, BSpc, ka1 - {224, 38}, // 86, PgDn, k25 - {0, 48}, // 87, LED, l07 - {224, 48}, // 88, LED, l17 - {181, 26}, // 89, ], k61 - {182, 49}, // 90, Sh_R, k91 - {0, 55}, // 91, LED, l08 - {224, 55}, // 92, LED, l18 - {199, 26}, // 93, \, ka2 - {206, 52}, // 94, Up, k35 - {191, 64}, // 95, Left, k03 - {193, 38}, // 96, Enter, ka4 - {206, 64} // 97, Down, k73 -}, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 2, 2, 4, 2, 2, - 4, 2, 2, 4, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4 -}}; - const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { {0, SW1_CS1, SW1_CS2, SW1_CS3}, // 0, ESC, k13 {0, SW1_CS4, SW1_CS5, SW1_CS6}, // 1, ~, k16 diff --git a/keyboards/gmmk/pro/rev1/ansi/keyboard.json b/keyboards/gmmk/pro/rev1/ansi/keyboard.json index fbb9107d16..e7bf3d6a59 100644 --- a/keyboards/gmmk/pro/rev1/ansi/keyboard.json +++ b/keyboards/gmmk/pro/rev1/ansi/keyboard.json @@ -34,6 +34,108 @@ }, "processor": "STM32F303", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [1, 3], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 6], "x": 0, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 4, "y": 26, "flags": 4}, + {"matrix": [2, 1], "x": 5, "y": 38, "flags": 4}, + {"matrix": [0, 0], "x": 9, "y": 49, "flags": 4}, + {"matrix": [0, 6], "x": 2, "y": 61, "flags": 4}, + {"matrix": [2, 6], "x": 18, "y": 0, "flags": 4}, + {"matrix": [1, 7], "x": 14, "y": 15, "flags": 4}, + {"matrix": [1, 0], "x": 22, "y": 26, "flags": 4}, + {"matrix": [1, 2], "x": 25, "y": 38, "flags": 4}, + {"matrix": [1, 4], "x": 33, "y": 49, "flags": 4}, + {"matrix": [9, 0], "x": 20, "y": 61, "flags": 4}, + {"matrix": [3, 6], "x": 33, "y": 0, "flags": 4}, + {"matrix": [2, 7], "x": 29, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 36, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 38, "flags": 4}, + {"matrix": [2, 4], "x": 47, "y": 49, "flags": 4}, + {"matrix": [9, 3], "x": 38, "y": 61, "flags": 4}, + {"matrix": [3, 1], "x": 47, "y": 0, "flags": 4}, + {"matrix": [3, 7], "x": 43, "y": 15, "flags": 4}, + {"matrix": [3, 0], "x": 51, "y": 26, "flags": 4}, + {"matrix": [3, 2], "x": 54, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 61, "y": 49, "flags": 4}, + {"matrix": [3, 3], "x": 61, "y": 0, "flags": 4}, + {"matrix": [4, 7], "x": 58, "y": 15, "flags": 4}, + {"matrix": [4, 0], "x": 65, "y": 26, "flags": 4}, + {"matrix": [4, 2], "x": 69, "y": 38, "flags": 4}, + {"matrix": [4, 4], "x": 76, "y": 49, "flags": 4}, + {"matrix": [0, 7], "x": 79, "y": 0, "flags": 4}, + {"matrix": [4, 6], "x": 72, "y": 15, "flags": 4}, + {"matrix": [4, 1], "x": 79, "y": 26, "flags": 4}, + {"matrix": [4, 3], "x": 83, "y": 38, "flags": 4}, + {"matrix": [4, 5], "x": 90, "y": 49, "flags": 4}, + {"matrix": [9, 4], "x": 92, "y": 61, "flags": 4}, + {"matrix": [6, 3], "x": 94, "y": 0, "flags": 4}, + {"matrix": [5, 6], "x": 87, "y": 15, "flags": 4}, + {"matrix": [5, 1], "x": 94, "y": 26, "flags": 4}, + {"matrix": [5, 3], "x": 98, "y": 38, "flags": 4}, + {"matrix": [5, 5], "x": 105, "y": 49, "flags": 4}, + {"matrix": [7, 1], "x": 108, "y": 0, "flags": 4}, + {"matrix": [5, 7], "x": 101, "y": 15, "flags": 4}, + {"matrix": [5, 0], "x": 108, "y": 26, "flags": 4}, + {"matrix": [5, 2], "x": 112, "y": 38, "flags": 4}, + {"matrix": [5, 4], "x": 119, "y": 49, "flags": 4}, + {"matrix": [7, 6], "x": 123, "y": 0, "flags": 4}, + {"matrix": [6, 7], "x": 116, "y": 15, "flags": 4}, + {"matrix": [6, 0], "x": 123, "y": 26, "flags": 4}, + {"matrix": [6, 2], "x": 126, "y": 38, "flags": 4}, + {"matrix": [6, 4], "x": 134, "y": 49, "flags": 4}, + {"matrix": [9, 5], "x": 145, "y": 61, "flags": 4}, + {"matrix": [10, 6], "x": 141, "y": 0, "flags": 4}, + {"matrix": [7, 7], "x": 130, "y": 15, "flags": 4}, + {"matrix": [7, 0], "x": 137, "y": 26, "flags": 4}, + {"matrix": [7, 2], "x": 141, "y": 38, "flags": 4}, + {"matrix": [7, 4], "x": 148, "y": 49, "flags": 4}, + {"matrix": [9, 2], "x": 159, "y": 61, "flags": 4}, + {"matrix": [10, 7], "x": 155, "y": 0, "flags": 4}, + {"matrix": [8, 7], "x": 145, "y": 15, "flags": 4}, + {"matrix": [8, 0], "x": 152, "y": 26, "flags": 4}, + {"matrix": [8, 2], "x": 155, "y": 38, "flags": 4}, + {"matrix": [8, 5], "x": 163, "y": 49, "flags": 4}, + {"matrix": [10, 3], "x": 170, "y": 0, "flags": 4}, + {"matrix": [8, 6], "x": 159, "y": 15, "flags": 4}, + {"matrix": [8, 1], "x": 166, "y": 26, "flags": 4}, + {"matrix": [8, 3], "x": 170, "y": 38, "flags": 4}, + {"matrix": [0, 4], "x": 173, "y": 61, "flags": 4}, + {"matrix": [10, 5], "x": 184, "y": 0, "flags": 4}, + {"x": 0, "y": 8, "flags": 2}, + {"x": 224, "y": 8, "flags": 2}, + {"matrix": [9, 7], "x": 202, "y": 0, "flags": 4}, + {"x": 0, "y": 15, "flags": 2}, + {"x": 224, "y": 15, "flags": 2}, + {"matrix": [6, 5], "x": 224, "y": 15, "flags": 4}, + {"x": 0, "y": 21, "flags": 2}, + {"x": 224, "y": 21, "flags": 2}, + {"matrix": [1, 5], "x": 224, "y": 26, "flags": 4}, + {"x": 0, "y": 28, "flags": 2}, + {"x": 224, "y": 28, "flags": 2}, + {"matrix": [6, 6], "x": 173, "y": 15, "flags": 4}, + {"matrix": [0, 5], "x": 220, "y": 64, "flags": 4}, + {"x": 0, "y": 35, "flags": 2}, + {"x": 224, "y": 35, "flags": 2}, + {"matrix": [7, 5], "x": 224, "y": 49, "flags": 4}, + {"x": 0, "y": 42, "flags": 2}, + {"x": 224, "y": 42, "flags": 2}, + {"matrix": [10, 1], "x": 195, "y": 15, "flags": 4}, + {"matrix": [2, 5], "x": 224, "y": 38, "flags": 4}, + {"x": 0, "y": 48, "flags": 2}, + {"x": 224, "y": 48, "flags": 2}, + {"matrix": [6, 1], "x": 181, "y": 26, "flags": 4}, + {"matrix": [9, 1], "x": 182, "y": 49, "flags": 4}, + {"x": 0, "y": 55, "flags": 2}, + {"x": 224, "y": 55, "flags": 2}, + {"matrix": [10, 2], "x": 199, "y": 26, "flags": 4}, + {"matrix": [3, 5], "x": 206, "y": 52, "flags": 4}, + {"matrix": [0, 3], "x": 191, "y": 64, "flags": 4}, + {"matrix": [10, 4], "x": 193, "y": 38, "flags": 4}, + {"matrix": [7, 3], "x": 206, "y": 64, "flags": 4} + ] + }, "layouts": { "LAYOUT": { "layout": [ diff --git a/keyboards/gmmk/pro/rev1/iso/iso.c b/keyboards/gmmk/pro/rev1/iso/iso.c index 932c6a1f49..1ba3ddc404 100644 --- a/keyboards/gmmk/pro/rev1/iso/iso.c +++ b/keyboards/gmmk/pro/rev1/iso/iso.c @@ -18,125 +18,6 @@ #ifdef RGB_MATRIX_ENABLE // clang-format off -led_config_t g_led_config = {{ - { 4, NO_LED, NO_LED, 96, 65, 80, 5, 28 }, - { 8, 2, 9, 0, 10, 76, 1, 7 }, - { 14, 3, 15, 67, 16, 87, 6, 13 }, - { 20, 18, 21, 23, 22, 94, 12, 19 }, - { 25, 30, 26, 31, 27, 32, 29, 24 }, - { 41, 36, 42, 37, 43, 38, 35, 40 }, - { 46, 90, 47, 34, 48, 73, 79, 45 }, - { 52, 39, 53, 98, 54, 83, 44, 51 }, - { 58, 63, 59, 64, 95, 60, 62, 57 }, - { 11, 91, 55, 17, 33, 49, NO_LED, 70 }, - { NO_LED, 86, NO_LED, 61, 97, 66, 50, 56 } -}, { - {0, 0}, // 0, ESC, k13 - {0, 15}, // 1, `, k16 - {4, 26}, // 2, Tab, k11 - {5, 38}, // 3, Caps, k21 - {2, 49}, // 4, Sh_L, k00 - {2, 61}, // 5, Ct_L, k06 - {18, 0}, // 6, F1, k26 - {14, 15}, // 7, 1, k17 - {22, 26}, // 8, Q, k10 - {25, 38}, // 9, A, k12 - {33, 49}, // 10, Z, k14 - {20, 61}, // 11, Win_L, k90 - {33, 0}, // 12, F2, k36 - {29, 15}, // 13, 2, k27 - {36, 26}, // 14, W, k20 - {40, 38}, // 15, S, k22 - {47, 49}, // 16, X, k24 - {38, 61}, // 17, Alt_L, k93 - {47, 0}, // 18, F3, k31 - {43, 15}, // 19, 3, k37 - {51, 26}, // 20, E, k30 - {54, 38}, // 21, D, k32 - {61, 49}, // 22, C, k34 - {61, 0}, // 23, F4, k33 - {58, 15}, // 24, 4, k47 - {65, 26}, // 25, R, k40 - {69, 38}, // 26, F, k42 - {76, 49}, // 27, V, k44 - {79, 0}, // 28, F5, k07 - {72, 15}, // 29, 5, k46 - {79, 26}, // 30, T, k41 - {83, 38}, // 31, G, k43 - {90, 49}, // 32, B, k45 - {92, 61}, // 33, SPACE, k94 - {94, 0}, // 34, F6, k63 - {87, 15}, // 35, 6, k56 - {94, 26}, // 36, Y, k51 - {98, 38}, // 37, H, k53 - {105, 49}, // 38, N, k55 - {108, 0}, // 39, F7, k71 - {101, 15}, // 40, 7, k57 - {108, 26}, // 41, U, k50 - {112, 38}, // 42, J, k52 - {119, 49}, // 43, M, k54 - {123, 0}, // 44, F8, k76 - {116, 15}, // 45, 8, k67 - {123, 26}, // 46, I, k60 - {126, 38}, // 47, K, k62 - {134, 49}, // 48, ,, k64 - {145, 61}, // 49, Alt_R, k95 - {141, 0}, // 50, F9, ka6 - {130, 15}, // 51, 9, k77 - {137, 26}, // 52, O, k70 - {141, 38}, // 53, L, k72 - {148, 49}, // 54, ., k74 - {159, 61}, // 55, FN, k92 - {155, 0}, // 56, F10, ka7 - {145, 15}, // 57, 0, k87 - {152, 26}, // 58, P, k80 - {155, 38}, // 59, ;, k82 - {163, 49}, // 60, /, k85 - {170, 0}, // 61, F11, ka3 - {159, 15}, // 62, -, k86 - {166, 26}, // 63, [, k81 - {170, 38}, // 64, ", k83 - {173, 61}, // 65, Ct_R, k04 - {184, 0}, // 66, F12, ka5 - {18, 49}, // 67, \, k23 - {0, 8}, // 68, LED, l01 - {224, 8}, // 69, LED, l11 - {202, 0}, // 70, Prt, k97 - {0, 15}, // 71, LED, l02 - {224, 15}, // 72, LED, l12 - {224, 15}, // 73, Del, k65 - {0, 21}, // 74, LED, l03 - {224, 21}, // 75, LED, l13 - {224, 26}, // 76, PgUp, k15 - {0, 28}, // 77, LED, l04 - {224, 28}, // 78, LED, l14 - {173, 15}, // 79, =, k66 - {220, 64}, // 80, Right, k05 - {0, 35}, // 81, LED, l05 - {224, 35}, // 82, LED, l15 - {224, 49}, // 83, End, k75 - {0, 42}, // 84, LED, l06 - {224, 42}, // 85, LED, l16 - {195, 15}, // 86, BSpc, ka1 - {224, 38}, // 87, PgDn, k25 - {0, 48}, // 88, LED, l07 - {224, 48}, // 89, LED, l17 - {181, 26}, // 90, ], k61 - {182, 49}, // 91, Sh_R, k91 - {0, 55}, // 92, LED, l08 - {224, 55}, // 93, LED, l18 - {206, 52}, // 94, Up, k35 - {184, 38}, // 95, #, k84 - {191, 64}, // 96, Left, k03 - {201, 26}, // 97, Enter, ka4 - {206, 64}, // 98, Down, k73 -}, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 2, 2, 4, 2, - 2, 4, 2, 2, 4, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4 -}}; - const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { {0, SW1_CS1, SW1_CS2, SW1_CS3}, // 0, ESC, k13 {0, SW1_CS4, SW1_CS5, SW1_CS6}, // 1, ~, k16 diff --git a/keyboards/gmmk/pro/rev1/iso/keyboard.json b/keyboards/gmmk/pro/rev1/iso/keyboard.json index 7506f8952d..a30e7cbb6d 100644 --- a/keyboards/gmmk/pro/rev1/iso/keyboard.json +++ b/keyboards/gmmk/pro/rev1/iso/keyboard.json @@ -34,6 +34,109 @@ }, "processor": "STM32F303", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [1, 3], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 6], "x": 0, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 4, "y": 26, "flags": 4}, + {"matrix": [2, 1], "x": 5, "y": 38, "flags": 4}, + {"matrix": [0, 0], "x": 2, "y": 49, "flags": 4}, + {"matrix": [0, 6], "x": 2, "y": 61, "flags": 4}, + {"matrix": [2, 6], "x": 18, "y": 0, "flags": 4}, + {"matrix": [1, 7], "x": 14, "y": 15, "flags": 4}, + {"matrix": [1, 0], "x": 22, "y": 26, "flags": 4}, + {"matrix": [1, 2], "x": 25, "y": 38, "flags": 4}, + {"matrix": [1, 4], "x": 33, "y": 49, "flags": 4}, + {"matrix": [9, 0], "x": 20, "y": 61, "flags": 4}, + {"matrix": [3, 6], "x": 33, "y": 0, "flags": 4}, + {"matrix": [2, 7], "x": 29, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 36, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 38, "flags": 4}, + {"matrix": [2, 4], "x": 47, "y": 49, "flags": 4}, + {"matrix": [9, 3], "x": 38, "y": 61, "flags": 4}, + {"matrix": [3, 1], "x": 47, "y": 0, "flags": 4}, + {"matrix": [3, 7], "x": 43, "y": 15, "flags": 4}, + {"matrix": [3, 0], "x": 51, "y": 26, "flags": 4}, + {"matrix": [3, 2], "x": 54, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 61, "y": 49, "flags": 4}, + {"matrix": [3, 3], "x": 61, "y": 0, "flags": 4}, + {"matrix": [4, 7], "x": 58, "y": 15, "flags": 4}, + {"matrix": [4, 0], "x": 65, "y": 26, "flags": 4}, + {"matrix": [4, 2], "x": 69, "y": 38, "flags": 4}, + {"matrix": [4, 4], "x": 76, "y": 49, "flags": 4}, + {"matrix": [0, 7], "x": 79, "y": 0, "flags": 4}, + {"matrix": [4, 6], "x": 72, "y": 15, "flags": 4}, + {"matrix": [4, 1], "x": 79, "y": 26, "flags": 4}, + {"matrix": [4, 3], "x": 83, "y": 38, "flags": 4}, + {"matrix": [4, 5], "x": 90, "y": 49, "flags": 4}, + {"matrix": [9, 4], "x": 92, "y": 61, "flags": 4}, + {"matrix": [6, 3], "x": 94, "y": 0, "flags": 4}, + {"matrix": [5, 6], "x": 87, "y": 15, "flags": 4}, + {"matrix": [5, 1], "x": 94, "y": 26, "flags": 4}, + {"matrix": [5, 3], "x": 98, "y": 38, "flags": 4}, + {"matrix": [5, 5], "x": 105, "y": 49, "flags": 4}, + {"matrix": [7, 1], "x": 108, "y": 0, "flags": 4}, + {"matrix": [5, 7], "x": 101, "y": 15, "flags": 4}, + {"matrix": [5, 0], "x": 108, "y": 26, "flags": 4}, + {"matrix": [5, 2], "x": 112, "y": 38, "flags": 4}, + {"matrix": [5, 4], "x": 119, "y": 49, "flags": 4}, + {"matrix": [7, 6], "x": 123, "y": 0, "flags": 4}, + {"matrix": [6, 7], "x": 116, "y": 15, "flags": 4}, + {"matrix": [6, 0], "x": 123, "y": 26, "flags": 4}, + {"matrix": [6, 2], "x": 126, "y": 38, "flags": 4}, + {"matrix": [6, 4], "x": 134, "y": 49, "flags": 4}, + {"matrix": [9, 5], "x": 145, "y": 61, "flags": 4}, + {"matrix": [10, 6], "x": 141, "y": 0, "flags": 4}, + {"matrix": [7, 7], "x": 130, "y": 15, "flags": 4}, + {"matrix": [7, 0], "x": 137, "y": 26, "flags": 4}, + {"matrix": [7, 2], "x": 141, "y": 38, "flags": 4}, + {"matrix": [7, 4], "x": 148, "y": 49, "flags": 4}, + {"matrix": [9, 2], "x": 159, "y": 61, "flags": 4}, + {"matrix": [10, 7], "x": 155, "y": 0, "flags": 4}, + {"matrix": [8, 7], "x": 145, "y": 15, "flags": 4}, + {"matrix": [8, 0], "x": 152, "y": 26, "flags": 4}, + {"matrix": [8, 2], "x": 155, "y": 38, "flags": 4}, + {"matrix": [8, 5], "x": 163, "y": 49, "flags": 4}, + {"matrix": [10, 3], "x": 170, "y": 0, "flags": 4}, + {"matrix": [8, 6], "x": 159, "y": 15, "flags": 4}, + {"matrix": [8, 1], "x": 166, "y": 26, "flags": 4}, + {"matrix": [8, 3], "x": 170, "y": 38, "flags": 4}, + {"matrix": [0, 4], "x": 173, "y": 61, "flags": 4}, + {"matrix": [10, 5], "x": 184, "y": 0, "flags": 4}, + {"matrix": [2, 3], "x": 18, "y": 49, "flags": 4}, + {"x": 0, "y": 8, "flags": 2}, + {"x": 224, "y": 8, "flags": 2}, + {"matrix": [9, 7], "x": 202, "y": 0, "flags": 4}, + {"x": 0, "y": 15, "flags": 2}, + {"x": 224, "y": 15, "flags": 2}, + {"matrix": [6, 5], "x": 224, "y": 15, "flags": 4}, + {"x": 0, "y": 21, "flags": 2}, + {"x": 224, "y": 21, "flags": 2}, + {"matrix": [1, 5], "x": 224, "y": 26, "flags": 4}, + {"x": 0, "y": 28, "flags": 2}, + {"x": 224, "y": 28, "flags": 2}, + {"matrix": [6, 6], "x": 173, "y": 15, "flags": 4}, + {"matrix": [0, 5], "x": 220, "y": 64, "flags": 4}, + {"x": 0, "y": 35, "flags": 2}, + {"x": 224, "y": 35, "flags": 2}, + {"matrix": [7, 5], "x": 224, "y": 49, "flags": 4}, + {"x": 0, "y": 42, "flags": 2}, + {"x": 224, "y": 42, "flags": 2}, + {"matrix": [10, 1], "x": 195, "y": 15, "flags": 4}, + {"matrix": [2, 5], "x": 224, "y": 38, "flags": 4}, + {"x": 0, "y": 48, "flags": 2}, + {"x": 224, "y": 48, "flags": 2}, + {"matrix": [6, 1], "x": 181, "y": 26, "flags": 4}, + {"matrix": [9, 1], "x": 182, "y": 49, "flags": 4}, + {"x": 0, "y": 55, "flags": 2}, + {"x": 224, "y": 55, "flags": 2}, + {"matrix": [3, 5], "x": 206, "y": 52, "flags": 4}, + {"matrix": [8, 4], "x": 184, "y": 38, "flags": 4}, + {"matrix": [0, 3], "x": 191, "y": 64, "flags": 4}, + {"matrix": [10, 4], "x": 201, "y": 26, "flags": 4}, + {"matrix": [7, 3], "x": 206, "y": 64, "flags": 4} + ] + }, "layouts": { "LAYOUT": { "layout": [ diff --git a/keyboards/gmmk/pro/rev2/ansi/ansi.c b/keyboards/gmmk/pro/rev2/ansi/ansi.c index a3f957ef0a..8b7695095f 100644 --- a/keyboards/gmmk/pro/rev2/ansi/ansi.c +++ b/keyboards/gmmk/pro/rev2/ansi/ansi.c @@ -18,124 +18,6 @@ #ifdef RGB_MATRIX_ENABLE // clang-format off -led_config_t g_led_config = {{ - { 4, NO_LED, NO_LED, 95, 65, 79, 5, 28 }, - { 8, 2, 9, 0, 10, 75, 1, 7 }, - { 14, 3, 15, NO_LED, 16, 86, 6, 13 }, - { 20, 18, 21, 23, 22, 94, 12, 19 }, - { 25, 30, 26, 31, 27, 32, 29, 24 }, - { 41, 36, 42, 37, 43, 38, 35, 40 }, - { 46, 89, 47, 34, 48, 72, 78, 45 }, - { 52, 39, 53, 97, 54, 82, 44, 51 }, - { 58, 63, 59, 64, NO_LED, 60, 62, 57 }, - { 11, 90, 55, 17, 33, 49, NO_LED, 69 }, - { NO_LED, 85, 93, 61, 96, 66, 50, 56 } -}, { - {0, 0}, // 0, ESC, k13 - {0, 15}, // 1, ~, k16 - {4, 26}, // 2, Tab, k11 - {5, 38}, // 3, Caps, k21 - {9, 49}, // 4, Sh_L, k00 - {2, 61}, // 5, Ct_L, k06 - {18, 0}, // 6, F1, k26 - {14, 15}, // 7, 1, k17 - {22, 26}, // 8, Q, k10 - {25, 38}, // 9, A, k12 - {33, 49}, // 10, Z, k14 - {20, 61}, // 11, Win_L, k90 - {33, 0}, // 12, F2, k36 - {29, 15}, // 13, 2, k27 - {36, 26}, // 14, W, k20 - {40, 38}, // 15, S, k22 - {47, 49}, // 16, X, k24 - {38, 61}, // 17, Alt_L, k93 - {47, 0}, // 18, F3, k31 - {43, 15}, // 19, 3, k37 - {51, 26}, // 20, E, k30 - {54, 38}, // 21, D, k32 - {61, 49}, // 22, C, k34 - {61, 0}, // 23, F4, k33 - {58, 15}, // 24, 4, k47 - {65, 26}, // 25, R, k40 - {69, 38}, // 26, F, k42 - {76, 49}, // 27, V, k44 - {79, 0}, // 28, F5, k07 - {72, 15}, // 29, 5, k46 - {79, 26}, // 30, T, k41 - {83, 38}, // 31, G, k43 - {90, 49}, // 32, B, k45 - {92, 61}, // 33, SPACE, k94 - {94, 0}, // 34, F6, k63 - {87, 15}, // 35, 6, k56 - {94, 26}, // 36, Y, k51 - {98, 38}, // 37, H, k53 - {105, 49}, // 38, N, k55 - {108, 0}, // 39, F7, k71 - {101, 15}, // 40, 7, k57 - {108, 26}, // 41, U, k50 - {112, 38}, // 42, J, k52 - {119, 49}, // 43, M, k54 - {123, 0}, // 44, F8, k76 - {116, 15}, // 45, 8, k67 - {123, 26}, // 46, I, k60 - {126, 38}, // 47, K, k62 - {134, 49}, // 48, ,, k64 - {145, 61}, // 49, Alt_R, k95 - {141, 0}, // 50, F9, ka6 - {130, 15}, // 51, 9, k77 - {137, 26}, // 52, O, k70 - {141, 38}, // 53, L, k72 - {148, 49}, // 54, ., k74 - {159, 61}, // 55, FN, k92 - {155, 0}, // 56, F10, ka7 - {145, 15}, // 57, 0, k87 - {152, 26}, // 58, P, k80 - {155, 38}, // 59, ;, k82 - {163, 49}, // 60, ?, k85 - {170, 0}, // 61, F11, ka3 - {159, 15}, // 62, -, k86 - {166, 26}, // 63, [, k81 - {170, 38}, // 64, ", k83 - {173, 61}, // 65, Ct_R, k04 - {184, 0}, // 66, F12, ka5 - {0, 8}, // 67, LED, l01 - {224, 8}, // 68, LED, l11 - {202, 0}, // 69, Prt, k97 - {0, 15}, // 70, LED, l02 - {224, 15}, // 71, LED, l12 - {224, 15}, // 72, Del, k65 - {0, 21}, // 73, LED, l03 - {224, 21}, // 74, LED, l13 - {224, 26}, // 75, PgUp, k15 - {0, 28}, // 76, LED, l04 - {224, 28}, // 77, LED, l14 - {173, 15}, // 78, =, k66 - {220, 64}, // 79, Right, k05 - {0, 35}, // 80, LED, l05 - {224, 35}, // 81, LED, l15 - {224, 49}, // 82, End, k75 - {0, 42}, // 83, LED, l06 - {224, 42}, // 84, LED, l16 - {195, 15}, // 85, BSpc, ka1 - {224, 38}, // 86, PgDn, k25 - {0, 48}, // 87, LED, l07 - {224, 48}, // 88, LED, l17 - {181, 26}, // 89, ], k61 - {182, 49}, // 90, Sh_R, k91 - {0, 55}, // 91, LED, l08 - {224, 55}, // 92, LED, l18 - {199, 26}, // 93, \, ka2 - {206, 52}, // 94, Up, k35 - {191, 64}, // 95, Left, k03 - {193, 38}, // 96, Enter, ka4 - {206, 64} // 97, Down, k73 -}, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 2, 2, 4, 2, 2, - 4, 2, 2, 4, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4 -}}; - const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { {0, SW1_CS1, SW1_CS2, SW1_CS3}, // 0, ESC, k13 {0, SW1_CS4, SW1_CS5, SW1_CS6}, // 1, ~, k16 diff --git a/keyboards/gmmk/pro/rev2/ansi/keyboard.json b/keyboards/gmmk/pro/rev2/ansi/keyboard.json index 4e0fdfccd9..f8eb11f10b 100644 --- a/keyboards/gmmk/pro/rev2/ansi/keyboard.json +++ b/keyboards/gmmk/pro/rev2/ansi/keyboard.json @@ -41,6 +41,108 @@ }, "processor": "WB32F3G71", "bootloader": "wb32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [1, 3], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 6], "x": 0, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 4, "y": 26, "flags": 4}, + {"matrix": [2, 1], "x": 5, "y": 38, "flags": 4}, + {"matrix": [0, 0], "x": 9, "y": 49, "flags": 4}, + {"matrix": [0, 6], "x": 2, "y": 61, "flags": 4}, + {"matrix": [2, 6], "x": 18, "y": 0, "flags": 4}, + {"matrix": [1, 7], "x": 14, "y": 15, "flags": 4}, + {"matrix": [1, 0], "x": 22, "y": 26, "flags": 4}, + {"matrix": [1, 2], "x": 25, "y": 38, "flags": 4}, + {"matrix": [1, 4], "x": 33, "y": 49, "flags": 4}, + {"matrix": [9, 0], "x": 20, "y": 61, "flags": 4}, + {"matrix": [3, 6], "x": 33, "y": 0, "flags": 4}, + {"matrix": [2, 7], "x": 29, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 36, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 38, "flags": 4}, + {"matrix": [2, 4], "x": 47, "y": 49, "flags": 4}, + {"matrix": [9, 3], "x": 38, "y": 61, "flags": 4}, + {"matrix": [3, 1], "x": 47, "y": 0, "flags": 4}, + {"matrix": [3, 7], "x": 43, "y": 15, "flags": 4}, + {"matrix": [3, 0], "x": 51, "y": 26, "flags": 4}, + {"matrix": [3, 2], "x": 54, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 61, "y": 49, "flags": 4}, + {"matrix": [3, 3], "x": 61, "y": 0, "flags": 4}, + {"matrix": [4, 7], "x": 58, "y": 15, "flags": 4}, + {"matrix": [4, 0], "x": 65, "y": 26, "flags": 4}, + {"matrix": [4, 2], "x": 69, "y": 38, "flags": 4}, + {"matrix": [4, 4], "x": 76, "y": 49, "flags": 4}, + {"matrix": [0, 7], "x": 79, "y": 0, "flags": 4}, + {"matrix": [4, 6], "x": 72, "y": 15, "flags": 4}, + {"matrix": [4, 1], "x": 79, "y": 26, "flags": 4}, + {"matrix": [4, 3], "x": 83, "y": 38, "flags": 4}, + {"matrix": [4, 5], "x": 90, "y": 49, "flags": 4}, + {"matrix": [9, 4], "x": 92, "y": 61, "flags": 4}, + {"matrix": [6, 3], "x": 94, "y": 0, "flags": 4}, + {"matrix": [5, 6], "x": 87, "y": 15, "flags": 4}, + {"matrix": [5, 1], "x": 94, "y": 26, "flags": 4}, + {"matrix": [5, 3], "x": 98, "y": 38, "flags": 4}, + {"matrix": [5, 5], "x": 105, "y": 49, "flags": 4}, + {"matrix": [7, 1], "x": 108, "y": 0, "flags": 4}, + {"matrix": [5, 7], "x": 101, "y": 15, "flags": 4}, + {"matrix": [5, 0], "x": 108, "y": 26, "flags": 4}, + {"matrix": [5, 2], "x": 112, "y": 38, "flags": 4}, + {"matrix": [5, 4], "x": 119, "y": 49, "flags": 4}, + {"matrix": [7, 6], "x": 123, "y": 0, "flags": 4}, + {"matrix": [6, 7], "x": 116, "y": 15, "flags": 4}, + {"matrix": [6, 0], "x": 123, "y": 26, "flags": 4}, + {"matrix": [6, 2], "x": 126, "y": 38, "flags": 4}, + {"matrix": [6, 4], "x": 134, "y": 49, "flags": 4}, + {"matrix": [9, 5], "x": 145, "y": 61, "flags": 4}, + {"matrix": [10, 6], "x": 141, "y": 0, "flags": 4}, + {"matrix": [7, 7], "x": 130, "y": 15, "flags": 4}, + {"matrix": [7, 0], "x": 137, "y": 26, "flags": 4}, + {"matrix": [7, 2], "x": 141, "y": 38, "flags": 4}, + {"matrix": [7, 4], "x": 148, "y": 49, "flags": 4}, + {"matrix": [9, 2], "x": 159, "y": 61, "flags": 4}, + {"matrix": [10, 7], "x": 155, "y": 0, "flags": 4}, + {"matrix": [8, 7], "x": 145, "y": 15, "flags": 4}, + {"matrix": [8, 0], "x": 152, "y": 26, "flags": 4}, + {"matrix": [8, 2], "x": 155, "y": 38, "flags": 4}, + {"matrix": [8, 5], "x": 163, "y": 49, "flags": 4}, + {"matrix": [10, 3], "x": 170, "y": 0, "flags": 4}, + {"matrix": [8, 6], "x": 159, "y": 15, "flags": 4}, + {"matrix": [8, 1], "x": 166, "y": 26, "flags": 4}, + {"matrix": [8, 3], "x": 170, "y": 38, "flags": 4}, + {"matrix": [0, 4], "x": 173, "y": 61, "flags": 4}, + {"matrix": [10, 5], "x": 184, "y": 0, "flags": 4}, + {"x": 0, "y": 8, "flags": 2}, + {"x": 224, "y": 8, "flags": 2}, + {"matrix": [9, 7], "x": 202, "y": 0, "flags": 4}, + {"x": 0, "y": 15, "flags": 2}, + {"x": 224, "y": 15, "flags": 2}, + {"matrix": [6, 5], "x": 224, "y": 15, "flags": 4}, + {"x": 0, "y": 21, "flags": 2}, + {"x": 224, "y": 21, "flags": 2}, + {"matrix": [1, 5], "x": 224, "y": 26, "flags": 4}, + {"x": 0, "y": 28, "flags": 2}, + {"x": 224, "y": 28, "flags": 2}, + {"matrix": [6, 6], "x": 173, "y": 15, "flags": 4}, + {"matrix": [0, 5], "x": 220, "y": 64, "flags": 4}, + {"x": 0, "y": 35, "flags": 2}, + {"x": 224, "y": 35, "flags": 2}, + {"matrix": [7, 5], "x": 224, "y": 49, "flags": 4}, + {"x": 0, "y": 42, "flags": 2}, + {"x": 224, "y": 42, "flags": 2}, + {"matrix": [10, 1], "x": 195, "y": 15, "flags": 4}, + {"matrix": [2, 5], "x": 224, "y": 38, "flags": 4}, + {"x": 0, "y": 48, "flags": 2}, + {"x": 224, "y": 48, "flags": 2}, + {"matrix": [6, 1], "x": 181, "y": 26, "flags": 4}, + {"matrix": [9, 1], "x": 182, "y": 49, "flags": 4}, + {"x": 0, "y": 55, "flags": 2}, + {"x": 224, "y": 55, "flags": 2}, + {"matrix": [10, 2], "x": 199, "y": 26, "flags": 4}, + {"matrix": [3, 5], "x": 206, "y": 52, "flags": 4}, + {"matrix": [0, 3], "x": 191, "y": 64, "flags": 4}, + {"matrix": [10, 4], "x": 193, "y": 38, "flags": 4}, + {"matrix": [7, 3], "x": 206, "y": 64, "flags": 4} + ] + }, "layouts": { "LAYOUT": { "layout": [ diff --git a/keyboards/gmmk/pro/rev2/iso/iso.c b/keyboards/gmmk/pro/rev2/iso/iso.c index 7a34f2432f..ce211ea47d 100644 --- a/keyboards/gmmk/pro/rev2/iso/iso.c +++ b/keyboards/gmmk/pro/rev2/iso/iso.c @@ -18,125 +18,6 @@ #ifdef RGB_MATRIX_ENABLE // clang-format off -led_config_t g_led_config = {{ - { 4, NO_LED, NO_LED, 96, 65, 80, 5, 28 }, - { 8, 2, 9, 0, 10, 76, 1, 7 }, - { 14, 3, 15, 67, 16, 87, 6, 13 }, - { 20, 18, 21, 23, 22, 94, 12, 19 }, - { 25, 30, 26, 31, 27, 32, 29, 24 }, - { 41, 36, 42, 37, 43, 38, 35, 40 }, - { 46, 90, 47, 34, 48, 73, 79, 45 }, - { 52, 39, 53, 98, 54, 83, 44, 51 }, - { 58, 63, 59, 64, 95, 60, 62, 57 }, - { 11, 91, 55, 17, 33, 49, NO_LED, 70 }, - { NO_LED, 86, NO_LED, 61, 97, 66, 50, 56 } -}, { - {0, 0}, // 0, ESC, k13 - {0, 15}, // 1, `, k16 - {4, 26}, // 2, Tab, k11 - {5, 38}, // 3, Caps, k21 - {2, 49}, // 4, Sh_L, k00 - {2, 61}, // 5, Ct_L, k06 - {18, 0}, // 6, F1, k26 - {14, 15}, // 7, 1, k17 - {22, 26}, // 8, Q, k10 - {25, 38}, // 9, A, k12 - {33, 49}, // 10, Z, k14 - {20, 61}, // 11, Win_L, k90 - {33, 0}, // 12, F2, k36 - {29, 15}, // 13, 2, k27 - {36, 26}, // 14, W, k20 - {40, 38}, // 15, S, k22 - {47, 49}, // 16, X, k24 - {38, 61}, // 17, Alt_L, k93 - {47, 0}, // 18, F3, k31 - {43, 15}, // 19, 3, k37 - {51, 26}, // 20, E, k30 - {54, 38}, // 21, D, k32 - {61, 49}, // 22, C, k34 - {61, 0}, // 23, F4, k33 - {58, 15}, // 24, 4, k47 - {65, 26}, // 25, R, k40 - {69, 38}, // 26, F, k42 - {76, 49}, // 27, V, k44 - {79, 0}, // 28, F5, k07 - {72, 15}, // 29, 5, k46 - {79, 26}, // 30, T, k41 - {83, 38}, // 31, G, k43 - {90, 49}, // 32, B, k45 - {92, 61}, // 33, SPACE, k94 - {94, 0}, // 34, F6, k63 - {87, 15}, // 35, 6, k56 - {94, 26}, // 36, Y, k51 - {98, 38}, // 37, H, k53 - {105, 49}, // 38, N, k55 - {108, 0}, // 39, F7, k71 - {101, 15}, // 40, 7, k57 - {108, 26}, // 41, U, k50 - {112, 38}, // 42, J, k52 - {119, 49}, // 43, M, k54 - {123, 0}, // 44, F8, k76 - {116, 15}, // 45, 8, k67 - {123, 26}, // 46, I, k60 - {126, 38}, // 47, K, k62 - {134, 49}, // 48, ,, k64 - {145, 61}, // 49, Alt_R, k95 - {141, 0}, // 50, F9, ka6 - {130, 15}, // 51, 9, k77 - {137, 26}, // 52, O, k70 - {141, 38}, // 53, L, k72 - {148, 49}, // 54, ., k74 - {159, 61}, // 55, FN, k92 - {155, 0}, // 56, F10, ka7 - {145, 15}, // 57, 0, k87 - {152, 26}, // 58, P, k80 - {155, 38}, // 59, ;, k82 - {163, 49}, // 60, /, k85 - {170, 0}, // 61, F11, ka3 - {159, 15}, // 62, -, k86 - {166, 26}, // 63, [, k81 - {170, 38}, // 64, ", k83 - {173, 61}, // 65, Ct_R, k04 - {184, 0}, // 66, F12, ka5 - {18, 49}, // 67, \, k23 - {0, 8}, // 68, LED, l01 - {224, 8}, // 69, LED, l11 - {202, 0}, // 70, Prt, k97 - {0, 15}, // 71, LED, l02 - {224, 15}, // 72, LED, l12 - {224, 15}, // 73, Del, k65 - {0, 21}, // 74, LED, l03 - {224, 21}, // 75, LED, l13 - {224, 26}, // 76, PgUp, k15 - {0, 28}, // 77, LED, l04 - {224, 28}, // 78, LED, l14 - {173, 15}, // 79, =, k66 - {220, 64}, // 80, Right, k05 - {0, 35}, // 81, LED, l05 - {224, 35}, // 82, LED, l15 - {224, 49}, // 83, End, k75 - {0, 42}, // 84, LED, l06 - {224, 42}, // 85, LED, l16 - {195, 15}, // 86, BSpc, ka1 - {224, 38}, // 87, PgDn, k25 - {0, 48}, // 88, LED, l07 - {224, 48}, // 89, LED, l17 - {181, 26}, // 90, ], k61 - {182, 49}, // 91, Sh_R, k91 - {0, 55}, // 92, LED, l08 - {224, 55}, // 93, LED, l18 - {206, 52}, // 94, Up, k35 - {184, 38}, // 95, #, k84 - {191, 64}, // 96, Left, k03 - {201, 26}, // 97, Enter, ka4 - {206, 64}, // 98, Down, k73 -}, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 2, 2, 4, 2, - 2, 4, 2, 2, 4, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4 -}}; - const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { {0, SW1_CS1, SW1_CS2, SW1_CS3}, // 0, ESC, k13 {0, SW1_CS4, SW1_CS5, SW1_CS6}, // 1, ~, k16 diff --git a/keyboards/gmmk/pro/rev2/iso/keyboard.json b/keyboards/gmmk/pro/rev2/iso/keyboard.json index 01db9dc22f..886d9e8c55 100644 --- a/keyboards/gmmk/pro/rev2/iso/keyboard.json +++ b/keyboards/gmmk/pro/rev2/iso/keyboard.json @@ -41,6 +41,109 @@ }, "processor": "WB32F3G71", "bootloader": "wb32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [1, 3], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 6], "x": 0, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 4, "y": 26, "flags": 4}, + {"matrix": [2, 1], "x": 5, "y": 38, "flags": 4}, + {"matrix": [0, 0], "x": 2, "y": 49, "flags": 4}, + {"matrix": [0, 6], "x": 2, "y": 61, "flags": 4}, + {"matrix": [2, 6], "x": 18, "y": 0, "flags": 4}, + {"matrix": [1, 7], "x": 14, "y": 15, "flags": 4}, + {"matrix": [1, 0], "x": 22, "y": 26, "flags": 4}, + {"matrix": [1, 2], "x": 25, "y": 38, "flags": 4}, + {"matrix": [1, 4], "x": 33, "y": 49, "flags": 4}, + {"matrix": [9, 0], "x": 20, "y": 61, "flags": 4}, + {"matrix": [3, 6], "x": 33, "y": 0, "flags": 4}, + {"matrix": [2, 7], "x": 29, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 36, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 38, "flags": 4}, + {"matrix": [2, 4], "x": 47, "y": 49, "flags": 4}, + {"matrix": [9, 3], "x": 38, "y": 61, "flags": 4}, + {"matrix": [3, 1], "x": 47, "y": 0, "flags": 4}, + {"matrix": [3, 7], "x": 43, "y": 15, "flags": 4}, + {"matrix": [3, 0], "x": 51, "y": 26, "flags": 4}, + {"matrix": [3, 2], "x": 54, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 61, "y": 49, "flags": 4}, + {"matrix": [3, 3], "x": 61, "y": 0, "flags": 4}, + {"matrix": [4, 7], "x": 58, "y": 15, "flags": 4}, + {"matrix": [4, 0], "x": 65, "y": 26, "flags": 4}, + {"matrix": [4, 2], "x": 69, "y": 38, "flags": 4}, + {"matrix": [4, 4], "x": 76, "y": 49, "flags": 4}, + {"matrix": [0, 7], "x": 79, "y": 0, "flags": 4}, + {"matrix": [4, 6], "x": 72, "y": 15, "flags": 4}, + {"matrix": [4, 1], "x": 79, "y": 26, "flags": 4}, + {"matrix": [4, 3], "x": 83, "y": 38, "flags": 4}, + {"matrix": [4, 5], "x": 90, "y": 49, "flags": 4}, + {"matrix": [9, 4], "x": 92, "y": 61, "flags": 4}, + {"matrix": [6, 3], "x": 94, "y": 0, "flags": 4}, + {"matrix": [5, 6], "x": 87, "y": 15, "flags": 4}, + {"matrix": [5, 1], "x": 94, "y": 26, "flags": 4}, + {"matrix": [5, 3], "x": 98, "y": 38, "flags": 4}, + {"matrix": [5, 5], "x": 105, "y": 49, "flags": 4}, + {"matrix": [7, 1], "x": 108, "y": 0, "flags": 4}, + {"matrix": [5, 7], "x": 101, "y": 15, "flags": 4}, + {"matrix": [5, 0], "x": 108, "y": 26, "flags": 4}, + {"matrix": [5, 2], "x": 112, "y": 38, "flags": 4}, + {"matrix": [5, 4], "x": 119, "y": 49, "flags": 4}, + {"matrix": [7, 6], "x": 123, "y": 0, "flags": 4}, + {"matrix": [6, 7], "x": 116, "y": 15, "flags": 4}, + {"matrix": [6, 0], "x": 123, "y": 26, "flags": 4}, + {"matrix": [6, 2], "x": 126, "y": 38, "flags": 4}, + {"matrix": [6, 4], "x": 134, "y": 49, "flags": 4}, + {"matrix": [9, 5], "x": 145, "y": 61, "flags": 4}, + {"matrix": [10, 6], "x": 141, "y": 0, "flags": 4}, + {"matrix": [7, 7], "x": 130, "y": 15, "flags": 4}, + {"matrix": [7, 0], "x": 137, "y": 26, "flags": 4}, + {"matrix": [7, 2], "x": 141, "y": 38, "flags": 4}, + {"matrix": [7, 4], "x": 148, "y": 49, "flags": 4}, + {"matrix": [9, 2], "x": 159, "y": 61, "flags": 4}, + {"matrix": [10, 7], "x": 155, "y": 0, "flags": 4}, + {"matrix": [8, 7], "x": 145, "y": 15, "flags": 4}, + {"matrix": [8, 0], "x": 152, "y": 26, "flags": 4}, + {"matrix": [8, 2], "x": 155, "y": 38, "flags": 4}, + {"matrix": [8, 5], "x": 163, "y": 49, "flags": 4}, + {"matrix": [10, 3], "x": 170, "y": 0, "flags": 4}, + {"matrix": [8, 6], "x": 159, "y": 15, "flags": 4}, + {"matrix": [8, 1], "x": 166, "y": 26, "flags": 4}, + {"matrix": [8, 3], "x": 170, "y": 38, "flags": 4}, + {"matrix": [0, 4], "x": 173, "y": 61, "flags": 4}, + {"matrix": [10, 5], "x": 184, "y": 0, "flags": 4}, + {"matrix": [2, 3], "x": 18, "y": 49, "flags": 4}, + {"x": 0, "y": 8, "flags": 2}, + {"x": 224, "y": 8, "flags": 2}, + {"matrix": [9, 7], "x": 202, "y": 0, "flags": 4}, + {"x": 0, "y": 15, "flags": 2}, + {"x": 224, "y": 15, "flags": 2}, + {"matrix": [6, 5], "x": 224, "y": 15, "flags": 4}, + {"x": 0, "y": 21, "flags": 2}, + {"x": 224, "y": 21, "flags": 2}, + {"matrix": [1, 5], "x": 224, "y": 26, "flags": 4}, + {"x": 0, "y": 28, "flags": 2}, + {"x": 224, "y": 28, "flags": 2}, + {"matrix": [6, 6], "x": 173, "y": 15, "flags": 4}, + {"matrix": [0, 5], "x": 220, "y": 64, "flags": 4}, + {"x": 0, "y": 35, "flags": 2}, + {"x": 224, "y": 35, "flags": 2}, + {"matrix": [7, 5], "x": 224, "y": 49, "flags": 4}, + {"x": 0, "y": 42, "flags": 2}, + {"x": 224, "y": 42, "flags": 2}, + {"matrix": [10, 1], "x": 195, "y": 15, "flags": 4}, + {"matrix": [2, 5], "x": 224, "y": 38, "flags": 4}, + {"x": 0, "y": 48, "flags": 2}, + {"x": 224, "y": 48, "flags": 2}, + {"matrix": [6, 1], "x": 181, "y": 26, "flags": 4}, + {"matrix": [9, 1], "x": 182, "y": 49, "flags": 4}, + {"x": 0, "y": 55, "flags": 2}, + {"x": 224, "y": 55, "flags": 2}, + {"matrix": [3, 5], "x": 206, "y": 52, "flags": 4}, + {"matrix": [8, 4], "x": 184, "y": 38, "flags": 4}, + {"matrix": [0, 3], "x": 191, "y": 64, "flags": 4}, + {"matrix": [10, 4], "x": 201, "y": 26, "flags": 4}, + {"matrix": [7, 3], "x": 206, "y": 64, "flags": 4} + ] + }, "layouts": { "LAYOUT": { "layout": [ diff --git a/keyboards/gopolar/gg86/gg86.c b/keyboards/gopolar/gg86/gg86.c index 52e1434f00..3aa1d608a8 100644 --- a/keyboards/gopolar/gg86/gg86.c +++ b/keyboards/gopolar/gg86/gg86.c @@ -25,37 +25,6 @@ #include #include -led_config_t g_led_config = { { - { 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, NO_LED, 74, 73, 72 }, - { 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71 }, - { 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38 }, - { 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, NO_LED, 37, NO_LED, NO_LED, NO_LED }, - { 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, NO_LED, 10, NO_LED }, - { 0, 1, 2, NO_LED, NO_LED, 3, NO_LED, NO_LED, NO_LED, NO_LED, 4, 5, 6, NO_LED, 7, 8, 9 } -}, { - // Key matrix (0 -> 87) - {3 , 64}, {19 , 64}, {36 , 64}, {91 , 64}, {146, 64}, {162, 64}, {179, 64}, {198, 64}, {211, 64}, {224, 64}, - {211, 52}, {182, 52}, {170, 52}, {146, 52}, {133, 52}, {120, 52}, {107, 52}, {94 , 52}, {81 , 52}, {68 , 52}, {55 , 52}, {42 , 52}, {29 , 52}, {16 , 52}, {2 , 52}, - {2 , 41}, {23 , 41}, {36 , 41}, {49 , 41}, {62 , 41}, {75 , 41}, {88 , 41}, {101, 41}, {114, 41}, {127, 41}, {140, 41}, {153, 41}, {174, 41}, - {224, 29}, {211, 29}, {198, 29}, {179, 29}, {162, 29}, {149, 29}, {136, 29}, {123, 29}, {110, 29}, {97 , 29}, {84 , 29}, {71 , 29}, {58 , 29}, {45 , 29}, {32 , 29}, {19 , 29}, {3 , 29}, - {0 , 17}, {13 , 17}, {26 , 17}, {39 , 17}, {52 , 17}, {65 , 17}, {78 , 17}, {91 , 17}, {104, 17}, {117, 17}, {130, 17}, {143, 17}, {156, 17}, {175, 17}, {198, 17}, {211, 17}, {224, 17}, - {224, 0}, {211, 0}, {198, 0}, {182, 0}, {169, 0}, {156, 0}, {143, 0}, {123, 0}, {110, 0}, {97 , 0}, {84 , 0}, {65 , 0}, {52 , 0}, {39 , 0}, {26 , 0}, {0 , 0}, - - // Underglow (88 -> 99) - {1 , 6}, {50 , 6}, {89 , 6}, {135, 6}, {176, 6}, {198, 6}, {221, 55}, {192, 58}, {138, 59}, {96 , 61}, {42 , 59}, {7 , 60}, -}, { - // Key matrix (0 -> 87) - 1, 1, 1, 4, 1, 1, 1, 4, 4, 4, - 4, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, - 4, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - - // Underglow (88 -> 99) - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -} }; - bool process_record_kb(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QK_RGB_MATRIX_TOGGLE: @@ -114,7 +83,7 @@ bool rgb_matrix_indicators_kb(void) { #endif #ifdef OLED_ENABLE - uint16_t startup_timer; + uint16_t startup_timer; oled_rotation_t oled_init_kb(oled_rotation_t rotation) { startup_timer = timer_read(); @@ -129,7 +98,7 @@ bool rgb_matrix_indicators_kb(void) { render_logo(); } else { finished_logo = true; - + if (!oled_task_user()) { return false; } diff --git a/keyboards/gopolar/gg86/keyboard.json b/keyboards/gopolar/gg86/keyboard.json index 3412a7c63c..dc182f6977 100644 --- a/keyboards/gopolar/gg86/keyboard.json +++ b/keyboards/gopolar/gg86/keyboard.json @@ -59,6 +59,108 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [5, 0], "x": 3, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 19, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 36, "y": 64, "flags": 1}, + {"matrix": [5, 5], "x": 91, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 146, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 162, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 179, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 198, "y": 64, "flags": 4}, + {"matrix": [5, 15], "x": 211, "y": 64, "flags": 4}, + {"matrix": [5, 16], "x": 224, "y": 64, "flags": 4}, + {"matrix": [4, 15], "x": 211, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 182, "y": 52, "flags": 1}, + {"matrix": [4, 12], "x": 170, "y": 52, "flags": 1}, + {"matrix": [4, 11], "x": 146, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 133, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 120, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 94, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 81, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 68, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 29, "y": 52, "flags": 4}, + {"matrix": [4, 1], "x": 16, "y": 52, "flags": 4}, + {"matrix": [4, 0], "x": 2, "y": 52, "flags": 1}, + {"matrix": [3, 0], "x": 2, "y": 41, "flags": 8}, + {"matrix": [3, 1], "x": 23, "y": 41, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 41, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 41, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 41, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 41, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 41, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 41, "flags": 4}, + {"matrix": [3, 8], "x": 114, "y": 41, "flags": 4}, + {"matrix": [3, 9], "x": 127, "y": 41, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 41, "flags": 4}, + {"matrix": [3, 11], "x": 153, "y": 41, "flags": 4}, + {"matrix": [3, 13], "x": 174, "y": 41, "flags": 1}, + {"matrix": [2, 16], "x": 224, "y": 29, "flags": 4}, + {"matrix": [2, 15], "x": 211, "y": 29, "flags": 4}, + {"matrix": [2, 14], "x": 198, "y": 29, "flags": 4}, + {"matrix": [2, 13], "x": 179, "y": 29, "flags": 4}, + {"matrix": [2, 12], "x": 162, "y": 29, "flags": 4}, + {"matrix": [2, 11], "x": 149, "y": 29, "flags": 4}, + {"matrix": [2, 10], "x": 136, "y": 29, "flags": 4}, + {"matrix": [2, 9], "x": 123, "y": 29, "flags": 4}, + {"matrix": [2, 8], "x": 110, "y": 29, "flags": 4}, + {"matrix": [2, 7], "x": 97, "y": 29, "flags": 4}, + {"matrix": [2, 6], "x": 84, "y": 29, "flags": 4}, + {"matrix": [2, 5], "x": 71, "y": 29, "flags": 4}, + {"matrix": [2, 4], "x": 58, "y": 29, "flags": 4}, + {"matrix": [2, 3], "x": 45, "y": 29, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 29, "flags": 4}, + {"matrix": [2, 1], "x": 19, "y": 29, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 29, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 17, "flags": 4}, + {"matrix": [1, 1], "x": 13, "y": 17, "flags": 4}, + {"matrix": [1, 2], "x": 26, "y": 17, "flags": 4}, + {"matrix": [1, 3], "x": 39, "y": 17, "flags": 4}, + {"matrix": [1, 4], "x": 52, "y": 17, "flags": 4}, + {"matrix": [1, 5], "x": 65, "y": 17, "flags": 4}, + {"matrix": [1, 6], "x": 78, "y": 17, "flags": 4}, + {"matrix": [1, 7], "x": 91, "y": 17, "flags": 4}, + {"matrix": [1, 8], "x": 104, "y": 17, "flags": 4}, + {"matrix": [1, 9], "x": 117, "y": 17, "flags": 4}, + {"matrix": [1, 10], "x": 130, "y": 17, "flags": 4}, + {"matrix": [1, 11], "x": 143, "y": 17, "flags": 4}, + {"matrix": [1, 12], "x": 156, "y": 17, "flags": 4}, + {"matrix": [1, 13], "x": 175, "y": 17, "flags": 1}, + {"matrix": [1, 14], "x": 198, "y": 17, "flags": 4}, + {"matrix": [1, 15], "x": 211, "y": 17, "flags": 4}, + {"matrix": [1, 16], "x": 224, "y": 17, "flags": 4}, + {"matrix": [0, 16], "x": 224, "y": 0, "flags": 4}, + {"matrix": [0, 15], "x": 211, "y": 0, "flags": 8}, + {"matrix": [0, 14], "x": 198, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 182, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 169, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 156, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 143, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 123, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 110, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 97, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 84, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 65, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 52, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 39, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 26, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"x": 1, "y": 6, "flags": 2}, + {"x": 50, "y": 6, "flags": 2}, + {"x": 89, "y": 6, "flags": 2}, + {"x": 135, "y": 6, "flags": 2}, + {"x": 176, "y": 6, "flags": 2}, + {"x": 198, "y": 6, "flags": 2}, + {"x": 221, "y": 55, "flags": 2}, + {"x": 192, "y": 58, "flags": 2}, + {"x": 138, "y": 59, "flags": 2}, + {"x": 96, "y": 61, "flags": 2}, + {"x": 42, "y": 59, "flags": 2}, + {"x": 7, "y": 60, "flags": 2} + ], "max_brightness": 150 }, "matrix_pins": { From 3a29cdbd7d451e470c00b137152794fdfbd8056e Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:01:17 -0600 Subject: [PATCH 27/99] Migrate `g_led_config` to DD (K6) (#25607) --- keyboards/keychron/v6/ansi/ansi.c | 30 ----- keyboards/keychron/v6/ansi/keyboard.json | 112 +++++++++++++++++ .../keychron/v6/ansi_encoder/ansi_encoder.c | 33 ----- .../keychron/v6/ansi_encoder/keyboard.json | 116 ++++++++++++++++- keyboards/keychron/v6/iso/iso.c | 33 ----- keyboards/keychron/v6/iso/keyboard.json | 117 +++++++++++++++++- .../keychron/v6/iso_encoder/iso_encoder.c | 33 ----- .../keychron/v6/iso_encoder/keyboard.json | 117 +++++++++++++++++- keyboards/keychron/v7/ansi/ansi.c | 30 ----- keyboards/keychron/v7/ansi/keyboard.json | 76 ++++++++++++ keyboards/keychron/v7/iso/iso.c | 30 ----- keyboards/keychron/v7/iso/keyboard.json | 77 ++++++++++++ keyboards/keychron/v8/ansi/ansi.c | 30 ----- keyboards/keychron/v8/ansi/keyboard.json | 73 +++++++++++ .../keychron/v8/ansi_encoder/ansi_encoder.c | 30 ----- .../keychron/v8/ansi_encoder/keyboard.json | 73 +++++++++++ keyboards/keychron/v8/iso/iso.c | 30 ----- keyboards/keychron/v8/iso/keyboard.json | 74 +++++++++++ .../keychron/v8/iso_encoder/iso_encoder.c | 30 ----- .../keychron/v8/iso_encoder/keyboard.json | 74 +++++++++++ 20 files changed, 900 insertions(+), 318 deletions(-) diff --git a/keyboards/keychron/v6/ansi/ansi.c b/keyboards/keychron/v6/ansi/ansi.c index 2e055e57af..c8dc8c95c6 100644 --- a/keyboards/keychron/v6/ansi/ansi.c +++ b/keyboards/keychron/v6/ansi/ansi.c @@ -139,34 +139,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB12_CA12, CB10_CA12, CB11_CA12}, {1, CB12_CA9, CB10_CA9, CB11_CA9}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14, 15, 39, 40, 16 }, - { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 17 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 18 }, - { 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, __, 73, 60, 77, 76, 74, 75, 19 }, - { 78, __, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, __, 89, 93, 90, 107, 91, 92, __ }, - { 94, 95, 96, __, __, __, 97, __, __, __, 98, 99, 100, 101, 102, 103, 104, 105, 106, __ }, - }, - { - {0,0}, {21,0}, {31,0}, {42,0}, {52,0}, {68,0}, {78,0}, {89,0}, {99,0}, {115,0}, {125,0}, {136,0}, {146,0}, {159,0}, {169,0}, {180,0}, {193,0}, {203,0}, {214,0}, {224,0}, - {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {63,15}, {73,15}, {83,15}, {94,15}, {104,15}, {115,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, {224,15}, - {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {89,27}, {99,27}, {109,27}, {120,27}, {130,27}, {143,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, - {4,40}, {18,40}, {29,40}, {39,40}, {50,40}, {60,40}, {70,40}, {81,40}, {91,40}, {102,40}, {112,40}, {123,40}, {139,40}, {193,40}, {203,40}, {214,40}, {224,34}, - {7,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {76,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, - {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {145,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64}, {224,58}, - }, - { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 8, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v6/ansi/keyboard.json b/keyboards/keychron/v6/ansi/keyboard.json index e68f3cdec8..6733c196b7 100644 --- a/keyboards/keychron/v6/ansi/keyboard.json +++ b/keyboards/keychron/v6/ansi/keyboard.json @@ -18,6 +18,118 @@ "rgb_matrix": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 21, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 31, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 52, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 68, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 78, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 89, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 99, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 115, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 125, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 136, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 146, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 159, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 180, "y": 0, "flags": 1}, + {"matrix": [0, 19], "x": 193, "y": 0, "flags": 1}, + {"matrix": [1, 19], "x": 203, "y": 0, "flags": 1}, + {"matrix": [2, 19], "x": 214, "y": 0, "flags": 1}, + {"matrix": [3, 19], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 10, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 21, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 31, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 42, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 63, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 83, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 94, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 115, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 125, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 141, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 159, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 169, "y": 15, "flags": 1}, + {"matrix": [1, 16], "x": 180, "y": 15, "flags": 1}, + {"matrix": [1, 17], "x": 193, "y": 15, "flags": 8}, + {"matrix": [1, 18], "x": 203, "y": 15, "flags": 4}, + {"matrix": [0, 17], "x": 214, "y": 15, "flags": 4}, + {"matrix": [0, 18], "x": 224, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 27, "flags": 1}, + {"matrix": [2, 1], "x": 16, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 26, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 36, "y": 27, "flags": 4}, + {"matrix": [2, 4], "x": 47, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 57, "y": 27, "flags": 4}, + {"matrix": [2, 6], "x": 68, "y": 27, "flags": 4}, + {"matrix": [2, 7], "x": 78, "y": 27, "flags": 4}, + {"matrix": [2, 8], "x": 89, "y": 27, "flags": 4}, + {"matrix": [2, 9], "x": 99, "y": 27, "flags": 4}, + {"matrix": [2, 10], "x": 109, "y": 27, "flags": 4}, + {"matrix": [2, 11], "x": 120, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 130, "y": 27, "flags": 4}, + {"matrix": [2, 13], "x": 143, "y": 27, "flags": 4}, + {"matrix": [2, 14], "x": 159, "y": 27, "flags": 1}, + {"matrix": [2, 15], "x": 169, "y": 27, "flags": 1}, + {"matrix": [2, 16], "x": 180, "y": 27, "flags": 1}, + {"matrix": [2, 17], "x": 193, "y": 27, "flags": 4}, + {"matrix": [2, 18], "x": 203, "y": 27, "flags": 4}, + {"matrix": [3, 14], "x": 214, "y": 27, "flags": 4}, + {"matrix": [3, 0], "x": 4, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 18, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 29, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 39, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 50, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 60, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 70, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 81, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 91, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 102, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 112, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 123, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 139, "y": 40, "flags": 1}, + {"matrix": [3, 17], "x": 193, "y": 40, "flags": 4}, + {"matrix": [3, 18], "x": 203, "y": 40, "flags": 4}, + {"matrix": [3, 16], "x": 214, "y": 40, "flags": 4}, + {"matrix": [3, 15], "x": 224, "y": 34, "flags": 4}, + {"matrix": [4, 0], "x": 7, "y": 52, "flags": 1}, + {"matrix": [4, 2], "x": 23, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 34, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 44, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 65, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 76, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 86, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 96, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 117, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 137, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 169, "y": 52, "flags": 1}, + {"matrix": [4, 17], "x": 193, "y": 52, "flags": 4}, + {"matrix": [4, 18], "x": 203, "y": 52, "flags": 4}, + {"matrix": [4, 14], "x": 214, "y": 52, "flags": 4}, + {"matrix": [5, 0], "x": 1, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 27, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 66, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 105, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 118, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 131, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 145, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 159, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 169, "y": 64, "flags": 1}, + {"matrix": [5, 16], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 17], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 18], "x": 214, "y": 64, "flags": 4}, + {"matrix": [4, 16], "x": 224, "y": 58, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_108": { "layout": [ diff --git a/keyboards/keychron/v6/ansi_encoder/ansi_encoder.c b/keyboards/keychron/v6/ansi_encoder/ansi_encoder.c index 1ebf947912..fa08ec41aa 100644 --- a/keyboards/keychron/v6/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/v6/ansi_encoder/ansi_encoder.c @@ -141,37 +141,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB12_CA12, CB10_CA12, CB11_CA12}, {1, CB12_CA9, CB10_CA9, CB11_CA9}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14, 15, 39, 40, 16 }, - { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 17 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 18 }, - { 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, __, 73, 60, 77, 76, 74, 75, 19 }, - { 78, __, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, __, 89, 93, 90, 107, 91, 92, __ }, - { 94, 95, 96, __, __, __, 97, __, __, __, 98, 99, 100, 101, 102, 103, 104, 105, 106, __ }, - }, - { - // LED Index to Physical Position - {0,0}, {13,0}, {24,0}, {34,0}, {45,0}, {57,0}, {68,0}, {78,0}, {89,0}, {102,0}, {112,0}, {123,0}, {133,0}, {159,0}, {169,0}, {180,0}, {193,0}, {203,0}, {214,0}, {224,0}, - {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {63,15}, {73,15}, {83,15}, {94,15}, {104,15}, {115,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, {224,15}, - {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {89,27}, {99,27}, {109,27}, {120,27}, {130,27}, {143,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, - {4,40}, {18,40}, {29,40}, {39,40}, {50,40}, {60,40}, {70,40}, {81,40}, {91,40}, {102,40}, {112,40}, {123,40}, {139,40}, {193,40}, {203,40}, {214,40}, {224,34}, - {7,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {76,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, - {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {145,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64}, {224,58}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 8, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v6/ansi_encoder/keyboard.json b/keyboards/keychron/v6/ansi_encoder/keyboard.json index 6ccc6d415b..3427c3e633 100644 --- a/keyboards/keychron/v6/ansi_encoder/keyboard.json +++ b/keyboards/keychron/v6/ansi_encoder/keyboard.json @@ -8,9 +8,6 @@ "pid": "0x0361", "device_version": "1.0.0" }, - "rgb_matrix": { - "driver": "snled27351" - }, "encoder": { "rotary": [ {"pin_a": "C14", "pin_b": "A2"} @@ -27,6 +24,119 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "driver": "snled27351", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 13, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 24, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 34, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 45, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 57, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 68, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 78, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 89, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 102, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 112, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 123, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 133, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 159, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 180, "y": 0, "flags": 1}, + {"matrix": [0, 19], "x": 193, "y": 0, "flags": 1}, + {"matrix": [1, 19], "x": 203, "y": 0, "flags": 1}, + {"matrix": [2, 19], "x": 214, "y": 0, "flags": 1}, + {"matrix": [3, 19], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 10, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 21, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 31, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 42, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 63, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 83, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 94, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 115, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 125, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 141, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 159, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 169, "y": 15, "flags": 1}, + {"matrix": [1, 16], "x": 180, "y": 15, "flags": 1}, + {"matrix": [1, 17], "x": 193, "y": 15, "flags": 8}, + {"matrix": [1, 18], "x": 203, "y": 15, "flags": 4}, + {"matrix": [0, 17], "x": 214, "y": 15, "flags": 4}, + {"matrix": [0, 18], "x": 224, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 27, "flags": 1}, + {"matrix": [2, 1], "x": 16, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 26, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 36, "y": 27, "flags": 4}, + {"matrix": [2, 4], "x": 47, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 57, "y": 27, "flags": 4}, + {"matrix": [2, 6], "x": 68, "y": 27, "flags": 4}, + {"matrix": [2, 7], "x": 78, "y": 27, "flags": 4}, + {"matrix": [2, 8], "x": 89, "y": 27, "flags": 4}, + {"matrix": [2, 9], "x": 99, "y": 27, "flags": 4}, + {"matrix": [2, 10], "x": 109, "y": 27, "flags": 4}, + {"matrix": [2, 11], "x": 120, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 130, "y": 27, "flags": 4}, + {"matrix": [2, 13], "x": 143, "y": 27, "flags": 4}, + {"matrix": [2, 14], "x": 159, "y": 27, "flags": 1}, + {"matrix": [2, 15], "x": 169, "y": 27, "flags": 1}, + {"matrix": [2, 16], "x": 180, "y": 27, "flags": 1}, + {"matrix": [2, 17], "x": 193, "y": 27, "flags": 4}, + {"matrix": [2, 18], "x": 203, "y": 27, "flags": 4}, + {"matrix": [3, 14], "x": 214, "y": 27, "flags": 4}, + {"matrix": [3, 0], "x": 4, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 18, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 29, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 39, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 50, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 60, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 70, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 81, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 91, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 102, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 112, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 123, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 139, "y": 40, "flags": 1}, + {"matrix": [3, 17], "x": 193, "y": 40, "flags": 4}, + {"matrix": [3, 18], "x": 203, "y": 40, "flags": 4}, + {"matrix": [3, 16], "x": 214, "y": 40, "flags": 4}, + {"matrix": [3, 15], "x": 224, "y": 34, "flags": 4}, + {"matrix": [4, 0], "x": 7, "y": 52, "flags": 1}, + {"matrix": [4, 2], "x": 23, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 34, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 44, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 65, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 76, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 86, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 96, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 117, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 137, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 169, "y": 52, "flags": 1}, + {"matrix": [4, 17], "x": 193, "y": 52, "flags": 4}, + {"matrix": [4, 18], "x": 203, "y": 52, "flags": 4}, + {"matrix": [4, 14], "x": 214, "y": 52, "flags": 4}, + {"matrix": [5, 0], "x": 1, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 27, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 66, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 105, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 118, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 131, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 145, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 159, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 169, "y": 64, "flags": 1}, + {"matrix": [5, 16], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 17], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 18], "x": 214, "y": 64, "flags": 4}, + {"matrix": [4, 16], "x": 224, "y": 58, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_109": { "layout": [ diff --git a/keyboards/keychron/v6/iso/iso.c b/keyboards/keychron/v6/iso/iso.c index cc9dbd8c23..0675e47a3b 100644 --- a/keyboards/keychron/v6/iso/iso.c +++ b/keyboards/keychron/v6/iso/iso.c @@ -142,37 +142,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB12_CA12, CB10_CA12, CB11_CA12}, {1, CB12_CA9, CB10_CA9, CB11_CA9}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14, 15, 39, 40, 16 }, - { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 17 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 73, 54, 55, 56, 57, 58, 18 }, - { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, __, 72, 59, 77, 76, 74, 75, 19 }, - { 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, __, 90, 94, 91, 108, 92, 93, __ }, - { 95, 96, 97, __, __, __, 98, __, __, __, 99, 100, 101, 102, 103, 104, 105, 106, 107, __ }, - }, - { - // LED Index to Physical Position - {0,0}, {21,0}, {31,0}, {42,0}, {52,0}, {68,0}, {78,0}, {89,0}, {99,0}, {115,0}, {125,0}, {136,0}, {146,0}, {159,0}, {169,0}, {180,0}, {193,0}, {203,0}, {214,0}, {224,0}, - {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {63,15}, {73,15}, {83,15}, {94,15}, {104,15}, {115,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, {224,15}, - {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {89,27}, {99,27}, {109,27}, {120,27}, {130,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, - {4,40}, {18,40}, {29,40}, {39,40}, {50,40}, {60,40}, {70,40}, {81,40}, {91,40}, {102,40}, {112,40}, {123,40}, {133,40}, {147,36}, {193,40}, {203,40}, {214,40}, {224,34}, - {1,52}, {13,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {76,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, - {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {145,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64}, {224,58}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 8, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v6/iso/keyboard.json b/keyboards/keychron/v6/iso/keyboard.json index e2f17e4f6e..9310919456 100644 --- a/keyboards/keychron/v6/iso/keyboard.json +++ b/keyboards/keychron/v6/iso/keyboard.json @@ -8,9 +8,6 @@ "pid": "0x0362", "device_version": "1.0.0" }, - "rgb_matrix": { - "driver": "snled27351" - }, "processor": "STM32L432", "bootloader": "stm32-dfu", "features": { @@ -21,6 +18,120 @@ "rgb_matrix": true, "dip_switch": true }, + "rgb_matrix": { + "driver": "snled27351", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 21, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 31, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 52, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 68, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 78, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 89, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 99, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 115, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 125, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 136, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 146, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 159, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 180, "y": 0, "flags": 1}, + {"matrix": [0, 19], "x": 193, "y": 0, "flags": 1}, + {"matrix": [1, 19], "x": 203, "y": 0, "flags": 1}, + {"matrix": [2, 19], "x": 214, "y": 0, "flags": 1}, + {"matrix": [3, 19], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 10, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 21, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 31, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 42, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 63, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 83, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 94, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 115, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 125, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 141, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 159, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 169, "y": 15, "flags": 1}, + {"matrix": [1, 16], "x": 180, "y": 15, "flags": 1}, + {"matrix": [1, 17], "x": 193, "y": 15, "flags": 8}, + {"matrix": [1, 18], "x": 203, "y": 15, "flags": 4}, + {"matrix": [0, 17], "x": 214, "y": 15, "flags": 4}, + {"matrix": [0, 18], "x": 224, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 27, "flags": 1}, + {"matrix": [2, 1], "x": 16, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 26, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 36, "y": 27, "flags": 4}, + {"matrix": [2, 4], "x": 47, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 57, "y": 27, "flags": 4}, + {"matrix": [2, 6], "x": 68, "y": 27, "flags": 4}, + {"matrix": [2, 7], "x": 78, "y": 27, "flags": 4}, + {"matrix": [2, 8], "x": 89, "y": 27, "flags": 4}, + {"matrix": [2, 9], "x": 99, "y": 27, "flags": 4}, + {"matrix": [2, 10], "x": 109, "y": 27, "flags": 4}, + {"matrix": [2, 11], "x": 120, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 130, "y": 27, "flags": 4}, + {"matrix": [2, 14], "x": 159, "y": 27, "flags": 1}, + {"matrix": [2, 15], "x": 169, "y": 27, "flags": 1}, + {"matrix": [2, 16], "x": 180, "y": 27, "flags": 1}, + {"matrix": [2, 17], "x": 193, "y": 27, "flags": 4}, + {"matrix": [2, 18], "x": 203, "y": 27, "flags": 4}, + {"matrix": [3, 14], "x": 214, "y": 27, "flags": 4}, + {"matrix": [3, 0], "x": 4, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 18, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 29, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 39, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 50, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 60, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 70, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 81, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 91, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 102, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 112, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 123, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 133, "y": 40, "flags": 4}, + {"matrix": [2, 13], "x": 147, "y": 36, "flags": 1}, + {"matrix": [3, 17], "x": 193, "y": 40, "flags": 4}, + {"matrix": [3, 18], "x": 203, "y": 40, "flags": 4}, + {"matrix": [3, 16], "x": 214, "y": 40, "flags": 4}, + {"matrix": [3, 15], "x": 224, "y": 34, "flags": 4}, + {"matrix": [4, 0], "x": 1, "y": 52, "flags": 1}, + {"matrix": [4, 1], "x": 13, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 23, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 34, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 44, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 65, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 76, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 86, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 96, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 117, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 137, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 169, "y": 52, "flags": 1}, + {"matrix": [4, 17], "x": 193, "y": 52, "flags": 4}, + {"matrix": [4, 18], "x": 203, "y": 52, "flags": 4}, + {"matrix": [4, 14], "x": 214, "y": 52, "flags": 4}, + {"matrix": [5, 0], "x": 1, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 27, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 66, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 105, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 118, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 131, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 145, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 159, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 169, "y": 64, "flags": 1}, + {"matrix": [5, 16], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 17], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 18], "x": 214, "y": 64, "flags": 4}, + {"matrix": [4, 16], "x": 224, "y": 58, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_109": { "layout": [ diff --git a/keyboards/keychron/v6/iso_encoder/iso_encoder.c b/keyboards/keychron/v6/iso_encoder/iso_encoder.c index f1a8e18acf..0675e47a3b 100644 --- a/keyboards/keychron/v6/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/v6/iso_encoder/iso_encoder.c @@ -142,37 +142,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB12_CA12, CB10_CA12, CB11_CA12}, {1, CB12_CA9, CB10_CA9, CB11_CA9}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14, 15, 39, 40, 16 }, - { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 17 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 73, 54, 55, 56, 57, 58, 18 }, - { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, __, 72, 59, 77, 76, 74, 75, 19 }, - { 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, __, 90, 94, 91, 108, 92, 93, __ }, - { 95, 96, 97, __, __, __, 98, __, __, __, 99, 100, 101, 102, 103, 104, 105, 106, 107, __ }, - }, - { - // LED Index to Physical Position - {0,0}, {13,0}, {24,0}, {34,0}, {45,0}, {57,0}, {68,0}, {78,0}, {89,0}, {102,0}, {112,0}, {123,0}, {133,0}, {159,0}, {169,0}, {180,0}, {193,0}, {203,0}, {214,0}, {224,0}, - {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {63,15}, {73,15}, {83,15}, {94,15}, {104,15}, {115,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, {224,15}, - {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {89,27}, {99,27}, {109,27}, {120,27}, {130,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, - {4,40}, {18,40}, {29,40}, {39,40}, {50,40}, {60,40}, {70,40}, {81,40}, {91,40}, {102,40}, {112,40}, {123,40}, {133,40}, {147,36}, {193,40}, {203,40}, {214,40}, {224,34}, - {1,52}, {13,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {76,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, - {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {145,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64}, {224,58}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 8, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v6/iso_encoder/keyboard.json b/keyboards/keychron/v6/iso_encoder/keyboard.json index d7469b54e0..858c33a692 100644 --- a/keyboards/keychron/v6/iso_encoder/keyboard.json +++ b/keyboards/keychron/v6/iso_encoder/keyboard.json @@ -8,9 +8,6 @@ "pid": "0x0363", "device_version": "1.0.0" }, - "rgb_matrix": { - "driver": "snled27351" - }, "encoder": { "rotary": [ {"pin_a": "C14", "pin_b": "A2"} @@ -27,6 +24,120 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "driver": "snled27351", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 13, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 24, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 34, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 45, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 57, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 68, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 78, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 89, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 102, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 112, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 123, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 133, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 159, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 180, "y": 0, "flags": 1}, + {"matrix": [0, 19], "x": 193, "y": 0, "flags": 1}, + {"matrix": [1, 19], "x": 203, "y": 0, "flags": 1}, + {"matrix": [2, 19], "x": 214, "y": 0, "flags": 1}, + {"matrix": [3, 19], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 10, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 21, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 31, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 42, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 63, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 83, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 94, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 115, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 125, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 141, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 159, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 169, "y": 15, "flags": 1}, + {"matrix": [1, 16], "x": 180, "y": 15, "flags": 1}, + {"matrix": [1, 17], "x": 193, "y": 15, "flags": 8}, + {"matrix": [1, 18], "x": 203, "y": 15, "flags": 4}, + {"matrix": [0, 17], "x": 214, "y": 15, "flags": 4}, + {"matrix": [0, 18], "x": 224, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 27, "flags": 1}, + {"matrix": [2, 1], "x": 16, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 26, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 36, "y": 27, "flags": 4}, + {"matrix": [2, 4], "x": 47, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 57, "y": 27, "flags": 4}, + {"matrix": [2, 6], "x": 68, "y": 27, "flags": 4}, + {"matrix": [2, 7], "x": 78, "y": 27, "flags": 4}, + {"matrix": [2, 8], "x": 89, "y": 27, "flags": 4}, + {"matrix": [2, 9], "x": 99, "y": 27, "flags": 4}, + {"matrix": [2, 10], "x": 109, "y": 27, "flags": 4}, + {"matrix": [2, 11], "x": 120, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 130, "y": 27, "flags": 4}, + {"matrix": [2, 14], "x": 159, "y": 27, "flags": 1}, + {"matrix": [2, 15], "x": 169, "y": 27, "flags": 1}, + {"matrix": [2, 16], "x": 180, "y": 27, "flags": 1}, + {"matrix": [2, 17], "x": 193, "y": 27, "flags": 4}, + {"matrix": [2, 18], "x": 203, "y": 27, "flags": 4}, + {"matrix": [3, 14], "x": 214, "y": 27, "flags": 4}, + {"matrix": [3, 0], "x": 4, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 18, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 29, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 39, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 50, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 60, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 70, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 81, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 91, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 102, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 112, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 123, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 133, "y": 40, "flags": 4}, + {"matrix": [2, 13], "x": 147, "y": 36, "flags": 1}, + {"matrix": [3, 17], "x": 193, "y": 40, "flags": 4}, + {"matrix": [3, 18], "x": 203, "y": 40, "flags": 4}, + {"matrix": [3, 16], "x": 214, "y": 40, "flags": 4}, + {"matrix": [3, 15], "x": 224, "y": 34, "flags": 4}, + {"matrix": [4, 0], "x": 1, "y": 52, "flags": 1}, + {"matrix": [4, 1], "x": 13, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 23, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 34, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 44, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 65, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 76, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 86, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 96, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 117, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 137, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 169, "y": 52, "flags": 1}, + {"matrix": [4, 17], "x": 193, "y": 52, "flags": 4}, + {"matrix": [4, 18], "x": 203, "y": 52, "flags": 4}, + {"matrix": [4, 14], "x": 214, "y": 52, "flags": 4}, + {"matrix": [5, 0], "x": 1, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 27, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 66, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 105, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 118, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 131, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 145, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 159, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 169, "y": 64, "flags": 1}, + {"matrix": [5, 16], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 17], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 18], "x": 214, "y": 64, "flags": 4}, + {"matrix": [4, 16], "x": 224, "y": 58, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_110": { "layout": [ diff --git a/keyboards/keychron/v7/ansi/ansi.c b/keyboards/keychron/v7/ansi/ansi.c index 4d0bedff09..f246a16910 100644 --- a/keyboards/keychron/v7/ansi/ansi.c +++ b/keyboards/keychron/v7/ansi/ansi.c @@ -104,34 +104,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA15, CB4_CA15, CB5_CA15}, {1, CB6_CA16, CB4_CA16, CB5_CA16}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, - { 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, __, 44, 45, 46 }, - { 47, __, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, __, 58, 59, 60 }, - { 61, 62, 63, __, __, __, 64, __, __, 65, 66, 67, 68, 69, 70, 71 }, - }, - { - // LED Index to Physical Position - {0,0}, {14,0}, {28,0}, {42,0}, {56,0}, {70,0}, {84,0}, {98,0}, {112,0}, {126,0}, {140,0}, {154,0}, {168,0}, {189,0}, {210,0}, {224,0}, - {4,16}, {21,16}, {35,16}, {49,16}, {63,16}, {77,16}, {91,16}, {105,16}, {119,16}, {133,16}, {147,16}, {161,16}, {175,16}, {192,16}, {210,16}, {224,16}, - {5,32}, {25,32}, {38,32}, {52,32}, {66,32}, {80,32}, {94,32}, {108,32}, {122,32}, {136,32}, {150,32}, {164,32}, {187,32}, {210,32}, {224,32}, - {9,48}, {32,48}, {45,48}, {59,48}, {73,48}, {87,48}, {101,48}, {115,48}, {129,48}, {143,48}, {157,48}, {184,48}, {210,48}, {224,48}, - {2,64}, {19,64}, {37,64}, {89,64}, {140,64}, {154,64}, {168,64}, {182,64}, {196,64}, {210,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v7/ansi/keyboard.json b/keyboards/keychron/v7/ansi/keyboard.json index 503aea5ab6..0fccc7b336 100644 --- a/keyboards/keychron/v7/ansi/keyboard.json +++ b/keyboards/keychron/v7/ansi/keyboard.json @@ -23,6 +23,82 @@ "diode_direction": "ROW2COL", "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 14, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 28, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 56, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 70, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 84, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 98, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 126, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 140, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 154, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 168, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 189, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 210, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 21, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 35, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 49, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 63, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 77, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 91, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 105, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 119, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 133, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 147, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 161, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 175, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 210, "y": 16, "flags": 1}, + {"matrix": [1, 15], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 5, "y": 32, "flags": 8}, + {"matrix": [2, 1], "x": 25, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 38, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 66, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 94, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 122, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 136, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 150, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 164, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 187, "y": 32, "flags": 1}, + {"matrix": [2, 14], "x": 210, "y": 32, "flags": 1}, + {"matrix": [2, 15], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 45, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 59, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 73, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 87, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 115, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 129, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 143, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 157, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 184, "y": 48, "flags": 1}, + {"matrix": [3, 14], "x": 210, "y": 48, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 19, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 37, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 89, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 140, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 154, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 168, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 182, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 196, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 15], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_72": { "layout": [ diff --git a/keyboards/keychron/v7/iso/iso.c b/keyboards/keychron/v7/iso/iso.c index cdd2d97209..0de3fb4894 100644 --- a/keyboards/keychron/v7/iso/iso.c +++ b/keyboards/keychron/v7/iso/iso.c @@ -105,34 +105,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA15, CB4_CA15, CB5_CA15}, {1, CB6_CA16, CB4_CA16, CB5_CA16}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 44, 29, 30 }, - { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, __, 43, 45, 46 }, - { 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, __, 59, 60, 61 }, - { 62, 63, 64, __, __, __, 65, __, __, 66, 67, 68, 69, 70, 71, 72 }, - }, - { - // LED Index to Physical Position - {0,0}, {14,0}, {28,0}, {42,0}, {56,0}, {70,0}, {84,0}, {98,0}, {112,0}, {126,0}, {140,0}, {154,0}, {168,0}, {189,0}, {210,0}, {224,0}, - {4,16}, {21,16}, {35,16}, {49,16}, {63,16}, {77,16}, {91,16}, {105,16}, {119,16}, {133,16}, {147,16}, {161,16}, {175,16}, {210,16}, {224,16}, - {5,32}, {25,32}, {38,32}, {52,32}, {66,32}, {80,32}, {94,32}, {108,32}, {122,32}, {136,32}, {150,32}, {164,32}, {178,32}, {197,27}, {210,32}, {224,32}, - {2,48}, {18,48}, {32,48}, {45,48}, {59,48}, {73,48}, {87,48}, {101,48}, {115,48}, {129,48}, {143,48}, {157,48}, {184,48}, {210,48}, {224,48}, - {2,64}, {19,64}, {37,64}, {89,64}, {140,64}, {154,64}, {168,64}, {182,64}, {196,64}, {210,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v7/iso/keyboard.json b/keyboards/keychron/v7/iso/keyboard.json index ec4cd06e6b..4e57beb985 100644 --- a/keyboards/keychron/v7/iso/keyboard.json +++ b/keyboards/keychron/v7/iso/keyboard.json @@ -23,6 +23,83 @@ "diode_direction": "ROW2COL", "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 14, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 28, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 56, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 70, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 84, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 98, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 126, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 140, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 154, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 168, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 189, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 210, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 21, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 35, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 49, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 63, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 77, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 91, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 105, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 119, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 133, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 147, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 161, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 175, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 210, "y": 16, "flags": 1}, + {"matrix": [1, 15], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 5, "y": 32, "flags": 8}, + {"matrix": [2, 1], "x": 25, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 38, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 66, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 94, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 122, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 136, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 150, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 164, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 178, "y": 32, "flags": 4}, + {"matrix": [1, 13], "x": 197, "y": 27, "flags": 1}, + {"matrix": [2, 14], "x": 210, "y": 32, "flags": 1}, + {"matrix": [2, 15], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 2, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 18, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 45, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 59, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 73, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 87, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 115, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 129, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 143, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 157, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 184, "y": 48, "flags": 1}, + {"matrix": [3, 14], "x": 210, "y": 48, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 19, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 37, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 89, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 140, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 154, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 168, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 182, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 196, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 15], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_73": { "layout": [ diff --git a/keyboards/keychron/v8/ansi/ansi.c b/keyboards/keychron/v8/ansi/ansi.c index fcc232511f..82c6e533a1 100644 --- a/keyboards/keychron/v8/ansi/ansi.c +++ b/keyboards/keychron/v8/ansi/ansi.c @@ -102,34 +102,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA2, CB4_CA2, CB5_CA2}, {1, CB6_CA1, CB4_CA1, CB5_CA1} }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, __, 36, 37, 38, 39, 40, 41, 42, 43 }, - { 44, __, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 }, - { 58, 59, 60, 61, __, __, 62, 63, 64, 65, __, __, 66, 67, 68 }, - }, - { - // LED Index to Physical Position - {7,1}, {20,1}, {33,0}, {48,3}, {61,6}, {74,8 }, {87,11}, {106,11}, {119,8}, {132,6}, {145,3}, {160,0}, {173,1}, {193,1}, {220,0}, - {7,14}, {24,14}, {39,14}, {52,17}, {65,20}, {78,22}, {103,25}, {116,22}, {129,20}, {142,17}, {155,14}, {170,14}, {183,14}, {200,14}, {222,16}, - {6,27}, {24,27}, {39,28}, {52,30}, {65,33}, {78,36}, {109,37}, {122,34}, {135,32}, {148,29}, {162,27}, {176,27}, {197,27}, {224,29}, - {7,40}, {28,40}, {43,42}, {56,44}, {69,47}, {82,50}, {102,52}, {115,49}, {128,46}, {141,44}, {154,41}, {169,40}, {187,40}, {209,43}, - {0,53}, {17,53}, {42,55}, {65,60}, {86,64}, {107,64}, {131,59}, {156,54}, {196,56}, {209,56}, {222,56}, - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 4, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v8/ansi/keyboard.json b/keyboards/keychron/v8/ansi/keyboard.json index 392783e024..9f54c60c3d 100644 --- a/keyboards/keychron/v8/ansi/keyboard.json +++ b/keyboards/keychron/v8/ansi/keyboard.json @@ -23,6 +23,79 @@ "diode_direction": "ROW2COL", "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 7, "y": 1, "flags": 1}, + {"matrix": [0, 1], "x": 20, "y": 1, "flags": 4}, + {"matrix": [0, 2], "x": 33, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 3, "flags": 4}, + {"matrix": [0, 4], "x": 61, "y": 6, "flags": 4}, + {"matrix": [0, 5], "x": 74, "y": 8, "flags": 4}, + {"matrix": [0, 6], "x": 87, "y": 11, "flags": 4}, + {"matrix": [0, 7], "x": 106, "y": 11, "flags": 4}, + {"matrix": [0, 8], "x": 119, "y": 8, "flags": 4}, + {"matrix": [0, 9], "x": 132, "y": 6, "flags": 4}, + {"matrix": [0, 10], "x": 145, "y": 3, "flags": 4}, + {"matrix": [0, 11], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 173, "y": 1, "flags": 4}, + {"matrix": [0, 13], "x": 193, "y": 1, "flags": 1}, + {"matrix": [0, 14], "x": 220, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 14, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 14, "flags": 4}, + {"matrix": [1, 2], "x": 39, "y": 14, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 17, "flags": 4}, + {"matrix": [1, 4], "x": 65, "y": 20, "flags": 4}, + {"matrix": [1, 5], "x": 78, "y": 22, "flags": 4}, + {"matrix": [1, 6], "x": 103, "y": 25, "flags": 4}, + {"matrix": [1, 7], "x": 116, "y": 22, "flags": 4}, + {"matrix": [1, 8], "x": 129, "y": 20, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 17, "flags": 4}, + {"matrix": [1, 10], "x": 155, "y": 14, "flags": 4}, + {"matrix": [1, 11], "x": 170, "y": 14, "flags": 4}, + {"matrix": [1, 12], "x": 183, "y": 14, "flags": 4}, + {"matrix": [1, 13], "x": 200, "y": 14, "flags": 4}, + {"matrix": [1, 14], "x": 222, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 27, "flags": 8}, + {"matrix": [2, 1], "x": 24, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 39, "y": 28, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 30, "flags": 4}, + {"matrix": [2, 4], "x": 65, "y": 33, "flags": 4}, + {"matrix": [2, 5], "x": 78, "y": 36, "flags": 4}, + {"matrix": [2, 7], "x": 109, "y": 37, "flags": 4}, + {"matrix": [2, 8], "x": 122, "y": 34, "flags": 4}, + {"matrix": [2, 9], "x": 135, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 148, "y": 29, "flags": 4}, + {"matrix": [2, 11], "x": 162, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 176, "y": 27, "flags": 4}, + {"matrix": [2, 13], "x": 197, "y": 27, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 29, "flags": 1}, + {"matrix": [3, 0], "x": 7, "y": 40, "flags": 1}, + {"matrix": [3, 2], "x": 28, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 43, "y": 42, "flags": 4}, + {"matrix": [3, 4], "x": 56, "y": 44, "flags": 4}, + {"matrix": [3, 5], "x": 69, "y": 47, "flags": 4}, + {"matrix": [3, 6], "x": 82, "y": 50, "flags": 4}, + {"matrix": [3, 7], "x": 102, "y": 52, "flags": 4}, + {"matrix": [3, 8], "x": 115, "y": 49, "flags": 4}, + {"matrix": [3, 9], "x": 128, "y": 46, "flags": 4}, + {"matrix": [3, 10], "x": 141, "y": 44, "flags": 4}, + {"matrix": [3, 11], "x": 154, "y": 41, "flags": 4}, + {"matrix": [3, 12], "x": 169, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 187, "y": 40, "flags": 1}, + {"matrix": [3, 14], "x": 209, "y": 43, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 53, "flags": 1}, + {"matrix": [4, 1], "x": 17, "y": 53, "flags": 1}, + {"matrix": [4, 2], "x": 42, "y": 55, "flags": 1}, + {"matrix": [4, 3], "x": 65, "y": 60, "flags": 4}, + {"matrix": [4, 6], "x": 86, "y": 64, "flags": 1}, + {"matrix": [4, 7], "x": 107, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 131, "y": 59, "flags": 4}, + {"matrix": [4, 9], "x": 156, "y": 54, "flags": 1}, + {"matrix": [4, 12], "x": 196, "y": 56, "flags": 1}, + {"matrix": [4, 13], "x": 209, "y": 56, "flags": 1}, + {"matrix": [4, 14], "x": 222, "y": 56, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_69": { "layout": [ diff --git a/keyboards/keychron/v8/ansi_encoder/ansi_encoder.c b/keyboards/keychron/v8/ansi_encoder/ansi_encoder.c index fcc232511f..82c6e533a1 100644 --- a/keyboards/keychron/v8/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/v8/ansi_encoder/ansi_encoder.c @@ -102,34 +102,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA2, CB4_CA2, CB5_CA2}, {1, CB6_CA1, CB4_CA1, CB5_CA1} }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, __, 36, 37, 38, 39, 40, 41, 42, 43 }, - { 44, __, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 }, - { 58, 59, 60, 61, __, __, 62, 63, 64, 65, __, __, 66, 67, 68 }, - }, - { - // LED Index to Physical Position - {7,1}, {20,1}, {33,0}, {48,3}, {61,6}, {74,8 }, {87,11}, {106,11}, {119,8}, {132,6}, {145,3}, {160,0}, {173,1}, {193,1}, {220,0}, - {7,14}, {24,14}, {39,14}, {52,17}, {65,20}, {78,22}, {103,25}, {116,22}, {129,20}, {142,17}, {155,14}, {170,14}, {183,14}, {200,14}, {222,16}, - {6,27}, {24,27}, {39,28}, {52,30}, {65,33}, {78,36}, {109,37}, {122,34}, {135,32}, {148,29}, {162,27}, {176,27}, {197,27}, {224,29}, - {7,40}, {28,40}, {43,42}, {56,44}, {69,47}, {82,50}, {102,52}, {115,49}, {128,46}, {141,44}, {154,41}, {169,40}, {187,40}, {209,43}, - {0,53}, {17,53}, {42,55}, {65,60}, {86,64}, {107,64}, {131,59}, {156,54}, {196,56}, {209,56}, {222,56}, - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 4, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v8/ansi_encoder/keyboard.json b/keyboards/keychron/v8/ansi_encoder/keyboard.json index 6d3257feec..9ea3464084 100644 --- a/keyboards/keychron/v8/ansi_encoder/keyboard.json +++ b/keyboards/keychron/v8/ansi_encoder/keyboard.json @@ -29,6 +29,79 @@ }, "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 7, "y": 1, "flags": 1}, + {"matrix": [0, 1], "x": 20, "y": 1, "flags": 4}, + {"matrix": [0, 2], "x": 33, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 3, "flags": 4}, + {"matrix": [0, 4], "x": 61, "y": 6, "flags": 4}, + {"matrix": [0, 5], "x": 74, "y": 8, "flags": 4}, + {"matrix": [0, 6], "x": 87, "y": 11, "flags": 4}, + {"matrix": [0, 7], "x": 106, "y": 11, "flags": 4}, + {"matrix": [0, 8], "x": 119, "y": 8, "flags": 4}, + {"matrix": [0, 9], "x": 132, "y": 6, "flags": 4}, + {"matrix": [0, 10], "x": 145, "y": 3, "flags": 4}, + {"matrix": [0, 11], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 173, "y": 1, "flags": 4}, + {"matrix": [0, 13], "x": 193, "y": 1, "flags": 1}, + {"matrix": [0, 14], "x": 220, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 14, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 14, "flags": 4}, + {"matrix": [1, 2], "x": 39, "y": 14, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 17, "flags": 4}, + {"matrix": [1, 4], "x": 65, "y": 20, "flags": 4}, + {"matrix": [1, 5], "x": 78, "y": 22, "flags": 4}, + {"matrix": [1, 6], "x": 103, "y": 25, "flags": 4}, + {"matrix": [1, 7], "x": 116, "y": 22, "flags": 4}, + {"matrix": [1, 8], "x": 129, "y": 20, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 17, "flags": 4}, + {"matrix": [1, 10], "x": 155, "y": 14, "flags": 4}, + {"matrix": [1, 11], "x": 170, "y": 14, "flags": 4}, + {"matrix": [1, 12], "x": 183, "y": 14, "flags": 4}, + {"matrix": [1, 13], "x": 200, "y": 14, "flags": 4}, + {"matrix": [1, 14], "x": 222, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 27, "flags": 8}, + {"matrix": [2, 1], "x": 24, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 39, "y": 28, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 30, "flags": 4}, + {"matrix": [2, 4], "x": 65, "y": 33, "flags": 4}, + {"matrix": [2, 5], "x": 78, "y": 36, "flags": 4}, + {"matrix": [2, 7], "x": 109, "y": 37, "flags": 4}, + {"matrix": [2, 8], "x": 122, "y": 34, "flags": 4}, + {"matrix": [2, 9], "x": 135, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 148, "y": 29, "flags": 4}, + {"matrix": [2, 11], "x": 162, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 176, "y": 27, "flags": 4}, + {"matrix": [2, 13], "x": 197, "y": 27, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 29, "flags": 1}, + {"matrix": [3, 0], "x": 7, "y": 40, "flags": 1}, + {"matrix": [3, 2], "x": 28, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 43, "y": 42, "flags": 4}, + {"matrix": [3, 4], "x": 56, "y": 44, "flags": 4}, + {"matrix": [3, 5], "x": 69, "y": 47, "flags": 4}, + {"matrix": [3, 6], "x": 82, "y": 50, "flags": 4}, + {"matrix": [3, 7], "x": 102, "y": 52, "flags": 4}, + {"matrix": [3, 8], "x": 115, "y": 49, "flags": 4}, + {"matrix": [3, 9], "x": 128, "y": 46, "flags": 4}, + {"matrix": [3, 10], "x": 141, "y": 44, "flags": 4}, + {"matrix": [3, 11], "x": 154, "y": 41, "flags": 4}, + {"matrix": [3, 12], "x": 169, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 187, "y": 40, "flags": 1}, + {"matrix": [3, 14], "x": 209, "y": 43, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 53, "flags": 1}, + {"matrix": [4, 1], "x": 17, "y": 53, "flags": 1}, + {"matrix": [4, 2], "x": 42, "y": 55, "flags": 1}, + {"matrix": [4, 3], "x": 65, "y": 60, "flags": 4}, + {"matrix": [4, 6], "x": 86, "y": 64, "flags": 1}, + {"matrix": [4, 7], "x": 107, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 131, "y": 59, "flags": 4}, + {"matrix": [4, 9], "x": 156, "y": 54, "flags": 1}, + {"matrix": [4, 12], "x": 196, "y": 56, "flags": 1}, + {"matrix": [4, 13], "x": 209, "y": 56, "flags": 1}, + {"matrix": [4, 14], "x": 222, "y": 56, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_69": { "layout": [ diff --git a/keyboards/keychron/v8/iso/iso.c b/keyboards/keychron/v8/iso/iso.c index 4658969a10..8a84081a69 100644 --- a/keyboards/keychron/v8/iso/iso.c +++ b/keyboards/keychron/v8/iso/iso.c @@ -102,34 +102,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA2, CB4_CA2, CB5_CA2}, {1, CB6_CA1, CB4_CA1, CB5_CA1} }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 42, 28 }, - { 29, 30, 31, 32, 33, 34, __, 35, 36, 37, 38, 39, 40, 41, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58 }, - { 59, 60, 61, 62, __, __, 63, 64, 65, 66, __, __, 67, 68, 69 }, - }, - { - // LED Index to Physical Position - {7,1}, {20,1}, {33,0}, {48,3}, {61,6}, {74,8}, {87,11}, {106,11}, {119,8}, {132,6}, {145,3}, {160,0}, {173,1}, {193,1}, {220,0}, - {7,14}, {24,14}, {39,14}, {52,17}, {65,19}, {78,22}, {103,25}, {116,22}, {129,20}, {142,17}, {155,14}, {172,14}, {186,14}, {222,16}, - {6,27}, {24,27}, {39,27}, {52,30}, {65,33}, {78,35}, {109,37}, {122,34}, {135,31}, {148,29}, {162,27}, {176,27}, {189,27}, {207,22}, {224,29}, - {0,40}, {15,40}, {28,40}, {43,41}, {56,44}, {69,47}, {82,49}, {102,51}, {115,49}, {128,46}, {141,43}, {154,41}, {169,40}, {187,40}, {209,43}, - {0,52}, {17,52}, {42,54}, {65,59}, {86,63}, {104,64}, {129,59}, {153,54}, {196,56}, {209,56}, {222,59}, - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v8/iso/keyboard.json b/keyboards/keychron/v8/iso/keyboard.json index 0d10662a00..6efda1a4d7 100644 --- a/keyboards/keychron/v8/iso/keyboard.json +++ b/keyboards/keychron/v8/iso/keyboard.json @@ -23,6 +23,80 @@ "diode_direction": "ROW2COL", "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 7, "y": 1, "flags": 1}, + {"matrix": [0, 1], "x": 20, "y": 1, "flags": 4}, + {"matrix": [0, 2], "x": 33, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 3, "flags": 4}, + {"matrix": [0, 4], "x": 61, "y": 6, "flags": 4}, + {"matrix": [0, 5], "x": 74, "y": 8, "flags": 4}, + {"matrix": [0, 6], "x": 87, "y": 11, "flags": 4}, + {"matrix": [0, 7], "x": 106, "y": 11, "flags": 4}, + {"matrix": [0, 8], "x": 119, "y": 8, "flags": 4}, + {"matrix": [0, 9], "x": 132, "y": 6, "flags": 4}, + {"matrix": [0, 10], "x": 145, "y": 3, "flags": 4}, + {"matrix": [0, 11], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 173, "y": 1, "flags": 4}, + {"matrix": [0, 13], "x": 193, "y": 1, "flags": 1}, + {"matrix": [0, 14], "x": 220, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 14, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 14, "flags": 4}, + {"matrix": [1, 2], "x": 39, "y": 14, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 17, "flags": 4}, + {"matrix": [1, 4], "x": 65, "y": 19, "flags": 4}, + {"matrix": [1, 5], "x": 78, "y": 22, "flags": 4}, + {"matrix": [1, 6], "x": 103, "y": 25, "flags": 4}, + {"matrix": [1, 7], "x": 116, "y": 22, "flags": 4}, + {"matrix": [1, 8], "x": 129, "y": 20, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 17, "flags": 4}, + {"matrix": [1, 10], "x": 155, "y": 14, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 14, "flags": 4}, + {"matrix": [1, 12], "x": 186, "y": 14, "flags": 4}, + {"matrix": [1, 14], "x": 222, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 27, "flags": 8}, + {"matrix": [2, 1], "x": 24, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 39, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 30, "flags": 4}, + {"matrix": [2, 4], "x": 65, "y": 33, "flags": 4}, + {"matrix": [2, 5], "x": 78, "y": 35, "flags": 4}, + {"matrix": [2, 7], "x": 109, "y": 37, "flags": 4}, + {"matrix": [2, 8], "x": 122, "y": 34, "flags": 4}, + {"matrix": [2, 9], "x": 135, "y": 31, "flags": 4}, + {"matrix": [2, 10], "x": 148, "y": 29, "flags": 4}, + {"matrix": [2, 11], "x": 162, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 176, "y": 27, "flags": 4}, + {"matrix": [2, 13], "x": 189, "y": 27, "flags": 4}, + {"matrix": [1, 13], "x": 207, "y": 22, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 29, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 40, "flags": 1}, + {"matrix": [3, 1], "x": 15, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 28, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 43, "y": 41, "flags": 4}, + {"matrix": [3, 4], "x": 56, "y": 44, "flags": 4}, + {"matrix": [3, 5], "x": 69, "y": 47, "flags": 4}, + {"matrix": [3, 6], "x": 82, "y": 49, "flags": 4}, + {"matrix": [3, 7], "x": 102, "y": 51, "flags": 4}, + {"matrix": [3, 8], "x": 115, "y": 49, "flags": 4}, + {"matrix": [3, 9], "x": 128, "y": 46, "flags": 4}, + {"matrix": [3, 10], "x": 141, "y": 43, "flags": 4}, + {"matrix": [3, 11], "x": 154, "y": 41, "flags": 4}, + {"matrix": [3, 12], "x": 169, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 187, "y": 40, "flags": 1}, + {"matrix": [3, 14], "x": 209, "y": 43, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 52, "flags": 1}, + {"matrix": [4, 1], "x": 17, "y": 52, "flags": 1}, + {"matrix": [4, 2], "x": 42, "y": 54, "flags": 1}, + {"matrix": [4, 3], "x": 65, "y": 59, "flags": 1}, + {"matrix": [4, 6], "x": 86, "y": 63, "flags": 1}, + {"matrix": [4, 7], "x": 104, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 129, "y": 59, "flags": 1}, + {"matrix": [4, 9], "x": 153, "y": 54, "flags": 1}, + {"matrix": [4, 12], "x": 196, "y": 56, "flags": 1}, + {"matrix": [4, 13], "x": 209, "y": 56, "flags": 1}, + {"matrix": [4, 14], "x": 222, "y": 59, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_70": { "layout": [ diff --git a/keyboards/keychron/v8/iso_encoder/iso_encoder.c b/keyboards/keychron/v8/iso_encoder/iso_encoder.c index 4658969a10..8a84081a69 100644 --- a/keyboards/keychron/v8/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/v8/iso_encoder/iso_encoder.c @@ -102,34 +102,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA2, CB4_CA2, CB5_CA2}, {1, CB6_CA1, CB4_CA1, CB5_CA1} }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 42, 28 }, - { 29, 30, 31, 32, 33, 34, __, 35, 36, 37, 38, 39, 40, 41, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58 }, - { 59, 60, 61, 62, __, __, 63, 64, 65, 66, __, __, 67, 68, 69 }, - }, - { - // LED Index to Physical Position - {7,1}, {20,1}, {33,0}, {48,3}, {61,6}, {74,8}, {87,11}, {106,11}, {119,8}, {132,6}, {145,3}, {160,0}, {173,1}, {193,1}, {220,0}, - {7,14}, {24,14}, {39,14}, {52,17}, {65,19}, {78,22}, {103,25}, {116,22}, {129,20}, {142,17}, {155,14}, {172,14}, {186,14}, {222,16}, - {6,27}, {24,27}, {39,27}, {52,30}, {65,33}, {78,35}, {109,37}, {122,34}, {135,31}, {148,29}, {162,27}, {176,27}, {189,27}, {207,22}, {224,29}, - {0,40}, {15,40}, {28,40}, {43,41}, {56,44}, {69,47}, {82,49}, {102,51}, {115,49}, {128,46}, {141,43}, {154,41}, {169,40}, {187,40}, {209,43}, - {0,52}, {17,52}, {42,54}, {65,59}, {86,63}, {104,64}, {129,59}, {153,54}, {196,56}, {209,56}, {222,59}, - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v8/iso_encoder/keyboard.json b/keyboards/keychron/v8/iso_encoder/keyboard.json index d446d213d4..d3db01d61f 100644 --- a/keyboards/keychron/v8/iso_encoder/keyboard.json +++ b/keyboards/keychron/v8/iso_encoder/keyboard.json @@ -29,6 +29,80 @@ }, "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 7, "y": 1, "flags": 1}, + {"matrix": [0, 1], "x": 20, "y": 1, "flags": 4}, + {"matrix": [0, 2], "x": 33, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 3, "flags": 4}, + {"matrix": [0, 4], "x": 61, "y": 6, "flags": 4}, + {"matrix": [0, 5], "x": 74, "y": 8, "flags": 4}, + {"matrix": [0, 6], "x": 87, "y": 11, "flags": 4}, + {"matrix": [0, 7], "x": 106, "y": 11, "flags": 4}, + {"matrix": [0, 8], "x": 119, "y": 8, "flags": 4}, + {"matrix": [0, 9], "x": 132, "y": 6, "flags": 4}, + {"matrix": [0, 10], "x": 145, "y": 3, "flags": 4}, + {"matrix": [0, 11], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 173, "y": 1, "flags": 4}, + {"matrix": [0, 13], "x": 193, "y": 1, "flags": 1}, + {"matrix": [0, 14], "x": 220, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 14, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 14, "flags": 4}, + {"matrix": [1, 2], "x": 39, "y": 14, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 17, "flags": 4}, + {"matrix": [1, 4], "x": 65, "y": 19, "flags": 4}, + {"matrix": [1, 5], "x": 78, "y": 22, "flags": 4}, + {"matrix": [1, 6], "x": 103, "y": 25, "flags": 4}, + {"matrix": [1, 7], "x": 116, "y": 22, "flags": 4}, + {"matrix": [1, 8], "x": 129, "y": 20, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 17, "flags": 4}, + {"matrix": [1, 10], "x": 155, "y": 14, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 14, "flags": 4}, + {"matrix": [1, 12], "x": 186, "y": 14, "flags": 4}, + {"matrix": [1, 14], "x": 222, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 27, "flags": 8}, + {"matrix": [2, 1], "x": 24, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 39, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 30, "flags": 4}, + {"matrix": [2, 4], "x": 65, "y": 33, "flags": 4}, + {"matrix": [2, 5], "x": 78, "y": 35, "flags": 4}, + {"matrix": [2, 7], "x": 109, "y": 37, "flags": 4}, + {"matrix": [2, 8], "x": 122, "y": 34, "flags": 4}, + {"matrix": [2, 9], "x": 135, "y": 31, "flags": 4}, + {"matrix": [2, 10], "x": 148, "y": 29, "flags": 4}, + {"matrix": [2, 11], "x": 162, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 176, "y": 27, "flags": 4}, + {"matrix": [2, 13], "x": 189, "y": 27, "flags": 4}, + {"matrix": [1, 13], "x": 207, "y": 22, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 29, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 40, "flags": 1}, + {"matrix": [3, 1], "x": 15, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 28, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 43, "y": 41, "flags": 4}, + {"matrix": [3, 4], "x": 56, "y": 44, "flags": 4}, + {"matrix": [3, 5], "x": 69, "y": 47, "flags": 4}, + {"matrix": [3, 6], "x": 82, "y": 49, "flags": 4}, + {"matrix": [3, 7], "x": 102, "y": 51, "flags": 4}, + {"matrix": [3, 8], "x": 115, "y": 49, "flags": 4}, + {"matrix": [3, 9], "x": 128, "y": 46, "flags": 4}, + {"matrix": [3, 10], "x": 141, "y": 43, "flags": 4}, + {"matrix": [3, 11], "x": 154, "y": 41, "flags": 4}, + {"matrix": [3, 12], "x": 169, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 187, "y": 40, "flags": 1}, + {"matrix": [3, 14], "x": 209, "y": 43, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 52, "flags": 1}, + {"matrix": [4, 1], "x": 17, "y": 52, "flags": 1}, + {"matrix": [4, 2], "x": 42, "y": 54, "flags": 1}, + {"matrix": [4, 3], "x": 65, "y": 59, "flags": 1}, + {"matrix": [4, 6], "x": 86, "y": 63, "flags": 1}, + {"matrix": [4, 7], "x": 104, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 129, "y": 59, "flags": 1}, + {"matrix": [4, 9], "x": 153, "y": 54, "flags": 1}, + {"matrix": [4, 12], "x": 196, "y": 56, "flags": 1}, + {"matrix": [4, 13], "x": 209, "y": 56, "flags": 1}, + {"matrix": [4, 14], "x": 222, "y": 59, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_70": { "layout": [ From ceefde5ec853469895b8877c150548182087b3ed Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:02:01 -0600 Subject: [PATCH 28/99] Migrate `g_led_config` to DD (K5) (#25606) --- keyboards/keychron/v3/ansi/ansi.c | 33 ------ keyboards/keychron/v3/ansi/keyboard.json | 91 +++++++++++++++ .../keychron/v3/ansi_encoder/ansi_encoder.c | 33 ------ .../keychron/v3/ansi_encoder/keyboard.json | 91 +++++++++++++++ keyboards/keychron/v3/iso/iso.c | 33 ------ keyboards/keychron/v3/iso/keyboard.json | 92 +++++++++++++++ .../keychron/v3/iso_encoder/iso_encoder.c | 33 ------ .../keychron/v3/iso_encoder/keyboard.json | 92 +++++++++++++++ keyboards/keychron/v3/jis/jis.c | 33 ------ keyboards/keychron/v3/jis/keyboard.json | 95 ++++++++++++++++ .../keychron/v3/jis_encoder/jis_encoder.c | 33 ------ .../keychron/v3/jis_encoder/keyboard.json | 96 ++++++++++++++++ keyboards/keychron/v4/ansi/ansi.c | 30 ----- keyboards/keychron/v4/ansi/keyboard.json | 65 +++++++++++ keyboards/keychron/v4/iso/iso.c | 30 ----- keyboards/keychron/v4/iso/keyboard.json | 66 +++++++++++ keyboards/keychron/v5/ansi/ansi.c | 33 ------ keyboards/keychron/v5/ansi/keyboard.json | 104 +++++++++++++++++ .../keychron/v5/ansi_encoder/ansi_encoder.c | 33 ------ .../keychron/v5/ansi_encoder/keyboard.json | 102 +++++++++++++++++ keyboards/keychron/v5/iso/iso.c | 33 ------ keyboards/keychron/v5/iso/keyboard.json | 105 ++++++++++++++++++ .../keychron/v5/iso_encoder/iso_encoder.c | 33 ------ .../keychron/v5/iso_encoder/keyboard.json | 103 +++++++++++++++++ 24 files changed, 1102 insertions(+), 390 deletions(-) diff --git a/keyboards/keychron/v3/ansi/ansi.c b/keyboards/keychron/v3/ansi/ansi.c index 7c47678619..6f35f14a9a 100644 --- a/keyboards/keychron/v3/ansi/ansi.c +++ b/keyboards/keychron/v3/ansi/ansi.c @@ -118,37 +118,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA16, CB4_CA16, CB5_CA16}, {1, CB3_CA15, CB1_CA15, CB2_CA15}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, - { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48 }, - { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 49, 62, 15, 32 }, - { 63, __, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, __, 74, 86, 75 }, - { 76, 77, 78, __, __, __, 79, __, __, __, 80, 81, 82, 83, 84, 85 }, - }, - { - // LED Index to Physical Position - {0,0}, {26,0}, {39,0}, {52,0}, {65,0}, {85,0}, {98,0}, {111,0}, {124,0}, {143,0}, {156,0}, {169,0}, {182,0}, {198,0}, {211,0}, {224,0}, - {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {176,15}, {198,15}, {211,15}, {224,15}, - {3,28}, {20,28}, {33,28}, {46,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {179,28}, {198,28}, {211,28}, {224,28}, - {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {174,40}, - {8,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {171,52}, {211,52}, - {2,64}, {18,64}, {34,64}, {83,64}, {131,64}, {148,64}, {164,64}, {180,64}, {198,64}, {211,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v3/ansi/keyboard.json b/keyboards/keychron/v3/ansi/keyboard.json index d388456227..59a94564d1 100644 --- a/keyboards/keychron/v3/ansi/keyboard.json +++ b/keyboards/keychron/v3/ansi/keyboard.json @@ -18,6 +18,97 @@ }, "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 26, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 39, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 52, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 65, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 85, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 98, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 111, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 124, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 143, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 156, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 182, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 198, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 211, "y": 0, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 13, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 26, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 39, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 65, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 78, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 91, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 117, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 130, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 143, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 156, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 176, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 198, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 211, "y": 15, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 3, "y": 28, "flags": 1}, + {"matrix": [2, 1], "x": 20, "y": 28, "flags": 4}, + {"matrix": [2, 2], "x": 33, "y": 28, "flags": 4}, + {"matrix": [2, 3], "x": 46, "y": 28, "flags": 4}, + {"matrix": [2, 4], "x": 59, "y": 28, "flags": 4}, + {"matrix": [2, 5], "x": 72, "y": 28, "flags": 4}, + {"matrix": [2, 6], "x": 85, "y": 28, "flags": 4}, + {"matrix": [2, 7], "x": 98, "y": 28, "flags": 4}, + {"matrix": [2, 8], "x": 111, "y": 28, "flags": 4}, + {"matrix": [2, 9], "x": 124, "y": 28, "flags": 4}, + {"matrix": [2, 10], "x": 137, "y": 28, "flags": 4}, + {"matrix": [2, 11], "x": 150, "y": 28, "flags": 4}, + {"matrix": [2, 12], "x": 163, "y": 28, "flags": 4}, + {"matrix": [2, 13], "x": 179, "y": 28, "flags": 4}, + {"matrix": [2, 14], "x": 198, "y": 28, "flags": 1}, + {"matrix": [2, 15], "x": 211, "y": 28, "flags": 1}, + {"matrix": [3, 12], "x": 224, "y": 28, "flags": 1}, + {"matrix": [3, 0], "x": 5, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 23, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 114, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 127, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 153, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 174, "y": 40, "flags": 1}, + {"matrix": [4, 0], "x": 8, "y": 52, "flags": 1}, + {"matrix": [4, 2], "x": 29, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 68, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 81, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 94, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 120, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 133, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 146, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 171, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 211, "y": 52, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 18, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 34, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 83, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 131, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 148, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 164, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 211, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_tkl_ansi": { "layout": [ diff --git a/keyboards/keychron/v3/ansi_encoder/ansi_encoder.c b/keyboards/keychron/v3/ansi_encoder/ansi_encoder.c index d85708937a..d80b9990c4 100644 --- a/keyboards/keychron/v3/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/v3/ansi_encoder/ansi_encoder.c @@ -119,37 +119,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA16, CB4_CA16, CB5_CA16}, {1, CB3_CA15, CB1_CA15, CB2_CA15}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, - { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48 }, - { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 49, 62, 15, 32 }, - { 63, __, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, __, 74, 86, 75 }, - { 76, 77, 78, __, __, __, 79, __, __, __, 80, 81, 82, 83, 84, 85 }, - }, - { - // LED Index to Physical Position - {0,0}, {16,0}, {29,0}, {42,0}, {55,0}, {71,0}, {84,0}, {97,0}, {110,0}, {126,0}, {139,0}, {152,0}, {165,0}, {198,0}, {211,0}, {224,0}, - {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {176,15}, {198,15}, {211,15}, {224,15}, - {3,28}, {19,28}, {32,28}, {45,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {179,28}, {198,28}, {211,28}, {224,28}, - {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {174,40}, - {8,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {171,52}, {211,52}, - {2,64}, {18,64}, {34,64}, {83,64}, {131,64}, {148,64}, {164,64}, {180,64}, {198,64}, {211,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v3/ansi_encoder/keyboard.json b/keyboards/keychron/v3/ansi_encoder/keyboard.json index 5134b47d7e..47f5bff0aa 100644 --- a/keyboards/keychron/v3/ansi_encoder/keyboard.json +++ b/keyboards/keychron/v3/ansi_encoder/keyboard.json @@ -24,6 +24,97 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 29, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 55, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 71, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 84, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 97, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 110, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 126, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 139, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 152, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 165, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 198, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 211, "y": 0, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 13, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 26, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 39, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 65, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 78, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 91, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 117, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 130, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 143, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 156, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 176, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 198, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 211, "y": 15, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 3, "y": 28, "flags": 1}, + {"matrix": [2, 1], "x": 19, "y": 28, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 28, "flags": 4}, + {"matrix": [2, 3], "x": 45, "y": 28, "flags": 4}, + {"matrix": [2, 4], "x": 59, "y": 28, "flags": 4}, + {"matrix": [2, 5], "x": 72, "y": 28, "flags": 4}, + {"matrix": [2, 6], "x": 85, "y": 28, "flags": 4}, + {"matrix": [2, 7], "x": 98, "y": 28, "flags": 4}, + {"matrix": [2, 8], "x": 111, "y": 28, "flags": 4}, + {"matrix": [2, 9], "x": 124, "y": 28, "flags": 4}, + {"matrix": [2, 10], "x": 137, "y": 28, "flags": 4}, + {"matrix": [2, 11], "x": 150, "y": 28, "flags": 4}, + {"matrix": [2, 12], "x": 163, "y": 28, "flags": 4}, + {"matrix": [2, 13], "x": 179, "y": 28, "flags": 4}, + {"matrix": [2, 14], "x": 198, "y": 28, "flags": 1}, + {"matrix": [2, 15], "x": 211, "y": 28, "flags": 1}, + {"matrix": [3, 12], "x": 224, "y": 28, "flags": 1}, + {"matrix": [3, 0], "x": 5, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 23, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 114, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 127, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 153, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 174, "y": 40, "flags": 1}, + {"matrix": [4, 0], "x": 8, "y": 52, "flags": 1}, + {"matrix": [4, 2], "x": 29, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 68, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 81, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 94, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 120, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 133, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 146, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 171, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 211, "y": 52, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 18, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 34, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 83, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 131, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 148, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 164, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 211, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_tkl_f13_ansi": { "layout": [ diff --git a/keyboards/keychron/v3/iso/iso.c b/keyboards/keychron/v3/iso/iso.c index 83798392c6..f8d8e22e10 100644 --- a/keyboards/keychron/v3/iso/iso.c +++ b/keyboards/keychron/v3/iso/iso.c @@ -119,37 +119,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA16, CB4_CA16, CB5_CA16}, {1, CB3_CA15, CB1_CA15, CB2_CA15}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, - { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 62, 46, 47 }, - { 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 48, 61, 15, 32 }, - { 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, __, 75, 87, 76 }, - { 77, 78, 79, __, __, __, 80, __, __, __, 81, 82, 83, 84, 85, 86 }, - }, - { - // LED Index to Physical Position - {0,0}, {26,0}, {39,0}, {52,0}, {65,0}, {84,0}, {97,0}, {111,0}, {124,0}, {143,0}, {156,0}, {169,0}, {182,0}, {198,0}, {211,0}, {224,0}, - {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {176,15}, {198,15}, {211,15}, {224,15}, - {3,28}, {19,28}, {32,28}, {45,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {198,28}, {211,28}, {224,28}, - {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {166,40}, {183,36}, - {2,52}, {16,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {171,52}, {211,52}, - {2,64}, {18,64}, {34,64}, {83,64}, {131,64}, {148,64}, {164,64}, {180,64}, {198,64}, {211,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v3/iso/keyboard.json b/keyboards/keychron/v3/iso/keyboard.json index 40a8139ccc..6bae7e1e7e 100644 --- a/keyboards/keychron/v3/iso/keyboard.json +++ b/keyboards/keychron/v3/iso/keyboard.json @@ -19,6 +19,98 @@ }, "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 26, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 39, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 52, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 65, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 84, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 97, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 111, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 124, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 143, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 156, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 182, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 198, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 211, "y": 0, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 13, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 26, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 39, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 65, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 78, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 91, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 117, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 130, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 143, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 156, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 176, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 198, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 211, "y": 15, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 3, "y": 28, "flags": 1}, + {"matrix": [2, 1], "x": 19, "y": 28, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 28, "flags": 4}, + {"matrix": [2, 3], "x": 45, "y": 28, "flags": 4}, + {"matrix": [2, 4], "x": 59, "y": 28, "flags": 4}, + {"matrix": [2, 5], "x": 72, "y": 28, "flags": 4}, + {"matrix": [2, 6], "x": 85, "y": 28, "flags": 4}, + {"matrix": [2, 7], "x": 98, "y": 28, "flags": 4}, + {"matrix": [2, 8], "x": 111, "y": 28, "flags": 4}, + {"matrix": [2, 9], "x": 124, "y": 28, "flags": 4}, + {"matrix": [2, 10], "x": 137, "y": 28, "flags": 4}, + {"matrix": [2, 11], "x": 150, "y": 28, "flags": 4}, + {"matrix": [2, 12], "x": 163, "y": 28, "flags": 4}, + {"matrix": [2, 14], "x": 198, "y": 28, "flags": 1}, + {"matrix": [2, 15], "x": 211, "y": 28, "flags": 1}, + {"matrix": [3, 12], "x": 224, "y": 28, "flags": 1}, + {"matrix": [3, 0], "x": 5, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 23, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 114, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 127, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 153, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 166, "y": 40, "flags": 4}, + {"matrix": [2, 13], "x": 183, "y": 36, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 52, "flags": 1}, + {"matrix": [4, 1], "x": 16, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 29, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 68, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 81, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 94, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 120, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 133, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 146, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 171, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 211, "y": 52, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 18, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 34, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 83, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 131, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 148, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 164, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 211, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_tkl_iso": { "layout": [ diff --git a/keyboards/keychron/v3/iso_encoder/iso_encoder.c b/keyboards/keychron/v3/iso_encoder/iso_encoder.c index ef0567dbe1..f8d8e22e10 100644 --- a/keyboards/keychron/v3/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/v3/iso_encoder/iso_encoder.c @@ -119,37 +119,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA16, CB4_CA16, CB5_CA16}, {1, CB3_CA15, CB1_CA15, CB2_CA15}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, - { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 62, 46, 47 }, - { 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 48, 61, 15, 32 }, - { 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, __, 75, 87, 76 }, - { 77, 78, 79, __, __, __, 80, __, __, __, 81, 82, 83, 84, 85, 86 }, - }, - { - // LED Index to Physical Position - {0,0}, {16,0}, {29,0}, {42,0}, {55,0}, {71,0}, {84,0}, {97,0}, {110,0}, {126,0}, {139,0}, {152,0}, {165,0}, {198,0}, {211,0}, {224,0}, - {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {176,15}, {198,15}, {211,15}, {224,15}, - {3,28}, {19,28}, {32,28}, {45,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {198,28}, {211,28}, {224,28}, - {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {166,40}, {183,36}, - {2,52}, {16,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {171,52}, {211,52}, - {2,64}, {18,64}, {34,64}, {83,64}, {131,64}, {148,64}, {164,64}, {180,64}, {198,64}, {211,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v3/iso_encoder/keyboard.json b/keyboards/keychron/v3/iso_encoder/keyboard.json index 8b4f0a9d00..6f039c0dff 100644 --- a/keyboards/keychron/v3/iso_encoder/keyboard.json +++ b/keyboards/keychron/v3/iso_encoder/keyboard.json @@ -24,6 +24,98 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 29, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 55, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 71, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 84, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 97, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 110, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 126, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 139, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 152, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 165, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 198, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 211, "y": 0, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 13, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 26, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 39, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 65, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 78, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 91, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 117, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 130, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 143, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 156, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 176, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 198, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 211, "y": 15, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 3, "y": 28, "flags": 1}, + {"matrix": [2, 1], "x": 19, "y": 28, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 28, "flags": 4}, + {"matrix": [2, 3], "x": 45, "y": 28, "flags": 4}, + {"matrix": [2, 4], "x": 59, "y": 28, "flags": 4}, + {"matrix": [2, 5], "x": 72, "y": 28, "flags": 4}, + {"matrix": [2, 6], "x": 85, "y": 28, "flags": 4}, + {"matrix": [2, 7], "x": 98, "y": 28, "flags": 4}, + {"matrix": [2, 8], "x": 111, "y": 28, "flags": 4}, + {"matrix": [2, 9], "x": 124, "y": 28, "flags": 4}, + {"matrix": [2, 10], "x": 137, "y": 28, "flags": 4}, + {"matrix": [2, 11], "x": 150, "y": 28, "flags": 4}, + {"matrix": [2, 12], "x": 163, "y": 28, "flags": 4}, + {"matrix": [2, 14], "x": 198, "y": 28, "flags": 1}, + {"matrix": [2, 15], "x": 211, "y": 28, "flags": 1}, + {"matrix": [3, 12], "x": 224, "y": 28, "flags": 1}, + {"matrix": [3, 0], "x": 5, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 23, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 114, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 127, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 153, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 166, "y": 40, "flags": 4}, + {"matrix": [2, 13], "x": 183, "y": 36, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 52, "flags": 1}, + {"matrix": [4, 1], "x": 16, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 29, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 68, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 81, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 94, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 120, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 133, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 146, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 171, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 211, "y": 52, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 18, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 34, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 83, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 131, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 148, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 164, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 211, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_tkl_f13_iso": { "layout": [ diff --git a/keyboards/keychron/v3/jis/jis.c b/keyboards/keychron/v3/jis/jis.c index c04827dc5d..cec71b83d5 100644 --- a/keyboards/keychron/v3/jis/jis.c +++ b/keyboards/keychron/v3/jis/jis.c @@ -122,37 +122,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA16, CB4_CA16, CB5_CA16}, // Down {1, CB3_CA15, CB1_CA15, CB2_CA15}, // Right }; - -# define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 30, 13, 14 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32 }, - { 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 63, 47, 48 }, - { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 49, 62, 15, 33 }, - { 64, __, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 90, 77 }, - { 78, 79, 80, 81, __, __, 82, __, __, 83, 84, 85, 86, 87, 88, 89 }, - }, - { - // LED Index to Physical Position - {0,0}, {26,0}, {39,0}, {52,0}, {65,0}, {84,0}, {97,0}, {111,0}, {124,0}, {143,0}, {156,0}, {169,0}, {182,0}, {198,0}, {211,0}, {224,0}, - {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {182,15}, {169,15}, {198,15}, {211,15}, {224,15}, - {3,28}, {19,28}, {32,28}, {45,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {198,28}, {211,28}, {224,28}, - {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {166,40}, {183,36}, - {8,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {159,52}, {177,52}, {211,52}, - {2,64}, {16,64}, {31,64}, {45,64}, {81,64}, {119,64}, {135,64}, {151,64}, {166,64}, {180,64}, {198,64}, {211,64}, {224,64} - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, - } -}; - #endif // GB_MATRIX_ENABLE diff --git a/keyboards/keychron/v3/jis/keyboard.json b/keyboards/keychron/v3/jis/keyboard.json index 0bc3a43d0e..526a2e9e27 100644 --- a/keyboards/keychron/v3/jis/keyboard.json +++ b/keyboards/keychron/v3/jis/keyboard.json @@ -18,6 +18,101 @@ }, "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 26, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 39, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 52, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 65, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 84, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 97, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 111, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 124, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 143, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 156, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 182, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 198, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 211, "y": 0, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 13, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 26, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 39, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 65, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 78, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 91, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 117, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 130, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 143, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 156, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 182, "y": 15, "flags": 4}, + {"matrix": [0, 13], "x": 169, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 198, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 211, "y": 15, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 3, "y": 28, "flags": 1}, + {"matrix": [2, 1], "x": 19, "y": 28, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 28, "flags": 4}, + {"matrix": [2, 3], "x": 45, "y": 28, "flags": 4}, + {"matrix": [2, 4], "x": 59, "y": 28, "flags": 4}, + {"matrix": [2, 5], "x": 72, "y": 28, "flags": 4}, + {"matrix": [2, 6], "x": 85, "y": 28, "flags": 4}, + {"matrix": [2, 7], "x": 98, "y": 28, "flags": 4}, + {"matrix": [2, 8], "x": 111, "y": 28, "flags": 4}, + {"matrix": [2, 9], "x": 124, "y": 28, "flags": 4}, + {"matrix": [2, 10], "x": 137, "y": 28, "flags": 4}, + {"matrix": [2, 11], "x": 150, "y": 28, "flags": 4}, + {"matrix": [2, 12], "x": 163, "y": 28, "flags": 4}, + {"matrix": [2, 14], "x": 198, "y": 28, "flags": 1}, + {"matrix": [2, 15], "x": 211, "y": 28, "flags": 1}, + {"matrix": [3, 12], "x": 224, "y": 28, "flags": 1}, + {"matrix": [3, 0], "x": 5, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 23, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 114, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 127, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 153, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 166, "y": 40, "flags": 4}, + {"matrix": [2, 13], "x": 183, "y": 36, "flags": 1}, + {"matrix": [4, 0], "x": 8, "y": 52, "flags": 1}, + {"matrix": [4, 2], "x": 29, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 68, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 81, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 94, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 120, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 133, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 146, "y": 52, "flags": 4}, + {"matrix": [4, 12], "x": 159, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 177, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 211, "y": 52, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 16, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 31, "y": 64, "flags": 1}, + {"matrix": [5, 3], "x": 45, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 81, "y": 64, "flags": 4}, + {"matrix": [5, 9], "x": 119, "y": 64, "flags": 1}, + {"matrix": [5, 10], "x": 135, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 151, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 166, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 211, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_jis_91": { "layout": [ diff --git a/keyboards/keychron/v3/jis_encoder/jis_encoder.c b/keyboards/keychron/v3/jis_encoder/jis_encoder.c index bf2018d86f..6e5b99e1c7 100644 --- a/keyboards/keychron/v3/jis_encoder/jis_encoder.c +++ b/keyboards/keychron/v3/jis_encoder/jis_encoder.c @@ -123,37 +123,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA16, CB4_CA16, CB5_CA16}, // Down {1, CB3_CA15, CB1_CA15, CB2_CA15}, // Right }; - -# define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, - { 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33 }, - { 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 64, 48, 49 }, - { 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 50, 63, 16, 34 }, - { 65, __, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 91, 78 }, - { 79, 80, 81, 82, __, 31, 83, __, __, 84, 85, 86, 87, 88, 89, 90 }, - }, - { - // LED Index to Physical Position - {0,0}, {16,0}, {29,0}, {42,0}, {55,0}, {71,0}, {84,0}, {97,0}, {110,0}, {126,0}, {139,0}, {152,0}, {165,0}, {182,0}, {198,0}, {211,0}, {224,0}, - {0,15}, {13,15}, {26,15}, {39,15}, {52,15}, {65,15}, {78,15}, {91,15}, {104,15}, {117,15}, {130,15}, {143,15}, {156,15}, {169,15}, {182,15}, {198,15}, {211,15}, {224,15}, - {3,28}, {19,28}, {32,28}, {45,28}, {59,28}, {72,28}, {85,28}, {98,28}, {111,28}, {124,28}, {137,28}, {150,28}, {163,28}, {198,28}, {211,28}, {224,28}, - {5,40}, {23,40}, {36,40}, {49,40}, {62,40}, {75,40}, {88,40}, {101,40}, {114,40}, {127,40}, {140,40}, {153,40}, {166,40}, {183,36}, - {8,52}, {29,52}, {42,52}, {55,52}, {68,52}, {81,52}, {94,52}, {107,52}, {120,52}, {133,52}, {146,52}, {159,52}, {177,52}, {211,52}, - {2,64}, {16,64}, {31,64}, {45,64}, {81,64}, {119,64}, {135,64}, {151,64}, {166,64}, {180,64}, {198,64}, {211,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v3/jis_encoder/keyboard.json b/keyboards/keychron/v3/jis_encoder/keyboard.json index ab9d6ab2a7..20613e7672 100644 --- a/keyboards/keychron/v3/jis_encoder/keyboard.json +++ b/keyboards/keychron/v3/jis_encoder/keyboard.json @@ -24,6 +24,102 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 29, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 55, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 71, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 84, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 97, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 110, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 126, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 139, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 152, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 165, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 182, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 198, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 211, "y": 0, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 13, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 26, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 39, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 65, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 78, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 91, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 117, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 130, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 143, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 156, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 169, "y": 15, "flags": 4}, + {"matrix": [5, 5], "x": 182, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 198, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 211, "y": 15, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 3, "y": 28, "flags": 1}, + {"matrix": [2, 1], "x": 19, "y": 28, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 28, "flags": 4}, + {"matrix": [2, 3], "x": 45, "y": 28, "flags": 4}, + {"matrix": [2, 4], "x": 59, "y": 28, "flags": 4}, + {"matrix": [2, 5], "x": 72, "y": 28, "flags": 4}, + {"matrix": [2, 6], "x": 85, "y": 28, "flags": 4}, + {"matrix": [2, 7], "x": 98, "y": 28, "flags": 4}, + {"matrix": [2, 8], "x": 111, "y": 28, "flags": 4}, + {"matrix": [2, 9], "x": 124, "y": 28, "flags": 4}, + {"matrix": [2, 10], "x": 137, "y": 28, "flags": 4}, + {"matrix": [2, 11], "x": 150, "y": 28, "flags": 4}, + {"matrix": [2, 12], "x": 163, "y": 28, "flags": 4}, + {"matrix": [2, 14], "x": 198, "y": 28, "flags": 1}, + {"matrix": [2, 15], "x": 211, "y": 28, "flags": 1}, + {"matrix": [3, 12], "x": 224, "y": 28, "flags": 1}, + {"matrix": [3, 0], "x": 5, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 23, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 114, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 127, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 153, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 166, "y": 40, "flags": 4}, + {"matrix": [2, 13], "x": 183, "y": 36, "flags": 1}, + {"matrix": [4, 0], "x": 8, "y": 52, "flags": 1}, + {"matrix": [4, 2], "x": 29, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 68, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 81, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 94, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 120, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 133, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 146, "y": 52, "flags": 4}, + {"matrix": [4, 12], "x": 159, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 177, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 211, "y": 52, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 16, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 31, "y": 64, "flags": 1}, + {"matrix": [5, 3], "x": 45, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 81, "y": 64, "flags": 4}, + {"matrix": [5, 9], "x": 119, "y": 64, "flags": 1}, + {"matrix": [5, 10], "x": 135, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 151, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 166, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 211, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_jis_92": { "layout": [ diff --git a/keyboards/keychron/v4/ansi/ansi.c b/keyboards/keychron/v4/ansi/ansi.c index 7368144c8d..4f184c7dd6 100644 --- a/keyboards/keychron/v4/ansi/ansi.c +++ b/keyboards/keychron/v4/ansi/ansi.c @@ -93,34 +93,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {0, CB3_CA15, CB1_CA15, CB2_CA15}, {0, CB3_CA16, CB1_CA16, CB2_CA16}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, __, 40 }, - { 41, __, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, __, 52 }, - { 53, 54, 55, __, __, __, 56, __, __, __, 57, 58, 59, 60 }, - }, - { - // LED Index to Physical Position - {0,0}, {16,0}, {32,0}, {48,0}, {64,0}, {81,0}, {97,0}, {113,0}, {129,0}, {145,0}, {161,0}, {177,0}, {193,0}, {218,0}, - {4,16}, {24,16}, {40,16}, {56,16}, {73,16}, {89,16}, {105,16}, {121,16}, {137,16}, {153,16}, {169,16}, {185,16}, {202,16}, {222,16}, - {6,32}, {28,32}, {44,32}, {60,32}, {77,32}, {93,32}, {109,32}, {125,32}, {141,32}, {157,32}, {173,32}, {189,32}, {216,32}, - {10,48}, {36,48}, {52,48}, {69,48}, {85,48}, {101,48}, {117,48}, {133,48}, {149,48}, {165,48}, {181,48}, {212,48}, - {2,64}, {22,64}, {42,64}, {103,64}, {164,64}, {184,64}, {204,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v4/ansi/keyboard.json b/keyboards/keychron/v4/ansi/keyboard.json index 7184e32f27..b80d9d8e25 100644 --- a/keyboards/keychron/v4/ansi/keyboard.json +++ b/keyboards/keychron/v4/ansi/keyboard.json @@ -23,6 +23,71 @@ "diode_direction": "ROW2COL", "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 81, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 97, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 113, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 129, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 145, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 161, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 177, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 193, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 218, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 73, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 89, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 105, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 121, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 137, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 153, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 169, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 185, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 202, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 222, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 8}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 77, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 93, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 109, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 125, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 141, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 157, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 173, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 189, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 216, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 10, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 69, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 85, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 101, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 117, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 133, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 149, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 165, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 181, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 212, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 103, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 164, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 184, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 204, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1} + ] + }, "layout_aliases": { "LAYOUT_ansi_61": "LAYOUT_60_ansi" }, diff --git a/keyboards/keychron/v4/iso/iso.c b/keyboards/keychron/v4/iso/iso.c index dc6a0f44d0..ccea440a47 100644 --- a/keyboards/keychron/v4/iso/iso.c +++ b/keyboards/keychron/v4/iso/iso.c @@ -94,34 +94,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {0, CB3_CA15, CB1_CA15, CB2_CA15}, {0, CB3_CA16, CB1_CA16, CB2_CA16}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 40 }, - { 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, __, 39 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, __, 53 }, - { 54, 55, 56, __, __, __, 57, __, __, __, 58, 59, 60, 61 }, - }, - { - // LED Index to Physical Position - {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {81, 0}, { 97, 0}, {113, 0}, {129, 0}, {145, 0}, {161, 0}, {177, 0}, {193, 0}, {218, 0}, - {4,16}, {24,16}, {40,16}, {56,16}, {73,16}, {89,16}, {105,16}, {121,16}, {137,16}, {153,16}, {169,16}, {185,16}, {202,16}, - {6,32}, {28,32}, {44,32}, {60,32}, {77,32}, {93,32}, {109,32}, {125,32}, {141,32}, {157,32}, {173,32}, {189,32}, {206,32}, {224,24}, - {2,48}, {20,48}, {36,48}, {52,48}, {69,48}, {85,48}, {101,48}, {117,48}, {133,48}, {149,48}, {165,48}, {181,48}, {212,48}, - {2,64}, {22,64}, {42,64}, {103,64}, {164,64}, {184,64}, {204,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v4/iso/keyboard.json b/keyboards/keychron/v4/iso/keyboard.json index 8077844652..0aa111a858 100644 --- a/keyboards/keychron/v4/iso/keyboard.json +++ b/keyboards/keychron/v4/iso/keyboard.json @@ -23,6 +23,72 @@ "diode_direction": "ROW2COL", "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 81, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 97, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 113, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 129, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 145, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 161, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 177, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 193, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 218, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 73, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 89, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 105, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 121, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 137, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 153, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 169, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 185, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 202, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 8}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 77, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 93, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 109, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 125, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 141, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 157, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 173, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 189, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 206, "y": 32, "flags": 4}, + {"matrix": [1, 13], "x": 224, "y": 24, "flags": 1}, + {"matrix": [3, 0], "x": 2, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 20, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 69, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 85, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 101, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 117, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 133, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 149, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 165, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 181, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 212, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 103, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 164, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 184, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 204, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1} + ] + }, "layout_aliases": { "LAYOUT_iso_62": "LAYOUT_60_iso" }, diff --git a/keyboards/keychron/v5/ansi/ansi.c b/keyboards/keychron/v5/ansi/ansi.c index b38d5f508f..9e653f36d1 100644 --- a/keyboards/keychron/v5/ansi/ansi.c +++ b/keyboards/keychron/v5/ansi/ansi.c @@ -133,37 +133,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB12_CA2, CB10_CA2, CB11_CA2}, {1, CB12_CA7, CB10_CA7, CB11_CA7} }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 }, - { 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, __, 33, 34, 35 }, - { 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 70, 51, 52, 53 }, - { 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 18, 66, 36, 67, 68, 69 }, - { 71, __, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, __, 82, 83, 84, 85, 86 }, - { 87, 88, 89, __, __, 99, 90, __, __, __, 91, 92, 93, 94, 95, 96, 97, 98 } - }, - { - // LED Index to Physical Position - {0,0}, {12,0}, {24,0}, {36,0}, {48,0}, {60,0}, {72,0}, {84,0}, {97,0}, {109,0}, {121,0}, {133,0}, {145,0}, {157,0}, {169,0}, {188,0}, {200,0}, {212,0}, {224,0}, - {0,15}, {12,15}, {24,15}, {36,15}, {48,15}, {60,15}, {72,15}, {84,15}, {97,15}, {109,15}, {121,15}, {133,15}, {145,15}, {163,15}, {188,15}, {200,15}, {212,15}, {224,15}, - {3,26}, {18,26}, {30,26}, {42,26}, {54,26}, {66,26}, {78,26}, {91,26}, {103,26}, {115,26}, {127,26}, {139,26}, {151,26}, {166,26}, {188,26}, {200,26}, {212,26}, - {5,38}, {21,38}, {33,38}, {45,38}, {57,38}, {69,38}, {81,38}, {94,38}, {106,38}, {118,38}, {130,38}, {142,38}, {161,38}, {188,38}, {200,38}, {212,38}, {224,32}, - {8,49}, {27,49}, {39,49}, {51,49}, {63,49}, {75,49}, {88,49}, {100,49}, {112,49}, {124,49}, {136,49}, {152,49}, {172,52}, {188,49}, {200,49}, {212,49}, - {1,61}, {17,61}, {32,61}, {77,61}, {121,61}, {133,61}, {145,61}, {160,64}, {172,64}, {184,64}, {200,61}, {212,61}, {224,55}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 8, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v5/ansi/keyboard.json b/keyboards/keychron/v5/ansi/keyboard.json index b98302f336..2bf3dfa745 100644 --- a/keyboards/keychron/v5/ansi/keyboard.json +++ b/keyboards/keychron/v5/ansi/keyboard.json @@ -18,6 +18,110 @@ "rgb_matrix": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 12, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 24, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 36, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 48, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 60, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 72, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 84, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 97, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 109, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 121, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 133, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 145, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 157, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 188, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 200, "y": 0, "flags": 1}, + {"matrix": [0, 17], "x": 212, "y": 0, "flags": 1}, + {"matrix": [3, 12], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 12, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 24, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 36, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 48, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 60, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 72, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 84, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 97, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 109, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 121, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 133, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 145, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 163, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 188, "y": 15, "flags": 8}, + {"matrix": [1, 16], "x": 200, "y": 15, "flags": 4}, + {"matrix": [1, 17], "x": 212, "y": 15, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 26, "flags": 1}, + {"matrix": [2, 1], "x": 18, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 30, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 42, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 54, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 66, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 78, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 91, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 103, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 115, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 127, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 139, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 151, "y": 26, "flags": 4}, + {"matrix": [2, 13], "x": 166, "y": 26, "flags": 4}, + {"matrix": [2, 15], "x": 188, "y": 26, "flags": 4}, + {"matrix": [2, 16], "x": 200, "y": 26, "flags": 4}, + {"matrix": [2, 17], "x": 212, "y": 26, "flags": 4}, + {"matrix": [3, 0], "x": 5, "y": 38, "flags": 8}, + {"matrix": [3, 1], "x": 21, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 33, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 45, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 57, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 69, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 81, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 94, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 106, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 118, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 130, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 142, "y": 38, "flags": 4}, + {"matrix": [3, 13], "x": 161, "y": 38, "flags": 1}, + {"matrix": [3, 15], "x": 188, "y": 38, "flags": 4}, + {"matrix": [3, 16], "x": 200, "y": 38, "flags": 4}, + {"matrix": [3, 17], "x": 212, "y": 38, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4}, + {"matrix": [4, 0], "x": 8, "y": 49, "flags": 1}, + {"matrix": [4, 2], "x": 27, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 39, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 51, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 63, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 75, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 88, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 100, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 112, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 124, "y": 49, "flags": 4}, + {"matrix": [4, 11], "x": 136, "y": 49, "flags": 4}, + {"matrix": [4, 13], "x": 152, "y": 49, "flags": 1}, + {"matrix": [4, 14], "x": 172, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 188, "y": 49, "flags": 4}, + {"matrix": [4, 16], "x": 200, "y": 49, "flags": 4}, + {"matrix": [4, 17], "x": 212, "y": 49, "flags": 4}, + {"matrix": [5, 0], "x": 1, "y": 61, "flags": 1}, + {"matrix": [5, 1], "x": 17, "y": 61, "flags": 1}, + {"matrix": [5, 2], "x": 32, "y": 61, "flags": 1}, + {"matrix": [5, 6], "x": 77, "y": 61, "flags": 1}, + {"matrix": [5, 10], "x": 121, "y": 61, "flags": 1}, + {"matrix": [5, 11], "x": 133, "y": 61, "flags": 1}, + {"matrix": [5, 12], "x": 145, "y": 61, "flags": 1}, + {"matrix": [5, 13], "x": 160, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 172, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 184, "y": 64, "flags": 1}, + {"matrix": [5, 16], "x": 200, "y": 61, "flags": 1}, + {"matrix": [5, 17], "x": 212, "y": 61, "flags": 1}, + {"matrix": [5, 5], "x": 224, "y": 55, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_100": { "layout": [ diff --git a/keyboards/keychron/v5/ansi_encoder/ansi_encoder.c b/keyboards/keychron/v5/ansi_encoder/ansi_encoder.c index bc68731d7d..e359d85545 100644 --- a/keyboards/keychron/v5/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/v5/ansi_encoder/ansi_encoder.c @@ -133,37 +133,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB12_CA2, CB10_CA2, CB11_CA2}, {1, CB12_CA7, CB10_CA7, CB11_CA7} }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, __, 1, 2, 3, 4, __, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, - { 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, __, 31, 32, 33 }, - { 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 68, 49, 50, 51 }, - { 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 16, 64, 34, 65, 66, 67 }, - { 69, __, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, __, 80, 81, 82, 83, 84 }, - { 85, 86, 87, __, __, 97, 88, __, __, __, 89, 90, 91, 92, 93, 94, 95, 96 } - }, - { - // LED Index to Physical Position - {0,0}, {24,0}, {36,0}, {48,0}, {60,0}, {78,0}, {90,0}, {103,0}, {115,0}, {133,0}, {145,0}, {157,0}, {169,0}, {184,0}, {196,0}, {208,0}, {224,0}, - {0,15}, {12,15}, {24,15}, {36,15}, {48,15}, {60,15}, {72,15}, {85,15}, {97,15}, {109,15}, {121,15}, {133,15}, {145,15}, {163,15}, {188,15}, {200,15}, {212,15}, {224,15}, - {3,26}, {18,26}, {30,26}, {42,26}, {54,26}, {66,26}, {78,26}, {91,26}, {103,26}, {115,26}, {127,26}, {139,26}, {151,26}, {166,26}, {188,26}, {200,26}, {212,26}, - {5,38}, {21,38}, {33,38}, {45,38}, {57,38}, {69,38}, {81,38}, {94,38}, {106,38}, {118,38}, {130,38}, {142,38}, {161,38}, {188,38}, {200,38}, {212,38}, {224,32}, - {8,49}, {27,49}, {39,49}, {51,49}, {63,49}, {75,49}, {88,49}, {100,49}, {112,49}, {124,49}, {136,49}, {152,49}, {172,52}, {188,49}, {200,49}, {212,49}, - {1,61}, {17,61}, {32,61}, {77,61}, {121,61}, {133,61}, {145,61}, {160,64}, {172,64}, {184,64}, {200,61}, {212,61}, {224,55}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 8, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 4, 4, 4, 1 - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v5/ansi_encoder/keyboard.json b/keyboards/keychron/v5/ansi_encoder/keyboard.json index af61e4a15e..2ed77789e4 100644 --- a/keyboards/keychron/v5/ansi_encoder/keyboard.json +++ b/keyboards/keychron/v5/ansi_encoder/keyboard.json @@ -24,6 +24,108 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 24, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 36, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 48, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 60, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 78, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 90, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 103, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 115, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 133, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 145, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 157, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 184, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 196, "y": 0, "flags": 1}, + {"matrix": [0, 17], "x": 208, "y": 0, "flags": 1}, + {"matrix": [3, 12], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 12, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 24, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 36, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 48, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 60, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 72, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 85, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 97, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 109, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 121, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 133, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 145, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 163, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 188, "y": 15, "flags": 8}, + {"matrix": [1, 16], "x": 200, "y": 15, "flags": 4}, + {"matrix": [1, 17], "x": 212, "y": 15, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 26, "flags": 1}, + {"matrix": [2, 1], "x": 18, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 30, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 42, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 54, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 66, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 78, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 91, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 103, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 115, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 127, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 139, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 151, "y": 26, "flags": 4}, + {"matrix": [2, 13], "x": 166, "y": 26, "flags": 4}, + {"matrix": [2, 15], "x": 188, "y": 26, "flags": 4}, + {"matrix": [2, 16], "x": 200, "y": 26, "flags": 4}, + {"matrix": [2, 17], "x": 212, "y": 26, "flags": 4}, + {"matrix": [3, 0], "x": 5, "y": 38, "flags": 8}, + {"matrix": [3, 1], "x": 21, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 33, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 45, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 57, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 69, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 81, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 94, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 106, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 118, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 130, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 142, "y": 38, "flags": 4}, + {"matrix": [3, 13], "x": 161, "y": 38, "flags": 1}, + {"matrix": [3, 15], "x": 188, "y": 38, "flags": 4}, + {"matrix": [3, 16], "x": 200, "y": 38, "flags": 4}, + {"matrix": [3, 17], "x": 212, "y": 38, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4}, + {"matrix": [4, 0], "x": 8, "y": 49, "flags": 1}, + {"matrix": [4, 2], "x": 27, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 39, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 51, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 63, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 75, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 88, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 100, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 112, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 124, "y": 49, "flags": 4}, + {"matrix": [4, 11], "x": 136, "y": 49, "flags": 4}, + {"matrix": [4, 13], "x": 152, "y": 49, "flags": 1}, + {"matrix": [4, 14], "x": 172, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 188, "y": 49, "flags": 4}, + {"matrix": [4, 16], "x": 200, "y": 49, "flags": 4}, + {"matrix": [4, 17], "x": 212, "y": 49, "flags": 4}, + {"matrix": [5, 0], "x": 1, "y": 61, "flags": 1}, + {"matrix": [5, 1], "x": 17, "y": 61, "flags": 1}, + {"matrix": [5, 2], "x": 32, "y": 61, "flags": 1}, + {"matrix": [5, 6], "x": 77, "y": 61, "flags": 4}, + {"matrix": [5, 10], "x": 121, "y": 61, "flags": 1}, + {"matrix": [5, 11], "x": 133, "y": 61, "flags": 1}, + {"matrix": [5, 12], "x": 145, "y": 61, "flags": 1}, + {"matrix": [5, 13], "x": 160, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 172, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 184, "y": 64, "flags": 4}, + {"matrix": [5, 16], "x": 200, "y": 61, "flags": 4}, + {"matrix": [5, 17], "x": 212, "y": 61, "flags": 4}, + {"matrix": [5, 5], "x": 224, "y": 55, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_98": { "layout": [ diff --git a/keyboards/keychron/v5/iso/iso.c b/keyboards/keychron/v5/iso/iso.c index d8f5ae329c..7b28c70f7e 100644 --- a/keyboards/keychron/v5/iso/iso.c +++ b/keyboards/keychron/v5/iso/iso.c @@ -134,37 +134,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB12_CA2, CB10_CA2, CB11_CA2}, {1, CB12_CA7, CB10_CA7, CB11_CA7} }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 }, - { 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, __, 33, 34, 35 }, - { 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 66, 70, 50, 51, 52 }, - { 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 18, 65, 36, 67, 68, 69 }, - { 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, __, 83, 84, 85, 86, 87 }, - { 88, 89, 90, __, __, 100, 91, __, __, __, 92, 93, 94, 95, 96, 97, 98, 99 }, - }, - { - // LED Index to Physical Position - {0,0}, {12,0}, {24,0}, {36,0}, {48,0}, {60,0}, {72,0}, {85,0}, {97,0}, {109,0}, {121,0}, {133,0}, {145,0}, {157,0}, {169,0}, {188,0}, {200,0}, {212,0}, {224,0}, - {0,15}, {12,15}, {24,15}, {36,15}, {48,15}, {60,15}, {72,15}, {85,15}, {97,15}, {109,15}, {121,15}, {133,15}, {145,15}, {163,15}, {188,15}, {200,15}, {212,15}, {224,15}, - {3,26}, {18,26}, {30,26}, {42,26}, {54,26}, {66,26}, {78,26}, {91,26}, {103,26}, {115,26}, {127,26}, {139,26}, {151,26}, {188,26}, {200,26}, {212,26}, - {5,38}, {21,38}, {33,38}, {45,38}, {57,38}, {69,38}, {81,38}, {94,38}, {106,38}, {118,38}, {130,38}, {142,38}, {154,38}, {170,34}, {188,38}, {200,38}, {212,38}, {224,32}, - {3,49}, {15,49}, {27,49}, {39,49}, {51,49}, {63,49}, {75,49}, {88,49}, {100,49}, {112,49}, {124,49}, {136,49}, {152,49}, {172,52}, {188,49}, {200,49}, {212,49}, - {1,61}, {17,61}, {32,61}, {77,61}, {121,61}, {133,61}, {145,61}, {160,64}, {172,64}, {184,64}, {200,61}, {212,61}, {224,55}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 8, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v5/iso/keyboard.json b/keyboards/keychron/v5/iso/keyboard.json index 7e7280d5ac..c8bc9609f5 100644 --- a/keyboards/keychron/v5/iso/keyboard.json +++ b/keyboards/keychron/v5/iso/keyboard.json @@ -18,6 +18,111 @@ "rgb_matrix": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 12, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 24, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 36, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 48, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 60, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 72, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 85, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 97, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 109, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 121, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 133, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 145, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 157, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 188, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 200, "y": 0, "flags": 1}, + {"matrix": [0, 17], "x": 212, "y": 0, "flags": 1}, + {"matrix": [3, 12], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 12, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 24, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 36, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 48, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 60, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 72, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 85, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 97, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 109, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 121, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 133, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 145, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 163, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 188, "y": 15, "flags": 8}, + {"matrix": [1, 16], "x": 200, "y": 15, "flags": 4}, + {"matrix": [1, 17], "x": 212, "y": 15, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 26, "flags": 1}, + {"matrix": [2, 1], "x": 18, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 30, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 42, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 54, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 66, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 78, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 91, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 103, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 115, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 127, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 139, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 151, "y": 26, "flags": 4}, + {"matrix": [2, 15], "x": 188, "y": 26, "flags": 4}, + {"matrix": [2, 16], "x": 200, "y": 26, "flags": 4}, + {"matrix": [2, 17], "x": 212, "y": 26, "flags": 4}, + {"matrix": [3, 0], "x": 5, "y": 38, "flags": 8}, + {"matrix": [3, 1], "x": 21, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 33, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 45, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 57, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 69, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 81, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 94, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 106, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 118, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 130, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 142, "y": 38, "flags": 4}, + {"matrix": [3, 13], "x": 154, "y": 38, "flags": 4}, + {"matrix": [2, 13], "x": 170, "y": 34, "flags": 1}, + {"matrix": [3, 15], "x": 188, "y": 38, "flags": 4}, + {"matrix": [3, 16], "x": 200, "y": 38, "flags": 4}, + {"matrix": [3, 17], "x": 212, "y": 38, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4}, + {"matrix": [4, 0], "x": 3, "y": 49, "flags": 1}, + {"matrix": [4, 1], "x": 15, "y": 49, "flags": 4}, + {"matrix": [4, 2], "x": 27, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 39, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 51, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 63, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 75, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 88, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 100, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 112, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 124, "y": 49, "flags": 4}, + {"matrix": [4, 11], "x": 136, "y": 49, "flags": 4}, + {"matrix": [4, 13], "x": 152, "y": 49, "flags": 1}, + {"matrix": [4, 14], "x": 172, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 188, "y": 49, "flags": 4}, + {"matrix": [4, 16], "x": 200, "y": 49, "flags": 4}, + {"matrix": [4, 17], "x": 212, "y": 49, "flags": 4}, + {"matrix": [5, 0], "x": 1, "y": 61, "flags": 1}, + {"matrix": [5, 1], "x": 17, "y": 61, "flags": 1}, + {"matrix": [5, 2], "x": 32, "y": 61, "flags": 1}, + {"matrix": [5, 6], "x": 77, "y": 61, "flags": 4}, + {"matrix": [5, 10], "x": 121, "y": 61, "flags": 1}, + {"matrix": [5, 11], "x": 133, "y": 61, "flags": 1}, + {"matrix": [5, 12], "x": 145, "y": 61, "flags": 1}, + {"matrix": [5, 13], "x": 160, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 172, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 184, "y": 64, "flags": 1}, + {"matrix": [5, 16], "x": 200, "y": 61, "flags": 4}, + {"matrix": [5, 17], "x": 212, "y": 61, "flags": 4}, + {"matrix": [5, 5], "x": 224, "y": 55, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_101": { "layout": [ diff --git a/keyboards/keychron/v5/iso_encoder/iso_encoder.c b/keyboards/keychron/v5/iso_encoder/iso_encoder.c index 2d2a458577..005a73d2f9 100644 --- a/keyboards/keychron/v5/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/v5/iso_encoder/iso_encoder.c @@ -132,37 +132,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB12_CA2, CB10_CA2, CB11_CA2}, {1, CB12_CA7, CB10_CA7, CB11_CA7} }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, __, 1, 2, 3, 4, __, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, - { 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, __, 31, 32, 33 }, - { 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 64, 68, 48, 49, 50 }, - { 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 16, 63, 34, 65, 66, 67 }, - { 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, __, 81, 82, 83, 84, 85 }, - { 86, 87, 88, __, __, 98, 89, __, __, __, 90, 91, 92, 93, 94, 95, 96, 97 }, - }, - { - // LED Index to Physical Position - {0,0}, {24,0}, {36,0}, {48,0}, {60,0}, {78,0}, {90,0}, {103,0}, {115,0}, {133,0}, {145,0}, {157,0}, {169,0}, {184,0}, {196,0}, {208,0}, {224,0}, - {0,15}, {12,15}, {24,15}, {36,15}, {48,15}, {60,15}, {72,15}, {85,15}, {97,15}, {109,15}, {121,15}, {133,15}, {145,15}, {163,15}, {188,15}, {200,15}, {212,15}, {224,15}, - {3,26}, {18,26}, {30,26}, {42,26}, {54,26}, {66,26}, {78,26}, {91,26}, {103,26}, {115,26}, {127,26}, {139,26}, {151,26}, {188,26}, {200,26}, {212,26}, - {5,38}, {21,38}, {33,38}, {45,38}, {57,38}, {69,38}, {81,38}, {94,38}, {106,38}, {118,38}, {130,38}, {142,38}, {154,38}, {170,34}, {188,38}, {200,38}, {212,38}, {224,32}, - {3,49}, {15,49}, {27,49}, {39,49}, {51,49}, {63,49}, {75,49}, {88,49}, {100,49}, {112,49}, {124,49}, {136,49}, {152,49}, {172,52}, {188,49}, {200,49}, {212,49}, - {1,61}, {17,61}, {32,61}, {77,61}, {121,61}, {133,61}, {145,61}, {160,64}, {172,64}, {184,64}, {200,61}, {212,61}, {224,55}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 8, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v5/iso_encoder/keyboard.json b/keyboards/keychron/v5/iso_encoder/keyboard.json index dfef0a7be7..d6f1b69445 100644 --- a/keyboards/keychron/v5/iso_encoder/keyboard.json +++ b/keyboards/keychron/v5/iso_encoder/keyboard.json @@ -24,6 +24,109 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 24, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 36, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 48, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 60, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 78, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 90, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 103, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 115, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 133, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 145, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 157, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 184, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 196, "y": 0, "flags": 1}, + {"matrix": [0, 17], "x": 208, "y": 0, "flags": 1}, + {"matrix": [3, 12], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 12, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 24, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 36, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 48, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 60, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 72, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 85, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 97, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 109, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 121, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 133, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 145, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 163, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 188, "y": 15, "flags": 8}, + {"matrix": [1, 16], "x": 200, "y": 15, "flags": 4}, + {"matrix": [1, 17], "x": 212, "y": 15, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 26, "flags": 1}, + {"matrix": [2, 1], "x": 18, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 30, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 42, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 54, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 66, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 78, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 91, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 103, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 115, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 127, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 139, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 151, "y": 26, "flags": 4}, + {"matrix": [2, 15], "x": 188, "y": 26, "flags": 4}, + {"matrix": [2, 16], "x": 200, "y": 26, "flags": 4}, + {"matrix": [2, 17], "x": 212, "y": 26, "flags": 4}, + {"matrix": [3, 0], "x": 5, "y": 38, "flags": 8}, + {"matrix": [3, 1], "x": 21, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 33, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 45, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 57, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 69, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 81, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 94, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 106, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 118, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 130, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 142, "y": 38, "flags": 4}, + {"matrix": [3, 13], "x": 154, "y": 38, "flags": 4}, + {"matrix": [2, 13], "x": 170, "y": 34, "flags": 1}, + {"matrix": [3, 15], "x": 188, "y": 38, "flags": 4}, + {"matrix": [3, 16], "x": 200, "y": 38, "flags": 4}, + {"matrix": [3, 17], "x": 212, "y": 38, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4}, + {"matrix": [4, 0], "x": 3, "y": 49, "flags": 1}, + {"matrix": [4, 1], "x": 15, "y": 49, "flags": 4}, + {"matrix": [4, 2], "x": 27, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 39, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 51, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 63, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 75, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 88, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 100, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 112, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 124, "y": 49, "flags": 4}, + {"matrix": [4, 11], "x": 136, "y": 49, "flags": 4}, + {"matrix": [4, 13], "x": 152, "y": 49, "flags": 1}, + {"matrix": [4, 14], "x": 172, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 188, "y": 49, "flags": 4}, + {"matrix": [4, 16], "x": 200, "y": 49, "flags": 4}, + {"matrix": [4, 17], "x": 212, "y": 49, "flags": 4}, + {"matrix": [5, 0], "x": 1, "y": 61, "flags": 1}, + {"matrix": [5, 1], "x": 17, "y": 61, "flags": 1}, + {"matrix": [5, 2], "x": 32, "y": 61, "flags": 1}, + {"matrix": [5, 6], "x": 77, "y": 61, "flags": 4}, + {"matrix": [5, 10], "x": 121, "y": 61, "flags": 1}, + {"matrix": [5, 11], "x": 133, "y": 61, "flags": 1}, + {"matrix": [5, 12], "x": 145, "y": 61, "flags": 1}, + {"matrix": [5, 13], "x": 160, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 172, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 184, "y": 64, "flags": 1}, + {"matrix": [5, 16], "x": 200, "y": 61, "flags": 4}, + {"matrix": [5, 17], "x": 212, "y": 61, "flags": 4}, + {"matrix": [5, 5], "x": 224, "y": 55, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_99": { "layout": [ From 9cd3080e22097d0679cb15f9757577e2c5728550 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:02:15 -0600 Subject: [PATCH 29/99] Migrate `g_led_config` to DD (K4) (#25605) --- keyboards/keychron/v1/ansi/ansi.c | 33 ------- keyboards/keychron/v1/ansi/keyboard.json | 86 ++++++++++++++++++ .../keychron/v1/ansi_encoder/ansi_encoder.c | 33 ------- .../keychron/v1/ansi_encoder/keyboard.json | 86 ++++++++++++++++++ keyboards/keychron/v1/iso/iso.c | 33 ------- keyboards/keychron/v1/iso/keyboard.json | 87 ++++++++++++++++++ .../keychron/v1/iso_encoder/iso_encoder.c | 33 ------- .../keychron/v1/iso_encoder/keyboard.json | 87 ++++++++++++++++++ keyboards/keychron/v1/jis/jis.c | 33 ------- keyboards/keychron/v1/jis/keyboard.json | 90 +++++++++++++++++++ .../keychron/v1/jis_encoder/jis_encoder.c | 33 ------- .../keychron/v1/jis_encoder/keyboard.json | 90 +++++++++++++++++++ keyboards/keychron/v2/ansi/ansi.c | 30 ------- keyboards/keychron/v2/ansi/keyboard.json | 71 +++++++++++++++ .../keychron/v2/ansi_encoder/ansi_encoder.c | 30 ------- .../keychron/v2/ansi_encoder/keyboard.json | 71 +++++++++++++++ keyboards/keychron/v2/iso/iso.c | 30 ------- keyboards/keychron/v2/iso/keyboard.json | 72 +++++++++++++++ .../keychron/v2/iso_encoder/iso_encoder.c | 29 ------ .../keychron/v2/iso_encoder/keyboard.json | 72 +++++++++++++++ keyboards/keychron/v2/jis/jis.c | 30 ------- keyboards/keychron/v2/jis/keyboard.json | 75 ++++++++++++++++ .../keychron/v2/jis_encoder/jis_encoder.c | 30 ------- .../keychron/v2/jis_encoder/keyboard.json | 75 ++++++++++++++++ 24 files changed, 962 insertions(+), 377 deletions(-) diff --git a/keyboards/keychron/v1/ansi/ansi.c b/keyboards/keychron/v1/ansi/ansi.c index a78d5dd4d7..b3b96c26a4 100644 --- a/keyboards/keychron/v1/ansi/ansi.c +++ b/keyboards/keychron/v1/ansi/ansi.c @@ -115,37 +115,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB3_CA15, CB1_CA15, CB2_CA15}, {1, CB3_CA16, CB1_CA16, CB2_CA16}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, __, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, __, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, __, 44 }, - { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, __, 57, __, 58 }, - { 59, __, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, __, 70, 71, __ }, - { 72, 73, 74, __, __, __, 75, __, __, __, 76, 77, 78, 79, 80, 81 } - }, - { - // LED Index to Physical Position - {0,0}, {18,0}, {33,0}, {48,0}, {62,0}, {81,0}, {95,0}, {110,0}, {125,0}, {143,0}, {158,0}, {173,0}, {187,0}, {206,0}, {224,0}, - {0,15}, {15,15}, {29,15}, {44,15}, {59,15}, {73,15}, {88,15}, {103,15}, {118,15}, {132,15}, {147,15}, {162,15}, {176,15}, {198,15}, {224,15}, - {4,26}, {22,26}, {37,26}, {51,26}, {66,26}, {81,26}, {95,26}, {110,26}, {125,26}, {140,26}, {154,26}, {169,26}, {184,26}, {202,26}, {224,26}, - {6,38}, {26,38}, {40,38}, {55,38}, {70,38}, {84,38}, {99,38}, {114,38}, {129,38}, {143,38}, {158,38}, {173,38}, {196,38}, {224,38}, - {9,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {151,49}, {165,49}, {185,49}, {209,52}, - {2,61}, {20,61}, {39,61}, {94,61}, {147,61}, {162,61}, {176,61}, {195,64}, {209,64}, {224,64} - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v1/ansi/keyboard.json b/keyboards/keychron/v1/ansi/keyboard.json index d4bbca78de..09242fb595 100644 --- a/keyboards/keychron/v1/ansi/keyboard.json +++ b/keyboards/keychron/v1/ansi/keyboard.json @@ -18,6 +18,92 @@ "dip_switch": true, "rgb_matrix": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 18, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 33, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 62, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 81, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 95, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 110, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 125, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 143, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 158, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 173, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 187, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 206, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 15, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 29, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 44, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 59, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 88, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 103, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 118, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 132, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 147, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 162, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 176, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 198, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 4, "y": 26, "flags": 1}, + {"matrix": [2, 1], "x": 22, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 51, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 66, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 81, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 95, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 110, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 125, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 140, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 154, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 169, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 184, "y": 26, "flags": 4}, + {"matrix": [2, 13], "x": 202, "y": 26, "flags": 4}, + {"matrix": [2, 15], "x": 224, "y": 26, "flags": 1}, + {"matrix": [3, 0], "x": 6, "y": 38, "flags": 8}, + {"matrix": [3, 1], "x": 26, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 40, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 55, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 70, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 84, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 99, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 114, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 129, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 143, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 158, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 173, "y": 38, "flags": 4}, + {"matrix": [3, 13], "x": 196, "y": 38, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 38, "flags": 1}, + {"matrix": [4, 0], "x": 9, "y": 49, "flags": 1}, + {"matrix": [4, 2], "x": 33, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 48, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 62, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 77, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 92, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 106, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 121, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 136, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 151, "y": 49, "flags": 4}, + {"matrix": [4, 11], "x": 165, "y": 49, "flags": 4}, + {"matrix": [4, 13], "x": 185, "y": 49, "flags": 1}, + {"matrix": [4, 14], "x": 209, "y": 52, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 61, "flags": 1}, + {"matrix": [5, 1], "x": 20, "y": 61, "flags": 1}, + {"matrix": [5, 2], "x": 39, "y": 61, "flags": 1}, + {"matrix": [5, 6], "x": 94, "y": 61, "flags": 4}, + {"matrix": [5, 10], "x": 147, "y": 61, "flags": 1}, + {"matrix": [5, 11], "x": 162, "y": 61, "flags": 1}, + {"matrix": [5, 12], "x": 176, "y": 61, "flags": 1}, + {"matrix": [5, 13], "x": 195, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 209, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_82": { "layout": [ diff --git a/keyboards/keychron/v1/ansi_encoder/ansi_encoder.c b/keyboards/keychron/v1/ansi_encoder/ansi_encoder.c index a78d5dd4d7..b3b96c26a4 100644 --- a/keyboards/keychron/v1/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/v1/ansi_encoder/ansi_encoder.c @@ -115,37 +115,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB3_CA15, CB1_CA15, CB2_CA15}, {1, CB3_CA16, CB1_CA16, CB2_CA16}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, __, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, __, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, __, 44 }, - { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, __, 57, __, 58 }, - { 59, __, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, __, 70, 71, __ }, - { 72, 73, 74, __, __, __, 75, __, __, __, 76, 77, 78, 79, 80, 81 } - }, - { - // LED Index to Physical Position - {0,0}, {18,0}, {33,0}, {48,0}, {62,0}, {81,0}, {95,0}, {110,0}, {125,0}, {143,0}, {158,0}, {173,0}, {187,0}, {206,0}, {224,0}, - {0,15}, {15,15}, {29,15}, {44,15}, {59,15}, {73,15}, {88,15}, {103,15}, {118,15}, {132,15}, {147,15}, {162,15}, {176,15}, {198,15}, {224,15}, - {4,26}, {22,26}, {37,26}, {51,26}, {66,26}, {81,26}, {95,26}, {110,26}, {125,26}, {140,26}, {154,26}, {169,26}, {184,26}, {202,26}, {224,26}, - {6,38}, {26,38}, {40,38}, {55,38}, {70,38}, {84,38}, {99,38}, {114,38}, {129,38}, {143,38}, {158,38}, {173,38}, {196,38}, {224,38}, - {9,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {151,49}, {165,49}, {185,49}, {209,52}, - {2,61}, {20,61}, {39,61}, {94,61}, {147,61}, {162,61}, {176,61}, {195,64}, {209,64}, {224,64} - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v1/ansi_encoder/keyboard.json b/keyboards/keychron/v1/ansi_encoder/keyboard.json index 62bbeb9d5d..cd62b128a0 100644 --- a/keyboards/keychron/v1/ansi_encoder/keyboard.json +++ b/keyboards/keychron/v1/ansi_encoder/keyboard.json @@ -24,6 +24,92 @@ "dip_switch": true, "rgb_matrix": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 18, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 33, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 62, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 81, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 95, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 110, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 125, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 143, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 158, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 173, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 187, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 206, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 15, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 29, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 44, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 59, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 88, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 103, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 118, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 132, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 147, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 162, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 176, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 198, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 4, "y": 26, "flags": 1}, + {"matrix": [2, 1], "x": 22, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 51, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 66, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 81, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 95, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 110, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 125, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 140, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 154, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 169, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 184, "y": 26, "flags": 4}, + {"matrix": [2, 13], "x": 202, "y": 26, "flags": 4}, + {"matrix": [2, 15], "x": 224, "y": 26, "flags": 1}, + {"matrix": [3, 0], "x": 6, "y": 38, "flags": 8}, + {"matrix": [3, 1], "x": 26, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 40, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 55, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 70, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 84, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 99, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 114, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 129, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 143, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 158, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 173, "y": 38, "flags": 4}, + {"matrix": [3, 13], "x": 196, "y": 38, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 38, "flags": 1}, + {"matrix": [4, 0], "x": 9, "y": 49, "flags": 1}, + {"matrix": [4, 2], "x": 33, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 48, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 62, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 77, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 92, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 106, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 121, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 136, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 151, "y": 49, "flags": 4}, + {"matrix": [4, 11], "x": 165, "y": 49, "flags": 4}, + {"matrix": [4, 13], "x": 185, "y": 49, "flags": 1}, + {"matrix": [4, 14], "x": 209, "y": 52, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 61, "flags": 1}, + {"matrix": [5, 1], "x": 20, "y": 61, "flags": 1}, + {"matrix": [5, 2], "x": 39, "y": 61, "flags": 1}, + {"matrix": [5, 6], "x": 94, "y": 61, "flags": 4}, + {"matrix": [5, 10], "x": 147, "y": 61, "flags": 1}, + {"matrix": [5, 11], "x": 162, "y": 61, "flags": 1}, + {"matrix": [5, 12], "x": 176, "y": 61, "flags": 1}, + {"matrix": [5, 13], "x": 195, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 209, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_82": { "layout": [ diff --git a/keyboards/keychron/v1/iso/iso.c b/keyboards/keychron/v1/iso/iso.c index a1095dcc92..4cb877f918 100644 --- a/keyboards/keychron/v1/iso/iso.c +++ b/keyboards/keychron/v1/iso/iso.c @@ -116,37 +116,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB3_CA15, CB1_CA15, CB2_CA15}, {1, CB3_CA16, CB1_CA16, CB2_CA16}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, __, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, __, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 57, __, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, __, 56, __, 58 }, - { 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, __, 71, 72, __ }, - { 73, 74, 75, __, __, __, 76, __, __, __, 77, 78, 79, 80, 81, 82 } - }, - { - // LED Index to Physical Position - {0,0}, {18,0}, {33,0}, {48,0}, {62,0}, {81,0}, {95,0}, {110,0}, {125,0}, {143,0}, {158,0}, {173,0}, {187,0}, {206,0}, {224,0}, - {0,15}, {15,15}, {29,15}, {44,15}, {59,15}, {73,15}, {88,15}, {103,15}, {118,15}, {132,15}, {147,15}, {162,15}, {176,15}, {198,15}, {224,15}, - {4,26}, {22,26}, {37,26}, {51,26}, {66,26}, {81,26}, {95,26}, {110,26}, {125,26}, {140,26}, {154,26}, {169,26}, {184,26}, {224,26}, - {6,38}, {26,38}, {40,38}, {55,38}, {70,38}, {84,38}, {99,38}, {114,38}, {129,38}, {143,38}, {158,38}, {173,38}, {187,38}, {203,32}, {224,38}, - {2,49}, {18,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {151,49}, {165,49}, {185,49}, {209,52}, - {2,61}, {20,61}, {39,61}, {94,61}, {147,61}, {162,61}, {176,61}, {195,64}, {209,64}, {224,64} - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v1/iso/keyboard.json b/keyboards/keychron/v1/iso/keyboard.json index 6e307ea4df..43376e3077 100644 --- a/keyboards/keychron/v1/iso/keyboard.json +++ b/keyboards/keychron/v1/iso/keyboard.json @@ -18,6 +18,93 @@ "rgb_matrix": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 18, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 33, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 62, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 81, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 95, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 110, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 125, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 143, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 158, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 173, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 187, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 206, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 15, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 29, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 44, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 59, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 88, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 103, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 118, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 132, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 147, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 162, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 176, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 198, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 4, "y": 26, "flags": 1}, + {"matrix": [2, 1], "x": 22, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 51, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 66, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 81, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 95, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 110, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 125, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 140, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 154, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 169, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 184, "y": 26, "flags": 4}, + {"matrix": [2, 15], "x": 224, "y": 26, "flags": 1}, + {"matrix": [3, 0], "x": 6, "y": 38, "flags": 8}, + {"matrix": [3, 1], "x": 26, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 40, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 55, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 70, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 84, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 99, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 114, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 129, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 143, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 158, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 173, "y": 38, "flags": 4}, + {"matrix": [3, 13], "x": 187, "y": 38, "flags": 4}, + {"matrix": [2, 13], "x": 203, "y": 32, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 38, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 49, "flags": 1}, + {"matrix": [4, 1], "x": 18, "y": 49, "flags": 4}, + {"matrix": [4, 2], "x": 33, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 48, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 62, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 77, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 92, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 106, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 121, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 136, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 151, "y": 49, "flags": 4}, + {"matrix": [4, 11], "x": 165, "y": 49, "flags": 4}, + {"matrix": [4, 13], "x": 185, "y": 49, "flags": 1}, + {"matrix": [4, 14], "x": 209, "y": 52, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 61, "flags": 1}, + {"matrix": [5, 1], "x": 20, "y": 61, "flags": 1}, + {"matrix": [5, 2], "x": 39, "y": 61, "flags": 1}, + {"matrix": [5, 6], "x": 94, "y": 61, "flags": 4}, + {"matrix": [5, 10], "x": 147, "y": 61, "flags": 1}, + {"matrix": [5, 11], "x": 162, "y": 61, "flags": 1}, + {"matrix": [5, 12], "x": 176, "y": 61, "flags": 1}, + {"matrix": [5, 13], "x": 195, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 209, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_83": { "layout": [ diff --git a/keyboards/keychron/v1/iso_encoder/iso_encoder.c b/keyboards/keychron/v1/iso_encoder/iso_encoder.c index a1095dcc92..4cb877f918 100644 --- a/keyboards/keychron/v1/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/v1/iso_encoder/iso_encoder.c @@ -116,37 +116,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB3_CA15, CB1_CA15, CB2_CA15}, {1, CB3_CA16, CB1_CA16, CB2_CA16}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, __, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, __, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 57, __, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, __, 56, __, 58 }, - { 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, __, 71, 72, __ }, - { 73, 74, 75, __, __, __, 76, __, __, __, 77, 78, 79, 80, 81, 82 } - }, - { - // LED Index to Physical Position - {0,0}, {18,0}, {33,0}, {48,0}, {62,0}, {81,0}, {95,0}, {110,0}, {125,0}, {143,0}, {158,0}, {173,0}, {187,0}, {206,0}, {224,0}, - {0,15}, {15,15}, {29,15}, {44,15}, {59,15}, {73,15}, {88,15}, {103,15}, {118,15}, {132,15}, {147,15}, {162,15}, {176,15}, {198,15}, {224,15}, - {4,26}, {22,26}, {37,26}, {51,26}, {66,26}, {81,26}, {95,26}, {110,26}, {125,26}, {140,26}, {154,26}, {169,26}, {184,26}, {224,26}, - {6,38}, {26,38}, {40,38}, {55,38}, {70,38}, {84,38}, {99,38}, {114,38}, {129,38}, {143,38}, {158,38}, {173,38}, {187,38}, {203,32}, {224,38}, - {2,49}, {18,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {151,49}, {165,49}, {185,49}, {209,52}, - {2,61}, {20,61}, {39,61}, {94,61}, {147,61}, {162,61}, {176,61}, {195,64}, {209,64}, {224,64} - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v1/iso_encoder/keyboard.json b/keyboards/keychron/v1/iso_encoder/keyboard.json index 077cb045b2..b095d4d436 100644 --- a/keyboards/keychron/v1/iso_encoder/keyboard.json +++ b/keyboards/keychron/v1/iso_encoder/keyboard.json @@ -24,6 +24,93 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 18, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 33, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 62, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 81, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 95, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 110, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 125, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 143, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 158, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 173, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 187, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 206, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 15, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 29, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 44, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 59, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 88, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 103, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 118, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 132, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 147, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 162, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 176, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 198, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 4, "y": 26, "flags": 1}, + {"matrix": [2, 1], "x": 22, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 51, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 66, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 81, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 95, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 110, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 125, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 140, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 154, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 169, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 184, "y": 26, "flags": 4}, + {"matrix": [2, 15], "x": 224, "y": 26, "flags": 1}, + {"matrix": [3, 0], "x": 6, "y": 38, "flags": 8}, + {"matrix": [3, 1], "x": 26, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 40, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 55, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 70, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 84, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 99, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 114, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 129, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 143, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 158, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 173, "y": 38, "flags": 4}, + {"matrix": [3, 13], "x": 187, "y": 38, "flags": 4}, + {"matrix": [2, 13], "x": 203, "y": 32, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 38, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 49, "flags": 1}, + {"matrix": [4, 1], "x": 18, "y": 49, "flags": 4}, + {"matrix": [4, 2], "x": 33, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 48, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 62, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 77, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 92, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 106, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 121, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 136, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 151, "y": 49, "flags": 4}, + {"matrix": [4, 11], "x": 165, "y": 49, "flags": 4}, + {"matrix": [4, 13], "x": 185, "y": 49, "flags": 1}, + {"matrix": [4, 14], "x": 209, "y": 52, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 61, "flags": 1}, + {"matrix": [5, 1], "x": 20, "y": 61, "flags": 1}, + {"matrix": [5, 2], "x": 39, "y": 61, "flags": 1}, + {"matrix": [5, 6], "x": 94, "y": 61, "flags": 4}, + {"matrix": [5, 10], "x": 147, "y": 61, "flags": 1}, + {"matrix": [5, 11], "x": 162, "y": 61, "flags": 1}, + {"matrix": [5, 12], "x": 176, "y": 61, "flags": 1}, + {"matrix": [5, 13], "x": 195, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 209, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_83": { "layout": [ diff --git a/keyboards/keychron/v1/jis/jis.c b/keyboards/keychron/v1/jis/jis.c index d3b3f9aa90..04839ff24a 100644 --- a/keyboards/keychron/v1/jis/jis.c +++ b/keyboards/keychron/v1/jis/jis.c @@ -119,37 +119,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB3_CA15, CB1_CA15, CB2_CA15}, {1, CB3_CA16, CB1_CA16, CB2_CA16}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, __, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 }, - { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 58, __, 44 }, - { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, __, 57, __, 59 }, - { 60, __, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, __ }, - { 74, 75, 76, 77, __, __, 78, __, __, 79, 80, 81, 82, 83, 84, 85 }, - }, - { - // LED Index to Physical Position - {0, 0}, {18, 0}, {33, 0}, {48, 0}, {62, 0}, {81, 0}, {95, 0}, {110, 0}, {125, 0}, {143, 0}, {158, 0}, {173, 0}, {187, 0}, {205, 0}, {224, 0}, - {0, 15}, {15, 15}, {29, 15}, {44, 15}, {59, 15}, {73, 15}, {88, 15}, {103, 15}, {117, 15}, {132, 15}, {147, 15}, {161, 15}, {176, 15}, {191, 15}, {205, 15}, {224, 15}, - {4, 28}, {22, 28}, {37, 28}, {51, 28}, {66, 28}, {81, 28}, {95, 28}, {110, 28}, {125, 28}, {139, 28}, {154, 28}, {169, 28}, {183, 28}, {224, 28}, - {6, 40}, {26, 40}, {40, 40}, {55, 40}, {70, 40}, {84, 40}, {99, 40}, {114, 40}, {128, 40}, {143, 40}, {158, 40}, {172, 40}, {187, 40}, {207, 36}, {224, 40}, - {9, 52}, {33, 52}, {48, 52}, {62, 52}, {77, 52}, {92, 52}, {106, 52}, {121, 52}, {136, 52}, {150, 52}, {165, 52}, {180, 52}, {194, 52}, {209, 52}, - {2, 64}, {18, 64}, {35, 64}, {51, 64}, { 92, 64}, {134, 64}, {150, 64}, {165, 64}, {180, 64}, {194, 64}, {209, 64}, {224, 64}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v1/jis/keyboard.json b/keyboards/keychron/v1/jis/keyboard.json index a6a43a75da..e02699c03c 100644 --- a/keyboards/keychron/v1/jis/keyboard.json +++ b/keyboards/keychron/v1/jis/keyboard.json @@ -18,6 +18,96 @@ "rgb_matrix": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 18, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 33, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 62, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 81, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 95, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 110, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 125, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 143, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 158, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 173, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 187, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 205, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 15, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 29, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 44, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 59, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 88, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 103, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 117, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 132, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 147, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 161, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 176, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 191, "y": 15, "flags": 4}, + {"matrix": [1, 14], "x": 205, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 4, "y": 28, "flags": 1}, + {"matrix": [2, 1], "x": 22, "y": 28, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 28, "flags": 4}, + {"matrix": [2, 3], "x": 51, "y": 28, "flags": 4}, + {"matrix": [2, 4], "x": 66, "y": 28, "flags": 4}, + {"matrix": [2, 5], "x": 81, "y": 28, "flags": 4}, + {"matrix": [2, 6], "x": 95, "y": 28, "flags": 4}, + {"matrix": [2, 7], "x": 110, "y": 28, "flags": 4}, + {"matrix": [2, 8], "x": 125, "y": 28, "flags": 4}, + {"matrix": [2, 9], "x": 139, "y": 28, "flags": 4}, + {"matrix": [2, 10], "x": 154, "y": 28, "flags": 4}, + {"matrix": [2, 11], "x": 169, "y": 28, "flags": 4}, + {"matrix": [2, 12], "x": 183, "y": 28, "flags": 4}, + {"matrix": [2, 15], "x": 224, "y": 28, "flags": 1}, + {"matrix": [3, 0], "x": 6, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 26, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 40, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 55, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 70, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 84, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 99, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 114, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 128, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 143, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 158, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 172, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 187, "y": 40, "flags": 4}, + {"matrix": [2, 13], "x": 207, "y": 36, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 40, "flags": 1}, + {"matrix": [4, 0], "x": 9, "y": 52, "flags": 1}, + {"matrix": [4, 2], "x": 33, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 48, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 62, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 77, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 92, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 106, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 121, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 136, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 150, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 165, "y": 52, "flags": 4}, + {"matrix": [4, 12], "x": 180, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 194, "y": 52, "flags": 1}, + {"matrix": [4, 14], "x": 209, "y": 52, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 18, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 35, "y": 64, "flags": 1}, + {"matrix": [5, 3], "x": 51, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 92, "y": 64, "flags": 4}, + {"matrix": [5, 9], "x": 134, "y": 64, "flags": 1}, + {"matrix": [5, 10], "x": 150, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 165, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 194, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 209, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_jis_86": { "layout": [ diff --git a/keyboards/keychron/v1/jis_encoder/jis_encoder.c b/keyboards/keychron/v1/jis_encoder/jis_encoder.c index d3b3f9aa90..04839ff24a 100644 --- a/keyboards/keychron/v1/jis_encoder/jis_encoder.c +++ b/keyboards/keychron/v1/jis_encoder/jis_encoder.c @@ -119,37 +119,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB3_CA15, CB1_CA15, CB2_CA15}, {1, CB3_CA16, CB1_CA16, CB2_CA16}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, __, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 }, - { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 58, __, 44 }, - { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, __, 57, __, 59 }, - { 60, __, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, __ }, - { 74, 75, 76, 77, __, __, 78, __, __, 79, 80, 81, 82, 83, 84, 85 }, - }, - { - // LED Index to Physical Position - {0, 0}, {18, 0}, {33, 0}, {48, 0}, {62, 0}, {81, 0}, {95, 0}, {110, 0}, {125, 0}, {143, 0}, {158, 0}, {173, 0}, {187, 0}, {205, 0}, {224, 0}, - {0, 15}, {15, 15}, {29, 15}, {44, 15}, {59, 15}, {73, 15}, {88, 15}, {103, 15}, {117, 15}, {132, 15}, {147, 15}, {161, 15}, {176, 15}, {191, 15}, {205, 15}, {224, 15}, - {4, 28}, {22, 28}, {37, 28}, {51, 28}, {66, 28}, {81, 28}, {95, 28}, {110, 28}, {125, 28}, {139, 28}, {154, 28}, {169, 28}, {183, 28}, {224, 28}, - {6, 40}, {26, 40}, {40, 40}, {55, 40}, {70, 40}, {84, 40}, {99, 40}, {114, 40}, {128, 40}, {143, 40}, {158, 40}, {172, 40}, {187, 40}, {207, 36}, {224, 40}, - {9, 52}, {33, 52}, {48, 52}, {62, 52}, {77, 52}, {92, 52}, {106, 52}, {121, 52}, {136, 52}, {150, 52}, {165, 52}, {180, 52}, {194, 52}, {209, 52}, - {2, 64}, {18, 64}, {35, 64}, {51, 64}, { 92, 64}, {134, 64}, {150, 64}, {165, 64}, {180, 64}, {194, 64}, {209, 64}, {224, 64}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v1/jis_encoder/keyboard.json b/keyboards/keychron/v1/jis_encoder/keyboard.json index 4e39e3d4a8..3a89e69153 100644 --- a/keyboards/keychron/v1/jis_encoder/keyboard.json +++ b/keyboards/keychron/v1/jis_encoder/keyboard.json @@ -24,6 +24,96 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 18, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 33, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 62, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 81, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 95, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 110, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 125, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 143, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 158, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 173, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 187, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 205, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 15, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 29, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 44, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 59, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 88, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 103, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 117, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 132, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 147, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 161, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 176, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 191, "y": 15, "flags": 4}, + {"matrix": [1, 14], "x": 205, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 4, "y": 28, "flags": 1}, + {"matrix": [2, 1], "x": 22, "y": 28, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 28, "flags": 4}, + {"matrix": [2, 3], "x": 51, "y": 28, "flags": 4}, + {"matrix": [2, 4], "x": 66, "y": 28, "flags": 4}, + {"matrix": [2, 5], "x": 81, "y": 28, "flags": 4}, + {"matrix": [2, 6], "x": 95, "y": 28, "flags": 4}, + {"matrix": [2, 7], "x": 110, "y": 28, "flags": 4}, + {"matrix": [2, 8], "x": 125, "y": 28, "flags": 4}, + {"matrix": [2, 9], "x": 139, "y": 28, "flags": 4}, + {"matrix": [2, 10], "x": 154, "y": 28, "flags": 4}, + {"matrix": [2, 11], "x": 169, "y": 28, "flags": 4}, + {"matrix": [2, 12], "x": 183, "y": 28, "flags": 4}, + {"matrix": [2, 15], "x": 224, "y": 28, "flags": 1}, + {"matrix": [3, 0], "x": 6, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 26, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 40, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 55, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 70, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 84, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 99, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 114, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 128, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 143, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 158, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 172, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 187, "y": 40, "flags": 4}, + {"matrix": [2, 13], "x": 207, "y": 36, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 40, "flags": 1}, + {"matrix": [4, 0], "x": 9, "y": 52, "flags": 1}, + {"matrix": [4, 2], "x": 33, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 48, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 62, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 77, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 92, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 106, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 121, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 136, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 150, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 165, "y": 52, "flags": 4}, + {"matrix": [4, 12], "x": 180, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 194, "y": 52, "flags": 1}, + {"matrix": [4, 14], "x": 209, "y": 52, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 18, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 35, "y": 64, "flags": 1}, + {"matrix": [5, 3], "x": 51, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 92, "y": 64, "flags": 4}, + {"matrix": [5, 9], "x": 134, "y": 64, "flags": 1}, + {"matrix": [5, 10], "x": 150, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 165, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 194, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 209, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_jis_86": { "layout": [ diff --git a/keyboards/keychron/v2/ansi/ansi.c b/keyboards/keychron/v2/ansi/ansi.c index 722aa27b47..ea92662c59 100644 --- a/keyboards/keychron/v2/ansi/ansi.c +++ b/keyboards/keychron/v2/ansi/ansi.c @@ -99,34 +99,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA15, CB4_CA15, CB5_CA15}, {1, CB6_CA16, CB4_CA16, CB5_CA16}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 65, 42, 43 }, - { 44, __, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, __, 55, 56 }, - { 57, 58, 59, __, __, __, 60, __, __, __, 61, 62, 63, 64, 66 } - }, - { - // LED Index to Physical Position - {0,0}, {15,0}, {29,0}, {44,0}, {59,0}, {73,0}, {88,0}, {103,0}, {118,0}, {132,0}, {147,0}, {162,0}, {176,0}, {198,0}, {224,0}, // {244,-4} - {4,15}, {22,15}, {37,15}, {51,15}, {66,15}, {81,15}, {95,15}, {110,15}, {125,15}, {140,15}, {154,15}, {169,15}, {184,15}, {202,15}, {224,15}, - {6,30}, {26,30}, {40,30}, {55,30}, {70,30}, {84,30}, {99,30}, {114,30}, {129,30}, {143,30}, {158,30}, {173,30}, {196,30}, {224,30}, - {9,45}, {33,45}, {48,45}, {62,45}, {77,45}, {92,45}, {106,45}, {121,45}, {136,45}, {151,45}, {165,45}, {185,45}, {209,49}, - {2,60}, {20,60}, {39,60}, {94,60}, {147,60}, {162,60}, {176,60}, {195,64}, {209,64}, {224,64} - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v2/ansi/keyboard.json b/keyboards/keychron/v2/ansi/keyboard.json index bc09cb8a27..962bcaee98 100644 --- a/keyboards/keychron/v2/ansi/keyboard.json +++ b/keyboards/keychron/v2/ansi/keyboard.json @@ -23,6 +23,77 @@ "diode_direction": "ROW2COL", "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 29, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 44, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 59, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 73, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 88, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 103, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 118, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 132, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 147, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 162, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 198, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 51, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 66, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 81, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 95, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 110, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 125, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 140, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 154, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 169, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 184, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 202, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 30, "flags": 8}, + {"matrix": [2, 1], "x": 26, "y": 30, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 30, "flags": 4}, + {"matrix": [2, 3], "x": 55, "y": 30, "flags": 4}, + {"matrix": [2, 4], "x": 70, "y": 30, "flags": 4}, + {"matrix": [2, 5], "x": 84, "y": 30, "flags": 4}, + {"matrix": [2, 6], "x": 99, "y": 30, "flags": 4}, + {"matrix": [2, 7], "x": 114, "y": 30, "flags": 4}, + {"matrix": [2, 8], "x": 129, "y": 30, "flags": 4}, + {"matrix": [2, 9], "x": 143, "y": 30, "flags": 4}, + {"matrix": [2, 10], "x": 158, "y": 30, "flags": 4}, + {"matrix": [2, 11], "x": 173, "y": 30, "flags": 4}, + {"matrix": [2, 13], "x": 196, "y": 30, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 30, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 45, "flags": 1}, + {"matrix": [3, 2], "x": 33, "y": 45, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 45, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 45, "flags": 4}, + {"matrix": [3, 5], "x": 77, "y": 45, "flags": 4}, + {"matrix": [3, 6], "x": 92, "y": 45, "flags": 4}, + {"matrix": [3, 7], "x": 106, "y": 45, "flags": 4}, + {"matrix": [3, 8], "x": 121, "y": 45, "flags": 4}, + {"matrix": [3, 9], "x": 136, "y": 45, "flags": 4}, + {"matrix": [3, 10], "x": 151, "y": 45, "flags": 4}, + {"matrix": [3, 11], "x": 165, "y": 45, "flags": 4}, + {"matrix": [3, 13], "x": 185, "y": 45, "flags": 1}, + {"matrix": [3, 14], "x": 209, "y": 49, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 60, "flags": 1}, + {"matrix": [4, 1], "x": 20, "y": 60, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 60, "flags": 1}, + {"matrix": [4, 6], "x": 94, "y": 60, "flags": 4}, + {"matrix": [4, 10], "x": 147, "y": 60, "flags": 1}, + {"matrix": [4, 11], "x": 162, "y": 60, "flags": 1}, + {"matrix": [4, 12], "x": 176, "y": 60, "flags": 1}, + {"matrix": [4, 13], "x": 195, "y": 64, "flags": 1}, + {"matrix": [2, 12], "x": 209, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_67": { "layout": [ diff --git a/keyboards/keychron/v2/ansi_encoder/ansi_encoder.c b/keyboards/keychron/v2/ansi_encoder/ansi_encoder.c index 6203483285..ea92662c59 100644 --- a/keyboards/keychron/v2/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/v2/ansi_encoder/ansi_encoder.c @@ -99,34 +99,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA15, CB4_CA15, CB5_CA15}, {1, CB6_CA16, CB4_CA16, CB5_CA16}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 65, 42, 43 }, - { 44, __, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, __, 55, 56 }, - { 57, 58, 59, __, __, __, 60, __, __, __, 61, 62, 63, 64, 66 } - }, - { - // LED Index to Physical Position - {0,0}, {15,0}, {29,0}, {44,0}, {59,0}, {73,0}, {88,0}, {103,0}, {118,0}, {132,0}, {147,0}, {162,0}, {176,0}, {198,0}, {224,0}, // {244,-4} - {4,15}, {22,15}, {37,15}, {51,15}, {66,15}, {81,15}, {95,15}, {110,15}, {125,15}, {140,15}, {154,15}, {169,15}, {184,15}, {202,15}, {224,15}, - {6,30}, {26,30}, {40,30}, {55,30}, {70,30}, {84,30}, {99,30}, {114,30}, {129,30}, {143,30}, {158,30}, {173,30}, {196,30}, {224,30}, - {9,45}, {33,45}, {48,45}, {62,45}, {77,45}, {92,45}, {106,45}, {121,45}, {136,45}, {151,45}, {165,45}, {185,45}, {209,49}, - {2,60}, {20,60}, {39,60}, {94,60}, {147,60}, {162,60}, {176,60}, {195,64}, {209,64}, {224,64} - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v2/ansi_encoder/keyboard.json b/keyboards/keychron/v2/ansi_encoder/keyboard.json index 6752d14b15..42b6814781 100644 --- a/keyboards/keychron/v2/ansi_encoder/keyboard.json +++ b/keyboards/keychron/v2/ansi_encoder/keyboard.json @@ -29,6 +29,77 @@ }, "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 29, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 44, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 59, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 73, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 88, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 103, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 118, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 132, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 147, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 162, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 198, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 51, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 66, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 81, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 95, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 110, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 125, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 140, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 154, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 169, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 184, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 202, "y": 15, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 30, "flags": 8}, + {"matrix": [2, 1], "x": 26, "y": 30, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 30, "flags": 4}, + {"matrix": [2, 3], "x": 55, "y": 30, "flags": 4}, + {"matrix": [2, 4], "x": 70, "y": 30, "flags": 4}, + {"matrix": [2, 5], "x": 84, "y": 30, "flags": 4}, + {"matrix": [2, 6], "x": 99, "y": 30, "flags": 4}, + {"matrix": [2, 7], "x": 114, "y": 30, "flags": 4}, + {"matrix": [2, 8], "x": 129, "y": 30, "flags": 4}, + {"matrix": [2, 9], "x": 143, "y": 30, "flags": 4}, + {"matrix": [2, 10], "x": 158, "y": 30, "flags": 4}, + {"matrix": [2, 11], "x": 173, "y": 30, "flags": 4}, + {"matrix": [2, 13], "x": 196, "y": 30, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 30, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 45, "flags": 1}, + {"matrix": [3, 2], "x": 33, "y": 45, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 45, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 45, "flags": 4}, + {"matrix": [3, 5], "x": 77, "y": 45, "flags": 4}, + {"matrix": [3, 6], "x": 92, "y": 45, "flags": 4}, + {"matrix": [3, 7], "x": 106, "y": 45, "flags": 4}, + {"matrix": [3, 8], "x": 121, "y": 45, "flags": 4}, + {"matrix": [3, 9], "x": 136, "y": 45, "flags": 4}, + {"matrix": [3, 10], "x": 151, "y": 45, "flags": 4}, + {"matrix": [3, 11], "x": 165, "y": 45, "flags": 4}, + {"matrix": [3, 13], "x": 185, "y": 45, "flags": 1}, + {"matrix": [3, 14], "x": 209, "y": 49, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 60, "flags": 1}, + {"matrix": [4, 1], "x": 20, "y": 60, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 60, "flags": 1}, + {"matrix": [4, 6], "x": 94, "y": 60, "flags": 4}, + {"matrix": [4, 10], "x": 147, "y": 60, "flags": 1}, + {"matrix": [4, 11], "x": 162, "y": 60, "flags": 1}, + {"matrix": [4, 12], "x": 176, "y": 60, "flags": 1}, + {"matrix": [4, 13], "x": 195, "y": 64, "flags": 1}, + {"matrix": [2, 12], "x": 209, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_67": { "layout": [ diff --git a/keyboards/keychron/v2/iso/iso.c b/keyboards/keychron/v2/iso/iso.c index aca0879838..b5a5193892 100644 --- a/keyboards/keychron/v2/iso/iso.c +++ b/keyboards/keychron/v2/iso/iso.c @@ -100,34 +100,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA15, CB4_CA15, CB5_CA15}, {1, CB6_CA16, CB4_CA16, CB5_CA16} }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 42, 28 }, - { 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 66, 41, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, __, 56, 57 }, - { 58, 59, 60, __, __, __, 61, __, __, __, 62, 63, 64, 65, 67 } - }, - { - // LED Index to Physical Position - {0,0}, {15,0}, {29,0}, {44,0}, {59,0}, {73,0}, {88,0}, {103,0}, {118,0}, {132,0}, {147,0}, {162,0}, {176,0}, {198,0}, {224,0}, - {4,15}, {22,15}, {37,15}, {51,15}, {66,15}, {81,15}, {95,15}, {110,15}, {125,15}, {140,15}, {154,15}, {169,15}, {184,15}, {224,15}, - {6,30}, {26,30}, {40,30}, {55,30}, {70,30}, {84,30}, {99,30}, {114,30}, {129,30}, {143,30}, {158,30}, {173,30}, {187,30}, {204,23}, {224,30}, - {2,45}, {18,45}, {33,45}, {48,45}, {62,45}, {77,45}, {92,45}, {106,45}, {121,45}, {136,45}, {151,45}, {165,45}, {185,45}, {209,49}, - {2,60}, {20,60}, {39,60}, {94,60}, {147,60}, {162,60}, {176,60}, {195,64}, {209,64}, {224,64} - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v2/iso/keyboard.json b/keyboards/keychron/v2/iso/keyboard.json index 89bdb51a65..f430c50270 100644 --- a/keyboards/keychron/v2/iso/keyboard.json +++ b/keyboards/keychron/v2/iso/keyboard.json @@ -23,6 +23,78 @@ "diode_direction": "ROW2COL", "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 29, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 44, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 59, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 73, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 88, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 103, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 118, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 132, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 147, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 162, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 198, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 51, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 66, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 81, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 95, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 110, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 125, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 140, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 154, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 169, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 184, "y": 15, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 30, "flags": 8}, + {"matrix": [2, 1], "x": 26, "y": 30, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 30, "flags": 4}, + {"matrix": [2, 3], "x": 55, "y": 30, "flags": 4}, + {"matrix": [2, 4], "x": 70, "y": 30, "flags": 4}, + {"matrix": [2, 5], "x": 84, "y": 30, "flags": 4}, + {"matrix": [2, 6], "x": 99, "y": 30, "flags": 4}, + {"matrix": [2, 7], "x": 114, "y": 30, "flags": 4}, + {"matrix": [2, 8], "x": 129, "y": 30, "flags": 4}, + {"matrix": [2, 9], "x": 143, "y": 30, "flags": 4}, + {"matrix": [2, 10], "x": 158, "y": 30, "flags": 4}, + {"matrix": [2, 11], "x": 173, "y": 30, "flags": 4}, + {"matrix": [2, 13], "x": 187, "y": 30, "flags": 4}, + {"matrix": [1, 13], "x": 204, "y": 23, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 30, "flags": 1}, + {"matrix": [3, 0], "x": 2, "y": 45, "flags": 1}, + {"matrix": [3, 1], "x": 18, "y": 45, "flags": 4}, + {"matrix": [3, 2], "x": 33, "y": 45, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 45, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 45, "flags": 4}, + {"matrix": [3, 5], "x": 77, "y": 45, "flags": 4}, + {"matrix": [3, 6], "x": 92, "y": 45, "flags": 4}, + {"matrix": [3, 7], "x": 106, "y": 45, "flags": 4}, + {"matrix": [3, 8], "x": 121, "y": 45, "flags": 4}, + {"matrix": [3, 9], "x": 136, "y": 45, "flags": 4}, + {"matrix": [3, 10], "x": 151, "y": 45, "flags": 4}, + {"matrix": [3, 11], "x": 165, "y": 45, "flags": 4}, + {"matrix": [3, 13], "x": 185, "y": 45, "flags": 1}, + {"matrix": [3, 14], "x": 209, "y": 49, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 60, "flags": 1}, + {"matrix": [4, 1], "x": 20, "y": 60, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 60, "flags": 1}, + {"matrix": [4, 6], "x": 94, "y": 60, "flags": 4}, + {"matrix": [4, 10], "x": 147, "y": 60, "flags": 1}, + {"matrix": [4, 11], "x": 162, "y": 60, "flags": 1}, + {"matrix": [4, 12], "x": 176, "y": 60, "flags": 1}, + {"matrix": [4, 13], "x": 195, "y": 64, "flags": 1}, + {"matrix": [2, 12], "x": 209, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_68": { "layout": [ diff --git a/keyboards/keychron/v2/iso_encoder/iso_encoder.c b/keyboards/keychron/v2/iso_encoder/iso_encoder.c index aca0879838..5911f9d9c1 100644 --- a/keyboards/keychron/v2/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/v2/iso_encoder/iso_encoder.c @@ -101,33 +101,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA16, CB4_CA16, CB5_CA16} }; -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 42, 28 }, - { 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 66, 41, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, __, 56, 57 }, - { 58, 59, 60, __, __, __, 61, __, __, __, 62, 63, 64, 65, 67 } - }, - { - // LED Index to Physical Position - {0,0}, {15,0}, {29,0}, {44,0}, {59,0}, {73,0}, {88,0}, {103,0}, {118,0}, {132,0}, {147,0}, {162,0}, {176,0}, {198,0}, {224,0}, - {4,15}, {22,15}, {37,15}, {51,15}, {66,15}, {81,15}, {95,15}, {110,15}, {125,15}, {140,15}, {154,15}, {169,15}, {184,15}, {224,15}, - {6,30}, {26,30}, {40,30}, {55,30}, {70,30}, {84,30}, {99,30}, {114,30}, {129,30}, {143,30}, {158,30}, {173,30}, {187,30}, {204,23}, {224,30}, - {2,45}, {18,45}, {33,45}, {48,45}, {62,45}, {77,45}, {92,45}, {106,45}, {121,45}, {136,45}, {151,45}, {165,45}, {185,45}, {209,49}, - {2,60}, {20,60}, {39,60}, {94,60}, {147,60}, {162,60}, {176,60}, {195,64}, {209,64}, {224,64} - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v2/iso_encoder/keyboard.json b/keyboards/keychron/v2/iso_encoder/keyboard.json index 89ce2714f1..4dd36fdda4 100644 --- a/keyboards/keychron/v2/iso_encoder/keyboard.json +++ b/keyboards/keychron/v2/iso_encoder/keyboard.json @@ -29,6 +29,78 @@ }, "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 29, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 44, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 59, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 73, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 88, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 103, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 118, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 132, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 147, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 162, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 198, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 51, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 66, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 81, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 95, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 110, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 125, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 140, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 154, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 169, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 184, "y": 15, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 30, "flags": 8}, + {"matrix": [2, 1], "x": 26, "y": 30, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 30, "flags": 4}, + {"matrix": [2, 3], "x": 55, "y": 30, "flags": 4}, + {"matrix": [2, 4], "x": 70, "y": 30, "flags": 4}, + {"matrix": [2, 5], "x": 84, "y": 30, "flags": 4}, + {"matrix": [2, 6], "x": 99, "y": 30, "flags": 4}, + {"matrix": [2, 7], "x": 114, "y": 30, "flags": 4}, + {"matrix": [2, 8], "x": 129, "y": 30, "flags": 4}, + {"matrix": [2, 9], "x": 143, "y": 30, "flags": 4}, + {"matrix": [2, 10], "x": 158, "y": 30, "flags": 4}, + {"matrix": [2, 11], "x": 173, "y": 30, "flags": 4}, + {"matrix": [2, 13], "x": 187, "y": 30, "flags": 4}, + {"matrix": [1, 13], "x": 204, "y": 23, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 30, "flags": 1}, + {"matrix": [3, 0], "x": 2, "y": 45, "flags": 1}, + {"matrix": [3, 1], "x": 18, "y": 45, "flags": 4}, + {"matrix": [3, 2], "x": 33, "y": 45, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 45, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 45, "flags": 4}, + {"matrix": [3, 5], "x": 77, "y": 45, "flags": 4}, + {"matrix": [3, 6], "x": 92, "y": 45, "flags": 4}, + {"matrix": [3, 7], "x": 106, "y": 45, "flags": 4}, + {"matrix": [3, 8], "x": 121, "y": 45, "flags": 4}, + {"matrix": [3, 9], "x": 136, "y": 45, "flags": 4}, + {"matrix": [3, 10], "x": 151, "y": 45, "flags": 4}, + {"matrix": [3, 11], "x": 165, "y": 45, "flags": 4}, + {"matrix": [3, 13], "x": 185, "y": 45, "flags": 1}, + {"matrix": [3, 14], "x": 209, "y": 49, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 60, "flags": 1}, + {"matrix": [4, 1], "x": 20, "y": 60, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 60, "flags": 1}, + {"matrix": [4, 6], "x": 94, "y": 60, "flags": 4}, + {"matrix": [4, 10], "x": 147, "y": 60, "flags": 1}, + {"matrix": [4, 11], "x": 162, "y": 60, "flags": 1}, + {"matrix": [4, 12], "x": 176, "y": 60, "flags": 1}, + {"matrix": [4, 13], "x": 195, "y": 64, "flags": 1}, + {"matrix": [2, 12], "x": 209, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_68": { "layout": [ diff --git a/keyboards/keychron/v2/jis/jis.c b/keyboards/keychron/v2/jis/jis.c index 1269d9b1e6..1664a5f703 100644 --- a/keyboards/keychron/v2/jis/jis.c +++ b/keyboards/keychron/v2/jis/jis.c @@ -101,34 +101,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA15, CB4_CA15, CB5_CA15}, {1, CB6_CA16, CB4_CA16, CB5_CA16} }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 43, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 69, 42, 44 }, - { 45, 14, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58 }, - { 59, 60, 61, 62, __, __, 63, __, __, 64, 65, 66, 67, 68, 70 } - }, - { - // LED Index to Physical Position - {0,4}, {15,4}, {29,4}, {44,4}, {59,4}, {73,4}, {88,4}, {103,4}, {117,4}, {132,4}, {146,4}, {161,4}, {176,4}, {190,4}, {205,4}, {224,0}, - {4,19}, {22,19}, {37,19}, {51,19}, {66,19}, {81,19}, {95,19}, {110,19}, {125,19}, {139,19}, {154,19}, {168,19}, {183,19}, {224,19}, - {6,34}, {26,34}, {40,34}, {55,34}, {70,34}, {84,34}, {99,34}, {114,34}, {128,34}, {143,34}, {158,34}, {172,34}, {187,34}, {207,29}, {224,34}, - {9,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {150,49}, {165,49}, {179,49}, {194,49}, {209,49}, - {2,64}, {18,64}, {35,64}, {51,64}, {92,64}, {134,64}, {150,64}, {165,64}, {179,64}, {194,64}, {209,64}, {223,64}, - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1 - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v2/jis/keyboard.json b/keyboards/keychron/v2/jis/keyboard.json index 01beaf31ac..96b19c7372 100644 --- a/keyboards/keychron/v2/jis/keyboard.json +++ b/keyboards/keychron/v2/jis/keyboard.json @@ -23,6 +23,81 @@ "diode_direction": "ROW2COL", "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 4, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 4, "flags": 4}, + {"matrix": [0, 2], "x": 29, "y": 4, "flags": 4}, + {"matrix": [0, 3], "x": 44, "y": 4, "flags": 4}, + {"matrix": [0, 4], "x": 59, "y": 4, "flags": 4}, + {"matrix": [0, 5], "x": 73, "y": 4, "flags": 4}, + {"matrix": [0, 6], "x": 88, "y": 4, "flags": 4}, + {"matrix": [0, 7], "x": 103, "y": 4, "flags": 4}, + {"matrix": [0, 8], "x": 117, "y": 4, "flags": 4}, + {"matrix": [0, 9], "x": 132, "y": 4, "flags": 4}, + {"matrix": [0, 10], "x": 146, "y": 4, "flags": 4}, + {"matrix": [0, 11], "x": 161, "y": 4, "flags": 4}, + {"matrix": [0, 12], "x": 176, "y": 4, "flags": 4}, + {"matrix": [0, 13], "x": 190, "y": 4, "flags": 4}, + {"matrix": [3, 1], "x": 205, "y": 4, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 19, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 19, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 19, "flags": 4}, + {"matrix": [1, 3], "x": 51, "y": 19, "flags": 4}, + {"matrix": [1, 4], "x": 66, "y": 19, "flags": 4}, + {"matrix": [1, 5], "x": 81, "y": 19, "flags": 4}, + {"matrix": [1, 6], "x": 95, "y": 19, "flags": 4}, + {"matrix": [1, 7], "x": 110, "y": 19, "flags": 4}, + {"matrix": [1, 8], "x": 125, "y": 19, "flags": 4}, + {"matrix": [1, 9], "x": 139, "y": 19, "flags": 4}, + {"matrix": [1, 10], "x": 154, "y": 19, "flags": 4}, + {"matrix": [1, 11], "x": 168, "y": 19, "flags": 4}, + {"matrix": [1, 12], "x": 183, "y": 19, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 19, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 34, "flags": 8}, + {"matrix": [2, 1], "x": 26, "y": 34, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 34, "flags": 4}, + {"matrix": [2, 3], "x": 55, "y": 34, "flags": 4}, + {"matrix": [2, 4], "x": 70, "y": 34, "flags": 4}, + {"matrix": [2, 5], "x": 84, "y": 34, "flags": 4}, + {"matrix": [2, 6], "x": 99, "y": 34, "flags": 4}, + {"matrix": [2, 7], "x": 114, "y": 34, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 34, "flags": 4}, + {"matrix": [2, 9], "x": 143, "y": 34, "flags": 4}, + {"matrix": [2, 10], "x": 158, "y": 34, "flags": 4}, + {"matrix": [2, 11], "x": 172, "y": 34, "flags": 4}, + {"matrix": [2, 13], "x": 187, "y": 34, "flags": 4}, + {"matrix": [1, 13], "x": 207, "y": 29, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 34, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 49, "flags": 1}, + {"matrix": [3, 2], "x": 33, "y": 49, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 49, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 49, "flags": 4}, + {"matrix": [3, 5], "x": 77, "y": 49, "flags": 4}, + {"matrix": [3, 6], "x": 92, "y": 49, "flags": 4}, + {"matrix": [3, 7], "x": 106, "y": 49, "flags": 4}, + {"matrix": [3, 8], "x": 121, "y": 49, "flags": 4}, + {"matrix": [3, 9], "x": 136, "y": 49, "flags": 4}, + {"matrix": [3, 10], "x": 150, "y": 49, "flags": 4}, + {"matrix": [3, 11], "x": 165, "y": 49, "flags": 4}, + {"matrix": [3, 12], "x": 179, "y": 49, "flags": 4}, + {"matrix": [3, 13], "x": 194, "y": 49, "flags": 1}, + {"matrix": [3, 14], "x": 209, "y": 49, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 18, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 35, "y": 64, "flags": 1}, + {"matrix": [4, 3], "x": 51, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 92, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 134, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 150, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 165, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 179, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 194, "y": 64, "flags": 1}, + {"matrix": [2, 12], "x": 209, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 223, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_jis_71": { "layout": [ diff --git a/keyboards/keychron/v2/jis_encoder/jis_encoder.c b/keyboards/keychron/v2/jis_encoder/jis_encoder.c index 85aaf165f6..1664a5f703 100644 --- a/keyboards/keychron/v2/jis_encoder/jis_encoder.c +++ b/keyboards/keychron/v2/jis_encoder/jis_encoder.c @@ -101,34 +101,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA15, CB4_CA15, CB5_CA15}, {1, CB6_CA16, CB4_CA16, CB5_CA16} }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 43, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 69, 42, 44 }, - { 45, 14, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58 }, - { 59, 60, 61, 62, __, __, 63, __, __, 64, 65, 66, 67, 68, 70 }, - }, - { - // LED Index to Physical Position - {0,4}, {15,4}, {29,4}, {44,4}, {59,4}, {73,4}, {88,4}, {103,4}, {117,4}, {132,4}, {146,4}, {161,4}, {176,4}, {190,4}, {205,4}, {224,0}, - {4,19}, {22,19}, {37,19}, {51,19}, {66,19}, {81,19}, {95,19}, {110,19}, {125,19}, {139,19}, {154,19}, {168,19}, {183,19}, {224,19}, - {6,34}, {26,34}, {40,34}, {55,34}, {70,34}, {84,34}, {99,34}, {114,34}, {128,34}, {143,34}, {158,34}, {172,34}, {187,34}, {207,29}, {224,34}, - {9,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {150,49}, {165,49}, {179,49}, {194,49}, {209,49}, - {2,64}, {18,64}, {35,64}, {51,64}, {92,64}, {134,64}, {150,64}, {165,64}, {179,64}, {194,64}, {209,64}, {223,64}, - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v2/jis_encoder/keyboard.json b/keyboards/keychron/v2/jis_encoder/keyboard.json index d8a540953c..105b5b6724 100644 --- a/keyboards/keychron/v2/jis_encoder/keyboard.json +++ b/keyboards/keychron/v2/jis_encoder/keyboard.json @@ -29,6 +29,81 @@ }, "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 4, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 4, "flags": 4}, + {"matrix": [0, 2], "x": 29, "y": 4, "flags": 4}, + {"matrix": [0, 3], "x": 44, "y": 4, "flags": 4}, + {"matrix": [0, 4], "x": 59, "y": 4, "flags": 4}, + {"matrix": [0, 5], "x": 73, "y": 4, "flags": 4}, + {"matrix": [0, 6], "x": 88, "y": 4, "flags": 4}, + {"matrix": [0, 7], "x": 103, "y": 4, "flags": 4}, + {"matrix": [0, 8], "x": 117, "y": 4, "flags": 4}, + {"matrix": [0, 9], "x": 132, "y": 4, "flags": 4}, + {"matrix": [0, 10], "x": 146, "y": 4, "flags": 4}, + {"matrix": [0, 11], "x": 161, "y": 4, "flags": 4}, + {"matrix": [0, 12], "x": 176, "y": 4, "flags": 4}, + {"matrix": [0, 13], "x": 190, "y": 4, "flags": 4}, + {"matrix": [3, 1], "x": 205, "y": 4, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 19, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 19, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 19, "flags": 4}, + {"matrix": [1, 3], "x": 51, "y": 19, "flags": 4}, + {"matrix": [1, 4], "x": 66, "y": 19, "flags": 4}, + {"matrix": [1, 5], "x": 81, "y": 19, "flags": 4}, + {"matrix": [1, 6], "x": 95, "y": 19, "flags": 4}, + {"matrix": [1, 7], "x": 110, "y": 19, "flags": 4}, + {"matrix": [1, 8], "x": 125, "y": 19, "flags": 4}, + {"matrix": [1, 9], "x": 139, "y": 19, "flags": 4}, + {"matrix": [1, 10], "x": 154, "y": 19, "flags": 4}, + {"matrix": [1, 11], "x": 168, "y": 19, "flags": 4}, + {"matrix": [1, 12], "x": 183, "y": 19, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 19, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 34, "flags": 8}, + {"matrix": [2, 1], "x": 26, "y": 34, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 34, "flags": 4}, + {"matrix": [2, 3], "x": 55, "y": 34, "flags": 4}, + {"matrix": [2, 4], "x": 70, "y": 34, "flags": 4}, + {"matrix": [2, 5], "x": 84, "y": 34, "flags": 4}, + {"matrix": [2, 6], "x": 99, "y": 34, "flags": 4}, + {"matrix": [2, 7], "x": 114, "y": 34, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 34, "flags": 4}, + {"matrix": [2, 9], "x": 143, "y": 34, "flags": 4}, + {"matrix": [2, 10], "x": 158, "y": 34, "flags": 4}, + {"matrix": [2, 11], "x": 172, "y": 34, "flags": 4}, + {"matrix": [2, 13], "x": 187, "y": 34, "flags": 4}, + {"matrix": [1, 13], "x": 207, "y": 29, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 34, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 49, "flags": 1}, + {"matrix": [3, 2], "x": 33, "y": 49, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 49, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 49, "flags": 4}, + {"matrix": [3, 5], "x": 77, "y": 49, "flags": 4}, + {"matrix": [3, 6], "x": 92, "y": 49, "flags": 4}, + {"matrix": [3, 7], "x": 106, "y": 49, "flags": 4}, + {"matrix": [3, 8], "x": 121, "y": 49, "flags": 4}, + {"matrix": [3, 9], "x": 136, "y": 49, "flags": 4}, + {"matrix": [3, 10], "x": 150, "y": 49, "flags": 4}, + {"matrix": [3, 11], "x": 165, "y": 49, "flags": 4}, + {"matrix": [3, 12], "x": 179, "y": 49, "flags": 4}, + {"matrix": [3, 13], "x": 194, "y": 49, "flags": 1}, + {"matrix": [3, 14], "x": 209, "y": 49, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 18, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 35, "y": 64, "flags": 1}, + {"matrix": [4, 3], "x": 51, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 92, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 134, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 150, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 165, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 179, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 194, "y": 64, "flags": 1}, + {"matrix": [2, 12], "x": 209, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 223, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_jis_71": { "layout": [ From 1e8de37aa05f30819dfa47f775ab007efb41d1a0 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:02:29 -0600 Subject: [PATCH 30/99] Migrate `g_led_config` to DD (K3) (#25603) --- keyboards/keychron/q1v1/iso/iso.c | 33 ----- keyboards/keychron/q6/ansi/ansi.c | 33 ----- keyboards/keychron/q6/ansi/keyboard.json | 112 +++++++++++++++++ .../keychron/q6/ansi_encoder/ansi_encoder.c | 32 ----- .../keychron/q6/ansi_encoder/keyboard.json | 112 +++++++++++++++++ keyboards/keychron/q6/iso/iso.c | 33 ----- keyboards/keychron/q6/iso/keyboard.json | 113 ++++++++++++++++++ .../keychron/q6/iso_encoder/iso_encoder.c | 33 ----- .../keychron/q6/iso_encoder/keyboard.json | 113 ++++++++++++++++++ keyboards/keychron/q60/ansi/ansi.c | 30 ----- keyboards/keychron/q60/ansi/keyboard.json | 64 ++++++++++ .../keychron/q65/ansi_encoder/ansi_encoder.c | 30 ----- .../keychron/q65/ansi_encoder/keyboard.json | 76 ++++++++++++ keyboards/keychron/s1/ansi/rgb/keyboard.json | 86 +++++++++++++ keyboards/keychron/s1/ansi/rgb/rgb.c | 33 ----- .../keychron/v10/ansi_encoder/ansi_encoder.c | 33 ----- .../keychron/v10/ansi_encoder/keyboard.json | 92 ++++++++++++++ .../keychron/v10/iso_encoder/iso_encoder.c | 33 ----- .../keychron/v10/iso_encoder/keyboard.json | 93 ++++++++++++++ 19 files changed, 861 insertions(+), 323 deletions(-) diff --git a/keyboards/keychron/q1v1/iso/iso.c b/keyboards/keychron/q1v1/iso/iso.c index ef4f3425af..108ce01542 100644 --- a/keyboards/keychron/q1v1/iso/iso.c +++ b/keyboards/keychron/q1v1/iso/iso.c @@ -113,37 +113,4 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { {1, SW6_CS15, SW4_CS15, SW5_CS15}, {1, SW6_CS16, SW4_CS16, SW5_CS16} }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, __, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 57, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 72, 56, 58 }, - { 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 81, 71, 13 }, - { 73, 74, 75, __, __, __, 76, __, __, __, 77, 78, 79, 80, 82 } - }, - { - // LED Index to Physical Position - {0,0}, {18,0}, {33,0}, {48,0}, {62,0}, {81,0}, {95,0}, {110,0}, {125,0}, {143,0}, {158,0}, {173,0}, {187,0}, {206,0}, {224,0}, - {0,15}, {15,15}, {29,15}, {44,15}, {59,15}, {73,15}, {88,15}, {103,15}, {118,15}, {132,15}, {147,15}, {162,15}, {176,15}, {198,15}, {224,15}, - {4,26}, {22,26}, {37,26}, {51,26}, {66,26}, {81,26}, {95,26}, {110,26}, {125,26}, {140,26}, {154,26}, {169,26}, {184,26}, {224,26}, - {6,38}, {26,38}, {40,38}, {55,38}, {70,38}, {84,38}, {99,38}, {114,38}, {129,38}, {143,38}, {158,38}, {173,38}, {187,38}, {203,32}, {224,38}, - {2,49}, {18,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {151,49}, {165,49}, {185,49}, {209,52}, - {2,61}, {20,61}, {39,61}, {94,61}, {147,61}, {162,61}, {176,61}, {195,64}, {209,64}, {224,64} - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q6/ansi/ansi.c b/keyboards/keychron/q6/ansi/ansi.c index 62a22971e1..bbc467bb49 100644 --- a/keyboards/keychron/q6/ansi/ansi.c +++ b/keyboards/keychron/q6/ansi/ansi.c @@ -141,37 +141,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB12_CA12, CB10_CA12, CB11_CA12}, {1, CB12_CA9, CB10_CA9, CB11_CA9}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14, 15, 39, 40, 16 }, - { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 17 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 18 }, - { 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, __, 73, 60, 77, 76, 74, 75, 19 }, - { 78, __, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, __, 89, 93, 90, 107, 91, 92, __ }, - { 94, 95, 96, __, __, __, 97, __, __, __, 98, 99, 100, 101, 102, 103, 104, 105, 106, __ }, - }, - { - // LED Index to Physical Position - {0,0}, {21,0}, {31,0}, {42,0}, {52,0}, {68,0}, {78,0}, {89,0}, {99,0}, {115,0}, {125,0}, {136,0}, {146,0}, {159,0}, {169,0}, {180,0}, {193,0}, {203,0}, {214,0}, {224,0}, - {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {63,15}, {73,15}, {83,15}, {94,15}, {104,15}, {115,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, {224,15}, - {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {89,27}, {99,27}, {109,27}, {120,27}, {130,27}, {143,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, - {4,40}, {18,40}, {29,40}, {39,40}, {50,40}, {60,40}, {70,40}, {81,40}, {91,40}, {102,40}, {112,40}, {123,40}, {139,40}, {193,40}, {203,40}, {214,40}, {224,34}, - {7,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {76,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, - {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {145,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64}, {224,58}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 8, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q6/ansi/keyboard.json b/keyboards/keychron/q6/ansi/keyboard.json index 664fe87008..10cb586908 100644 --- a/keyboards/keychron/q6/ansi/keyboard.json +++ b/keyboards/keychron/q6/ansi/keyboard.json @@ -21,6 +21,118 @@ "build": { "lto": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 21, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 31, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 52, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 68, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 78, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 89, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 99, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 115, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 125, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 136, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 146, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 159, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 180, "y": 0, "flags": 1}, + {"matrix": [0, 19], "x": 193, "y": 0, "flags": 1}, + {"matrix": [1, 19], "x": 203, "y": 0, "flags": 1}, + {"matrix": [2, 19], "x": 214, "y": 0, "flags": 1}, + {"matrix": [3, 19], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 10, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 21, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 31, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 42, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 63, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 83, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 94, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 115, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 125, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 141, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 159, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 169, "y": 15, "flags": 1}, + {"matrix": [1, 16], "x": 180, "y": 15, "flags": 1}, + {"matrix": [1, 17], "x": 193, "y": 15, "flags": 8}, + {"matrix": [1, 18], "x": 203, "y": 15, "flags": 4}, + {"matrix": [0, 17], "x": 214, "y": 15, "flags": 4}, + {"matrix": [0, 18], "x": 224, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 27, "flags": 1}, + {"matrix": [2, 1], "x": 16, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 26, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 36, "y": 27, "flags": 4}, + {"matrix": [2, 4], "x": 47, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 57, "y": 27, "flags": 4}, + {"matrix": [2, 6], "x": 68, "y": 27, "flags": 4}, + {"matrix": [2, 7], "x": 78, "y": 27, "flags": 4}, + {"matrix": [2, 8], "x": 89, "y": 27, "flags": 4}, + {"matrix": [2, 9], "x": 99, "y": 27, "flags": 4}, + {"matrix": [2, 10], "x": 109, "y": 27, "flags": 4}, + {"matrix": [2, 11], "x": 120, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 130, "y": 27, "flags": 4}, + {"matrix": [2, 13], "x": 143, "y": 27, "flags": 4}, + {"matrix": [2, 14], "x": 159, "y": 27, "flags": 1}, + {"matrix": [2, 15], "x": 169, "y": 27, "flags": 1}, + {"matrix": [2, 16], "x": 180, "y": 27, "flags": 1}, + {"matrix": [2, 17], "x": 193, "y": 27, "flags": 4}, + {"matrix": [2, 18], "x": 203, "y": 27, "flags": 4}, + {"matrix": [3, 14], "x": 214, "y": 27, "flags": 4}, + {"matrix": [3, 0], "x": 4, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 18, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 29, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 39, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 50, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 60, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 70, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 81, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 91, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 102, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 112, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 123, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 139, "y": 40, "flags": 1}, + {"matrix": [3, 17], "x": 193, "y": 40, "flags": 4}, + {"matrix": [3, 18], "x": 203, "y": 40, "flags": 4}, + {"matrix": [3, 16], "x": 214, "y": 40, "flags": 4}, + {"matrix": [3, 15], "x": 224, "y": 34, "flags": 4}, + {"matrix": [4, 0], "x": 7, "y": 52, "flags": 1}, + {"matrix": [4, 2], "x": 23, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 34, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 44, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 65, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 76, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 86, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 96, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 117, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 137, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 169, "y": 52, "flags": 1}, + {"matrix": [4, 17], "x": 193, "y": 52, "flags": 4}, + {"matrix": [4, 18], "x": 203, "y": 52, "flags": 4}, + {"matrix": [4, 14], "x": 214, "y": 52, "flags": 4}, + {"matrix": [5, 0], "x": 1, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 27, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 66, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 105, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 118, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 131, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 145, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 159, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 169, "y": 64, "flags": 1}, + {"matrix": [5, 16], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 17], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 18], "x": 214, "y": 64, "flags": 4}, + {"matrix": [4, 16], "x": 224, "y": 58, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_108": { "layout": [ diff --git a/keyboards/keychron/q6/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q6/ansi_encoder/ansi_encoder.c index b3d8a6bd4c..5897e1be72 100644 --- a/keyboards/keychron/q6/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q6/ansi_encoder/ansi_encoder.c @@ -142,36 +142,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB12_CA9, CB10_CA9, CB11_CA9}, }; -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14, 15, 39, 40, 16 }, - { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 17 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 18 }, - { 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, __, 73, 60, 77, 76, 74, 75, 19 }, - { 78, __, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, __, 89, 93, 90, 107, 91, 92, __ }, - { 94, 95, 96, __, __, __, 97, __, __, __, 98, 99, 100, 101, 102, 103, 104, 105, 106, __ }, - }, - { - // LED Index to Physical Position - {0,0}, {13,0}, {24,0}, {34,0}, {45,0}, {57,0}, {68,0}, {78,0}, {89,0}, {102,0}, {112,0}, {123,0}, {133,0}, {159,0}, {169,0}, {180,0}, {193,0}, {203,0}, {214,0}, {224,0}, - {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {63,15}, {73,15}, {83,15}, {94,15}, {104,15}, {115,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, {224,15}, - {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {89,27}, {99,27}, {109,27}, {120,27}, {130,27}, {143,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, - {4,40}, {18,40}, {29,40}, {39,40}, {50,40}, {60,40}, {70,40}, {81,40}, {91,40}, {102,40}, {112,40}, {123,40}, {139,40}, {193,40}, {203,40}, {214,40}, {224,34}, - {7,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {76,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, - {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {145,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64}, {224,58}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 8, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q6/ansi_encoder/keyboard.json b/keyboards/keychron/q6/ansi_encoder/keyboard.json index a37b68f553..8b3ad779c9 100644 --- a/keyboards/keychron/q6/ansi_encoder/keyboard.json +++ b/keyboards/keychron/q6/ansi_encoder/keyboard.json @@ -27,6 +27,118 @@ "build": { "lto": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 13, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 24, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 34, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 45, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 57, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 68, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 78, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 89, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 102, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 112, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 123, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 133, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 159, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 180, "y": 0, "flags": 1}, + {"matrix": [0, 19], "x": 193, "y": 0, "flags": 1}, + {"matrix": [1, 19], "x": 203, "y": 0, "flags": 1}, + {"matrix": [2, 19], "x": 214, "y": 0, "flags": 1}, + {"matrix": [3, 19], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 10, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 21, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 31, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 42, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 63, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 83, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 94, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 115, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 125, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 141, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 159, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 169, "y": 15, "flags": 1}, + {"matrix": [1, 16], "x": 180, "y": 15, "flags": 1}, + {"matrix": [1, 17], "x": 193, "y": 15, "flags": 8}, + {"matrix": [1, 18], "x": 203, "y": 15, "flags": 4}, + {"matrix": [0, 17], "x": 214, "y": 15, "flags": 4}, + {"matrix": [0, 18], "x": 224, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 27, "flags": 1}, + {"matrix": [2, 1], "x": 16, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 26, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 36, "y": 27, "flags": 4}, + {"matrix": [2, 4], "x": 47, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 57, "y": 27, "flags": 4}, + {"matrix": [2, 6], "x": 68, "y": 27, "flags": 4}, + {"matrix": [2, 7], "x": 78, "y": 27, "flags": 4}, + {"matrix": [2, 8], "x": 89, "y": 27, "flags": 4}, + {"matrix": [2, 9], "x": 99, "y": 27, "flags": 4}, + {"matrix": [2, 10], "x": 109, "y": 27, "flags": 4}, + {"matrix": [2, 11], "x": 120, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 130, "y": 27, "flags": 4}, + {"matrix": [2, 13], "x": 143, "y": 27, "flags": 4}, + {"matrix": [2, 14], "x": 159, "y": 27, "flags": 1}, + {"matrix": [2, 15], "x": 169, "y": 27, "flags": 1}, + {"matrix": [2, 16], "x": 180, "y": 27, "flags": 1}, + {"matrix": [2, 17], "x": 193, "y": 27, "flags": 4}, + {"matrix": [2, 18], "x": 203, "y": 27, "flags": 4}, + {"matrix": [3, 14], "x": 214, "y": 27, "flags": 4}, + {"matrix": [3, 0], "x": 4, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 18, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 29, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 39, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 50, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 60, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 70, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 81, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 91, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 102, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 112, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 123, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 139, "y": 40, "flags": 1}, + {"matrix": [3, 17], "x": 193, "y": 40, "flags": 4}, + {"matrix": [3, 18], "x": 203, "y": 40, "flags": 4}, + {"matrix": [3, 16], "x": 214, "y": 40, "flags": 4}, + {"matrix": [3, 15], "x": 224, "y": 34, "flags": 4}, + {"matrix": [4, 0], "x": 7, "y": 52, "flags": 1}, + {"matrix": [4, 2], "x": 23, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 34, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 44, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 65, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 76, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 86, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 96, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 117, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 137, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 169, "y": 52, "flags": 1}, + {"matrix": [4, 17], "x": 193, "y": 52, "flags": 4}, + {"matrix": [4, 18], "x": 203, "y": 52, "flags": 4}, + {"matrix": [4, 14], "x": 214, "y": 52, "flags": 4}, + {"matrix": [5, 0], "x": 1, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 27, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 66, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 105, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 118, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 131, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 145, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 159, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 169, "y": 64, "flags": 1}, + {"matrix": [5, 16], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 17], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 18], "x": 214, "y": 64, "flags": 4}, + {"matrix": [4, 16], "x": 224, "y": 58, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_109": { "layout": [ diff --git a/keyboards/keychron/q6/iso/iso.c b/keyboards/keychron/q6/iso/iso.c index eb6cab855a..5316273776 100644 --- a/keyboards/keychron/q6/iso/iso.c +++ b/keyboards/keychron/q6/iso/iso.c @@ -142,37 +142,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB12_CA12, CB10_CA12, CB11_CA12}, {1, CB12_CA9, CB10_CA9, CB11_CA9}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14, 15, 39, 40, 16 }, - { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 17 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 73, 54, 55, 56, 57, 58, 18 }, - { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, __, 72, 59, 77, 76, 74, 75, 19 }, - { 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, __, 90, 94, 91, 108, 92, 93, __ }, - { 95, 96, 97, __, __, __, 98, __, __, __, 99, 100, 101, 102, 103, 104, 105, 106, 107, __ }, - }, - { - // LED Index to Physical Position - {0,0}, {21,0}, {31,0}, {42,0}, {52,0}, {68,0}, {78,0}, {89,0}, {99,0}, {115,0}, {125,0}, {136,0}, {146,0}, {159,0}, {169,0}, {180,0}, {193,0}, {203,0}, {214,0}, {224,0}, - {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {63,15}, {73,15}, {83,15}, {94,15}, {104,15}, {115,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, {224,15}, - {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {89,27}, {99,27}, {109,27}, {120,27}, {130,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, - {4,40}, {18,40}, {29,40}, {39,40}, {50,40}, {60,40}, {70,40}, {81,40}, {91,40}, {102,40}, {112,40}, {123,40}, {133,40}, {147,36}, {193,40}, {203,40}, {214,40}, {224,34}, - {1,52}, {13,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {76,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, - {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {145,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64}, {224,58}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 8, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q6/iso/keyboard.json b/keyboards/keychron/q6/iso/keyboard.json index 28730b2d74..fae62800a3 100644 --- a/keyboards/keychron/q6/iso/keyboard.json +++ b/keyboards/keychron/q6/iso/keyboard.json @@ -21,6 +21,119 @@ "build": { "lto": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 21, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 31, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 52, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 68, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 78, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 89, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 99, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 115, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 125, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 136, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 146, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 159, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 180, "y": 0, "flags": 1}, + {"matrix": [0, 19], "x": 193, "y": 0, "flags": 1}, + {"matrix": [1, 19], "x": 203, "y": 0, "flags": 1}, + {"matrix": [2, 19], "x": 214, "y": 0, "flags": 1}, + {"matrix": [3, 19], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 10, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 21, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 31, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 42, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 63, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 83, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 94, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 115, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 125, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 141, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 159, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 169, "y": 15, "flags": 1}, + {"matrix": [1, 16], "x": 180, "y": 15, "flags": 1}, + {"matrix": [1, 17], "x": 193, "y": 15, "flags": 8}, + {"matrix": [1, 18], "x": 203, "y": 15, "flags": 4}, + {"matrix": [0, 17], "x": 214, "y": 15, "flags": 4}, + {"matrix": [0, 18], "x": 224, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 27, "flags": 1}, + {"matrix": [2, 1], "x": 16, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 26, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 36, "y": 27, "flags": 4}, + {"matrix": [2, 4], "x": 47, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 57, "y": 27, "flags": 4}, + {"matrix": [2, 6], "x": 68, "y": 27, "flags": 4}, + {"matrix": [2, 7], "x": 78, "y": 27, "flags": 4}, + {"matrix": [2, 8], "x": 89, "y": 27, "flags": 4}, + {"matrix": [2, 9], "x": 99, "y": 27, "flags": 4}, + {"matrix": [2, 10], "x": 109, "y": 27, "flags": 4}, + {"matrix": [2, 11], "x": 120, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 130, "y": 27, "flags": 4}, + {"matrix": [2, 14], "x": 159, "y": 27, "flags": 1}, + {"matrix": [2, 15], "x": 169, "y": 27, "flags": 1}, + {"matrix": [2, 16], "x": 180, "y": 27, "flags": 1}, + {"matrix": [2, 17], "x": 193, "y": 27, "flags": 4}, + {"matrix": [2, 18], "x": 203, "y": 27, "flags": 4}, + {"matrix": [3, 14], "x": 214, "y": 27, "flags": 4}, + {"matrix": [3, 0], "x": 4, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 18, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 29, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 39, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 50, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 60, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 70, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 81, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 91, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 102, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 112, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 123, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 133, "y": 40, "flags": 4}, + {"matrix": [2, 13], "x": 147, "y": 36, "flags": 1}, + {"matrix": [3, 17], "x": 193, "y": 40, "flags": 4}, + {"matrix": [3, 18], "x": 203, "y": 40, "flags": 4}, + {"matrix": [3, 16], "x": 214, "y": 40, "flags": 4}, + {"matrix": [3, 15], "x": 224, "y": 34, "flags": 4}, + {"matrix": [4, 0], "x": 1, "y": 52, "flags": 1}, + {"matrix": [4, 1], "x": 13, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 23, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 34, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 44, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 65, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 76, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 86, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 96, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 117, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 137, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 169, "y": 52, "flags": 1}, + {"matrix": [4, 17], "x": 193, "y": 52, "flags": 4}, + {"matrix": [4, 18], "x": 203, "y": 52, "flags": 4}, + {"matrix": [4, 14], "x": 214, "y": 52, "flags": 4}, + {"matrix": [5, 0], "x": 1, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 27, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 66, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 105, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 118, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 131, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 145, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 159, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 169, "y": 64, "flags": 1}, + {"matrix": [5, 16], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 17], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 18], "x": 214, "y": 64, "flags": 4}, + {"matrix": [4, 16], "x": 224, "y": 58, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_109": { "layout": [ diff --git a/keyboards/keychron/q6/iso_encoder/iso_encoder.c b/keyboards/keychron/q6/iso_encoder/iso_encoder.c index 439e1cee50..5316273776 100644 --- a/keyboards/keychron/q6/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/q6/iso_encoder/iso_encoder.c @@ -142,37 +142,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB12_CA12, CB10_CA12, CB11_CA12}, {1, CB12_CA9, CB10_CA9, CB11_CA9}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, __, 13, 14, 15, 39, 40, 16 }, - { 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 17 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 73, 54, 55, 56, 57, 58, 18 }, - { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, __, 72, 59, 77, 76, 74, 75, 19 }, - { 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, __, 90, 94, 91, 108, 92, 93, __ }, - { 95, 96, 97, __, __, __, 98, __, __, __, 99, 100, 101, 102, 103, 104, 105, 106, 107, __ }, - }, - { - // LED Index to Physical Position - {0,0}, {13,0}, {24,0}, {34,0}, {45,0}, {57,0}, {68,0}, {78,0}, {89,0}, {102,0}, {112,0}, {123,0}, {133,0}, {159,0}, {169,0}, {180,0}, {193,0}, {203,0}, {214,0}, {224,0}, - {0,15}, {10,15}, {21,15}, {31,15}, {42,15}, {52,15}, {63,15}, {73,15}, {83,15}, {94,15}, {104,15}, {115,15}, {125,15}, {141,15}, {159,15}, {169,15}, {180,15}, {193,15}, {203,15}, {214,15}, {224,15}, - {3,27}, {16,27}, {26,27}, {36,27}, {47,27}, {57,27}, {68,27}, {78,27}, {89,27}, {99,27}, {109,27}, {120,27}, {130,27}, {159,27}, {169,27}, {180,27}, {193,27}, {203,27}, {214,27}, - {4,40}, {18,40}, {29,40}, {39,40}, {50,40}, {60,40}, {70,40}, {81,40}, {91,40}, {102,40}, {112,40}, {123,40}, {133,40}, {147,36}, {193,40}, {203,40}, {214,40}, {224,34}, - {1,52}, {13,52}, {23,52}, {34,52}, {44,52}, {55,52}, {65,52}, {76,52}, {86,52}, {96,52}, {107,52}, {117,52}, {137,52}, {169,52}, {193,52}, {203,52}, {214,52}, - {1,64}, {14,64}, {27,64}, {66,64}, {105,64}, {118,64}, {131,64}, {145,64}, {159,64}, {169,64}, {180,64}, {198,64}, {214,64}, {224,58}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 8, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q6/iso_encoder/keyboard.json b/keyboards/keychron/q6/iso_encoder/keyboard.json index 3fc4ee8f1c..b404e9f50d 100644 --- a/keyboards/keychron/q6/iso_encoder/keyboard.json +++ b/keyboards/keychron/q6/iso_encoder/keyboard.json @@ -27,6 +27,119 @@ "build": { "lto": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 13, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 24, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 34, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 45, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 57, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 68, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 78, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 89, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 102, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 112, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 123, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 133, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 159, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 169, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 180, "y": 0, "flags": 1}, + {"matrix": [0, 19], "x": 193, "y": 0, "flags": 1}, + {"matrix": [1, 19], "x": 203, "y": 0, "flags": 1}, + {"matrix": [2, 19], "x": 214, "y": 0, "flags": 1}, + {"matrix": [3, 19], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 10, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 21, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 31, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 42, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 63, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 83, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 94, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 115, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 125, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 141, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 159, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 169, "y": 15, "flags": 1}, + {"matrix": [1, 16], "x": 180, "y": 15, "flags": 1}, + {"matrix": [1, 17], "x": 193, "y": 15, "flags": 8}, + {"matrix": [1, 18], "x": 203, "y": 15, "flags": 4}, + {"matrix": [0, 17], "x": 214, "y": 15, "flags": 4}, + {"matrix": [0, 18], "x": 224, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 27, "flags": 1}, + {"matrix": [2, 1], "x": 16, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 26, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 36, "y": 27, "flags": 4}, + {"matrix": [2, 4], "x": 47, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 57, "y": 27, "flags": 4}, + {"matrix": [2, 6], "x": 68, "y": 27, "flags": 4}, + {"matrix": [2, 7], "x": 78, "y": 27, "flags": 4}, + {"matrix": [2, 8], "x": 89, "y": 27, "flags": 4}, + {"matrix": [2, 9], "x": 99, "y": 27, "flags": 4}, + {"matrix": [2, 10], "x": 109, "y": 27, "flags": 4}, + {"matrix": [2, 11], "x": 120, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 130, "y": 27, "flags": 4}, + {"matrix": [2, 14], "x": 159, "y": 27, "flags": 1}, + {"matrix": [2, 15], "x": 169, "y": 27, "flags": 1}, + {"matrix": [2, 16], "x": 180, "y": 27, "flags": 1}, + {"matrix": [2, 17], "x": 193, "y": 27, "flags": 4}, + {"matrix": [2, 18], "x": 203, "y": 27, "flags": 4}, + {"matrix": [3, 14], "x": 214, "y": 27, "flags": 4}, + {"matrix": [3, 0], "x": 4, "y": 40, "flags": 8}, + {"matrix": [3, 1], "x": 18, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 29, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 39, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 50, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 60, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 70, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 81, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 91, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 102, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 112, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 123, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 133, "y": 40, "flags": 4}, + {"matrix": [2, 13], "x": 147, "y": 36, "flags": 1}, + {"matrix": [3, 17], "x": 193, "y": 40, "flags": 4}, + {"matrix": [3, 18], "x": 203, "y": 40, "flags": 4}, + {"matrix": [3, 16], "x": 214, "y": 40, "flags": 4}, + {"matrix": [3, 15], "x": 224, "y": 34, "flags": 4}, + {"matrix": [4, 0], "x": 1, "y": 52, "flags": 1}, + {"matrix": [4, 1], "x": 13, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 23, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 34, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 44, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 65, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 76, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 86, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 96, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 117, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 137, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 169, "y": 52, "flags": 1}, + {"matrix": [4, 17], "x": 193, "y": 52, "flags": 4}, + {"matrix": [4, 18], "x": 203, "y": 52, "flags": 4}, + {"matrix": [4, 14], "x": 214, "y": 52, "flags": 4}, + {"matrix": [5, 0], "x": 1, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 27, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 66, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 105, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 118, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 131, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 145, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 159, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 169, "y": 64, "flags": 1}, + {"matrix": [5, 16], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 17], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 18], "x": 214, "y": 64, "flags": 4}, + {"matrix": [4, 16], "x": 224, "y": 58, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_110": { "layout": [ diff --git a/keyboards/keychron/q60/ansi/ansi.c b/keyboards/keychron/q60/ansi/ansi.c index 8b702eb5a6..b69b303d36 100644 --- a/keyboards/keychron/q60/ansi/ansi.c +++ b/keyboards/keychron/q60/ansi/ansi.c @@ -92,34 +92,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {0, CB9_CA15, CB7_CA15, CB8_CA15}, {0, CB9_CA16, CB7_CA16, CB8_CA16}, }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 }, - { 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, __, 41 }, - { 42, __, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54 }, - { 55, 56, __, __, __, __, 57, __, __, __, 58, 59, 14, __ }, - }, - { - // LED Index to Physical Position - {0,0}, {16,0}, {32,0}, {48,0}, {64,0}, {80,0}, {96,0}, {112,0}, {128,0}, {144,0}, {160,0}, {176,0}, {192,0}, {208,0}, {224,0}, - {4,16}, {24,16}, {40,16}, {56,16}, {72,16}, {88,16}, {104,16}, {120,16}, {136,16}, {152,16}, {168,16}, {184,16}, {200,16}, {220,16}, - {6,32}, {28,32}, {44,32}, {60,32}, {76,32}, {92,32}, {108,32}, {124,32}, {140,32}, {156,32}, {172,32}, {188,32}, {214,32}, - {10,48}, {36,48}, {52,48}, {68,48}, {84,48}, {100,48}, {116,48}, {132,48}, {148,48}, {164,48}, {180,48}, {202,48}, {224,48}, - {24,64}, {44,64}, {112,64}, {180,64}, {200,64}, - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 4, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q60/ansi/keyboard.json b/keyboards/keychron/q60/ansi/keyboard.json index 83ee57d011..762ef21161 100644 --- a/keyboards/keychron/q60/ansi/keyboard.json +++ b/keyboards/keychron/q60/ansi/keyboard.json @@ -23,6 +23,70 @@ "diode_direction": "ROW2COL", "processor": "STM32L432", "bootloader": "stm32-dfu", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 1}, + {"matrix": [4, 12], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 88, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 104, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 184, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 220, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 8}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 124, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 140, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 156, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 188, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 214, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 10, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 68, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 84, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 100, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 116, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 132, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 148, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 164, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 180, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 202, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 24, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 44, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 180, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 200, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_60": { "layout": [ diff --git a/keyboards/keychron/q65/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q65/ansi_encoder/ansi_encoder.c index 6c4c2abe21..f16cc60424 100644 --- a/keyboards/keychron/q65/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q65/ansi_encoder/ansi_encoder.c @@ -102,34 +102,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA2, CB4_CA2, CB5_CA2}, // Down {1, CB6_CA1, CB4_CA1, CB5_CA1}, // Right }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { __, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 }, - { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, __, 44, 45 }, - { 46, 47, __, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60 }, - { 61, 62, 63, 64, __, __, __, 65, __, __, 66, 67, 68, 69, 70, 71 }, - }, - { - // LED Index to Physical Position - {20,0}, {33,0}, {47,0}, {60,0}, {73,0}, {86,0}, {99,0}, {112,0}, {125,0}, {138,0}, {151,0}, {164,0}, {177,0}, {197,0}, {224,0}, - {0,15}, {24,15}, {40,15}, {53,15}, {66,15}, {79,15}, {92,15}, {105,15}, {119,15}, {132,15}, {145,15}, {158,15}, {171,15}, {184,15}, {200,15}, {224,15}, - {0,30}, {25,30}, {43,30}, {56,30}, {69,30}, {83,30}, {96,30}, {109,30}, {122,30}, {135,30}, {148,30}, {161,30}, {174,30}, {195,30}, {224,30}, - {0,45}, {29,45}, {50,45}, {63,45}, {76,45}, {89,45}, {102,45}, {115,45}, {128,45}, {141,45}, {155,45}, {168,45}, {186,45}, {207,49}, {224,45}, - {0,60}, {22,60}, {38,60}, {55,60}, {104,60}, {151,60}, {164,60}, {177,60}, {194,64}, {207,64}, {220,64}, - }, - { - // RGB LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q65/ansi_encoder/keyboard.json b/keyboards/keychron/q65/ansi_encoder/keyboard.json index 76b17dd5fb..1fef623719 100644 --- a/keyboards/keychron/q65/ansi_encoder/keyboard.json +++ b/keyboards/keychron/q65/ansi_encoder/keyboard.json @@ -27,6 +27,82 @@ "dip_switch": true, "rgb_matrix": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 1], "x": 20, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 33, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 47, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 73, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 86, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 99, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 125, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 138, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 151, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 164, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 177, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 197, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 15, "flags": 1}, + {"matrix": [1, 2], "x": 40, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 66, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 79, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 92, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 105, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 119, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 132, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 145, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 158, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 171, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 184, "y": 15, "flags": 4}, + {"matrix": [1, 14], "x": 200, "y": 15, "flags": 4}, + {"matrix": [1, 15], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 30, "flags": 1}, + {"matrix": [2, 1], "x": 25, "y": 30, "flags": 9}, + {"matrix": [2, 2], "x": 43, "y": 30, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 30, "flags": 4}, + {"matrix": [2, 4], "x": 69, "y": 30, "flags": 4}, + {"matrix": [2, 5], "x": 83, "y": 30, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 30, "flags": 4}, + {"matrix": [2, 7], "x": 109, "y": 30, "flags": 4}, + {"matrix": [2, 8], "x": 122, "y": 30, "flags": 4}, + {"matrix": [2, 9], "x": 135, "y": 30, "flags": 4}, + {"matrix": [2, 10], "x": 148, "y": 30, "flags": 4}, + {"matrix": [2, 11], "x": 161, "y": 30, "flags": 4}, + {"matrix": [2, 12], "x": 174, "y": 30, "flags": 4}, + {"matrix": [2, 14], "x": 195, "y": 30, "flags": 1}, + {"matrix": [2, 15], "x": 224, "y": 30, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 45, "flags": 1}, + {"matrix": [3, 1], "x": 29, "y": 45, "flags": 1}, + {"matrix": [3, 3], "x": 50, "y": 45, "flags": 4}, + {"matrix": [3, 4], "x": 63, "y": 45, "flags": 4}, + {"matrix": [3, 5], "x": 76, "y": 45, "flags": 4}, + {"matrix": [3, 6], "x": 89, "y": 45, "flags": 4}, + {"matrix": [3, 7], "x": 102, "y": 45, "flags": 4}, + {"matrix": [3, 8], "x": 115, "y": 45, "flags": 4}, + {"matrix": [3, 9], "x": 128, "y": 45, "flags": 4}, + {"matrix": [3, 10], "x": 141, "y": 45, "flags": 4}, + {"matrix": [3, 11], "x": 155, "y": 45, "flags": 4}, + {"matrix": [3, 12], "x": 168, "y": 45, "flags": 4}, + {"matrix": [3, 13], "x": 186, "y": 45, "flags": 1}, + {"matrix": [3, 14], "x": 207, "y": 49, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 45, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 60, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 60, "flags": 1}, + {"matrix": [4, 2], "x": 38, "y": 60, "flags": 1}, + {"matrix": [4, 3], "x": 55, "y": 60, "flags": 1}, + {"matrix": [4, 7], "x": 104, "y": 60, "flags": 4}, + {"matrix": [4, 10], "x": 151, "y": 60, "flags": 1}, + {"matrix": [4, 11], "x": 164, "y": 60, "flags": 1}, + {"matrix": [4, 12], "x": 177, "y": 60, "flags": 1}, + {"matrix": [4, 13], "x": 194, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 207, "y": 64, "flags": 1}, + {"matrix": [4, 15], "x": 220, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_73": { "layout": [ diff --git a/keyboards/keychron/s1/ansi/rgb/keyboard.json b/keyboards/keychron/s1/ansi/rgb/keyboard.json index fb52ee6423..2dbc05f2fa 100644 --- a/keyboards/keychron/s1/ansi/rgb/keyboard.json +++ b/keyboards/keychron/s1/ansi/rgb/keyboard.json @@ -33,6 +33,92 @@ "solid_splash": true }, "driver": "snled27351", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 119, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 134, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 149, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 164, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 179, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 194, "y": 0, "flags": 1}, + {"matrix": [3, 12], "x": 209, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 13, "flags": 1}, + {"matrix": [1, 1], "x": 15, "y": 13, "flags": 4}, + {"matrix": [1, 2], "x": 30, "y": 13, "flags": 4}, + {"matrix": [1, 3], "x": 45, "y": 13, "flags": 4}, + {"matrix": [1, 4], "x": 60, "y": 13, "flags": 4}, + {"matrix": [1, 5], "x": 75, "y": 13, "flags": 4}, + {"matrix": [1, 6], "x": 90, "y": 13, "flags": 4}, + {"matrix": [1, 7], "x": 105, "y": 13, "flags": 4}, + {"matrix": [1, 8], "x": 119, "y": 13, "flags": 4}, + {"matrix": [1, 9], "x": 134, "y": 13, "flags": 4}, + {"matrix": [1, 10], "x": 149, "y": 13, "flags": 4}, + {"matrix": [1, 11], "x": 164, "y": 13, "flags": 4}, + {"matrix": [1, 12], "x": 179, "y": 13, "flags": 4}, + {"matrix": [1, 13], "x": 202, "y": 13, "flags": 1}, + {"matrix": [1, 14], "x": 224, "y": 13, "flags": 1}, + {"matrix": [2, 0], "x": 4, "y": 26, "flags": 1}, + {"matrix": [2, 1], "x": 22, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 67, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 82, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 97, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 127, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 142, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 157, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 172, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 187, "y": 26, "flags": 4}, + {"matrix": [2, 13], "x": 205, "y": 26, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 26, "flags": 1}, + {"matrix": [3, 0], "x": 6, "y": 38, "flags": 8}, + {"matrix": [3, 1], "x": 26, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 41, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 56, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 71, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 86, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 101, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 116, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 131, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 146, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 160, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 175, "y": 38, "flags": 4}, + {"matrix": [3, 13], "x": 200, "y": 38, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 38, "flags": 1}, + {"matrix": [4, 0], "x": 9, "y": 51, "flags": 1}, + {"matrix": [4, 2], "x": 34, "y": 51, "flags": 4}, + {"matrix": [4, 3], "x": 48, "y": 51, "flags": 4}, + {"matrix": [4, 4], "x": 63, "y": 51, "flags": 4}, + {"matrix": [4, 5], "x": 78, "y": 51, "flags": 4}, + {"matrix": [4, 6], "x": 93, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 108, "y": 51, "flags": 4}, + {"matrix": [4, 8], "x": 123, "y": 51, "flags": 4}, + {"matrix": [4, 9], "x": 138, "y": 51, "flags": 4}, + {"matrix": [4, 10], "x": 153, "y": 51, "flags": 4}, + {"matrix": [4, 11], "x": 168, "y": 51, "flags": 4}, + {"matrix": [4, 12], "x": 189, "y": 51, "flags": 1}, + {"matrix": [4, 13], "x": 209, "y": 51, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 51, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 95, "y": 64, "flags": 4}, + {"matrix": [5, 9], "x": 149, "y": 64, "flags": 1}, + {"matrix": [5, 10], "x": 164, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 179, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 194, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 209, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 224, "y": 64, "flags": 1} + ] "sleep": true }, "features": { diff --git a/keyboards/keychron/s1/ansi/rgb/rgb.c b/keyboards/keychron/s1/ansi/rgb/rgb.c index af6390f753..a40fdbd7cc 100644 --- a/keyboards/keychron/s1/ansi/rgb/rgb.c +++ b/keyboards/keychron/s1/ansi/rgb/rgb.c @@ -117,37 +117,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA14, CB4_CA14, CB5_CA14}, // down {1, CB6_CA16, CB4_CA16, CB5_CA16}, // right }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 }, - { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45 }, - { 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 14, 58, 59 }, - { 60, __, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73 }, - { 74, 75, 76, __, __, __, 77, __, __, 78, 79, 80, 81, 82, 83 } - }, - { - // LED Index to Physical Position - {0,0}, {15,0}, {30,0}, {45,0}, {60,0}, {75,0}, {90,0}, {105,0}, {119,0}, {134,0}, {149,0}, {164,0}, {179,0}, {194,0}, {209,0}, {224,0}, - {0,13}, {15,13}, {30,13}, {45,13}, {60,13}, {75,13}, {90,13}, {105,13}, {119,13}, {134,13}, {149,13}, {164,13}, {179,13}, {202,13}, {224,13}, - {4,26}, {22,26}, {37,26}, {52,26}, {67,26}, {82,26}, {97,26}, {112,26}, {127,26}, {142,26}, {157,26}, {172,26}, {187,26}, {205,26}, {224,26}, - {6,38}, {26,38}, {41,38}, {56,38}, {71,38}, {86,38}, {101,38}, {116,38}, {131,38}, {146,38}, {160,38}, {175,38}, {200,38}, {224,38}, - {9,51}, {34,51}, {48,51}, {63,51}, {78,51}, {93,51}, {108,51}, {123,51}, {138,51}, {153,51}, {168,51}, {189,51}, {209,51}, {224,51}, - {2,64}, {21,64}, {39,64}, {95,64}, {149,64}, {164,64}, {179,64}, {194,64}, {209,64}, {224,64} - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v10/ansi_encoder/ansi_encoder.c b/keyboards/keychron/v10/ansi_encoder/ansi_encoder.c index 7a58d4deef..a9468493d6 100644 --- a/keyboards/keychron/v10/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/v10/ansi_encoder/ansi_encoder.c @@ -121,37 +121,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA2, CB4_CA2, CB5_CA2}, // Down {1, CB6_CA1, CB4_CA1, CB5_CA1}, // Right }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { __, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 }, - { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46 }, - { 47, 48, 49, 50, 51, 52, 53, __, 54, 55, 56, 57, 58, 59, 60, 61 }, - { 62, 63, __, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76 }, - { 77, 78, 79, 80, 81, __, __, 82, 83, 84, __, __, __, 85, 86, 87 }, - }, - { - // LED Index to Physical Position - {19,0}, {34,0}, {46,0}, {60,1}, {72,3}, {87,6}, {99,8}, {120,8}, {132,6}, {147,3}, {159,1}, {173,0}, {185,0}, {201,1}, {219,1}, - {5,14}, {24,14}, {36,14}, {48,13}, {62,15}, {74,17}, {86,20}, {98,22}, {115,22}, {127,20}, {139,17}, {151,15}, {165,13}, {177,14}, {195,14}, {220,13}, - {4,24}, {24,24}, {40,24}, {53,24}, {65,27}, {77,29}, {89,31}, {112,33}, {124,31}, {136,29}, {148,27}, {160,24}, {174,24}, {186,24}, {201,24}, {222,25}, - {2,34}, {23,34}, {40,34}, {54,35}, {66,37}, {78,39}, {90,42}, {118,43}, {130,40}, {142,38}, {154,36}, {167,35}, {179,35}, {199,35}, {224,36}, - {0,45}, {24,45}, {44,45}, {57,46}, {69,48}, {81,51}, {93,53}, {111,54}, {123,52}, {135,50}, {147,48}, {159,46}, {173,45}, {190,45}, {210,47}, - {0,55}, {18,55}, {33,55}, {56,57}, {77,61}, {97,64}, {124,63}, {147,59}, {198,58}, {210,58}, {222,58}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 4, 1, 4, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v10/ansi_encoder/keyboard.json b/keyboards/keychron/v10/ansi_encoder/keyboard.json index 825fa65ef8..98a700ab2e 100644 --- a/keyboards/keychron/v10/ansi_encoder/keyboard.json +++ b/keyboards/keychron/v10/ansi_encoder/keyboard.json @@ -27,6 +27,98 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 1], "x": 19, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 34, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 46, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 60, "y": 1, "flags": 1}, + {"matrix": [0, 5], "x": 72, "y": 3, "flags": 1}, + {"matrix": [0, 6], "x": 87, "y": 6, "flags": 1}, + {"matrix": [0, 7], "x": 99, "y": 8, "flags": 1}, + {"matrix": [0, 8], "x": 120, "y": 8, "flags": 1}, + {"matrix": [0, 9], "x": 132, "y": 6, "flags": 1}, + {"matrix": [0, 10], "x": 147, "y": 3, "flags": 1}, + {"matrix": [0, 11], "x": 159, "y": 1, "flags": 1}, + {"matrix": [0, 12], "x": 173, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 185, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 201, "y": 1, "flags": 1}, + {"matrix": [0, 15], "x": 219, "y": 1, "flags": 1}, + {"matrix": [1, 0], "x": 5, "y": 14, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 14, "flags": 1}, + {"matrix": [1, 2], "x": 36, "y": 14, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 13, "flags": 4}, + {"matrix": [1, 4], "x": 62, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 74, "y": 17, "flags": 4}, + {"matrix": [1, 6], "x": 86, "y": 20, "flags": 4}, + {"matrix": [1, 7], "x": 98, "y": 22, "flags": 4}, + {"matrix": [1, 8], "x": 115, "y": 22, "flags": 4}, + {"matrix": [1, 9], "x": 127, "y": 20, "flags": 4}, + {"matrix": [1, 10], "x": 139, "y": 17, "flags": 4}, + {"matrix": [1, 11], "x": 151, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 165, "y": 13, "flags": 4}, + {"matrix": [1, 13], "x": 177, "y": 14, "flags": 4}, + {"matrix": [1, 14], "x": 195, "y": 14, "flags": 1}, + {"matrix": [1, 15], "x": 220, "y": 13, "flags": 1}, + {"matrix": [2, 0], "x": 4, "y": 24, "flags": 1}, + {"matrix": [2, 1], "x": 24, "y": 24, "flags": 1}, + {"matrix": [2, 2], "x": 40, "y": 24, "flags": 4}, + {"matrix": [2, 3], "x": 53, "y": 24, "flags": 4}, + {"matrix": [2, 4], "x": 65, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 77, "y": 29, "flags": 4}, + {"matrix": [2, 6], "x": 89, "y": 31, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 33, "flags": 4}, + {"matrix": [2, 8], "x": 124, "y": 31, "flags": 4}, + {"matrix": [2, 9], "x": 136, "y": 29, "flags": 4}, + {"matrix": [2, 10], "x": 148, "y": 27, "flags": 4}, + {"matrix": [2, 11], "x": 160, "y": 24, "flags": 4}, + {"matrix": [2, 12], "x": 174, "y": 24, "flags": 4}, + {"matrix": [2, 13], "x": 186, "y": 24, "flags": 4}, + {"matrix": [2, 14], "x": 201, "y": 24, "flags": 4}, + {"matrix": [2, 15], "x": 222, "y": 25, "flags": 1}, + {"matrix": [3, 0], "x": 2, "y": 34, "flags": 1}, + {"matrix": [3, 1], "x": 23, "y": 34, "flags": 8}, + {"matrix": [3, 2], "x": 40, "y": 34, "flags": 4}, + {"matrix": [3, 3], "x": 54, "y": 35, "flags": 4}, + {"matrix": [3, 4], "x": 66, "y": 37, "flags": 4}, + {"matrix": [3, 5], "x": 78, "y": 39, "flags": 4}, + {"matrix": [3, 6], "x": 90, "y": 42, "flags": 4}, + {"matrix": [3, 8], "x": 118, "y": 43, "flags": 4}, + {"matrix": [3, 9], "x": 130, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 142, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 154, "y": 36, "flags": 4}, + {"matrix": [3, 12], "x": 167, "y": 35, "flags": 4}, + {"matrix": [3, 13], "x": 179, "y": 35, "flags": 4}, + {"matrix": [3, 14], "x": 199, "y": 35, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 36, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 45, "flags": 1}, + {"matrix": [4, 1], "x": 24, "y": 45, "flags": 1}, + {"matrix": [4, 3], "x": 44, "y": 45, "flags": 4}, + {"matrix": [4, 4], "x": 57, "y": 46, "flags": 4}, + {"matrix": [4, 5], "x": 69, "y": 48, "flags": 4}, + {"matrix": [4, 6], "x": 81, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 93, "y": 53, "flags": 4}, + {"matrix": [4, 8], "x": 111, "y": 54, "flags": 4}, + {"matrix": [4, 9], "x": 123, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 135, "y": 50, "flags": 4}, + {"matrix": [4, 11], "x": 147, "y": 48, "flags": 4}, + {"matrix": [4, 12], "x": 159, "y": 46, "flags": 4}, + {"matrix": [4, 13], "x": 173, "y": 45, "flags": 4}, + {"matrix": [4, 14], "x": 190, "y": 45, "flags": 1}, + {"matrix": [4, 15], "x": 210, "y": 47, "flags": 1}, + {"matrix": [5, 0], "x": 0, "y": 55, "flags": 1}, + {"matrix": [5, 1], "x": 18, "y": 55, "flags": 1}, + {"matrix": [5, 2], "x": 33, "y": 55, "flags": 1}, + {"matrix": [5, 3], "x": 56, "y": 57, "flags": 1}, + {"matrix": [5, 4], "x": 77, "y": 61, "flags": 4}, + {"matrix": [5, 7], "x": 97, "y": 64, "flags": 1}, + {"matrix": [5, 8], "x": 124, "y": 63, "flags": 4}, + {"matrix": [5, 9], "x": 147, "y": 59, "flags": 1}, + {"matrix": [5, 13], "x": 198, "y": 58, "flags": 1}, + {"matrix": [5, 14], "x": 210, "y": 58, "flags": 1}, + {"matrix": [5, 15], "x": 222, "y": 58, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_89": { "layout": [ diff --git a/keyboards/keychron/v10/iso_encoder/iso_encoder.c b/keyboards/keychron/v10/iso_encoder/iso_encoder.c index 359646b542..5092a283df 100644 --- a/keyboards/keychron/v10/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/v10/iso_encoder/iso_encoder.c @@ -122,37 +122,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA2, CB4_CA2, CB5_CA2}, // Down {1, CB6_CA1, CB4_CA1, CB5_CA1}, // Right }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { __, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 }, - { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 45 }, - { 46, 47, 48, 49, 50, 51, 52, __, 53, 54, 55, 56, 57, 58, 60, 61 }, - { 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77 }, - { 78, 79, 80, 81, 82, __, __, 83, 84, 85, __, __, __, 86, 87, 88 }, - }, - { - // LED Index to Physical Position - {0,0}, {19,0}, {34,0}, {60,1}, {72,3}, {87,6}, {99,8}, {120,8}, {132,6}, {147,3}, {159,1}, {173,0}, {185,0}, {201,1}, {219,1}, - {5,14}, {24,14}, {36,14}, {48,13}, {62,15}, {74,17}, {86,20}, {98,22}, {115,22}, {127,20}, {139,17}, {151,15}, {165,13}, {177,14}, {195,14}, {220,15}, - {4,24}, {24,24}, {40,24}, {53,24}, {65,27}, {77,29}, {89,31}, {112,33}, {124,31}, {136,29}, {148,27}, {160,24}, {176,24}, {189,24}, {222,25}, - {2,34}, {23,34}, {40,34}, {54,35}, {66,37}, {78,39}, {90,42}, {118,43}, {130,40}, {142,38}, {154,36}, {167,35}, {179,35}, {192,35}, {208,31}, {224,36}, - {0,45}, {18,45}, {31,45}, {44,45}, {57,46}, {69,48}, {81,51}, {93,53}, {111,54}, {123,52}, {135,50}, {147,48}, {159,46}, {173,45}, {190,45}, {210,47}, - {0,55}, {18,55}, {33,55}, {56,57}, {77,61}, {97,64}, {124,63}, {147,59}, {198,58}, {210,58}, {222,58}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 4, 1, 4, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/v10/iso_encoder/keyboard.json b/keyboards/keychron/v10/iso_encoder/keyboard.json index ea2dfb35e2..7880fd6501 100644 --- a/keyboards/keychron/v10/iso_encoder/keyboard.json +++ b/keyboards/keychron/v10/iso_encoder/keyboard.json @@ -27,6 +27,99 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 1], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 19, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 34, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 60, "y": 1, "flags": 1}, + {"matrix": [0, 5], "x": 72, "y": 3, "flags": 1}, + {"matrix": [0, 6], "x": 87, "y": 6, "flags": 1}, + {"matrix": [0, 7], "x": 99, "y": 8, "flags": 1}, + {"matrix": [0, 8], "x": 120, "y": 8, "flags": 1}, + {"matrix": [0, 9], "x": 132, "y": 6, "flags": 1}, + {"matrix": [0, 10], "x": 147, "y": 3, "flags": 1}, + {"matrix": [0, 11], "x": 159, "y": 1, "flags": 1}, + {"matrix": [0, 12], "x": 173, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 185, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 201, "y": 1, "flags": 1}, + {"matrix": [0, 15], "x": 219, "y": 1, "flags": 1}, + {"matrix": [1, 0], "x": 5, "y": 14, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 14, "flags": 1}, + {"matrix": [1, 2], "x": 36, "y": 14, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 13, "flags": 4}, + {"matrix": [1, 4], "x": 62, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 74, "y": 17, "flags": 4}, + {"matrix": [1, 6], "x": 86, "y": 20, "flags": 4}, + {"matrix": [1, 7], "x": 98, "y": 22, "flags": 4}, + {"matrix": [1, 8], "x": 115, "y": 22, "flags": 4}, + {"matrix": [1, 9], "x": 127, "y": 20, "flags": 4}, + {"matrix": [1, 10], "x": 139, "y": 17, "flags": 4}, + {"matrix": [1, 11], "x": 151, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 165, "y": 13, "flags": 4}, + {"matrix": [1, 13], "x": 177, "y": 14, "flags": 4}, + {"matrix": [1, 14], "x": 195, "y": 14, "flags": 1}, + {"matrix": [1, 15], "x": 220, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 4, "y": 24, "flags": 1}, + {"matrix": [2, 1], "x": 24, "y": 24, "flags": 1}, + {"matrix": [2, 2], "x": 40, "y": 24, "flags": 4}, + {"matrix": [2, 3], "x": 53, "y": 24, "flags": 4}, + {"matrix": [2, 4], "x": 65, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 77, "y": 29, "flags": 4}, + {"matrix": [2, 6], "x": 89, "y": 31, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 33, "flags": 4}, + {"matrix": [2, 8], "x": 124, "y": 31, "flags": 4}, + {"matrix": [2, 9], "x": 136, "y": 29, "flags": 4}, + {"matrix": [2, 10], "x": 148, "y": 27, "flags": 4}, + {"matrix": [2, 11], "x": 160, "y": 24, "flags": 4}, + {"matrix": [2, 12], "x": 176, "y": 24, "flags": 4}, + {"matrix": [2, 13], "x": 189, "y": 24, "flags": 4}, + {"matrix": [2, 15], "x": 222, "y": 25, "flags": 1}, + {"matrix": [3, 0], "x": 2, "y": 34, "flags": 1}, + {"matrix": [3, 1], "x": 23, "y": 34, "flags": 8}, + {"matrix": [3, 2], "x": 40, "y": 34, "flags": 4}, + {"matrix": [3, 3], "x": 54, "y": 35, "flags": 4}, + {"matrix": [3, 4], "x": 66, "y": 37, "flags": 4}, + {"matrix": [3, 5], "x": 78, "y": 39, "flags": 4}, + {"matrix": [3, 6], "x": 90, "y": 42, "flags": 4}, + {"matrix": [3, 8], "x": 118, "y": 43, "flags": 4}, + {"matrix": [3, 9], "x": 130, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 142, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 154, "y": 36, "flags": 4}, + {"matrix": [3, 12], "x": 167, "y": 35, "flags": 4}, + {"matrix": [3, 13], "x": 179, "y": 35, "flags": 4}, + {"matrix": [2, 14], "x": 192, "y": 35, "flags": 4}, + {"matrix": [3, 14], "x": 208, "y": 31, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 36, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 45, "flags": 1}, + {"matrix": [4, 1], "x": 18, "y": 45, "flags": 1}, + {"matrix": [4, 2], "x": 31, "y": 45, "flags": 4}, + {"matrix": [4, 3], "x": 44, "y": 45, "flags": 4}, + {"matrix": [4, 4], "x": 57, "y": 46, "flags": 4}, + {"matrix": [4, 5], "x": 69, "y": 48, "flags": 4}, + {"matrix": [4, 6], "x": 81, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 93, "y": 53, "flags": 4}, + {"matrix": [4, 8], "x": 111, "y": 54, "flags": 4}, + {"matrix": [4, 9], "x": 123, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 135, "y": 50, "flags": 4}, + {"matrix": [4, 11], "x": 147, "y": 48, "flags": 4}, + {"matrix": [4, 12], "x": 159, "y": 46, "flags": 4}, + {"matrix": [4, 13], "x": 173, "y": 45, "flags": 4}, + {"matrix": [4, 14], "x": 190, "y": 45, "flags": 1}, + {"matrix": [4, 15], "x": 210, "y": 47, "flags": 1}, + {"matrix": [5, 0], "x": 0, "y": 55, "flags": 1}, + {"matrix": [5, 1], "x": 18, "y": 55, "flags": 1}, + {"matrix": [5, 2], "x": 33, "y": 55, "flags": 1}, + {"matrix": [5, 3], "x": 56, "y": 57, "flags": 1}, + {"matrix": [5, 4], "x": 77, "y": 61, "flags": 4}, + {"matrix": [5, 7], "x": 97, "y": 64, "flags": 1}, + {"matrix": [5, 8], "x": 124, "y": 63, "flags": 4}, + {"matrix": [5, 9], "x": 147, "y": 59, "flags": 1}, + {"matrix": [5, 13], "x": 198, "y": 58, "flags": 1}, + {"matrix": [5, 14], "x": 210, "y": 58, "flags": 1}, + {"matrix": [5, 15], "x": 222, "y": 58, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_90": { "layout": [ From 0828fc4b6ff126b2466bd92110770ac412a1ad56 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:03:13 -0600 Subject: [PATCH 31/99] Migrate `g_led_config` to DD (K2) (#25602) --- keyboards/keebio/bamfk4/bamfk4.c | 37 ------ keyboards/keebio/bamfk4/keyboard.json | 34 ++++++ keyboards/keebio/bdn9/rev2/keyboard.json | 15 ++- keyboards/keebio/bdn9/rev2/rev2.c | 21 ---- keyboards/keebio/iris/rev6/keyboard.json | 70 ++++++++++++ keyboards/keebio/iris/rev6/rev6.c | 51 --------- keyboards/keebio/iris/rev7/keyboard.json | 70 ++++++++++++ keyboards/keebio/iris/rev7/rev7.c | 53 --------- keyboards/keebio/stick/keyboard.json | 16 ++- keyboards/keebio/stick/stick.c | 15 --- keyboards/keybee/keybee65/keybee65.c | 39 ------- keyboards/keybee/keybee65/keyboard.json | 70 ++++++++++++ keyboards/keycapsss/kimiko/kimiko.c | 83 -------------- keyboards/keycapsss/kimiko/rev1/keyboard.json | 65 +++++++++++ .../keychron/q10/ansi_encoder/ansi_encoder.c | 33 ------ .../keychron/q10/ansi_encoder/keyboard.json | 92 +++++++++++++++ .../keychron/q10/iso_encoder/iso_encoder.c | 33 ------ .../keychron/q10/iso_encoder/keyboard.json | 93 +++++++++++++++ .../keychron/q12/ansi_encoder/ansi_encoder.c | 32 ------ .../keychron/q12/ansi_encoder/keyboard.json | 106 +++++++++++++++++ .../keychron/q12/iso_encoder/iso_encoder.c | 32 ------ .../keychron/q12/iso_encoder/keyboard.json | 107 ++++++++++++++++++ 22 files changed, 736 insertions(+), 431 deletions(-) delete mode 100644 keyboards/keebio/bamfk4/bamfk4.c delete mode 100644 keyboards/keybee/keybee65/keybee65.c delete mode 100644 keyboards/keycapsss/kimiko/kimiko.c diff --git a/keyboards/keebio/bamfk4/bamfk4.c b/keyboards/keebio/bamfk4/bamfk4.c deleted file mode 100644 index 757bc03f72..0000000000 --- a/keyboards/keebio/bamfk4/bamfk4.c +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2022 Danny Nguyen (@nooges) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { NO_LED, NO_LED, NO_LED, NO_LED }, -}, { - // LED Index to Physical Position - //through switch - { 26, 10 }, { 4, 10 }, { 3, 49 }, { 23, 49 }, - { 69, 49 }, { 68, 10 }, { 90, 10 }, { 89, 49 }, - { 134, 49 }, { 132, 10 }, { 155, 10 }, { 155, 49 }, - { 199, 49 }, { 199, 10 }, { 219, 10 }, { 219, 49 }, - - //underglow - { 218, 62 }, { 188, 62 }, { 159, 62 }, { 123, 62 }, //bottom right - { 100, 62 }, { 59, 62 }, { 35, 62 }, { 5, 62 }, //bottom left - { 6, 6 }, { 35, 6 }, { 59, 6 }, { 100, 6 }, //top left - { 123, 6 }, { 159, 6 }, { 188, 6 }, { 218, 6 } //top right -}, { - // LED Index to Flag - 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, 4, - 2, 2, 2, 2, - 2, 2, 2, 2, - 2, 2, 2, 2, - 2, 2, 2, 2 -} }; - - - -#endif \ No newline at end of file diff --git a/keyboards/keebio/bamfk4/keyboard.json b/keyboards/keebio/bamfk4/keyboard.json index 08b3900766..98ea684637 100644 --- a/keyboards/keebio/bamfk4/keyboard.json +++ b/keyboards/keebio/bamfk4/keyboard.json @@ -50,6 +50,40 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"x": 26, "y": 10, "flags": 4}, + {"x": 4, "y": 10, "flags": 4}, + {"x": 3, "y": 49, "flags": 4}, + {"x": 23, "y": 49, "flags": 4}, + {"x": 69, "y": 49, "flags": 4}, + {"x": 68, "y": 10, "flags": 4}, + {"x": 90, "y": 10, "flags": 4}, + {"x": 89, "y": 49, "flags": 4}, + {"x": 134, "y": 49, "flags": 4}, + {"x": 132, "y": 10, "flags": 4}, + {"x": 155, "y": 10, "flags": 4}, + {"x": 155, "y": 49, "flags": 4}, + {"x": 199, "y": 49, "flags": 4}, + {"x": 199, "y": 10, "flags": 4}, + {"x": 219, "y": 10, "flags": 4}, + {"x": 219, "y": 49, "flags": 4}, + {"x": 218, "y": 62, "flags": 2}, + {"x": 188, "y": 62, "flags": 2}, + {"x": 159, "y": 62, "flags": 2}, + {"x": 123, "y": 62, "flags": 2}, + {"x": 100, "y": 62, "flags": 2}, + {"x": 59, "y": 62, "flags": 2}, + {"x": 35, "y": 62, "flags": 2}, + {"x": 5, "y": 62, "flags": 2}, + {"x": 6, "y": 6, "flags": 2}, + {"x": 35, "y": 6, "flags": 2}, + {"x": 59, "y": 6, "flags": 2}, + {"x": 100, "y": 6, "flags": 2}, + {"x": 123, "y": 6, "flags": 2}, + {"x": 159, "y": 6, "flags": 2}, + {"x": 188, "y": 6, "flags": 2}, + {"x": 218, "y": 6, "flags": 2} + ], "max_brightness": 160, "sleep": true }, diff --git a/keyboards/keebio/bdn9/rev2/keyboard.json b/keyboards/keebio/bdn9/rev2/keyboard.json index a8a0c8d10d..ee1787e169 100644 --- a/keyboards/keebio/bdn9/rev2/keyboard.json +++ b/keyboards/keebio/bdn9/rev2/keyboard.json @@ -71,7 +71,20 @@ "solid_splash": true, "solid_multisplash": true }, - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [1, 1], "x": 112, "y": 32, "flags": 4}, + {"matrix": [1, 2], "x": 224, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [2, 1], "x": 112, "y": 64, "flags": 4}, + {"matrix": [2, 2], "x": 224, "y": 64, "flags": 4}, + {"x": 56, "y": 64, "flags": 2}, + {"x": 168, "y": 64, "flags": 2} + ] }, "encoder": { "rotary": [ diff --git a/keyboards/keebio/bdn9/rev2/rev2.c b/keyboards/keebio/bdn9/rev2/rev2.c index 5c6d940325..70b0b0c4fd 100644 --- a/keyboards/keebio/bdn9/rev2/rev2.c +++ b/keyboards/keebio/bdn9/rev2/rev2.c @@ -1,26 +1,5 @@ #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2 }, - { 3, 4, 5 }, - { 6, 7, 8 } -}, { - // LED Index to Physical Position - { 0, 0 }, { 112, 0 }, { 224, 0 }, - { 0, 32 }, { 112, 32 }, { 224, 32 }, - { 0, 64 }, { 112, 64 }, { 224, 64 }, - { 56, 64 }, { 168, 64 }, -}, { - // LED Index to Flag - 4, 4, 4, - 4, 4, 4, - 4, 4, 4, - 2, 2 -} }; -#endif - void eeconfig_init_kb(void) { #ifdef RGBLIGHT_ENABLE rgblight_enable(); // Enable RGB by default diff --git a/keyboards/keebio/iris/rev6/keyboard.json b/keyboards/keebio/iris/rev6/keyboard.json index ef240c5ab9..910c4b35ce 100644 --- a/keyboards/keebio/iris/rev6/keyboard.json +++ b/keyboards/keebio/iris/rev6/keyboard.json @@ -43,6 +43,76 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 5, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 5, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 2, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 2, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 3, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 17, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 13, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 18, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 18, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 28, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 27, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 28, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 30, "flags": 4}, + {"matrix": [3, 5], "x": 80, "y": 43, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 42, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 32, "y": 42, "flags": 4}, + {"matrix": [3, 1], "x": 16, "y": 45, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 45, "flags": 4}, + {"matrix": [4, 2], "x": 56, "y": 47, "flags": 4}, + {"matrix": [4, 3], "x": 72, "y": 58, "flags": 4}, + {"matrix": [4, 4], "x": 90, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 98, "y": 52, "flags": 4}, + {"x": 80, "y": 58, "flags": 2}, + {"x": 40, "y": 50, "flags": 2}, + {"x": 8, "y": 43, "flags": 2}, + {"x": 8, "y": 5, "flags": 2}, + {"x": 40, "y": 1, "flags": 2}, + {"x": 72, "y": 3, "flags": 2}, + {"matrix": [5, 0], "x": 224, "y": 5, "flags": 4}, + {"matrix": [5, 1], "x": 208, "y": 5, "flags": 4}, + {"matrix": [5, 2], "x": 192, "y": 2, "flags": 4}, + {"matrix": [5, 3], "x": 176, "y": 0, "flags": 4}, + {"matrix": [5, 4], "x": 160, "y": 2, "flags": 4}, + {"matrix": [5, 5], "x": 144, "y": 3, "flags": 4}, + {"matrix": [6, 5], "x": 144, "y": 18, "flags": 4}, + {"matrix": [6, 4], "x": 160, "y": 18, "flags": 4}, + {"matrix": [6, 3], "x": 176, "y": 15, "flags": 4}, + {"matrix": [6, 2], "x": 192, "y": 13, "flags": 4}, + {"matrix": [6, 1], "x": 208, "y": 15, "flags": 4}, + {"matrix": [6, 0], "x": 224, "y": 17, "flags": 4}, + {"matrix": [7, 0], "x": 224, "y": 32, "flags": 4}, + {"matrix": [7, 1], "x": 208, "y": 32, "flags": 4}, + {"matrix": [7, 2], "x": 192, "y": 28, "flags": 4}, + {"matrix": [7, 3], "x": 176, "y": 27, "flags": 4}, + {"matrix": [7, 4], "x": 160, "y": 28, "flags": 4}, + {"matrix": [7, 5], "x": 144, "y": 30, "flags": 4}, + {"matrix": [8, 5], "x": 144, "y": 45, "flags": 4}, + {"matrix": [8, 4], "x": 160, "y": 45, "flags": 4}, + {"matrix": [8, 3], "x": 176, "y": 42, "flags": 4}, + {"matrix": [8, 2], "x": 192, "y": 40, "flags": 4}, + {"matrix": [8, 1], "x": 208, "y": 42, "flags": 4}, + {"matrix": [8, 0], "x": 224, "y": 43, "flags": 4}, + {"matrix": [9, 2], "x": 168, "y": 47, "flags": 4}, + {"matrix": [9, 3], "x": 152, "y": 58, "flags": 4}, + {"matrix": [9, 4], "x": 134, "y": 64, "flags": 4}, + {"matrix": [9, 5], "x": 126, "y": 52, "flags": 4}, + {"x": 144, "y": 58, "flags": 2}, + {"x": 184, "y": 50, "flags": 2}, + {"x": 216, "y": 43, "flags": 2}, + {"x": 216, "y": 5, "flags": 2}, + {"x": 184, "y": 1, "flags": 2}, + {"x": 152, "y": 3, "flags": 2} + ], "max_brightness": 160, "sleep": true, "split_count": [34, 34] diff --git a/keyboards/keebio/iris/rev6/rev6.c b/keyboards/keebio/iris/rev6/rev6.c index 3d9e18fd01..1547a0a6e8 100644 --- a/keyboards/keebio/iris/rev6/rev6.c +++ b/keyboards/keebio/iris/rev6/rev6.c @@ -13,57 +13,6 @@ along with this program. If not, see . */ #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - // Left Half - { 0, 1, 2, 3, 4, 5 }, - { 11, 10, 9, 8, 7, 6 }, - { 12, 13, 14, 15, 16, 17 }, - { 23, 22, 21, 20, 19, 18 }, - { NO_LED, NO_LED, 24, 25, 26, 27 }, - // Right Half - { 34, 35, 36, 37, 38, 39 }, - { 45, 44, 43, 42, 41, 40 }, - { 46, 47, 48, 49, 50, 51 }, - { 57, 56, 55, 54, 53, 52 }, - { NO_LED, NO_LED, 58, 59, 60, 61 } -}, { - // LED Index to Physical Position - // Left Half - { 0, 5 }, { 16, 5 }, { 32, 2 }, { 48, 0 }, { 64, 2 }, { 80, 3 }, - { 80, 17 }, { 64, 15 }, { 48, 13 }, { 32, 15 }, { 16, 18 }, { 0, 18 }, - { 0, 32 }, { 16, 32 }, { 32, 28 }, { 48, 27 }, { 64, 28 }, { 80, 30 }, - { 80, 43 }, { 64, 42 }, { 48, 40 }, { 32, 42 }, { 16, 45 }, { 0, 45 }, - { 56, 47 }, { 72, 58 }, { 90, 64 }, { 98, 52 }, - { 80, 58 }, { 40, 50 }, { 8, 43 }, { 8, 5 }, { 40, 1 }, { 72, 3 }, - // Right Half - { 224, 5 }, { 208, 5 }, { 192, 2 }, { 176, 0 }, { 160, 2 }, { 144, 3 }, - { 144, 18 }, { 160, 18 }, { 176, 15 }, { 192, 13 }, { 208, 15 }, { 224, 17 }, - { 224, 32 }, { 208, 32 }, { 192, 28 }, { 176, 27 }, { 160, 28 }, { 144, 30 }, - { 144, 45 }, { 160, 45 }, { 176, 42 }, { 192, 40 }, { 208, 42 }, { 224, 43 }, - { 168, 47 }, { 152, 58 }, { 134, 64 }, { 126, 52 }, - { 144, 58 }, { 184, 50 }, { 216, 43 }, { 216, 5 }, { 184, 1 }, { 152, 3 } -}, { - // LED Index to Flag - // Left Half - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, - // Right Half - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2 - -} }; -#endif - #ifdef ENCODER_ENABLE bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } diff --git a/keyboards/keebio/iris/rev7/keyboard.json b/keyboards/keebio/iris/rev7/keyboard.json index 79b410cd94..7b58990d18 100644 --- a/keyboards/keebio/iris/rev7/keyboard.json +++ b/keyboards/keebio/iris/rev7/keyboard.json @@ -41,6 +41,76 @@ "multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 5, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 5, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 2, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 2, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 3, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 17, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 13, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 18, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 18, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 28, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 27, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 28, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 30, "flags": 4}, + {"matrix": [3, 5], "x": 80, "y": 43, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 42, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 32, "y": 42, "flags": 4}, + {"matrix": [3, 1], "x": 16, "y": 45, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 45, "flags": 4}, + {"matrix": [4, 2], "x": 56, "y": 47, "flags": 4}, + {"matrix": [4, 3], "x": 72, "y": 58, "flags": 4}, + {"matrix": [4, 4], "x": 90, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 98, "y": 52, "flags": 4}, + {"x": 80, "y": 58, "flags": 2}, + {"x": 40, "y": 50, "flags": 2}, + {"x": 8, "y": 43, "flags": 2}, + {"x": 8, "y": 5, "flags": 2}, + {"x": 40, "y": 1, "flags": 2}, + {"x": 72, "y": 3, "flags": 2}, + {"matrix": [5, 0], "x": 224, "y": 5, "flags": 4}, + {"matrix": [5, 1], "x": 208, "y": 5, "flags": 4}, + {"matrix": [5, 2], "x": 192, "y": 2, "flags": 4}, + {"matrix": [5, 3], "x": 176, "y": 0, "flags": 4}, + {"matrix": [5, 4], "x": 160, "y": 2, "flags": 4}, + {"matrix": [5, 5], "x": 144, "y": 3, "flags": 4}, + {"matrix": [6, 5], "x": 144, "y": 18, "flags": 4}, + {"matrix": [6, 4], "x": 160, "y": 18, "flags": 4}, + {"matrix": [6, 3], "x": 176, "y": 15, "flags": 4}, + {"matrix": [6, 2], "x": 192, "y": 13, "flags": 4}, + {"matrix": [6, 1], "x": 208, "y": 15, "flags": 4}, + {"matrix": [6, 0], "x": 224, "y": 17, "flags": 4}, + {"matrix": [7, 0], "x": 224, "y": 32, "flags": 4}, + {"matrix": [7, 1], "x": 208, "y": 32, "flags": 4}, + {"matrix": [7, 2], "x": 192, "y": 28, "flags": 4}, + {"matrix": [7, 3], "x": 176, "y": 27, "flags": 4}, + {"matrix": [7, 4], "x": 160, "y": 28, "flags": 4}, + {"matrix": [7, 5], "x": 144, "y": 30, "flags": 4}, + {"matrix": [8, 5], "x": 144, "y": 45, "flags": 4}, + {"matrix": [8, 4], "x": 160, "y": 45, "flags": 4}, + {"matrix": [8, 3], "x": 176, "y": 42, "flags": 4}, + {"matrix": [8, 2], "x": 192, "y": 40, "flags": 4}, + {"matrix": [8, 1], "x": 208, "y": 42, "flags": 4}, + {"matrix": [8, 0], "x": 224, "y": 43, "flags": 4}, + {"matrix": [9, 2], "x": 168, "y": 47, "flags": 4}, + {"matrix": [9, 3], "x": 152, "y": 58, "flags": 4}, + {"matrix": [9, 4], "x": 134, "y": 64, "flags": 4}, + {"matrix": [9, 5], "x": 126, "y": 52, "flags": 4}, + {"x": 144, "y": 58, "flags": 2}, + {"x": 184, "y": 50, "flags": 2}, + {"x": 216, "y": 43, "flags": 2}, + {"x": 216, "y": 5, "flags": 2}, + {"x": 184, "y": 1, "flags": 2}, + {"x": 152, "y": 3, "flags": 2} + ], "max_brightness": 120, "sleep": true, "split_count": [34, 34] diff --git a/keyboards/keebio/iris/rev7/rev7.c b/keyboards/keebio/iris/rev7/rev7.c index deab7acc8a..197a9dec75 100644 --- a/keyboards/keebio/iris/rev7/rev7.c +++ b/keyboards/keebio/iris/rev7/rev7.c @@ -13,59 +13,6 @@ along with this program. If not, see . */ #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - // Left Half - { 0, 1, 2, 3, 4, 5 }, - { 11, 10, 9, 8, 7, 6 }, - { 12, 13, 14, 15, 16, 17 }, - { 23, 22, 21, 20, 19, 18 }, - { NO_LED, NO_LED, 24, 25, 26, 27 }, - // Right Half - { 34, 35, 36, 37, 38, 39 }, - { 45, 44, 43, 42, 41, 40 }, - { 46, 47, 48, 49, 50, 51 }, - { 57, 56, 55, 54, 53, 52 }, - { NO_LED, NO_LED, 58, 59, 60, 61 } -}, { - // LED Index to Physical Position - // Left Half - { 0, 5 }, { 16, 5 }, { 32, 2 }, { 48, 0 }, { 64, 2 }, { 80, 3 }, - { 80, 17 }, { 64, 15 }, { 48, 13 }, { 32, 15 }, { 16, 18 }, { 0, 18 }, - { 0, 32 }, { 16, 32 }, { 32, 28 }, { 48, 27 }, { 64, 28 }, { 80, 30 }, - { 80, 43 }, { 64, 42 }, { 48, 40 }, { 32, 42 }, { 16, 45 }, { 0, 45 }, - { 56, 47 }, { 72, 58 }, { 90, 64 }, { 98, 52 }, - { 80, 58 }, { 40, 50 }, { 8, 43 }, { 8, 5 }, { 40, 1 }, { 72, 3 }, - // Right Half - { 224, 5 }, { 208, 5 }, { 192, 2 }, { 176, 0 }, { 160, 2 }, { 144, 3 }, - { 144, 18 }, { 160, 18 }, { 176, 15 }, { 192, 13 }, { 208, 15 }, { 224, 17 }, - { 224, 32 }, { 208, 32 }, { 192, 28 }, { 176, 27 }, { 160, 28 }, { 144, 30 }, - { 144, 45 }, { 160, 45 }, { 176, 42 }, { 192, 40 }, { 208, 42 }, { 224, 43 }, - { 168, 47 }, { 152, 58 }, { 134, 64 }, { 126, 52 }, - { 144, 58 }, { 184, 50 }, { 216, 43 }, { 216, 5 }, { 184, 1 }, { 152, 3 } -}, { - // LED Index to Flag - // Left Half - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, - // Right Half - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2 - -} }; - - -#endif - #ifdef ENCODER_ENABLE bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } diff --git a/keyboards/keebio/stick/keyboard.json b/keyboards/keebio/stick/keyboard.json index b8d1184ec1..00102c565a 100644 --- a/keyboards/keebio/stick/keyboard.json +++ b/keyboards/keebio/stick/keyboard.json @@ -54,7 +54,21 @@ "solid_splash": true, "solid_multisplash": true }, - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 20, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 40, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 100, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 140, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 200, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 220, "y": 0, "flags": 4} + ] }, "encoder": { "rotary": [ diff --git a/keyboards/keebio/stick/stick.c b/keyboards/keebio/stick/stick.c index 6fac145091..e54a0aa09f 100644 --- a/keyboards/keebio/stick/stick.c +++ b/keyboards/keebio/stick/stick.c @@ -17,21 +17,6 @@ along with this program. If not, see . #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 } -}, { - // LED Index to Physical Position - { 0, 0 }, { 20, 0 }, { 40, 0 }, { 60, 0 }, - { 80, 0 }, { 100, 0 }, { 120, 0 }, { 140, 0 }, - { 160, 0 }, { 180, 0 }, { 200, 0 }, { 220, 0 }, -}, { - // LED Index to Flag - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 -} }; -#endif - void eeconfig_init_kb(void) { #ifdef RGBLIGHT_ENABLE rgblight_enable(); // Enable RGB by default diff --git a/keyboards/keybee/keybee65/keybee65.c b/keyboards/keybee/keybee65/keybee65.c deleted file mode 100644 index 6033dbeaaa..0000000000 --- a/keyboards/keybee/keybee65/keybee65.c +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright 2020 -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 "quantum.h" - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, NO_LED, 13, 14 }, - { 29, NO_LED, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15 }, - { 30, NO_LED, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED, 42, 43 }, - { 57, NO_LED, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, NO_LED, 45, 44 }, - { 58, 59, 60, NO_LED, NO_LED, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, 63, 64, 65, 66, 67 } - }, { - // LED Index to Physical Position - { 6, 2 }, { 20, 2 }, { 35, 11 }, { 49, 11 }, { 64, 11 }, { 78, 11 }, { 92, 11 }, { 107, 11 }, { 120, 11 }, { 135, 11 }, { 148, 11 }, { 164, 11 }, { 177, 11 }, { 198, 11 }, { 220, 11 }, - { 9, 24 }, { 26, 24 }, { 42, 24 }, { 56, 24 }, { 70, 24 }, { 85, 24 }, { 100, 24 }, { 113, 24 }, { 128, 24 }, { 143, 24 }, { 156, 24 }, { 170, 24 }, { 184, 24 }, { 202, 24 }, { 220, 24 }, - { 11, 38 }, { 29, 38 }, { 46, 38 }, { 60, 38 }, { 74, 38 }, { 88, 38 }, { 103, 38 }, { 118, 38 }, { 132, 38 }, { 146, 38 }, { 160, 38 }, { 174, 38 }, { 198, 38 }, { 220, 38 }, - { 16, 53 }, { 37, 53 }, { 52, 53 }, { 66, 53 }, { 80, 53 }, { 96, 53 }, { 110, 53 }, { 125, 53 }, { 140, 53 }, { 153, 53 }, { 168, 53 }, { 187, 53 }, { 207, 53 }, { 220, 53 }, - { 6, 68 }, { 25, 68 }, { 44, 68 }, { 96, 68 }, { 148, 68 }, { 164, 68 }, { 180, 68 }, { 192, 68 }, { 207, 68 }, { 220, 68 } - }, { - // LED Index to Flag - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 - } -}; diff --git a/keyboards/keybee/keybee65/keyboard.json b/keyboards/keybee/keybee65/keyboard.json index a2a4862836..a1f3426dbe 100644 --- a/keyboards/keybee/keybee65/keyboard.json +++ b/keyboards/keybee/keybee65/keyboard.json @@ -12,6 +12,76 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 6, "y": 2, "flags": 4}, + {"matrix": [0, 1], "x": 20, "y": 2, "flags": 4}, + {"matrix": [0, 2], "x": 35, "y": 11, "flags": 4}, + {"matrix": [0, 3], "x": 49, "y": 11, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 11, "flags": 4}, + {"matrix": [0, 5], "x": 78, "y": 11, "flags": 4}, + {"matrix": [0, 6], "x": 92, "y": 11, "flags": 4}, + {"matrix": [0, 7], "x": 107, "y": 11, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 11, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 11, "flags": 4}, + {"matrix": [0, 10], "x": 148, "y": 11, "flags": 4}, + {"matrix": [0, 11], "x": 164, "y": 11, "flags": 4}, + {"matrix": [0, 12], "x": 177, "y": 11, "flags": 4}, + {"matrix": [0, 14], "x": 198, "y": 11, "flags": 4}, + {"matrix": [0, 15], "x": 220, "y": 11, "flags": 4}, + {"matrix": [1, 15], "x": 9, "y": 24, "flags": 4}, + {"matrix": [1, 14], "x": 26, "y": 24, "flags": 4}, + {"matrix": [1, 13], "x": 42, "y": 24, "flags": 4}, + {"matrix": [1, 12], "x": 56, "y": 24, "flags": 4}, + {"matrix": [1, 11], "x": 70, "y": 24, "flags": 4}, + {"matrix": [1, 10], "x": 85, "y": 24, "flags": 4}, + {"matrix": [1, 9], "x": 100, "y": 24, "flags": 4}, + {"matrix": [1, 8], "x": 113, "y": 24, "flags": 4}, + {"matrix": [1, 7], "x": 128, "y": 24, "flags": 4}, + {"matrix": [1, 6], "x": 143, "y": 24, "flags": 4}, + {"matrix": [1, 5], "x": 156, "y": 24, "flags": 4}, + {"matrix": [1, 4], "x": 170, "y": 24, "flags": 4}, + {"matrix": [1, 3], "x": 184, "y": 24, "flags": 4}, + {"matrix": [1, 2], "x": 202, "y": 24, "flags": 4}, + {"matrix": [1, 0], "x": 220, "y": 24, "flags": 4}, + {"matrix": [2, 0], "x": 11, "y": 38, "flags": 4}, + {"matrix": [2, 2], "x": 29, "y": 38, "flags": 4}, + {"matrix": [2, 3], "x": 46, "y": 38, "flags": 4}, + {"matrix": [2, 4], "x": 60, "y": 38, "flags": 4}, + {"matrix": [2, 5], "x": 74, "y": 38, "flags": 4}, + {"matrix": [2, 6], "x": 88, "y": 38, "flags": 4}, + {"matrix": [2, 7], "x": 103, "y": 38, "flags": 4}, + {"matrix": [2, 8], "x": 118, "y": 38, "flags": 4}, + {"matrix": [2, 9], "x": 132, "y": 38, "flags": 4}, + {"matrix": [2, 10], "x": 146, "y": 38, "flags": 4}, + {"matrix": [2, 11], "x": 160, "y": 38, "flags": 4}, + {"matrix": [2, 12], "x": 174, "y": 38, "flags": 4}, + {"matrix": [2, 14], "x": 198, "y": 38, "flags": 4}, + {"matrix": [2, 15], "x": 220, "y": 38, "flags": 4}, + {"matrix": [3, 15], "x": 16, "y": 53, "flags": 4}, + {"matrix": [3, 14], "x": 37, "y": 53, "flags": 4}, + {"matrix": [3, 12], "x": 52, "y": 53, "flags": 4}, + {"matrix": [3, 11], "x": 66, "y": 53, "flags": 4}, + {"matrix": [3, 10], "x": 80, "y": 53, "flags": 4}, + {"matrix": [3, 9], "x": 96, "y": 53, "flags": 4}, + {"matrix": [3, 8], "x": 110, "y": 53, "flags": 4}, + {"matrix": [3, 7], "x": 125, "y": 53, "flags": 4}, + {"matrix": [3, 6], "x": 140, "y": 53, "flags": 4}, + {"matrix": [3, 5], "x": 153, "y": 53, "flags": 4}, + {"matrix": [3, 4], "x": 164, "y": 53, "flags": 4}, + {"matrix": [3, 3], "x": 187, "y": 53, "flags": 4}, + {"matrix": [3, 2], "x": 207, "y": 53, "flags": 4}, + {"matrix": [3, 0], "x": 220, "y": 53, "flags": 4}, + {"matrix": [4, 0], "x": 6, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 25, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 44, "y": 64, "flags": 4}, + {"matrix": [4, 7], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 148, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 164, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 180, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 192, "y": 64, "flags": 4}, + {"matrix": [4, 14], "x": 207, "y": 64, "flags": 4}, + {"matrix": [4, 15], "x": 220, "y": 64, "flags": 4} + ], "sleep": true }, "rgblight": { diff --git a/keyboards/keycapsss/kimiko/kimiko.c b/keyboards/keycapsss/kimiko/kimiko.c deleted file mode 100644 index c99a966603..0000000000 --- a/keyboards/keycapsss/kimiko/kimiko.c +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright 2023 @BenRoe (keycapsss.com) - * - * 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 "quantum.h" - -#ifdef KEYBOARD_keycapsss_kimiko_rev1 -#ifdef RGB_MATRIX_ENABLE - -//Thanks to Ben (keycapsss) for helpipng me to create g_led_config - -// Physical LED position -// X 0 16 32 48 64 80 96 112 128 144 160 176 208 224 -// -----------------------------------------------------------| Y -// 5 4 3 2 1 0 0 1 2 3 4 5 | 0 -// 6 7 8 9 10 11 11 10 9 8 7 6 | 16 -// 17 16 15 14 13 12 12 13 14 15 16 17 | 32 -// 18 19 20 21 22 23 24 24 23 22 21 20 19 18 | 48 -// 29 28 27 26 25 25 26 27 28 29 | 64 - -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 5, 4, 3, 2, 1, 0 }, - { 6, 7, 8, 9, 10, 11 }, - { 17, 16, 15, 14, 13, 12 }, - { 18, 19, 20, 21, 22, 23 }, - { 29, 28, 27, 26, 25, 24 }, - { 35, 34, 33, 32, 31, 30 }, - { 36, 37, 38, 39, 40, 41 }, - { 47, 46, 45, 44, 43, 42 }, - { 48, 49, 50, 51, 52, 53 }, - { 59, 58, 57, 56, 55, 54 } -}, { - // LED Index to Physical Position - // Left half - { 80, 0 }, { 64, 0 }, { 48, 0 }, { 32, 0 }, { 16, 0 }, { 0, 0 }, - { 0, 16 }, { 16, 16 }, { 32, 16 }, { 48, 16 }, { 64, 16 }, { 80, 16 }, - { 80, 32 }, { 64, 32 }, { 48, 32 }, { 32, 32 }, { 16, 32 }, { 0, 32 }, - { 0, 48 }, { 16, 48 }, { 32, 48 }, { 48, 48 }, { 64, 48 }, { 80, 48 }, - { 96, 48 }, { 96, 64 }, { 80, 64 }, { 64, 64 }, { 48, 64 }, { 32, 64 }, - // Right half - { 128, 0 }, { 144, 0 }, { 160, 0 }, { 176, 0 }, { 208, 0 }, { 224, 0 }, - { 224, 16 }, { 208, 16 }, { 176, 16 }, { 160, 16 }, { 144, 16 }, { 128, 16 }, - { 128, 32 }, { 144, 32 }, { 160, 32 }, { 176, 32 }, { 208, 32 }, { 224, 32 }, - { 224, 48 }, { 208, 48 }, { 176, 48 }, { 160, 48 }, { 144, 48 }, { 128, 48 }, - { 112, 48 }, { 112, 64 }, { 128, 64 }, { 144, 64 }, { 160, 64 }, { 176, 64 } - -}, { - // LED Index to Flag - // 0x01 = 1 = modifier key - // 0x02 = 2 = underglow - // 0x04 = 4 = key backlight - // 0x08 = 8 = keyboard state indication - // Left half - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 1, - 4, 4, 4, 4, 4, 1, - 4, 4, 1, 1, 1, 1, - // Right half - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, - 4, 4, 1, 1, 1, 1 -} }; - -#endif // RGB_MATRIX_ENABLE -#endif // KEYBOARD_keycapsss_kimiko_rev1 - - diff --git a/keyboards/keycapsss/kimiko/rev1/keyboard.json b/keyboards/keycapsss/kimiko/rev1/keyboard.json index ae09eb83c8..bf9aa76ed7 100644 --- a/keyboards/keycapsss/kimiko/rev1/keyboard.json +++ b/keyboards/keycapsss/kimiko/rev1/keyboard.json @@ -40,6 +40,71 @@ "led_count": 60, "split_count": [30, 30] }, + "rgb_matrix": { + "driver": "ws2812", + "layout": [ + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 16, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 16, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 80, "y": 48, "flags": 1}, + {"matrix": [4, 5], "x": 96, "y": 48, "flags": 4}, + {"matrix": [4, 4], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 80, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 64, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 48, "y": 64, "flags": 1}, + {"matrix": [4, 0], "x": 32, "y": 64, "flags": 1}, + {"matrix": [5, 5], "x": 128, "y": 0, "flags": 4}, + {"matrix": [5, 4], "x": 144, "y": 0, "flags": 4}, + {"matrix": [5, 3], "x": 160, "y": 0, "flags": 4}, + {"matrix": [5, 2], "x": 176, "y": 0, "flags": 4}, + {"matrix": [5, 1], "x": 208, "y": 0, "flags": 4}, + {"matrix": [5, 0], "x": 224, "y": 0, "flags": 4}, + {"matrix": [6, 0], "x": 224, "y": 16, "flags": 4}, + {"matrix": [6, 1], "x": 208, "y": 16, "flags": 4}, + {"matrix": [6, 2], "x": 176, "y": 16, "flags": 4}, + {"matrix": [6, 3], "x": 160, "y": 16, "flags": 4}, + {"matrix": [6, 4], "x": 144, "y": 16, "flags": 4}, + {"matrix": [6, 5], "x": 128, "y": 16, "flags": 4}, + {"matrix": [7, 5], "x": 128, "y": 32, "flags": 4}, + {"matrix": [7, 4], "x": 144, "y": 32, "flags": 4}, + {"matrix": [7, 3], "x": 160, "y": 32, "flags": 4}, + {"matrix": [7, 2], "x": 176, "y": 32, "flags": 4}, + {"matrix": [7, 1], "x": 208, "y": 32, "flags": 4}, + {"matrix": [7, 0], "x": 224, "y": 32, "flags": 4}, + {"matrix": [8, 0], "x": 224, "y": 48, "flags": 1}, + {"matrix": [8, 1], "x": 208, "y": 48, "flags": 4}, + {"matrix": [8, 2], "x": 176, "y": 48, "flags": 4}, + {"matrix": [8, 3], "x": 160, "y": 48, "flags": 4}, + {"matrix": [8, 4], "x": 144, "y": 48, "flags": 4}, + {"matrix": [8, 5], "x": 128, "y": 48, "flags": 4}, + {"matrix": [9, 5], "x": 112, "y": 48, "flags": 4}, + {"matrix": [9, 4], "x": 112, "y": 64, "flags": 4}, + {"matrix": [9, 3], "x": 128, "y": 64, "flags": 1}, + {"matrix": [9, 2], "x": 144, "y": 64, "flags": 1}, + {"matrix": [9, 1], "x": 160, "y": 64, "flags": 1}, + {"matrix": [9, 0], "x": 176, "y": 64, "flags": 1} + ] + }, "ws2812": { "pin": "D3" }, diff --git a/keyboards/keychron/q10/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q10/ansi_encoder/ansi_encoder.c index a4432cd4ce..5359d2b30b 100644 --- a/keyboards/keychron/q10/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q10/ansi_encoder/ansi_encoder.c @@ -121,37 +121,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA2, CB4_CA2, CB5_CA2}, // Down {1, CB6_CA1, CB4_CA1, CB5_CA1}, // Right }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { __, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 }, - { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46 }, - { 47, 48, 49, 50, 51, 52, 53, __, 54, 55, 56, 57, 58, 59, 60, 61 }, - { 62, 63, __, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76 }, - { 77, 78, 79, 80, 81, __, __, 82, 83, 84, __, __, __, 85, 86, 87 }, - }, - { - // LED Index to Physical Position - {19,0}, {34,0}, {46,0}, {60,1}, {72,3}, {87,6}, {99,8}, {120,8}, {132,6}, {147,3}, {159,1}, {173,0}, {185,0}, {201,1}, {219,1}, - {5,14}, {24,14}, {36,14}, {48,13}, {62,15}, {74,17}, {86,20}, {98,22}, {115,22}, {127,20}, {139,17}, {151,15}, {165,13}, {177,14}, {195,14}, {220,13}, - {4,24}, {24,24}, {40,24}, {53,24}, {65,27}, {77,29}, {89,31}, {112,33}, {124,31}, {136,29}, {148,27}, {160,24}, {174,24}, {186,24}, {201,24}, {222,25}, - {2,34}, {23,34}, {40,34}, {54,35}, {66,37}, {78,39}, {90,42}, {118,43}, {130,40}, {142,38}, {154,36}, {167,35}, {179,35}, {199,35}, {224,36}, - {0,45}, {24,45}, {44,45}, {57,46}, {69,48}, {81,51}, {93,53}, {111,54}, {123,52}, {135,50}, {147,48}, {159,46}, {173,45}, {190,45}, {210,47}, - {0,55}, {18,55}, {33,55}, {56,57}, {77,61}, {97,64}, {124,63}, {147,59}, {198,58}, {210,58}, {222,58}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 4, 1, 4, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q10/ansi_encoder/keyboard.json b/keyboards/keychron/q10/ansi_encoder/keyboard.json index f47136edf7..6cfb637b0d 100644 --- a/keyboards/keychron/q10/ansi_encoder/keyboard.json +++ b/keyboards/keychron/q10/ansi_encoder/keyboard.json @@ -27,6 +27,98 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 1], "x": 19, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 34, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 46, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 60, "y": 1, "flags": 1}, + {"matrix": [0, 5], "x": 72, "y": 3, "flags": 1}, + {"matrix": [0, 6], "x": 87, "y": 6, "flags": 1}, + {"matrix": [0, 7], "x": 99, "y": 8, "flags": 1}, + {"matrix": [0, 8], "x": 120, "y": 8, "flags": 1}, + {"matrix": [0, 9], "x": 132, "y": 6, "flags": 1}, + {"matrix": [0, 10], "x": 147, "y": 3, "flags": 1}, + {"matrix": [0, 11], "x": 159, "y": 1, "flags": 1}, + {"matrix": [0, 12], "x": 173, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 185, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 201, "y": 1, "flags": 1}, + {"matrix": [0, 15], "x": 219, "y": 1, "flags": 1}, + {"matrix": [1, 0], "x": 5, "y": 14, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 14, "flags": 1}, + {"matrix": [1, 2], "x": 36, "y": 14, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 13, "flags": 4}, + {"matrix": [1, 4], "x": 62, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 74, "y": 17, "flags": 4}, + {"matrix": [1, 6], "x": 86, "y": 20, "flags": 4}, + {"matrix": [1, 7], "x": 98, "y": 22, "flags": 4}, + {"matrix": [1, 8], "x": 115, "y": 22, "flags": 4}, + {"matrix": [1, 9], "x": 127, "y": 20, "flags": 4}, + {"matrix": [1, 10], "x": 139, "y": 17, "flags": 4}, + {"matrix": [1, 11], "x": 151, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 165, "y": 13, "flags": 4}, + {"matrix": [1, 13], "x": 177, "y": 14, "flags": 4}, + {"matrix": [1, 14], "x": 195, "y": 14, "flags": 1}, + {"matrix": [1, 15], "x": 220, "y": 13, "flags": 1}, + {"matrix": [2, 0], "x": 4, "y": 24, "flags": 1}, + {"matrix": [2, 1], "x": 24, "y": 24, "flags": 1}, + {"matrix": [2, 2], "x": 40, "y": 24, "flags": 4}, + {"matrix": [2, 3], "x": 53, "y": 24, "flags": 4}, + {"matrix": [2, 4], "x": 65, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 77, "y": 29, "flags": 4}, + {"matrix": [2, 6], "x": 89, "y": 31, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 33, "flags": 4}, + {"matrix": [2, 8], "x": 124, "y": 31, "flags": 4}, + {"matrix": [2, 9], "x": 136, "y": 29, "flags": 4}, + {"matrix": [2, 10], "x": 148, "y": 27, "flags": 4}, + {"matrix": [2, 11], "x": 160, "y": 24, "flags": 4}, + {"matrix": [2, 12], "x": 174, "y": 24, "flags": 4}, + {"matrix": [2, 13], "x": 186, "y": 24, "flags": 4}, + {"matrix": [2, 14], "x": 201, "y": 24, "flags": 4}, + {"matrix": [2, 15], "x": 222, "y": 25, "flags": 1}, + {"matrix": [3, 0], "x": 2, "y": 34, "flags": 1}, + {"matrix": [3, 1], "x": 23, "y": 34, "flags": 8}, + {"matrix": [3, 2], "x": 40, "y": 34, "flags": 4}, + {"matrix": [3, 3], "x": 54, "y": 35, "flags": 4}, + {"matrix": [3, 4], "x": 66, "y": 37, "flags": 4}, + {"matrix": [3, 5], "x": 78, "y": 39, "flags": 4}, + {"matrix": [3, 6], "x": 90, "y": 42, "flags": 4}, + {"matrix": [3, 8], "x": 118, "y": 43, "flags": 4}, + {"matrix": [3, 9], "x": 130, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 142, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 154, "y": 36, "flags": 4}, + {"matrix": [3, 12], "x": 167, "y": 35, "flags": 4}, + {"matrix": [3, 13], "x": 179, "y": 35, "flags": 4}, + {"matrix": [3, 14], "x": 199, "y": 35, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 36, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 45, "flags": 1}, + {"matrix": [4, 1], "x": 24, "y": 45, "flags": 1}, + {"matrix": [4, 3], "x": 44, "y": 45, "flags": 4}, + {"matrix": [4, 4], "x": 57, "y": 46, "flags": 4}, + {"matrix": [4, 5], "x": 69, "y": 48, "flags": 4}, + {"matrix": [4, 6], "x": 81, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 93, "y": 53, "flags": 4}, + {"matrix": [4, 8], "x": 111, "y": 54, "flags": 4}, + {"matrix": [4, 9], "x": 123, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 135, "y": 50, "flags": 4}, + {"matrix": [4, 11], "x": 147, "y": 48, "flags": 4}, + {"matrix": [4, 12], "x": 159, "y": 46, "flags": 4}, + {"matrix": [4, 13], "x": 173, "y": 45, "flags": 4}, + {"matrix": [4, 14], "x": 190, "y": 45, "flags": 1}, + {"matrix": [4, 15], "x": 210, "y": 47, "flags": 1}, + {"matrix": [5, 0], "x": 0, "y": 55, "flags": 1}, + {"matrix": [5, 1], "x": 18, "y": 55, "flags": 1}, + {"matrix": [5, 2], "x": 33, "y": 55, "flags": 1}, + {"matrix": [5, 3], "x": 56, "y": 57, "flags": 1}, + {"matrix": [5, 4], "x": 77, "y": 61, "flags": 4}, + {"matrix": [5, 7], "x": 97, "y": 64, "flags": 1}, + {"matrix": [5, 8], "x": 124, "y": 63, "flags": 4}, + {"matrix": [5, 9], "x": 147, "y": 59, "flags": 1}, + {"matrix": [5, 13], "x": 198, "y": 58, "flags": 1}, + {"matrix": [5, 14], "x": 210, "y": 58, "flags": 1}, + {"matrix": [5, 15], "x": 222, "y": 58, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_89": { "layout": [ diff --git a/keyboards/keychron/q10/iso_encoder/iso_encoder.c b/keyboards/keychron/q10/iso_encoder/iso_encoder.c index 9ff43263b2..c857c854ac 100644 --- a/keyboards/keychron/q10/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/q10/iso_encoder/iso_encoder.c @@ -122,37 +122,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB6_CA2, CB4_CA2, CB5_CA2}, // Down {1, CB6_CA1, CB4_CA1, CB5_CA1}, // Right }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { __, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 }, - { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 59, 45 }, - { 46, 47, 48, 49, 50, 51, 52, __, 53, 54, 55, 56, 57, 58, 60, 61 }, - { 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77 }, - { 78, 79, 80, 81, 82, __, __, 83, 84, 85, __, __, __, 86, 87, 88 }, - }, - { - // LED Index to Physical Position - {0,0}, {19,0}, {34,0}, {60,1}, {72,3}, {87,6}, {99,8}, {120,8}, {132,6}, {147,3}, {159,1}, {173,0}, {185,0}, {201,1}, {219,1}, - {5,14}, {24,14}, {36,14}, {48,13}, {62,15}, {74,17}, {86,20}, {98,22}, {115,22}, {127,20}, {139,17}, {151,15}, {165,13}, {177,14}, {195,14}, {220,15}, - {4,24}, {24,24}, {40,24}, {53,24}, {65,27}, {77,29}, {89,31}, {112,33}, {124,31}, {136,29}, {148,27}, {160,24}, {176,24}, {189,24}, {222,25}, - {2,34}, {23,34}, {40,34}, {54,35}, {66,37}, {78,39}, {90,42}, {118,43}, {130,40}, {142,38}, {154,36}, {167,35}, {179,35}, {192,35}, {208,31}, {224,36}, - {0,45}, {18,45}, {31,45}, {44,45}, {57,46}, {69,48}, {81,51}, {93,53}, {111,54}, {123,52}, {135,50}, {147,48}, {159,46}, {173,45}, {190,45}, {210,47}, - {0,55}, {18,55}, {33,55}, {56,57}, {77,61}, {97,64}, {124,63}, {147,59}, {198,58}, {210,58}, {222,58}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 4, 1, 4, 1, 1, 1, 1, - } -}; - #endif // RGB_MATRIX_ENABLE diff --git a/keyboards/keychron/q10/iso_encoder/keyboard.json b/keyboards/keychron/q10/iso_encoder/keyboard.json index 5ec70d1a14..b83015971f 100644 --- a/keyboards/keychron/q10/iso_encoder/keyboard.json +++ b/keyboards/keychron/q10/iso_encoder/keyboard.json @@ -27,6 +27,99 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 1], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 19, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 34, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 60, "y": 1, "flags": 1}, + {"matrix": [0, 5], "x": 72, "y": 3, "flags": 1}, + {"matrix": [0, 6], "x": 87, "y": 6, "flags": 1}, + {"matrix": [0, 7], "x": 99, "y": 8, "flags": 1}, + {"matrix": [0, 8], "x": 120, "y": 8, "flags": 1}, + {"matrix": [0, 9], "x": 132, "y": 6, "flags": 1}, + {"matrix": [0, 10], "x": 147, "y": 3, "flags": 1}, + {"matrix": [0, 11], "x": 159, "y": 1, "flags": 1}, + {"matrix": [0, 12], "x": 173, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 185, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 201, "y": 1, "flags": 1}, + {"matrix": [0, 15], "x": 219, "y": 1, "flags": 1}, + {"matrix": [1, 0], "x": 5, "y": 14, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 14, "flags": 1}, + {"matrix": [1, 2], "x": 36, "y": 14, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 13, "flags": 4}, + {"matrix": [1, 4], "x": 62, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 74, "y": 17, "flags": 4}, + {"matrix": [1, 6], "x": 86, "y": 20, "flags": 4}, + {"matrix": [1, 7], "x": 98, "y": 22, "flags": 4}, + {"matrix": [1, 8], "x": 115, "y": 22, "flags": 4}, + {"matrix": [1, 9], "x": 127, "y": 20, "flags": 4}, + {"matrix": [1, 10], "x": 139, "y": 17, "flags": 4}, + {"matrix": [1, 11], "x": 151, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 165, "y": 13, "flags": 4}, + {"matrix": [1, 13], "x": 177, "y": 14, "flags": 4}, + {"matrix": [1, 14], "x": 195, "y": 14, "flags": 1}, + {"matrix": [1, 15], "x": 220, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 4, "y": 24, "flags": 1}, + {"matrix": [2, 1], "x": 24, "y": 24, "flags": 1}, + {"matrix": [2, 2], "x": 40, "y": 24, "flags": 4}, + {"matrix": [2, 3], "x": 53, "y": 24, "flags": 4}, + {"matrix": [2, 4], "x": 65, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 77, "y": 29, "flags": 4}, + {"matrix": [2, 6], "x": 89, "y": 31, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 33, "flags": 4}, + {"matrix": [2, 8], "x": 124, "y": 31, "flags": 4}, + {"matrix": [2, 9], "x": 136, "y": 29, "flags": 4}, + {"matrix": [2, 10], "x": 148, "y": 27, "flags": 4}, + {"matrix": [2, 11], "x": 160, "y": 24, "flags": 4}, + {"matrix": [2, 12], "x": 176, "y": 24, "flags": 4}, + {"matrix": [2, 13], "x": 189, "y": 24, "flags": 4}, + {"matrix": [2, 15], "x": 222, "y": 25, "flags": 1}, + {"matrix": [3, 0], "x": 2, "y": 34, "flags": 1}, + {"matrix": [3, 1], "x": 23, "y": 34, "flags": 8}, + {"matrix": [3, 2], "x": 40, "y": 34, "flags": 4}, + {"matrix": [3, 3], "x": 54, "y": 35, "flags": 4}, + {"matrix": [3, 4], "x": 66, "y": 37, "flags": 4}, + {"matrix": [3, 5], "x": 78, "y": 39, "flags": 4}, + {"matrix": [3, 6], "x": 90, "y": 42, "flags": 4}, + {"matrix": [3, 8], "x": 118, "y": 43, "flags": 4}, + {"matrix": [3, 9], "x": 130, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 142, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 154, "y": 36, "flags": 4}, + {"matrix": [3, 12], "x": 167, "y": 35, "flags": 4}, + {"matrix": [3, 13], "x": 179, "y": 35, "flags": 4}, + {"matrix": [2, 14], "x": 192, "y": 35, "flags": 4}, + {"matrix": [3, 14], "x": 208, "y": 31, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 36, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 45, "flags": 1}, + {"matrix": [4, 1], "x": 18, "y": 45, "flags": 1}, + {"matrix": [4, 2], "x": 31, "y": 45, "flags": 4}, + {"matrix": [4, 3], "x": 44, "y": 45, "flags": 4}, + {"matrix": [4, 4], "x": 57, "y": 46, "flags": 4}, + {"matrix": [4, 5], "x": 69, "y": 48, "flags": 4}, + {"matrix": [4, 6], "x": 81, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 93, "y": 53, "flags": 4}, + {"matrix": [4, 8], "x": 111, "y": 54, "flags": 4}, + {"matrix": [4, 9], "x": 123, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 135, "y": 50, "flags": 4}, + {"matrix": [4, 11], "x": 147, "y": 48, "flags": 4}, + {"matrix": [4, 12], "x": 159, "y": 46, "flags": 4}, + {"matrix": [4, 13], "x": 173, "y": 45, "flags": 4}, + {"matrix": [4, 14], "x": 190, "y": 45, "flags": 1}, + {"matrix": [4, 15], "x": 210, "y": 47, "flags": 1}, + {"matrix": [5, 0], "x": 0, "y": 55, "flags": 1}, + {"matrix": [5, 1], "x": 18, "y": 55, "flags": 1}, + {"matrix": [5, 2], "x": 33, "y": 55, "flags": 1}, + {"matrix": [5, 3], "x": 56, "y": 57, "flags": 1}, + {"matrix": [5, 4], "x": 77, "y": 61, "flags": 4}, + {"matrix": [5, 7], "x": 97, "y": 64, "flags": 1}, + {"matrix": [5, 8], "x": 124, "y": 63, "flags": 4}, + {"matrix": [5, 9], "x": 147, "y": 59, "flags": 1}, + {"matrix": [5, 13], "x": 198, "y": 58, "flags": 1}, + {"matrix": [5, 14], "x": 210, "y": 58, "flags": 1}, + {"matrix": [5, 15], "x": 222, "y": 58, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_90": { "layout": [ diff --git a/keyboards/keychron/q12/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q12/ansi_encoder/ansi_encoder.c index ba32f58fc6..35e8414be6 100644 --- a/keyboards/keychron/q12/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q12/ansi_encoder/ansi_encoder.c @@ -135,36 +135,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB12_CA6, CB10_CA6, CB11_CA6}, // Down {1, CB12_CA7, CB10_CA7, CB11_CA7}, // Right }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, __, 0, 1 }, - { 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 18, 19, 20 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 37, 38, 39 }, - { 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 76, 71, 72, 56, 57, 58 }, - { 77, __, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, __, 88, 89, 73, 74, 75 }, - { 92, 93, 94, __, __, 21, 95, 40, __, 96, 97, 98, 99, 100, 101, 90, 2, 91 }, - }, - { - // LED Index to Physical Position - {11,0}, {23,0}, {34,0}, {49,0}, {63,0}, {75,0}, {86,0}, {98,0}, {112,0}, {123,0}, {135,0}, {146,0}, {161,0}, {172,0}, {184,0}, {195,0}, {209,0}, {224,0}, - {0,15}, {11,15}, {23,15}, {34,15}, {49,15}, {60,15}, {72,15}, {83,15}, {95,15}, {106,15}, {118,15}, {129,15}, {141,15}, {152,15}, {164,15}, {175,15}, {186,15}, {204,15}, {224,15}, - {0,26}, {11,26}, {23,26}, {34,32}, {52,26}, {66,26}, {78,26}, {89,26}, {101,26}, {112,26}, {123,26}, {135,26}, {146,26}, {158,26}, {169,26}, {181,26}, {192,26}, {207,26}, {224,26}, - {0,38}, {11,38}, {23,38}, {53,38}, {69,38}, {81,38}, {92,38}, {103,38}, {115,38}, {126,38}, {138,38}, {149,38}, {161,38}, {172,38}, {184,38}, {202,38}, {224,38}, - {0,49}, {11,49}, {23,49}, {34,55}, {56,49}, {75,49}, {86,49}, {98,49}, {109,49}, {121,49}, {132,49}, {144,49}, {155,49}, {166,49}, {178,49}, {194,49}, {213,52}, - {6,61}, {23,61}, {50,61}, {65,61}, {79,61}, {122,61}, {163,61}, {175,61}, {186,61}, {201,64}, {213,64}, {224,64}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 4, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 4, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 4, 4, 1, 1, 1, 4, 1, 4, 1, 1, 1, 1, - } -}; #endif diff --git a/keyboards/keychron/q12/ansi_encoder/keyboard.json b/keyboards/keychron/q12/ansi_encoder/keyboard.json index d2f90cb8ac..faf8b5527e 100644 --- a/keyboards/keychron/q12/ansi_encoder/keyboard.json +++ b/keyboards/keychron/q12/ansi_encoder/keyboard.json @@ -24,6 +24,112 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 16], "x": 11, "y": 0, "flags": 1}, + {"matrix": [0, 17], "x": 23, "y": 0, "flags": 1}, + {"matrix": [5, 16], "x": 34, "y": 0, "flags": 1}, + {"matrix": [0, 0], "x": 49, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 63, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 75, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 86, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 98, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 112, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 123, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 135, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 146, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 161, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 172, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 184, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 195, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 209, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 15], "x": 0, "y": 15, "flags": 8}, + {"matrix": [1, 16], "x": 11, "y": 15, "flags": 4}, + {"matrix": [1, 17], "x": 23, "y": 15, "flags": 4}, + {"matrix": [5, 5], "x": 34, "y": 15, "flags": 4}, + {"matrix": [1, 0], "x": 49, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 60, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 72, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 83, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 95, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 106, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 118, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 129, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 141, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 164, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 175, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 186, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 204, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 15], "x": 0, "y": 26, "flags": 4}, + {"matrix": [2, 16], "x": 11, "y": 26, "flags": 4}, + {"matrix": [2, 17], "x": 23, "y": 26, "flags": 4}, + {"matrix": [5, 7], "x": 34, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 52, "y": 26, "flags": 1}, + {"matrix": [2, 1], "x": 66, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 78, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 89, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 101, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 112, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 123, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 135, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 146, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 158, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 169, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 181, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 192, "y": 26, "flags": 4}, + {"matrix": [2, 13], "x": 207, "y": 26, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 26, "flags": 1}, + {"matrix": [3, 15], "x": 0, "y": 38, "flags": 4}, + {"matrix": [3, 16], "x": 11, "y": 38, "flags": 4}, + {"matrix": [3, 17], "x": 23, "y": 38, "flags": 4}, + {"matrix": [3, 0], "x": 53, "y": 38, "flags": 8}, + {"matrix": [3, 1], "x": 69, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 81, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 92, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 103, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 115, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 126, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 138, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 149, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 161, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 172, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 184, "y": 38, "flags": 4}, + {"matrix": [3, 13], "x": 202, "y": 38, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 38, "flags": 1}, + {"matrix": [4, 15], "x": 0, "y": 49, "flags": 4}, + {"matrix": [4, 16], "x": 11, "y": 49, "flags": 4}, + {"matrix": [4, 17], "x": 23, "y": 49, "flags": 4}, + {"matrix": [3, 12], "x": 34, "y": 55, "flags": 4}, + {"matrix": [4, 0], "x": 56, "y": 49, "flags": 1}, + {"matrix": [4, 2], "x": 75, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 86, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 98, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 109, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 121, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 132, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 144, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 155, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 166, "y": 49, "flags": 4}, + {"matrix": [4, 11], "x": 178, "y": 49, "flags": 4}, + {"matrix": [4, 13], "x": 194, "y": 49, "flags": 1}, + {"matrix": [4, 14], "x": 213, "y": 52, "flags": 1}, + {"matrix": [5, 15], "x": 6, "y": 61, "flags": 4}, + {"matrix": [5, 17], "x": 23, "y": 61, "flags": 4}, + {"matrix": [5, 0], "x": 50, "y": 61, "flags": 1}, + {"matrix": [5, 1], "x": 65, "y": 61, "flags": 1}, + {"matrix": [5, 2], "x": 79, "y": 61, "flags": 1}, + {"matrix": [5, 6], "x": 122, "y": 61, "flags": 4}, + {"matrix": [5, 9], "x": 163, "y": 61, "flags": 1}, + {"matrix": [5, 10], "x": 175, "y": 61, "flags": 4}, + {"matrix": [5, 11], "x": 186, "y": 61, "flags": 1}, + {"matrix": [5, 12], "x": 201, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 213, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 224, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_ansi_103": { "layout": [ diff --git a/keyboards/keychron/q12/iso_encoder/iso_encoder.c b/keyboards/keychron/q12/iso_encoder/iso_encoder.c index f9513e7f41..058a5d2ff4 100644 --- a/keyboards/keychron/q12/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/q12/iso_encoder/iso_encoder.c @@ -138,36 +138,4 @@ const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { {1, CB12_CA6, CB10_CA6, CB11_CA6}, // Down {1, CB12_CA7, CB10_CA7, CB11_CA7}, // Right }; - -#define __ NO_LED - -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, __, 0, 1 }, - { 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 18, 19, 20 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 71, 54, 37, 38, 39 }, - { 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 76, 70, 72, 55, 56, 57 }, - { 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, __, 89, 90, 73, 74, 75 }, - { 93, 94, 95, __, __, 21, 96, 40, __, 97, 98, 99, 100, 101, 102, 91, 2, 92 }, - }, - { - // LED Index to Physical Position - {11,0}, {23,0}, {34,0}, {49,0}, {63,0}, {75,0}, {86,0}, {98,0}, {112,0}, {123,0}, {135,0}, {146,0}, {160,0}, {172,0}, {183,0}, {194,0}, {209,0}, {224,0}, - {0,15}, {11,15}, {23,15}, {34,15}, {49,15}, {60,15}, {72,15}, {83,15}, {95,15}, {106,15}, {117,15}, {129,15}, {140,15}, {152,15}, {163,15}, {175,15}, {186,15}, {204,15}, {224,15}, - {0,26}, {11,26}, {23,26}, {34,32}, {52,26}, {66,26}, {77,26}, {89,26}, {100,26}, {112,26}, {123,26}, {135,26}, {146,26}, {158,26}, {169,26}, {180,26}, {192,26}, {224,26}, - {0,38}, {11,38}, {23,38}, {53,38}, {69,38}, {80,38}, {92,38}, {103,38}, {115,38}, {126,38}, {137,38}, {149,38}, {160,38}, {172,38}, {183,38}, {195,38}, {210,34}, {224,38}, - {0,49}, {11,49}, {23,49}, {34,55}, {50,49}, {63,49}, {75,49}, {86,49}, {97,49}, {109,49}, {120,49}, {132,49}, {143,49}, {155,49}, {166,49}, {177,49}, {193,49}, {212,52}, - {6,61}, {23,61}, {50,61}, {65,61}, {79,61}, {122,61}, {163,61}, {174,61}, {186,61}, {201,64}, {212,64}, {223,64}, - }, - { - // RGB LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 4, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 4, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 4, 4, 1, 1, 1, 4, 1, 4, 1, 1, 1, 1, - } -}; #endif diff --git a/keyboards/keychron/q12/iso_encoder/keyboard.json b/keyboards/keychron/q12/iso_encoder/keyboard.json index 29e24a1491..d5105ac2b3 100644 --- a/keyboards/keychron/q12/iso_encoder/keyboard.json +++ b/keyboards/keychron/q12/iso_encoder/keyboard.json @@ -24,6 +24,113 @@ "encoder": true, "dip_switch": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 16], "x": 11, "y": 0, "flags": 1}, + {"matrix": [0, 17], "x": 23, "y": 0, "flags": 1}, + {"matrix": [5, 16], "x": 34, "y": 0, "flags": 1}, + {"matrix": [0, 0], "x": 49, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 63, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 75, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 86, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 98, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 112, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 123, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 135, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 146, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 160, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 172, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 183, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 194, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 209, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 15], "x": 0, "y": 15, "flags": 8}, + {"matrix": [1, 16], "x": 11, "y": 15, "flags": 4}, + {"matrix": [1, 17], "x": 23, "y": 15, "flags": 4}, + {"matrix": [5, 5], "x": 34, "y": 15, "flags": 4}, + {"matrix": [1, 0], "x": 49, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 60, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 72, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 83, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 95, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 106, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 117, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 129, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 140, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 163, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 175, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 186, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 204, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 224, "y": 15, "flags": 1}, + {"matrix": [2, 15], "x": 0, "y": 26, "flags": 4}, + {"matrix": [2, 16], "x": 11, "y": 26, "flags": 4}, + {"matrix": [2, 17], "x": 23, "y": 26, "flags": 4}, + {"matrix": [5, 7], "x": 34, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 52, "y": 26, "flags": 1}, + {"matrix": [2, 1], "x": 66, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 77, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 89, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 100, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 112, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 123, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 135, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 146, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 158, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 169, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 180, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 192, "y": 26, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 26, "flags": 1}, + {"matrix": [3, 15], "x": 0, "y": 38, "flags": 4}, + {"matrix": [3, 16], "x": 11, "y": 38, "flags": 4}, + {"matrix": [3, 17], "x": 23, "y": 38, "flags": 4}, + {"matrix": [3, 0], "x": 53, "y": 38, "flags": 8}, + {"matrix": [3, 1], "x": 69, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 80, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 92, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 103, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 115, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 126, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 137, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 149, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 160, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 172, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 183, "y": 38, "flags": 4}, + {"matrix": [3, 13], "x": 195, "y": 38, "flags": 4}, + {"matrix": [2, 13], "x": 210, "y": 34, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 38, "flags": 1}, + {"matrix": [4, 15], "x": 0, "y": 49, "flags": 4}, + {"matrix": [4, 16], "x": 11, "y": 49, "flags": 4}, + {"matrix": [4, 17], "x": 23, "y": 49, "flags": 4}, + {"matrix": [3, 12], "x": 34, "y": 55, "flags": 4}, + {"matrix": [4, 0], "x": 50, "y": 49, "flags": 1}, + {"matrix": [4, 1], "x": 63, "y": 49, "flags": 4}, + {"matrix": [4, 2], "x": 75, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 86, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 97, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 109, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 120, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 132, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 143, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 155, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 166, "y": 49, "flags": 4}, + {"matrix": [4, 11], "x": 177, "y": 49, "flags": 4}, + {"matrix": [4, 13], "x": 193, "y": 49, "flags": 4}, + {"matrix": [4, 14], "x": 212, "y": 52, "flags": 1}, + {"matrix": [5, 15], "x": 6, "y": 61, "flags": 4}, + {"matrix": [5, 17], "x": 23, "y": 61, "flags": 4}, + {"matrix": [5, 0], "x": 50, "y": 61, "flags": 1}, + {"matrix": [5, 1], "x": 65, "y": 61, "flags": 1}, + {"matrix": [5, 2], "x": 79, "y": 61, "flags": 1}, + {"matrix": [5, 6], "x": 122, "y": 61, "flags": 4}, + {"matrix": [5, 9], "x": 163, "y": 61, "flags": 1}, + {"matrix": [5, 10], "x": 174, "y": 61, "flags": 4}, + {"matrix": [5, 11], "x": 186, "y": 61, "flags": 1}, + {"matrix": [5, 12], "x": 201, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 212, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 223, "y": 64, "flags": 1} + ] + }, "layouts": { "LAYOUT_iso_104": { "layout": [ From c1b428bb4e4d2ecf4b904c8e4886d8e8e37602c7 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:03:52 -0600 Subject: [PATCH 32/99] Migrate `g_led_config` to DD (JK1) (#25601) --- keyboards/joshajohnson/hub20/hub20.c | 171 ------------------ keyboards/joshajohnson/hub20/keyboard.json | 31 +++- keyboards/junco/rev1/keyboard.json | 76 ++++++++ keyboards/junco/rev1/rev1.c | 103 ----------- keyboards/kapl/rev1/keyboard.json | 90 +++++++++ keyboards/kapl/rev1/rev1.c | 55 ------ .../kbdfans/baguette66/rgb/keyboard.json | 68 +++++++ keyboards/kbdfans/baguette66/rgb/rgb.c | 20 -- keyboards/kbdfans/bella/rgb/keyboard.json | 96 ++++++++++ keyboards/kbdfans/bella/rgb/rgb.c | 30 --- keyboards/kbdfans/bella/rgb_iso/keyboard.json | 97 ++++++++++ keyboards/kbdfans/bella/rgb_iso/rgb_iso.c | 30 --- keyboards/kbdfans/boop65/rgb/keyboard.json | 85 +++++++++ keyboards/kbdfans/boop65/rgb/rgb.c | 23 --- .../kbdfans/kbd67/mkiirgb/v1/keyboard.json | 69 +++++++ keyboards/kbdfans/kbd67/mkiirgb/v1/v1.c | 4 - .../kbdfans/kbd67/mkiirgb/v2/keyboard.json | 69 +++++++ keyboards/kbdfans/kbd67/mkiirgb/v2/v2.c | 21 --- .../kbdfans/kbd67/mkiirgb/v3/keyboard.json | 69 +++++++ keyboards/kbdfans/kbd67/mkiirgb/v3/v3.c | 26 --- .../kbdfans/kbd67/mkiirgb/v4/keyboard.json | 69 +++++++ keyboards/kbdfans/kbd67/mkiirgb/v4/v4.c | 22 --- .../kbdfans/kbd67/mkiirgb_iso/keyboard.json | 70 +++++++ .../kbdfans/kbd67/mkiirgb_iso/mkiirgb_iso.c | 22 --- keyboards/kbdfans/kbd75rgb/kbd75rgb.c | 23 --- keyboards/kbdfans/kbd75rgb/keyboard.json | 86 +++++++++ keyboards/kbdfans/kbdmini/kbdmini.c | 19 -- keyboards/kbdfans/kbdmini/keyboard.json | 54 ++++++ keyboards/kbdfans/maja/keyboard.json | 69 +++++++ keyboards/kbdfans/maja/maja.c | 20 -- keyboards/kbdfans/odin/rgb/keyboard.json | 106 +++++++++++ keyboards/kbdfans/odin/rgb/rgb.c | 25 --- 32 files changed, 1203 insertions(+), 615 deletions(-) delete mode 100644 keyboards/joshajohnson/hub20/hub20.c delete mode 100644 keyboards/kapl/rev1/rev1.c diff --git a/keyboards/joshajohnson/hub20/hub20.c b/keyboards/joshajohnson/hub20/hub20.c deleted file mode 100644 index 8b1c58e1f7..0000000000 --- a/keyboards/joshajohnson/hub20/hub20.c +++ /dev/null @@ -1,171 +0,0 @@ -/* Copyright 2020 joshajohnson 2021 peepeetee - * - * 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 "quantum.h" - - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - {NO_LED,NO_LED,NO_LED,NO_LED}, - { 7, 8, 9, 10}, - { 11, 12, 13, 14}, - { 15, 16, 17, 18}, - { 19, 20, 21, 22}, - { 23, 24, 25, 26} - //todo: assign leds to keys differently for the different layouts -}, { - // LED Index to Physical Position - { 190, 50}, { 111, 50}, { 35, 50}, {38, 0}, {38, 35}, {186, 35}, {186, 0}, // UNDERGLOW - //todo: underglow location needs to be recalculated. The top row is above row 4, and for now they have the same y value 0 - { 0, 0}, {75, 0}, {150, 0}, {225, 0}, // row 4 - { 0, 16}, {75, 16}, {150, 16}, {225, 16}, // row 3 - { 0, 32}, {75, 32}, {150, 32}, {225, 32}, // row 2 - { 0, 48}, {75, 48}, {150, 48}, {225, 48}, // row 1 - { 0, 64}, {75, 64}, {150, 64}, {225, 64} // row 0 - -}, { - // LED Index to Flag - LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, // UNDERGLOW - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // row 4 - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // row 3 - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // row 2 - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // row 1 - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT // row 0 - -} }; -#endif - - - -// #if LED_MERGE_NUMPAD_LEFT_HANDED_ENTER && LED_MERGE_NUMPAD_RIGHT_HANDED_ZERO -// #error lower left enter conflicts with lower left zero -// #endif - -// #if LED_MERGE_NUMPAD_RIGHT_HANDED_ENTER && LED_MERGE_NUMPAD_LEFT_HANDED_ZERO -// #error lower right enter conflicts with lower right zero -// #endif - -// /* LAYOUT_left_handed - - -// * ┌───┬───┐ -// * │01 │02 │ -// * ┌───┼───┼───┼───┐ -// * │10 │11 │12 │13 │ -// * ├───┼───┼───┼───┤ -// * │ │21 │22 │23 │ -// * │20 ├───┼───┼───┤ -// * │ │31 │32 │33 │ -// * ├───┼───┼───┼───┤ -// * │ │41 │42 │43 │ -// * │40 ├───┼───┴───┤ -// * │ │51 │ 52 │ -// * └───┴───┴───────┘ -// */ - -// #ifndef LED_MERGE_NUMPAD_LEFT_HANDED_PLUS //key 20 -// #define LED_MERGE_NUMPAD_LEFT_HANDED_PLUS FALSE -// #endif // LED_MERGE_NUMPAD_LEFT_HANDED_PLUS - -// #ifndef LED_MERGE_NUMPAD_LEFT_HANDED_ENTER //key 40 -// #define LED_MERGE_NUMPAD_LEFT_HANDED_ENTER FALSE -// #endif // LED_MERGE_NUMPAD_LEFT_HANDED_ENTER - -// #ifndef LED_MERGE_NUMPAD_LEFT_HANDED_ZERO //key 52 -// #define LED_MERGE_NUMPAD_LEFT_HANDED_ZERO FALSE -// #endif // LED_MERGE_NUMPAD_LEFT_HANDED_ZERO - - -// /* LAYOUT_right_handed - - -// * ┌───┬───┐ -// * │01 │02 │ -// * ┌───┼───┼───┼───┐ -// * │10 │11 │12 │13 │ -// * ├───┼───┼───┼───┤ -// * │20 │21 │22 │ │ -// * ├───┼───┼───┤23 │ -// * │30 │31 │32 │ │ -// * ├───┼───┼───┼───┤ -// * │40 │41 │42 │ │ -// * ├───┴───┼───┤43 │ -// * │ 50 │52 │ │ -// * └───────┴───┴───┘ -// */ -// //LOCATION OF bottom row 0 NOT TESTED, WAITING ENDORSEMENT FROM MANUFACTURER - -// #ifndef LED_MERGE_NUMPAD_RIGHT_HANDED_PLUS // key 23 -// #define LED_MERGE_NUMPAD_RIGHT_HANDED_PLUS FALSE -// #endif // LED_MERGE_NUMPAD_RIGHT_HANDED_PLUS - -// #ifndef LED_MERGE_NUMPAD_RIGHT_HANDED_ENTER // key 43 -// #define LED_MERGE_NUMPAD_RIGHT_HANDED_ENTER FALSE -// #endif // LED_MERGE_NUMPAD_RIGHT_HANDED_ENTER - -// #ifndef LED_MERGE_NUMPAD_RIGHT_HANDED_ZERO // key 50 (confirm with manufacturer) -// #define LED_MERGE_NUMPAD_RIGHT_HANDED_ZERO FALSE -// #endif // LED_MERGE_NUMPAD_RIGHT_HANDED_ZERO - -// uint8_t rgb_matrix_map_row_column_to_led_kb(uint8_t row, uint8_t column, uint8_t *led_i) { -// // Keys here have 2 leds. Here we add the led that is not bound to the key -// // and the default led would be added -// // by the default code that runs after this in rgb_matrix_map_row_column_to_led - -// uint8_t counter = 0; - -// #if LED_MERGE_NUMPAD_LEFT_HANDED_PLUS //key 20, leds 7 and 11, 7 already bound - -// if (row == 2 && column == 0) { -// led_i[counter] = 11; -// counter ++; -// } -// #endif -// #if LED_MERGE_NUMPAD_LEFT_HANDED_ENTER //key 40, leds 19 and 23, 23 already bound -// if (row == 4 && column == 0) { -// led_i[counter] = 23; -// counter ++; -// } -// #endif -// #if LED_MERGE_NUMPAD_LEFT_HANDED_ZERO //key 52, leds 25 and 26, 26 already bound -// if (row == 5 && column == 2) { -// led_i[counter] = 26; -// counter ++; -// } -// #endif - -// #if LED_MERGE_NUMPAD_RIGHT_HANDED_PLUS // key 23, led 14 and 18, 14 already bound -// if (row == 2 && column == 3) { -// led_i[counter] = 18; -// counter ++; -// } -// #endif -// #if LED_MERGE_NUMPAD_RIGHT_HANDED_ENTER // key 43, led 22 and 26, 22 already bound -// if (row == 4 && column == 3) { -// led_i[counter] = 26; -// counter ++; -// } -// #endif -// #if LED_MERGE_NUMPAD_RIGHT_HANDED_ZERO // key 50 (confirm with manufacturer) -// // LED 23 and 24, 23(?) already bound -// if (row == 5 && column == 0) { -// led_i[counter] = 24; -// counter ++; -// } -// #endif -// return counter; -// } diff --git a/keyboards/joshajohnson/hub20/keyboard.json b/keyboards/joshajohnson/hub20/keyboard.json index 0d557c58b5..c26a25de3c 100644 --- a/keyboards/joshajohnson/hub20/keyboard.json +++ b/keyboards/joshajohnson/hub20/keyboard.json @@ -28,7 +28,36 @@ "solid_reactive_simple": true, "solid_reactive": true }, - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"x": 190, "y": 50, "flags": 2}, + {"x": 111, "y": 50, "flags": 2}, + {"x": 35, "y": 50, "flags": 2}, + {"x": 38, "y": 0, "flags": 2}, + {"x": 38, "y": 35, "flags": 2}, + {"x": 186, "y": 35, "flags": 2}, + {"x": 186, "y": 0, "flags": 2}, + {"matrix": [1, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 1], "x": 75, "y": 0, "flags": 4}, + {"matrix": [1, 2], "x": 150, "y": 0, "flags": 4}, + {"matrix": [1, 3], "x": 224, "y": 0, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [2, 1], "x": 75, "y": 16, "flags": 4}, + {"matrix": [2, 2], "x": 150, "y": 16, "flags": 4}, + {"matrix": [2, 3], "x": 224, "y": 16, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [3, 1], "x": 75, "y": 32, "flags": 4}, + {"matrix": [3, 2], "x": 150, "y": 32, "flags": 4}, + {"matrix": [3, 3], "x": 224, "y": 32, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 48, "flags": 4}, + {"matrix": [4, 1], "x": 75, "y": 48, "flags": 4}, + {"matrix": [4, 2], "x": 150, "y": 48, "flags": 4}, + {"matrix": [4, 3], "x": 224, "y": 48, "flags": 4}, + {"matrix": [5, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [5, 1], "x": 75, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 150, "y": 64, "flags": 4}, + {"matrix": [5, 3], "x": 224, "y": 64, "flags": 4} + ] }, "features": { "bootmagic": true, diff --git a/keyboards/junco/rev1/keyboard.json b/keyboards/junco/rev1/keyboard.json index 936a0bf29c..1ec680aa3a 100644 --- a/keyboards/junco/rev1/keyboard.json +++ b/keyboards/junco/rev1/keyboard.json @@ -22,6 +22,82 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"x": 95, "y": 64, "flags": 2}, + {"x": 52, "y": 64, "flags": 2}, + {"x": 86, "y": 40, "flags": 2}, + {"x": 52, "y": 40, "flags": 2}, + {"x": 9, "y": 40, "flags": 2}, + {"x": 9, "y": 8, "flags": 2}, + {"x": 52, "y": 8, "flags": 2}, + {"x": 86, "y": 8, "flags": 2}, + {"matrix": [0, 5], "x": 86, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 69, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 52, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 34, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 17, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 17, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 34, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 69, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 86, "y": 16, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 69, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 34, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 17, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 17, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 69, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 86, "y": 48, "flags": 4}, + {"matrix": [4, 4], "x": 103, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 86, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 69, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 52, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 34, "y": 64, "flags": 4}, + {"x": 129, "y": 64, "flags": 2}, + {"x": 172, "y": 64, "flags": 2}, + {"x": 138, "y": 40, "flags": 2}, + {"x": 172, "y": 40, "flags": 2}, + {"x": 215, "y": 40, "flags": 2}, + {"x": 215, "y": 8, "flags": 2}, + {"x": 172, "y": 8, "flags": 2}, + {"x": 138, "y": 8, "flags": 2}, + {"matrix": [5, 5], "x": 138, "y": 0, "flags": 4}, + {"matrix": [5, 4], "x": 155, "y": 0, "flags": 4}, + {"matrix": [5, 3], "x": 172, "y": 0, "flags": 4}, + {"matrix": [5, 2], "x": 190, "y": 0, "flags": 4}, + {"matrix": [5, 1], "x": 207, "y": 0, "flags": 4}, + {"matrix": [5, 0], "x": 224, "y": 0, "flags": 4}, + {"matrix": [6, 0], "x": 224, "y": 16, "flags": 4}, + {"matrix": [6, 1], "x": 207, "y": 16, "flags": 4}, + {"matrix": [6, 2], "x": 190, "y": 16, "flags": 4}, + {"matrix": [6, 3], "x": 172, "y": 16, "flags": 4}, + {"matrix": [6, 4], "x": 155, "y": 16, "flags": 4}, + {"matrix": [6, 5], "x": 138, "y": 16, "flags": 4}, + {"matrix": [7, 5], "x": 138, "y": 32, "flags": 4}, + {"matrix": [7, 4], "x": 155, "y": 32, "flags": 4}, + {"matrix": [7, 3], "x": 172, "y": 32, "flags": 4}, + {"matrix": [7, 2], "x": 190, "y": 32, "flags": 4}, + {"matrix": [7, 1], "x": 207, "y": 32, "flags": 4}, + {"matrix": [7, 0], "x": 224, "y": 32, "flags": 4}, + {"matrix": [8, 0], "x": 224, "y": 48, "flags": 4}, + {"matrix": [8, 1], "x": 207, "y": 48, "flags": 4}, + {"matrix": [8, 2], "x": 190, "y": 48, "flags": 4}, + {"matrix": [8, 3], "x": 172, "y": 48, "flags": 4}, + {"matrix": [8, 4], "x": 155, "y": 48, "flags": 4}, + {"matrix": [8, 5], "x": 138, "y": 48, "flags": 4}, + {"matrix": [9, 4], "x": 121, "y": 64, "flags": 4}, + {"matrix": [9, 3], "x": 138, "y": 64, "flags": 4}, + {"matrix": [9, 2], "x": 155, "y": 64, "flags": 4}, + {"matrix": [9, 1], "x": 172, "y": 64, "flags": 4}, + {"matrix": [9, 0], "x": 190, "y": 64, "flags": 4} + ], "split_count": [37, 37] }, "encoder": { diff --git a/keyboards/junco/rev1/rev1.c b/keyboards/junco/rev1/rev1.c index d1346b82e2..0167a095ad 100644 --- a/keyboards/junco/rev1/rev1.c +++ b/keyboards/junco/rev1/rev1.c @@ -21,106 +21,3 @@ const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}, {6, 4}} }; #endif - -/* RGB LED matrix */ -#ifdef RGB_MATRIX_ENABLE -/* - Key Matrix Physical - L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, - L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, - L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, - L30, L31, L32, L33, L34, L35, L45, R40, R30, R31, R32, R33, R34, R35, - L40, L41, L42, L43, L44, R42, R41, R43, R44, R45 - - Key Electrical - Left: - { L00, L01, L02, L03, L04, L05 }, - { L10, L11, L12, L13, L14, L15 }, - { L20, L21, L22, L23, L24, L25 }, - { L30, L31, L32, L33, L34, L35 }, - { L40, L41, L42, L43, L44, L45 }, - Right: - { R05, R04, R03, R02, R01, R00 }, - { R15, R14, R13, R12, R11, R10 }, - { R25, R24, R23, R22, R21, R20 }, - { R35, R34, R33, R32, R31, R30 }, - { R45, R44, R43, R42, R41, R40 } - - Key matrix physical filled with LED electrical indexes, count starting at 1 - - Col - 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Row - - 14 13 12 11 10 9 46 47 48 49 50 51 0 - 6 7 8 45 44 43 - 15 16 17 18 19 20 57 56 55 54 53 52 1 - - 26 25 24 23 22 21 58 59 60 61 62 63 2 - 5 4 3 40 41 42 - 27 28 29 30 31 32 NO NO 69 68 67 66 65 64 3 - - 37 36 35 34 33 70 71 72 73 74 4 - 2 1 38 39 -*/ - -// clang-format off -led_config_t g_led_config = { - { // Key Electrical Matrix to LED Index (count start at 0, so 8 is the first non-underglow key) - - // Left Half - { 13, 12, 11, 10, 9, 8 }, - { 14, 15, 16, 17, 18, 19 }, - { 25, 24, 23, 22, 21, 20 }, - { 26, 27, 28, 29, 30, 31 }, - { 36, 35, 34, 33, 32, NO_LED }, - - // Right Half - { 50, 49, 48, 47, 46, 45 }, - { 51, 52, 53, 54, 55, 56 }, - { 62, 61, 60, 59, 58, 57 }, - { 63, 64, 65, 66, 67, 68 }, - { 73, 72, 71, 70, 69, NO_LED } - }, - { // LED Index to LED Physical Position (mirrored on right half) - - // Left Underglow (indicies 1 - 8) - { 95, 72 }, { 52, 72 }, { 86, 40 }, { 52, 40 }, { 9, 40 }, { 9, 8 }, { 52, 8 }, { 86, 8 }, - // Left Matrix (indicies 9 - 37) - { 86, 0 }, { 69, 0 }, { 52, 0 }, { 34, 0 }, { 17, 0 }, { 0, 0 }, - { 0, 16 }, { 17, 16 }, { 34, 16 }, { 52, 16 }, { 69, 16 }, { 86, 16 }, - { 86, 32 }, { 69, 32 }, { 52, 32 }, { 34, 32 }, { 17, 32 }, { 0, 32 }, - { 0, 48 }, { 17, 48 }, { 34, 48 }, { 52, 48 }, { 69, 48 }, { 86, 48 }, /* No Led */ - { 103, 64 }, { 86, 64 }, { 69, 64 }, { 52, 64 }, { 34, 64 }, - - // Right Underglow (indicies 38 - 45) - { 129, 72 }, { 172, 72 }, { 138, 40 }, { 172, 40 }, { 215, 40 }, { 215, 8 }, { 172, 8 }, { 138, 8 }, - // Right Matrix (indicies 46 - 74) - { 138, 0 }, { 155, 0 }, { 172, 0 }, { 190, 0 }, { 207, 0 }, { 224, 0 }, - { 224, 16 }, { 207, 16 }, { 190, 16 }, { 172, 16 }, { 155, 16 }, { 138, 16 }, - { 138, 32 }, { 155, 32 }, { 172, 32 }, { 190, 32 }, { 207, 32 }, { 224, 32 }, - /* No Led */ { 224, 48 }, { 207, 48 }, { 190, 48 }, { 172, 48 }, { 155, 48 }, { 138, 48 }, - { 121, 64 }, { 138, 64 }, { 155, 64 }, { 172, 64 }, { 190, 64 } - }, - { // LED Index to Flag (2 - Underglow, 4 - Key Backlight) - - // Left Underglow - 2, 2, 2, 2, 2, 2, 2, 2, - // Left Matrix - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, - - // Right Underglow - 2, 2, 2, 2, 2, 2, 2, 2, - // Right Matrix - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4 - } -}; - -#endif diff --git a/keyboards/kapl/rev1/keyboard.json b/keyboards/kapl/rev1/keyboard.json index 843847d8fe..9354a5e4fe 100644 --- a/keyboards/kapl/rev1/keyboard.json +++ b/keyboards/kapl/rev1/keyboard.json @@ -35,6 +35,96 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"x": 96, "y": 57, "flags": 2}, + {"x": 112, "y": 44, "flags": 2}, + {"x": 112, "y": 19, "flags": 2}, + {"x": 80, "y": 19, "flags": 2}, + {"x": 48, "y": 19, "flags": 2}, + {"x": 16, "y": 19, "flags": 2}, + {"x": 16, "y": 57, "flags": 2}, + {"x": 48, "y": 57, "flags": 2}, + {"x": 80, "y": 57, "flags": 2}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 17, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 34, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 52, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 69, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 86, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 103, "y": 0, "flags": 1}, + {"matrix": [1, 6], "x": 103, "y": 16, "flags": 1}, + {"matrix": [1, 5], "x": 86, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 69, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 34, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 17, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 17, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 34, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 69, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 103, "y": 32, "flags": 1}, + {"matrix": [3, 6], "x": 103, "y": 48, "flags": 1}, + {"matrix": [3, 5], "x": 86, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 69, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 17, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 17, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 34, "y": 64, "flags": 1}, + {"matrix": [4, 3], "x": 52, "y": 64, "flags": 1}, + {"matrix": [4, 4], "x": 69, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 86, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 103, "y": 64, "flags": 1}, + {"x": 144, "y": 57, "flags": 2}, + {"x": 128, "y": 44, "flags": 2}, + {"x": 128, "y": 19, "flags": 2}, + {"x": 160, "y": 19, "flags": 2}, + {"x": 192, "y": 19, "flags": 2}, + {"x": 224, "y": 19, "flags": 2}, + {"x": 224, "y": 57, "flags": 2}, + {"x": 192, "y": 57, "flags": 2}, + {"x": 160, "y": 57, "flags": 2}, + {"matrix": [5, 0], "x": 224, "y": 0, "flags": 1}, + {"matrix": [5, 1], "x": 207, "y": 0, "flags": 4}, + {"matrix": [5, 2], "x": 190, "y": 0, "flags": 4}, + {"matrix": [5, 3], "x": 172, "y": 0, "flags": 4}, + {"matrix": [5, 4], "x": 155, "y": 0, "flags": 4}, + {"matrix": [5, 5], "x": 138, "y": 0, "flags": 4}, + {"matrix": [5, 6], "x": 121, "y": 0, "flags": 1}, + {"matrix": [6, 6], "x": 121, "y": 16, "flags": 1}, + {"matrix": [6, 5], "x": 138, "y": 16, "flags": 4}, + {"matrix": [6, 4], "x": 155, "y": 16, "flags": 4}, + {"matrix": [6, 3], "x": 172, "y": 16, "flags": 4}, + {"matrix": [6, 2], "x": 190, "y": 16, "flags": 4}, + {"matrix": [6, 1], "x": 207, "y": 16, "flags": 4}, + {"matrix": [6, 0], "x": 224, "y": 16, "flags": 1}, + {"matrix": [7, 0], "x": 224, "y": 32, "flags": 1}, + {"matrix": [7, 1], "x": 207, "y": 32, "flags": 4}, + {"matrix": [7, 2], "x": 190, "y": 32, "flags": 4}, + {"matrix": [7, 3], "x": 172, "y": 32, "flags": 4}, + {"matrix": [7, 4], "x": 155, "y": 32, "flags": 4}, + {"matrix": [7, 5], "x": 138, "y": 32, "flags": 4}, + {"matrix": [7, 6], "x": 121, "y": 32, "flags": 1}, + {"matrix": [8, 6], "x": 121, "y": 48, "flags": 1}, + {"matrix": [8, 5], "x": 138, "y": 48, "flags": 4}, + {"matrix": [8, 4], "x": 155, "y": 48, "flags": 4}, + {"matrix": [8, 3], "x": 172, "y": 48, "flags": 4}, + {"matrix": [8, 2], "x": 190, "y": 48, "flags": 4}, + {"matrix": [8, 1], "x": 207, "y": 48, "flags": 4}, + {"matrix": [8, 0], "x": 224, "y": 48, "flags": 1}, + {"matrix": [9, 0], "x": 224, "y": 64, "flags": 1}, + {"matrix": [9, 1], "x": 207, "y": 64, "flags": 1}, + {"matrix": [9, 2], "x": 190, "y": 64, "flags": 1}, + {"matrix": [9, 3], "x": 172, "y": 64, "flags": 1}, + {"matrix": [9, 4], "x": 155, "y": 64, "flags": 1}, + {"matrix": [9, 5], "x": 138, "y": 64, "flags": 1}, + {"matrix": [9, 6], "x": 121, "y": 64, "flags": 1} + ], "max_brightness": 120, "speed_steps": 10, "split_count": [44, 44] diff --git a/keyboards/kapl/rev1/rev1.c b/keyboards/kapl/rev1/rev1.c deleted file mode 100644 index fd3b9289dc..0000000000 --- a/keyboards/kapl/rev1/rev1.c +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2022 Alexander Lozyuk (@keyzog) -// SPDX-License-Identifier: GPL-2.0-or-later -#include "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Left Hand - // { 8, 7, 6, 5, 4, 3, 2, 1, 0 }, // underglow - { 9, 10, 11, 12, 13, 14, 15 }, - { 22, 21, 20, 19, 18, 17, 16 }, - { 23, 24, 25, 26, 27, 28, 29 }, - { 36, 35, 34, 33, 32, 31, 30 }, - { 37, 38, 39, 40, 41, 42, 43 }, - - // Right Hand - // { 44, 45, 46, 47, 48, 49, 50, 51, 52 }, // underglow - { 53, 54, 55, 56, 57, 58, 59 }, - { 66, 65, 64, 63, 62, 61, 60 }, - { 67, 68, 69, 70, 71, 72, 73 }, - { 80, 79, 78, 77, 76, 75, 74 }, - { 81, 82, 83, 84, 85, 86, 87 } -}, { - // Left Hand - {96, 57}, {112, 44}, {112, 19}, {80, 19}, {48, 19}, {16, 19}, {16, 57}, {48, 57}, {80, 57}, // underglow - {0, 0}, {17, 0}, {34, 0}, {52, 0}, {69, 0}, {86, 0}, {103, 0}, - {103, 16}, {86, 16}, {69, 16}, {52, 16}, {34, 16}, {17, 16}, {0, 16}, - {0, 32}, {17, 32}, {34, 32}, {52, 32}, {69, 32}, {86, 32}, {103, 32}, - {103, 48}, {86, 48}, {69, 48}, {52, 48}, {34, 48}, {17, 48}, {0, 48}, - {0, 64}, {17, 64}, {34, 64}, {52, 64}, {69, 64}, {86, 64}, {103, 64}, - - // Right Hand - {144, 57}, {128, 44}, {128, 19}, {160, 19}, {192, 19}, {224, 19}, {224, 57}, {192, 57}, {160, 57}, // underglow - {224, 0}, {207, 0}, {190, 0}, {172, 0}, {155, 0}, {138, 0}, {121, 0}, - {121, 16}, {138, 16}, {155, 16}, {172, 16}, {190, 16}, {207, 16}, {224, 16}, - {224, 32}, {207, 32}, {190, 32}, {172, 32}, {155, 32}, {138, 32}, {121, 32}, - {121, 48}, {138, 48}, {155, 48}, {172, 48}, {190, 48}, {207, 48}, {224, 48}, - {224, 64}, {207, 64}, {190, 64}, {172, 64}, {155, 64}, {138, 64}, {121, 64} -}, { - // Left Hand - 2, 2, 2, 2, 2, 2, 2, 2, 2, // underglow - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, - - // Right Hand - 2, 2, 2, 2, 2, 2, 2, 2, 2, // underglow - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1 -} }; -#endif diff --git a/keyboards/kbdfans/baguette66/rgb/keyboard.json b/keyboards/kbdfans/baguette66/rgb/keyboard.json index 5955add028..77103382bd 100644 --- a/keyboards/kbdfans/baguette66/rgb/keyboard.json +++ b/keyboards/kbdfans/baguette66/rgb/keyboard.json @@ -58,6 +58,74 @@ "animation": "cycle_all" }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 195, "y": 0, "flags": 4}, + {"matrix": [2, 14], "x": 210, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 188, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 201, "y": 32, "flags": 4}, + {"matrix": [3, 13], "x": 220, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 205, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 187, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 4}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 8], "x": 152, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 171, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "max_brightness": 150, "sat_steps": 8, "sleep": true, diff --git a/keyboards/kbdfans/baguette66/rgb/rgb.c b/keyboards/kbdfans/baguette66/rgb/rgb.c index 8e1dbc5bcd..379597b58e 100644 --- a/keyboards/kbdfans/baguette66/rgb/rgb.c +++ b/keyboards/kbdfans/baguette66/rgb/rgb.c @@ -17,26 +17,6 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15 }, - { 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16 }, - { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,NO_LED, 14 }, - { 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, NO_LED}, - { NO_LED, 58, 59, NO_LED, NO_LED, 60, NO_LED, NO_LED, 61, NO_LED, 62, NO_LED, 63, 64, 65 } -}, { - {0,0},{15,0},{30,0},{45,0},{60,0},{75,0},{90,0},{105,0},{120,0},{135,0},{150,0},{165,0},{180,0},{195,0}, {210,0},{224,0}, - {224,16}, {206,16},{188,16},{173,16},{158,16},{143,16},{128,16},{113,16},{98,16},{83,16},{68,16},{53,16},{38,16},{23,16},{4,16}, - {6,32},{26,32},{41,32},{56,32},{71,32},{86,32},{101,32},{116,32},{131,32},{146,32},{161,32},{176,32},{201,32}, - {220,48},{205,48},{187,48},{169,48},{154,48},{139,48},{124,48},{109,48},{94,48},{79,48},{64,48},{49,48},{34,48},{9,48}, - {21,64},{39,64},{96,64},{152,64},{171,64},{195,64},{210,64},{224,64} -}, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 1, 1, 1 -} }; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/kbdfans/bella/rgb/keyboard.json b/keyboards/kbdfans/bella/rgb/keyboard.json index 2ca18d2851..7bbc5ea7a2 100644 --- a/keyboards/kbdfans/bella/rgb/keyboard.json +++ b/keyboards/kbdfans/bella/rgb/keyboard.json @@ -54,6 +54,102 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 29, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 44, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 59, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 73, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 95, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 110, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 125, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 140, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 161, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 176, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 191, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 206, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 17, "flags": 4}, + {"matrix": [1, 1], "x": 15, "y": 17, "flags": 4}, + {"matrix": [1, 2], "x": 29, "y": 17, "flags": 4}, + {"matrix": [1, 3], "x": 44, "y": 17, "flags": 4}, + {"matrix": [1, 4], "x": 59, "y": 17, "flags": 4}, + {"matrix": [1, 5], "x": 73, "y": 17, "flags": 4}, + {"matrix": [1, 6], "x": 88, "y": 17, "flags": 4}, + {"matrix": [1, 7], "x": 102, "y": 17, "flags": 4}, + {"matrix": [1, 8], "x": 117, "y": 17, "flags": 4}, + {"matrix": [1, 9], "x": 132, "y": 17, "flags": 4}, + {"matrix": [1, 10], "x": 147, "y": 17, "flags": 4}, + {"matrix": [1, 11], "x": 161, "y": 17, "flags": 4}, + {"matrix": [1, 12], "x": 176, "y": 17, "flags": 4}, + {"matrix": [1, 14], "x": 198, "y": 17, "flags": 4}, + {"matrix": [1, 15], "x": 224, "y": 17, "flags": 4}, + {"matrix": [2, 0], "x": 4, "y": 29, "flags": 4}, + {"matrix": [2, 1], "x": 22, "y": 29, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 29, "flags": 4}, + {"matrix": [2, 3], "x": 51, "y": 29, "flags": 4}, + {"matrix": [2, 4], "x": 66, "y": 29, "flags": 4}, + {"matrix": [2, 5], "x": 81, "y": 29, "flags": 4}, + {"matrix": [2, 6], "x": 95, "y": 29, "flags": 4}, + {"matrix": [2, 7], "x": 110, "y": 29, "flags": 4}, + {"matrix": [2, 8], "x": 125, "y": 29, "flags": 4}, + {"matrix": [2, 9], "x": 140, "y": 29, "flags": 4}, + {"matrix": [2, 10], "x": 154, "y": 29, "flags": 4}, + {"matrix": [2, 11], "x": 169, "y": 29, "flags": 4}, + {"matrix": [2, 12], "x": 184, "y": 29, "flags": 4}, + {"matrix": [2, 13], "x": 202, "y": 29, "flags": 4}, + {"matrix": [2, 15], "x": 224, "y": 29, "flags": 4}, + {"matrix": [3, 0], "x": 5, "y": 41, "flags": 4}, + {"matrix": [3, 1], "x": 26, "y": 41, "flags": 4}, + {"matrix": [3, 2], "x": 40, "y": 41, "flags": 4}, + {"matrix": [3, 3], "x": 55, "y": 41, "flags": 4}, + {"matrix": [3, 4], "x": 70, "y": 41, "flags": 4}, + {"matrix": [3, 5], "x": 84, "y": 41, "flags": 4}, + {"matrix": [3, 6], "x": 99, "y": 41, "flags": 4}, + {"matrix": [3, 7], "x": 114, "y": 41, "flags": 4}, + {"matrix": [3, 8], "x": 129, "y": 41, "flags": 4}, + {"matrix": [3, 9], "x": 143, "y": 41, "flags": 4}, + {"matrix": [3, 10], "x": 158, "y": 41, "flags": 4}, + {"matrix": [3, 11], "x": 172, "y": 41, "flags": 4}, + {"matrix": [3, 13], "x": 196, "y": 41, "flags": 4}, + {"matrix": [3, 15], "x": 224, "y": 41, "flags": 4}, + {"matrix": [4, 0], "x": 9, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 33, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 48, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 62, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 77, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 92, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 106, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 121, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 136, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 150, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 165, "y": 52, "flags": 4}, + {"matrix": [4, 12], "x": 185, "y": 52, "flags": 4}, + {"matrix": [4, 14], "x": 209, "y": 52, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 4}, + {"matrix": [5, 1], "x": 20, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 38, "y": 64, "flags": 4}, + {"matrix": [5, 6], "x": 94, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 150, "y": 64, "flags": 4}, + {"matrix": [5, 11], "x": 172, "y": 64, "flags": 4}, + {"matrix": [5, 12], "x": 195, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 209, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 224, "y": 64, "flags": 1}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 45, "y": 0, "flags": 2}, + {"x": 90, "y": 0, "flags": 2}, + {"x": 134, "y": 0, "flags": 2}, + {"x": 179, "y": 0, "flags": 2}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 0, "y": 32, "flags": 2}, + {"x": 224, "y": 32, "flags": 2}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 45, "y": 64, "flags": 2}, + {"x": 90, "y": 64, "flags": 2}, + {"x": 134, "y": 64, "flags": 2}, + {"x": 179, "y": 64, "flags": 2}, + {"x": 224, "y": 64, "flags": 2} + ], "led_flush_limit": 26, "led_process_limit": 4, "sleep": true diff --git a/keyboards/kbdfans/bella/rgb/rgb.c b/keyboards/kbdfans/bella/rgb/rgb.c index 4818c99005..2dd792c5bc 100644 --- a/keyboards/kbdfans/bella/rgb/rgb.c +++ b/keyboards/kbdfans/bella/rgb/rgb.c @@ -118,36 +118,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW4_CS3, SW4_CS2, SW4_CS1}, /* RGB40 */ }; -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15*/ - { 0, NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, NO_LED, 9, 10, 11, 12, 13, }, /* R0 */ - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, NO_LED, 27, 28, }, /* R1 */ - { 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, NO_LED, 43, }, /* R2 */ - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, 56, NO_LED, 57, }, /* R3 */ - { 58, NO_LED, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, NO_LED, 70, NO_LED, }, /* R4 */ - { 71, 72, 73, NO_LED, NO_LED, NO_LED, 74, NO_LED, NO_LED, NO_LED, 75, 76, 77, NO_LED, 78, 79, }, /* R5 */ - }, { - {0, 0}, {29, 0}, {44, 0}, {59, 0}, {73, 0}, {95, 0}, {110, 0}, {125, 0}, {140, 0}, {161, 0}, {176, 0}, {191, 0}, {206, 0}, {224, 0}, - {0, 17}, {15, 17}, {29, 17}, {44, 17}, {59, 17}, {73, 17}, {88, 17}, {102, 17}, {117, 17}, {132, 17}, {147, 17}, {161, 17}, {176, 17}, {198, 17}, {224, 17}, - {4, 29}, {22, 29}, {37, 29}, {51, 29}, {66, 29}, {81, 29}, {95, 29}, {110, 29}, {125, 29}, {140, 29}, {154, 29}, {169, 29}, {184, 29}, {202, 29}, {224, 29}, - {5, 41}, {26, 41}, {40, 41}, {55, 41}, {70, 41}, {84, 41}, {99, 41}, {114, 41}, {129, 41}, {143, 41}, {158, 41}, {172, 41}, {196, 41}, {224, 41}, - {9, 52}, {33, 52}, {48, 52}, {62, 52}, {77, 52}, {92, 52}, {106, 52}, {121, 52}, {136, 52}, {150, 52}, {165, 52}, {185, 52}, {209, 52}, - {2, 64}, {20, 64}, {38, 64}, {94, 64}, {150, 64}, {172, 64}, {195, 64}, {209, 64}, {224, 64}, - {0, 0}, {45, 0}, {90, 0}, {134, 0}, {179, 0}, {224, 0}, - {0, 32}, {224,32}, - {0, 64}, {45, 64}, {90, 64}, {134, 64}, {179, 64}, {224, 64}, - }, { - 4,1,1,1,1,1,1,1,1,1,1,1,1,4, - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, - 4,4,4,4,4,4,4,4,4,4,4,4,4,4, - 4,4,4,4,4,4,4,4,4,4,4,4,1, - 4,4,4,4,4,4,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2, - } -}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/kbdfans/bella/rgb_iso/keyboard.json b/keyboards/kbdfans/bella/rgb_iso/keyboard.json index c7dd6423b5..43f36625f9 100644 --- a/keyboards/kbdfans/bella/rgb_iso/keyboard.json +++ b/keyboards/kbdfans/bella/rgb_iso/keyboard.json @@ -54,6 +54,103 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 29, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 44, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 59, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 73, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 95, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 110, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 125, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 140, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 161, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 176, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 191, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 206, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 17, "flags": 4}, + {"matrix": [1, 1], "x": 15, "y": 17, "flags": 4}, + {"matrix": [1, 2], "x": 29, "y": 17, "flags": 4}, + {"matrix": [1, 3], "x": 44, "y": 17, "flags": 4}, + {"matrix": [1, 4], "x": 59, "y": 17, "flags": 4}, + {"matrix": [1, 5], "x": 73, "y": 17, "flags": 4}, + {"matrix": [1, 6], "x": 88, "y": 17, "flags": 4}, + {"matrix": [1, 7], "x": 102, "y": 17, "flags": 4}, + {"matrix": [1, 8], "x": 117, "y": 17, "flags": 4}, + {"matrix": [1, 9], "x": 132, "y": 17, "flags": 4}, + {"matrix": [1, 10], "x": 147, "y": 17, "flags": 4}, + {"matrix": [1, 11], "x": 161, "y": 17, "flags": 4}, + {"matrix": [1, 12], "x": 176, "y": 17, "flags": 4}, + {"matrix": [1, 14], "x": 198, "y": 17, "flags": 4}, + {"matrix": [1, 15], "x": 224, "y": 17, "flags": 4}, + {"matrix": [2, 0], "x": 4, "y": 29, "flags": 4}, + {"matrix": [2, 1], "x": 22, "y": 29, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 29, "flags": 4}, + {"matrix": [2, 3], "x": 51, "y": 29, "flags": 4}, + {"matrix": [2, 4], "x": 66, "y": 29, "flags": 4}, + {"matrix": [2, 5], "x": 81, "y": 29, "flags": 4}, + {"matrix": [2, 6], "x": 95, "y": 29, "flags": 4}, + {"matrix": [2, 7], "x": 110, "y": 29, "flags": 4}, + {"matrix": [2, 8], "x": 125, "y": 29, "flags": 4}, + {"matrix": [2, 9], "x": 140, "y": 29, "flags": 4}, + {"matrix": [2, 10], "x": 154, "y": 29, "flags": 4}, + {"matrix": [2, 11], "x": 169, "y": 29, "flags": 4}, + {"matrix": [2, 12], "x": 184, "y": 29, "flags": 4}, + {"matrix": [3, 13], "x": 200, "y": 35, "flags": 4}, + {"matrix": [2, 15], "x": 224, "y": 29, "flags": 4}, + {"matrix": [3, 0], "x": 5, "y": 41, "flags": 4}, + {"matrix": [3, 1], "x": 26, "y": 41, "flags": 4}, + {"matrix": [3, 2], "x": 40, "y": 41, "flags": 4}, + {"matrix": [3, 3], "x": 55, "y": 41, "flags": 4}, + {"matrix": [3, 4], "x": 70, "y": 41, "flags": 4}, + {"matrix": [3, 5], "x": 84, "y": 41, "flags": 4}, + {"matrix": [3, 6], "x": 99, "y": 41, "flags": 4}, + {"matrix": [3, 7], "x": 114, "y": 41, "flags": 4}, + {"matrix": [3, 8], "x": 129, "y": 41, "flags": 4}, + {"matrix": [3, 9], "x": 143, "y": 41, "flags": 4}, + {"matrix": [3, 10], "x": 158, "y": 41, "flags": 4}, + {"matrix": [3, 11], "x": 172, "y": 41, "flags": 4}, + {"matrix": [2, 13], "x": 187, "y": 41, "flags": 4}, + {"matrix": [3, 15], "x": 224, "y": 41, "flags": 4}, + {"matrix": [4, 0], "x": 2, "y": 52, "flags": 4}, + {"matrix": [4, 1], "x": 18, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 33, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 48, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 62, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 77, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 92, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 106, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 121, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 136, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 150, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 165, "y": 52, "flags": 4}, + {"matrix": [4, 12], "x": 185, "y": 52, "flags": 4}, + {"matrix": [4, 14], "x": 209, "y": 52, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 4}, + {"matrix": [5, 1], "x": 20, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 38, "y": 64, "flags": 4}, + {"matrix": [5, 6], "x": 94, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 150, "y": 64, "flags": 4}, + {"matrix": [5, 11], "x": 172, "y": 64, "flags": 4}, + {"matrix": [5, 12], "x": 195, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 209, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 224, "y": 64, "flags": 1}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 45, "y": 0, "flags": 2}, + {"x": 90, "y": 0, "flags": 2}, + {"x": 134, "y": 0, "flags": 2}, + {"x": 179, "y": 0, "flags": 2}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 0, "y": 32, "flags": 2}, + {"x": 224, "y": 32, "flags": 2}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 45, "y": 64, "flags": 2}, + {"x": 90, "y": 64, "flags": 2}, + {"x": 134, "y": 64, "flags": 2}, + {"x": 179, "y": 64, "flags": 2}, + {"x": 224, "y": 64, "flags": 2} + ], "led_flush_limit": 26, "led_process_limit": 4, "sleep": true diff --git a/keyboards/kbdfans/bella/rgb_iso/rgb_iso.c b/keyboards/kbdfans/bella/rgb_iso/rgb_iso.c index 8d9349e295..ecbe4b3122 100644 --- a/keyboards/kbdfans/bella/rgb_iso/rgb_iso.c +++ b/keyboards/kbdfans/bella/rgb_iso/rgb_iso.c @@ -119,36 +119,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW4_CS3, SW4_CS2, SW4_CS1}, /* RGB40 */ }; -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15*/ - { 0, NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, NO_LED, 9, 10, 11, 12, 13, }, /* R0 */ - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, NO_LED, 27, 28, }, /* R1 */ - { 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 56, NO_LED, 43, }, /* R2 */ - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, 42, NO_LED, 57, }, /* R3 */ - { 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, NO_LED, 71, NO_LED, }, /* R4 */ - { 72, 73, 74, NO_LED, NO_LED, NO_LED, 75, NO_LED, NO_LED, NO_LED, 76, 77, 78, NO_LED, 79, 80, }, /* R5 */ - }, { - {0, 0}, {29, 0}, {44, 0}, {59, 0}, {73, 0}, {95, 0}, {110, 0}, {125, 0}, {140, 0}, {161, 0}, {176, 0}, {191, 0}, {206, 0}, {224, 0}, - {0, 17}, {15, 17}, {29, 17}, {44, 17}, {59, 17}, {73, 17}, {88, 17}, {102, 17}, {117, 17}, {132, 17}, {147, 17}, {161, 17}, {176, 17}, {198, 17}, {224, 17}, - {4, 29}, {22, 29}, {37, 29}, {51, 29}, {66, 29}, {81, 29}, {95, 29}, {110, 29}, {125, 29}, {140, 29}, {154, 29}, {169, 29}, {184, 29}, {200, 35}, {224, 29}, - {5, 41}, {26, 41}, {40, 41}, {55, 41}, {70, 41}, {84, 41}, {99, 41}, {114, 41}, {129, 41}, {143, 41}, {158, 41}, {172, 41}, {187, 41}, {224, 41}, - {2, 52}, {18, 52}, {33, 52}, {48, 52}, {62, 52}, {77, 52}, {92, 52}, {106, 52}, {121, 52}, {136, 52}, {150, 52}, {165, 52}, {185, 52}, {209, 52}, - {2, 64}, {20, 64}, {38, 64}, {94, 64}, {150, 64}, {172, 64}, {195, 64}, {209, 64}, {224, 64}, - {0, 0}, {45, 0}, {90, 0}, {134, 0}, {179, 0}, {224, 0}, - {0, 32}, {224,32}, - {0, 64}, {45, 64}, {90, 64}, {134, 64}, {179, 64}, {224, 64}, - }, { - 4,1,1,1,1,1,1,1,1,1,1,1,1,4, - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, - 4,4,4,4,4,4,4,4,4,4,4,4,4,4, - 4,4,4,4,4,4,4,4,4,4,4,4,4,1, - 4,4,4,4,4,4,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2, - } -}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/kbdfans/boop65/rgb/keyboard.json b/keyboards/kbdfans/boop65/rgb/keyboard.json index 4a051c9112..6fc36d1539 100644 --- a/keyboards/kbdfans/boop65/rgb/keyboard.json +++ b/keyboards/kbdfans/boop65/rgb/keyboard.json @@ -56,6 +56,91 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 188, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 201, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 189, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 8], "x": 152, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 171, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1}, + {"x": 0, "y": 8, "flags": 2}, + {"x": 32, "y": 8, "flags": 2}, + {"x": 64, "y": 8, "flags": 2}, + {"x": 96, "y": 8, "flags": 2}, + {"x": 128, "y": 8, "flags": 2}, + {"x": 160, "y": 8, "flags": 2}, + {"x": 192, "y": 8, "flags": 2}, + {"x": 224, "y": 8, "flags": 2}, + {"x": 0, "y": 56, "flags": 2}, + {"x": 32, "y": 56, "flags": 2}, + {"x": 64, "y": 56, "flags": 2}, + {"x": 96, "y": 56, "flags": 2}, + {"x": 128, "y": 56, "flags": 2}, + {"x": 160, "y": 56, "flags": 2}, + {"x": 192, "y": 56, "flags": 2}, + {"x": 224, "y": 56, "flags": 2} + ], "led_flush_limit": 26, "led_process_limit": 4, "max_brightness": 200, diff --git a/keyboards/kbdfans/boop65/rgb/rgb.c b/keyboards/kbdfans/boop65/rgb/rgb.c index f70c92812f..5a6caf64d1 100644 --- a/keyboards/kbdfans/boop65/rgb/rgb.c +++ b/keyboards/kbdfans/boop65/rgb/rgb.c @@ -112,29 +112,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW6_CS39, SW6_CS38, SW6_CS37} }; -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED,42, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED,56, 57 }, - { 58, 59, 60, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, NO_LED, 63, 64, NO_LED, 65, 66 } -}, { - {0,0},{15,0},{30,0},{45,0},{60,0},{75,0},{90,0},{105,0},{120,0},{135,0},{150,0},{165,0},{180,0},{203,0},{224,0}, - {4,16},{23,16},{38,16},{53,16},{68,16},{83,16},{98,16},{113,16},{128,16},{143,16},{158,16},{173,16},{188,16},{206,16},{224,16}, - {6,32},{26,32},{41,32},{56,32},{71,32},{86,32},{101,32},{116,32},{131,32},{146,32},{161,32},{176,32},{201,32},{224,32}, - {9,48},{34,48},{49,48},{64,48},{79,48},{94,48},{109,48},{124,48},{139,48},{154,48},{169,48},{189,48},{210,48},{224,48}, - {2,64},{21,64},{39,64},{96,64},{152,64},{171,64},{195,64},{210,64},{224,64}, - {0,8},{32,8},{64,8},{96,8},{128,8},{160,8},{192,8},{224,8}, - {0,56},{32,56},{64,56},{96,56},{128,56},{160,56},{192,56},{224,56} -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2 -} }; bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v1/keyboard.json b/keyboards/kbdfans/kbd67/mkiirgb/v1/keyboard.json index f55a649f43..9b034ef194 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb/v1/keyboard.json +++ b/keyboards/kbdfans/kbd67/mkiirgb/v1/keyboard.json @@ -37,6 +37,75 @@ "animation": "cycle_all" }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 188, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 201, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 189, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 8], "x": 152, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 171, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "led_flush_limit": 26, "led_process_limit": 4, "max_brightness": 200, diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v1/v1.c b/keyboards/kbdfans/kbd67/mkiirgb/v1/v1.c index 210be85d3f..7d25400d7f 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb/v1/v1.c +++ b/keyboards/kbdfans/kbd67/mkiirgb/v1/v1.c @@ -92,10 +92,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { }; -led_config_t g_led_config = {{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, {15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}, {30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED, 42, 43}, {44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, 56, 57}, {58, 59, 60, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, NO_LED, 63, 64, NO_LED, 65, 66}}, - {{0, 0}, {15, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {203, 0}, {224, 0}, {4, 16}, {23, 16}, {38, 16}, {53, 16}, {68, 16}, {83, 16}, {98, 16}, {113, 16}, {128, 16}, {143, 16}, {158, 16}, {173, 16}, {188, 16}, {206, 16}, {224, 16}, {6, 32}, {26, 32}, {41, 32}, {56, 32}, {71, 32}, {86, 32}, {101, 32}, {116, 32}, {131, 32}, {146, 32}, {161, 32}, {176, 32}, {201, 32}, {224, 32}, {9, 48}, {34, 48}, {49, 48}, {64, 48}, {79, 48}, {94, 48}, {109, 48}, {124, 48}, {139, 48}, {154, 48}, {169, 48}, {189, 48}, {210, 48}, {224, 48}, {2, 64}, {21, 64}, {39, 64}, {96, 64}, {152, 64}, {171, 64}, {195, 64}, {210, 64}, {224, 64}}, - {1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1}}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v2/keyboard.json b/keyboards/kbdfans/kbd67/mkiirgb/v2/keyboard.json index 916ee0f33a..012ab5257b 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb/v2/keyboard.json +++ b/keyboards/kbdfans/kbd67/mkiirgb/v2/keyboard.json @@ -35,6 +35,75 @@ "animation": "cycle_all" }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 188, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 201, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 189, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 8], "x": 152, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 171, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "led_flush_limit": 26, "led_process_limit": 4, "sleep": true diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v2/v2.c b/keyboards/kbdfans/kbd67/mkiirgb/v2/v2.c index 50958017a2..f32d5b2f1d 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb/v2/v2.c +++ b/keyboards/kbdfans/kbd67/mkiirgb/v2/v2.c @@ -92,27 +92,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { }; -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED,42, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED,56, 57 }, - { 58, 59, 60, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, NO_LED, 63, 64, NO_LED, 65, 66 } -}, { - {0,0},{15,0},{30,0},{45,0},{60,0},{75,0},{90,0},{105,0},{120,0},{135,0},{150,0},{165,0},{180,0},{203,0},{224,0}, - {4,16},{23,16},{38,16},{53,16},{68,16},{83,16},{98,16},{113,16},{128,16},{143,16},{158,16},{173,16},{188,16},{206,16},{224,16}, - {6,32},{26,32},{41,32},{56,32},{71,32},{86,32},{101,32},{116,32},{131,32},{146,32},{161,32},{176,32},{201,32},{224,32}, - {9,48},{34,48},{49,48},{64,48},{79,48},{94,48},{109,48},{124,48},{139,48},{154,48},{169,48},{189,48},{210,48},{224,48}, - {2,64},{21,64},{39,64},{96,64},{152,64},{171,64},{195,64},{210,64},{224,64} -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1 -} }; - - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v3/keyboard.json b/keyboards/kbdfans/kbd67/mkiirgb/v3/keyboard.json index 4a3beea9eb..bab449e144 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb/v3/keyboard.json +++ b/keyboards/kbdfans/kbd67/mkiirgb/v3/keyboard.json @@ -37,6 +37,75 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 119, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 134, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 149, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 164, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 179, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 205, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 9}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 175, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 200, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 63, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 78, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 93, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 108, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 123, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 138, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 153, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 168, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 189, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 209, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 95, "y": 64, "flags": 4}, + {"matrix": [4, 8], "x": 151, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 170, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 194, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 209, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "val_steps": 8, "led_flush_limit": 26, "led_process_limit": 4, diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v3/v3.c b/keyboards/kbdfans/kbd67/mkiirgb/v3/v3.c index 0b40afadf9..dd3fd96e1c 100755 --- a/keyboards/kbdfans/kbd67/mkiirgb/v3/v3.c +++ b/keyboards/kbdfans/kbd67/mkiirgb/v3/v3.c @@ -94,33 +94,7 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { }; -#define __ NO_LED #define CAPS_LOCK_LED_INDEX 30 - -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, __, 42, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, __, 56, 57 }, - { 58, 59, 60, __, __, 61, __, __, 62, __, 63, 64, __, 65, 66 } -}, { - // LED Index to Physical Position - // based on: https://gist.github.com/vinorodrigues/07fd735683856b2a06c7c52b9b3878cb - {0, 0}, {15, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {119, 0}, {134, 0}, {149, 0}, {164, 0}, {179, 0}, {202, 0}, {224, 0}, - {4, 16}, {22, 16}, {37, 16}, {52, 16}, {67, 16}, {82, 16}, {97, 16}, {112, 16}, {127, 16}, {142, 16}, {157, 16}, {172, 16}, {187, 16}, {205, 16}, {224, 16}, - {6, 32}, {26, 32}, {41, 32}, {56, 32}, {71, 32}, {86, 32}, {101, 32}, {116, 32}, {131, 32}, {146, 32}, {161, 32}, {175, 32}, {200, 32}, {224, 32}, - {9, 48}, {34, 48}, {49, 48}, {63, 48}, {78, 48}, {93, 48}, {108, 48}, {123, 48}, {138, 48}, {153, 48}, {168, 48}, {189, 48}, {209, 48}, {224, 48}, - {2, 64}, {21, 64}, {39, 64}, {95, 64}, {151, 64}, {170, 64}, {194, 64}, {209, 64}, {224, 64} -}, { - // LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, // caps lock is also an indicator so mask is `0x01 | 0x08` - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1 -} }; - #endif #if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX) diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v4/keyboard.json b/keyboards/kbdfans/kbd67/mkiirgb/v4/keyboard.json index ed47182ae5..574a02088f 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb/v4/keyboard.json +++ b/keyboards/kbdfans/kbd67/mkiirgb/v4/keyboard.json @@ -52,6 +52,75 @@ "animation": "cycle_all" }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 188, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 201, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 189, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 152, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 171, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "max_brightness": 150, "sat_steps": 8, "val_steps": 8, diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v4/v4.c b/keyboards/kbdfans/kbd67/mkiirgb/v4/v4.c index 24ccaea968..f9af0a3df9 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb/v4/v4.c +++ b/keyboards/kbdfans/kbd67/mkiirgb/v4/v4.c @@ -17,28 +17,6 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE - -led_config_t g_led_config = { -{ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,NO_LED, 43 }, - { 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, NO_LED,45, 44 }, - { 58, 59, 60, NO_LED, NO_LED, 61, NO_LED, NO_LED, NO_LED, 62, 63, 64, NO_LED,65, 66 } -}, { - {0,0},{15,0},{30,0},{45,0},{60,0},{75,0},{90,0},{105,0},{120,0},{135,0},{150,0},{165,0},{180,0},{203,0},{224,0}, - {224,16},{206,16},{188,16},{173,16},{158,16},{143,16},{128,16},{113,16},{98,16},{83,16}, {68,16},{53,16},{38,16},{23,16},{4,16}, - {6,32},{26,32},{41,32},{56,32},{71,32},{86,32},{101,32},{116,32},{131,32},{146,32},{161,32},{176,32},{201,32},{224,32}, - {224,48},{210,48},{189,48},{169,48},{154,48},{139,48},{124,48},{109,48},{94,48},{79,48},{64,48},{49,48},{34,48},{9,48}, - {2,64},{21,64},{39,64},{96,64},{152,64},{171,64},{195,64},{210,64},{224,64} -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1 -} }; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/kbdfans/kbd67/mkiirgb_iso/keyboard.json b/keyboards/kbdfans/kbd67/mkiirgb_iso/keyboard.json index 5000f8fb0a..3d544fe88c 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb_iso/keyboard.json +++ b/keyboards/kbdfans/kbd67/mkiirgb_iso/keyboard.json @@ -40,6 +40,76 @@ "animation": "cycle_all" }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [1, 12], "x": 188, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 191, "y": 32, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 24, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 189, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 34, "y": 48, "flags": 4}, + {"matrix": [4, 3], "x": 21, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 2, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 152, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 171, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "sat_steps": 8, "val_steps": 8, "speed_steps": 10, diff --git a/keyboards/kbdfans/kbd67/mkiirgb_iso/mkiirgb_iso.c b/keyboards/kbdfans/kbd67/mkiirgb_iso/mkiirgb_iso.c index 432c871dba..8aa7d42ef3 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb_iso/mkiirgb_iso.c +++ b/keyboards/kbdfans/kbd67/mkiirgb_iso/mkiirgb_iso.c @@ -17,28 +17,6 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { -{ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 42, 15 }, - { 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,NO_LED, 43 }, - { 58, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, NO_LED,45, 44 }, - { 59, 60, 61, 57, NO_LED, 62, NO_LED, NO_LED, NO_LED, 63, 64, 65, NO_LED,66, 67 } -}, { - {0,0},{15,0},{30,0},{45,0},{60,0},{75,0},{90,0},{105,0},{120,0},{135,0},{150,0},{165,0},{180,0},{203,0},{224,0}, - {224,16},{188,16},{173,16},{158,16},{143,16},{128,16},{113,16},{98,16},{83,16}, {68,16},{53,16},{38,16},{23,16},{4,16}, - {6,32},{26,32},{41,32},{56,32},{71,32},{86,32},{101,32},{116,32},{131,32},{146,32},{161,32},{176,32},{191,32},{206,24},{224,32}, - {224,48},{210,48},{189,48},{169,48},{154,48},{139,48},{124,48},{109,48},{94,48},{79,48},{64,48},{49,48},{34,48},{21,48},{2,48}, - {2,64},{21,64},{39,64},{96,64},{152,64},{171,64},{195,64},{210,64},{224,64} -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1 -} }; - - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/kbdfans/kbd75rgb/kbd75rgb.c b/keyboards/kbdfans/kbd75rgb/kbd75rgb.c index 622ca83b68..45e195524a 100644 --- a/keyboards/kbdfans/kbd75rgb/kbd75rgb.c +++ b/keyboards/kbdfans/kbd75rgb/kbd75rgb.c @@ -17,29 +17,6 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15}, - { 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16}, - { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45}, - { 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 14, 47, 46}, - { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, NO_LED,72, 73}, - { 83, 82, 81, NO_LED, NO_LED, 80, NO_LED, NO_LED, 79, 78, 77, 76, NO_LED,75 ,74} -}, { - {0, 0}, {15, 0}, {30, 0},{45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {210, 0}, {224, 0}, - {224, 12}, {218, 12},{192, 12},{176, 12},{160, 12},{144, 12},{128, 12},{112, 12},{96, 12},{80, 12},{64, 12},{48, 12},{32, 12},{16, 12},{0, 12}, - {0, 25},{16, 25}, {32, 25}, {48, 25}, {64, 25}, {80, 25}, {96, 25}, {112, 25}, {128, 25}, {144, 25}, {160, 25},{176, 25}, {192, 25}, {218, 25}, {224, 25}, -{224, 38},{200, 38},{176, 38},{160, 38},{144, 38},{128, 38},{112, 38},{96, 38},{80, 38},{64, 38},{48, 38},{32, 38},{16, 38},{0, 38}, - {0, 51},{16, 51}, {32, 51}, {48, 51}, {64, 51}, {80, 51}, {96, 51}, {112, 51}, {128, 51}, {144, 51}, {160, 51}, {189, 51}, {218, 51}, {224, 51}, -{224, 64},{218, 64},{192, 64},{176, 64},{160, 64},{144, 64}, {80, 64}, {32, 64},{16, 64},{0, 64} -}, { -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,1,4,1,1,1,4,4,4, -4,4,4,4 -} }; - - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/kbdfans/kbd75rgb/keyboard.json b/keyboards/kbdfans/kbd75rgb/keyboard.json index 6a69d78c03..af6379071d 100644 --- a/keyboards/kbdfans/kbd75rgb/keyboard.json +++ b/keyboards/kbdfans/kbd75rgb/keyboard.json @@ -58,6 +58,92 @@ "animation": "cycle_all" }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 195, "y": 0, "flags": 4}, + {"matrix": [3, 12], "x": 210, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 12, "flags": 4}, + {"matrix": [1, 13], "x": 218, "y": 12, "flags": 4}, + {"matrix": [1, 12], "x": 192, "y": 12, "flags": 4}, + {"matrix": [1, 11], "x": 176, "y": 12, "flags": 4}, + {"matrix": [1, 10], "x": 160, "y": 12, "flags": 4}, + {"matrix": [1, 9], "x": 144, "y": 12, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 12, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 12, "flags": 4}, + {"matrix": [1, 6], "x": 96, "y": 12, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 12, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 12, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 12, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 12, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 12, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 12, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 25, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 25, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 25, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 25, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 25, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 25, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 25, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 25, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 25, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 25, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 25, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 25, "flags": 4}, + {"matrix": [2, 12], "x": 192, "y": 25, "flags": 4}, + {"matrix": [2, 13], "x": 218, "y": 25, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 25, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 38, "flags": 4}, + {"matrix": [3, 13], "x": 200, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 176, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 160, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 144, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 128, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 112, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 96, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 80, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 32, "y": 38, "flags": 4}, + {"matrix": [3, 1], "x": 16, "y": 38, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 38, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 51, "flags": 4}, + {"matrix": [4, 1], "x": 16, "y": 51, "flags": 4}, + {"matrix": [4, 2], "x": 32, "y": 51, "flags": 4}, + {"matrix": [4, 3], "x": 48, "y": 51, "flags": 4}, + {"matrix": [4, 4], "x": 64, "y": 51, "flags": 4}, + {"matrix": [4, 5], "x": 80, "y": 51, "flags": 4}, + {"matrix": [4, 6], "x": 96, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 112, "y": 51, "flags": 4}, + {"matrix": [4, 8], "x": 128, "y": 51, "flags": 4}, + {"matrix": [4, 9], "x": 144, "y": 51, "flags": 4}, + {"matrix": [4, 10], "x": 160, "y": 51, "flags": 4}, + {"matrix": [4, 11], "x": 189, "y": 51, "flags": 4}, + {"matrix": [4, 13], "x": 218, "y": 51, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 51, "flags": 4}, + {"matrix": [5, 14], "x": 224, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 218, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 192, "y": 64, "flags": 1}, + {"matrix": [5, 10], "x": 176, "y": 64, "flags": 4}, + {"matrix": [5, 9], "x": 160, "y": 64, "flags": 4}, + {"matrix": [5, 8], "x": 144, "y": 64, "flags": 4}, + {"matrix": [5, 5], "x": 80, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 32, "y": 64, "flags": 4}, + {"matrix": [5, 1], "x": 16, "y": 64, "flags": 4}, + {"matrix": [5, 0], "x": 0, "y": 64, "flags": 4} + ], "sat_steps": 8, "val_steps": 8, "speed_steps": 10, diff --git a/keyboards/kbdfans/kbdmini/kbdmini.c b/keyboards/kbdfans/kbdmini/kbdmini.c index 18acc21da4..c9b558b7d3 100644 --- a/keyboards/kbdfans/kbdmini/kbdmini.c +++ b/keyboards/kbdfans/kbdmini/kbdmini.c @@ -57,22 +57,3 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, SW11_CS2, SW10_CS2, SW12_CS2 }, //LA8 { 0, SW11_CS1, SW10_CS1, SW12_CS1 } //LA4 }; - -led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }, - { 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }, - { 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 }, - { 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51 } - }, { - { 0, 0 }, { 19, 0 }, { 38, 0 }, { 57, 0 }, { 76, 0 }, { 95, 0 }, { 114, 0 }, { 133, 0 }, { 152, 0 }, { 171, 0 }, { 190, 0 }, { 209, 0 }, { 224, 0 }, - { 0, 21 }, { 19, 21 }, { 38, 21 }, { 57, 21 }, { 76, 21 }, { 95, 21 }, { 114, 21 }, { 133, 21 }, { 152, 21 }, { 171, 21 }, { 190, 21 }, { 209, 21 }, { 224, 21 }, - { 0, 42 }, { 19, 42 }, { 38, 42 }, { 57, 42 }, { 76, 42 }, { 95, 42 }, { 114, 42 }, { 133, 42 }, { 152, 42 }, { 171, 42 }, { 190, 42 }, { 209, 42 }, { 224, 42 }, - { 0, 64 }, { 19, 64 }, { 38, 64 }, { 57, 64 }, { 76, 64 }, { 95, 64 }, { 114, 64 }, { 133, 64 }, { 152, 64 }, { 171, 64 }, { 190, 64 }, { 209, 64 }, { 224, 64 } - }, { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - } -}; diff --git a/keyboards/kbdfans/kbdmini/keyboard.json b/keyboards/kbdfans/kbdmini/keyboard.json index 97edf073e6..90ec227140 100644 --- a/keyboards/kbdfans/kbdmini/keyboard.json +++ b/keyboards/kbdfans/kbdmini/keyboard.json @@ -37,6 +37,60 @@ "typing_heatmap": true }, "driver": "is31fl3733", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 19, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 38, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 57, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 76, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 95, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 114, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 133, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 152, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 171, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 190, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 209, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 21, "flags": 1}, + {"matrix": [1, 1], "x": 19, "y": 21, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 21, "flags": 4}, + {"matrix": [1, 3], "x": 57, "y": 21, "flags": 4}, + {"matrix": [1, 4], "x": 76, "y": 21, "flags": 4}, + {"matrix": [1, 5], "x": 95, "y": 21, "flags": 4}, + {"matrix": [1, 6], "x": 114, "y": 21, "flags": 4}, + {"matrix": [1, 7], "x": 133, "y": 21, "flags": 4}, + {"matrix": [1, 8], "x": 152, "y": 21, "flags": 4}, + {"matrix": [1, 9], "x": 171, "y": 21, "flags": 4}, + {"matrix": [1, 10], "x": 190, "y": 21, "flags": 4}, + {"matrix": [1, 11], "x": 209, "y": 21, "flags": 4}, + {"matrix": [1, 12], "x": 224, "y": 21, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 42, "flags": 1}, + {"matrix": [2, 1], "x": 19, "y": 42, "flags": 4}, + {"matrix": [2, 2], "x": 38, "y": 42, "flags": 4}, + {"matrix": [2, 3], "x": 57, "y": 42, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 42, "flags": 4}, + {"matrix": [2, 5], "x": 95, "y": 42, "flags": 4}, + {"matrix": [2, 6], "x": 114, "y": 42, "flags": 4}, + {"matrix": [2, 7], "x": 133, "y": 42, "flags": 4}, + {"matrix": [2, 8], "x": 152, "y": 42, "flags": 4}, + {"matrix": [2, 9], "x": 171, "y": 42, "flags": 4}, + {"matrix": [2, 10], "x": 190, "y": 42, "flags": 4}, + {"matrix": [2, 11], "x": 209, "y": 42, "flags": 4}, + {"matrix": [2, 12], "x": 224, "y": 42, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [3, 1], "x": 19, "y": 64, "flags": 1}, + {"matrix": [3, 2], "x": 38, "y": 64, "flags": 1}, + {"matrix": [3, 3], "x": 57, "y": 64, "flags": 1}, + {"matrix": [3, 4], "x": 76, "y": 64, "flags": 1}, + {"matrix": [3, 5], "x": 95, "y": 64, "flags": 1}, + {"matrix": [3, 6], "x": 114, "y": 64, "flags": 1}, + {"matrix": [3, 7], "x": 133, "y": 64, "flags": 1}, + {"matrix": [3, 8], "x": 152, "y": 64, "flags": 1}, + {"matrix": [3, 9], "x": 171, "y": 64, "flags": 1}, + {"matrix": [3, 10], "x": 190, "y": 64, "flags": 1}, + {"matrix": [3, 11], "x": 209, "y": 64, "flags": 1}, + {"matrix": [3, 12], "x": 224, "y": 64, "flags": 1} + ], "sleep": true }, "features": { diff --git a/keyboards/kbdfans/maja/keyboard.json b/keyboards/kbdfans/maja/keyboard.json index 949dd09fe2..fd5d10d833 100644 --- a/keyboards/kbdfans/maja/keyboard.json +++ b/keyboards/kbdfans/maja/keyboard.json @@ -40,6 +40,75 @@ "animation": "cycle_all" }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 4, "y": 1, "flags": 1}, + {"matrix": [0, 1], "x": 18, "y": 1, "flags": 4}, + {"matrix": [0, 2], "x": 31, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 46, "y": 3, "flags": 4}, + {"matrix": [0, 4], "x": 59, "y": 5, "flags": 4}, + {"matrix": [0, 5], "x": 73, "y": 7, "flags": 4}, + {"matrix": [0, 6], "x": 86, "y": 10, "flags": 4}, + {"matrix": [0, 7], "x": 107, "y": 9, "flags": 4}, + {"matrix": [0, 8], "x": 121, "y": 7, "flags": 4}, + {"matrix": [0, 9], "x": 134, "y": 4, "flags": 4}, + {"matrix": [0, 10], "x": 148, "y": 2, "flags": 4}, + {"matrix": [0, 11], "x": 162, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 176, "y": 2, "flags": 4}, + {"matrix": [0, 13], "x": 196, "y": 2, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 5, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 22, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 50, "y": 17, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 20, "flags": 4}, + {"matrix": [1, 5], "x": 77, "y": 22, "flags": 4}, + {"matrix": [1, 6], "x": 103, "y": 23, "flags": 4}, + {"matrix": [1, 7], "x": 117, "y": 21, "flags": 4}, + {"matrix": [1, 8], "x": 130, "y": 19, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 171, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 186, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 202, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 4, "y": 28, "flags": 4}, + {"matrix": [2, 1], "x": 23, "y": 28, "flags": 4}, + {"matrix": [2, 2], "x": 38, "y": 29, "flags": 4}, + {"matrix": [2, 3], "x": 51, "y": 31, "flags": 4}, + {"matrix": [2, 4], "x": 65, "y": 34, "flags": 4}, + {"matrix": [2, 5], "x": 78, "y": 36, "flags": 4}, + {"matrix": [2, 6], "x": 109, "y": 36, "flags": 4}, + {"matrix": [2, 7], "x": 122, "y": 34, "flags": 4}, + {"matrix": [2, 8], "x": 136, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 150, "y": 29, "flags": 4}, + {"matrix": [2, 10], "x": 164, "y": 29, "flags": 4}, + {"matrix": [2, 11], "x": 177, "y": 29, "flags": 4}, + {"matrix": [2, 13], "x": 200, "y": 29, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 29, "flags": 4}, + {"matrix": [3, 0], "x": 5, "y": 42, "flags": 4}, + {"matrix": [3, 1], "x": 27, "y": 42, "flags": 4}, + {"matrix": [3, 2], "x": 42, "y": 43, "flags": 4}, + {"matrix": [3, 3], "x": 55, "y": 46, "flags": 4}, + {"matrix": [3, 4], "x": 69, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 82, "y": 51, "flags": 4}, + {"matrix": [3, 6], "x": 104, "y": 51, "flags": 4}, + {"matrix": [3, 7], "x": 118, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 131, "y": 46, "flags": 4}, + {"matrix": [3, 9], "x": 145, "y": 44, "flags": 4}, + {"matrix": [3, 10], "x": 159, "y": 43, "flags": 4}, + {"matrix": [3, 11], "x": 173, "y": 43, "flags": 4}, + {"matrix": [3, 12], "x": 192, "y": 43, "flags": 4}, + {"matrix": [3, 13], "x": 214, "y": 46, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 55, "flags": 4}, + {"matrix": [4, 2], "x": 40, "y": 58, "flags": 4}, + {"matrix": [4, 3], "x": 62, "y": 61, "flags": 4}, + {"matrix": [4, 5], "x": 86, "y": 64, "flags": 1}, + {"matrix": [4, 7], "x": 119, "y": 62, "flags": 4}, + {"matrix": [4, 9], "x": 147, "y": 58, "flags": 4}, + {"matrix": [4, 12], "x": 201, "y": 60, "flags": 1}, + {"matrix": [4, 13], "x": 214, "y": 60, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 60, "flags": 1} + ], "led_flush_limit": 26, "led_process_limit": 4, "sleep": true diff --git a/keyboards/kbdfans/maja/maja.c b/keyboards/kbdfans/maja/maja.c index cc073930bc..c1db8e606c 100755 --- a/keyboards/kbdfans/maja/maja.c +++ b/keyboards/kbdfans/maja/maja.c @@ -74,26 +74,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {1, C8_16, C7_16, C6_16} // LD17 }; -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,}, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED, 42, 43}, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, NO_LED}, - { 58, NO_LED, 59, 60, NO_LED, 61, NO_LED, 62, NO_LED, 63, NO_LED, NO_LED, 64, 65, 66} -}, { - {4,1},{18,1},{31,0},{46,3},{59,5},{73,7},{86,10},{107,9},{121,7},{134,4},{148,2},{162,0},{176,2},{196,2},{224,0}, - {5,15},{22,15},{37,15},{50,17},{64,20},{77,22},{103,23},{117,21},{130,19},{143,16},{158,15},{171,16},{186,16},{202,16},{224,16}, - {4,28},{23,28},{38,29},{51,31},{65,34},{78,36},{109,36},{122,34},{136,32},{150,29},{164,29},{177,29},{200,29},{224,29}, - {5,42},{27,42},{42,43},{55,46},{69,48},{82,51},{104,51},{118,48},{131,46},{145,44},{159,43},{173,43},{192,43},{214,46}, - {0,55},{40,58},{62,61},{86,64},{119,62},{147,58},{201,60},{214,60},{224,60} -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 4, 4, 4, 1, 4, 4, 1, 1, 1 -} }; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/kbdfans/odin/rgb/keyboard.json b/keyboards/kbdfans/odin/rgb/keyboard.json index 1fb5a833ec..8e14e1210a 100644 --- a/keyboards/kbdfans/odin/rgb/keyboard.json +++ b/keyboards/kbdfans/odin/rgb/keyboard.json @@ -59,6 +59,112 @@ "animation": "cycle_all" }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 24, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 36, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 84, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 108, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 132, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 156, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 168, "y": 0, "flags": 4}, + {"matrix": [0, 15], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 16], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 17], "x": 204, "y": 0, "flags": 4}, + {"matrix": [0, 18], "x": 216, "y": 0, "flags": 4}, + {"matrix": [0, 19], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 19], "x": 224, "y": 14, "flags": 4}, + {"matrix": [1, 18], "x": 216, "y": 14, "flags": 4}, + {"matrix": [1, 17], "x": 204, "y": 14, "flags": 4}, + {"matrix": [1, 16], "x": 192, "y": 14, "flags": 4}, + {"matrix": [1, 15], "x": 180, "y": 14, "flags": 4}, + {"matrix": [1, 13], "x": 156, "y": 14, "flags": 4}, + {"matrix": [1, 12], "x": 144, "y": 14, "flags": 4}, + {"matrix": [1, 11], "x": 132, "y": 14, "flags": 4}, + {"matrix": [1, 10], "x": 120, "y": 14, "flags": 4}, + {"matrix": [1, 9], "x": 108, "y": 14, "flags": 4}, + {"matrix": [1, 8], "x": 96, "y": 14, "flags": 4}, + {"matrix": [1, 7], "x": 84, "y": 14, "flags": 4}, + {"matrix": [1, 6], "x": 72, "y": 14, "flags": 4}, + {"matrix": [1, 5], "x": 60, "y": 14, "flags": 4}, + {"matrix": [1, 4], "x": 48, "y": 14, "flags": 4}, + {"matrix": [1, 3], "x": 36, "y": 14, "flags": 4}, + {"matrix": [1, 2], "x": 24, "y": 14, "flags": 4}, + {"matrix": [1, 1], "x": 12, "y": 14, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 14, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 27, "flags": 4}, + {"matrix": [2, 1], "x": 12, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 24, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 36, "y": 27, "flags": 4}, + {"matrix": [2, 4], "x": 48, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 60, "y": 27, "flags": 4}, + {"matrix": [2, 6], "x": 72, "y": 27, "flags": 4}, + {"matrix": [2, 7], "x": 84, "y": 27, "flags": 4}, + {"matrix": [2, 8], "x": 96, "y": 27, "flags": 4}, + {"matrix": [2, 9], "x": 108, "y": 27, "flags": 4}, + {"matrix": [2, 10], "x": 120, "y": 27, "flags": 4}, + {"matrix": [2, 11], "x": 132, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 144, "y": 27, "flags": 4}, + {"matrix": [2, 13], "x": 156, "y": 27, "flags": 4}, + {"matrix": [2, 15], "x": 180, "y": 27, "flags": 4}, + {"matrix": [2, 16], "x": 192, "y": 27, "flags": 4}, + {"matrix": [2, 17], "x": 204, "y": 27, "flags": 4}, + {"matrix": [2, 18], "x": 216, "y": 27, "flags": 4}, + {"matrix": [2, 19], "x": 224, "y": 33, "flags": 4}, + {"matrix": [3, 18], "x": 216, "y": 40, "flags": 4}, + {"matrix": [3, 17], "x": 204, "y": 40, "flags": 4}, + {"matrix": [3, 16], "x": 192, "y": 40, "flags": 4}, + {"x": 224, "y": 0, "flags": 4}, + {"x": 0, "y": 0, "flags": 4}, + {"x": 0, "y": 64, "flags": 4}, + {"x": 224, "y": 64, "flags": 4}, + {"matrix": [3, 13], "x": 156, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 132, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 120, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 108, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 96, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 84, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 72, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 60, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 48, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 36, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 24, "y": 40, "flags": 4}, + {"matrix": [3, 1], "x": 12, "y": 40, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 40, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 24, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 36, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 48, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 60, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 72, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 84, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 96, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 108, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 120, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 132, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 156, "y": 52, "flags": 4}, + {"matrix": [4, 15], "x": 180, "y": 52, "flags": 4}, + {"matrix": [4, 16], "x": 192, "y": 52, "flags": 4}, + {"matrix": [4, 17], "x": 204, "y": 52, "flags": 4}, + {"matrix": [4, 18], "x": 216, "y": 52, "flags": 4}, + {"matrix": [4, 19], "x": 224, "y": 58, "flags": 4}, + {"matrix": [5, 18], "x": 216, "y": 64, "flags": 4}, + {"matrix": [5, 17], "x": 204, "y": 64, "flags": 4}, + {"matrix": [5, 16], "x": 192, "y": 64, "flags": 4}, + {"matrix": [5, 15], "x": 180, "y": 64, "flags": 4}, + {"matrix": [5, 14], "x": 168, "y": 64, "flags": 4}, + {"matrix": [5, 13], "x": 156, "y": 64, "flags": 4}, + {"matrix": [5, 11], "x": 132, "y": 64, "flags": 4}, + {"matrix": [5, 6], "x": 72, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 24, "y": 64, "flags": 4}, + {"matrix": [5, 1], "x": 12, "y": 64, "flags": 4}, + {"matrix": [5, 0], "x": 0, "y": 64, "flags": 4} + ], "max_brightness": 150, "sleep": true }, diff --git a/keyboards/kbdfans/odin/rgb/rgb.c b/keyboards/kbdfans/odin/rgb/rgb.c index 2774ca7a6e..1cfe8d487c 100644 --- a/keyboards/kbdfans/odin/rgb/rgb.c +++ b/keyboards/kbdfans/odin/rgb/rgb.c @@ -16,31 +16,6 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - { 0, NO_LED, 1, 2, 3, 4, NO_LED, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 }, - { 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, NO_LED, 22, 21, 20, 19, 18 }, - { 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, NO_LED, 51, 52, 53, 54, 55 }, - { 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, NO_LED, 63, NO_LED, NO_LED, 58, 57, 56, NO_LED }, - { 76, NO_LED, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, NO_LED, 87, NO_LED, 88, 89, 90, 91, 92 }, - { 103, 102, 101, NO_LED, NO_LED, NO_LED, 100, NO_LED, NO_LED, NO_LED, NO_LED, 99, NO_LED, 98, 97, 96, 95, 94, 93, NO_LED } - }, { - { 0, 0 }, { 24, 0 }, { 36, 0 }, { 48, 0 }, { 60, 0 }, { 84, 0 }, { 96, 0 }, { 108, 0 }, { 120, 0 }, { 132, 0 }, { 144, 0 }, { 156, 0 }, { 168, 0 }, { 180, 0 }, { 192, 0 }, { 204, 0 }, { 216, 0 }, { 224, 0 }, - { 224, 14 }, { 216, 14 }, { 204, 14 }, { 192, 14 }, { 180, 14 }, { 156, 14 }, { 144, 14 }, { 132, 14 }, { 120, 14 }, { 108, 14 }, { 96, 14 }, { 84, 14 }, { 72, 14 }, { 60, 14 }, { 48, 14 }, { 36, 14 }, { 24, 14 }, { 12, 14 }, { 0, 14 }, - { 0, 27 }, { 12, 27 }, { 24, 27 }, { 36, 27 }, { 48, 27 }, { 60, 27 }, { 72, 27 }, { 84, 27 }, { 96, 27 }, { 108, 27 }, { 120, 27 }, { 132, 27 }, { 144, 27 }, { 156, 27 }, { 180, 27 }, { 192, 27 }, { 204, 27 }, { 216, 27 }, { 224, 33 }, - { 216, 40 }, { 204, 40 }, { 192, 40 }, { 224, 0 }, { 0, 0 }, { 0, 64 }, { 224, 64 }, { 156, 40 }, { 132, 40 }, { 120, 40 }, { 108, 40 }, { 96, 40 }, { 84, 40 }, { 72, 40 }, { 60, 40 }, { 48, 40 }, { 36, 40 }, { 24, 40 }, { 12, 40 }, { 0, 40 }, - { 0, 52 }, { 24, 52 }, { 36, 52 }, { 48, 52 }, { 60, 52 }, { 72, 52 }, { 84, 52 }, { 96, 52 }, { 108, 52 }, { 120, 52 }, { 132, 52 }, { 156, 52 }, { 180, 52 }, { 192, 52 }, { 204, 52 }, { 216, 52 }, { 224, 58 }, - { 216, 64 }, { 204, 64 }, { 192, 64 }, { 180, 64 }, { 168, 64 }, { 156, 64 }, { 132, 64 }, { 72, 64 }, { 24, 64 }, { 12, 64 }, { 0, 64 } - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 - } -}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; From 177ff71d0c727632ff30e2d0bc066b9214177096 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:04:40 -0600 Subject: [PATCH 33/99] Migrate `g_led_config` to DD (H) (#25599) --- keyboards/hadron/ver3/keyboard.json | 14 +- keyboards/hadron/ver3/ver3.c | 18 --- keyboards/handwired/colorlice/colorlice.c | 39 ----- keyboards/handwired/colorlice/keyboard.json | 71 +++++++++ keyboards/handwired/dygma/raise/ansi/ansi.c | 41 ------ .../handwired/dygma/raise/ansi/keyboard.json | 136 ++++++++++++++++++ keyboards/handwired/dygma/raise/iso/iso.c | 39 ----- .../handwired/dygma/raise/iso/keyboard.json | 136 ++++++++++++++++++ keyboards/handwired/hnah108/hnah108.c | 47 ------ keyboards/handwired/hnah108/keyboard.json | 34 ++++- keyboards/handwired/hnah40rgb/hnah40rgb.c | 47 ------ keyboards/handwired/hnah40rgb/keyboard.json | 52 +++++++ .../handwired/hnah40rgb/keymaps/ansi/config.h | 18 --- keyboards/handwired/orbweaver/keyboard.json | 25 +++- keyboards/handwired/orbweaver/orbweaver.c | 53 ++----- .../tractyl_manuform/4x6_right/4x6_right.c | 33 ----- .../tractyl_manuform/4x6_right/keyboard.json | 56 ++++++++ keyboards/hfdkb/ac001/ac001.c | 36 ----- keyboards/hfdkb/ac001/keyboard.json | 7 + .../chinese_pcb/devil68_pro/devil68_pro.c | 49 ------- .../chinese_pcb/devil68_pro/keyboard.json | 88 ++++++++++++ keyboards/hotdox76v2/hotdox76v2.c | 50 ------- keyboards/hotdox76v2/keyboard.json | 88 ++++++++++++ 23 files changed, 714 insertions(+), 463 deletions(-) delete mode 100644 keyboards/handwired/colorlice/colorlice.c delete mode 100644 keyboards/handwired/hnah108/hnah108.c delete mode 100644 keyboards/handwired/hnah40rgb/hnah40rgb.c delete mode 100644 keyboards/handwired/hnah40rgb/keymaps/ansi/config.h delete mode 100644 keyboards/hfdkb/ac001/ac001.c delete mode 100644 keyboards/horrortroll/chinese_pcb/devil68_pro/devil68_pro.c diff --git a/keyboards/hadron/ver3/keyboard.json b/keyboards/hadron/ver3/keyboard.json index f3e4bba06f..525b15df80 100644 --- a/keyboards/hadron/ver3/keyboard.json +++ b/keyboards/hadron/ver3/keyboard.json @@ -3,7 +3,19 @@ "device_version": "0.0.3" }, "rgb_matrix": { - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [1, 13], "x": 195, "y": 3, "flags": 4}, + {"matrix": [4, 13], "x": 195, "y": 16, "flags": 4}, + {"matrix": [4, 10], "x": 150, "y": 16, "flags": 4}, + {"matrix": [4, 7], "x": 105, "y": 16, "flags": 4}, + {"matrix": [4, 4], "x": 60, "y": 16, "flags": 4}, + {"matrix": [4, 1], "x": 15, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 15, "y": 3, "flags": 4}, + {"matrix": [1, 4], "x": 60, "y": 3, "flags": 4}, + {"matrix": [1, 7], "x": 105, "y": 3, "flags": 4}, + {"matrix": [1, 10], "x": 150, "y": 3, "flags": 4} + ] }, "matrix_pins": { "cols": ["B8", "B2", "B10", "A0", "A1", "A2", "B0", "A3", "B1", "A6", "A7", "B12", "C13", "B11", "B9"], diff --git a/keyboards/hadron/ver3/ver3.c b/keyboards/hadron/ver3/ver3.c index d337fd9681..212aa15725 100644 --- a/keyboards/hadron/ver3/ver3.c +++ b/keyboards/hadron/ver3/ver3.c @@ -15,24 +15,6 @@ */ #include "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -#include "rgb_matrix.h" - -led_config_t g_led_config = { { - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, 6, NO_LED, NO_LED, 7, NO_LED, NO_LED, 8, NO_LED, NO_LED, 9, NO_LED, NO_LED, 0, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, 5, NO_LED, NO_LED, 4, NO_LED, NO_LED, 3, NO_LED, NO_LED, 2, NO_LED, NO_LED, 1, NO_LED } -}, { - { 195, 3 }, { 195, 16 }, { 150, 16 }, { 105, 16 }, { 60, 16 }, { 15, 16 }, { 15, 3 }, { 60, 3 }, { 105, 3 }, { 150, 3 } -}, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 -} }; - -#endif - #ifdef OLED_ENABLE oled_rotation_t oled_init_kb(oled_rotation_t rotation) { return OLED_ROTATION_180; } diff --git a/keyboards/handwired/colorlice/colorlice.c b/keyboards/handwired/colorlice/colorlice.c deleted file mode 100644 index 81e87d8c7a..0000000000 --- a/keyboards/handwired/colorlice/colorlice.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2019 marhalloweenvt - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, - { 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, NO_LED }, - { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, NO_LED, 44, NO_LED }, - { 58, 57, 56, 55, 54, 53, NO_LED, 52, 51, 50, 49, 48, 47, 46, 45, NO_LED}, - { 59, NO_LED, 60, 61, 62, NO_LED, NO_LED,63, NO_LED, NO_LED, 64, 65,66,67, 68, NO_LED } -}, { - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 195, 0 }, { 210, 0 }, { 224, 0 }, - { 224, 16 }, { 210, 16 }, { 195, 16 }, { 180, 16 }, { 165, 16 }, { 150, 16 }, { 135, 16 }, { 120, 16 }, { 90, 16 }, { 75, 16 }, { 60, 16 }, { 45, 16 }, { 30, 16 }, { 15, 16 }, { 0, 16 }, - { 0, 32 }, { 15, 32 }, { 30, 32 }, { 45, 32 }, { 60, 32 }, { 75, 32 }, { 90, 32 }, { 135, 32 }, { 150, 32 }, { 165, 32 }, { 180, 32 }, { 195, 32 }, { 210, 32 }, { 224, 32 }, - { 225, 48 }, { 224, 48 }, { 210, 48 }, { 195, 48 }, { 180, 48 }, { 165, 48 }, { 150, 48 }, { 135, 48 }, { 90, 48 }, { 75, 48 }, { 60, 48 }, { 45, 48 }, { 30, 48 }, { 15, 48 }, - { 15, 64 }, { 45, 64 }, { 75, 64 }, { 90, 64 }, { 150, 64 }, { 180, 64 }, { 210, 64 }, { 215, 64 }, { 220, 64 }, { 225, 64 } -}, { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 -} }; -#endif diff --git a/keyboards/handwired/colorlice/keyboard.json b/keyboards/handwired/colorlice/keyboard.json index b2606afb89..5780f012d5 100644 --- a/keyboards/handwired/colorlice/keyboard.json +++ b/keyboards/handwired/colorlice/keyboard.json @@ -57,6 +57,77 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 195, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 210, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [1, 13], "x": 210, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 195, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 180, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 165, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 150, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 135, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 90, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 75, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 60, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 45, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 30, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 15, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 15, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 30, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 45, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 75, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 90, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 135, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 150, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 165, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 180, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 195, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 210, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 195, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 180, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 165, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 150, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 135, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 90, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 75, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 60, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 45, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 30, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 15, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 15, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 45, "y": 64, "flags": 1}, + {"matrix": [4, 3], "x": 75, "y": 64, "flags": 1}, + {"matrix": [4, 4], "x": 90, "y": 64, "flags": 1}, + {"matrix": [4, 7], "x": 150, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 180, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 215, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 220, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "led_flush_limit": 26, "led_process_limit": 4, "sleep": true diff --git a/keyboards/handwired/dygma/raise/ansi/ansi.c b/keyboards/handwired/dygma/raise/ansi/ansi.c index 67b84c3bc8..de2b9dedf6 100644 --- a/keyboards/handwired/dygma/raise/ansi/ansi.c +++ b/keyboards/handwired/dygma/raise/ansi/ansi.c @@ -38,44 +38,3 @@ const uint8_t led_map[RGB_MATRIX_LED_COUNT] = { 34 + LPH, 35 + LPH, 36 + LPH, 37 + LPH, 38 + LPH, 39 + LPH, 40 + LPH, 41 + LPH, 42 + LPH, 43 + LPH, 44 + LPH, 45 + LPH, 46 + LPH, 47 + LPH, 48 + LPH, 49 + LPH, 50 + LPH, 51 + LPH, 52 + LPH, 53 + LPH, 54 + LPH, 55 + LPH, 56 + LPH, 57 + LPH, 58 + LPH, 59 + LPH, 60 + LPH, 61 + LPH, 62 + LPH, 63 + LPH, 64 + LPH, 65 + LPH, 0xff }; - -// taken from "key_led_map" and reformatted -// ISO & ANSI (ANSI has no LED at 20, but this key can never be pressed so we can have just one map). -led_config_t g_led_config = { { - // left hand - { 0 , 1 , 2 , 3 , 4 , 5 , 6 , NO_LED } , - { 7 , 8 , 9 , 10 , 11 , 12 , NO_LED , NO_LED } , - { 13 , 14 , 15 , 16 , 17 , 18 , NO_LED , NO_LED } , - { 19 , 20 , 21 , 22 , 23 , 24 , 25 , NO_LED } , - { 26 , 27 , 28 , 29 , 30 , NO_LED , 31 , 32 } , - - // right hand - { 33 , 34 , 35 , 36 , 37 , 38 , 39 , NO_LED } , - { 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 } , - { 48 , 49 , 50 , 51 , 52 , 53 , 54 , NO_LED } , - { 55 , 56 , 57 , 58 , 59 , 60 , NO_LED , NO_LED } , - { 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 } - }, { - // generated from the svg image of the keyboard, see create-led-config.js - {82, 3}, {88, 3}, {94, 3}, {100, 3}, {106, 3}, {112, 3}, {118, 3}, {84, 10}, {91, 10}, {97, 10}, {103, 10}, {109, 10}, - {115, 10}, {84, 16}, {92, 16}, {98, 16}, {104, 16}, {110, 16}, {116, 16}, {85, 22}, - {0, 0}, - {94, 22}, {100, 22}, {106, 22}, {112, 22}, {118, 22}, {83, 28}, {90, 28}, {98, 28}, {106, 28}, {116, 28}, {111, 34}, - {118, 34}, {168, 3}, {159, 3}, {153, 3}, {147, 3}, {141, 3}, {135, 3}, {129, 3}, {168, 16}, {162, 10}, {156, 10}, - {150, 10}, {144, 10}, {139, 10}, {133, 10}, {127, 10}, {170, 10}, {159, 16}, {153, 16}, {147, 16}, {141, 16}, {135, 16}, - {129, 16}, {166, 22}, {154, 22}, {148, 22}, {142, 22}, {136, 22}, {130, 22}, {170, 28}, {163, 28}, {156, 28}, {149, 28}, - {140, 28}, {131, 28}, {136, 34}, {128, 34}, {78, 13}, {78, 6}, {80, 0}, {87, 0}, {95, 0}, {103, 0}, {111, 0}, {119, 0}, - {122, 3}, {121, 9}, {120, 15}, {122, 21}, {123, 27}, {123, 33}, {120, 38}, {116, 42}, {114, 48}, {112, 55}, {109, 61}, - {103, 64}, {96, 64}, {88, 64}, {81, 63}, {76, 60}, {75, 52}, {75, 46}, {74, 38}, {74, 32}, {75, 27}, {77, 21}, {175, 10}, - {175, 4}, {172, 0}, {164, 0}, {157, 0}, {149, 0}, {142, 0}, {134, 0}, {127, 0}, {123, 3}, {122, 8}, {122, 15}, {124, 21}, - {124, 27}, {124, 33}, {126, 38}, {131, 42}, {134, 48}, {135, 55}, {137, 61}, {143, 63}, {150, 63}, {158, 63}, {166, 63}, - {173, 63}, {177, 59}, {178, 49}, {179, 40}, {179, 31}, {177, 25}, {175, 20}, {175, 15}, {123, 54} - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4 - } -}; diff --git a/keyboards/handwired/dygma/raise/ansi/keyboard.json b/keyboards/handwired/dygma/raise/ansi/keyboard.json index 9abe98fdfa..703ae91244 100644 --- a/keyboards/handwired/dygma/raise/ansi/keyboard.json +++ b/keyboards/handwired/dygma/raise/ansi/keyboard.json @@ -6,6 +6,142 @@ "rgb_matrix": true, "raw": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 82, "y": 3, "flags": 4}, + {"matrix": [0, 1], "x": 88, "y": 3, "flags": 4}, + {"matrix": [0, 2], "x": 94, "y": 3, "flags": 4}, + {"matrix": [0, 3], "x": 100, "y": 3, "flags": 4}, + {"matrix": [0, 4], "x": 106, "y": 3, "flags": 4}, + {"matrix": [0, 5], "x": 112, "y": 3, "flags": 4}, + {"matrix": [0, 6], "x": 118, "y": 3, "flags": 4}, + {"matrix": [1, 0], "x": 84, "y": 10, "flags": 4}, + {"matrix": [1, 1], "x": 91, "y": 10, "flags": 4}, + {"matrix": [1, 2], "x": 97, "y": 10, "flags": 4}, + {"matrix": [1, 3], "x": 103, "y": 10, "flags": 4}, + {"matrix": [1, 4], "x": 109, "y": 10, "flags": 4}, + {"matrix": [1, 5], "x": 115, "y": 10, "flags": 4}, + {"matrix": [2, 0], "x": 84, "y": 16, "flags": 4}, + {"matrix": [2, 1], "x": 92, "y": 16, "flags": 4}, + {"matrix": [2, 2], "x": 98, "y": 16, "flags": 4}, + {"matrix": [2, 3], "x": 104, "y": 16, "flags": 4}, + {"matrix": [2, 4], "x": 110, "y": 16, "flags": 4}, + {"matrix": [2, 5], "x": 116, "y": 16, "flags": 4}, + {"matrix": [3, 0], "x": 85, "y": 22, "flags": 4}, + {"matrix": [3, 1], "x": 0, "y": 0, "flags": 0}, + {"matrix": [3, 2], "x": 94, "y": 22, "flags": 4}, + {"matrix": [3, 3], "x": 100, "y": 22, "flags": 4}, + {"matrix": [3, 4], "x": 106, "y": 22, "flags": 4}, + {"matrix": [3, 5], "x": 112, "y": 22, "flags": 4}, + {"matrix": [3, 6], "x": 118, "y": 22, "flags": 4}, + {"matrix": [4, 0], "x": 83, "y": 28, "flags": 4}, + {"matrix": [4, 1], "x": 90, "y": 28, "flags": 4}, + {"matrix": [4, 2], "x": 98, "y": 28, "flags": 4}, + {"matrix": [4, 3], "x": 106, "y": 28, "flags": 4}, + {"matrix": [4, 4], "x": 116, "y": 28, "flags": 4}, + {"matrix": [4, 6], "x": 111, "y": 34, "flags": 4}, + {"matrix": [4, 7], "x": 118, "y": 34, "flags": 4}, + {"matrix": [5, 0], "x": 168, "y": 3, "flags": 4}, + {"matrix": [5, 1], "x": 159, "y": 3, "flags": 4}, + {"matrix": [5, 2], "x": 153, "y": 3, "flags": 4}, + {"matrix": [5, 3], "x": 147, "y": 3, "flags": 4}, + {"matrix": [5, 4], "x": 141, "y": 3, "flags": 4}, + {"matrix": [5, 5], "x": 135, "y": 3, "flags": 4}, + {"matrix": [5, 6], "x": 129, "y": 3, "flags": 4}, + {"matrix": [6, 0], "x": 168, "y": 16, "flags": 4}, + {"matrix": [6, 1], "x": 162, "y": 10, "flags": 4}, + {"matrix": [6, 2], "x": 156, "y": 10, "flags": 4}, + {"matrix": [6, 3], "x": 150, "y": 10, "flags": 4}, + {"matrix": [6, 4], "x": 144, "y": 10, "flags": 4}, + {"matrix": [6, 5], "x": 139, "y": 10, "flags": 4}, + {"matrix": [6, 6], "x": 133, "y": 10, "flags": 4}, + {"matrix": [6, 7], "x": 127, "y": 10, "flags": 4}, + {"matrix": [7, 0], "x": 170, "y": 10, "flags": 4}, + {"matrix": [7, 1], "x": 159, "y": 16, "flags": 4}, + {"matrix": [7, 2], "x": 153, "y": 16, "flags": 4}, + {"matrix": [7, 3], "x": 147, "y": 16, "flags": 4}, + {"matrix": [7, 4], "x": 141, "y": 16, "flags": 4}, + {"matrix": [7, 5], "x": 135, "y": 16, "flags": 4}, + {"matrix": [7, 6], "x": 129, "y": 16, "flags": 4}, + {"matrix": [8, 0], "x": 166, "y": 22, "flags": 4}, + {"matrix": [8, 1], "x": 154, "y": 22, "flags": 4}, + {"matrix": [8, 2], "x": 148, "y": 22, "flags": 4}, + {"matrix": [8, 3], "x": 142, "y": 22, "flags": 4}, + {"matrix": [8, 4], "x": 136, "y": 22, "flags": 4}, + {"matrix": [8, 5], "x": 130, "y": 22, "flags": 4}, + {"matrix": [9, 0], "x": 170, "y": 28, "flags": 4}, + {"matrix": [9, 1], "x": 163, "y": 28, "flags": 4}, + {"matrix": [9, 2], "x": 156, "y": 28, "flags": 4}, + {"matrix": [9, 3], "x": 149, "y": 28, "flags": 4}, + {"matrix": [9, 4], "x": 140, "y": 28, "flags": 4}, + {"matrix": [9, 5], "x": 131, "y": 28, "flags": 4}, + {"matrix": [9, 6], "x": 136, "y": 34, "flags": 4}, + {"matrix": [9, 7], "x": 128, "y": 34, "flags": 4}, + {"x": 78, "y": 13, "flags": 2}, + {"x": 78, "y": 6, "flags": 2}, + {"x": 80, "y": 0, "flags": 2}, + {"x": 87, "y": 0, "flags": 2}, + {"x": 95, "y": 0, "flags": 2}, + {"x": 103, "y": 0, "flags": 2}, + {"x": 111, "y": 0, "flags": 2}, + {"x": 119, "y": 0, "flags": 2}, + {"x": 122, "y": 3, "flags": 2}, + {"x": 121, "y": 9, "flags": 2}, + {"x": 120, "y": 15, "flags": 2}, + {"x": 122, "y": 21, "flags": 2}, + {"x": 123, "y": 27, "flags": 2}, + {"x": 123, "y": 33, "flags": 2}, + {"x": 120, "y": 38, "flags": 2}, + {"x": 116, "y": 42, "flags": 2}, + {"x": 114, "y": 48, "flags": 2}, + {"x": 112, "y": 55, "flags": 2}, + {"x": 109, "y": 61, "flags": 2}, + {"x": 103, "y": 64, "flags": 2}, + {"x": 96, "y": 64, "flags": 2}, + {"x": 88, "y": 64, "flags": 2}, + {"x": 81, "y": 63, "flags": 2}, + {"x": 76, "y": 60, "flags": 2}, + {"x": 75, "y": 52, "flags": 2}, + {"x": 75, "y": 46, "flags": 2}, + {"x": 74, "y": 38, "flags": 2}, + {"x": 74, "y": 32, "flags": 2}, + {"x": 75, "y": 27, "flags": 2}, + {"x": 77, "y": 21, "flags": 2}, + {"x": 175, "y": 10, "flags": 2}, + {"x": 175, "y": 4, "flags": 2}, + {"x": 172, "y": 0, "flags": 2}, + {"x": 164, "y": 0, "flags": 2}, + {"x": 157, "y": 0, "flags": 2}, + {"x": 149, "y": 0, "flags": 2}, + {"x": 142, "y": 0, "flags": 2}, + {"x": 134, "y": 0, "flags": 2}, + {"x": 127, "y": 0, "flags": 2}, + {"x": 123, "y": 3, "flags": 2}, + {"x": 122, "y": 8, "flags": 2}, + {"x": 122, "y": 15, "flags": 2}, + {"x": 124, "y": 21, "flags": 2}, + {"x": 124, "y": 27, "flags": 2}, + {"x": 124, "y": 33, "flags": 2}, + {"x": 126, "y": 38, "flags": 2}, + {"x": 131, "y": 42, "flags": 2}, + {"x": 134, "y": 48, "flags": 2}, + {"x": 135, "y": 55, "flags": 2}, + {"x": 137, "y": 61, "flags": 2}, + {"x": 143, "y": 63, "flags": 2}, + {"x": 150, "y": 63, "flags": 2}, + {"x": 158, "y": 63, "flags": 2}, + {"x": 166, "y": 63, "flags": 2}, + {"x": 173, "y": 63, "flags": 2}, + {"x": 177, "y": 59, "flags": 2}, + {"x": 178, "y": 49, "flags": 2}, + {"x": 179, "y": 40, "flags": 2}, + {"x": 179, "y": 31, "flags": 2}, + {"x": 177, "y": 25, "flags": 2}, + {"x": 175, "y": 20, "flags": 2}, + {"x": 175, "y": 15, "flags": 2}, + {"x": 123, "y": 54, "flags": 4} + ] + }, "layouts": { "LAYOUT_all": { "layout": [ diff --git a/keyboards/handwired/dygma/raise/iso/iso.c b/keyboards/handwired/dygma/raise/iso/iso.c index 9643af7b8c..247a9646df 100644 --- a/keyboards/handwired/dygma/raise/iso/iso.c +++ b/keyboards/handwired/dygma/raise/iso/iso.c @@ -38,42 +38,3 @@ const uint8_t led_map[RGB_MATRIX_LED_COUNT] = { 34 + LPH, 35 + LPH, 36 + LPH, 37 + LPH, 38 + LPH, 39 + LPH, 40 + LPH, 41 + LPH, 42 + LPH, 43 + LPH, 44 + LPH, 45 + LPH, 46 + LPH, 47 + LPH, 48 + LPH, 49 + LPH, 50 + LPH, 51 + LPH, 52 + LPH, 53 + LPH, 54 + LPH, 55 + LPH, 56 + LPH, 57 + LPH, 58 + LPH, 59 + LPH, 60 + LPH, 61 + LPH, 62 + LPH, 63 + LPH, 64 + LPH, 65 + LPH, 0xff }; - -// taken from "key_led_map" and reformatted -// ISO & ANSI (ANSI has no LED at 20, but this key can never be pressed so we can have just one map). -led_config_t g_led_config = { { - // left hand - { 0 , 1 , 2 , 3 , 4 , 5 , 6 , NO_LED } , - { 7 , 8 , 9 , 10 , 11 , 12 , NO_LED , NO_LED } , - { 13 , 14 , 15 , 16 , 17 , 18 , NO_LED , NO_LED } , - { 19 , 20 , 21 , 22 , 23 , 24 , 25 , NO_LED } , - { 26 , 27 , 28 , 29 , 30 , NO_LED , 31 , 32 } , - - // right hand - { 33 , 34 , 35 , 36 , 37 , 38 , 39 , NO_LED } , - { 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 } , - { 48 , 49 , 50 , 51 , 52 , 53 , 54 , NO_LED } , - { 55 , 56 , 57 , 58 , 59 , 60 , NO_LED , NO_LED } , - { 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 } - }, { - // generated from the svg image of the keyboard, see create-led-config.js - {82, 3}, {88, 3}, {94, 3}, {100, 3}, {106, 3}, {112, 3}, {118, 3}, {84, 10}, {91, 10}, {97, 10}, {103, 10}, {109, 10}, - {115, 10}, {84, 16}, {92, 16}, {98, 16}, {104, 16}, {110, 16}, {116, 16}, {82, 22}, {88, 22}, {94, 22}, {100, 22}, - {106, 22}, {112, 22}, {118, 22}, {83, 28}, {90, 28}, {98, 28}, {106, 28}, {116, 28}, {111, 34}, {118, 34}, {168, 3}, - {159, 3}, {153, 3}, {147, 3}, {141, 3}, {135, 3}, {129, 3}, {170, 13}, {162, 10}, {156, 10}, {150, 10}, {144, 10}, - {139, 10}, {133, 10}, {127, 10}, {164, 16}, {158, 16}, {152, 16}, {146, 16}, {140, 16}, {134, 16}, {128, 16}, {166, 22}, - {154, 22}, {148, 22}, {142, 22}, {136, 22}, {130, 22}, {170, 28}, {163, 28}, {156, 28}, {149, 28}, {140, 28}, {131, 28}, - {136, 34}, {128, 34}, {78, 13}, {78, 6}, {80, 0}, {87, 0}, {95, 0}, {103, 0}, {111, 0}, {119, 0}, {122, 3}, {121, 9}, - {120, 15}, {122, 21}, {123, 27}, {123, 33}, {120, 38}, {116, 42}, {114, 48}, {112, 55}, {109, 61}, {103, 64}, {96, 64}, - {88, 64}, {81, 63}, {76, 60}, {75, 52}, {75, 46}, {74, 38}, {74, 32}, {75, 27}, {77, 21}, {175, 10}, {175, 4}, {172, 0}, - {164, 0}, {157, 0}, {149, 0}, {142, 0}, {134, 0}, {127, 0}, {123, 3}, {122, 8}, {122, 15}, {124, 21}, {124, 27}, {124, 33}, - {126, 38}, {131, 42}, {134, 48}, {135, 55}, {137, 61}, {143, 63}, {150, 63}, {158, 63}, {166, 63}, {173, 63}, {177, 59}, - {178, 49}, {179, 40}, {179, 31}, {177, 25}, {175, 20}, {175, 15}, {123, 54} - - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4 - } -}; diff --git a/keyboards/handwired/dygma/raise/iso/keyboard.json b/keyboards/handwired/dygma/raise/iso/keyboard.json index 9abe98fdfa..057851bd8c 100644 --- a/keyboards/handwired/dygma/raise/iso/keyboard.json +++ b/keyboards/handwired/dygma/raise/iso/keyboard.json @@ -6,6 +6,142 @@ "rgb_matrix": true, "raw": true }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 82, "y": 3, "flags": 4}, + {"matrix": [0, 1], "x": 88, "y": 3, "flags": 4}, + {"matrix": [0, 2], "x": 94, "y": 3, "flags": 4}, + {"matrix": [0, 3], "x": 100, "y": 3, "flags": 4}, + {"matrix": [0, 4], "x": 106, "y": 3, "flags": 4}, + {"matrix": [0, 5], "x": 112, "y": 3, "flags": 4}, + {"matrix": [0, 6], "x": 118, "y": 3, "flags": 4}, + {"matrix": [1, 0], "x": 84, "y": 10, "flags": 4}, + {"matrix": [1, 1], "x": 91, "y": 10, "flags": 4}, + {"matrix": [1, 2], "x": 97, "y": 10, "flags": 4}, + {"matrix": [1, 3], "x": 103, "y": 10, "flags": 4}, + {"matrix": [1, 4], "x": 109, "y": 10, "flags": 4}, + {"matrix": [1, 5], "x": 115, "y": 10, "flags": 4}, + {"matrix": [2, 0], "x": 84, "y": 16, "flags": 4}, + {"matrix": [2, 1], "x": 92, "y": 16, "flags": 4}, + {"matrix": [2, 2], "x": 98, "y": 16, "flags": 4}, + {"matrix": [2, 3], "x": 104, "y": 16, "flags": 4}, + {"matrix": [2, 4], "x": 110, "y": 16, "flags": 4}, + {"matrix": [2, 5], "x": 116, "y": 16, "flags": 4}, + {"matrix": [3, 0], "x": 82, "y": 22, "flags": 4}, + {"matrix": [3, 1], "x": 88, "y": 22, "flags": 4}, + {"matrix": [3, 2], "x": 94, "y": 22, "flags": 4}, + {"matrix": [3, 3], "x": 100, "y": 22, "flags": 4}, + {"matrix": [3, 4], "x": 106, "y": 22, "flags": 4}, + {"matrix": [3, 5], "x": 112, "y": 22, "flags": 4}, + {"matrix": [3, 6], "x": 118, "y": 22, "flags": 4}, + {"matrix": [4, 0], "x": 83, "y": 28, "flags": 4}, + {"matrix": [4, 1], "x": 90, "y": 28, "flags": 4}, + {"matrix": [4, 2], "x": 98, "y": 28, "flags": 4}, + {"matrix": [4, 3], "x": 106, "y": 28, "flags": 4}, + {"matrix": [4, 4], "x": 116, "y": 28, "flags": 4}, + {"matrix": [4, 6], "x": 111, "y": 34, "flags": 4}, + {"matrix": [4, 7], "x": 118, "y": 34, "flags": 4}, + {"matrix": [5, 0], "x": 168, "y": 3, "flags": 4}, + {"matrix": [5, 1], "x": 159, "y": 3, "flags": 4}, + {"matrix": [5, 2], "x": 153, "y": 3, "flags": 4}, + {"matrix": [5, 3], "x": 147, "y": 3, "flags": 4}, + {"matrix": [5, 4], "x": 141, "y": 3, "flags": 4}, + {"matrix": [5, 5], "x": 135, "y": 3, "flags": 4}, + {"matrix": [5, 6], "x": 129, "y": 3, "flags": 4}, + {"matrix": [6, 0], "x": 170, "y": 13, "flags": 4}, + {"matrix": [6, 1], "x": 162, "y": 10, "flags": 4}, + {"matrix": [6, 2], "x": 156, "y": 10, "flags": 4}, + {"matrix": [6, 3], "x": 150, "y": 10, "flags": 4}, + {"matrix": [6, 4], "x": 144, "y": 10, "flags": 4}, + {"matrix": [6, 5], "x": 139, "y": 10, "flags": 4}, + {"matrix": [6, 6], "x": 133, "y": 10, "flags": 4}, + {"matrix": [6, 7], "x": 127, "y": 10, "flags": 4}, + {"matrix": [7, 0], "x": 164, "y": 16, "flags": 4}, + {"matrix": [7, 1], "x": 158, "y": 16, "flags": 4}, + {"matrix": [7, 2], "x": 152, "y": 16, "flags": 4}, + {"matrix": [7, 3], "x": 146, "y": 16, "flags": 4}, + {"matrix": [7, 4], "x": 140, "y": 16, "flags": 4}, + {"matrix": [7, 5], "x": 134, "y": 16, "flags": 4}, + {"matrix": [7, 6], "x": 128, "y": 16, "flags": 4}, + {"matrix": [8, 0], "x": 166, "y": 22, "flags": 4}, + {"matrix": [8, 1], "x": 154, "y": 22, "flags": 4}, + {"matrix": [8, 2], "x": 148, "y": 22, "flags": 4}, + {"matrix": [8, 3], "x": 142, "y": 22, "flags": 4}, + {"matrix": [8, 4], "x": 136, "y": 22, "flags": 4}, + {"matrix": [8, 5], "x": 130, "y": 22, "flags": 4}, + {"matrix": [9, 0], "x": 170, "y": 28, "flags": 4}, + {"matrix": [9, 1], "x": 163, "y": 28, "flags": 4}, + {"matrix": [9, 2], "x": 156, "y": 28, "flags": 4}, + {"matrix": [9, 3], "x": 149, "y": 28, "flags": 4}, + {"matrix": [9, 4], "x": 140, "y": 28, "flags": 4}, + {"matrix": [9, 5], "x": 131, "y": 28, "flags": 4}, + {"matrix": [9, 6], "x": 136, "y": 34, "flags": 4}, + {"matrix": [9, 7], "x": 128, "y": 34, "flags": 4}, + {"x": 78, "y": 13, "flags": 2}, + {"x": 78, "y": 6, "flags": 2}, + {"x": 80, "y": 0, "flags": 2}, + {"x": 87, "y": 0, "flags": 2}, + {"x": 95, "y": 0, "flags": 2}, + {"x": 103, "y": 0, "flags": 2}, + {"x": 111, "y": 0, "flags": 2}, + {"x": 119, "y": 0, "flags": 2}, + {"x": 122, "y": 3, "flags": 2}, + {"x": 121, "y": 9, "flags": 2}, + {"x": 120, "y": 15, "flags": 2}, + {"x": 122, "y": 21, "flags": 2}, + {"x": 123, "y": 27, "flags": 2}, + {"x": 123, "y": 33, "flags": 2}, + {"x": 120, "y": 38, "flags": 2}, + {"x": 116, "y": 42, "flags": 2}, + {"x": 114, "y": 48, "flags": 2}, + {"x": 112, "y": 55, "flags": 2}, + {"x": 109, "y": 61, "flags": 2}, + {"x": 103, "y": 64, "flags": 2}, + {"x": 96, "y": 64, "flags": 2}, + {"x": 88, "y": 64, "flags": 2}, + {"x": 81, "y": 63, "flags": 2}, + {"x": 76, "y": 60, "flags": 2}, + {"x": 75, "y": 52, "flags": 2}, + {"x": 75, "y": 46, "flags": 2}, + {"x": 74, "y": 38, "flags": 2}, + {"x": 74, "y": 32, "flags": 2}, + {"x": 75, "y": 27, "flags": 2}, + {"x": 77, "y": 21, "flags": 2}, + {"x": 175, "y": 10, "flags": 2}, + {"x": 175, "y": 4, "flags": 2}, + {"x": 172, "y": 0, "flags": 2}, + {"x": 164, "y": 0, "flags": 2}, + {"x": 157, "y": 0, "flags": 2}, + {"x": 149, "y": 0, "flags": 2}, + {"x": 142, "y": 0, "flags": 2}, + {"x": 134, "y": 0, "flags": 2}, + {"x": 127, "y": 0, "flags": 2}, + {"x": 123, "y": 3, "flags": 2}, + {"x": 122, "y": 8, "flags": 2}, + {"x": 122, "y": 15, "flags": 2}, + {"x": 124, "y": 21, "flags": 2}, + {"x": 124, "y": 27, "flags": 2}, + {"x": 124, "y": 33, "flags": 2}, + {"x": 126, "y": 38, "flags": 2}, + {"x": 131, "y": 42, "flags": 2}, + {"x": 134, "y": 48, "flags": 2}, + {"x": 135, "y": 55, "flags": 2}, + {"x": 137, "y": 61, "flags": 2}, + {"x": 143, "y": 63, "flags": 2}, + {"x": 150, "y": 63, "flags": 2}, + {"x": 158, "y": 63, "flags": 2}, + {"x": 166, "y": 63, "flags": 2}, + {"x": 173, "y": 63, "flags": 2}, + {"x": 177, "y": 59, "flags": 2}, + {"x": 178, "y": 49, "flags": 2}, + {"x": 179, "y": 40, "flags": 2}, + {"x": 179, "y": 31, "flags": 2}, + {"x": 177, "y": 25, "flags": 2}, + {"x": 175, "y": 20, "flags": 2}, + {"x": 175, "y": 15, "flags": 2}, + {"x": 123, "y": 54, "flags": 4} + ] + }, "layouts": { "LAYOUT_all": { "layout": [ diff --git a/keyboards/handwired/hnah108/hnah108.c b/keyboards/handwired/hnah108/hnah108.c deleted file mode 100644 index fde7b16564..0000000000 --- a/keyboards/handwired/hnah108/hnah108.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright 2019 HnahKB - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 18, 17, 16, NO_LED, 15, 14, NO_LED, NO_LED, 13, 12, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { 19, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { 20, NO_LED, NO_LED, NO_LED, NO_LED, 24, NO_LED, NO_LED, 26, NO_LED, NO_LED }, - { 21, 22, 23, 25, 27, NO_LED, 28, 29, NO_LED, 0, 1 }, - { 11, 10, NO_LED, 9, NO_LED, 8, NO_LED, 7, 6, NO_LED, 5 }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 4 }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 3 }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 2 } - }, { - // LED Index to Physical Position - { 0, 0 }, { 18, 0 }, { 37, 0 }, { 56, 0 }, { 74, 0 }, { 93, 0 }, { 112, 0 }, { 130, 0 }, { 149, 0 }, { 168, 0 }, { 186, 0 }, { 205, 0 }, { 224, 0 }, - { 0, 25 }, { 224, 25 }, - { 0, 51 }, { 224, 51 }, - { 0, 63 }, { 18, 63 }, { 37, 63 }, { 56, 63 }, { 74, 63 }, { 93, 63 }, { 112, 63 }, { 130, 63 }, { 149, 63 }, { 168, 63 }, { 186, 63 }, { 205, 63 }, { 224, 63 } - }, { - // LED Index to Flag - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, - 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - } -}; -#endif diff --git a/keyboards/handwired/hnah108/keyboard.json b/keyboards/handwired/hnah108/keyboard.json index a02a70173c..808fd9eb24 100644 --- a/keyboards/handwired/hnah108/keyboard.json +++ b/keyboards/handwired/hnah108/keyboard.json @@ -51,7 +51,39 @@ "solid_splash": true, "solid_multisplash": true }, - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [5, 9], "x": 0, "y": 0, "flags": 1}, + {"matrix": [5, 10], "x": 18, "y": 0, "flags": 1}, + {"matrix": [9, 10], "x": 37, "y": 0, "flags": 1}, + {"matrix": [8, 10], "x": 56, "y": 0, "flags": 1}, + {"matrix": [7, 10], "x": 74, "y": 0, "flags": 1}, + {"matrix": [6, 10], "x": 93, "y": 0, "flags": 1}, + {"matrix": [6, 8], "x": 112, "y": 0, "flags": 1}, + {"matrix": [6, 7], "x": 130, "y": 0, "flags": 1}, + {"matrix": [6, 5], "x": 149, "y": 0, "flags": 1}, + {"matrix": [6, 3], "x": 168, "y": 0, "flags": 1}, + {"matrix": [6, 1], "x": 186, "y": 0, "flags": 1}, + {"matrix": [6, 0], "x": 205, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 224, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 0, "y": 25, "flags": 1}, + {"matrix": [0, 5], "x": 224, "y": 25, "flags": 1}, + {"matrix": [0, 4], "x": 0, "y": 51, "flags": 1}, + {"matrix": [0, 2], "x": 224, "y": 51, "flags": 1}, + {"matrix": [0, 1], "x": 0, "y": 63, "flags": 1}, + {"matrix": [0, 0], "x": 18, "y": 63, "flags": 1}, + {"matrix": [2, 0], "x": 37, "y": 63, "flags": 1}, + {"matrix": [4, 0], "x": 56, "y": 63, "flags": 1}, + {"matrix": [5, 0], "x": 74, "y": 63, "flags": 1}, + {"matrix": [5, 1], "x": 93, "y": 63, "flags": 1}, + {"matrix": [5, 2], "x": 112, "y": 63, "flags": 1}, + {"matrix": [4, 5], "x": 130, "y": 63, "flags": 1}, + {"matrix": [5, 3], "x": 149, "y": 63, "flags": 1}, + {"matrix": [4, 8], "x": 168, "y": 63, "flags": 1}, + {"matrix": [5, 4], "x": 186, "y": 63, "flags": 1}, + {"matrix": [5, 6], "x": 205, "y": 63, "flags": 1}, + {"matrix": [5, 7], "x": 224, "y": 63, "flags": 1} + ] }, "features": { "backlight": true, diff --git a/keyboards/handwired/hnah40rgb/hnah40rgb.c b/keyboards/handwired/hnah40rgb/hnah40rgb.c deleted file mode 100644 index 1f877975e5..0000000000 --- a/keyboards/handwired/hnah40rgb/hnah40rgb.c +++ /dev/null @@ -1,47 +0,0 @@ -#include "quantum.h" -#ifdef RGB_MATRIX_ENABLE -#if defined (ansi) -led_config_t g_led_config = { { - //Key Matrix to LED Index - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, - {22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12 }, - {23, 24, 25, 26, 27, 28, 29, 30, 31, NO_LED, 34}, - {43, 42, 41, NO_LED, NO_LED, NO_LED, 38, NO_LED, 36, 35, 11} -}, { - //LED Index to Physical Positon - { 0, 0}, { 20, 0}, { 40, 0 }, { 61, 0 }, { 81, 0}, { 101, 0}, { 122, 0}, { 142, 0}, { 162, 0}, { 183, 0}, { 224, 0}, { 224, 0}, - {224, 21}, {183, 21}, {162,21 }, {142, 21}, {122,21}, { 101,21}, { 81 ,21}, { 61 ,21}, { 40 ,21}, { 20 ,21}, { 0 ,21}, - { 0, 42}, { 20, 42}, { 40,42 }, { 61, 42}, { 81,42}, { 101,42}, { 122,42}, { 142,42}, { 162,42}, { 183,42}, { 224,42}, - {224, 64}, {224, 64}, {181,64 }, {162, 64}, {122,64}, {101,64}, { 61,64}, { 40,64}, { 20,64}, { 0,64}, - { 0,64}, { 0,0}, { 224,10}, { 224,18}, { 224,30}, { 224,47}, -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, -} }; - -#else -led_config_t g_led_config = { { - //Key Matrix to LED Index - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, - {22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12 }, - {23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34}, - {43, 42, 41, NO_LED, 40, 39, 38, 37, 36, 35, 11} -}, { - //LED Index to Physical Positon - { 0, 0}, { 20, 0}, { 40, 0 }, { 61, 0 }, { 81, 0}, { 101, 0}, { 122, 0}, { 142, 0}, { 162, 0}, { 183, 0}, { 224, 0}, { 224, 0}, - {224, 21}, {183, 21}, {162,21 }, {142, 21}, {122,21}, { 101,21}, { 81 ,21}, { 61 ,21}, { 40 ,21}, { 20 ,21}, { 0 ,21}, - { 0, 42}, { 20, 42}, { 40,42 }, { 61, 42}, { 81,42}, { 101,42}, { 122,42}, { 142,42}, { 162,42}, { 183,42}, { 224,42}, - {224, 64}, {224, 64}, {181,64 }, {162, 64}, {122,64}, {101,64}, { 61,64}, { 40,64}, { 20,64}, { 0,64}, - { 0,64}, { 0,0}, { 224,10}, { 224,18}, { 224,30}, { 224,47}, -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, -} }; -#endif -#endif \ No newline at end of file diff --git a/keyboards/handwired/hnah40rgb/keyboard.json b/keyboards/handwired/hnah40rgb/keyboard.json index 6f13b70095..ec824ea14f 100644 --- a/keyboards/handwired/hnah40rgb/keyboard.json +++ b/keyboards/handwired/hnah40rgb/keyboard.json @@ -60,6 +60,58 @@ "animation": "cycle_pinwheel" }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 20, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 40, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 61, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 81, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 101, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 122, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 142, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 162, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 183, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 224, "y": 0, "flags": 4}, + {"matrix": [3, 10], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 10], "x": 224, "y": 21, "flags": 1}, + {"matrix": [1, 9], "x": 183, "y": 21, "flags": 4}, + {"matrix": [1, 8], "x": 162, "y": 21, "flags": 4}, + {"matrix": [1, 7], "x": 142, "y": 21, "flags": 4}, + {"matrix": [1, 6], "x": 122, "y": 21, "flags": 4}, + {"matrix": [1, 5], "x": 101, "y": 21, "flags": 4}, + {"matrix": [1, 4], "x": 81, "y": 21, "flags": 4}, + {"matrix": [1, 3], "x": 61, "y": 21, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 21, "flags": 4}, + {"matrix": [1, 1], "x": 20, "y": 21, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 21, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 42, "flags": 1}, + {"matrix": [2, 1], "x": 20, "y": 42, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 42, "flags": 4}, + {"matrix": [2, 3], "x": 61, "y": 42, "flags": 4}, + {"matrix": [2, 4], "x": 81, "y": 42, "flags": 4}, + {"matrix": [2, 5], "x": 101, "y": 42, "flags": 4}, + {"matrix": [2, 6], "x": 122, "y": 42, "flags": 4}, + {"matrix": [2, 7], "x": 142, "y": 42, "flags": 4}, + {"matrix": [2, 8], "x": 162, "y": 42, "flags": 4}, + {"matrix": [2, 9], "x": 183, "y": 42, "flags": 4}, + {"x": 224, "y": 42, "flags": 1}, + {"matrix": [2, 10], "x": 224, "y": 64, "flags": 1}, + {"matrix": [3, 9], "x": 224, "y": 64, "flags": 1}, + {"matrix": [3, 8], "x": 181, "y": 64, "flags": 1}, + {"matrix": [3, 7], "x": 162, "y": 64, "flags": 1}, + {"matrix": [3, 6], "x": 122, "y": 64, "flags": 1}, + {"matrix": [3, 5], "x": 101, "y": 64, "flags": 1}, + {"matrix": [3, 4], "x": 61, "y": 64, "flags": 1}, + {"matrix": [3, 2], "x": 40, "y": 64, "flags": 1}, + {"matrix": [3, 1], "x": 20, "y": 64, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 64, "flags": 1}, + {"x": 0, "y": 64, "flags": 1}, + {"x": 0, "y": 0, "flags": 1}, + {"x": 224, "y": 10, "flags": 1}, + {"x": 224, "y": 18, "flags": 1}, + {"x": 224, "y": 30, "flags": 1}, + {"x": 224, "y": 47, "flags": 1} + ], "max_brightness": 200, "react_on_keyup": true }, diff --git a/keyboards/handwired/hnah40rgb/keymaps/ansi/config.h b/keyboards/handwired/hnah40rgb/keymaps/ansi/config.h deleted file mode 100644 index 66cd76a901..0000000000 --- a/keyboards/handwired/hnah40rgb/keymaps/ansi/config.h +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright 2019 HnahKB - * - * 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 . - */ - -#pragma once -#define ansi \ No newline at end of file diff --git a/keyboards/handwired/orbweaver/keyboard.json b/keyboards/handwired/orbweaver/keyboard.json index 73baa9a21d..0061c79ba2 100644 --- a/keyboards/handwired/orbweaver/keyboard.json +++ b/keyboards/handwired/orbweaver/keyboard.json @@ -12,8 +12,29 @@ "rgb_matrix": true }, "rgb_matrix": { - "center_point": [40, 30], - "driver": "is31fl3731" + "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"x": 56, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 168, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 224, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 0, "y": 20, "flags": 4}, + {"matrix": [1, 0], "x": 56, "y": 20, "flags": 4}, + {"matrix": [1, 1], "x": 112, "y": 20, "flags": 4}, + {"matrix": [1, 2], "x": 168, "y": 20, "flags": 4}, + {"matrix": [1, 3], "x": 224, "y": 20, "flags": 4}, + {"matrix": [1, 4], "x": 0, "y": 40, "flags": 4}, + {"matrix": [2, 0], "x": 56, "y": 40, "flags": 4}, + {"matrix": [2, 1], "x": 112, "y": 40, "flags": 4}, + {"matrix": [2, 2], "x": 168, "y": 40, "flags": 4}, + {"matrix": [2, 3], "x": 224, "y": 40, "flags": 4}, + {"matrix": [2, 4], "x": 0, "y": 60, "flags": 4}, + {"matrix": [3, 0], "x": 56, "y": 60, "flags": 4}, + {"matrix": [3, 1], "x": 112, "y": 60, "flags": 4}, + {"matrix": [3, 2], "x": 168, "y": 60, "flags": 4}, + {"matrix": [3, 4], "x": 224, "y": 60, "flags": 4} + ] }, "matrix_pins": { "rows": ["GP4", "GP5", "GP6", "GP7", "GP8", "GP9"], diff --git a/keyboards/handwired/orbweaver/orbweaver.c b/keyboards/handwired/orbweaver/orbweaver.c index f89d1ca363..8c23818eea 100644 --- a/keyboards/handwired/orbweaver/orbweaver.c +++ b/keyboards/handwired/orbweaver/orbweaver.c @@ -15,10 +15,10 @@ // // SPDX-License-Identifier: GPL-2.0-or-later -// This IS31FL3731 configuration is for a Razer Orbweaver Chroma. -// It was reverse-engineered by testing all possible Cx_y combinations (144 total), +// This IS31FL3731 configuration is for a Razer Orbweaver Chroma. +// It was reverse-engineered by testing all possible Cx_y combinations (144 total), // and determining which ones addressed individual diodes (60 total). These were then -// placed in order R-G-B, sweeping left to right, and then top to bottom. +// placed in order R-G-B, sweeping left to right, and then top to bottom. #include "rgb_matrix.h" @@ -30,55 +30,24 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { * | | | B location * | | | | */ {0, C9_1, C8_1, C7_1}, //top left key. - {0, C9_2, C8_2, C7_2}, + {0, C9_2, C8_2, C7_2}, {0, C9_3, C8_3, C7_3}, {0, C9_4, C8_4, C7_4}, - {0, C9_5, C8_5, C7_5}, //top right key. + {0, C9_5, C8_5, C7_5}, //top right key. {0, C9_6, C8_6, C7_6}, - {0, C9_7, C8_7, C6_6}, + {0, C9_7, C8_7, C6_6}, {0, C9_8, C7_7, C6_7}, - {0, C1_8, C2_8, C3_8}, + {0, C1_8, C2_8, C3_8}, {0, C1_7, C2_7, C3_7}, {0, C1_6, C2_6, C3_6}, - {0, C1_5, C2_5, C3_5}, - {0, C1_4, C2_4, C3_4}, - {0, C1_3, C2_3, C3_3}, + {0, C1_5, C2_5, C3_5}, + {0, C1_4, C2_4, C3_4}, + {0, C1_3, C2_3, C3_3}, {0, C1_2, C2_2, C4_3}, {0, C1_1, C3_2, C4_2}, //lower left key - {0, C9_9, C8_9, C7_9}, + {0, C9_9, C8_9, C7_9}, {0, C9_10, C8_10, C7_10}, {0, C9_11, C8_11, C7_11}, {0, C9_12, C8_12, C7_12} //lower right key }; - -led_config_t g_led_config = { - // Matrix location to LED index - { - { 0, 2, 3, 4, 5 }, - { 6, 7, 8, 9, 10 }, - { 11, 12, 13, 14, 15 }, - { 16, 17, 18, 19, 19 }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } - }, - - // LED index to physical location - { - {0,0}, {20,0}, {40,0}, {60,0}, {80,0}, - {0,20}, {20,20}, {40,20}, {60,20}, {80,20}, - {0,40}, {20,40}, {40,40}, {60,40}, {80,40}, - {0,60}, {20,60}, {40,60}, {60,60}, {80,60} - }, - - // LED index to flags - { - 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4 - } - }; - - - diff --git a/keyboards/handwired/tractyl_manuform/4x6_right/4x6_right.c b/keyboards/handwired/tractyl_manuform/4x6_right/4x6_right.c index 298060bcb4..f678db94d8 100644 --- a/keyboards/handwired/tractyl_manuform/4x6_right/4x6_right.c +++ b/keyboards/handwired/tractyl_manuform/4x6_right/4x6_right.c @@ -16,39 +16,6 @@ #include "tractyl_manuform.h" -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 24, 23, 18, 17, 10, 9 }, - { 25, 22, 19, 16, 11, 8 }, - { 26, 21, 20, 15, 12, 7 }, - { NO_LED, NO_LED, NO_LED, 14, 13, 6 }, - { NO_LED, NO_LED, NO_LED, 14, 13, 6 }, - { 51, 50, 45, 44, 37, 36 }, - { 52, 49, 46, 43, 38, 35 }, - { 53, 48, 47, 42, 39, 34 }, - { NO_LED, NO_LED, NO_LED, 41, 40, 33 }, - { NO_LED, NO_LED, NO_LED, 41, 40, 33 } -}, { - { 85, 16 }, { 50, 13 }, { 16, 20 }, { 16, 38 }, { 50, 48 }, { 85, 52 }, { 95, 63 }, - { 85, 39 }, { 85, 21 }, { 85, 4 }, { 68, 2 }, { 68, 19 }, { 68, 37 }, { 80, 58 }, - { 60, 55 }, { 50, 35 }, { 50, 13 }, { 50, 0 }, { 33, 3 }, { 33, 20 }, { 33, 37 }, - { 16, 42 }, { 16, 24 }, { 16, 7 }, { 0, 7 }, { 0, 24 }, { 0, 41 }, { 139, 16 }, - { 174, 13 }, { 208, 20 }, { 208, 38 }, { 174, 48 }, { 139, 52 }, { 129, 63 }, { 139, 39 }, - { 139, 21 }, { 139, 4 }, { 156, 2 }, { 156, 19 }, { 156, 37 }, { 144, 58 }, { 164, 55 }, - { 174, 35 }, { 174, 13 }, { 174, 0 }, { 191, 3 }, { 191, 20 }, { 191, 37 }, { 208, 42 }, - { 208, 24 }, { 208, 7 }, { 224, 7 }, { 224, 24 }, { 224, 41 } -}, { - 2, 2, 2, 2, 2, 2, 1, - 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 1, 4, - 4, 4, 4, 4, 4, 1, 1, - 4, 4, 4, 4, 4, 4, 4, - 4, 4, 1, 1, 1 -} }; -#endif - #ifdef SWAP_HANDS_ENABLE const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { /* Left hand, matrix positions */ diff --git a/keyboards/handwired/tractyl_manuform/4x6_right/keyboard.json b/keyboards/handwired/tractyl_manuform/4x6_right/keyboard.json index cc651bec95..8e5290006e 100644 --- a/keyboards/handwired/tractyl_manuform/4x6_right/keyboard.json +++ b/keyboards/handwired/tractyl_manuform/4x6_right/keyboard.json @@ -7,6 +7,62 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"x": 85, "y": 16, "flags": 2}, + {"x": 50, "y": 13, "flags": 2}, + {"x": 16, "y": 20, "flags": 2}, + {"x": 16, "y": 38, "flags": 2}, + {"x": 50, "y": 48, "flags": 2}, + {"x": 85, "y": 52, "flags": 2}, + {"matrix": [4, 5], "x": 95, "y": 63, "flags": 1}, + {"matrix": [2, 5], "x": 85, "y": 39, "flags": 4}, + {"matrix": [1, 5], "x": 85, "y": 21, "flags": 4}, + {"matrix": [0, 5], "x": 85, "y": 4, "flags": 4}, + {"matrix": [0, 4], "x": 68, "y": 2, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 19, "flags": 4}, + {"matrix": [2, 4], "x": 68, "y": 37, "flags": 4}, + {"matrix": [4, 4], "x": 80, "y": 58, "flags": 1}, + {"matrix": [4, 3], "x": 60, "y": 55, "flags": 1}, + {"matrix": [2, 3], "x": 50, "y": 35, "flags": 4}, + {"matrix": [1, 3], "x": 50, "y": 13, "flags": 4}, + {"matrix": [0, 3], "x": 50, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 33, "y": 3, "flags": 4}, + {"matrix": [1, 2], "x": 33, "y": 20, "flags": 4}, + {"matrix": [2, 2], "x": 33, "y": 37, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 42, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 24, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 7, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 7, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 24, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 41, "flags": 1}, + {"x": 139, "y": 16, "flags": 2}, + {"x": 174, "y": 13, "flags": 2}, + {"x": 208, "y": 20, "flags": 2}, + {"x": 208, "y": 38, "flags": 2}, + {"x": 174, "y": 48, "flags": 2}, + {"x": 139, "y": 52, "flags": 2}, + {"matrix": [9, 5], "x": 129, "y": 63, "flags": 1}, + {"matrix": [7, 5], "x": 139, "y": 39, "flags": 4}, + {"matrix": [6, 5], "x": 139, "y": 21, "flags": 4}, + {"matrix": [5, 5], "x": 139, "y": 4, "flags": 4}, + {"matrix": [5, 4], "x": 156, "y": 2, "flags": 4}, + {"matrix": [6, 4], "x": 156, "y": 19, "flags": 4}, + {"matrix": [7, 4], "x": 156, "y": 37, "flags": 4}, + {"matrix": [9, 4], "x": 144, "y": 58, "flags": 1}, + {"matrix": [9, 3], "x": 164, "y": 55, "flags": 1}, + {"matrix": [7, 3], "x": 174, "y": 35, "flags": 4}, + {"matrix": [6, 3], "x": 174, "y": 13, "flags": 4}, + {"matrix": [5, 3], "x": 174, "y": 0, "flags": 4}, + {"matrix": [5, 2], "x": 191, "y": 3, "flags": 4}, + {"matrix": [6, 2], "x": 191, "y": 20, "flags": 4}, + {"matrix": [7, 2], "x": 191, "y": 37, "flags": 4}, + {"matrix": [7, 1], "x": 208, "y": 42, "flags": 4}, + {"matrix": [6, 1], "x": 208, "y": 24, "flags": 4}, + {"matrix": [5, 1], "x": 208, "y": 7, "flags": 4}, + {"matrix": [5, 0], "x": 224, "y": 7, "flags": 1}, + {"matrix": [6, 0], "x": 224, "y": 24, "flags": 1}, + {"matrix": [7, 0], "x": 224, "y": 41, "flags": 1} + ], "max_brightness": 80, "sleep": true, "split_count": [32, 30] diff --git a/keyboards/hfdkb/ac001/ac001.c b/keyboards/hfdkb/ac001/ac001.c deleted file mode 100644 index 83dbdeb628..0000000000 --- a/keyboards/hfdkb/ac001/ac001.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2022 jonylee@hfd - * - * 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 "quantum.h" -/* - 3---------------2 - | | | - | | | - 4-------0-------1 -*/ -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4} -}, { - // LED Index to Physical Position - { 64, 112 }, { 64, 224 }, { 224, 0 }, { 0, 0 }, { 64, 0 }, - -}, { - // LED Index to Flag - 4, 4, 4, 4, 4 -} }; -#endif diff --git a/keyboards/hfdkb/ac001/keyboard.json b/keyboards/hfdkb/ac001/keyboard.json index ee9aab074b..ffb20e3c01 100644 --- a/keyboards/hfdkb/ac001/keyboard.json +++ b/keyboards/hfdkb/ac001/keyboard.json @@ -21,6 +21,13 @@ "multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 112, "y": 64, "flags": 4}, + {"matrix": [0, 1], "x": 224, "y": 64, "flags": 4}, + {"matrix": [0, 2], "x": 224, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 0, "y": 64, "flags": 4} + ], "react_on_keyup": true, "sleep": true }, diff --git a/keyboards/horrortroll/chinese_pcb/devil68_pro/devil68_pro.c b/keyboards/horrortroll/chinese_pcb/devil68_pro/devil68_pro.c deleted file mode 100644 index 98a35e7483..0000000000 --- a/keyboards/horrortroll/chinese_pcb/devil68_pro/devil68_pro.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright 2022 HorrorTroll - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, NO_LED, 13, 14 }, - { 15, NO_LED, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, NO_LED, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, NO_LED, 43 }, - { NO_LED, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, NO_LED, 55, 56, 57 }, - { 58, 59, NO_LED, 60, NO_LED, NO_LED, 61, NO_LED, NO_LED, NO_LED, 62, 63, 64, 65, 66, 67 } -}, { - // Key matrix (0 -> 67) - {0 , 0}, {15 , 0}, {30 , 0}, {45 , 0}, {60 , 0}, {75 , 0}, {90 , 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {202, 0}, {224, 0}, - {3 , 16}, {21 , 16}, {36 , 16}, {51 , 16}, {66 , 16}, {81 , 16}, {96 , 16}, {111, 16}, {126, 16}, {141, 16}, {156, 16}, {171, 16}, {186, 16}, {205, 16}, {224, 16}, - {5 , 32}, {25 , 32}, {40 , 32}, {55 , 32}, {70 , 32}, {85 , 32}, {100, 32}, {115, 32}, {130, 32}, {145, 32}, {160, 32}, {175, 32}, {200, 32}, {224, 32}, - {8 , 48}, {31 , 48}, {46 , 48}, {61 , 48}, {76 , 48}, {91 , 48}, {106, 48}, {121, 48}, {136, 48}, {151, 48}, {166, 48}, {188, 48}, {210, 48}, {224, 48}, - {2 , 64}, {19 , 64}, {36 , 64}, {96 , 64}, {149, 64}, {164, 64}, {179, 64}, {194, 64}, {209, 64}, {224, 64}, - - // Underglow (68 -> 85) - {210, 60}, {186, 12}, {158, 12}, {130, 12}, {101, 12}, {71 , 12}, {39 , 12}, {13 , 12}, {13 , 35}, - {13 , 12}, {39 , 12}, {71 , 12}, {101, 12}, {130, 12}, {158, 12}, {186, 12}, {210, 12}, {210, 35}, -}, { - // Key matrix (0 -> 67) - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, - 1, 1, 1, 4, 1, 1, 1, 4, 4, 4, - - // Underglow (68 -> 85) - 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2 -} }; -#endif diff --git a/keyboards/horrortroll/chinese_pcb/devil68_pro/keyboard.json b/keyboards/horrortroll/chinese_pcb/devil68_pro/keyboard.json index 250cceb3e7..80cb05a3c2 100644 --- a/keyboards/horrortroll/chinese_pcb/devil68_pro/keyboard.json +++ b/keyboards/horrortroll/chinese_pcb/devil68_pro/keyboard.json @@ -59,6 +59,94 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 202, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 3, "y": 16, "flags": 1}, + {"matrix": [1, 2], "x": 21, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 36, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 51, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 66, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 81, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 111, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 126, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 141, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 156, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 171, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 186, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 205, "y": 16, "flags": 4}, + {"matrix": [1, 15], "x": 224, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 5, "y": 32, "flags": 8}, + {"matrix": [2, 2], "x": 25, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 40, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 55, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 70, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 85, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 100, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 115, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 130, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 145, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 175, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 200, "y": 32, "flags": 1}, + {"matrix": [2, 15], "x": 224, "y": 32, "flags": 4}, + {"matrix": [3, 1], "x": 8, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 31, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 46, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 61, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 76, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 91, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 106, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 121, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 136, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 151, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 166, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 188, "y": 48, "flags": 1}, + {"matrix": [3, 14], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 15], "x": 224, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 19, "y": 64, "flags": 1}, + {"matrix": [4, 3], "x": 36, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 149, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 164, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 179, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 194, "y": 64, "flags": 4}, + {"matrix": [4, 14], "x": 209, "y": 64, "flags": 4}, + {"matrix": [4, 15], "x": 224, "y": 64, "flags": 4}, + {"x": 210, "y": 60, "flags": 2}, + {"x": 186, "y": 12, "flags": 2}, + {"x": 158, "y": 12, "flags": 2}, + {"x": 130, "y": 12, "flags": 2}, + {"x": 101, "y": 12, "flags": 2}, + {"x": 71, "y": 12, "flags": 2}, + {"x": 39, "y": 12, "flags": 2}, + {"x": 13, "y": 12, "flags": 2}, + {"x": 13, "y": 35, "flags": 2}, + {"x": 13, "y": 12, "flags": 2}, + {"x": 39, "y": 12, "flags": 2}, + {"x": 71, "y": 12, "flags": 2}, + {"x": 101, "y": 12, "flags": 2}, + {"x": 130, "y": 12, "flags": 2}, + {"x": 158, "y": 12, "flags": 2}, + {"x": 186, "y": 12, "flags": 2}, + {"x": 210, "y": 12, "flags": 2}, + {"x": 210, "y": 35, "flags": 2} + ], "max_brightness": 200 }, "features": { diff --git a/keyboards/hotdox76v2/hotdox76v2.c b/keyboards/hotdox76v2/hotdox76v2.c index e60777703e..022bd92a1f 100644 --- a/keyboards/hotdox76v2/hotdox76v2.c +++ b/keyboards/hotdox76v2/hotdox76v2.c @@ -8,56 +8,6 @@ #include "oled_font_lib/logo2.h" #include "oled_font_lib/ext_font.h" - -#ifdef RGB_MATRIX_ENABLE -// clang-format off -led_config_t g_led_config = { - { - { NO_LED, 34, 33, 32, 35, 37, 36 }, - { 27, 28, 29, 30, 31, NO_LED, NO_LED }, - { 26, 25, 24, 23, 22, 21, 20 }, - { 14, 15, 16, 17, 18, 19, NO_LED }, - { 13, 12, 11, 10, 9, 8, 7 }, - { 0, 1, 2, 3, 4, 5, 6 }, - /*right*/ - { NO_LED, 77, 76, 75, 78, 80, 79 }, - { 70, 71, 72, 73, 74, NO_LED, NO_LED }, - { 69, 68, 67, 66, 65, 64, 63 }, - { 57, 58, 59, 60, 61, 62, NO_LED }, - { 56, 55, 54, 53, 52, 51, 50 }, - { 43, 44, 45, 46, 47, 48, 49 } - }, - { - // LED Index to Physical Position - {0,0}, {17,0}, {34,0}, {52,0}, {69,0}, {86,0}, {103,0}, - {103,13}, {86,13}, {69,13}, {52,13}, {34,13}, {17,13}, {0,13}, - {0,26}, {17,26}, {34,26}, {52,26}, {69,26}, {86,26}, - {103,38}, {86,38}, {69,38}, {52,38}, {34,38}, {17,38}, {0,38}, - {0,51}, {17,51}, {34,51}, {52,51}, {69,51}, - {86,64}, {69,64}, {52,64}, {34,64}, {17,64}, {0,64}, - {69,64}, {52,64}, {34,64}, {17,64}, {0,64}, - - {224,0}, {207,0}, {190,0}, {172,0}, {155,0}, {138,0}, {121,0}, - {121,13}, {138,13}, {155,13}, {172,13}, {190,13}, {207,13}, {224,13}, - {224,26}, {207,26}, {190,26}, {172,26}, {155,26}, {138,26}, - {121,38}, {138,38}, {155,38}, {172,38}, {190,38}, {207,38}, {224,38}, - {224,51}, {207,51}, {190,51}, {172,51}, {155,51}, - {138,64}, {155,64}, {172,64}, {190,64}, {207,64}, {224,64}, - {155,64}, {172,64}, {190,64}, {207,64}, {224,64} - - - }, - { - // LED Index to Flag - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, - 2,2,2,2,2, - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, - 2,2,2,2,2 - } -}; -// clang-format on -#endif - #ifdef OLED_ENABLE # define UNC (' ') diff --git a/keyboards/hotdox76v2/keyboard.json b/keyboards/hotdox76v2/keyboard.json index 8881670b56..cb70bdefee 100644 --- a/keyboards/hotdox76v2/keyboard.json +++ b/keyboards/hotdox76v2/keyboard.json @@ -24,6 +24,94 @@ }, "center_point": [112, 32], "driver": "ws2812", + "layout": [ + {"matrix": [5, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [5, 1], "x": 17, "y": 0, "flags": 4}, + {"matrix": [5, 2], "x": 34, "y": 0, "flags": 4}, + {"matrix": [5, 3], "x": 52, "y": 0, "flags": 4}, + {"matrix": [5, 4], "x": 69, "y": 0, "flags": 4}, + {"matrix": [5, 5], "x": 86, "y": 0, "flags": 4}, + {"matrix": [5, 6], "x": 103, "y": 0, "flags": 4}, + {"matrix": [4, 6], "x": 103, "y": 13, "flags": 4}, + {"matrix": [4, 5], "x": 86, "y": 13, "flags": 4}, + {"matrix": [4, 4], "x": 69, "y": 13, "flags": 4}, + {"matrix": [4, 3], "x": 52, "y": 13, "flags": 4}, + {"matrix": [4, 2], "x": 34, "y": 13, "flags": 4}, + {"matrix": [4, 1], "x": 17, "y": 13, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 13, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 26, "flags": 4}, + {"matrix": [3, 1], "x": 17, "y": 26, "flags": 4}, + {"matrix": [3, 2], "x": 34, "y": 26, "flags": 4}, + {"matrix": [3, 3], "x": 52, "y": 26, "flags": 4}, + {"matrix": [3, 4], "x": 69, "y": 26, "flags": 4}, + {"matrix": [3, 5], "x": 86, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 103, "y": 38, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 38, "flags": 4}, + {"matrix": [2, 4], "x": 69, "y": 38, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 38, "flags": 4}, + {"matrix": [2, 2], "x": 34, "y": 38, "flags": 4}, + {"matrix": [2, 1], "x": 17, "y": 38, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 38, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 51, "flags": 4}, + {"matrix": [1, 1], "x": 17, "y": 51, "flags": 4}, + {"matrix": [1, 2], "x": 34, "y": 51, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 51, "flags": 4}, + {"matrix": [1, 4], "x": 69, "y": 51, "flags": 4}, + {"matrix": [0, 3], "x": 86, "y": 64, "flags": 4}, + {"matrix": [0, 2], "x": 69, "y": 64, "flags": 4}, + {"matrix": [0, 1], "x": 52, "y": 64, "flags": 4}, + {"matrix": [0, 4], "x": 34, "y": 64, "flags": 4}, + {"matrix": [0, 6], "x": 17, "y": 64, "flags": 4}, + {"matrix": [0, 5], "x": 0, "y": 64, "flags": 4}, + {"x": 69, "y": 64, "flags": 2}, + {"x": 52, "y": 64, "flags": 2}, + {"x": 34, "y": 64, "flags": 2}, + {"x": 17, "y": 64, "flags": 2}, + {"x": 0, "y": 64, "flags": 2}, + {"matrix": [11, 0], "x": 224, "y": 0, "flags": 4}, + {"matrix": [11, 1], "x": 207, "y": 0, "flags": 4}, + {"matrix": [11, 2], "x": 190, "y": 0, "flags": 4}, + {"matrix": [11, 3], "x": 172, "y": 0, "flags": 4}, + {"matrix": [11, 4], "x": 155, "y": 0, "flags": 4}, + {"matrix": [11, 5], "x": 138, "y": 0, "flags": 4}, + {"matrix": [11, 6], "x": 121, "y": 0, "flags": 4}, + {"matrix": [10, 6], "x": 121, "y": 13, "flags": 4}, + {"matrix": [10, 5], "x": 138, "y": 13, "flags": 4}, + {"matrix": [10, 4], "x": 155, "y": 13, "flags": 4}, + {"matrix": [10, 3], "x": 172, "y": 13, "flags": 4}, + {"matrix": [10, 2], "x": 190, "y": 13, "flags": 4}, + {"matrix": [10, 1], "x": 207, "y": 13, "flags": 4}, + {"matrix": [10, 0], "x": 224, "y": 13, "flags": 4}, + {"matrix": [9, 0], "x": 224, "y": 26, "flags": 4}, + {"matrix": [9, 1], "x": 207, "y": 26, "flags": 4}, + {"matrix": [9, 2], "x": 190, "y": 26, "flags": 4}, + {"matrix": [9, 3], "x": 172, "y": 26, "flags": 4}, + {"matrix": [9, 4], "x": 155, "y": 26, "flags": 4}, + {"matrix": [9, 5], "x": 138, "y": 26, "flags": 4}, + {"matrix": [8, 6], "x": 121, "y": 38, "flags": 4}, + {"matrix": [8, 5], "x": 138, "y": 38, "flags": 4}, + {"matrix": [8, 4], "x": 155, "y": 38, "flags": 4}, + {"matrix": [8, 3], "x": 172, "y": 38, "flags": 4}, + {"matrix": [8, 2], "x": 190, "y": 38, "flags": 4}, + {"matrix": [8, 1], "x": 207, "y": 38, "flags": 4}, + {"matrix": [8, 0], "x": 224, "y": 38, "flags": 4}, + {"matrix": [7, 0], "x": 224, "y": 51, "flags": 4}, + {"matrix": [7, 1], "x": 207, "y": 51, "flags": 4}, + {"matrix": [7, 2], "x": 190, "y": 51, "flags": 4}, + {"matrix": [7, 3], "x": 172, "y": 51, "flags": 4}, + {"matrix": [7, 4], "x": 155, "y": 51, "flags": 4}, + {"matrix": [6, 3], "x": 138, "y": 64, "flags": 4}, + {"matrix": [6, 2], "x": 155, "y": 64, "flags": 4}, + {"matrix": [6, 1], "x": 172, "y": 64, "flags": 4}, + {"matrix": [6, 4], "x": 190, "y": 64, "flags": 4}, + {"matrix": [6, 6], "x": 207, "y": 64, "flags": 4}, + {"matrix": [6, 5], "x": 224, "y": 64, "flags": 4}, + {"x": 155, "y": 64, "flags": 2}, + {"x": 172, "y": 64, "flags": 2}, + {"x": 190, "y": 64, "flags": 2}, + {"x": 207, "y": 64, "flags": 2}, + {"x": 224, "y": 64, "flags": 2} + ], "max_brightness": 150, "sleep": true, "split_count": [43, 43] From 6c96bb5a5a90da5b4db68fc915413fb97b6c3056 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:06:12 -0600 Subject: [PATCH 34/99] Migrate `g_led_config` to DD (TUW) (#25625) --- keyboards/teleport/native/ansi/ansi.c | 51 ---------- keyboards/teleport/native/ansi/keyboard.json | 89 +++++++++++++++++ keyboards/teleport/native/iso/iso.c | 51 ---------- keyboards/teleport/native/iso/keyboard.json | 89 +++++++++++++++++ keyboards/tkc/portico/keyboard.json | 69 +++++++++++++ keyboards/tkc/portico/portico.c | 22 ---- keyboards/tkc/portico68v2/keyboard.json | 84 ++++++++++++++++ keyboards/tkc/portico68v2/portico68v2.c | 24 ----- keyboards/tkc/portico75/keyboard.json | 100 +++++++++++++++++++ keyboards/tkc/portico75/portico75.c | 25 ----- keyboards/ungodly/launch_pad/keyboard.json | 24 +++++ keyboards/ungodly/launch_pad/launch_pad.c | 44 -------- keyboards/wekey/we27/keyboard.json | 29 ++++++ keyboards/wekey/we27/we27.c | 46 --------- keyboards/work_louder/loop/info.json | 11 ++ keyboards/work_louder/loop/loop.c | 14 --- keyboards/work_louder/micro/keyboard.json | 14 +++ keyboards/work_louder/micro/micro.c | 23 ----- keyboards/work_louder/nano/keyboard.json | 4 + keyboards/work_louder/nano/nano.c | 13 --- 20 files changed, 513 insertions(+), 313 deletions(-) delete mode 100644 keyboards/teleport/native/ansi/ansi.c delete mode 100644 keyboards/teleport/native/iso/iso.c delete mode 100644 keyboards/ungodly/launch_pad/launch_pad.c delete mode 100644 keyboards/wekey/we27/we27.c diff --git a/keyboards/teleport/native/ansi/ansi.c b/keyboards/teleport/native/ansi/ansi.c deleted file mode 100644 index 9c4ea99f40..0000000000 --- a/keyboards/teleport/native/ansi/ansi.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright 2021 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index, LED 61 omitted on ANSI - { 0, 2, 4, 6, 8, 10, 12, 14 }, - { 1, 3, 5, 7, 9, 11, 13, 15 }, - { 16, 18, 20, 22, 24, 26, 28, NO_LED }, - { 17, 19, 21, 23, 25, 27, 29, 30 }, - { 31, 32, 34, 36, 38, 40, 42, 44 }, - { NO_LED, 33, 35, 37, 39, 41, 43, 45 }, - { 46, 48, 50, 52, 54, 56, NO_LED, 58 }, - { 47, 49, 51, 53, 55, 57, NO_LED, 59 }, - { 60, 62, 64, 66, 68, 70, NO_LED, 73 }, - { NO_LED, 63, 65, 67, 69, 71, 72, 74 }, - { 75, 78, NO_LED, NO_LED, NO_LED, 79, 81, 83 }, - { 76, 77, NO_LED, NO_LED, NO_LED, 80, 82, 84 } -}, { - // LED Index to Physical Position, the LED at { 0,0 } in row 5 is there to catch a non-existing LED on ANSI - { 0,0 }, { 15,0 }, { 30,0 }, { 45,0 }, { 60,0 }, { 75,0 }, { 90,0 }, {105,0 }, {119,0 }, {134,0 }, {149,0 }, {164,0 }, {179,0 }, {194,0 }, {209,0 }, {224,0 }, - { 0,13 }, { 15,13 }, { 30,13 }, { 45,13 }, { 60,13 }, { 75,13 }, { 90,13 }, {105,13 }, {119,13 }, {134,13 }, {149,13 }, {164,13 }, {179,13 }, {202,13 }, {224,13 }, - { 4,26 }, { 22,26 }, { 37,26 }, { 52,26 }, { 67,26 }, { 82,26 }, { 97,26 }, {112,26 }, {127,26 }, {142,26 }, {157,26 }, {172,26 }, {187,26 }, {205,26 }, {224,26 }, - { 6,38 }, { 26,38 }, { 41,38 }, { 56,38 }, { 71,38 }, { 86,38 }, {101,38 }, {116,38 }, {131,38 }, {146,38 }, {161,38 }, {175,38 }, {200,38 }, {224,38 }, - { 9,51 }, { 0,0 }, { 34,51 }, { 49,51 }, { 63,51 }, { 78,51 }, { 93,51 }, {108,51 }, {123,51 }, {138,51 }, {153,51 }, {168,51 }, {189,51 }, {209,51 }, {224,51 }, - { 2,64 }, { 21,64 }, { 39,64 }, { 95,64 }, {149,64 }, {164,64 }, {179,64 }, {194,64 }, {209,64 }, {224,64 } -}, { - // LED Index to Flag, the 0 flag in row 5 is there to catch a non-existing LED on ANSI - 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4,12, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 9, 12,12,12, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 1, - 1, 9, 1, 4, 1, 1, 1, 4, 4, 4, -} }; -#endif diff --git a/keyboards/teleport/native/ansi/keyboard.json b/keyboards/teleport/native/ansi/keyboard.json index 30a420517e..68dddfad55 100644 --- a/keyboards/teleport/native/ansi/keyboard.json +++ b/keyboards/teleport/native/ansi/keyboard.json @@ -2,6 +2,95 @@ "usb": { "pid": "0x0003" }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 30, "y": 0, "flags": 4}, + {"matrix": [1, 1], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 60, "y": 0, "flags": 4}, + {"matrix": [1, 2], "x": 75, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 90, "y": 0, "flags": 1}, + {"matrix": [1, 3], "x": 105, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 119, "y": 0, "flags": 1}, + {"matrix": [1, 4], "x": 134, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 149, "y": 0, "flags": 4}, + {"matrix": [1, 5], "x": 164, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 179, "y": 0, "flags": 4}, + {"matrix": [1, 6], "x": 194, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 209, "y": 0, "flags": 1}, + {"matrix": [1, 7], "x": 224, "y": 0, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 13, "flags": 4}, + {"matrix": [3, 0], "x": 15, "y": 13, "flags": 4}, + {"matrix": [2, 1], "x": 30, "y": 13, "flags": 4}, + {"matrix": [3, 1], "x": 45, "y": 13, "flags": 4}, + {"matrix": [2, 2], "x": 60, "y": 13, "flags": 4}, + {"matrix": [3, 2], "x": 75, "y": 13, "flags": 4}, + {"matrix": [2, 3], "x": 90, "y": 13, "flags": 4}, + {"matrix": [3, 3], "x": 105, "y": 13, "flags": 4}, + {"matrix": [2, 4], "x": 119, "y": 13, "flags": 4}, + {"matrix": [3, 4], "x": 134, "y": 13, "flags": 4}, + {"matrix": [2, 5], "x": 149, "y": 13, "flags": 4}, + {"matrix": [3, 5], "x": 164, "y": 13, "flags": 4}, + {"matrix": [2, 6], "x": 179, "y": 13, "flags": 4}, + {"matrix": [3, 6], "x": 202, "y": 13, "flags": 1}, + {"matrix": [3, 7], "x": 224, "y": 13, "flags": 1}, + {"matrix": [4, 0], "x": 4, "y": 26, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 26, "flags": 4}, + {"matrix": [5, 1], "x": 37, "y": 26, "flags": 12}, + {"matrix": [4, 2], "x": 52, "y": 26, "flags": 4}, + {"matrix": [5, 2], "x": 67, "y": 26, "flags": 4}, + {"matrix": [4, 3], "x": 82, "y": 26, "flags": 4}, + {"matrix": [5, 3], "x": 97, "y": 26, "flags": 4}, + {"matrix": [4, 4], "x": 112, "y": 26, "flags": 4}, + {"matrix": [5, 4], "x": 127, "y": 26, "flags": 4}, + {"matrix": [4, 5], "x": 142, "y": 26, "flags": 4}, + {"matrix": [5, 5], "x": 157, "y": 26, "flags": 4}, + {"matrix": [4, 6], "x": 172, "y": 26, "flags": 4}, + {"matrix": [5, 6], "x": 187, "y": 26, "flags": 4}, + {"matrix": [4, 7], "x": 205, "y": 26, "flags": 1}, + {"matrix": [5, 7], "x": 224, "y": 26, "flags": 1}, + {"matrix": [6, 0], "x": 6, "y": 38, "flags": 9}, + {"matrix": [7, 0], "x": 26, "y": 38, "flags": 12}, + {"matrix": [6, 1], "x": 41, "y": 38, "flags": 12}, + {"matrix": [7, 1], "x": 56, "y": 38, "flags": 12}, + {"matrix": [6, 2], "x": 71, "y": 38, "flags": 4}, + {"matrix": [7, 2], "x": 86, "y": 38, "flags": 4}, + {"matrix": [6, 3], "x": 101, "y": 38, "flags": 4}, + {"matrix": [7, 3], "x": 116, "y": 38, "flags": 4}, + {"matrix": [6, 4], "x": 131, "y": 38, "flags": 4}, + {"matrix": [7, 4], "x": 146, "y": 38, "flags": 4}, + {"matrix": [6, 5], "x": 161, "y": 38, "flags": 4}, + {"matrix": [7, 5], "x": 175, "y": 38, "flags": 4}, + {"matrix": [6, 7], "x": 200, "y": 38, "flags": 1}, + {"matrix": [7, 7], "x": 224, "y": 38, "flags": 1}, + {"matrix": [8, 0], "x": 9, "y": 51, "flags": 1}, + {"x": 0, "y": 0, "flags": 0}, + {"matrix": [8, 1], "x": 34, "y": 51, "flags": 4}, + {"matrix": [9, 1], "x": 49, "y": 51, "flags": 4}, + {"matrix": [8, 2], "x": 63, "y": 51, "flags": 4}, + {"matrix": [9, 2], "x": 78, "y": 51, "flags": 4}, + {"matrix": [8, 3], "x": 93, "y": 51, "flags": 4}, + {"matrix": [9, 3], "x": 108, "y": 51, "flags": 4}, + {"matrix": [8, 4], "x": 123, "y": 51, "flags": 4}, + {"matrix": [9, 4], "x": 138, "y": 51, "flags": 4}, + {"matrix": [8, 5], "x": 153, "y": 51, "flags": 4}, + {"matrix": [9, 5], "x": 168, "y": 51, "flags": 4}, + {"matrix": [9, 6], "x": 189, "y": 51, "flags": 1}, + {"matrix": [8, 7], "x": 209, "y": 51, "flags": 4}, + {"matrix": [9, 7], "x": 224, "y": 51, "flags": 1}, + {"matrix": [10, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [11, 0], "x": 21, "y": 64, "flags": 9}, + {"matrix": [11, 1], "x": 39, "y": 64, "flags": 1}, + {"matrix": [10, 1], "x": 95, "y": 64, "flags": 4}, + {"matrix": [10, 5], "x": 149, "y": 64, "flags": 1}, + {"matrix": [11, 5], "x": 164, "y": 64, "flags": 1}, + {"matrix": [10, 6], "x": 179, "y": 64, "flags": 1}, + {"matrix": [11, 6], "x": 194, "y": 64, "flags": 4}, + {"matrix": [10, 7], "x": 209, "y": 64, "flags": 4}, + {"matrix": [11, 7], "x": 224, "y": 64, "flags": 4} + ] + }, "community_layouts": ["75_ansi"], "layouts": { "LAYOUT_75_ansi": { diff --git a/keyboards/teleport/native/iso/iso.c b/keyboards/teleport/native/iso/iso.c deleted file mode 100644 index 5acbffe8f9..0000000000 --- a/keyboards/teleport/native/iso/iso.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright 2021 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 2, 4, 6, 8, 10, 12, 14 }, - { 1, 3, 5, 7, 9, 11, 13, 15 }, - { 16, 18, 20, 22, 24, 26, 28, NO_LED }, - { 17, 19, 21, 23, 25, 27, 29, 30 }, - { 31, 32, 34, 36, 38, 40, 42, 44 }, - { NO_LED, 33, 35, 37, 39, 41, 43, 45 }, - { 46, 48, 50, 52, 54, 56, NO_LED, 58 }, - { 47, 49, 51, 53, 55, 57, NO_LED, 59 }, - { 60, 62, 64, 66, 68, 70, NO_LED, 73 }, - { 61, 63, 65, 67, 69, 71, 72, 74 }, - { 75, 78, NO_LED, NO_LED, NO_LED, 79, 81, 83 }, - { 76, 77, NO_LED, NO_LED, NO_LED, 80, 82, 84 } -}, { - // LED Index to Physical Position - { 0,0 }, { 15,0 }, { 30,0 }, { 45,0 }, { 60,0 }, { 75,0 }, { 90,0 }, {105,0 }, {119,0 }, {134,0 }, {149,0 }, {164,0 }, {179,0 }, {194,0 }, {209,0 }, {224,0 }, - { 0,13 }, { 15,13 }, { 30,13 }, { 45,13 }, { 60,13 }, { 75,13 }, { 90,13 }, {105,13 }, {119,13 }, {134,13 }, {149,13 }, {164,13 }, {179,13 }, {202,13 }, {224,13 }, - { 4,26 }, { 22,26 }, { 37,26 }, { 52,26 }, { 67,26 }, { 82,26 }, { 97,26 }, {112,26 }, {127,26 }, {142,26 }, {157,26 }, {172,26 }, {187,26 }, {207,32 }, {224,26 }, - { 6,38 }, { 26,38 }, { 41,38 }, { 56,38 }, { 71,38 }, { 86,38 }, {101,38 }, {116,38 }, {131,38 }, {146,38 }, {161,38 }, {175,38 }, {190,38 }, {224,38 }, - { 2,51 }, { 19,51 }, { 34,51 }, { 49,51 }, { 63,51 }, { 78,51 }, { 93,51 }, {108,51 }, {123,51 }, {138,51 }, {153,51 }, {168,51 }, {189,51 }, {209,51 }, {224,51 }, - { 2,64 }, { 21,64 }, { 39,64 }, { 95,64 }, {149,64 }, {164,64 }, {179,64 }, {194,64 }, {209,64 }, {224,64 } -}, { - // LED Index to Flag - 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4,12, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 9, 12,12,12, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 1, - 1, 9, 1, 4, 1, 1, 1, 4, 4, 4, -} }; -#endif diff --git a/keyboards/teleport/native/iso/keyboard.json b/keyboards/teleport/native/iso/keyboard.json index 57c5cdb308..03a0d811b0 100644 --- a/keyboards/teleport/native/iso/keyboard.json +++ b/keyboards/teleport/native/iso/keyboard.json @@ -2,6 +2,95 @@ "usb": { "pid": "0x0002" }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 30, "y": 0, "flags": 4}, + {"matrix": [1, 1], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 60, "y": 0, "flags": 4}, + {"matrix": [1, 2], "x": 75, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 90, "y": 0, "flags": 1}, + {"matrix": [1, 3], "x": 105, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 119, "y": 0, "flags": 1}, + {"matrix": [1, 4], "x": 134, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 149, "y": 0, "flags": 4}, + {"matrix": [1, 5], "x": 164, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 179, "y": 0, "flags": 4}, + {"matrix": [1, 6], "x": 194, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 209, "y": 0, "flags": 1}, + {"matrix": [1, 7], "x": 224, "y": 0, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 13, "flags": 4}, + {"matrix": [3, 0], "x": 15, "y": 13, "flags": 4}, + {"matrix": [2, 1], "x": 30, "y": 13, "flags": 4}, + {"matrix": [3, 1], "x": 45, "y": 13, "flags": 4}, + {"matrix": [2, 2], "x": 60, "y": 13, "flags": 4}, + {"matrix": [3, 2], "x": 75, "y": 13, "flags": 4}, + {"matrix": [2, 3], "x": 90, "y": 13, "flags": 4}, + {"matrix": [3, 3], "x": 105, "y": 13, "flags": 4}, + {"matrix": [2, 4], "x": 119, "y": 13, "flags": 4}, + {"matrix": [3, 4], "x": 134, "y": 13, "flags": 4}, + {"matrix": [2, 5], "x": 149, "y": 13, "flags": 4}, + {"matrix": [3, 5], "x": 164, "y": 13, "flags": 4}, + {"matrix": [2, 6], "x": 179, "y": 13, "flags": 4}, + {"matrix": [3, 6], "x": 202, "y": 13, "flags": 1}, + {"matrix": [3, 7], "x": 224, "y": 13, "flags": 1}, + {"matrix": [4, 0], "x": 4, "y": 26, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 26, "flags": 4}, + {"matrix": [5, 1], "x": 37, "y": 26, "flags": 12}, + {"matrix": [4, 2], "x": 52, "y": 26, "flags": 4}, + {"matrix": [5, 2], "x": 67, "y": 26, "flags": 4}, + {"matrix": [4, 3], "x": 82, "y": 26, "flags": 4}, + {"matrix": [5, 3], "x": 97, "y": 26, "flags": 4}, + {"matrix": [4, 4], "x": 112, "y": 26, "flags": 4}, + {"matrix": [5, 4], "x": 127, "y": 26, "flags": 4}, + {"matrix": [4, 5], "x": 142, "y": 26, "flags": 4}, + {"matrix": [5, 5], "x": 157, "y": 26, "flags": 4}, + {"matrix": [4, 6], "x": 172, "y": 26, "flags": 4}, + {"matrix": [5, 6], "x": 187, "y": 26, "flags": 4}, + {"matrix": [4, 7], "x": 207, "y": 32, "flags": 1}, + {"matrix": [5, 7], "x": 224, "y": 26, "flags": 1}, + {"matrix": [6, 0], "x": 6, "y": 38, "flags": 9}, + {"matrix": [7, 0], "x": 26, "y": 38, "flags": 12}, + {"matrix": [6, 1], "x": 41, "y": 38, "flags": 12}, + {"matrix": [7, 1], "x": 56, "y": 38, "flags": 12}, + {"matrix": [6, 2], "x": 71, "y": 38, "flags": 4}, + {"matrix": [7, 2], "x": 86, "y": 38, "flags": 4}, + {"matrix": [6, 3], "x": 101, "y": 38, "flags": 4}, + {"matrix": [7, 3], "x": 116, "y": 38, "flags": 4}, + {"matrix": [6, 4], "x": 131, "y": 38, "flags": 4}, + {"matrix": [7, 4], "x": 146, "y": 38, "flags": 4}, + {"matrix": [6, 5], "x": 161, "y": 38, "flags": 4}, + {"matrix": [7, 5], "x": 175, "y": 38, "flags": 4}, + {"matrix": [6, 7], "x": 190, "y": 38, "flags": 4}, + {"matrix": [7, 7], "x": 224, "y": 38, "flags": 1}, + {"matrix": [8, 0], "x": 2, "y": 51, "flags": 1}, + {"matrix": [9, 0], "x": 19, "y": 51, "flags": 4}, + {"matrix": [8, 1], "x": 34, "y": 51, "flags": 4}, + {"matrix": [9, 1], "x": 49, "y": 51, "flags": 4}, + {"matrix": [8, 2], "x": 63, "y": 51, "flags": 4}, + {"matrix": [9, 2], "x": 78, "y": 51, "flags": 4}, + {"matrix": [8, 3], "x": 93, "y": 51, "flags": 4}, + {"matrix": [9, 3], "x": 108, "y": 51, "flags": 4}, + {"matrix": [8, 4], "x": 123, "y": 51, "flags": 4}, + {"matrix": [9, 4], "x": 138, "y": 51, "flags": 4}, + {"matrix": [8, 5], "x": 153, "y": 51, "flags": 4}, + {"matrix": [9, 5], "x": 168, "y": 51, "flags": 4}, + {"matrix": [9, 6], "x": 189, "y": 51, "flags": 1}, + {"matrix": [8, 7], "x": 209, "y": 51, "flags": 4}, + {"matrix": [9, 7], "x": 224, "y": 51, "flags": 1}, + {"matrix": [10, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [11, 0], "x": 21, "y": 64, "flags": 9}, + {"matrix": [11, 1], "x": 39, "y": 64, "flags": 1}, + {"matrix": [10, 1], "x": 95, "y": 64, "flags": 4}, + {"matrix": [10, 5], "x": 149, "y": 64, "flags": 1}, + {"matrix": [11, 5], "x": 164, "y": 64, "flags": 1}, + {"matrix": [10, 6], "x": 179, "y": 64, "flags": 1}, + {"matrix": [11, 6], "x": 194, "y": 64, "flags": 4}, + {"matrix": [10, 7], "x": 209, "y": 64, "flags": 4}, + {"matrix": [11, 7], "x": 224, "y": 64, "flags": 4} + ] + }, "community_layouts": ["75_iso"], "layouts": { "LAYOUT_75_iso": { diff --git a/keyboards/tkc/portico/keyboard.json b/keyboards/tkc/portico/keyboard.json index 49efe0a942..52ad417a02 100644 --- a/keyboards/tkc/portico/keyboard.json +++ b/keyboards/tkc/portico/keyboard.json @@ -44,6 +44,75 @@ "typing_heatmap": true }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 188, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 201, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 189, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 4}, + {"matrix": [4, 6], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 152, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 171, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 195, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 4}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 4} + ], "led_flush_limit": 26, "led_process_limit": 4, "max_brightness": 200, diff --git a/keyboards/tkc/portico/portico.c b/keyboards/tkc/portico/portico.c index bd60df13e2..e3283e1571 100644 --- a/keyboards/tkc/portico/portico.c +++ b/keyboards/tkc/portico/portico.c @@ -99,28 +99,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { #endif #ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, NO_LED, 43 }, - { 44, NO_LED, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 }, - { 58, 59, 60, NO_LED, NO_LED, NO_LED, 61, NO_LED, NO_LED, NO_LED, 62, 63, 64, 65, 66 } - }, { - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 203, 0 }, { 224, 0 }, - { 4, 16 }, { 23, 16 }, { 38, 16 }, { 53, 16 }, { 68, 16 }, { 83, 16 }, { 98, 16 }, { 113, 16 }, { 128, 16 }, { 143, 16 }, { 158, 16 }, { 173, 16 }, { 188, 16 }, { 206, 16 }, { 224, 16 }, - { 6, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 201, 32 }, { 224, 32 }, - { 9, 48 }, { 34, 48 }, { 49, 48 }, { 64, 48 }, { 79, 48 }, { 94, 48 }, { 109, 48 }, { 124, 48 }, { 139, 48 }, { 154, 48 }, { 169, 48 }, { 189, 48 }, { 210, 48 }, { 224, 48 }, - { 2, 64 }, { 21, 64 }, { 39, 64 }, { 96, 64 }, { 152, 64 }, { 171, 64 }, { 195, 64 }, { 210, 64 }, { 224, 64 } - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4 - } -}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/tkc/portico68v2/keyboard.json b/keyboards/tkc/portico68v2/keyboard.json index 087713f3a2..0e7ccac963 100644 --- a/keyboards/tkc/portico68v2/keyboard.json +++ b/keyboards/tkc/portico68v2/keyboard.json @@ -53,6 +53,90 @@ }, "center_point": [116, 32], "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 188, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 201, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 189, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 4}, + {"matrix": [4, 6], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 152, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 171, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 195, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 4}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 4}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 180, "y": 0, "flags": 2}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 200, "y": 64, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 224, "y": 32, "flags": 2}, + {"x": 44, "y": 0, "flags": 2}, + {"x": 88, "y": 0, "flags": 2}, + {"x": 136, "y": 0, "flags": 2}, + {"x": 0, "y": 32, "flags": 2}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 24, "y": 64, "flags": 2}, + {"x": 78, "y": 64, "flags": 2}, + {"x": 112, "y": 64, "flags": 2}, + {"x": 146, "y": 64, "flags": 2} + ], "max_brightness": 175, "sleep": true }, diff --git a/keyboards/tkc/portico68v2/portico68v2.c b/keyboards/tkc/portico68v2/portico68v2.c index 0f3c557b2c..e746bda7e6 100644 --- a/keyboards/tkc/portico68v2/portico68v2.c +++ b/keyboards/tkc/portico68v2/portico68v2.c @@ -104,30 +104,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0,SW6_CS39,SW6_CS38,SW6_CS37}, /* RGB82 */ }; -led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, NO_LED, 43 }, - { 44, NO_LED, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 }, - { 58, 59, 60, NO_LED, NO_LED, NO_LED, 61, NO_LED, NO_LED, NO_LED, 62, 63, 64, 65, 66 } - }, { - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 203, 0 }, { 224, 0 }, - { 4, 16 }, { 23, 16 }, { 38, 16 }, { 53, 16 }, { 68, 16 }, { 83, 16 }, { 98, 16 }, { 113, 16 }, { 128, 16 }, { 143, 16 }, { 158, 16 }, { 173, 16 }, { 188, 16 }, { 206, 16 }, { 224, 16 }, - { 6, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 201, 32 }, { 224, 32 }, - { 9, 48 }, { 34, 48 }, { 49, 48 }, { 64, 48 }, { 79, 48 }, { 94, 48 }, { 109, 48 }, { 124, 48 }, { 139, 48 }, { 154, 48 }, { 169, 48 }, { 189, 48 }, { 210, 48 }, { 224, 48 }, - { 2, 64 }, { 21, 64 }, { 39, 64 }, { 96, 64 }, { 152, 64 }, { 171, 64 }, { 195, 64 }, { 210, 64 }, { 224, 64 }, - {0,0},{180,0},{224,0},{200,64},{224,64},{224,32},{44,0},{88,0},{136,0},{0,32},{0,64},{24,64},{78,64},{112,64},{146,64} -}, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 - } -}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/tkc/portico75/keyboard.json b/keyboards/tkc/portico75/keyboard.json index 1e84f25ebe..63f5b59f43 100644 --- a/keyboards/tkc/portico75/keyboard.json +++ b/keyboards/tkc/portico75/keyboard.json @@ -42,6 +42,106 @@ "hue_wave": true }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 18, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 33, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 62, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 81, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 110, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 125, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 143, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 158, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 173, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 187, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 205, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 15, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 29, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 44, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 59, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 74, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 88, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 103, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 118, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 132, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 147, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 162, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 176, "y": 15, "flags": 4}, + {"matrix": [1, 13], "x": 198, "y": 15, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 4, "y": 26, "flags": 4}, + {"matrix": [2, 1], "x": 22, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 51, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 66, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 81, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 110, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 125, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 140, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 154, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 169, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 183, "y": 26, "flags": 4}, + {"matrix": [2, 13], "x": 202, "y": 26, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 26, "flags": 4}, + {"matrix": [3, 0], "x": 5, "y": 38, "flags": 4}, + {"matrix": [3, 1], "x": 25, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 40, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 54, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 69, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 84, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 98, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 113, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 128, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 143, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 157, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 172, "y": 38, "flags": 4}, + {"matrix": [3, 12], "x": 197, "y": 38, "flags": 4}, + {"matrix": [4, 0], "x": 9, "y": 49, "flags": 4}, + {"matrix": [4, 1], "x": 33, "y": 49, "flags": 4}, + {"matrix": [4, 2], "x": 48, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 62, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 77, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 92, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 107, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 121, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 136, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 151, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 165, "y": 49, "flags": 4}, + {"matrix": [4, 11], "x": 186, "y": 49, "flags": 4}, + {"matrix": [4, 12], "x": 209, "y": 52, "flags": 4}, + {"matrix": [5, 0], "x": 2, "y": 61, "flags": 4}, + {"matrix": [5, 1], "x": 20, "y": 61, "flags": 4}, + {"matrix": [5, 2], "x": 39, "y": 61, "flags": 4}, + {"matrix": [5, 5], "x": 94, "y": 61, "flags": 4}, + {"matrix": [5, 9], "x": 151, "y": 61, "flags": 4}, + {"matrix": [5, 10], "x": 173, "y": 61, "flags": 4}, + {"matrix": [5, 11], "x": 195, "y": 64, "flags": 4}, + {"matrix": [5, 12], "x": 209, "y": 64, "flags": 4}, + {"matrix": [5, 13], "x": 224, "y": 64, "flags": 4}, + {"x": 2, "y": 0, "flags": 2}, + {"x": 46, "y": 0, "flags": 2}, + {"x": 90, "y": 0, "flags": 2}, + {"x": 134, "y": 0, "flags": 2}, + {"x": 178, "y": 0, "flags": 2}, + {"x": 222, "y": 0, "flags": 2}, + {"x": 224, "y": 2, "flags": 2}, + {"x": 224, "y": 32, "flags": 2}, + {"x": 224, "y": 62, "flags": 2}, + {"x": 2, "y": 64, "flags": 2}, + {"x": 46, "y": 64, "flags": 2}, + {"x": 90, "y": 64, "flags": 2}, + {"x": 134, "y": 64, "flags": 2}, + {"x": 178, "y": 64, "flags": 2}, + {"x": 222, "y": 64, "flags": 2}, + {"x": 0, "y": 2, "flags": 2}, + {"x": 0, "y": 32, "flags": 2}, + {"x": 0, "y": 62, "flags": 2} + ], "led_flush_limit": 26, "led_process_limit": 4, "max_brightness": 200, diff --git a/keyboards/tkc/portico75/portico75.c b/keyboards/tkc/portico75/portico75.c index cd6dafe31a..9552b853c5 100644 --- a/keyboards/tkc/portico75/portico75.c +++ b/keyboards/tkc/portico75/portico75.c @@ -142,31 +142,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { #endif #ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44}, - { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, NO_LED, NO_LED}, - { 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, NO_LED, NO_LED}, - { 71, 72, 73, NO_LED, NO_LED, 74, NO_LED, NO_LED, NO_LED, 75, 76, 77, 78, 79, NO_LED}, -}, { - {0,0},{18,0},{33,0},{48,0},{62,0},{81,0},{96,0},{110,0},{125,0},{143,0},{158,0},{173,0},{187,0},{205,0},{224,0}, - {0,15},{15,15},{29,15},{44,15},{59,15},{74,15},{88,15},{103,15},{118,15},{132,15},{147,15},{162,15},{176,15},{198,15},{224,15}, - {4,26},{22,26},{37,26},{51,26},{66,26},{81,26},{96,26},{110,26},{125,26},{140,26},{154,26},{169,26},{183,26},{202,26},{224,26}, - {5,38},{25,38},{40,38},{54,38},{69,38},{84,38},{98,38},{113,38},{128,38},{143,38},{157,38},{172,38},{197,38}, - {9,49},{33,49},{48,49},{62,49},{77,49},{92,49},{107,49},{121,49},{136,49},{151,49},{165,49},{186,49},{209,52}, - {2,61},{20,61},{39,61},{94,61},{151,61},{173,61},{195,64},{209,64},{224,64}, - {2,0},{46,0},{90,0},{134,0},{178,0},{222,0},{224,2},{224,32},{224,62},{2,64},{46,64},{90,64},{134,64},{178,64},{222,64},{0,2},{0,32},{0,62}, -}, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -} }; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/ungodly/launch_pad/keyboard.json b/keyboards/ungodly/launch_pad/keyboard.json index 50b6c2bcbf..2f5bc95aa6 100644 --- a/keyboards/ungodly/launch_pad/keyboard.json +++ b/keyboards/ungodly/launch_pad/keyboard.json @@ -33,6 +33,30 @@ "animation": "cycle_pinwheel" }, "driver": "ws2812", + "layout": [ + {"matrix": [4, 1], "x": 37, "y": 60, "flags": 4}, + {"matrix": [4, 2], "x": 148, "y": 60, "flags": 4}, + {"matrix": [3, 3], "x": 222, "y": 54, "flags": 4}, + {"matrix": [3, 2], "x": 148, "y": 45, "flags": 4}, + {"matrix": [3, 1], "x": 74, "y": 45, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 45, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 30, "flags": 4}, + {"matrix": [2, 1], "x": 74, "y": 30, "flags": 4}, + {"matrix": [2, 2], "x": 148, "y": 30, "flags": 4}, + {"matrix": [2, 3], "x": 222, "y": 30, "flags": 4}, + {"matrix": [1, 3], "x": 222, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 148, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 74, "y": 15, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 74, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 148, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 222, "y": 0, "flags": 4}, + {"x": 185, "y": 7, "flags": 2}, + {"x": 37, "y": 7, "flags": 2}, + {"x": 37, "y": 52, "flags": 2}, + {"x": 185, "y": 52, "flags": 2} + ], "max_brightness": 150, "sat_steps": 8, "val_steps": 8, diff --git a/keyboards/ungodly/launch_pad/launch_pad.c b/keyboards/ungodly/launch_pad/launch_pad.c deleted file mode 100644 index 9803d8674f..0000000000 --- a/keyboards/ungodly/launch_pad/launch_pad.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright 2020 Ungodly Design - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 14, 15, 16, 17 }, - { 13, 12, 11, 10 }, - { 6, 7, 8, 9 }, - { 5, 4, 3, 2 }, - {NO_LED, 0, 1, NO_LED } -}, { // LED Index to Physical Position - { 37, 60 }, { 148, 60 }, // row 5 - { 222, 54 }, { 148, 45 }, { 74, 45 }, { 0, 45 }, // row 4 - { 0, 30 }, { 74, 30 }, { 148, 30 }, { 222, 30 }, // row 3 - { 222, 15 }, { 148, 15 }, { 74, 15 }, { 0, 15 }, // row 2 - { 0, 0 }, { 74, 0 }, { 148, 0 }, { 222, 0 }, // row 1 - { 185, 7 }, { 37, 7 }, // top underglow - { 37, 52 }, { 185, 52 }, // bottom underglow -}, { - // LED Index to Flag - 4, 4, // row 5 - 4, 4, 4, 4, // row 4 - 4, 4, 4, 4, // row 3 - 4, 4, 4, 4, // row 2 - 4, 4, 4, 4, // row 1 - 2, 2, - 2, 2 -} }; -#endif diff --git a/keyboards/wekey/we27/keyboard.json b/keyboards/wekey/we27/keyboard.json index 91731cdc39..50c6de9e10 100644 --- a/keyboards/wekey/we27/keyboard.json +++ b/keyboards/wekey/we27/keyboard.json @@ -29,6 +29,35 @@ "hue": 108 }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 1, "flags": 1}, + {"matrix": [0, 1], "x": 56, "y": 1, "flags": 1}, + {"matrix": [0, 2], "x": 112, "y": 1, "flags": 1}, + {"matrix": [0, 3], "x": 168, "y": 1, "flags": 1}, + {"matrix": [0, 4], "x": 224, "y": 1, "flags": 1}, + {"matrix": [1, 4], "x": 0, "y": 16, "flags": 1}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 1}, + {"matrix": [1, 2], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 224, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 28, "flags": 1}, + {"matrix": [2, 1], "x": 56, "y": 28, "flags": 4}, + {"matrix": [2, 2], "x": 112, "y": 28, "flags": 4}, + {"matrix": [2, 3], "x": 168, "y": 28, "flags": 4}, + {"matrix": [2, 4], "x": 224, "y": 28, "flags": 4}, + {"matrix": [3, 3], "x": 0, "y": 40, "flags": 1}, + {"matrix": [3, 2], "x": 56, "y": 40, "flags": 4}, + {"matrix": [3, 1], "x": 112, "y": 40, "flags": 4}, + {"matrix": [3, 0], "x": 168, "y": 40, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 52, "flags": 1}, + {"matrix": [4, 1], "x": 56, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 112, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 168, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 224, "y": 52, "flags": 4}, + {"matrix": [5, 3], "x": 0, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 56, "y": 64, "flags": 4}, + {"matrix": [5, 0], "x": 168, "y": 64, "flags": 4} + ], "react_on_keyup": true }, "matrix_pins": { diff --git a/keyboards/wekey/we27/we27.c b/keyboards/wekey/we27/we27.c deleted file mode 100644 index 03ec6f5512..0000000000 --- a/keyboards/wekey/we27/we27.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright 2021 @wekey - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE - -#define __ NO_LED - -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4 }, - { 9, 8, 7, 6, 5 }, - { 10, 11, 12, 13, 14 }, - { 18, 17, 16, 15, __ }, - { 19, 20, 21, 22, 23 }, - { 26, 25, __, 24, __ } -}, { - {0,1},{56,1},{112,1},{168,1},{224,1}, - {0,16},{56,16},{112,16},{168,16},{224,16}, - {0,28},{56,28},{112,28},{168,28},{224,28}, - {0,40},{56,40},{112,40},{168,40}, - {0,52},{56,52},{112,52},{168,52},{224,52}, - {0,64},{56,64},{168,64} -}, { - 1, 1, 1, 1, 1, - 1, 1, 4, 4, 4, - 1, 4, 4, 4, 4, - 1, 4, 4, 4, - 1, 4, 4, 4, 4, - 1, 4, 4 -} }; - -#endif diff --git a/keyboards/work_louder/loop/info.json b/keyboards/work_louder/loop/info.json index 70dc6cc13a..d029f73117 100644 --- a/keyboards/work_louder/loop/info.json +++ b/keyboards/work_louder/loop/info.json @@ -54,6 +54,17 @@ "typing_heatmap": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 11], "x": 188, "y": 32, "flags": 4}, + {"matrix": [0, 10], "x": 169, "y": 32, "flags": 4}, + {"matrix": [0, 9], "x": 150, "y": 32, "flags": 4}, + {"matrix": [0, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [0, 6], "x": 93, "y": 32, "flags": 4}, + {"matrix": [0, 5], "x": 74, "y": 32, "flags": 4}, + {"matrix": [0, 4], "x": 55, "y": 32, "flags": 4}, + {"matrix": [0, 3], "x": 36, "y": 32, "flags": 4} + ], "max_brightness": 120, "sleep": true }, diff --git a/keyboards/work_louder/loop/loop.c b/keyboards/work_louder/loop/loop.c index 7880584d09..138be4e75a 100644 --- a/keyboards/work_louder/loop/loop.c +++ b/keyboards/work_louder/loop/loop.c @@ -41,17 +41,3 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { return true; } #endif - -#ifdef RGB_MATRIX_ENABLE -// clang-format off -led_config_t g_led_config = { - { - { NO_LED, NO_LED, NO_LED, 8, 7, 6, 5, 4, 3, 2, 1, 0 } - }, { - {188, 32}, {169, 32}, {150, 32}, {131, 32}, {112, 32}, {93, 32}, {74, 32}, {55, 32}, {36, 32} - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4 - } -}; -// clang-format on -#endif diff --git a/keyboards/work_louder/micro/keyboard.json b/keyboards/work_louder/micro/keyboard.json index b8da74dd92..677facf995 100644 --- a/keyboards/work_louder/micro/keyboard.json +++ b/keyboards/work_louder/micro/keyboard.json @@ -79,6 +79,20 @@ "digital_rain": true }, "driver": "ws2812", + "layout": [ + {"matrix": [3, 2], "x": 122, "y": 64, "flags": 4}, + {"matrix": [3, 1], "x": 103, "y": 64, "flags": 4}, + {"matrix": [2, 0], "x": 84, "y": 45, "flags": 4}, + {"matrix": [2, 1], "x": 103, "y": 45, "flags": 4}, + {"matrix": [2, 2], "x": 133, "y": 45, "flags": 4}, + {"matrix": [2, 3], "x": 152, "y": 45, "flags": 4}, + {"matrix": [1, 3], "x": 152, "y": 26, "flags": 4}, + {"matrix": [1, 2], "x": 122, "y": 26, "flags": 4}, + {"matrix": [1, 1], "x": 103, "y": 26, "flags": 4}, + {"matrix": [1, 0], "x": 84, "y": 26, "flags": 4}, + {"matrix": [0, 1], "x": 103, "y": 7, "flags": 4}, + {"matrix": [0, 2], "x": 122, "y": 7, "flags": 4} + ], "max_brightness": 150, "sleep": true }, diff --git a/keyboards/work_louder/micro/micro.c b/keyboards/work_louder/micro/micro.c index f88ac8bb45..80af68ad8d 100644 --- a/keyboards/work_louder/micro/micro.c +++ b/keyboards/work_louder/micro/micro.c @@ -3,29 +3,6 @@ #include "micro.h" -#if defined(RGB_MATRIX_ENABLE) -// clang-format off -led_config_t g_led_config = { { - { NO_LED, 10, 11, NO_LED }, - { 9 , 8, 7, 6 }, - { 2, 3, 4, 5 }, - { NO_LED, 1, 0, NO_LED } - }, { - { 122, 64 }, { 103, 64 }, - { 84, 45 }, { 103, 45 }, { 133, 45 }, { 152, 45 }, - { 152, 26 }, { 122, 26 }, { 103, 26 }, { 84, 26 }, - { 103, 7 }, { 122, 7 } - }, - { - 4, 4, - 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4 - } -}; -// clang-format on -#endif - #if defined(ENCODER_ENABLE) bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { diff --git a/keyboards/work_louder/nano/keyboard.json b/keyboards/work_louder/nano/keyboard.json index e15d095de0..c870803b1a 100644 --- a/keyboards/work_louder/nano/keyboard.json +++ b/keyboards/work_louder/nano/keyboard.json @@ -56,6 +56,10 @@ "digital_rain": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 2], "x": 103, "y": 32, "flags": 4}, + {"matrix": [0, 1], "x": 122, "y": 32, "flags": 4} + ], "max_brightness": 120, "sleep": true }, diff --git a/keyboards/work_louder/nano/nano.c b/keyboards/work_louder/nano/nano.c index 28db78e46d..a02b09d90c 100644 --- a/keyboards/work_louder/nano/nano.c +++ b/keyboards/work_louder/nano/nano.c @@ -27,16 +27,3 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { return true; } #endif - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - { NO_LED, 1, 0 } - }, { - { 103, 32 }, { 122, 32 } - }, { - 4, 4 - } -}; - -#endif From 8f22831f01299f1ae37c748f270fbee777867aa5 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:07:06 -0600 Subject: [PATCH 35/99] Migrate `g_led_config` to DD (S) (#25624) --- keyboards/s_ol/0xc_pad/0xc_pad.c | 34 ------- keyboards/s_ol/0xc_pad/keyboard.json | 17 +++- .../naked48/rev1/keyboard.json | 52 ++++++++++- keyboards/salicylic_acid3/naked48/rev1/rev1.c | 42 --------- .../sawnsprojects/satxri6key/keyboard.json | 8 ++ .../sawnsprojects/satxri6key/satxri6key.c | 32 ------- keyboards/senselessclay/ck60/ck60.c | 43 --------- keyboards/senselessclay/ck60/keyboard.json | 64 +++++++++++++ keyboards/silverbullet44/keyboard.json | 54 +++++++++++ keyboards/silverbullet44/silverbullet44.c | 45 ---------- keyboards/smallkeyboard/keyboard.json | 8 ++ keyboards/smallkeyboard/smallkeyboard.c | 15 ---- keyboards/sowbug/68keys/68keys.c | 36 -------- keyboards/sowbug/68keys/keyboard.json | 70 +++++++++++++++ keyboards/sowbug/ansi_tkl/ansi_tkl.c | 50 ----------- keyboards/sowbug/ansi_tkl/keyboard.json | 89 +++++++++++++++++++ .../spaceholdings/nebula12b/keyboard.json | 18 ++++ keyboards/spaceholdings/nebula12b/nebula12b.c | 42 --------- keyboards/spaceholdings/nebula68b/hs/hs.c | 41 --------- .../spaceholdings/nebula68b/hs/keyboard.json | 82 +++++++++++++++++ .../nebula68b/solder/keyboard.json | 83 +++++++++++++++++ .../spaceholdings/nebula68b/solder/solder.c | 41 --------- keyboards/splitkb/kyria/rev1/info.json | 22 +++++ keyboards/splitkb/kyria/rev1/rev1.c | 31 ------- keyboards/splitkb/kyria/rev2/info.json | 22 +++++ keyboards/splitkb/kyria/rev2/rev2.c | 30 ------- keyboards/system76/launch_1/keyboard.json | 86 ++++++++++++++++++ keyboards/system76/launch_1/launch_1.c | 53 ----------- 28 files changed, 672 insertions(+), 538 deletions(-) delete mode 100644 keyboards/s_ol/0xc_pad/0xc_pad.c delete mode 100644 keyboards/salicylic_acid3/naked48/rev1/rev1.c delete mode 100644 keyboards/sawnsprojects/satxri6key/satxri6key.c delete mode 100644 keyboards/senselessclay/ck60/ck60.c delete mode 100644 keyboards/silverbullet44/silverbullet44.c delete mode 100644 keyboards/sowbug/68keys/68keys.c delete mode 100644 keyboards/sowbug/ansi_tkl/ansi_tkl.c delete mode 100755 keyboards/spaceholdings/nebula12b/nebula12b.c delete mode 100755 keyboards/spaceholdings/nebula68b/hs/hs.c delete mode 100755 keyboards/spaceholdings/nebula68b/solder/solder.c diff --git a/keyboards/s_ol/0xc_pad/0xc_pad.c b/keyboards/s_ol/0xc_pad/0xc_pad.c deleted file mode 100644 index ba8cd96aec..0000000000 --- a/keyboards/s_ol/0xc_pad/0xc_pad.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright 2021 s-ol - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // indices - { 0, 6, KC_NO, KC_NO }, - { 1, 5, 7, KC_NO }, - { 2, 4, 8, 11 }, - { KC_NO, 3, 9, 10 } -}, { - // phys position - { 96, 110}, { 80, 83}, { 64, 55}, { 80, 28}, - { 96, 55}, {112, 83}, {128, 110}, {144, 83}, - {128, 55}, {112, 28}, {144, 28}, {160, 55} -}, { - // flags - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 -} }; -#endif diff --git a/keyboards/s_ol/0xc_pad/keyboard.json b/keyboards/s_ol/0xc_pad/keyboard.json index 1df5a5131e..3ad4e986d7 100644 --- a/keyboards/s_ol/0xc_pad/keyboard.json +++ b/keyboards/s_ol/0xc_pad/keyboard.json @@ -39,8 +39,21 @@ "solid_reactive": true, "splash": true }, - "center_point": [112, 63], - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 74, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 148, "y": 0, "flags": 4}, + {"matrix": [2, 0], "x": 37, "y": 21, "flags": 4}, + {"matrix": [3, 1], "x": 111, "y": 21, "flags": 4}, + {"matrix": [2, 1], "x": 185, "y": 21, "flags": 4}, + {"matrix": [1, 1], "x": 0, "y": 42, "flags": 4}, + {"matrix": [0, 1], "x": 74, "y": 42, "flags": 4}, + {"matrix": [1, 2], "x": 148, "y": 42, "flags": 4}, + {"matrix": [2, 2], "x": 224, "y": 42, "flags": 4}, + {"matrix": [3, 2], "x": 37, "y": 64, "flags": 4}, + {"matrix": [3, 3], "x": 111, "y": 64, "flags": 4}, + {"matrix": [2, 3], "x": 185, "y": 64, "flags": 4} + ] }, "layouts": { "LAYOUT": { diff --git a/keyboards/salicylic_acid3/naked48/rev1/keyboard.json b/keyboards/salicylic_acid3/naked48/rev1/keyboard.json index 2cf2dbc45b..fd37a9e7cc 100644 --- a/keyboards/salicylic_acid3/naked48/rev1/keyboard.json +++ b/keyboards/salicylic_acid3/naked48/rev1/keyboard.json @@ -22,7 +22,57 @@ } }, "rgb_matrix": { - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 21, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 43, "flags": 4}, + {"matrix": [3, 0], "x": 17, "y": 64, "flags": 4}, + {"matrix": [3, 1], "x": 34, "y": 64, "flags": 4}, + {"matrix": [3, 2], "x": 52, "y": 64, "flags": 4}, + {"matrix": [3, 3], "x": 69, "y": 64, "flags": 4}, + {"matrix": [3, 4], "x": 86, "y": 64, "flags": 4}, + {"matrix": [3, 5], "x": 103, "y": 64, "flags": 4}, + {"matrix": [3, 6], "x": 121, "y": 64, "flags": 4}, + {"matrix": [3, 7], "x": 138, "y": 64, "flags": 4}, + {"matrix": [3, 8], "x": 155, "y": 64, "flags": 4}, + {"matrix": [3, 9], "x": 172, "y": 64, "flags": 4}, + {"matrix": [3, 10], "x": 190, "y": 64, "flags": 4}, + {"matrix": [3, 11], "x": 207, "y": 64, "flags": 4}, + {"matrix": [2, 11], "x": 224, "y": 43, "flags": 4}, + {"matrix": [1, 11], "x": 224, "y": 21, "flags": 4}, + {"matrix": [0, 11], "x": 224, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 207, "y": 0, "flags": 4}, + {"matrix": [1, 10], "x": 207, "y": 21, "flags": 4}, + {"matrix": [2, 10], "x": 207, "y": 43, "flags": 4}, + {"matrix": [2, 9], "x": 190, "y": 43, "flags": 4}, + {"matrix": [1, 9], "x": 190, "y": 21, "flags": 4}, + {"matrix": [0, 9], "x": 190, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 172, "y": 0, "flags": 4}, + {"matrix": [1, 8], "x": 172, "y": 21, "flags": 4}, + {"matrix": [2, 8], "x": 172, "y": 43, "flags": 4}, + {"matrix": [2, 7], "x": 155, "y": 43, "flags": 4}, + {"matrix": [1, 7], "x": 155, "y": 21, "flags": 4}, + {"matrix": [0, 7], "x": 155, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 138, "y": 0, "flags": 4}, + {"matrix": [1, 6], "x": 138, "y": 21, "flags": 4}, + {"matrix": [2, 6], "x": 138, "y": 43, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 43, "flags": 4}, + {"matrix": [1, 5], "x": 86, "y": 21, "flags": 4}, + {"matrix": [0, 5], "x": 86, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 69, "y": 0, "flags": 4}, + {"matrix": [1, 4], "x": 69, "y": 21, "flags": 4}, + {"matrix": [2, 4], "x": 69, "y": 43, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 43, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 21, "flags": 4}, + {"matrix": [0, 3], "x": 52, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 34, "y": 0, "flags": 4}, + {"matrix": [1, 2], "x": 34, "y": 21, "flags": 4}, + {"matrix": [2, 2], "x": 34, "y": 43, "flags": 4}, + {"matrix": [2, 1], "x": 17, "y": 43, "flags": 4}, + {"matrix": [1, 1], "x": 17, "y": 21, "flags": 4}, + {"matrix": [0, 1], "x": 17, "y": 0, "flags": 4} + ] }, "matrix_pins": { "cols": ["F4", "F5", "F6", "F7", "B1", "B3", "B2", "B6", "D7", "E6", "B4", "B5"], diff --git a/keyboards/salicylic_acid3/naked48/rev1/rev1.c b/keyboards/salicylic_acid3/naked48/rev1/rev1.c deleted file mode 100644 index d4da157a56..0000000000 --- a/keyboards/salicylic_acid3/naked48/rev1/rev1.c +++ /dev/null @@ -1,42 +0,0 @@ -/* -Copyright 2021 Salicylic_Acid - -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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE - led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0,47,42,41,36,35,30,29,24,23,18,17 }, - { 1,46,43,40,37,34,31,28,25,22,19,16 }, - { 2,45,44,39,38,33,32,27,26,21,20,15 }, - { 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14 } - }, { - // LED Index to Physical Position - { 0, 0 }, { 0, 21 }, { 0, 43 }, { 17, 64 }, { 34, 64 },{ 52, 64 }, { 69, 64 }, { 86, 64 }, { 103, 64 }, { 121, 64 }, - { 138, 64 }, { 155, 64 }, { 172, 64 }, { 190, 64 }, { 207, 64 },{ 224, 43 }, { 224, 21 }, { 224, 0 }, { 207, 0 }, { 207, 21 }, - { 207, 43 }, { 190, 43 }, { 190, 21 }, { 190, 0 }, { 172, 0 },{ 172, 21 }, { 172, 43 }, { 155, 43 }, { 155, 21 }, { 155, 0 }, - { 138, 0 }, { 138, 21 }, { 138, 43 }, { 86, 43 }, { 86, 21 },{ 86, 0 }, { 69, 0 }, { 69, 21 }, { 69, 43 }, { 52, 43 }, - { 52, 21 }, { 52, 0 }, { 34, 0 }, { 34, 21 }, { 34, 43 },{ 17, 43 }, { 17, 21 }, { 17, 0 } - }, { - // LED Index to Flag - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4 -} }; -#endif diff --git a/keyboards/sawnsprojects/satxri6key/keyboard.json b/keyboards/sawnsprojects/satxri6key/keyboard.json index 92a798e4b2..30f1ec3fd1 100644 --- a/keyboards/sawnsprojects/satxri6key/keyboard.json +++ b/keyboards/sawnsprojects/satxri6key/keyboard.json @@ -56,6 +56,14 @@ "animation": "solid_reactive_simple" }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 112, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 2], "x": 224, "y": 64, "flags": 1}, + {"matrix": [1, 1], "x": 112, "y": 64, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 64, "flags": 1} + ], "max_brightness": 200, "react_on_keyup": true }, diff --git a/keyboards/sawnsprojects/satxri6key/satxri6key.c b/keyboards/sawnsprojects/satxri6key/satxri6key.c deleted file mode 100644 index c335e0d3ef..0000000000 --- a/keyboards/sawnsprojects/satxri6key/satxri6key.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright 2021 SawnsProjects - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - //Key Matrix to LED Indexccxxz - {0, 1, 2}, - {5, 4, 3} -}, { - //LED Index to Physical Positon - {0, 0}, {112, 0}, {224, 0}, - {224, 64}, {112, 64}, {0, 64}, -}, { - 1, 1, 1, - 1, 1, 1, -} }; -#endif \ No newline at end of file diff --git a/keyboards/senselessclay/ck60/ck60.c b/keyboards/senselessclay/ck60/ck60.c deleted file mode 100644 index 3f8aea611a..0000000000 --- a/keyboards/senselessclay/ck60/ck60.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright 2022 kb-elmo - * - * 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 "quantum.h" - -#define __ NO_LED - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - //Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 }, - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, __ }, - { 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, __ }, - { 54, 55, 56, __, __, __, 57, __, __, __, 58, 59, 60, 61 } -}, { - //LED Index to Physical Positon - { 0, 0 }, { 17, 0 }, { 34, 0 }, { 52, 0 }, { 69, 0 }, { 86, 0 }, { 103, 0 }, { 121, 0 }, { 138, 0 }, { 155, 0 }, { 172, 0 }, { 190, 0 }, { 207, 0 }, { 215, 0 }, - { 224, 24 }, { 215, 16 }, { 198, 16 }, { 180, 16 }, { 164, 16 }, { 146, 16 }, { 129, 16 }, { 112, 16 }, { 95, 16 }, { 78, 16 }, { 60, 16 }, { 43, 16 }, { 26 , 16 }, { 0, 16 }, - { 0, 32 }, { 30, 32 }, { 47, 32 }, { 65, 32 }, { 81, 32 }, { 99, 32 }, { 116, 32 }, { 133, 32 }, { 150, 32 }, { 168, 32 }, { 185, 32 }, { 202, 32 }, { 220, 32 }, - { 207, 48 }, { 190, 48 }, { 172, 48 }, { 155, 48 }, { 138, 48 }, { 121, 48 }, { 103, 48 }, { 86, 48 }, { 69, 48 }, { 52, 48 }, { 34, 48 }, { 17, 48 }, { 0, 48 }, - { 0, 64 }, { 17, 64 }, { 34, 64 }, { 103, 64 }, { 172, 64 }, { 190, 64 }, { 207, 64 }, { 224, 64 } -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1 -} }; -#endif diff --git a/keyboards/senselessclay/ck60/keyboard.json b/keyboards/senselessclay/ck60/keyboard.json index d4fa5336e6..4b1937513e 100644 --- a/keyboards/senselessclay/ck60/keyboard.json +++ b/keyboards/senselessclay/ck60/keyboard.json @@ -36,6 +36,70 @@ "animation": "cycle_all" }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 17, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 34, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 52, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 69, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 86, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 103, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 121, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 138, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 155, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 172, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 190, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 207, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 215, "y": 0, "flags": 1}, + {"matrix": [1, 13], "x": 224, "y": 24, "flags": 1}, + {"matrix": [1, 12], "x": 215, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 198, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 180, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 164, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 146, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 129, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 95, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 78, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 60, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 43, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 26, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 30, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 47, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 65, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 81, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 99, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 133, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 150, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 168, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 185, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 202, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 220, "y": 32, "flags": 4}, + {"matrix": [3, 12], "x": 207, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 190, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 172, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 155, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 138, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 121, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 103, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 86, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 69, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 17, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 17, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 34, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 103, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 172, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 190, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 207, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1} + ], "max_brightness": 160, "sleep": true }, diff --git a/keyboards/silverbullet44/keyboard.json b/keyboards/silverbullet44/keyboard.json index 26e2bcce3a..a724314212 100644 --- a/keyboards/silverbullet44/keyboard.json +++ b/keyboards/silverbullet44/keyboard.json @@ -30,6 +30,60 @@ "animation": "typing_heatmap" }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 3], "x": 139, "y": 16, "flags": 2}, + {"matrix": [0, 4], "x": 174, "y": 13, "flags": 2}, + {"matrix": [0, 5], "x": 208, "y": 20, "flags": 2}, + {"matrix": [1, 5], "x": 208, "y": 38, "flags": 2}, + {"matrix": [1, 4], "x": 174, "y": 48, "flags": 2}, + {"matrix": [1, 3], "x": 139, "y": 52, "flags": 2}, + {"matrix": [0, 2], "x": 129, "y": 63, "flags": 1}, + {"matrix": [0, 1], "x": 139, "y": 39, "flags": 4}, + {"matrix": [1, 2], "x": 139, "y": 21, "flags": 4}, + {"matrix": [2, 3], "x": 139, "y": 4, "flags": 4}, + {"matrix": [2, 4], "x": 156, "y": 2, "flags": 4}, + {"matrix": [2, 5], "x": 156, "y": 19, "flags": 4}, + {"matrix": [3, 5], "x": 156, "y": 37, "flags": 4}, + {"matrix": [3, 4], "x": 144, "y": 58, "flags": 1}, + {"matrix": [3, 3], "x": 164, "y": 55, "flags": 1}, + {"matrix": [3, 2], "x": 174, "y": 35, "flags": 4}, + {"matrix": [2, 2], "x": 174, "y": 13, "flags": 4}, + {"matrix": [1, 1], "x": 174, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 191, "y": 3, "flags": 4}, + {"matrix": [1, 0], "x": 191, "y": 20, "flags": 4}, + {"matrix": [2, 1], "x": 191, "y": 37, "flags": 4}, + {"matrix": [2, 0], "x": 208, "y": 42, "flags": 4}, + {"x": 208, "y": 24, "flags": 4}, + {"x": 208, "y": 7, "flags": 4}, + {"x": 224, "y": 7, "flags": 1}, + {"x": 224, "y": 24, "flags": 1}, + {"x": 224, "y": 41, "flags": 1}, + {"x": 85, "y": 16, "flags": 2}, + {"x": 50, "y": 13, "flags": 2}, + {"x": 16, "y": 20, "flags": 2}, + {"x": 16, "y": 38, "flags": 2}, + {"x": 50, "y": 48, "flags": 2}, + {"x": 85, "y": 52, "flags": 2}, + {"x": 95, "y": 63, "flags": 1}, + {"x": 85, "y": 39, "flags": 4}, + {"x": 85, "y": 21, "flags": 4}, + {"x": 85, "y": 4, "flags": 4}, + {"x": 68, "y": 2, "flags": 4}, + {"x": 68, "y": 19, "flags": 4}, + {"x": 68, "y": 37, "flags": 4}, + {"x": 80, "y": 58, "flags": 1}, + {"x": 60, "y": 55, "flags": 1}, + {"x": 50, "y": 35, "flags": 4}, + {"x": 50, "y": 13, "flags": 4}, + {"x": 50, "y": 0, "flags": 4}, + {"x": 33, "y": 3, "flags": 4}, + {"x": 33, "y": 20, "flags": 4}, + {"x": 33, "y": 37, "flags": 4}, + {"x": 16, "y": 42, "flags": 4}, + {"x": 16, "y": 24, "flags": 4}, + {"x": 16, "y": 7, "flags": 4}, + {"x": 0, "y": 7, "flags": 1} + ], "max_brightness": 150, "sat_steps": 8, "val_steps": 8, diff --git a/keyboards/silverbullet44/silverbullet44.c b/keyboards/silverbullet44/silverbullet44.c deleted file mode 100644 index 00bd6153c9..0000000000 --- a/keyboards/silverbullet44/silverbullet44.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright 2019 SwanMatch - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 18, 7, 6, 0, 1, 2}, - { 19, 17, 8, 5, 4, 3}, - { 21, 20, 16, 9, 10, 11}, - { NO_LED, NO_LED, 15, 14, 13, 12}, -}, { - { 139, 16 }, { 174, 13 }, { 208, 20 }, { 208, 38 }, { 174, 48 }, { 139, 52 }, { 129, 63 }, - { 139, 39 }, { 139, 21 }, { 139, 4 }, { 156, 2 }, { 156, 19 }, { 156, 37 }, { 144, 58 }, - { 164, 55 }, { 174, 35 }, { 174, 13 }, { 174, 0 }, { 191, 3 }, { 191, 20 }, { 191, 37 }, - { 208, 42 }, { 208, 24 }, { 208, 7 }, { 224, 7 }, { 224, 24 }, { 224, 41 }, { 85, 16 }, - { 50, 13 }, { 16, 20 }, { 16, 38 }, { 50, 48 }, { 85, 52 }, { 95, 63 }, { 85, 39 }, - { 85, 21 }, { 85, 4 }, { 68, 2 }, { 68, 19 }, { 68, 37 }, { 80, 58 }, { 60, 55 }, - { 50, 35 }, { 50, 13 }, { 50, 0 }, { 33, 3 }, { 33, 20 }, { 33, 37 }, { 16, 42 }, - { 16, 24 }, { 16, 7 }, { 0, 7 } -}, { - 2, 2, 2, 2, 2, 2, 1, - 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 1, 4, - 4, 4, 4, 4, 4, 1, 1, - 4, 4, 4, 4, 4, 4, 4, - 4, 4, 1 -} }; - -#endif diff --git a/keyboards/smallkeyboard/keyboard.json b/keyboards/smallkeyboard/keyboard.json index dfbdee1cdd..da08cf66c2 100644 --- a/keyboards/smallkeyboard/keyboard.json +++ b/keyboards/smallkeyboard/keyboard.json @@ -44,6 +44,14 @@ "solid_reactive": true }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [1, 1], "x": 112, "y": 64, "flags": 1}, + {"matrix": [1, 2], "x": 224, "y": 64, "flags": 4} + ], "sleep": true }, "matrix_pins": { diff --git a/keyboards/smallkeyboard/smallkeyboard.c b/keyboards/smallkeyboard/smallkeyboard.c index 7442444b00..c3b4a35f84 100644 --- a/keyboards/smallkeyboard/smallkeyboard.c +++ b/keyboards/smallkeyboard/smallkeyboard.c @@ -31,19 +31,4 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C1_12, C2_12, C3_12}, // BL5 {0, C1_13, C2_13, C3_13}, // BL6 }; - -led_config_t g_led_config = { - { - { 0, 1, 2}, - { 3, 4, 5}, - }, - { - { 48, 32},{ 48, 48},{ 64, 48}, - { 80, 16},{ 64, 32},{ 80, 32} - }, - { - 4, 4, 4, - 1, 1, 4 - } -}; #endif diff --git a/keyboards/sowbug/68keys/68keys.c b/keyboards/sowbug/68keys/68keys.c deleted file mode 100644 index df9681481f..0000000000 --- a/keyboards/sowbug/68keys/68keys.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2021 Mike Tsao - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, - { 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, NO_LED, NO_LED, NO_LED }, - { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, NO_LED, NO_LED, NO_LED }, - { 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } -}, { - // LED Index to Physical Position - {0, 0}, {12, 0}, {25, 0}, {38, 0}, {51, 0}, {64, 0}, {77, 0}, {90, 0}, {103, 0}, {116, 0}, {129, 0}, {142, 0}, {155, 0}, {175, 0}, {198, 0}, {211, 0}, {3, 12}, {19, 12}, {32, 12}, {45, 12}, {58, 12}, {71, 12}, {84, 12}, {97, 12}, {110, 12}, {123, 12}, {136, 12}, {149, 12}, {162, 12}, {178, 12}, {198, 12}, {211, 12}, {4, 25}, {22, 25}, {35, 25}, {48, 25}, {61, 25}, {74, 25}, {87, 25}, {100, 25}, {113, 25}, {126, 25}, {139, 25}, {152, 25}, {173, 25}, {8, 38}, {29, 38}, {42, 38}, {55, 38}, {68, 38}, {81, 38}, {94, 38}, {107, 38}, {120, 38}, {133, 38}, {146, 38}, {170, 38}, {198, 38}, {1, 51}, {17, 51}, {34, 51}, {82, 51}, {131, 51}, {147, 51}, {163, 51}, {185, 51}, {198, 51}, {211, 51} -}, { - // LED Index to Flag - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT -} -}; - -#endif // #ifdef RGB_MATRIX_ENABLE diff --git a/keyboards/sowbug/68keys/keyboard.json b/keyboards/sowbug/68keys/keyboard.json index be4ffbf9a9..38ed02706d 100644 --- a/keyboards/sowbug/68keys/keyboard.json +++ b/keyboards/sowbug/68keys/keyboard.json @@ -58,6 +58,76 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 12, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 25, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 38, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 51, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 77, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 103, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 116, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 129, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 142, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 155, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 175, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 198, "y": 0, "flags": 4}, + {"matrix": [0, 15], "x": 211, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 3, "y": 12, "flags": 4}, + {"matrix": [1, 1], "x": 19, "y": 12, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 12, "flags": 4}, + {"matrix": [1, 3], "x": 45, "y": 12, "flags": 4}, + {"matrix": [1, 4], "x": 58, "y": 12, "flags": 4}, + {"matrix": [1, 5], "x": 71, "y": 12, "flags": 4}, + {"matrix": [1, 6], "x": 84, "y": 12, "flags": 4}, + {"matrix": [1, 7], "x": 97, "y": 12, "flags": 4}, + {"matrix": [1, 8], "x": 110, "y": 12, "flags": 4}, + {"matrix": [1, 9], "x": 123, "y": 12, "flags": 4}, + {"matrix": [1, 10], "x": 136, "y": 12, "flags": 4}, + {"matrix": [1, 11], "x": 149, "y": 12, "flags": 4}, + {"matrix": [1, 12], "x": 162, "y": 12, "flags": 4}, + {"matrix": [1, 13], "x": 178, "y": 12, "flags": 4}, + {"matrix": [1, 14], "x": 198, "y": 12, "flags": 4}, + {"matrix": [1, 15], "x": 211, "y": 12, "flags": 4}, + {"matrix": [2, 0], "x": 4, "y": 25, "flags": 4}, + {"matrix": [2, 1], "x": 22, "y": 25, "flags": 4}, + {"matrix": [2, 2], "x": 35, "y": 25, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 25, "flags": 4}, + {"matrix": [2, 4], "x": 61, "y": 25, "flags": 4}, + {"matrix": [2, 5], "x": 74, "y": 25, "flags": 4}, + {"matrix": [2, 6], "x": 87, "y": 25, "flags": 4}, + {"matrix": [2, 7], "x": 100, "y": 25, "flags": 4}, + {"matrix": [2, 8], "x": 113, "y": 25, "flags": 4}, + {"matrix": [2, 9], "x": 126, "y": 25, "flags": 4}, + {"matrix": [2, 10], "x": 139, "y": 25, "flags": 4}, + {"matrix": [2, 11], "x": 152, "y": 25, "flags": 4}, + {"matrix": [2, 12], "x": 173, "y": 25, "flags": 4}, + {"matrix": [3, 0], "x": 8, "y": 38, "flags": 4}, + {"matrix": [3, 1], "x": 29, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 42, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 55, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 68, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 81, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 94, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 107, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 120, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 133, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 146, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 170, "y": 38, "flags": 4}, + {"matrix": [3, 12], "x": 198, "y": 38, "flags": 4}, + {"matrix": [4, 0], "x": 1, "y": 51, "flags": 4}, + {"matrix": [4, 1], "x": 17, "y": 51, "flags": 4}, + {"matrix": [4, 2], "x": 34, "y": 51, "flags": 4}, + {"matrix": [4, 3], "x": 82, "y": 51, "flags": 4}, + {"matrix": [4, 4], "x": 131, "y": 51, "flags": 4}, + {"matrix": [4, 5], "x": 147, "y": 51, "flags": 4}, + {"matrix": [4, 6], "x": 163, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 185, "y": 51, "flags": 4}, + {"matrix": [4, 8], "x": 198, "y": 51, "flags": 4}, + {"matrix": [4, 9], "x": 211, "y": 51, "flags": 4} + ], "max_brightness": 128, "sleep": true }, diff --git a/keyboards/sowbug/ansi_tkl/ansi_tkl.c b/keyboards/sowbug/ansi_tkl/ansi_tkl.c deleted file mode 100644 index 508bf62fe1..0000000000 --- a/keyboards/sowbug/ansi_tkl/ansi_tkl.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright 2021 Mike Tsao - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = {{ - // Key Matrix to LED Index - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, NO_LED}, - {16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}, - {33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49}, - {50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, NO_LED, NO_LED, NO_LED, NO_LED}, - {63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, NO_LED, NO_LED, NO_LED, NO_LED}, - {76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED} - }, - {// LED Index to Physical Position - {0, 0}, {24, 0}, {36, 0}, {49, 0}, {61, 0}, {79, 0}, {92, 0}, {104, 0}, {116, 0}, {135, 0}, {147, 0}, {159, 0}, {171, 0}, {187, 0}, {199, 0}, {211, 0}, - {0, 14}, {12, 14}, {24, 14}, {36, 14}, {49, 14}, {61, 14}, {73, 14}, {85, 14}, {98, 14}, {110, 14}, {122, 14}, {135, 14}, {147, 14}, {165, 14}, {187, 14}, {199, 14}, {211, 14}, - {3, 24}, {18, 24}, {30, 24}, {42, 24}, {55, 24}, {67, 24}, {79, 24}, {92, 24}, {104, 24}, {116, 24}, {128, 24}, {141, 24}, {153, 24}, {168, 24}, {187, 24}, {199, 24}, {211, 24}, - {4, 34}, {21, 34}, {33, 34}, {46, 34}, {58, 34}, {70, 34}, {82, 34}, {95, 34}, {107, 34}, {119, 34}, {131, 34}, {144, 34}, {164, 34}, - {7, 44}, {27, 44}, {39, 44}, {52, 44}, {64, 44}, {76, 44}, {88, 44}, {101, 44}, {113, 44}, {125, 44}, {138, 44}, {161, 44}, {199, 44}, - {1, 54}, {16, 54}, {32, 54}, {78, 54}, {124, 54}, {139, 54}, {154, 54}, {170, 54}, {187, 54}, {199, 54}, {211, 54}}, - {// LED Index to Flag - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, - LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT - } -}; - -#endif // #ifdef RGB_MATRIX_ENABLE diff --git a/keyboards/sowbug/ansi_tkl/keyboard.json b/keyboards/sowbug/ansi_tkl/keyboard.json index 50b9d8095a..95f3925ff6 100644 --- a/keyboards/sowbug/ansi_tkl/keyboard.json +++ b/keyboards/sowbug/ansi_tkl/keyboard.json @@ -58,6 +58,95 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 24, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 36, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 49, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 61, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 79, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 92, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 104, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 116, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 147, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 159, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 171, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 187, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 199, "y": 0, "flags": 4}, + {"matrix": [0, 15], "x": 211, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 14, "flags": 4}, + {"matrix": [1, 1], "x": 12, "y": 14, "flags": 4}, + {"matrix": [1, 2], "x": 24, "y": 14, "flags": 4}, + {"matrix": [1, 3], "x": 36, "y": 14, "flags": 4}, + {"matrix": [1, 4], "x": 49, "y": 14, "flags": 4}, + {"matrix": [1, 5], "x": 61, "y": 14, "flags": 4}, + {"matrix": [1, 6], "x": 73, "y": 14, "flags": 4}, + {"matrix": [1, 7], "x": 85, "y": 14, "flags": 4}, + {"matrix": [1, 8], "x": 98, "y": 14, "flags": 4}, + {"matrix": [1, 9], "x": 110, "y": 14, "flags": 4}, + {"matrix": [1, 10], "x": 122, "y": 14, "flags": 4}, + {"matrix": [1, 11], "x": 135, "y": 14, "flags": 4}, + {"matrix": [1, 12], "x": 147, "y": 14, "flags": 4}, + {"matrix": [1, 13], "x": 165, "y": 14, "flags": 4}, + {"matrix": [1, 14], "x": 187, "y": 14, "flags": 4}, + {"matrix": [1, 15], "x": 199, "y": 14, "flags": 4}, + {"matrix": [1, 16], "x": 211, "y": 14, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 24, "flags": 4}, + {"matrix": [2, 1], "x": 18, "y": 24, "flags": 4}, + {"matrix": [2, 2], "x": 30, "y": 24, "flags": 4}, + {"matrix": [2, 3], "x": 42, "y": 24, "flags": 4}, + {"matrix": [2, 4], "x": 55, "y": 24, "flags": 4}, + {"matrix": [2, 5], "x": 67, "y": 24, "flags": 4}, + {"matrix": [2, 6], "x": 79, "y": 24, "flags": 4}, + {"matrix": [2, 7], "x": 92, "y": 24, "flags": 4}, + {"matrix": [2, 8], "x": 104, "y": 24, "flags": 4}, + {"matrix": [2, 9], "x": 116, "y": 24, "flags": 4}, + {"matrix": [2, 10], "x": 128, "y": 24, "flags": 4}, + {"matrix": [2, 11], "x": 141, "y": 24, "flags": 4}, + {"matrix": [2, 12], "x": 153, "y": 24, "flags": 4}, + {"matrix": [2, 13], "x": 168, "y": 24, "flags": 4}, + {"matrix": [2, 14], "x": 187, "y": 24, "flags": 4}, + {"matrix": [2, 15], "x": 199, "y": 24, "flags": 4}, + {"matrix": [2, 16], "x": 211, "y": 24, "flags": 4}, + {"matrix": [3, 0], "x": 4, "y": 34, "flags": 4}, + {"matrix": [3, 1], "x": 21, "y": 34, "flags": 4}, + {"matrix": [3, 2], "x": 33, "y": 34, "flags": 4}, + {"matrix": [3, 3], "x": 46, "y": 34, "flags": 4}, + {"matrix": [3, 4], "x": 58, "y": 34, "flags": 4}, + {"matrix": [3, 5], "x": 70, "y": 34, "flags": 4}, + {"matrix": [3, 6], "x": 82, "y": 34, "flags": 4}, + {"matrix": [3, 7], "x": 95, "y": 34, "flags": 4}, + {"matrix": [3, 8], "x": 107, "y": 34, "flags": 4}, + {"matrix": [3, 9], "x": 119, "y": 34, "flags": 4}, + {"matrix": [3, 10], "x": 131, "y": 34, "flags": 4}, + {"matrix": [3, 11], "x": 144, "y": 34, "flags": 4}, + {"matrix": [3, 12], "x": 164, "y": 34, "flags": 4}, + {"matrix": [4, 0], "x": 7, "y": 44, "flags": 4}, + {"matrix": [4, 1], "x": 27, "y": 44, "flags": 4}, + {"matrix": [4, 2], "x": 39, "y": 44, "flags": 4}, + {"matrix": [4, 3], "x": 52, "y": 44, "flags": 4}, + {"matrix": [4, 4], "x": 64, "y": 44, "flags": 4}, + {"matrix": [4, 5], "x": 76, "y": 44, "flags": 4}, + {"matrix": [4, 6], "x": 88, "y": 44, "flags": 4}, + {"matrix": [4, 7], "x": 101, "y": 44, "flags": 4}, + {"matrix": [4, 8], "x": 113, "y": 44, "flags": 4}, + {"matrix": [4, 9], "x": 125, "y": 44, "flags": 4}, + {"matrix": [4, 10], "x": 138, "y": 44, "flags": 4}, + {"matrix": [4, 11], "x": 161, "y": 44, "flags": 4}, + {"matrix": [4, 12], "x": 199, "y": 44, "flags": 4}, + {"matrix": [5, 0], "x": 1, "y": 54, "flags": 4}, + {"matrix": [5, 1], "x": 16, "y": 54, "flags": 4}, + {"matrix": [5, 2], "x": 32, "y": 54, "flags": 4}, + {"matrix": [5, 3], "x": 78, "y": 54, "flags": 4}, + {"matrix": [5, 4], "x": 124, "y": 54, "flags": 4}, + {"matrix": [5, 5], "x": 139, "y": 54, "flags": 4}, + {"matrix": [5, 6], "x": 154, "y": 54, "flags": 4}, + {"matrix": [5, 7], "x": 170, "y": 54, "flags": 4}, + {"matrix": [5, 8], "x": 187, "y": 54, "flags": 4}, + {"matrix": [5, 9], "x": 199, "y": 54, "flags": 4}, + {"matrix": [5, 10], "x": 211, "y": 54, "flags": 4} + ], "max_brightness": 128, "sleep": true }, diff --git a/keyboards/spaceholdings/nebula12b/keyboard.json b/keyboards/spaceholdings/nebula12b/keyboard.json index 6990da485b..c1092a75db 100755 --- a/keyboards/spaceholdings/nebula12b/keyboard.json +++ b/keyboards/spaceholdings/nebula12b/keyboard.json @@ -57,6 +57,24 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"x": 224, "y": 0, "flags": 2}, + {"matrix": [0, 2], "x": 224, "y": 9, "flags": 4}, + {"matrix": [1, 2], "x": 224, "y": 27, "flags": 4}, + {"matrix": [1, 1], "x": 112, "y": 27, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 27, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 46, "flags": 4}, + {"matrix": [2, 1], "x": 112, "y": 46, "flags": 4}, + {"matrix": [2, 2], "x": 224, "y": 46, "flags": 4}, + {"x": 224, "y": 55, "flags": 2}, + {"matrix": [3, 2], "x": 224, "y": 64, "flags": 4}, + {"matrix": [3, 1], "x": 112, "y": 64, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 64, "flags": 4}, + {"x": 0, "y": 55, "flags": 2}, + {"matrix": [0, 0], "x": 0, "y": 9, "flags": 4}, + {"x": 0, "y": 0, "flags": 2}, + {"matrix": [0, 1], "x": 112, "y": 9, "flags": 4} + ], "sleep": true }, "build": { diff --git a/keyboards/spaceholdings/nebula12b/nebula12b.c b/keyboards/spaceholdings/nebula12b/nebula12b.c deleted file mode 100755 index 6bca6c331b..0000000000 --- a/keyboards/spaceholdings/nebula12b/nebula12b.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright 2022 Yiancar - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -// clang-format off -led_config_t g_led_config = { { - { 13, 15, 1 }, - { 4, 3, 2 }, - { 5, 6, 7 }, - { 11, 10, 9 }, -}, { - {224, 0 }, {224, 9 }, {224, 27 }, {112, 27 }, { 0,27 }, - { 0, 46 }, {112, 46 }, {224, 46 }, {224, 55 }, {224,64 }, - {112, 64 }, { 0, 64 }, { 0, 55 }, { 0, 9 }, { 0, 0 }, {112, 9 } -}, { - 2, - 4, 4, 4, 4, 4, 4, 4, - 2, - 4, 4, 4, - 2, - 4, - 2, - 4 -} }; -// clang-format on -#endif - diff --git a/keyboards/spaceholdings/nebula68b/hs/hs.c b/keyboards/spaceholdings/nebula68b/hs/hs.c deleted file mode 100755 index 7ac8da2e0d..0000000000 --- a/keyboards/spaceholdings/nebula68b/hs/hs.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright 2021 Yiancar - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -// clang-format off -led_config_t g_led_config = { { - { 0, 1, 2, 4, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17, 18 }, - { 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, NO_LED, 21 }, - { 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 22, 49, 19 }, - { 63, NO_LED, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 20 }, - { 64, 65, 67, NO_LED, NO_LED, NO_LED, 69, NO_LED, NO_LED, 71, 72, 73, 75, 76, 77 } -}, { - { 6, 10}, { 19, 10}, { 32, 10}, { 39, 11}, { 45, 10}, { 58, 10}, { 71, 10}, { 84, 10}, { 90, 11}, { 97, 10}, {110, 10}, {123, 10}, {130, 11}, {136, 10}, {149, 10}, {162, 10}, - {178, 13}, {182, 10}, {205, 10}, {218, 10}, {218, 23}, {205, 23}, {185, 23}, {169, 23}, {156, 23}, {143, 23}, {130, 23}, {117, 23}, {104, 23}, { 91, 23}, { 78, 23}, - { 65, 23}, { 52, 23}, { 39, 23}, { 26, 23}, { 10, 23}, { 4, 26}, { 17, 29}, { 29, 35}, { 42, 35}, { 55, 35}, { 68, 35}, { 81, 35}, { 94, 35}, {107, 35}, {120, 35}, {133, 35}, - {146, 35}, {159, 35}, {180, 35}, {220, 32}, {205, 48}, {177, 48}, {153, 48}, {140, 48}, {127, 48}, {114, 48}, {101, 48}, { 88, 48}, { 75, 48}, { 62, 48}, { 49, 48}, { 36, 48}, - { 15, 48}, { 8, 61}, { 24, 61}, { 32, 52}, { 41, 61}, { 81, 56}, { 89, 61}, {132, 53}, {138, 61}, {154, 61}, {170, 61}, {179, 53}, {192, 61}, {205, 61}, {218, 61} -}, { - 1, 4, 4, 2, 4, 4, 4, 4, 2, 4, 4, 4, 2, 4, 4, 4, 2, 1, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 2, 1, 2, 4, 2, 1, 1, 1, 2, 1, 1, 1 -} }; -// clang-format on -#endif diff --git a/keyboards/spaceholdings/nebula68b/hs/keyboard.json b/keyboards/spaceholdings/nebula68b/hs/keyboard.json index ca41cff8e6..f99fd95bc4 100755 --- a/keyboards/spaceholdings/nebula68b/hs/keyboard.json +++ b/keyboards/spaceholdings/nebula68b/hs/keyboard.json @@ -1,5 +1,87 @@ { "keyboard_name": "NEBULA68B HOTSWAP", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 6, "y": 10, "flags": 1}, + {"matrix": [0, 1], "x": 19, "y": 10, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 10, "flags": 4}, + {"x": 39, "y": 11, "flags": 2}, + {"matrix": [0, 3], "x": 45, "y": 10, "flags": 4}, + {"matrix": [0, 4], "x": 58, "y": 10, "flags": 4}, + {"matrix": [0, 5], "x": 71, "y": 10, "flags": 4}, + {"matrix": [0, 6], "x": 84, "y": 10, "flags": 4}, + {"x": 90, "y": 11, "flags": 2}, + {"matrix": [0, 7], "x": 97, "y": 10, "flags": 4}, + {"matrix": [0, 8], "x": 110, "y": 10, "flags": 4}, + {"matrix": [0, 9], "x": 123, "y": 10, "flags": 4}, + {"x": 130, "y": 11, "flags": 2}, + {"matrix": [0, 10], "x": 136, "y": 10, "flags": 4}, + {"matrix": [0, 11], "x": 149, "y": 10, "flags": 4}, + {"matrix": [0, 12], "x": 162, "y": 10, "flags": 4}, + {"x": 178, "y": 13, "flags": 2}, + {"matrix": [0, 13], "x": 182, "y": 10, "flags": 1}, + {"matrix": [0, 14], "x": 205, "y": 10, "flags": 1}, + {"matrix": [2, 14], "x": 218, "y": 10, "flags": 1}, + {"matrix": [3, 14], "x": 218, "y": 23, "flags": 1}, + {"matrix": [1, 14], "x": 205, "y": 23, "flags": 1}, + {"matrix": [2, 12], "x": 185, "y": 23, "flags": 4}, + {"matrix": [1, 12], "x": 169, "y": 23, "flags": 4}, + {"matrix": [1, 11], "x": 156, "y": 23, "flags": 4}, + {"matrix": [1, 10], "x": 143, "y": 23, "flags": 4}, + {"matrix": [1, 9], "x": 130, "y": 23, "flags": 4}, + {"matrix": [1, 8], "x": 117, "y": 23, "flags": 4}, + {"matrix": [1, 7], "x": 104, "y": 23, "flags": 4}, + {"matrix": [1, 6], "x": 91, "y": 23, "flags": 4}, + {"matrix": [1, 5], "x": 78, "y": 23, "flags": 4}, + {"matrix": [1, 4], "x": 65, "y": 23, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 23, "flags": 4}, + {"matrix": [1, 2], "x": 39, "y": 23, "flags": 4}, + {"matrix": [1, 1], "x": 26, "y": 23, "flags": 4}, + {"matrix": [1, 0], "x": 10, "y": 23, "flags": 1}, + {"x": 4, "y": 26, "flags": 2}, + {"matrix": [2, 0], "x": 17, "y": 29, "flags": 1}, + {"matrix": [2, 1], "x": 29, "y": 35, "flags": 4}, + {"matrix": [2, 2], "x": 42, "y": 35, "flags": 4}, + {"matrix": [2, 3], "x": 55, "y": 35, "flags": 4}, + {"matrix": [2, 4], "x": 68, "y": 35, "flags": 4}, + {"matrix": [2, 5], "x": 81, "y": 35, "flags": 4}, + {"matrix": [2, 6], "x": 94, "y": 35, "flags": 4}, + {"matrix": [2, 7], "x": 107, "y": 35, "flags": 4}, + {"matrix": [2, 8], "x": 120, "y": 35, "flags": 4}, + {"matrix": [2, 9], "x": 133, "y": 35, "flags": 4}, + {"matrix": [2, 10], "x": 146, "y": 35, "flags": 4}, + {"matrix": [2, 11], "x": 159, "y": 35, "flags": 4}, + {"matrix": [2, 13], "x": 180, "y": 35, "flags": 1}, + {"x": 220, "y": 32, "flags": 2}, + {"matrix": [3, 13], "x": 205, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 177, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 153, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 127, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 114, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 15, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 8, "y": 61, "flags": 1}, + {"matrix": [4, 1], "x": 24, "y": 61, "flags": 1}, + {"x": 32, "y": 52, "flags": 2}, + {"matrix": [4, 2], "x": 41, "y": 61, "flags": 1}, + {"x": 81, "y": 56, "flags": 2}, + {"matrix": [4, 6], "x": 89, "y": 61, "flags": 4}, + {"x": 132, "y": 53, "flags": 2}, + {"matrix": [4, 9], "x": 138, "y": 61, "flags": 1}, + {"matrix": [4, 10], "x": 154, "y": 61, "flags": 1}, + {"matrix": [4, 11], "x": 170, "y": 61, "flags": 1}, + {"x": 179, "y": 53, "flags": 2}, + {"matrix": [4, 12], "x": 192, "y": 61, "flags": 1}, + {"matrix": [4, 13], "x": 205, "y": 61, "flags": 1}, + {"matrix": [4, 14], "x": 218, "y": 61, "flags": 1} + ] + }, "community_layouts": ["68_ansi"], "layouts": { "LAYOUT_68_ansi": { diff --git a/keyboards/spaceholdings/nebula68b/solder/keyboard.json b/keyboards/spaceholdings/nebula68b/solder/keyboard.json index 3a50385fe3..ea002840e2 100755 --- a/keyboards/spaceholdings/nebula68b/solder/keyboard.json +++ b/keyboards/spaceholdings/nebula68b/solder/keyboard.json @@ -1,5 +1,88 @@ { "keyboard_name": "NEBULA68B SOLDER", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 6, "y": 10, "flags": 1}, + {"matrix": [0, 1], "x": 19, "y": 10, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 10, "flags": 4}, + {"x": 44, "y": 13, "flags": 2}, + {"matrix": [0, 3], "x": 45, "y": 10, "flags": 4}, + {"matrix": [0, 4], "x": 58, "y": 10, "flags": 4}, + {"matrix": [0, 5], "x": 71, "y": 10, "flags": 4}, + {"matrix": [0, 6], "x": 84, "y": 10, "flags": 4}, + {"x": 88, "y": 13, "flags": 2}, + {"matrix": [0, 7], "x": 97, "y": 10, "flags": 4}, + {"matrix": [0, 8], "x": 110, "y": 10, "flags": 4}, + {"matrix": [0, 9], "x": 123, "y": 10, "flags": 4}, + {"x": 132, "y": 13, "flags": 2}, + {"matrix": [0, 10], "x": 136, "y": 10, "flags": 4}, + {"matrix": [0, 11], "x": 149, "y": 10, "flags": 4}, + {"matrix": [0, 12], "x": 162, "y": 10, "flags": 4}, + {"matrix": [1, 13], "x": 175, "y": 10, "flags": 4}, + {"x": 179, "y": 13, "flags": 2}, + {"matrix": [0, 13], "x": 188, "y": 10, "flags": 1}, + {"matrix": [0, 14], "x": 205, "y": 10, "flags": 1}, + {"matrix": [2, 14], "x": 218, "y": 10, "flags": 1}, + {"matrix": [3, 14], "x": 218, "y": 23, "flags": 1}, + {"matrix": [1, 14], "x": 205, "y": 23, "flags": 1}, + {"matrix": [2, 12], "x": 185, "y": 23, "flags": 4}, + {"matrix": [1, 12], "x": 169, "y": 23, "flags": 4}, + {"matrix": [1, 11], "x": 156, "y": 23, "flags": 4}, + {"matrix": [1, 10], "x": 143, "y": 23, "flags": 4}, + {"matrix": [1, 9], "x": 130, "y": 23, "flags": 4}, + {"matrix": [1, 8], "x": 117, "y": 23, "flags": 4}, + {"matrix": [1, 7], "x": 104, "y": 23, "flags": 4}, + {"matrix": [1, 6], "x": 91, "y": 23, "flags": 4}, + {"matrix": [1, 5], "x": 78, "y": 23, "flags": 4}, + {"matrix": [1, 4], "x": 65, "y": 23, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 23, "flags": 4}, + {"matrix": [1, 2], "x": 39, "y": 23, "flags": 4}, + {"matrix": [1, 1], "x": 26, "y": 23, "flags": 4}, + {"matrix": [1, 0], "x": 10, "y": 23, "flags": 1}, + {"x": 4, "y": 26, "flags": 2}, + {"matrix": [2, 0], "x": 11, "y": 35, "flags": 1}, + {"matrix": [2, 1], "x": 29, "y": 35, "flags": 4}, + {"matrix": [2, 2], "x": 42, "y": 35, "flags": 4}, + {"matrix": [2, 3], "x": 55, "y": 35, "flags": 4}, + {"matrix": [2, 4], "x": 68, "y": 35, "flags": 4}, + {"matrix": [2, 5], "x": 81, "y": 35, "flags": 4}, + {"matrix": [2, 6], "x": 94, "y": 35, "flags": 4}, + {"matrix": [2, 7], "x": 107, "y": 35, "flags": 4}, + {"matrix": [2, 8], "x": 120, "y": 35, "flags": 4}, + {"matrix": [2, 9], "x": 133, "y": 35, "flags": 4}, + {"matrix": [2, 10], "x": 146, "y": 35, "flags": 4}, + {"matrix": [2, 11], "x": 159, "y": 35, "flags": 4}, + {"matrix": [2, 13], "x": 180, "y": 35, "flags": 1}, + {"x": 220, "y": 32, "flags": 2}, + {"matrix": [3, 13], "x": 205, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 177, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 153, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 127, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 114, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 15, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 8, "y": 61, "flags": 1}, + {"matrix": [4, 1], "x": 24, "y": 61, "flags": 1}, + {"x": 32, "y": 52, "flags": 2}, + {"matrix": [4, 2], "x": 41, "y": 61, "flags": 1}, + {"x": 82, "y": 56, "flags": 2}, + {"matrix": [4, 6], "x": 89, "y": 61, "flags": 4}, + {"x": 132, "y": 53, "flags": 2}, + {"matrix": [4, 9], "x": 138, "y": 61, "flags": 1}, + {"matrix": [4, 10], "x": 154, "y": 61, "flags": 1}, + {"matrix": [4, 11], "x": 170, "y": 61, "flags": 1}, + {"x": 179, "y": 53, "flags": 2}, + {"matrix": [4, 12], "x": 192, "y": 61, "flags": 1}, + {"matrix": [4, 13], "x": 205, "y": 61, "flags": 1}, + {"matrix": [4, 14], "x": 218, "y": 61, "flags": 1} + ] + }, "community_layouts": ["68_ansi"], "layouts": { "LAYOUT_68_ansi": { diff --git a/keyboards/spaceholdings/nebula68b/solder/solder.c b/keyboards/spaceholdings/nebula68b/solder/solder.c deleted file mode 100755 index 352cee1d52..0000000000 --- a/keyboards/spaceholdings/nebula68b/solder/solder.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright 2021 Yiancar - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -// clang-format off -led_config_t g_led_config = { { - { 0, 1, 2, 4, 5, 6, 7, 9, 10, 11, 13, 14, 15, 18, 19 }, - { 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 16, 22 }, - { 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 23, 50, 20 }, - { 64, NO_LED, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 21 }, - { 65, 66, 68, NO_LED, NO_LED, NO_LED, 70, NO_LED, NO_LED, 72, 73, 74, 76, 77, 78 } -}, { - { 6, 10}, { 19, 10}, { 32, 10}, { 44, 13}, { 45, 10}, { 58, 10}, { 71, 10}, { 84, 10}, { 88, 13}, { 97, 10}, {110, 10}, {123, 10}, {132, 13}, {136, 10}, {149, 10}, {162, 10}, - {175, 10}, {179, 13}, {188, 10}, {205, 10}, {218, 10}, {218, 23}, {205, 23}, {185, 23}, {169, 23}, {156, 23}, {143, 23}, {130, 23}, {117, 23}, {104, 23}, { 91, 23}, { 78, 23}, - { 65, 23}, { 52, 23}, { 39, 23}, { 26, 23}, { 10, 23}, { 4, 26}, { 11, 35}, { 29, 35}, { 42, 35}, { 55, 35}, { 68, 35}, { 81, 35}, { 94, 35}, {107, 35}, {120, 35}, {133, 35}, - {146, 35}, {159, 35}, {180, 35}, {220, 32}, {205, 48}, {177, 48}, {153, 48}, {140, 48}, {127, 48}, {114, 48}, {101, 48}, { 88, 48}, { 75, 48}, { 62, 48}, { 49, 48}, { 36, 48}, - { 15, 48}, { 8, 61}, { 24, 61}, { 32, 52}, { 41, 61}, { 82, 56}, { 89, 61}, {132, 53}, {138, 61}, {154, 61}, {170, 61}, {179, 53}, {192, 61}, {205, 61}, {218, 61} -}, { - 1, 4, 4, 2, 4, 4, 4, 4, 2, 4, 4, 4, 2, 4, 4, 4, 4, 2, 1, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 2, 1, 2, 4, 2, 1, 1, 1, 2, 1, 1, 1 -} }; -// clang-format on -#endif diff --git a/keyboards/splitkb/kyria/rev1/info.json b/keyboards/splitkb/kyria/rev1/info.json index 1e21c60978..54758180fa 100644 --- a/keyboards/splitkb/kyria/rev1/info.json +++ b/keyboards/splitkb/kyria/rev1/info.json @@ -19,6 +19,28 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"matrix": [2, 1], "x": 91, "y": 40, "flags": 255}, + {"matrix": [3, 2], "x": 77, "y": 56, "flags": 255}, + {"matrix": [3, 3], "x": 63, "y": 56, "flags": 255}, + {"matrix": [1, 2], "x": 77, "y": 24, "flags": 255}, + {"matrix": [0, 3], "x": 63, "y": 8, "flags": 255}, + {"matrix": [0, 6], "x": 21, "y": 8, "flags": 255}, + {"matrix": [2, 6], "x": 21, "y": 40, "flags": 255}, + {"matrix": [2, 5], "x": 35, "y": 40, "flags": 255}, + {"matrix": [2, 7], "x": 7, "y": 40, "flags": 255}, + {"matrix": [0, 7], "x": 7, "y": 8, "flags": 255}, + {"matrix": [6, 1], "x": 133, "y": 40, "flags": 255}, + {"matrix": [7, 2], "x": 147, "y": 56, "flags": 255}, + {"matrix": [7, 3], "x": 161, "y": 56, "flags": 255}, + {"matrix": [5, 2], "x": 147, "y": 24, "flags": 255}, + {"matrix": [4, 3], "x": 161, "y": 8, "flags": 255}, + {"matrix": [4, 6], "x": 203, "y": 8, "flags": 255}, + {"matrix": [6, 6], "x": 203, "y": 40, "flags": 255}, + {"matrix": [6, 5], "x": 189, "y": 40, "flags": 255}, + {"matrix": [6, 7], "x": 217, "y": 40, "flags": 255}, + {"matrix": [4, 7], "x": 217, "y": 8, "flags": 255} + ], "max_brightness": 170, "sleep": true, "split_count": [10, 10] diff --git a/keyboards/splitkb/kyria/rev1/rev1.c b/keyboards/splitkb/kyria/rev1/rev1.c index db14411933..2b64504cc3 100644 --- a/keyboards/splitkb/kyria/rev1/rev1.c +++ b/keyboards/splitkb/kyria/rev1/rev1.c @@ -32,34 +32,3 @@ __attribute__ ((weak)) const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATR const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = {1, 0}; # endif #endif - -#ifdef RGB_MATRIX_ENABLE -/* Map physical under glow LEDs for RGB matrix support - * - * 09, 05, xx, xx, 04, xx, xx, 14, xx, xx, 15, 19, - * xx, xx, xx, xx, xx, 03, 13, xx, xx, xx, xx, xx, - * 08, 06, 07, xx, xx, xx, 00, xx, xx, 10, xx, xx, xx, 17, 16, 18, - * xx, 02, 01, xx, xx, xx, xx, 11, 12, xx - */ -led_config_t g_led_config = { { - // Key Matrix to LED Index - { NO_LED, NO_LED, NO_LED, 4, NO_LED, NO_LED, 5, 9 }, - { NO_LED, NO_LED, 3, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, 0, NO_LED, NO_LED, NO_LED, 7, 6, 8 }, - { NO_LED, NO_LED, 1, 2, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, 14, NO_LED, NO_LED, 15, 19 }, - { NO_LED, NO_LED, 13, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, 10, NO_LED, NO_LED, NO_LED, 17, 16, 18 }, - { NO_LED, NO_LED, 11, 12, NO_LED, NO_LED, NO_LED, NO_LED }, -}, { - // LED Index to Physical Position - {91,40}, {77,56}, {63,56}, {77,24}, {63,8}, {21,8}, {21,40}, {35,40}, {7,40}, {7,8}, - {133,40}, {147,56}, {161,56}, {147,24}, {161,8}, {203,8}, {203,40}, {189,40}, {217,40}, {217,8} -}, { - // LED Index to Flag - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL -} }; -#endif diff --git a/keyboards/splitkb/kyria/rev2/info.json b/keyboards/splitkb/kyria/rev2/info.json index d1507a26b0..41c55cc025 100644 --- a/keyboards/splitkb/kyria/rev2/info.json +++ b/keyboards/splitkb/kyria/rev2/info.json @@ -19,6 +19,28 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"matrix": [1, 2], "x": 77, "y": 24, "flags": 255}, + {"matrix": [0, 3], "x": 63, "y": 8, "flags": 255}, + {"matrix": [0, 6], "x": 21, "y": 8, "flags": 255}, + {"matrix": [2, 6], "x": 21, "y": 40, "flags": 255}, + {"matrix": [2, 5], "x": 35, "y": 40, "flags": 255}, + {"matrix": [3, 3], "x": 63, "y": 56, "flags": 255}, + {"matrix": [3, 2], "x": 77, "y": 56, "flags": 255}, + {"matrix": [2, 1], "x": 91, "y": 40, "flags": 255}, + {"matrix": [2, 7], "x": 7, "y": 40, "flags": 255}, + {"matrix": [0, 7], "x": 7, "y": 8, "flags": 255}, + {"matrix": [5, 2], "x": 147, "y": 24, "flags": 255}, + {"matrix": [4, 3], "x": 161, "y": 8, "flags": 255}, + {"matrix": [4, 6], "x": 203, "y": 8, "flags": 255}, + {"matrix": [6, 6], "x": 203, "y": 40, "flags": 255}, + {"matrix": [6, 5], "x": 189, "y": 40, "flags": 255}, + {"matrix": [7, 3], "x": 161, "y": 56, "flags": 255}, + {"matrix": [7, 2], "x": 147, "y": 56, "flags": 255}, + {"matrix": [6, 1], "x": 133, "y": 40, "flags": 255}, + {"matrix": [6, 7], "x": 217, "y": 40, "flags": 255}, + {"matrix": [4, 7], "x": 217, "y": 8, "flags": 255} + ], "max_brightness": 170, "sleep": true, "split_count": [10, 10] diff --git a/keyboards/splitkb/kyria/rev2/rev2.c b/keyboards/splitkb/kyria/rev2/rev2.c index 37300c8188..70f894b64d 100644 --- a/keyboards/splitkb/kyria/rev2/rev2.c +++ b/keyboards/splitkb/kyria/rev2/rev2.c @@ -47,33 +47,3 @@ __attribute__ ((weak)) const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATR const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = {1, 0}; # endif #endif - -#ifdef RGB_MATRIX_ENABLE -/* Map physical under glow LEDs for RGB matrix support - * 09, 02, xx, xx, 01, xx, xx, 11, xx, xx, 12, 19, - * xx, xx, xx, xx, xx, 00, 10, xx, xx, xx, xx, xx, - * 08, 03, 04, xx, xx, xx, 07, xx, xx, 17, xx, xx, xx, 14, 13, 18, - * xx, 05, 06, xx, xx, xx, xx, 16, 15, xx - */ -led_config_t g_led_config = { { - // Key Matrix to LED Index - { NO_LED, NO_LED, NO_LED, 1, NO_LED, NO_LED, 2, 9 }, - { NO_LED, NO_LED, 0, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, 7, NO_LED, NO_LED, NO_LED, 4, 3, 8 }, - { NO_LED, NO_LED, 6, 5, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, 11, NO_LED, NO_LED, 12, 19 }, - { NO_LED, NO_LED, 10, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, 17, NO_LED, NO_LED, NO_LED, 14, 13, 18 }, - { NO_LED, NO_LED, 16, 15, NO_LED, NO_LED, NO_LED, NO_LED }, -}, { - // LED Index to Physical Position - {77,24}, {63,8}, {21,8}, {21,40}, {35,40}, {63,56}, {77,56}, {91,40}, {7,40}, {7,8}, - {147,24}, {161,8}, {203,8}, {203,40}, {189,40}, {161,56}, {147,56}, {133,40}, {217,40}, {217,8} -}, { - // LED Index to Flag - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL -} }; -#endif diff --git a/keyboards/system76/launch_1/keyboard.json b/keyboards/system76/launch_1/keyboard.json index b5317dd9bc..3a7ecc928e 100644 --- a/keyboards/system76/launch_1/keyboard.json +++ b/keyboards/system76/launch_1/keyboard.json @@ -47,6 +47,92 @@ "hue": 142 }, "driver": "ws2812", + "layout": [ + {"matrix": [4, 12], "x": 209, "y": 51, "flags": 4}, + {"matrix": [4, 11], "x": 190, "y": 51, "flags": 4}, + {"matrix": [4, 10], "x": 171, "y": 51, "flags": 4}, + {"matrix": [4, 9], "x": 156, "y": 51, "flags": 4}, + {"matrix": [4, 8], "x": 140, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 125, "y": 51, "flags": 4}, + {"matrix": [4, 6], "x": 110, "y": 51, "flags": 4}, + {"matrix": [4, 5], "x": 95, "y": 51, "flags": 4}, + {"matrix": [4, 4], "x": 80, "y": 51, "flags": 4}, + {"matrix": [4, 3], "x": 65, "y": 51, "flags": 4}, + {"matrix": [4, 2], "x": 49, "y": 51, "flags": 4}, + {"matrix": [4, 1], "x": 34, "y": 51, "flags": 4}, + {"matrix": [4, 0], "x": 11, "y": 51, "flags": 4}, + {"matrix": [5, 0], "x": 8, "y": 64, "flags": 4}, + {"matrix": [5, 1], "x": 27, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 42, "y": 64, "flags": 4}, + {"matrix": [5, 3], "x": 57, "y": 64, "flags": 4}, + {"matrix": [5, 4], "x": 80, "y": 64, "flags": 4}, + {"matrix": [5, 6], "x": 110, "y": 64, "flags": 4}, + {"matrix": [5, 7], "x": 133, "y": 64, "flags": 4}, + {"matrix": [5, 8], "x": 148, "y": 64, "flags": 4}, + {"matrix": [5, 9], "x": 167, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 194, "y": 64, "flags": 4}, + {"matrix": [5, 11], "x": 209, "y": 64, "flags": 4}, + {"matrix": [5, 12], "x": 224, "y": 64, "flags": 4}, + {"matrix": [5, 5], "x": 224, "y": 38, "flags": 4}, + {"matrix": [3, 12], "x": 197, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 178, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 163, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 148, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 133, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 118, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 103, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 87, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 72, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 57, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 42, "y": 38, "flags": 4}, + {"matrix": [3, 1], "x": 27, "y": 38, "flags": 4}, + {"matrix": [3, 0], "x": 8, "y": 38, "flags": 4}, + {"matrix": [2, 0], "x": 4, "y": 26, "flags": 4}, + {"matrix": [2, 1], "x": 23, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 38, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 53, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 68, "y": 26, "flags": 4}, + {"matrix": [2, 5], "x": 84, "y": 26, "flags": 4}, + {"matrix": [2, 6], "x": 99, "y": 26, "flags": 4}, + {"matrix": [2, 7], "x": 114, "y": 26, "flags": 4}, + {"matrix": [2, 8], "x": 129, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 26, "flags": 4}, + {"matrix": [2, 10], "x": 159, "y": 26, "flags": 4}, + {"matrix": [2, 11], "x": 175, "y": 26, "flags": 4}, + {"matrix": [2, 12], "x": 190, "y": 26, "flags": 4}, + {"matrix": [2, 13], "x": 205, "y": 26, "flags": 4}, + {"matrix": [5, 13], "x": 224, "y": 26, "flags": 4}, + {"matrix": [4, 13], "x": 224, "y": 13, "flags": 4}, + {"matrix": [1, 13], "x": 201, "y": 13, "flags": 4}, + {"matrix": [1, 12], "x": 182, "y": 13, "flags": 4}, + {"matrix": [1, 11], "x": 167, "y": 13, "flags": 4}, + {"matrix": [1, 10], "x": 152, "y": 13, "flags": 4}, + {"matrix": [1, 9], "x": 137, "y": 13, "flags": 4}, + {"matrix": [1, 8], "x": 121, "y": 13, "flags": 4}, + {"matrix": [1, 7], "x": 106, "y": 13, "flags": 4}, + {"matrix": [1, 6], "x": 91, "y": 13, "flags": 4}, + {"matrix": [1, 5], "x": 76, "y": 13, "flags": 4}, + {"matrix": [1, 4], "x": 61, "y": 13, "flags": 4}, + {"matrix": [1, 3], "x": 46, "y": 13, "flags": 4}, + {"matrix": [1, 2], "x": 30, "y": 13, "flags": 4}, + {"matrix": [1, 1], "x": 15, "y": 13, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 13, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 46, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 61, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 76, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 91, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 106, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 121, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 137, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 152, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 167, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 182, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 201, "y": 0, "flags": 4}, + {"matrix": [3, 13], "x": 224, "y": 0, "flags": 4} + ], "max_brightness": 176, "sleep": true }, diff --git a/keyboards/system76/launch_1/launch_1.c b/keyboards/system76/launch_1/launch_1.c index 2cff70076e..3a4c4749c6 100644 --- a/keyboards/system76/launch_1/launch_1.c +++ b/keyboards/system76/launch_1/launch_1.c @@ -21,59 +21,6 @@ #include "usb_mux.h" // clang-format off -#ifdef RGB_MATRIX_ENABLE -// LEDs by index -// 0 1 2 3 4 5 6 7 8 9 -// 00 LM4 LL4 LK4 LJ4 LI4 LH4 LG4 LF4 LE4 LD4 -// 10 LC4 LB4 LA4 LA5 LB5 LC5 LD5 LE5 LG5 LH5 -// 20 LI5 LJ5 LK5 LL5 LM5 LO3 LM3 LL3 LK3 LJ3 -// 30 LI3 LH3 LG3 LF3 LE3 LD3 LC3 LB3 LA3 LA2 -// 40 LB2 LC2 LD2 LE2 LF2 LG2 LH2 LI2 LJ2 LK2 -// 50 LL2 LM2 LN2 LO2 LO1 LN1 LM1 LL1 LK1 LJ1 -// 60 LI1 LH1 LG1 LF1 LE1 LD1 LC1 LB1 LA1 LA0 -// 70 LB0 LC0 LD0 LE0 LF0 LG0 LH0 LI0 LJ0 LK0 -// 80 LL0 LM0 LN0 LO0 -led_config_t g_led_config = { { - // Key matrix to LED index -/* A B C D E F G H I J K L M N O */ -/* 0 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, */ -/* 1 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, */ -/* 2 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, */ -/* 3 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, */ -/* 4 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, */ -/* 5 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 */ - { 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82 }, - { 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55 }, - { 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52 }, - { 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 83 }, - { 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 54 }, - { 13, 14, 15, 16, 17, 25, 18, 19, 20, 21, 22, 23, 24, 53 }, -}, { - // LED index to physical position (see leds.sh in `launch' repo) -/* 00 */ {209, 51}, {190, 51}, {171, 51}, {156, 51}, {140, 51}, {125, 51}, {110, 51}, {95, 51}, {80, 51}, {65, 51}, -/* 10 */ {49, 51}, {34, 51}, {11, 51}, {8, 64}, {27, 64}, {42, 64}, {57, 64}, {80, 64}, {110, 64}, {133, 64}, -/* 20 */ {148, 64}, {167, 64}, {194, 64}, {209, 64}, {224, 64}, {224, 38}, {197, 38}, {178, 38}, {163, 38}, {148, 38}, -/* 30 */ {133, 38}, {118, 38}, {103, 38}, {87, 38}, {72, 38}, {57, 38}, {42, 38}, {27, 38}, {8, 38}, {4, 26}, -/* 40 */ {23, 26}, {38, 26}, {53, 26}, {68, 26}, {84, 26}, {99, 26}, {114, 26}, {129, 26}, {144, 26}, {159, 26}, -/* 50 */ {175, 26}, {190, 26}, {205, 26}, {224, 26}, {224, 13}, {201, 13}, {182, 13}, {167, 13}, {152, 13}, {137, 13}, -/* 60 */ {121, 13}, {106, 13}, {91, 13}, {76, 13}, {61, 13}, {46, 13}, {30, 13}, {15, 13}, {0, 13}, {0, 0}, -/* 70 */ {15, 0}, {30, 0}, {46, 0}, {61, 0}, {76, 0}, {91, 0}, {106, 0}, {121, 0}, {137, 0}, {152, 0}, -/* 80 */ {167, 0}, {182, 0}, {201, 0}, {224, 0} -}, { - // LED index to flags (set all to LED_FLAG_KEYLIGHT) - /* 0 1 2 3 4 5 6 7 8 9 */ -/* 00 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -/* 10 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -/* 20 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -/* 30 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -/* 40 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -/* 50 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -/* 60 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -/* 70 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -/* 80 */ 4, 4, 4, 4 -} }; -#endif // RGB_MATRIX_ENABLE - bool eeprom_is_valid(void) { return ( eeprom_read_word(((void *)EEPROM_MAGIC_ADDR)) == EEPROM_MAGIC && From d17671cd23ffe94be29b696fbdcaeeb2b5d47018 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:07:47 -0600 Subject: [PATCH 36/99] Migrate `g_led_config` to DD (QR) (#25623) --- keyboards/quarkeys/z40/keyboard.json | 49 ++++++++ keyboards/quarkeys/z40/z40.c | 44 ------- keyboards/rgbkb/mun/rev1/keyboard.json | 100 +++++++++++++++ keyboards/rgbkb/mun/rev1/rev1.c | 47 ------- keyboards/rgbkb/sol/rev1/keyboard.json | 74 ++++++++++- keyboards/rgbkb/sol/rev1/rev1.c | 46 ------- keyboards/rgbkb/sol3/rev1/keyboard.json | 158 ++++++++++++++++++++++++ keyboards/rgbkb/sol3/rev1/rev1.c | 57 --------- 8 files changed, 380 insertions(+), 195 deletions(-) delete mode 100644 keyboards/quarkeys/z40/z40.c delete mode 100644 keyboards/rgbkb/sol/rev1/rev1.c diff --git a/keyboards/quarkeys/z40/keyboard.json b/keyboards/quarkeys/z40/keyboard.json index 05d81e5b6f..0f13d8aefd 100644 --- a/keyboards/quarkeys/z40/keyboard.json +++ b/keyboards/quarkeys/z40/keyboard.json @@ -29,6 +29,55 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [3, 11], "x": 225, "y": 64, "flags": 1}, + {"matrix": [3, 10], "x": 200, "y": 64, "flags": 1}, + {"matrix": [3, 9], "x": 180, "y": 64, "flags": 1}, + {"matrix": [3, 8], "x": 160, "y": 64, "flags": 1}, + {"matrix": [3, 7], "x": 140, "y": 64, "flags": 1}, + {"matrix": [3, 5], "x": 110, "y": 64, "flags": 1}, + {"matrix": [3, 4], "x": 80, "y": 64, "flags": 1}, + {"matrix": [3, 3], "x": 60, "y": 64, "flags": 1}, + {"matrix": [3, 2], "x": 40, "y": 64, "flags": 1}, + {"matrix": [3, 1], "x": 20, "y": 64, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [2, 11], "x": 225, "y": 42, "flags": 1}, + {"matrix": [2, 10], "x": 200, "y": 42, "flags": 2}, + {"matrix": [2, 9], "x": 180, "y": 42, "flags": 2}, + {"matrix": [2, 8], "x": 160, "y": 42, "flags": 2}, + {"matrix": [2, 7], "x": 140, "y": 42, "flags": 2}, + {"matrix": [2, 6], "x": 120, "y": 42, "flags": 2}, + {"matrix": [2, 5], "x": 100, "y": 42, "flags": 2}, + {"matrix": [2, 4], "x": 80, "y": 42, "flags": 2}, + {"x": 60, "y": 42, "flags": 2}, + {"matrix": [2, 2], "x": 40, "y": 42, "flags": 2}, + {"matrix": [2, 1], "x": 20, "y": 42, "flags": 2}, + {"matrix": [2, 0], "x": 0, "y": 42, "flags": 1}, + {"matrix": [1, 11], "x": 225, "y": 21, "flags": 1}, + {"matrix": [1, 10], "x": 200, "y": 21, "flags": 2}, + {"matrix": [1, 9], "x": 180, "y": 21, "flags": 2}, + {"matrix": [1, 8], "x": 160, "y": 21, "flags": 2}, + {"matrix": [1, 7], "x": 140, "y": 21, "flags": 2}, + {"matrix": [1, 6], "x": 120, "y": 21, "flags": 2}, + {"matrix": [2, 3], "x": 100, "y": 21, "flags": 2}, + {"matrix": [1, 4], "x": 80, "y": 21, "flags": 2}, + {"matrix": [1, 3], "x": 60, "y": 21, "flags": 2}, + {"matrix": [1, 2], "x": 40, "y": 21, "flags": 2}, + {"matrix": [1, 1], "x": 20, "y": 21, "flags": 2}, + {"matrix": [1, 0], "x": 0, "y": 21, "flags": 1}, + {"matrix": [0, 11], "x": 225, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 200, "y": 0, "flags": 2}, + {"matrix": [0, 9], "x": 180, "y": 0, "flags": 2}, + {"matrix": [0, 8], "x": 160, "y": 0, "flags": 2}, + {"matrix": [0, 7], "x": 140, "y": 0, "flags": 2}, + {"matrix": [0, 6], "x": 120, "y": 0, "flags": 2}, + {"matrix": [0, 5], "x": 100, "y": 0, "flags": 2}, + {"matrix": [0, 4], "x": 80, "y": 0, "flags": 2}, + {"matrix": [0, 3], "x": 60, "y": 0, "flags": 2}, + {"matrix": [0, 2], "x": 40, "y": 0, "flags": 2}, + {"matrix": [0, 1], "x": 20, "y": 0, "flags": 2}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1} + ], "sat_steps": 8, "val_steps": 8, "speed_steps": 10, diff --git a/keyboards/quarkeys/z40/z40.c b/keyboards/quarkeys/z40/z40.c deleted file mode 100644 index edd8946c11..0000000000 --- a/keyboards/quarkeys/z40/z40.c +++ /dev/null @@ -1,44 +0,0 @@ -/* -/ Copyright 2022 quarkeys -/ 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - /* - { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B }, \ - { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B }, \ - { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B }, \ - { k30, k31, k32, k33, k34, k35, XXX, k36, k37, k38, k39, k3A }\ - */ - { 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35 }, - { 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23 }, - { 22, 21, 20, 29, 18, 17, 16, 15, 14, 13, 12, 11 }, - { 10, 9, 8, 7, 6, 5, NO_LED, 4, 3, 2, 1, 0 } - }, - { // Index to Physical Position - {225, 64}, {200, 64}, {180, 64}, {160, 64}, {140, 64}, {110, 64}, { 80, 64}, { 60, 64}, { 40, 64}, { 20, 64}, { 0, 64}, - {225, 42}, {200, 42}, {180, 42}, {160, 42}, {140, 42}, {120, 42}, {100, 42}, { 80, 42}, { 60, 42}, { 40, 42}, { 20, 42}, { 0, 42}, - {225, 21}, {200, 21}, {180, 21}, {160, 21}, {140, 21}, {120, 21}, {100, 21}, { 80, 21}, { 60, 21}, { 40, 21}, { 20, 21}, { 0, 21}, - {225, 0}, {200, 0}, {180, 0}, {160, 0}, {140, 0}, {120, 0}, {100, 0}, { 80, 0}, { 60, 0}, { 40, 0}, { 20, 0}, { 0, 0} - }, - { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 - } -}; -#endif diff --git a/keyboards/rgbkb/mun/rev1/keyboard.json b/keyboards/rgbkb/mun/rev1/keyboard.json index ec02a2f2dd..96cbf887f7 100644 --- a/keyboards/rgbkb/mun/rev1/keyboard.json +++ b/keyboards/rgbkb/mun/rev1/keyboard.json @@ -88,6 +88,106 @@ }, "center_point": [128, 34], "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 16, "y": 16, "flags": 1}, + {"matrix": [0, 1], "x": 34, "y": 16, "flags": 4}, + {"matrix": [0, 2], "x": 49, "y": 16, "flags": 4}, + {"matrix": [0, 3], "x": 64, "y": 16, "flags": 4}, + {"matrix": [0, 4], "x": 79, "y": 16, "flags": 4}, + {"matrix": [0, 5], "x": 94, "y": 16, "flags": 4}, + {"matrix": [0, 6], "x": 109, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 109, "y": 31, "flags": 4}, + {"matrix": [1, 5], "x": 94, "y": 31, "flags": 4}, + {"matrix": [1, 4], "x": 79, "y": 31, "flags": 4}, + {"matrix": [1, 3], "x": 64, "y": 31, "flags": 4}, + {"matrix": [1, 2], "x": 49, "y": 31, "flags": 4}, + {"matrix": [1, 1], "x": 34, "y": 31, "flags": 4}, + {"matrix": [1, 0], "x": 16, "y": 31, "flags": 1}, + {"matrix": [2, 0], "x": 16, "y": 46, "flags": 1}, + {"matrix": [2, 1], "x": 34, "y": 46, "flags": 4}, + {"matrix": [2, 2], "x": 49, "y": 46, "flags": 4}, + {"matrix": [2, 3], "x": 64, "y": 46, "flags": 4}, + {"matrix": [2, 4], "x": 79, "y": 46, "flags": 4}, + {"matrix": [2, 5], "x": 94, "y": 46, "flags": 4}, + {"matrix": [2, 6], "x": 109, "y": 46, "flags": 4}, + {"matrix": [3, 6], "x": 109, "y": 61, "flags": 4}, + {"matrix": [3, 5], "x": 94, "y": 61, "flags": 4}, + {"matrix": [3, 4], "x": 79, "y": 61, "flags": 4}, + {"matrix": [3, 3], "x": 64, "y": 61, "flags": 4}, + {"matrix": [3, 2], "x": 49, "y": 61, "flags": 4}, + {"matrix": [3, 1], "x": 34, "y": 61, "flags": 4}, + {"matrix": [3, 0], "x": 16, "y": 61, "flags": 1}, + {"matrix": [4, 0], "x": 16, "y": 76, "flags": 1}, + {"matrix": [4, 1], "x": 34, "y": 76, "flags": 1}, + {"matrix": [4, 2], "x": 49, "y": 76, "flags": 1}, + {"matrix": [4, 3], "x": 64, "y": 76, "flags": 1}, + {"matrix": [4, 4], "x": 83, "y": 72, "flags": 1}, + {"matrix": [4, 5], "x": 98, "y": 72, "flags": 1}, + {"matrix": [4, 6], "x": 113, "y": 72, "flags": 1}, + {"x": 97, "y": 5, "flags": 2}, + {"x": 91, "y": 5, "flags": 2}, + {"x": 86, "y": 5, "flags": 2}, + {"x": 80, "y": 5, "flags": 2}, + {"x": 75, "y": 5, "flags": 2}, + {"x": 69, "y": 5, "flags": 2}, + {"x": 63, "y": 5, "flags": 2}, + {"x": 58, "y": 5, "flags": 2}, + {"x": 52, "y": 5, "flags": 2}, + {"x": 46, "y": 5, "flags": 2}, + {"x": 41, "y": 5, "flags": 2}, + {"x": 35, "y": 5, "flags": 2}, + {"x": 30, "y": 5, "flags": 2}, + {"x": 24, "y": 5, "flags": 2}, + {"matrix": [7, 0], "x": 240, "y": 16, "flags": 1}, + {"matrix": [7, 1], "x": 222, "y": 16, "flags": 4}, + {"matrix": [7, 2], "x": 207, "y": 16, "flags": 4}, + {"matrix": [7, 3], "x": 192, "y": 16, "flags": 4}, + {"matrix": [7, 4], "x": 177, "y": 16, "flags": 4}, + {"matrix": [7, 5], "x": 162, "y": 16, "flags": 4}, + {"matrix": [7, 6], "x": 147, "y": 16, "flags": 4}, + {"matrix": [8, 6], "x": 147, "y": 31, "flags": 4}, + {"matrix": [8, 5], "x": 162, "y": 31, "flags": 4}, + {"matrix": [8, 4], "x": 177, "y": 31, "flags": 4}, + {"matrix": [8, 3], "x": 192, "y": 31, "flags": 4}, + {"matrix": [8, 2], "x": 207, "y": 31, "flags": 4}, + {"matrix": [8, 1], "x": 222, "y": 31, "flags": 4}, + {"matrix": [8, 0], "x": 240, "y": 31, "flags": 1}, + {"matrix": [9, 0], "x": 240, "y": 46, "flags": 1}, + {"matrix": [9, 1], "x": 222, "y": 46, "flags": 4}, + {"matrix": [9, 2], "x": 207, "y": 46, "flags": 4}, + {"matrix": [9, 3], "x": 192, "y": 46, "flags": 4}, + {"matrix": [9, 4], "x": 177, "y": 46, "flags": 4}, + {"matrix": [9, 5], "x": 162, "y": 46, "flags": 4}, + {"matrix": [9, 6], "x": 147, "y": 46, "flags": 4}, + {"matrix": [10, 6], "x": 147, "y": 61, "flags": 4}, + {"matrix": [10, 5], "x": 162, "y": 61, "flags": 4}, + {"matrix": [10, 4], "x": 177, "y": 61, "flags": 4}, + {"matrix": [10, 3], "x": 192, "y": 61, "flags": 4}, + {"matrix": [10, 2], "x": 207, "y": 61, "flags": 4}, + {"matrix": [10, 1], "x": 222, "y": 61, "flags": 4}, + {"matrix": [10, 0], "x": 240, "y": 61, "flags": 1}, + {"matrix": [11, 0], "x": 240, "y": 76, "flags": 1}, + {"matrix": [11, 1], "x": 222, "y": 76, "flags": 1}, + {"matrix": [11, 2], "x": 207, "y": 76, "flags": 1}, + {"matrix": [11, 3], "x": 192, "y": 76, "flags": 1}, + {"matrix": [11, 4], "x": 180, "y": 72, "flags": 1}, + {"matrix": [11, 5], "x": 165, "y": 72, "flags": 1}, + {"matrix": [11, 6], "x": 150, "y": 72, "flags": 1}, + {"x": 159, "y": 5, "flags": 2}, + {"x": 164, "y": 5, "flags": 2}, + {"x": 170, "y": 5, "flags": 2}, + {"x": 176, "y": 5, "flags": 2}, + {"x": 181, "y": 5, "flags": 2}, + {"x": 187, "y": 5, "flags": 2}, + {"x": 192, "y": 5, "flags": 2}, + {"x": 198, "y": 5, "flags": 2}, + {"x": 204, "y": 5, "flags": 2}, + {"x": 209, "y": 5, "flags": 2}, + {"x": 215, "y": 5, "flags": 2}, + {"x": 221, "y": 5, "flags": 2}, + {"x": 226, "y": 5, "flags": 2}, + {"x": 232, "y": 5, "flags": 2} + ], "led_flush_limit": 33, "led_process_limit": 10, "sleep": true, diff --git a/keyboards/rgbkb/mun/rev1/rev1.c b/keyboards/rgbkb/mun/rev1/rev1.c index 206a30d654..7a16d7cb86 100644 --- a/keyboards/rgbkb/mun/rev1/rev1.c +++ b/keyboards/rgbkb/mun/rev1/rev1.c @@ -42,53 +42,6 @@ bool touch_encoder_tapped_kb(uint8_t index, uint8_t section) { return false; } -#ifdef RGB_MATRIX_ENABLE -// clang-format off -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6 }, - { 13, 12, 11, 10, 9, 8, 7 }, - { 14, 15, 16, 17, 18, 19, 20 }, - { 27, 26, 25, 24, 23, 22, 21 }, - { 28, 29, 30, 31, 32, 33, 34 }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { 49, 50, 51, 52, 53, 54, 55 }, - { 62, 61, 60, 59, 58, 57, 56 }, - { 63, 64, 65, 66, 67, 68, 69 }, - { 76, 75, 74, 73, 72, 71, 70 }, - { 77, 78, 79, 80, 81, 82, 83 }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } -}, { - { 16, 16},{ 34, 16},{ 49, 16},{ 64, 16},{ 79, 16},{ 94, 16},{ 109, 16}, - { 109, 31},{ 94, 31},{ 79, 31},{ 64, 31},{ 49, 31},{ 34, 31},{ 16, 31}, - { 16, 46},{ 34, 46},{ 49, 46},{ 64, 46},{ 79, 46},{ 94, 46},{ 109, 46}, - { 109, 61},{ 94, 61},{ 79, 61},{ 64, 61},{ 49, 61},{ 34, 61},{ 16, 61}, - { 16, 76},{ 34, 76},{ 49, 76},{ 64, 76},{ 83, 72},{ 98, 72},{ 113, 72}, - { 97, 5},{ 91, 5},{ 86, 5},{ 80, 5},{ 75, 5},{ 69, 5},{ 63, 5},{ 58, 5},{ 52, 5},{ 46, 5},{ 41, 5},{ 35, 5},{ 30, 5},{ 24, 5}, - { 240, 16},{ 222, 16},{ 207, 16},{ 192, 16},{ 177, 16},{ 162, 16},{ 147, 16}, - { 147, 31},{ 162, 31},{ 177, 31},{ 192, 31},{ 207, 31},{ 222, 31},{ 240, 31}, - { 240, 46},{ 222, 46},{ 207, 46},{ 192, 46},{ 177, 46},{ 162, 46},{ 147, 46}, - { 147, 61},{ 162, 61},{ 177, 61},{ 192, 61},{ 207, 61},{ 222, 61},{ 240, 61}, - { 240, 76},{ 222, 76},{ 207, 76},{ 192, 76},{ 180, 72},{ 165, 72},{ 150, 72}, - { 159, 5},{ 164, 5},{ 170, 5},{ 176, 5},{ 181, 5},{ 187, 5},{ 192, 5},{ 198, 5},{ 204, 5},{ 209, 5},{ 215, 5},{ 221, 5},{ 226, 5},{ 232, 5}, -}, { - 1, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -} }; -// clang-format on -#endif - void keyboard_post_init_kb(void) { touch_encoder_init(); transaction_register_rpc(TOUCH_ENCODER_SYNC, touch_encoder_slave_sync); diff --git a/keyboards/rgbkb/sol/rev1/keyboard.json b/keyboards/rgbkb/sol/rev1/keyboard.json index 9a4c538e55..6bb41e1c37 100644 --- a/keyboards/rgbkb/sol/rev1/keyboard.json +++ b/keyboards/rgbkb/sol/rev1/keyboard.json @@ -63,7 +63,79 @@ "solid_multisplash": true }, "center_point": [112, 35], - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 21, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 38, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 56, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 73, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 91, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 112, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 18, "flags": 1}, + {"matrix": [1, 1], "x": 21, "y": 18, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 18, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 18, "flags": 4}, + {"matrix": [1, 4], "x": 73, "y": 18, "flags": 4}, + {"matrix": [1, 5], "x": 91, "y": 18, "flags": 4}, + {"matrix": [1, 6], "x": 108, "y": 13, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 35, "flags": 1}, + {"matrix": [2, 1], "x": 21, "y": 35, "flags": 4}, + {"matrix": [2, 2], "x": 38, "y": 35, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 35, "flags": 4}, + {"matrix": [2, 4], "x": 73, "y": 35, "flags": 4}, + {"matrix": [2, 5], "x": 91, "y": 35, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 31, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 52, "flags": 1}, + {"matrix": [3, 1], "x": 21, "y": 52, "flags": 4}, + {"matrix": [3, 2], "x": 38, "y": 52, "flags": 4}, + {"matrix": [3, 3], "x": 56, "y": 52, "flags": 4}, + {"matrix": [3, 4], "x": 73, "y": 52, "flags": 4}, + {"matrix": [3, 5], "x": 91, "y": 52, "flags": 4}, + {"matrix": [3, 6], "x": 108, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 70, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 70, "flags": 1}, + {"matrix": [4, 2], "x": 38, "y": 70, "flags": 1}, + {"matrix": [4, 3], "x": 56, "y": 70, "flags": 1}, + {"matrix": [4, 4], "x": 73, "y": 70, "flags": 1}, + {"matrix": [5, 5], "x": 89, "y": 91, "flags": 1}, + {"matrix": [5, 6], "x": 101, "y": 103, "flags": 1}, + {"matrix": [6, 0], "x": 224, "y": 0, "flags": 1}, + {"matrix": [6, 1], "x": 203, "y": 0, "flags": 4}, + {"matrix": [6, 2], "x": 186, "y": 0, "flags": 4}, + {"matrix": [6, 3], "x": 168, "y": 0, "flags": 4}, + {"matrix": [6, 4], "x": 151, "y": 0, "flags": 4}, + {"matrix": [6, 5], "x": 133, "y": 0, "flags": 4}, + {"matrix": [6, 6], "x": 112, "y": 0, "flags": 1}, + {"matrix": [7, 0], "x": 224, "y": 18, "flags": 1}, + {"matrix": [7, 1], "x": 203, "y": 18, "flags": 4}, + {"matrix": [7, 2], "x": 186, "y": 18, "flags": 4}, + {"matrix": [7, 3], "x": 168, "y": 18, "flags": 4}, + {"matrix": [7, 4], "x": 151, "y": 18, "flags": 4}, + {"matrix": [7, 5], "x": 133, "y": 18, "flags": 4}, + {"matrix": [7, 6], "x": 116, "y": 13, "flags": 1}, + {"matrix": [8, 0], "x": 224, "y": 35, "flags": 1}, + {"matrix": [8, 1], "x": 203, "y": 35, "flags": 4}, + {"matrix": [8, 2], "x": 186, "y": 35, "flags": 4}, + {"matrix": [8, 3], "x": 168, "y": 35, "flags": 4}, + {"matrix": [8, 4], "x": 151, "y": 35, "flags": 4}, + {"matrix": [8, 5], "x": 133, "y": 35, "flags": 4}, + {"matrix": [8, 6], "x": 116, "y": 31, "flags": 1}, + {"matrix": [9, 0], "x": 224, "y": 52, "flags": 1}, + {"matrix": [9, 1], "x": 203, "y": 52, "flags": 4}, + {"matrix": [9, 2], "x": 186, "y": 52, "flags": 4}, + {"matrix": [9, 3], "x": 168, "y": 52, "flags": 4}, + {"matrix": [9, 4], "x": 151, "y": 52, "flags": 4}, + {"matrix": [9, 5], "x": 133, "y": 52, "flags": 4}, + {"matrix": [9, 6], "x": 116, "y": 48, "flags": 1}, + {"matrix": [10, 0], "x": 224, "y": 70, "flags": 1}, + {"matrix": [10, 1], "x": 203, "y": 70, "flags": 1}, + {"matrix": [10, 2], "x": 186, "y": 70, "flags": 1}, + {"matrix": [10, 3], "x": 168, "y": 70, "flags": 1}, + {"matrix": [10, 4], "x": 151, "y": 70, "flags": 1}, + {"matrix": [11, 6], "x": 135, "y": 91, "flags": 1}, + {"x": 123, "y": 103, "flags": 1} + ] }, "rgblight": { "animations": { diff --git a/keyboards/rgbkb/sol/rev1/rev1.c b/keyboards/rgbkb/sol/rev1/rev1.c deleted file mode 100644 index f5997bac00..0000000000 --- a/keyboards/rgbkb/sol/rev1/rev1.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "sol.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6 }, - { 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20 }, - { 21, 22, 23, 24, 25, 26, 27 }, - { 28, 29, 30, 31, 32, 33, 34 }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 33, 34 }, - { 35, 36, 37, 38, 39, 40, 41 }, - { 42, 43, 44, 45, 46, 47, 48 }, - { 49, 50, 51, 52, 53, 54, 55 }, - { 56, 57, 58, 59, 60, 61, 62 }, - { 63, 64, 65, 66, 67, 68, 68 }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 68, 68 } -}, { - // Left Hand Mapped Left to Right - { 0, 0 }, { 21, 0 }, { 38, 0 }, { 56, 0 }, { 73, 0 }, { 91, 0 }, { 112, 0 }, - { 0, 18 }, { 21, 18 }, { 38, 18 }, { 56, 18 }, { 73, 18 }, { 91, 18 }, { 108, 13 }, - { 0, 35 }, { 21, 35 }, { 38, 35 }, { 56, 35 }, { 73, 35 }, { 91, 35 }, { 108, 31 }, - { 0, 52 }, { 21, 52 }, { 38, 52 }, { 56, 52 }, { 73, 52 }, { 91, 52 }, { 108, 48 }, - { 0, 70 }, { 21, 70 }, { 38, 70 }, { 56, 70 }, { 73, 70 }, { 89, 91 }, { 101, 103 }, - // Left Hand Mapped Right to Left - { 224, 0 }, { 203, 0 }, { 186, 0 }, { 168, 0 }, { 151, 0 }, { 133, 0 }, { 112, 0 }, - { 224, 18 }, { 203, 18 }, { 186, 18 }, { 168, 18 }, { 151, 18 }, { 133, 18 }, { 116, 13 }, - { 224, 35 }, { 203, 35 }, { 186, 35 }, { 168, 35 }, { 151, 35 }, { 133, 35 }, { 116, 31 }, - { 224, 52 }, { 203, 52 }, { 186, 52 }, { 168, 52 }, { 151, 52 }, { 133, 52 }, { 116, 48 }, - { 224, 70 }, { 203, 70 }, { 186, 70 }, { 168, 70 }, { 151, 70 }, { 135, 91 }, { 123, 103 }, -}, { - // Left Hand Mapped Left to Right - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, - // Left Hand Mapped Right to Left - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1 -} }; - -#endif - diff --git a/keyboards/rgbkb/sol3/rev1/keyboard.json b/keyboards/rgbkb/sol3/rev1/keyboard.json index dc9e6d4035..f7780ae37a 100644 --- a/keyboards/rgbkb/sol3/rev1/keyboard.json +++ b/keyboards/rgbkb/sol3/rev1/keyboard.json @@ -96,6 +96,164 @@ }, "center_point": [81, 28], "driver": "ws2812", + "layout": [ + {"x": 1, "y": 6, "flags": 2}, + {"x": 1, "y": 13, "flags": 2}, + {"x": 1, "y": 19, "flags": 2}, + {"x": 1, "y": 25, "flags": 2}, + {"x": 1, "y": 31, "flags": 2}, + {"x": 1, "y": 37, "flags": 2}, + {"x": 1, "y": 43, "flags": 2}, + {"x": 1, "y": 49, "flags": 2}, + {"x": 4, "y": 52, "flags": 2}, + {"x": 11, "y": 52, "flags": 2}, + {"x": 17, "y": 52, "flags": 2}, + {"x": 23, "y": 52, "flags": 2}, + {"x": 29, "y": 52, "flags": 2}, + {"x": 35, "y": 52, "flags": 2}, + {"x": 41, "y": 54, "flags": 2}, + {"x": 46, "y": 57, "flags": 2}, + {"x": 52, "y": 60, "flags": 2}, + {"x": 57, "y": 63, "flags": 2}, + {"x": 62, "y": 66, "flags": 2}, + {"x": 68, "y": 69, "flags": 2}, + {"x": 73, "y": 67, "flags": 2}, + {"x": 76, "y": 62, "flags": 2}, + {"x": 79, "y": 57, "flags": 2}, + {"x": 78, "y": 51, "flags": 2}, + {"x": 77, "y": 45, "flags": 2}, + {"x": 76, "y": 39, "flags": 2}, + {"x": 76, "y": 33, "flags": 2}, + {"x": 76, "y": 27, "flags": 2}, + {"x": 76, "y": 21, "flags": 2}, + {"x": 76, "y": 14, "flags": 2}, + {"x": 76, "y": 8, "flags": 2}, + {"x": 72, "y": 3, "flags": 2}, + {"x": 59, "y": 3, "flags": 2}, + {"x": 53, "y": 3, "flags": 2}, + {"x": 46, "y": 3, "flags": 2}, + {"x": 40, "y": 3, "flags": 2}, + {"x": 34, "y": 3, "flags": 2}, + {"x": 28, "y": 3, "flags": 2}, + {"x": 22, "y": 3, "flags": 2}, + {"x": 10, "y": 3, "flags": 2}, + {"x": 3, "y": 3, "flags": 2}, + {"matrix": [0, 0], "x": 9, "y": 6, "flags": 1}, + {"matrix": [0, 1], "x": 21, "y": 6, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 6, "flags": 4}, + {"matrix": [0, 3], "x": 40, "y": 6, "flags": 4}, + {"matrix": [0, 4], "x": 49, "y": 6, "flags": 4}, + {"matrix": [0, 5], "x": 59, "y": 6, "flags": 4}, + {"matrix": [0, 6], "x": 71, "y": 6, "flags": 1}, + {"matrix": [1, 6], "x": 71, "y": 16, "flags": 1}, + {"matrix": [1, 5], "x": 59, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 49, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 30, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 21, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 9, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 9, "y": 25, "flags": 1}, + {"matrix": [2, 1], "x": 21, "y": 25, "flags": 4}, + {"matrix": [2, 2], "x": 30, "y": 25, "flags": 4}, + {"matrix": [2, 3], "x": 40, "y": 25, "flags": 4}, + {"matrix": [2, 4], "x": 49, "y": 25, "flags": 4}, + {"matrix": [2, 5], "x": 59, "y": 25, "flags": 4}, + {"matrix": [2, 6], "x": 71, "y": 25, "flags": 1}, + {"matrix": [3, 6], "x": 71, "y": 35, "flags": 1}, + {"matrix": [3, 5], "x": 59, "y": 35, "flags": 4}, + {"matrix": [3, 4], "x": 49, "y": 35, "flags": 4}, + {"matrix": [3, 3], "x": 40, "y": 35, "flags": 4}, + {"matrix": [3, 2], "x": 30, "y": 35, "flags": 4}, + {"matrix": [3, 1], "x": 21, "y": 35, "flags": 4}, + {"matrix": [3, 0], "x": 9, "y": 35, "flags": 1}, + {"matrix": [4, 0], "x": 9, "y": 44, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 44, "flags": 1}, + {"matrix": [4, 2], "x": 30, "y": 44, "flags": 1}, + {"matrix": [4, 3], "x": 40, "y": 44, "flags": 1}, + {"matrix": [4, 4], "x": 49, "y": 44, "flags": 1}, + {"matrix": [4, 5], "x": 66, "y": 50, "flags": 1}, + {"matrix": [4, 6], "x": 75, "y": 54, "flags": 1}, + {"matrix": [4, 7], "x": 70, "y": 62, "flags": 1}, + {"x": 60, "y": 60, "flags": 1}, + {"x": 160, "y": 6, "flags": 2}, + {"x": 160, "y": 13, "flags": 2}, + {"x": 160, "y": 19, "flags": 2}, + {"x": 160, "y": 25, "flags": 2}, + {"x": 160, "y": 31, "flags": 2}, + {"x": 160, "y": 37, "flags": 2}, + {"x": 160, "y": 43, "flags": 2}, + {"x": 160, "y": 49, "flags": 2}, + {"x": 157, "y": 52, "flags": 2}, + {"x": 151, "y": 52, "flags": 2}, + {"x": 145, "y": 52, "flags": 2}, + {"x": 138, "y": 52, "flags": 2}, + {"x": 132, "y": 52, "flags": 2}, + {"x": 126, "y": 52, "flags": 2}, + {"x": 120, "y": 54, "flags": 2}, + {"x": 115, "y": 57, "flags": 2}, + {"x": 110, "y": 60, "flags": 2}, + {"x": 105, "y": 63, "flags": 2}, + {"x": 99, "y": 66, "flags": 2}, + {"x": 94, "y": 69, "flags": 2}, + {"x": 89, "y": 67, "flags": 2}, + {"x": 86, "y": 62, "flags": 2}, + {"x": 83, "y": 57, "flags": 2}, + {"x": 83, "y": 51, "flags": 2}, + {"x": 85, "y": 45, "flags": 2}, + {"x": 86, "y": 39, "flags": 2}, + {"x": 86, "y": 33, "flags": 2}, + {"x": 86, "y": 27, "flags": 2}, + {"x": 86, "y": 21, "flags": 2}, + {"x": 86, "y": 14, "flags": 2}, + {"x": 86, "y": 8, "flags": 2}, + {"x": 90, "y": 3, "flags": 2}, + {"x": 103, "y": 3, "flags": 2}, + {"x": 109, "y": 3, "flags": 2}, + {"x": 115, "y": 3, "flags": 2}, + {"x": 121, "y": 3, "flags": 2}, + {"x": 127, "y": 3, "flags": 2}, + {"x": 133, "y": 3, "flags": 2}, + {"x": 140, "y": 3, "flags": 2}, + {"x": 152, "y": 3, "flags": 2}, + {"x": 158, "y": 3, "flags": 2}, + {"matrix": [6, 0], "x": 153, "y": 6, "flags": 1}, + {"matrix": [6, 1], "x": 141, "y": 6, "flags": 4}, + {"matrix": [6, 2], "x": 131, "y": 6, "flags": 4}, + {"matrix": [6, 3], "x": 122, "y": 6, "flags": 4}, + {"matrix": [6, 4], "x": 112, "y": 6, "flags": 4}, + {"matrix": [6, 5], "x": 103, "y": 6, "flags": 4}, + {"matrix": [6, 6], "x": 91, "y": 6, "flags": 1}, + {"matrix": [7, 6], "x": 91, "y": 16, "flags": 1}, + {"matrix": [7, 5], "x": 103, "y": 16, "flags": 4}, + {"matrix": [7, 4], "x": 112, "y": 16, "flags": 4}, + {"matrix": [7, 3], "x": 122, "y": 16, "flags": 4}, + {"matrix": [7, 2], "x": 131, "y": 16, "flags": 4}, + {"matrix": [7, 1], "x": 141, "y": 16, "flags": 4}, + {"matrix": [7, 0], "x": 153, "y": 16, "flags": 1}, + {"matrix": [8, 0], "x": 153, "y": 25, "flags": 1}, + {"matrix": [8, 1], "x": 141, "y": 25, "flags": 4}, + {"matrix": [8, 2], "x": 131, "y": 25, "flags": 4}, + {"matrix": [8, 3], "x": 122, "y": 25, "flags": 4}, + {"matrix": [8, 4], "x": 112, "y": 25, "flags": 4}, + {"matrix": [8, 5], "x": 103, "y": 25, "flags": 4}, + {"matrix": [8, 6], "x": 91, "y": 25, "flags": 1}, + {"matrix": [9, 6], "x": 91, "y": 35, "flags": 1}, + {"matrix": [9, 5], "x": 103, "y": 35, "flags": 4}, + {"matrix": [9, 4], "x": 112, "y": 35, "flags": 4}, + {"matrix": [9, 3], "x": 122, "y": 35, "flags": 4}, + {"matrix": [9, 2], "x": 131, "y": 35, "flags": 4}, + {"matrix": [9, 1], "x": 141, "y": 35, "flags": 4}, + {"matrix": [9, 0], "x": 153, "y": 35, "flags": 1}, + {"matrix": [10, 0], "x": 153, "y": 44, "flags": 1}, + {"matrix": [10, 1], "x": 141, "y": 44, "flags": 1}, + {"matrix": [10, 2], "x": 131, "y": 44, "flags": 1}, + {"matrix": [10, 3], "x": 122, "y": 44, "flags": 1}, + {"matrix": [10, 4], "x": 112, "y": 44, "flags": 1}, + {"matrix": [10, 5], "x": 96, "y": 50, "flags": 1}, + {"matrix": [10, 6], "x": 87, "y": 54, "flags": 1}, + {"matrix": [10, 7], "x": 92, "y": 62, "flags": 1}, + {"x": 102, "y": 60, "flags": 1} + ], "led_flush_limit": 33, "led_process_limit": 10, "sleep": true, diff --git a/keyboards/rgbkb/sol3/rev1/rev1.c b/keyboards/rgbkb/sol3/rev1/rev1.c index 086ce0af01..96402f851c 100644 --- a/keyboards/rgbkb/sol3/rev1/rev1.c +++ b/keyboards/rgbkb/sol3/rev1/rev1.c @@ -81,63 +81,6 @@ void matrix_slave_scan_kb(void) { } #ifdef RGB_MATRIX_ENABLE -// clang-format off -led_config_t g_led_config = { { - { 41, 42, 43, 44, 45, 46, 47, NO_LED }, - { 54, 53, 52, 51, 50, 49, 48, NO_LED }, - { 55, 56, 57, 58, 59, 60, 61, NO_LED }, - { 68, 67, 66, 65, 64, 63, 62, NO_LED }, - { 69, 70, 71, 72, 73, 74, 75, 76 }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { 119, 120, 121, 122, 123, 124, 125, NO_LED }, - { 132, 131, 130, 129, 128, 127, 126, NO_LED }, - { 133, 134, 135, 136, 137, 138, 139, NO_LED }, - { 146, 145, 144, 143, 142, 141, 140, NO_LED }, - { 147, 148, 149, 150, 151, 152, 153, 154 }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } -}, { // ALL XY VALUES DIVIDE BY 2, THEN ADD 5 - { 1, 6 }, { 1, 13 }, { 1, 19 }, { 1, 25 }, { 1, 31 }, { 1, 37 }, { 1, 43 }, { 1, 49 }, { 4, 52 }, { 11, 52 }, - { 17, 52 }, { 23, 52 }, { 29, 52 }, { 35, 52 }, { 41, 54 }, { 46, 57 }, { 52, 60 }, { 57, 63 }, { 62, 66 }, { 68, 69 }, - { 73, 67 }, { 76, 62 }, { 79, 57 }, { 78, 51 }, { 77, 45 }, { 76, 39 }, { 76, 33 }, { 76, 27 }, { 76, 21 }, { 76, 14 }, - { 76, 8 }, { 72, 3 }, { 59, 3 }, { 53, 3 }, { 46, 3 }, { 40, 3 }, { 34, 3 }, { 28, 3 }, { 22, 3 }, { 10, 3 }, { 3, 3 }, - { 9, 6 }, { 21, 6 }, { 30, 6 }, { 40, 6 }, { 49, 6 }, { 59, 6 }, { 71, 6 }, - { 71, 16 }, { 59, 16 }, { 49, 16 }, { 40, 16 }, { 30, 16 }, { 21, 16 }, { 9, 16 }, - { 9, 25 }, { 21, 25 }, { 30, 25 }, { 40, 25 }, { 49, 25 }, { 59, 25 }, { 71, 25 }, - { 71, 35 }, { 59, 35 }, { 49, 35 }, { 40, 35 }, { 30, 35 }, { 21, 35 }, { 9, 35 }, - { 9, 44 }, { 21, 44 }, { 30, 44 }, { 40, 44 }, { 49, 44 }, { 66, 50 }, { 75, 54 }, { 70, 62 }, { 60, 60 }, - - { 160, 6 }, { 160, 13 }, { 160, 19 }, { 160, 25 }, { 160, 31 }, { 160, 37 }, { 160, 43 }, { 160, 49 }, { 157, 52 }, { 151, 52 }, - { 145, 52 }, { 138, 52 }, { 132, 52 }, { 126, 52 }, { 120, 54 }, { 115, 57 }, { 110, 60 }, { 105, 63 }, { 99, 66 }, { 94, 69 }, - { 89, 67 }, { 86, 62 }, { 83, 57 }, { 83, 51 }, { 85, 45 }, { 86, 39 }, { 86, 33 }, { 86, 27 }, { 86, 21 }, { 86, 14 }, - { 86, 8 }, { 90, 3 }, { 103, 3 }, { 109, 3 }, { 115, 3 }, { 121, 3 }, { 127, 3 }, { 133, 3 }, { 140, 3 }, { 152, 3 }, { 158, 3 }, - { 153, 6 }, { 141, 6 }, { 131, 6 }, { 122, 6 }, { 112, 6 }, { 103, 6 }, { 91, 6 }, - { 91, 16 }, { 103, 16 }, { 112, 16 }, { 122, 16 }, { 131, 16 }, { 141, 16 }, { 153, 16 }, - { 153, 25 }, { 141, 25 }, { 131, 25 }, { 122, 25 }, { 112, 25 }, { 103, 25 }, { 91, 25 }, - { 91, 35 }, { 103, 35 }, { 112, 35 }, { 122, 35 }, { 131, 35 }, { 141, 35 }, { 153, 35 }, - { 153, 44 }, { 141, 44 }, { 131, 44 }, { 122, 44 }, { 112, 44 }, { 96, 50 }, { 87, 54 }, { 92, 62 }, { 102, 60 }, -}, { - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1 -} }; -// clang-format on - void rgb_matrix_increase_flags(void) { switch (rgb_matrix_get_flags()) { From 2818085d3fffb645e1835326104534ee94b03fdb Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:08:20 -0600 Subject: [PATCH 37/99] Migrate `g_led_config` to DD (P) (#25622) --- keyboards/paprikman/albacore/albacore.c | 30 ----- keyboards/paprikman/albacore/keyboard.json | 10 ++ keyboards/percent/canoe_gen2/canoe_gen2.c | 119 ------------------ keyboards/percent/canoe_gen2/keyboard.json | 79 ++++++++++++ keyboards/phage_studio/pila87/keyboard.json | 93 ++++++++++++++ keyboards/phage_studio/pila87/pila87.c | 23 ---- .../phase_studio/titan65/hotswap/hotswap.c | 42 ------- .../titan65/hotswap/keyboard.json | 69 ++++++++++ keyboards/planck/light/keyboard.json | 51 ++++++++ keyboards/planck/light/light.c | 19 --- keyboards/planck/rev6/keyboard.json | 11 ++ keyboards/planck/rev6/rev6.c | 29 +---- keyboards/planck/rev6_drop/keyboard.json | 11 ++ keyboards/planck/rev6_drop/rev6_drop.c | 30 +---- keyboards/planck/rev7/keyboard.json | 11 ++ keyboards/planck/rev7/rev7.c | 30 +---- keyboards/preonic/rev3/keyboard.json | 13 +- keyboards/preonic/rev3/rev3.c | 29 ----- keyboards/preonic/rev3_drop/keyboard.json | 13 +- keyboards/preonic/rev3_drop/rev3_drop.c | 29 ----- 20 files changed, 362 insertions(+), 379 deletions(-) delete mode 100644 keyboards/paprikman/albacore/albacore.c delete mode 100644 keyboards/percent/canoe_gen2/canoe_gen2.c delete mode 100644 keyboards/phase_studio/titan65/hotswap/hotswap.c diff --git a/keyboards/paprikman/albacore/albacore.c b/keyboards/paprikman/albacore/albacore.c deleted file mode 100644 index b6cf742a11..0000000000 --- a/keyboards/paprikman/albacore/albacore.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright 2021 paprikman - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 0, 1, 2, 3 }, - { 7, 6, 5, 4 } -}, { - { 56, 16 }, { 112, 16 }, { 168, 16 }, { 224, 16 }, - { 56, 24 }, { 112, 24 }, { 168, 24 }, { 224, 24 } -}, { - 1, 1, 1, 1, - 1, 1, 1, 1 -} }; -#endif diff --git a/keyboards/paprikman/albacore/keyboard.json b/keyboards/paprikman/albacore/keyboard.json index 8706c67bcd..a2005221c3 100644 --- a/keyboards/paprikman/albacore/keyboard.json +++ b/keyboards/paprikman/albacore/keyboard.json @@ -10,6 +10,16 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 75, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 150, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 3], "x": 0, "y": 64, "flags": 1}, + {"matrix": [1, 2], "x": 75, "y": 64, "flags": 1}, + {"matrix": [1, 1], "x": 150, "y": 64, "flags": 1}, + {"matrix": [1, 0], "x": 224, "y": 64, "flags": 1} + ], "max_brightness": 220, "sleep": true }, diff --git a/keyboards/percent/canoe_gen2/canoe_gen2.c b/keyboards/percent/canoe_gen2/canoe_gen2.c deleted file mode 100644 index 6cbbed412d..0000000000 --- a/keyboards/percent/canoe_gen2/canoe_gen2.c +++ /dev/null @@ -1,119 +0,0 @@ -/* -Copyright 2020 Evy Dekkers - -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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE - -led_config_t g_led_config = { { - // Key Matrix to LED Index - // 15, 44, 46, 48, - // 74, 75, 76 - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16 }, - { 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 13, 31 }, - { 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 30, 45, 47 }, - { 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 }, - { 64, 65, 66, NO_LED, NO_LED, NO_LED, 67, NO_LED, NO_LED, 69, 70, NO_LED, 71, 72, 73 } -}, { - // LED Index to Physical Position - { 7, 8 }, // Esc - { 22, 8 }, // 1 - { 37, 8 }, // 2 - { 52, 8 }, // 3 - { 67, 8 }, // 4 - { 82, 8 }, // 5 - { 97, 8 }, // 6 - { 112, 8 }, // 7 - { 127, 8 }, // 8 - { 142, 8 }, // 9 - { 157, 8 }, // 0 - { 172, 8 }, // - - { 187, 8 }, // = - { 202, 8 }, // split bs - { 209, 8 }, // bs - { 217, 8 }, // split bs - { 231, 8 }, // ins - { 11, 24 }, // tab - { 30, 24 }, // q - { 45, 24 }, // w - { 60, 24 }, // e - { 75, 24 }, // r - { 90, 24 }, // t - { 104, 24 }, // y - { 119, 24 }, // u - { 134, 24 }, // i - { 149, 24 }, // o - { 164, 24 }, // p - { 179, 24 }, // [ - { 194, 24 }, // ] - { 212, 24 }, // backslash - { 231, 24 }, // del - { 11, 40 }, // caps - { 34, 40 }, // a - { 49, 40 }, // s - { 64, 40 }, // d - { 79, 40 }, // f - { 94, 40 }, // g - { 108, 40 }, // h - { 123, 40 }, // j - { 138, 40 }, // k - { 153, 40 }, // l - { 168, 40 }, // ; - { 183, 40 }, // ' - { 198, 40 }, // iso hash - { 200, 40 }, // ansi enter - { 215, 32 }, // iso enter - { 231, 40 }, // pgup - { 9, 56 }, // iso shift - { 17, 56 }, // ansi shift - { 26, 56 }, // iso nubs - { 41, 56 }, // z - { 56, 56 }, // x - { 71, 56 }, // c - { 86, 56 }, // v - { 101, 56 }, // b - { 116, 56 }, // n - { 131, 56 }, // m - { 146, 56 }, // , - { 161, 56 }, // . - { 175, 56 }, // ? - { 196, 56 }, // shift - { 217, 56 }, // up - { 231, 56 }, // pgdn - { 10, 72 }, // ctrl - { 29, 72 }, // win - { 48, 72 }, // alt - { 103, 72 }, // space - { 112, 72 }, // space - { 161, 72 }, // alt - { 176, 72 }, // fn - { 202, 72 }, // left - { 217, 72 }, // down - { 231, 72 }, // right - { 7, 40 }, // top 1 - { 119, 40 }, // top 2 - { 231, 40 } // top 3 -}, { - // LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, - 2, 2, 2 -} }; -#endif diff --git a/keyboards/percent/canoe_gen2/keyboard.json b/keyboards/percent/canoe_gen2/keyboard.json index b6a8a47a5f..45e1817ad5 100644 --- a/keyboards/percent/canoe_gen2/keyboard.json +++ b/keyboards/percent/canoe_gen2/keyboard.json @@ -61,6 +61,85 @@ "pixel_fractal": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 16, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 16, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 16, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 16, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 16, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 16, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 16, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 16, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 16, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 16, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 16, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 16, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 195, "y": 16, "flags": 4}, + {"matrix": [0, 13], "x": 210, "y": 16, "flags": 1}, + {"x": 217, "y": 16, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 28, "flags": 1}, + {"matrix": [1, 1], "x": 23, "y": 28, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 28, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 28, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 28, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 28, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 28, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 28, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 28, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 28, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 28, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 28, "flags": 4}, + {"matrix": [1, 12], "x": 188, "y": 28, "flags": 4}, + {"matrix": [2, 12], "x": 206, "y": 28, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 28, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 40, "flags": 1}, + {"matrix": [2, 1], "x": 26, "y": 40, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 40, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 40, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 40, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 40, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 40, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 40, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 40, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 40, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 40, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 40, "flags": 4}, + {"x": 192, "y": 40, "flags": 4}, + {"matrix": [2, 13], "x": 201, "y": 40, "flags": 1}, + {"x": 209, "y": 40, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 40, "flags": 1}, + {"x": 5, "y": 52, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 52, "flags": 1}, + {"matrix": [3, 1], "x": 15, "y": 52, "flags": 4}, + {"matrix": [3, 2], "x": 34, "y": 52, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 52, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 52, "flags": 4}, + {"matrix": [3, 5], "x": 79, "y": 52, "flags": 4}, + {"matrix": [3, 6], "x": 94, "y": 52, "flags": 4}, + {"matrix": [3, 7], "x": 109, "y": 52, "flags": 4}, + {"matrix": [3, 8], "x": 124, "y": 52, "flags": 4}, + {"matrix": [3, 9], "x": 139, "y": 52, "flags": 4}, + {"matrix": [3, 10], "x": 154, "y": 52, "flags": 4}, + {"matrix": [3, 11], "x": 169, "y": 52, "flags": 4}, + {"matrix": [3, 12], "x": 189, "y": 52, "flags": 1}, + {"matrix": [3, 13], "x": 210, "y": 52, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 52, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 96, "y": 64, "flags": 4}, + {"x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 133, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 152, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1}, + {"x": 220, "y": 0, "flags": 2}, + {"x": 222, "y": 0, "flags": 2}, + {"x": 224, "y": 0, "flags": 2} + ], "max_brightness": 150, "sleep": true }, diff --git a/keyboards/phage_studio/pila87/keyboard.json b/keyboards/phage_studio/pila87/keyboard.json index fbdf5f637a..135a4f0a81 100644 --- a/keyboards/phage_studio/pila87/keyboard.json +++ b/keyboards/phage_studio/pila87/keyboard.json @@ -62,6 +62,99 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [5, 16], "x": 224, "y": 64, "flags": 4}, + {"matrix": [5, 15], "x": 211, "y": 64, "flags": 4}, + {"matrix": [5, 14], "x": 198, "y": 64, "flags": 4}, + {"matrix": [5, 13], "x": 180, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 164, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 148, "y": 64, "flags": 1}, + {"matrix": [5, 10], "x": 131, "y": 64, "flags": 1}, + {"matrix": [5, 7], "x": 110, "y": 61, "flags": 4}, + {"matrix": [5, 6], "x": 104, "y": 61, "flags": 4}, + {"matrix": [5, 5], "x": 83, "y": 64, "flags": 4}, + {"matrix": [5, 4], "x": 65, "y": 61, "flags": 4}, + {"matrix": [5, 3], "x": 58, "y": 61, "flags": 4}, + {"matrix": [5, 2], "x": 34, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 18, "y": 64, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 0], "x": 8, "y": 52, "flags": 1}, + {"matrix": [4, 1], "x": 29, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 42, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 68, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 81, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 94, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 120, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 133, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 146, "y": 52, "flags": 4}, + {"matrix": [4, 13], "x": 170, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 211, "y": 52, "flags": 4}, + {"matrix": [3, 13], "x": 174, "y": 41, "flags": 1}, + {"matrix": [3, 11], "x": 153, "y": 41, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 41, "flags": 4}, + {"matrix": [3, 9], "x": 127, "y": 41, "flags": 4}, + {"matrix": [3, 8], "x": 114, "y": 41, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 41, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 41, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 41, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 41, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 41, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 41, "flags": 4}, + {"matrix": [3, 1], "x": 23, "y": 41, "flags": 4}, + {"matrix": [3, 0], "x": 5, "y": 41, "flags": 8}, + {"matrix": [2, 0], "x": 3, "y": 29, "flags": 1}, + {"matrix": [2, 1], "x": 19, "y": 29, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 29, "flags": 4}, + {"matrix": [2, 3], "x": 45, "y": 29, "flags": 4}, + {"matrix": [2, 4], "x": 58, "y": 29, "flags": 4}, + {"matrix": [2, 5], "x": 71, "y": 29, "flags": 4}, + {"matrix": [2, 6], "x": 84, "y": 29, "flags": 4}, + {"matrix": [2, 7], "x": 97, "y": 29, "flags": 4}, + {"matrix": [2, 8], "x": 110, "y": 29, "flags": 4}, + {"matrix": [2, 9], "x": 123, "y": 29, "flags": 4}, + {"matrix": [2, 10], "x": 136, "y": 29, "flags": 4}, + {"matrix": [2, 11], "x": 149, "y": 29, "flags": 4}, + {"matrix": [2, 12], "x": 162, "y": 29, "flags": 4}, + {"matrix": [2, 13], "x": 179, "y": 29, "flags": 4}, + {"matrix": [2, 14], "x": 198, "y": 29, "flags": 4}, + {"matrix": [2, 15], "x": 211, "y": 29, "flags": 4}, + {"matrix": [2, 16], "x": 224, "y": 29, "flags": 4}, + {"matrix": [1, 16], "x": 224, "y": 17, "flags": 4}, + {"matrix": [1, 15], "x": 211, "y": 17, "flags": 4}, + {"matrix": [1, 14], "x": 198, "y": 17, "flags": 4}, + {"matrix": [1, 13], "x": 175, "y": 17, "flags": 1}, + {"matrix": [1, 12], "x": 156, "y": 17, "flags": 4}, + {"matrix": [1, 11], "x": 143, "y": 17, "flags": 4}, + {"matrix": [1, 10], "x": 130, "y": 17, "flags": 4}, + {"matrix": [1, 9], "x": 117, "y": 17, "flags": 4}, + {"matrix": [1, 8], "x": 104, "y": 17, "flags": 4}, + {"matrix": [1, 7], "x": 91, "y": 17, "flags": 4}, + {"matrix": [1, 6], "x": 78, "y": 17, "flags": 4}, + {"matrix": [1, 5], "x": 65, "y": 17, "flags": 4}, + {"matrix": [1, 4], "x": 52, "y": 17, "flags": 4}, + {"matrix": [1, 3], "x": 39, "y": 17, "flags": 4}, + {"matrix": [1, 2], "x": 26, "y": 17, "flags": 4}, + {"matrix": [1, 1], "x": 13, "y": 17, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 17, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 26, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 39, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 52, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 65, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 84, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 97, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 110, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 123, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 143, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 156, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 169, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 182, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 198, "y": 0, "flags": 4}, + {"matrix": [0, 15], "x": 211, "y": 0, "flags": 8}, + {"matrix": [0, 16], "x": 224, "y": 0, "flags": 4} + ], "max_brightness": 200 }, "processor": "STM32F103", diff --git a/keyboards/phage_studio/pila87/pila87.c b/keyboards/phage_studio/pila87/pila87.c index 619623cc09..927f349cf3 100644 --- a/keyboards/phage_studio/pila87/pila87.c +++ b/keyboards/phage_studio/pila87/pila87.c @@ -23,29 +23,6 @@ #include #include -led_config_t g_led_config = { { - { 75, NO_LED, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90 }, - { 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 }, - { 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, NO_LED, 28, NO_LED, NO_LED, NO_LED }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, NO_LED, NO_LED, 26, NO_LED, 27, NO_LED }, - { 14, 13, 12, 11, 10, 9, 8, 7, NO_LED, NO_LED, 6, 5, 4, 3, 2, 1, 0 } -}, { - {224, 64}, {211, 64}, {198, 64}, {180, 64}, {164, 64}, {148, 64}, {131, 64}, {110, 61}, {104, 61}, {83 , 64}, {65 , 61}, {58 , 61}, {34 , 64}, {18 , 64}, {2 , 64}, - {8 , 52}, {29 , 52}, {42 , 52}, {55 , 52}, {68 , 52}, {81 , 52}, {94 , 52}, {107, 52}, {120, 52}, {133, 52}, {146, 52}, {170, 52}, {211, 52}, - {174, 41}, {153, 41}, {140, 41}, {127, 41}, {114, 41}, {101, 41}, {88 , 41}, {75 , 41}, {62 , 41}, {49 , 41}, {36 , 41}, {23 , 41}, {5 , 41}, - {3 , 29}, {19 , 29}, {32 , 29}, {45 , 29}, {58 , 29}, {71 , 29}, {84 , 29}, {97 , 29}, {110, 29}, {123, 29}, {136, 29}, {149, 29}, {162, 29}, {179, 29}, {198, 29}, {211, 29}, {224, 29}, - {224, 17}, {211, 17}, {198, 17}, {175, 17}, {156, 17}, {143, 17}, {130, 17}, {117, 17}, {104, 17}, {91 , 17}, {78 , 17}, {65 , 17}, {52 , 17}, {39 , 17}, {26 , 17}, {13 , 17}, {0 , 17}, - {0 , 0}, {26 , 0}, {39 , 0}, {52 , 0}, {65 , 0}, {84 , 0}, {97 , 0}, {110, 0}, {123, 0}, {143, 0}, {156, 0}, {169, 0}, {182, 0}, {198, 0}, {211, 0}, {224, 0}, -}, { - 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, -} }; - bool process_record_kb(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QK_RGB_MATRIX_TOGGLE: diff --git a/keyboards/phase_studio/titan65/hotswap/hotswap.c b/keyboards/phase_studio/titan65/hotswap/hotswap.c deleted file mode 100644 index 1bcd581785..0000000000 --- a/keyboards/phase_studio/titan65/hotswap/hotswap.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright 2021 Christopher Courtney, aka Drashna Jael're (@drashna) - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - { 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, NO_LED, 65, 66 }, - { 51, NO_LED, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37 }, - { 23, NO_LED, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, NO_LED, 36 }, - { NO_LED, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, NO_LED, 11, 10, 9 }, - { 0, 1, NO_LED, 2, NO_LED, NO_LED, 3, NO_LED, NO_LED, NO_LED, 4, 5, NO_LED, 6, 7, 8 } - }, { - { 2, 64 }, { 21, 64 }, { 39, 64 }, { 96, 64 }, { 150, 64 }, { 165, 64 }, { 195, 64 }, { 210, 64 }, { 224, 64 }, - { 224, 48 }, { 210, 48 }, { 189, 48 }, { 154, 48 }, { 139, 48 }, { 124, 48 }, { 109, 48 }, { 94, 48 }, { 79, 48 }, { 64, 48 }, { 49, 48 }, { 34, 48 }, { 22, 48 }, { 5, 48 }, - { 6, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 181, 32 }, { 201, 32 }, { 224, 32 }, - { 224, 16 }, { 206, 16 },{ 188, 16 }, { 173, 16 }, { 158, 16 }, { 143, 16 }, { 128, 16 }, { 113, 16 }, { 98, 16 }, { 83, 16 }, { 68, 16 }, { 53, 16 }, { 38, 16 }, { 22, 16 }, { 4, 16 }, - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 203, 0 }, { 224, 0 } - }, { - 1, 1, 1, 4, 1, 1, 1, 1, 1, - 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1 - } -}; - -#endif diff --git a/keyboards/phase_studio/titan65/hotswap/keyboard.json b/keyboards/phase_studio/titan65/hotswap/keyboard.json index c9d1b0f726..599684322a 100644 --- a/keyboards/phase_studio/titan65/hotswap/keyboard.json +++ b/keyboards/phase_studio/titan65/hotswap/keyboard.json @@ -19,6 +19,75 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 3], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 150, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 165, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 15], "x": 224, "y": 64, "flags": 1}, + {"matrix": [3, 15], "x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 14], "x": 210, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 189, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 22, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 5, "y": 48, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 181, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 201, "y": 32, "flags": 1}, + {"matrix": [2, 15], "x": 224, "y": 32, "flags": 1}, + {"matrix": [1, 15], "x": 224, "y": 16, "flags": 1}, + {"matrix": [1, 14], "x": 206, "y": 16, "flags": 1}, + {"matrix": [1, 13], "x": 188, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 22, "y": 16, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 203, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 1} + ], "max_brightness": 150, "sleep": true }, diff --git a/keyboards/planck/light/keyboard.json b/keyboards/planck/light/keyboard.json index 413c753f92..f445cca931 100644 --- a/keyboards/planck/light/keyboard.json +++ b/keyboards/planck/light/keyboard.json @@ -55,6 +55,57 @@ "solid_multisplash": true }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 20, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 40, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 61, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 81, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 101, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 122, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 142, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 162, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 183, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 223, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 21, "flags": 1}, + {"matrix": [1, 1], "x": 20, "y": 21, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 21, "flags": 4}, + {"matrix": [1, 3], "x": 61, "y": 21, "flags": 4}, + {"matrix": [1, 4], "x": 81, "y": 21, "flags": 4}, + {"matrix": [1, 5], "x": 101, "y": 21, "flags": 4}, + {"matrix": [1, 6], "x": 122, "y": 21, "flags": 4}, + {"matrix": [1, 7], "x": 142, "y": 21, "flags": 4}, + {"matrix": [1, 8], "x": 162, "y": 21, "flags": 4}, + {"matrix": [1, 9], "x": 183, "y": 21, "flags": 4}, + {"matrix": [1, 10], "x": 203, "y": 21, "flags": 4}, + {"matrix": [1, 11], "x": 223, "y": 21, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 42, "flags": 1}, + {"matrix": [2, 1], "x": 20, "y": 42, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 42, "flags": 4}, + {"matrix": [2, 3], "x": 61, "y": 42, "flags": 4}, + {"matrix": [2, 4], "x": 81, "y": 42, "flags": 4}, + {"matrix": [2, 5], "x": 101, "y": 42, "flags": 4}, + {"matrix": [2, 6], "x": 122, "y": 42, "flags": 4}, + {"matrix": [2, 7], "x": 142, "y": 42, "flags": 4}, + {"matrix": [2, 8], "x": 162, "y": 42, "flags": 4}, + {"matrix": [2, 9], "x": 183, "y": 42, "flags": 4}, + {"matrix": [2, 10], "x": 203, "y": 42, "flags": 4}, + {"matrix": [2, 11], "x": 223, "y": 42, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 63, "flags": 1}, + {"matrix": [3, 1], "x": 20, "y": 63, "flags": 1}, + {"matrix": [3, 2], "x": 40, "y": 63, "flags": 1}, + {"matrix": [3, 3], "x": 61, "y": 63, "flags": 1}, + {"matrix": [3, 4], "x": 81, "y": 63, "flags": 1}, + {"matrix": [3, 5], "x": 101, "y": 63, "flags": 4}, + {"x": 111, "y": 63, "flags": 4}, + {"matrix": [3, 6], "x": 122, "y": 63, "flags": 4}, + {"matrix": [3, 7], "x": 142, "y": 63, "flags": 1}, + {"matrix": [3, 8], "x": 162, "y": 63, "flags": 1}, + {"matrix": [3, 9], "x": 183, "y": 63, "flags": 1}, + {"matrix": [3, 10], "x": 203, "y": 63, "flags": 1}, + {"matrix": [3, 11], "x": 223, "y": 63, "flags": 1} + ], "sleep": true }, "features": { diff --git a/keyboards/planck/light/light.c b/keyboards/planck/light/light.c index 43487e2e21..97ea06c467 100644 --- a/keyboards/planck/light/light.c +++ b/keyboards/planck/light/light.c @@ -77,25 +77,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {1, C9_14, C8_14, C7_14} }; -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }, - { 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }, - { 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 }, - { 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48 } -}, { - { 0, 0 }, { 20, 0 }, { 40, 0 }, { 61, 0 }, { 81, 0 }, { 101, 0 }, { 122, 0 }, { 142, 0 }, { 162, 0 }, { 183, 0 }, { 203, 0 }, { 223, 0 }, - { 0, 21 }, { 20, 21 }, { 40, 21 }, { 61, 21 }, { 81, 21 }, { 101, 21 }, { 122, 21 }, { 142, 21 }, { 162, 21 }, { 183, 21 }, { 203, 21 }, { 223, 21 }, - { 0, 42 }, { 20, 42 }, { 40, 42 }, { 61, 42 }, { 81, 42 }, { 101, 42 }, { 122, 42 }, { 142, 42 }, { 162, 42 }, { 183, 42 }, { 203, 42 }, { 223, 42 }, - { 0, 63 }, { 20, 63 }, { 40, 63 }, { 61, 63 }, { 81, 63 }, { 101, 63 }, { 111, 63 }, { 122, 63 }, { 142, 63 }, { 162, 63 }, { 183, 63 }, { 203, 63 }, - { 223, 63 } -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 4, 4, 4, 1, 1, 1, 1, - 1 -} }; - void matrix_init_kb(void) { // Turn status LED on diff --git a/keyboards/planck/rev6/keyboard.json b/keyboards/planck/rev6/keyboard.json index b0028795fe..aee39c8b3a 100644 --- a/keyboards/planck/rev6/keyboard.json +++ b/keyboards/planck/rev6/keyboard.json @@ -17,6 +17,17 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"matrix": [2, 5], "x": 112, "y": 39, "flags": 255}, + {"matrix": [7, 1], "x": 148, "y": 60, "flags": 255}, + {"matrix": [3, 4], "x": 206, "y": 53, "flags": 255}, + {"matrix": [4, 4], "x": 206, "y": 3, "flags": 255}, + {"matrix": [4, 1], "x": 150, "y": 3, "flags": 255}, + {"matrix": [0, 4], "x": 74, "y": 3, "flags": 255}, + {"matrix": [0, 1], "x": 18, "y": 3, "flags": 255}, + {"matrix": [3, 1], "x": 18, "y": 54, "flags": 255}, + {"matrix": [7, 4], "x": 77, "y": 60, "flags": 255} + ], "sleep": true }, "features": { diff --git a/keyboards/planck/rev6/rev6.c b/keyboards/planck/rev6/rev6.c index 49f7d83123..e8439b1705 100644 --- a/keyboards/planck/rev6/rev6.c +++ b/keyboards/planck/rev6/rev6.c @@ -15,33 +15,6 @@ */ #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { NO_LED, 6, NO_LED, NO_LED, 5, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 0 }, - { NO_LED, 7, NO_LED, NO_LED, 2, NO_LED }, - { NO_LED, 4, NO_LED, NO_LED, 3, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, 1, NO_LED, NO_LED, 8, NO_LED }, -}, { - // LED Index to Physical Position - {112, 39}, {148, 60}, {206, 53}, {206, 3}, {150, 3}, {74, 3}, {18, 3}, {18, 54}, {77, 60} -}, { - // LED Index to Flag - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL -} }; - -// LED physical location index -// 6 5 4 3 -// 0 -// 7 8 1 2 - -#endif - #ifdef SWAP_HANDS_ENABLE __attribute__ ((weak)) const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { @@ -49,7 +22,7 @@ const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { {{5, 5}, {4, 5}, {3, 5}, {2, 5}, {1, 5}, {0, 5}}, {{5, 6}, {4, 6}, {3, 6}, {2, 6}, {1, 6}, {0, 6}}, {{5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}}, - + {{5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}}, {{5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}}, {{5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}}, diff --git a/keyboards/planck/rev6_drop/keyboard.json b/keyboards/planck/rev6_drop/keyboard.json index ff301f8c86..4f089f83f3 100644 --- a/keyboards/planck/rev6_drop/keyboard.json +++ b/keyboards/planck/rev6_drop/keyboard.json @@ -29,6 +29,17 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"matrix": [2, 5], "x": 112, "y": 39, "flags": 255}, + {"matrix": [7, 1], "x": 148, "y": 60, "flags": 255}, + {"matrix": [3, 4], "x": 206, "y": 53, "flags": 255}, + {"matrix": [4, 4], "x": 206, "y": 3, "flags": 255}, + {"matrix": [4, 1], "x": 150, "y": 3, "flags": 255}, + {"matrix": [0, 4], "x": 74, "y": 3, "flags": 255}, + {"matrix": [0, 1], "x": 18, "y": 3, "flags": 255}, + {"matrix": [3, 1], "x": 18, "y": 54, "flags": 255}, + {"matrix": [7, 4], "x": 77, "y": 60, "flags": 255} + ], "sleep": true }, "matrix_pins": { diff --git a/keyboards/planck/rev6_drop/rev6_drop.c b/keyboards/planck/rev6_drop/rev6_drop.c index 8f613851dc..e8439b1705 100644 --- a/keyboards/planck/rev6_drop/rev6_drop.c +++ b/keyboards/planck/rev6_drop/rev6_drop.c @@ -15,34 +15,6 @@ */ #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE -// clang-format off -led_config_t g_led_config = { { - // Key Matrix to LED Index - { NO_LED, 6, NO_LED, NO_LED, 5, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 0 }, - { NO_LED, 7, NO_LED, NO_LED, 2, NO_LED }, - { NO_LED, 4, NO_LED, NO_LED, 3, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, 1, NO_LED, NO_LED, 8, NO_LED }, -}, { - // LED Index to Physical Position - {112, 39}, {148, 60}, {206, 53}, {206, 3}, {150, 3}, {74, 3}, {18, 3}, {18, 54}, {77, 60} -}, { - // LED Index to Flag - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL -} }; - -// LED physical location index -// 6 5 4 3 -// 0 -// 7 8 1 2 - -#endif - #ifdef SWAP_HANDS_ENABLE __attribute__ ((weak)) const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { @@ -50,7 +22,7 @@ const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { {{5, 5}, {4, 5}, {3, 5}, {2, 5}, {1, 5}, {0, 5}}, {{5, 6}, {4, 6}, {3, 6}, {2, 6}, {1, 6}, {0, 6}}, {{5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}}, - + {{5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}}, {{5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}}, {{5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}}, diff --git a/keyboards/planck/rev7/keyboard.json b/keyboards/planck/rev7/keyboard.json index 691394d5d5..3bc274b1fa 100644 --- a/keyboards/planck/rev7/keyboard.json +++ b/keyboards/planck/rev7/keyboard.json @@ -14,6 +14,17 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"matrix": [2, 5], "x": 112, "y": 39, "flags": 255}, + {"matrix": [7, 1], "x": 148, "y": 60, "flags": 255}, + {"matrix": [3, 4], "x": 206, "y": 53, "flags": 255}, + {"matrix": [4, 4], "x": 206, "y": 3, "flags": 255}, + {"matrix": [4, 1], "x": 150, "y": 3, "flags": 255}, + {"matrix": [0, 4], "x": 74, "y": 3, "flags": 255}, + {"matrix": [0, 1], "x": 18, "y": 3, "flags": 255}, + {"matrix": [3, 1], "x": 18, "y": 54, "flags": 255}, + {"matrix": [7, 4], "x": 77, "y": 60, "flags": 255} + ], "sleep": true }, "matrix_pins": { diff --git a/keyboards/planck/rev7/rev7.c b/keyboards/planck/rev7/rev7.c index bb9d0ee1e8..09fd5901c2 100644 --- a/keyboards/planck/rev7/rev7.c +++ b/keyboards/planck/rev7/rev7.c @@ -15,34 +15,6 @@ */ #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE -// clang-format off -led_config_t g_led_config = { { - // Key Matrix to LED Index - { NO_LED, 6, NO_LED, NO_LED, 5, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 0 }, - { NO_LED, 7, NO_LED, NO_LED, 2, NO_LED }, - { NO_LED, 4, NO_LED, NO_LED, 3, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, 1, NO_LED, NO_LED, 8, NO_LED }, -}, { - // LED Index to Physical Position - {112, 39}, {148, 60}, {206, 53}, {206, 3}, {150, 3}, {74, 3}, {18, 3}, {18, 54}, {77, 60} -}, { - // LED Index to Flag - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL -} }; - -// LED physical location index -// 6 5 4 3 -// 0 -// 7 8 1 2 - -#endif - #ifdef SWAP_HANDS_ENABLE __attribute__ ((weak)) const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { @@ -50,7 +22,7 @@ const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { {{5, 5}, {4, 5}, {3, 5}, {2, 5}, {1, 5}, {0, 5}}, {{5, 6}, {4, 6}, {3, 6}, {2, 6}, {1, 6}, {0, 6}}, {{5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}}, - + {{5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}}, {{5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}}, {{5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}}, diff --git a/keyboards/preonic/rev3/keyboard.json b/keyboards/preonic/rev3/keyboard.json index 96cebf9ea0..9babc119b0 100644 --- a/keyboards/preonic/rev3/keyboard.json +++ b/keyboards/preonic/rev3/keyboard.json @@ -26,7 +26,18 @@ "driver": "pwm" }, "rgb_matrix": { - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [2, 5], "x": 112, "y": 39, "flags": 255}, + {"matrix": [9, 1], "x": 148, "y": 60, "flags": 255}, + {"matrix": [8, 4], "x": 206, "y": 53, "flags": 255}, + {"matrix": [4, 4], "x": 206, "y": 3, "flags": 255}, + {"matrix": [4, 1], "x": 150, "y": 3, "flags": 255}, + {"matrix": [0, 4], "x": 74, "y": 3, "flags": 255}, + {"matrix": [0, 1], "x": 18, "y": 3, "flags": 255}, + {"matrix": [8, 1], "x": 18, "y": 54, "flags": 255}, + {"matrix": [9, 4], "x": 77, "y": 60, "flags": 255} + ] }, "features": { "audio": true, diff --git a/keyboards/preonic/rev3/rev3.c b/keyboards/preonic/rev3/rev3.c index 5a751cbba5..12a11c98eb 100644 --- a/keyboards/preonic/rev3/rev3.c +++ b/keyboards/preonic/rev3/rev3.c @@ -15,35 +15,6 @@ */ #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { NO_LED, 6, NO_LED, NO_LED, 5, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 0 }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, 4, NO_LED, NO_LED, 3, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, 7, NO_LED, NO_LED, 2, NO_LED }, - { NO_LED, 1, NO_LED, NO_LED, 8, NO_LED }, -}, { - // LED Index to Physical Position - {112, 39}, {148, 60}, {206, 53}, {206, 3}, {150, 3}, {74, 3}, {18, 3}, {18, 54}, {77, 60} -}, { - // LED Index to Flag - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL -} }; - -// LED physical location index -// 6 5 4 3 -// 0 -// 7 8 1 2 -#endif - - #ifdef SWAP_HANDS_ENABLE __attribute__ ((weak)) const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { diff --git a/keyboards/preonic/rev3_drop/keyboard.json b/keyboards/preonic/rev3_drop/keyboard.json index 22374fa5f7..ece6bf32f9 100644 --- a/keyboards/preonic/rev3_drop/keyboard.json +++ b/keyboards/preonic/rev3_drop/keyboard.json @@ -44,7 +44,18 @@ "driver": "pwm" }, "rgb_matrix": { - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [2, 5], "x": 112, "y": 39, "flags": 255}, + {"matrix": [9, 1], "x": 148, "y": 60, "flags": 255}, + {"matrix": [8, 4], "x": 206, "y": 53, "flags": 255}, + {"matrix": [4, 4], "x": 206, "y": 3, "flags": 255}, + {"matrix": [4, 1], "x": 150, "y": 3, "flags": 255}, + {"matrix": [0, 4], "x": 74, "y": 3, "flags": 255}, + {"matrix": [0, 1], "x": 18, "y": 3, "flags": 255}, + {"matrix": [8, 1], "x": 18, "y": 54, "flags": 255}, + {"matrix": [9, 4], "x": 77, "y": 60, "flags": 255} + ] }, "matrix_pins": { "cols": ["B11", "B10", "B2", "B1", "A7", "B0"], diff --git a/keyboards/preonic/rev3_drop/rev3_drop.c b/keyboards/preonic/rev3_drop/rev3_drop.c index 5a751cbba5..12a11c98eb 100644 --- a/keyboards/preonic/rev3_drop/rev3_drop.c +++ b/keyboards/preonic/rev3_drop/rev3_drop.c @@ -15,35 +15,6 @@ */ #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { NO_LED, 6, NO_LED, NO_LED, 5, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 0 }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, 4, NO_LED, NO_LED, 3, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, 7, NO_LED, NO_LED, 2, NO_LED }, - { NO_LED, 1, NO_LED, NO_LED, 8, NO_LED }, -}, { - // LED Index to Physical Position - {112, 39}, {148, 60}, {206, 53}, {206, 3}, {150, 3}, {74, 3}, {18, 3}, {18, 54}, {77, 60} -}, { - // LED Index to Flag - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL -} }; - -// LED physical location index -// 6 5 4 3 -// 0 -// 7 8 1 2 -#endif - - #ifdef SWAP_HANDS_ENABLE __attribute__ ((weak)) const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { From ff1900190c166d28f8d903ea7bf723658780d192 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:08:42 -0600 Subject: [PATCH 38/99] Migrate `g_led_config` to DD (NO) (#25621) --- keyboards/nack/keyboard.json | 54 +++++++++++ keyboards/nack/nack.c | 39 -------- .../ning/tiny_board/tb16_rgb/keyboard.json | 20 ++++- keyboards/ning/tiny_board/tb16_rgb/tb16_rgb.c | 31 ------- keyboards/novelkeys/nk20/keyboard.json | 22 +++++ keyboards/novelkeys/nk20/nk20.c | 40 --------- keyboards/novelkeys/nk65b/keyboard.json | 70 +++++++++++++++ keyboards/novelkeys/nk65b/nk65b.c | 24 ----- keyboards/novelkeys/nk87b/keyboard.json | 89 +++++++++++++++++++ keyboards/novelkeys/nk87b/nk87b.c | 27 ------ keyboards/omkbd/runner3680/5x6_5x8/5x6_5x8.c | 52 ----------- .../omkbd/runner3680/5x6_5x8/keyboard.json | 72 +++++++++++++++ keyboards/owlab/voice65/hotswap/hotswap.c | 23 ----- keyboards/owlab/voice65/hotswap/keyboard.json | 69 ++++++++++++++ .../owlab/voice65/soldered/keyboard.json | 73 +++++++++++++++ keyboards/owlab/voice65/soldered/soldered.c | 23 ----- 16 files changed, 468 insertions(+), 260 deletions(-) delete mode 100644 keyboards/nack/nack.c delete mode 100644 keyboards/ning/tiny_board/tb16_rgb/tb16_rgb.c delete mode 100644 keyboards/novelkeys/nk20/nk20.c delete mode 100644 keyboards/omkbd/runner3680/5x6_5x8/5x6_5x8.c diff --git a/keyboards/nack/keyboard.json b/keyboards/nack/keyboard.json index cd08aac0af..2368786530 100644 --- a/keyboards/nack/keyboard.json +++ b/keyboards/nack/keyboard.json @@ -73,6 +73,60 @@ "val": 64 }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 19, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 38, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 57, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 76, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 95, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 114, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 133, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 152, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 171, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 190, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 209, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 223, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 21, "flags": 4}, + {"matrix": [1, 1], "x": 19, "y": 21, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 21, "flags": 4}, + {"matrix": [1, 3], "x": 57, "y": 21, "flags": 4}, + {"matrix": [1, 4], "x": 76, "y": 21, "flags": 4}, + {"matrix": [1, 5], "x": 95, "y": 21, "flags": 4}, + {"matrix": [1, 6], "x": 114, "y": 21, "flags": 4}, + {"matrix": [1, 7], "x": 133, "y": 21, "flags": 4}, + {"matrix": [1, 8], "x": 152, "y": 21, "flags": 4}, + {"matrix": [1, 9], "x": 171, "y": 21, "flags": 4}, + {"matrix": [1, 10], "x": 190, "y": 21, "flags": 4}, + {"matrix": [1, 11], "x": 209, "y": 21, "flags": 4}, + {"matrix": [1, 12], "x": 223, "y": 21, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 42, "flags": 4}, + {"matrix": [2, 1], "x": 19, "y": 42, "flags": 4}, + {"matrix": [2, 2], "x": 38, "y": 42, "flags": 4}, + {"matrix": [2, 3], "x": 57, "y": 42, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 42, "flags": 4}, + {"matrix": [2, 5], "x": 95, "y": 42, "flags": 4}, + {"matrix": [2, 6], "x": 114, "y": 42, "flags": 4}, + {"matrix": [2, 7], "x": 133, "y": 42, "flags": 4}, + {"matrix": [2, 8], "x": 152, "y": 42, "flags": 4}, + {"matrix": [2, 9], "x": 171, "y": 42, "flags": 4}, + {"matrix": [2, 10], "x": 190, "y": 42, "flags": 4}, + {"matrix": [2, 11], "x": 209, "y": 42, "flags": 4}, + {"matrix": [2, 12], "x": 223, "y": 42, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 63, "flags": 4}, + {"matrix": [3, 1], "x": 19, "y": 63, "flags": 4}, + {"matrix": [3, 2], "x": 38, "y": 63, "flags": 4}, + {"matrix": [3, 3], "x": 57, "y": 63, "flags": 4}, + {"matrix": [3, 4], "x": 76, "y": 63, "flags": 4}, + {"matrix": [3, 5], "x": 95, "y": 63, "flags": 4}, + {"matrix": [3, 6], "x": 114, "y": 63, "flags": 4}, + {"matrix": [3, 7], "x": 133, "y": 63, "flags": 4}, + {"matrix": [3, 8], "x": 152, "y": 63, "flags": 4}, + {"matrix": [3, 9], "x": 171, "y": 63, "flags": 4}, + {"matrix": [3, 10], "x": 190, "y": 63, "flags": 4}, + {"matrix": [3, 11], "x": 209, "y": 63, "flags": 4}, + {"matrix": [3, 12], "x": 223, "y": 63, "flags": 4} + ], "hue_steps": 10, "sat_steps": 10, "val_steps": 10, diff --git a/keyboards/nack/nack.c b/keyboards/nack/nack.c deleted file mode 100644 index 27e029a9fd..0000000000 --- a/keyboards/nack/nack.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2020 farfalleflickan - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE - led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }, - { 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }, - { 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 }, - { 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51 } - }, { - // LED Index to Physical Position - { 0, 0 }, { 19, 0 }, { 38, 0 }, { 57, 0 }, { 76, 0 }, { 95, 0 }, { 114, 0 }, { 133, 0 }, { 152, 0 }, { 171, 0 }, { 190, 0 }, { 209, 0 }, { 223, 0 }, - { 0, 21 }, { 19, 21 }, { 38, 21 }, { 57, 21 }, { 76, 21 }, { 95, 21 }, { 114, 21 }, { 133, 21 }, { 152, 21 }, { 171, 21 }, { 190, 21 }, { 209, 21 }, { 223, 21 }, - { 0, 42 }, { 19, 42 }, { 38, 42 }, { 57, 42 }, { 76, 42 }, { 95, 42 }, { 114, 42 }, { 133, 42 }, { 152, 42 }, { 171, 42 }, { 190, 42 }, { 209, 42 }, { 223, 42 }, - { 0, 63 }, { 19, 63 }, { 38, 63 }, { 57, 63 }, { 76, 63 }, { 95, 63 }, { 114, 63 }, { 133, 63 }, { 152, 63 }, { 171, 63 }, { 190, 63 }, { 209, 63 }, { 223, 63 } - }, { - // LED Index to Flag - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 - } }; -#endif diff --git a/keyboards/ning/tiny_board/tb16_rgb/keyboard.json b/keyboards/ning/tiny_board/tb16_rgb/keyboard.json index 9e99ef879a..104a4a84a6 100644 --- a/keyboards/ning/tiny_board/tb16_rgb/keyboard.json +++ b/keyboards/ning/tiny_board/tb16_rgb/keyboard.json @@ -20,7 +20,25 @@ "default": { "animation": "typing_heatmap" }, - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 21, "flags": 4}, + {"matrix": [1, 1], "x": 75, "y": 21, "flags": 4}, + {"matrix": [1, 2], "x": 150, "y": 21, "flags": 4}, + {"matrix": [1, 3], "x": 224, "y": 21, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 42, "flags": 4}, + {"matrix": [2, 1], "x": 75, "y": 42, "flags": 4}, + {"matrix": [2, 2], "x": 150, "y": 42, "flags": 4}, + {"matrix": [2, 3], "x": 224, "y": 42, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [3, 1], "x": 75, "y": 64, "flags": 4}, + {"matrix": [3, 2], "x": 150, "y": 64, "flags": 4}, + {"matrix": [3, 3], "x": 224, "y": 64, "flags": 4} + ] }, "matrix_pins": { "cols": ["B6", "B1", "B3", "B2"], diff --git a/keyboards/ning/tiny_board/tb16_rgb/tb16_rgb.c b/keyboards/ning/tiny_board/tb16_rgb/tb16_rgb.c deleted file mode 100644 index e7807be5e8..0000000000 --- a/keyboards/ning/tiny_board/tb16_rgb/tb16_rgb.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright 2023 Ning (@ningjx) - * - * 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 "quantum.h" - -led_config_t g_led_config = { { - { 0, 1, 2, 3 }, - { 4, 5, 6, 7 }, - { 8, 9, 10, 11 }, - { 12, 13, 14, 15 } -}, { - {0,0},{75,0},{150,0},{224,0}, - {0,21},{75,21},{150,21},{224,21}, - {0,42},{75,42},{150,42},{224,42}, - {0,64},{75,64},{150,64},{224,64} -}, { - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 -} }; diff --git a/keyboards/novelkeys/nk20/keyboard.json b/keyboards/novelkeys/nk20/keyboard.json index f2728967b4..e2560e0c30 100644 --- a/keyboards/novelkeys/nk20/keyboard.json +++ b/keyboards/novelkeys/nk20/keyboard.json @@ -66,6 +66,28 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 75, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 149, "y": 0, "flags": 1}, + {"matrix": [1, 3], "x": 224, "y": 15, "flags": 1}, + {"matrix": [1, 2], "x": 149, "y": 15, "flags": 1}, + {"matrix": [1, 1], "x": 75, "y": 15, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 27, "flags": 4}, + {"matrix": [2, 1], "x": 75, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 149, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 224, "y": 34, "flags": 1}, + {"matrix": [3, 2], "x": 149, "y": 40, "flags": 4}, + {"matrix": [3, 1], "x": 75, "y": 40, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 40, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 52, "flags": 4}, + {"matrix": [4, 1], "x": 75, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 149, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 224, "y": 58, "flags": 1}, + {"matrix": [5, 2], "x": 149, "y": 64, "flags": 4}, + {"matrix": [5, 0], "x": 37, "y": 64, "flags": 4} + ], "max_brightness": 210, "sleep": true }, diff --git a/keyboards/novelkeys/nk20/nk20.c b/keyboards/novelkeys/nk20/nk20.c deleted file mode 100644 index 23350e1037..0000000000 --- a/keyboards/novelkeys/nk20/nk20.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright 2022 Yiancar - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -// clang-format off -led_config_t g_led_config = { { - { 0, 1, 2, NO_LED }, - { 6, 5, 4, 3 }, - { 7, 8, 9, 10 }, - { 13, 12, 11, NO_LED }, - { 14, 15, 16, 17 }, - { 19, NO_LED, 18, NO_LED }, -}, { - { 0,0 }, { 75,0 }, {149,0 }, {224,15 }, {149,15 }, { 75,15 }, { 0,15 }, { 0,27 }, { 75,27 }, {149,27 }, - {224,34 }, {149,40 }, { 75,40 }, { 0,40 }, { 0,52 }, { 75,52 }, {149,52 }, {224,58 }, {149,64 }, { 37,64 } -}, { - 1, 1, 1, - 1, 1, 1, 1, - 4, 4, 4, 1, - 4, 4, 4, - 4, 4, 4, 1, - 4, 4 -} }; -// clang-format on -#endif diff --git a/keyboards/novelkeys/nk65b/keyboard.json b/keyboards/novelkeys/nk65b/keyboard.json index 0c2794c120..74204a4413 100755 --- a/keyboards/novelkeys/nk65b/keyboard.json +++ b/keyboards/novelkeys/nk65b/keyboard.json @@ -66,6 +66,76 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 203, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 225, "y": 0, "flags": 1}, + {"matrix": [1, 14], "x": 225, "y": 16, "flags": 1}, + {"matrix": [2, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 188, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 201, "y": 32, "flags": 1}, + {"matrix": [2, 14], "x": 225, "y": 32, "flags": 1}, + {"matrix": [3, 14], "x": 225, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 189, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 9], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 150, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 165, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 180, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 210, "y": 64, "flags": 1}, + {"x": 225, "y": 64, "flags": 1} + ], "max_brightness": 130, "sleep": true }, diff --git a/keyboards/novelkeys/nk65b/nk65b.c b/keyboards/novelkeys/nk65b/nk65b.c index 369bab262f..400ab35ef3 100755 --- a/keyboards/novelkeys/nk65b/nk65b.c +++ b/keyboards/novelkeys/nk65b/nk65b.c @@ -28,27 +28,3 @@ layer_state_t layer_state_set_kb(layer_state_t state) { gpio_write_pin(B3, !layer_state_cmp(state, 2)); return layer_state_set_user(state); } - -#ifdef RGB_MATRIX_ENABLE -// clang-format off -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, NO_LED, 15 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 16, 43 }, - { 57, NO_LED, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44 }, - { 58, 59, 60, NO_LED, NO_LED, NO_LED, 61, NO_LED, NO_LED, 61, 62, 63, 64, 65, 66 } -}, { - { 0,0 }, { 15,0 }, { 30,0 }, { 45,0 }, { 60,0 }, { 75,0 }, { 90,0 }, {105,0 }, {120,0 }, {135,0 }, {150,0 }, {165,0 }, {180,0 }, {203,0 }, - {225,0 }, {225,16 }, {206,16 }, {188,16 }, {173,16 }, {158,16 }, {143,16 }, {128,16 }, {113,16 }, { 98,16 }, { 83,16 }, { 68,16 }, { 53,16 }, { 38,16 }, - { 23,16 }, { 4,16 }, { 6,32 }, { 26,32 }, { 41,32 }, { 56,32 }, { 71,32 }, { 86,32 }, {101,32 }, {116,32 }, {131,32 }, {146,32 }, {161,32 }, {176,32 }, - {201,32 }, {225,32 }, {225,48 }, {210,48 }, {189,48 }, {169,48 }, {154,48 }, {139,48 }, {124,48 }, {109,48 }, { 94,48 }, { 79,48 }, { 64,48 }, { 49,48 }, - { 34,48 }, { 9,48 }, { 2,64 }, { 21,64 }, { 39,64 }, { 96,64 }, {150,64 }, {165,64 }, {180,64 }, {195,64 }, {210,64 }, {225,64 } -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 -} }; -// clang-format on -#endif diff --git a/keyboards/novelkeys/nk87b/keyboard.json b/keyboards/novelkeys/nk87b/keyboard.json index 563f502aae..2213dfa86d 100755 --- a/keyboards/novelkeys/nk87b/keyboard.json +++ b/keyboards/novelkeys/nk87b/keyboard.json @@ -66,6 +66,95 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 29, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 55, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 71, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 84, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 97, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 110, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 127, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 140, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 153, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 166, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 182, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 198, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 211, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 16], "x": 224, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 211, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 198, "y": 15, "flags": 1}, + {"matrix": [1, 13], "x": 175, "y": 15, "flags": 1}, + {"matrix": [1, 12], "x": 156, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 143, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 130, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 117, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 91, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 78, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 65, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 39, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 26, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 13, "y": 15, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 27, "flags": 1}, + {"matrix": [2, 1], "x": 19, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 45, "y": 27, "flags": 4}, + {"matrix": [2, 4], "x": 58, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 71, "y": 27, "flags": 4}, + {"matrix": [2, 6], "x": 84, "y": 27, "flags": 4}, + {"matrix": [2, 7], "x": 97, "y": 27, "flags": 4}, + {"matrix": [2, 8], "x": 110, "y": 27, "flags": 4}, + {"matrix": [2, 9], "x": 123, "y": 27, "flags": 4}, + {"matrix": [2, 10], "x": 136, "y": 27, "flags": 4}, + {"matrix": [2, 11], "x": 149, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 162, "y": 27, "flags": 4}, + {"matrix": [3, 12], "x": 179, "y": 27, "flags": 4}, + {"matrix": [2, 14], "x": 198, "y": 27, "flags": 1}, + {"matrix": [2, 15], "x": 211, "y": 27, "flags": 1}, + {"matrix": [2, 16], "x": 224, "y": 27, "flags": 1}, + {"matrix": [3, 13], "x": 174, "y": 40, "flags": 1}, + {"matrix": [3, 11], "x": 153, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 127, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 114, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 40, "flags": 4}, + {"matrix": [3, 1], "x": 23, "y": 40, "flags": 4}, + {"matrix": [3, 0], "x": 5, "y": 40, "flags": 1}, + {"matrix": [4, 0], "x": 8, "y": 52, "flags": 1}, + {"matrix": [4, 2], "x": 29, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 68, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 81, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 94, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 9], "x": 120, "y": 52, "flags": 4}, + {"matrix": [4, 10], "x": 133, "y": 52, "flags": 4}, + {"matrix": [4, 11], "x": 146, "y": 52, "flags": 4}, + {"matrix": [4, 12], "x": 170, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 211, "y": 52, "flags": 1}, + {"matrix": [5, 16], "x": 224, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 211, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 198, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 179, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 162, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 146, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 91, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 36, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 19, "y": 64, "flags": 1}, + {"matrix": [5, 0], "x": 3, "y": 64, "flags": 1} + ], "max_brightness": 114, "sleep": true }, diff --git a/keyboards/novelkeys/nk87b/nk87b.c b/keyboards/novelkeys/nk87b/nk87b.c index 125b5d7404..9cd36e745f 100644 --- a/keyboards/novelkeys/nk87b/nk87b.c +++ b/keyboards/novelkeys/nk87b/nk87b.c @@ -29,30 +29,3 @@ layer_state_t layer_state_set_kb(layer_state_t state) { gpio_write_pin(A4, !layer_state_cmp(state, 2)); return layer_state_set_user(state); } - -#ifdef RGB_MATRIX_ENABLE -// clang-format off -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }, - { 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17 }, - { 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, NO_LED, 48, 49, 50 }, - { 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 47, 51, NO_LED, NO_LED, NO_LED }, - { 64, NO_LED, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, NO_LED, NO_LED, 76, NO_LED }, - { 86, 85, 84, NO_LED, NO_LED, NO_LED, 83, NO_LED, NO_LED, NO_LED, NO_LED, 82, 81, 80, 79, 78, 77 }, -}, { - { 0,0 }, { 16,0 }, { 29,0 }, { 42,0 }, { 55,0 }, { 71,0 }, { 84,0 }, { 97,0 }, {110,0 }, {127,0 }, {140,0 }, {153,0 }, {166,0 }, {182,0 }, {198,0 }, {211,0 }, {224,0 }, - {224,15 }, {211,15 }, {198,15 }, {175,15 }, {156,15 }, {143,15 }, {130,15 }, {117,15 }, {104,15 }, { 91,15 }, { 78,15 }, { 65,15 }, { 52,15 }, { 39,15 }, { 26,15 }, { 13,15 }, { 0,15 }, - { 3,27 }, { 19,27 }, { 32,27 }, { 45,27 }, { 58,27 }, { 71,27 }, { 84,27 }, { 97,27 }, {110,27 }, {123,27 }, {136,27 }, {149,27 }, {162,27 }, {179,27 }, {198,27 }, {211,27 }, {224,27 }, - {174,40 }, {153,40 }, {140,40 }, {127,40 }, {114,40 }, {101,40 }, { 88,40 }, { 75,40 }, { 62,40 }, { 49,40 }, { 36,40 }, { 23,40 }, { 5,40 }, { 8,52 }, { 29,52 }, { 42,52 }, { 55,52 }, - { 68,52 }, { 81,52 }, { 94,52 }, {107,52 }, {120,52 }, {133,52 }, {146,52 }, {170,52 }, {211,52 }, {224,64 }, {211,64 }, {198,64 }, {179,64 }, {162,64 }, {146,64 }, { 91,64 }, { 36,64 }, - { 19,64 }, { 3,64 } -}, { - 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 1, 1, 1, 4, 1, 1, 1 -} }; -// clang-format on -#endif diff --git a/keyboards/omkbd/runner3680/5x6_5x8/5x6_5x8.c b/keyboards/omkbd/runner3680/5x6_5x8/5x6_5x8.c deleted file mode 100644 index 3fda310364..0000000000 --- a/keyboards/omkbd/runner3680/5x6_5x8/5x6_5x8.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright 2021 omkbd - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { NO_LED, NO_LED, 5, 4, 3, 2, 1, 0 }, - { NO_LED, NO_LED, 6, 7, 8, 9, 10, 11 }, - { NO_LED, NO_LED, 17, 16, 15, 14, 13, 12 }, - { NO_LED, NO_LED, 18, 19, 20, 21, 22, 23 }, - { NO_LED, NO_LED, 29, 28, 27, 26, 25, 24 }, - { 37, 36, 35, 34, 33, 32, 31, 30 }, - { 38, 39, 40, 41, 42, 43, 44, 45 }, - { 53, 52, 51, 50, 49, 48, 47, 46 }, - { 54, 55, 56, 57, 58, 59, 60, 61 }, - { 69, 68, 67, 66, 65, 64, 63, 62 } -}, { - // LED Index to Physical Position - { 86, 0 }, { 69, 0 }, { 52, 0 }, { 34, 0 }, { 17, 0 }, { 0, 0 }, - { 0, 16 }, { 17, 16 }, { 34, 16 }, { 52, 16 }, { 69, 16 }, { 86, 16 }, - { 86, 32 }, { 69, 32 }, { 52, 32 }, { 34, 32 }, { 17, 32 }, { 0, 32 }, - { 0, 48 }, { 17, 48 }, { 34, 48 }, { 52, 48 }, { 69, 48 }, { 86, 48 }, - { 86, 64 }, { 69, 64 }, { 52, 64 }, { 34, 64 }, { 17, 64 }, { 0, 64 }, - { 103, 0 }, { 121, 0 }, { 138, 0 }, { 155, 0 }, { 172, 0 }, { 190, 0 }, { 207, 0 }, { 224, 0 }, - { 224, 16 }, { 207, 16 }, { 190, 16 }, { 172, 16 }, { 155, 16 }, { 138, 16 }, { 121, 16 }, { 103, 16 }, - { 103, 32 }, { 121, 32 }, { 138, 32 }, { 155, 32 }, { 172, 32 }, { 190, 32 }, { 207, 32 }, { 224, 32 }, - { 224, 48 }, { 207, 48 }, { 190, 48 }, { 172, 48 }, { 155, 48 }, { 138, 48 }, { 121, 48 }, { 103, 48 }, - { 103, 64 }, { 121, 64 }, { 138, 64 }, { 155, 64 }, { 172, 64 }, { 190, 64 }, { 207, 64 }, { 224, 64 } -}, { - // LED Index to Flag - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL -} }; -#endif diff --git a/keyboards/omkbd/runner3680/5x6_5x8/keyboard.json b/keyboards/omkbd/runner3680/5x6_5x8/keyboard.json index 2d912a1445..2033b0330d 100644 --- a/keyboards/omkbd/runner3680/5x6_5x8/keyboard.json +++ b/keyboards/omkbd/runner3680/5x6_5x8/keyboard.json @@ -15,6 +15,78 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"matrix": [0, 7], "x": 86, "y": 0, "flags": 255}, + {"matrix": [0, 6], "x": 69, "y": 0, "flags": 255}, + {"matrix": [0, 5], "x": 52, "y": 0, "flags": 255}, + {"matrix": [0, 4], "x": 34, "y": 0, "flags": 255}, + {"matrix": [0, 3], "x": 17, "y": 0, "flags": 255}, + {"matrix": [0, 2], "x": 0, "y": 0, "flags": 255}, + {"matrix": [1, 2], "x": 0, "y": 16, "flags": 255}, + {"matrix": [1, 3], "x": 17, "y": 16, "flags": 255}, + {"matrix": [1, 4], "x": 34, "y": 16, "flags": 255}, + {"matrix": [1, 5], "x": 52, "y": 16, "flags": 255}, + {"matrix": [1, 6], "x": 69, "y": 16, "flags": 255}, + {"matrix": [1, 7], "x": 86, "y": 16, "flags": 255}, + {"matrix": [2, 7], "x": 86, "y": 32, "flags": 255}, + {"matrix": [2, 6], "x": 69, "y": 32, "flags": 255}, + {"matrix": [2, 5], "x": 52, "y": 32, "flags": 255}, + {"matrix": [2, 4], "x": 34, "y": 32, "flags": 255}, + {"matrix": [2, 3], "x": 17, "y": 32, "flags": 255}, + {"matrix": [2, 2], "x": 0, "y": 32, "flags": 255}, + {"matrix": [3, 2], "x": 0, "y": 48, "flags": 255}, + {"matrix": [3, 3], "x": 17, "y": 48, "flags": 255}, + {"matrix": [3, 4], "x": 34, "y": 48, "flags": 255}, + {"matrix": [3, 5], "x": 52, "y": 48, "flags": 255}, + {"matrix": [3, 6], "x": 69, "y": 48, "flags": 255}, + {"matrix": [3, 7], "x": 86, "y": 48, "flags": 255}, + {"matrix": [4, 7], "x": 86, "y": 64, "flags": 255}, + {"matrix": [4, 6], "x": 69, "y": 64, "flags": 255}, + {"matrix": [4, 5], "x": 52, "y": 64, "flags": 255}, + {"matrix": [4, 4], "x": 34, "y": 64, "flags": 255}, + {"matrix": [4, 3], "x": 17, "y": 64, "flags": 255}, + {"matrix": [4, 2], "x": 0, "y": 64, "flags": 255}, + {"matrix": [5, 7], "x": 103, "y": 0, "flags": 255}, + {"matrix": [5, 6], "x": 121, "y": 0, "flags": 255}, + {"matrix": [5, 5], "x": 138, "y": 0, "flags": 255}, + {"matrix": [5, 4], "x": 155, "y": 0, "flags": 255}, + {"matrix": [5, 3], "x": 172, "y": 0, "flags": 255}, + {"matrix": [5, 2], "x": 190, "y": 0, "flags": 255}, + {"matrix": [5, 1], "x": 207, "y": 0, "flags": 255}, + {"matrix": [5, 0], "x": 224, "y": 0, "flags": 255}, + {"matrix": [6, 0], "x": 224, "y": 16, "flags": 255}, + {"matrix": [6, 1], "x": 207, "y": 16, "flags": 255}, + {"matrix": [6, 2], "x": 190, "y": 16, "flags": 255}, + {"matrix": [6, 3], "x": 172, "y": 16, "flags": 255}, + {"matrix": [6, 4], "x": 155, "y": 16, "flags": 255}, + {"matrix": [6, 5], "x": 138, "y": 16, "flags": 255}, + {"matrix": [6, 6], "x": 121, "y": 16, "flags": 255}, + {"matrix": [6, 7], "x": 103, "y": 16, "flags": 255}, + {"matrix": [7, 7], "x": 103, "y": 32, "flags": 255}, + {"matrix": [7, 6], "x": 121, "y": 32, "flags": 255}, + {"matrix": [7, 5], "x": 138, "y": 32, "flags": 255}, + {"matrix": [7, 4], "x": 155, "y": 32, "flags": 255}, + {"matrix": [7, 3], "x": 172, "y": 32, "flags": 255}, + {"matrix": [7, 2], "x": 190, "y": 32, "flags": 255}, + {"matrix": [7, 1], "x": 207, "y": 32, "flags": 255}, + {"matrix": [7, 0], "x": 224, "y": 32, "flags": 255}, + {"matrix": [8, 0], "x": 224, "y": 48, "flags": 255}, + {"matrix": [8, 1], "x": 207, "y": 48, "flags": 255}, + {"matrix": [8, 2], "x": 190, "y": 48, "flags": 255}, + {"matrix": [8, 3], "x": 172, "y": 48, "flags": 255}, + {"matrix": [8, 4], "x": 155, "y": 48, "flags": 255}, + {"matrix": [8, 5], "x": 138, "y": 48, "flags": 255}, + {"matrix": [8, 6], "x": 121, "y": 48, "flags": 255}, + {"matrix": [8, 7], "x": 103, "y": 48, "flags": 255}, + {"matrix": [9, 7], "x": 103, "y": 64, "flags": 255}, + {"matrix": [9, 6], "x": 121, "y": 64, "flags": 255}, + {"matrix": [9, 5], "x": 138, "y": 64, "flags": 255}, + {"matrix": [9, 4], "x": 155, "y": 64, "flags": 255}, + {"matrix": [9, 3], "x": 172, "y": 64, "flags": 255}, + {"matrix": [9, 2], "x": 190, "y": 64, "flags": 255}, + {"matrix": [9, 1], "x": 207, "y": 64, "flags": 255}, + {"matrix": [9, 0], "x": 224, "y": 64, "flags": 255} + ], "split_count": [30, 40] }, "matrix_pins": { diff --git a/keyboards/owlab/voice65/hotswap/hotswap.c b/keyboards/owlab/voice65/hotswap/hotswap.c index 79179d1661..ec27cf9b75 100644 --- a/keyboards/owlab/voice65/hotswap/hotswap.c +++ b/keyboards/owlab/voice65/hotswap/hotswap.c @@ -86,29 +86,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW5_CS39, SW5_CS38, SW5_CS37}, /* RGB65-dn- */ {0, SW7_CS39, SW7_CS38, SW7_CS37}, /* RGB66-right- */ }; - -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, NO_LED, 43 }, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, 56, 57 }, - { 58, 59, 60, NO_LED, NO_LED, 61, NO_LED, NO_LED, NO_LED, 62, 63, 64, NO_LED, 65, 66 } -}, { - { 0, 0 }, { 16, 0 }, { 32, 0 }, { 48, 0 }, { 64, 0 }, { 80, 0 }, { 96, 0 }, { 112, 0 }, { 128, 0 }, { 144, 0 }, { 160, 0 }, { 176, 0 }, { 192, 0 }, { 208, 0 }, { 224, 0 }, - { 2, 16 }, { 18, 16 }, { 34, 16 }, { 50, 16 }, { 66, 16 }, { 82, 16 }, { 98, 16 }, { 114, 16 }, { 130, 16 }, { 146, 16 }, { 162, 16 }, { 178, 16 }, { 194, 16 }, { 210, 16 }, { 224, 16 }, - { 4, 32 }, { 20, 32 }, { 36, 32 }, { 52, 32 }, { 68, 32 }, { 84, 32 }, { 100, 32 }, { 116, 32 }, { 132, 32 }, { 148, 32 }, { 164, 32 }, { 180, 32 }, { 196, 32 }, { 224, 32 }, - { 8, 48 }, { 24, 48 }, { 40, 48 }, { 56, 48 }, { 72, 48 }, { 88, 48 }, { 104, 48 }, { 120, 48 }, { 136, 48 }, { 152, 48 }, { 168, 48 }, { 184, 48 }, { 208, 48 }, { 224, 48 }, - { 2, 64 }, { 18, 64 }, { 34, 64 }, { 82, 64 }, { 146, 64 }, { 162, 64 }, { 178, 64 }, { 210, 64 }, { 224, 64 } -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, - } -}; - - #endif bool rgb_matrix_indicators_kb(void) { diff --git a/keyboards/owlab/voice65/hotswap/keyboard.json b/keyboards/owlab/voice65/hotswap/keyboard.json index 79ca2a57ed..e31a7b5e65 100644 --- a/keyboards/owlab/voice65/hotswap/keyboard.json +++ b/keyboards/owlab/voice65/hotswap/keyboard.json @@ -63,6 +63,75 @@ "val": 128 }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 2, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 18, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 34, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 50, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 66, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 114, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 130, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 146, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 162, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 178, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 194, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 210, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 4, "y": 32, "flags": 0}, + {"matrix": [2, 1], "x": 20, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 36, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 68, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 84, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 100, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 132, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 148, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 164, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 180, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 196, "y": 32, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 8, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 24, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 40, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 56, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 72, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 88, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 104, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 120, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 136, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 152, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 168, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 184, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 208, "y": 48, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 18, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 34, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 82, "y": 64, "flags": 1}, + {"matrix": [4, 9], "x": 146, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 162, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 178, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "led_flush_limit": 26, "led_process_limit": 4, "max_brightness": 200, diff --git a/keyboards/owlab/voice65/soldered/keyboard.json b/keyboards/owlab/voice65/soldered/keyboard.json index edd79a064f..312b612561 100644 --- a/keyboards/owlab/voice65/soldered/keyboard.json +++ b/keyboards/owlab/voice65/soldered/keyboard.json @@ -63,6 +63,79 @@ "val": 128 }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 195, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 209, "y": 0, "flags": 4}, + {"matrix": [2, 13], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 2, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 18, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 34, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 50, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 66, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 114, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 130, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 146, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 162, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 178, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 194, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 208, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 2, "y": 32, "flags": 0}, + {"matrix": [2, 1], "x": 20, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 36, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 68, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 84, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 100, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 132, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 148, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 164, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 180, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 202, "y": 32, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 16, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 192, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 208, "y": 48, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 20, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 40, "y": 64, "flags": 1}, + {"matrix": [4, 3], "x": 60, "y": 64, "flags": 1}, + {"matrix": [4, 4], "x": 95, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 132, "y": 64, "flags": 1}, + {"matrix": [4, 9], "x": 152, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 172, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 192, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 208, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "led_flush_limit": 26, "led_process_limit": 4, "max_brightness": 200, diff --git a/keyboards/owlab/voice65/soldered/soldered.c b/keyboards/owlab/voice65/soldered/soldered.c index 23144914fe..5a47de96e8 100644 --- a/keyboards/owlab/voice65/soldered/soldered.c +++ b/keyboards/owlab/voice65/soldered/soldered.c @@ -90,29 +90,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW5_CS39, SW5_CS38, SW5_CS37}, /* RGB69-dn- */ {0, SW5_CS27, SW5_CS26, SW5_CS25}, /* RGB70-right- */ }; - -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 }, - { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 15, 44 }, - { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59 }, - { 60, 61, 62, 63, 64, NO_LED, 65, NO_LED, NO_LED, 66, 67, 68, 69, NO_LED, 70 } -}, { - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0}, { 180, 0}, { 195, 0 }, { 209, 0 }, { 224, 0 }, - { 2, 16 }, { 18, 16 }, { 34, 16 }, { 50, 16 }, { 66, 16 }, { 82, 16 }, { 98, 16 }, { 114, 16 }, { 130, 16 }, { 146, 16 }, { 162, 16 }, { 178, 16 }, { 194, 16 }, { 208, 16 }, { 224, 16 }, - { 2, 32 }, { 20, 32 }, { 36, 32 }, { 52, 32 }, { 68, 32 }, { 84, 32 }, { 100, 32 }, { 116, 32 }, { 132, 32 }, { 148, 32 }, { 164, 32 }, { 180, 32 }, { 202, 32 }, { 224, 32 }, - { 0, 48 }, { 16, 48 }, { 32, 48 }, { 48, 48 }, { 64, 48 }, { 80, 48 }, { 96, 48 }, { 112, 48 }, { 128, 48 }, { 144, 48 }, { 160, 48 }, { 176, 48 }, { 192, 48 }, { 208, 48 }, { 224, 48 }, - { 0, 64 }, { 20, 64 }, { 40, 64 }, { 60, 64 }, { 95, 64 }, { 132, 64 }, { 152, 64 }, { 172, 64 }, { 192, 64 }, { 208, 64 }, { 224, 64 } -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - } -}; - - #endif bool rgb_matrix_indicators_kb(void) { From 7186a631721da92c02e1d487c7a99605ee2db269 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:09:14 -0600 Subject: [PATCH 39/99] Migrate `g_led_config` to DD (M3) (#25620) --- keyboards/merge/um70/keyboard.json | 85 ++++++++++++++ keyboards/merge/um70/um70.c | 77 ------------- keyboards/miller/gm862/gm862.c | 20 ---- keyboards/miller/gm862/keyboard.json | 63 +++++++++++ keyboards/ml/gas75/gas75.c | 34 ------ keyboards/ml/gas75/keyboard.json | 5 + keyboards/momokai/tap_duo/keyboard.json | 6 + keyboards/momokai/tap_duo/tap_duo.c | 31 ----- keyboards/momokai/tap_trio/keyboard.json | 7 ++ keyboards/momokai/tap_trio/tap_trio.c | 31 ----- keyboards/monstargear/xo87/rgb/keyboard.json | 112 +++++++++++++++++++ keyboards/monstargear/xo87/rgb/rgb.c | 50 --------- keyboards/mss_studio/m63_rgb/keyboard.json | 77 +++++++++++++ keyboards/mss_studio/m63_rgb/m63_rgb.c | 50 --------- keyboards/mss_studio/m64_rgb/keyboard.json | 78 +++++++++++++ keyboards/mss_studio/m64_rgb/m64_rgb.c | 50 --------- keyboards/mwstudio/mw65_rgb/keyboard.json | 85 ++++++++++++++ keyboards/mwstudio/mw65_rgb/mw65_rgb.c | 47 -------- keyboards/mwstudio/mw75/keyboard.json | 99 ++++++++++++++++ keyboards/mwstudio/mw75/mw75.c | 47 -------- keyboards/mwstudio/mw75r2/keyboard.json | 25 ++++- keyboards/mwstudio/mw75r2/mw75r2.c | 31 ----- 22 files changed, 641 insertions(+), 469 deletions(-) delete mode 100644 keyboards/merge/um70/um70.c delete mode 100644 keyboards/ml/gas75/gas75.c delete mode 100644 keyboards/momokai/tap_duo/tap_duo.c delete mode 100644 keyboards/momokai/tap_trio/tap_trio.c delete mode 100644 keyboards/mss_studio/m63_rgb/m63_rgb.c delete mode 100644 keyboards/mss_studio/m64_rgb/m64_rgb.c delete mode 100644 keyboards/mwstudio/mw65_rgb/mw65_rgb.c delete mode 100644 keyboards/mwstudio/mw75/mw75.c delete mode 100644 keyboards/mwstudio/mw75r2/mw75r2.c diff --git a/keyboards/merge/um70/keyboard.json b/keyboards/merge/um70/keyboard.json index 7ebb61f7fe..0499ef5060 100644 --- a/keyboards/merge/um70/keyboard.json +++ b/keyboards/merge/um70/keyboard.json @@ -38,6 +38,91 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"x": 224, "y": 0, "flags": 2}, + {"x": 224, "y": 13, "flags": 2}, + {"x": 224, "y": 26, "flags": 2}, + {"x": 148, "y": 39, "flags": 2}, + {"x": 185, "y": 52, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"matrix": [0, 0], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 32, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 192, "y": 16, "flags": 4}, + {"matrix": [4, 5], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 32, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 192, "y": 32, "flags": 4}, + {"matrix": [4, 6], "x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 32, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 192, "y": 48, "flags": 4}, + {"matrix": [4, 7], "x": 0, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 32, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 64, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 96, "y": 64, "flags": 1}, + {"matrix": [4, 3], "x": 128, "y": 64, "flags": 1}, + {"matrix": [4, 4], "x": 160, "y": 64, "flags": 1}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 224, "y": 13, "flags": 2}, + {"x": 224, "y": 26, "flags": 2}, + {"x": 148, "y": 39, "flags": 2}, + {"x": 185, "y": 52, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"matrix": [5, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [5, 1], "x": 32, "y": 0, "flags": 4}, + {"matrix": [5, 2], "x": 64, "y": 0, "flags": 4}, + {"matrix": [5, 3], "x": 96, "y": 0, "flags": 4}, + {"matrix": [5, 4], "x": 128, "y": 0, "flags": 4}, + {"matrix": [5, 5], "x": 160, "y": 0, "flags": 4}, + {"matrix": [5, 6], "x": 192, "y": 0, "flags": 4}, + {"matrix": [5, 7], "x": 224, "y": 0, "flags": 1}, + {"matrix": [6, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [6, 1], "x": 32, "y": 16, "flags": 4}, + {"matrix": [6, 2], "x": 64, "y": 16, "flags": 4}, + {"matrix": [6, 3], "x": 96, "y": 16, "flags": 4}, + {"matrix": [6, 4], "x": 128, "y": 16, "flags": 4}, + {"matrix": [6, 5], "x": 160, "y": 16, "flags": 4}, + {"matrix": [6, 6], "x": 192, "y": 16, "flags": 4}, + {"matrix": [6, 7], "x": 223, "y": 16, "flags": 1}, + {"matrix": [8, 7], "x": 224, "y": 16, "flags": 4}, + {"matrix": [7, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [7, 1], "x": 32, "y": 32, "flags": 4}, + {"matrix": [7, 2], "x": 64, "y": 32, "flags": 4}, + {"matrix": [7, 3], "x": 96, "y": 32, "flags": 4}, + {"matrix": [7, 4], "x": 128, "y": 32, "flags": 4}, + {"matrix": [7, 5], "x": 160, "y": 32, "flags": 4}, + {"matrix": [7, 6], "x": 192, "y": 32, "flags": 1}, + {"matrix": [9, 7], "x": 223, "y": 32, "flags": 4}, + {"matrix": [8, 0], "x": 0, "y": 48, "flags": 4}, + {"matrix": [8, 1], "x": 32, "y": 48, "flags": 4}, + {"matrix": [8, 2], "x": 64, "y": 48, "flags": 4}, + {"matrix": [8, 3], "x": 96, "y": 48, "flags": 4}, + {"matrix": [8, 4], "x": 128, "y": 48, "flags": 4}, + {"matrix": [8, 5], "x": 160, "y": 48, "flags": 1}, + {"matrix": [8, 6], "x": 192, "y": 48, "flags": 4}, + {"matrix": [9, 0], "x": 0, "y": 46, "flags": 1}, + {"matrix": [9, 1], "x": 32, "y": 46, "flags": 1}, + {"matrix": [9, 2], "x": 64, "y": 64, "flags": 1}, + {"matrix": [9, 3], "x": 96, "y": 64, "flags": 4}, + {"matrix": [9, 4], "x": 128, "y": 64, "flags": 4}, + {"matrix": [9, 5], "x": 160, "y": 64, "flags": 4} + ], "split_count": [39, 44] }, "rgblight": { diff --git a/keyboards/merge/um70/um70.c b/keyboards/merge/um70/um70.c deleted file mode 100644 index b63fcdbedd..0000000000 --- a/keyboards/merge/um70/um70.c +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright 2021 duoshock - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -/* - Underglow Underglow 13,14 = split bksp, 14 = 2u bksp - 07 08 09 10 11 12 13 01 01 07 08 09 10 11 12 13 14 - 14 15 16 17 18 19 02 02 15 16 17 18 19 20 21 22 23 -20 21 22 23 24 25 26 03 03 24 25 26 27 28 29 30 31 -27 28 29 30 31 32 33 04 04 32 33 34 35 36 37 38 -34 35 36 37 38 39 05 05 39 40 41 42 43 44 - 06 06 -*/ - -#define XX NO_LED - -led_config_t g_led_config = { { - { 6, 7, 8, 9, 10, 11, 12, XX }, - { 13, 14, 15, 16, 17, 18, XX, XX }, - { 20, 21, 22, 23, 24, 25, XX, XX }, - { 27, 28, 29, 30, 31, 32, XX, XX }, - { 34, 35, 36, 37, 38, 19, 26, 33 }, - - { 45, 46, 47, 48, 49, 50, 51, 52 }, - { 53, 54, 55, 56, 57, 58, 59, 60 }, - { 62, 63, 64, 65, 66, 67, 68, XX }, - { 70, 71, 72, 73, 74, 75, 76, 61 }, - { 77, 78, 79, 80, 81, 82, XX, 69 }, -}, { - { 224, 0 }, { 224, 13 }, { 224, 26 }, { 148, 39 }, { 185, 52 }, { 224, 64 }, - - { 32, 0 }, { 64, 0 }, { 96, 0 }, { 128, 0 }, { 160, 0 }, { 192, 0 }, { 224, 0 }, - { 32, 16 }, { 64, 16 }, { 96, 16 }, { 128, 16 }, { 160, 16 }, { 192, 16 }, - { 0, 32 }, { 32, 32 }, { 64, 32 }, { 96, 32 }, { 128, 32 }, { 160, 32 }, { 192, 32 }, - { 0, 48 }, { 32, 48 }, { 64, 48 }, { 96, 48 }, { 128, 48 }, { 160, 48 }, { 192, 48 }, - { 0, 64 }, { 32, 64 }, { 64, 64 }, { 96, 64 }, { 128, 64 }, { 160, 64 }, - - { 224, 0 }, { 224, 13 }, { 224, 26 }, { 148, 39 }, { 185, 52 }, { 224, 64 }, - - { 0, 0 }, { 32, 0 }, { 64, 0 }, { 96, 0 }, { 128, 0 }, { 160, 0 }, { 192, 0 }, { 224, 0 }, - { 0, 16 }, { 32, 16 }, { 64, 16 }, { 96, 16 }, { 128, 16 }, { 160, 16 }, { 192, 16 }, { 223, 16 }, { 224, 16 }, - { 0, 32 }, { 32, 32 }, { 64, 32 }, { 96, 32 }, { 128, 32 }, { 160, 32 }, { 192, 32 }, { 223, 32 }, - { 0, 48 }, { 32, 48 }, { 64, 48 }, { 96, 48 }, { 128, 48 }, { 160, 48 }, { 192, 48 }, - { 0, 46 }, { 32, 46 }, { 64, 64 }, { 96, 64 }, { 128, 64 }, { 160, 64 } - -}, { - 2, 2, 2, 2, 2, 2, - 4, 4, 4, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, - 4, 1, 4, 4, 4, 4, 4, - 4, 1, 4, 4, 4, 4, 4, - 4, 1, 1, 1, 1, 1, - - 2, 2, 2, 2, 2, 2, - 4, 4, 4, 4, 4, 4, 4, 1, - 4, 4, 4, 4, 4, 4, 4, 1, 4, - 4, 4, 4, 4, 4, 4, 1, 4, - 4, 4, 4, 4, 4, 1, 4, - 1, 1, 1, 4, 4, 4 -} }; - -#endif \ No newline at end of file diff --git a/keyboards/miller/gm862/gm862.c b/keyboards/miller/gm862/gm862.c index 534ef6cdc6..ae275479ba 100644 --- a/keyboards/miller/gm862/gm862.c +++ b/keyboards/miller/gm862/gm862.c @@ -64,26 +64,6 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { {0, SW11_CS13, SW10_CS13, SW12_CS13}, {0, SW8_CS14, SW7_CS14, SW9_CS14}, }; - -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, NO_LED, 40 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, NO_LED,NO_LED, 52 }, - { 53, 54, 55, NO_LED, NO_LED, 56, NO_LED, NO_LED, NO_LED, 57, 58, NO_LED,59, 60 } -}, { - { 0, 0 }, { 16, 0 }, { 32, 0 }, { 48, 0 }, { 64, 0 }, { 80, 0 }, { 96, 0 }, { 112, 0 }, { 128, 0 }, { 144, 0 }, { 160, 0 }, { 176, 0 }, { 192, 0 }, { 216, 0 }, - { 4, 16 }, { 24, 16 }, { 40, 16 }, { 56, 16 }, { 72, 16 }, { 88, 16 }, { 104, 16 }, { 120, 16 }, { 136, 16 }, { 152, 16 }, { 168, 16 }, { 184, 16 }, { 200, 16 }, { 220, 16 }, - { 6, 32 }, { 28, 32 }, { 44, 32 }, { 60, 32 }, { 76, 32 }, { 92, 32 }, { 108, 32 }, { 124, 32 }, { 140, 32 }, { 156, 32 }, { 172, 32 }, { 188, 32 }, { 204, 32 }, - { 10, 48 }, { 20, 48 }, { 52, 48 }, { 68, 48 }, { 84, 48 }, { 100, 48 }, { 116, 48 }, { 132, 48 }, { 148, 48 }, { 164, 48 }, { 180, 48 }, { 210, 48 }, - { 2, 64 }, { 22, 64 }, { 42, 64 }, { 102, 64 }, { 162, 64 }, { 182, 64 }, { 202, 64 }, { 222, 64 }, -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1 -} }; #endif bool rgb_matrix_indicators_kb(void) { diff --git a/keyboards/miller/gm862/keyboard.json b/keyboards/miller/gm862/keyboard.json index db08a580a9..15c6eb46ae 100644 --- a/keyboards/miller/gm862/keyboard.json +++ b/keyboards/miller/gm862/keyboard.json @@ -39,6 +39,69 @@ "solid_reactive": true }, "driver": "is31fl3733", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 216, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 88, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 104, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 184, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 220, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 124, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 140, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 156, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 188, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 204, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 10, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 20, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 68, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 84, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 100, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 116, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 132, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 148, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 164, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 180, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 102, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 162, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 182, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 202, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 222, "y": 64, "flags": 1} + ], "sleep": true }, "features": { diff --git a/keyboards/ml/gas75/gas75.c b/keyboards/ml/gas75/gas75.c deleted file mode 100644 index 0744dd8092..0000000000 --- a/keyboards/ml/gas75/gas75.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright 2022 ML - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } -}, { - //Key matrix (0 -> 2) - {224, 0}, {0 , 0}, {6 , 38}, -}, { - //Key matrix (0 -> 2) - 4, 1, 8, -} }; -#endif diff --git a/keyboards/ml/gas75/keyboard.json b/keyboards/ml/gas75/keyboard.json index 280735eb14..ac04365b6b 100644 --- a/keyboards/ml/gas75/keyboard.json +++ b/keyboards/ml/gas75/keyboard.json @@ -58,6 +58,11 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"x": 224, "y": 0, "flags": 4}, + {"x": 0, "y": 0, "flags": 1}, + {"x": 6, "y": 38, "flags": 8} + ], "max_brightness": 200 }, "features": { diff --git a/keyboards/momokai/tap_duo/keyboard.json b/keyboards/momokai/tap_duo/keyboard.json index 1d5302985c..82f8925594 100644 --- a/keyboards/momokai/tap_duo/keyboard.json +++ b/keyboards/momokai/tap_duo/keyboard.json @@ -42,6 +42,12 @@ "solid_splash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 168, "y": 0, "flags": 4}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 224, "y": 64, "flags": 2} + ], "max_brightness": 200, "sleep": true }, diff --git a/keyboards/momokai/tap_duo/tap_duo.c b/keyboards/momokai/tap_duo/tap_duo.c deleted file mode 100644 index 4e0bc9f42c..0000000000 --- a/keyboards/momokai/tap_duo/tap_duo.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright 2022 Momokai - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, NO_LED, NO_LED, NO_LED} -}, { - // LED Index to Physical Position - { 112, 0}, { 168, 0}, { 0, 64}, { 224, 64} -}, { - // LED Index to Flag - 4,4,2,2 -} }; - -#endif diff --git a/keyboards/momokai/tap_trio/keyboard.json b/keyboards/momokai/tap_trio/keyboard.json index 41da5585f6..536ea91a30 100644 --- a/keyboards/momokai/tap_trio/keyboard.json +++ b/keyboards/momokai/tap_trio/keyboard.json @@ -42,6 +42,13 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 56, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 168, "y": 0, "flags": 4}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 224, "y": 64, "flags": 2} + ], "max_brightness": 200, "sleep": true }, diff --git a/keyboards/momokai/tap_trio/tap_trio.c b/keyboards/momokai/tap_trio/tap_trio.c deleted file mode 100644 index 73957745a9..0000000000 --- a/keyboards/momokai/tap_trio/tap_trio.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright 2022 Momokai - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, NO_LED, NO_LED, NO_LED} -}, { - // LED Index to Physical Position - { 56, 0}, { 112, 0}, { 168, 0}, { 0, 64}, { 224, 64} -}, { - // LED Index to Flag - 4,4,4,2,2 -} }; - -#endif diff --git a/keyboards/monstargear/xo87/rgb/keyboard.json b/keyboards/monstargear/xo87/rgb/keyboard.json index 9ee83deb00..dc4015a266 100644 --- a/keyboards/monstargear/xo87/rgb/keyboard.json +++ b/keyboards/monstargear/xo87/rgb/keyboard.json @@ -58,6 +58,118 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"x": 224, "y": 63, "flags": 2}, + {"matrix": [5, 15], "x": 224, "y": 63, "flags": 1}, + {"matrix": [5, 14], "x": 215, "y": 63, "flags": 1}, + {"matrix": [5, 13], "x": 206, "y": 63, "flags": 1}, + {"matrix": [4, 15], "x": 180, "y": 63, "flags": 1}, + {"matrix": [5, 12], "x": 168, "y": 63, "flags": 1}, + {"matrix": [5, 11], "x": 153, "y": 63, "flags": 1}, + {"matrix": [5, 10], "x": 135, "y": 63, "flags": 1}, + {"matrix": [5, 6], "x": 101, "y": 63, "flags": 4}, + {"matrix": [5, 2], "x": 33, "y": 63, "flags": 1}, + {"matrix": [5, 1], "x": 22, "y": 63, "flags": 1}, + {"matrix": [5, 0], "x": 0, "y": 63, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 48, "flags": 1}, + {"matrix": [4, 2], "x": 30, "y": 48, "flags": 4}, + {"matrix": [4, 3], "x": 45, "y": 48, "flags": 4}, + {"matrix": [4, 4], "x": 60, "y": 48, "flags": 4}, + {"matrix": [4, 5], "x": 75, "y": 48, "flags": 4}, + {"matrix": [4, 6], "x": 90, "y": 48, "flags": 4}, + {"matrix": [4, 7], "x": 105, "y": 48, "flags": 4}, + {"matrix": [4, 8], "x": 120, "y": 48, "flags": 4}, + {"matrix": [4, 9], "x": 135, "y": 48, "flags": 4}, + {"matrix": [4, 10], "x": 150, "y": 48, "flags": 4}, + {"matrix": [4, 11], "x": 165, "y": 48, "flags": 4}, + {"matrix": [4, 12], "x": 198, "y": 48, "flags": 1}, + {"matrix": [4, 14], "x": 215, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 198, "y": 36, "flags": 1}, + {"matrix": [3, 11], "x": 180, "y": 36, "flags": 4}, + {"matrix": [3, 10], "x": 176, "y": 36, "flags": 4}, + {"matrix": [3, 9], "x": 161, "y": 36, "flags": 4}, + {"matrix": [3, 8], "x": 146, "y": 36, "flags": 4}, + {"matrix": [3, 7], "x": 131, "y": 36, "flags": 4}, + {"matrix": [3, 6], "x": 116, "y": 36, "flags": 4}, + {"matrix": [3, 5], "x": 101, "y": 36, "flags": 4}, + {"matrix": [3, 4], "x": 86, "y": 36, "flags": 4}, + {"matrix": [3, 3], "x": 71, "y": 36, "flags": 4}, + {"matrix": [3, 2], "x": 56, "y": 36, "flags": 4}, + {"matrix": [3, 1], "x": 41, "y": 36, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 36, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 24, "flags": 1}, + {"matrix": [2, 1], "x": 22, "y": 24, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 24, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 24, "flags": 4}, + {"matrix": [2, 4], "x": 67, "y": 24, "flags": 4}, + {"matrix": [2, 5], "x": 82, "y": 24, "flags": 4}, + {"matrix": [2, 6], "x": 97, "y": 24, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 24, "flags": 4}, + {"matrix": [2, 8], "x": 127, "y": 24, "flags": 4}, + {"matrix": [2, 9], "x": 142, "y": 24, "flags": 4}, + {"matrix": [2, 10], "x": 157, "y": 24, "flags": 4}, + {"matrix": [2, 11], "x": 172, "y": 24, "flags": 4}, + {"matrix": [2, 12], "x": 187, "y": 24, "flags": 4}, + {"matrix": [4, 13], "x": 202, "y": 24, "flags": 1}, + {"matrix": [2, 13], "x": 206, "y": 24, "flags": 1}, + {"matrix": [2, 14], "x": 215, "y": 24, "flags": 1}, + {"matrix": [2, 15], "x": 224, "y": 24, "flags": 1}, + {"matrix": [1, 15], "x": 224, "y": 12, "flags": 1}, + {"matrix": [1, 14], "x": 215, "y": 12, "flags": 1}, + {"matrix": [1, 13], "x": 206, "y": 12, "flags": 1}, + {"matrix": [3, 13], "x": 202, "y": 12, "flags": 1}, + {"matrix": [1, 12], "x": 187, "y": 12, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 12, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 12, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 12, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 12, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 12, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 12, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 12, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 12, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 12, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 12, "flags": 4}, + {"matrix": [1, 1], "x": 22, "y": 12, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 12, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"x": 0, "y": 0, "flags": 8}, + {"x": 0, "y": 0, "flags": 8}, + {"x": 0, "y": 0, "flags": 8}, + {"matrix": [0, 1], "x": 25, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 40, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 55, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 82, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 108, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 120, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 130, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 148, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 172, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 187, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 190, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 195, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 206, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 215, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 1} + ], "max_brightness": 100, "sleep": true }, diff --git a/keyboards/monstargear/xo87/rgb/rgb.c b/keyboards/monstargear/xo87/rgb/rgb.c index c064953444..1e29c8b70b 100644 --- a/keyboards/monstargear/xo87/rgb/rgb.c +++ b/keyboards/monstargear/xo87/rgb/rgb.c @@ -15,56 +15,6 @@ */ #include "quantum.h" -led_config_t g_led_config = { { - // esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 prtscr scrl brk - { 91, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109 }, - //tilde 1 2 3 4 5 6 7 8 9 0 - = ins home pgup - { 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 76, 75, 74 }, - //tab q w e r t y u i o p [ ] del end pgdn - { 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73 }, - //caps a s d f g h j k l ; ' return bspc - { 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 77, NO_LED, NO_LED }, - //lshift z x c v b n m , . / rshift bsls up rctl - { 31, NO_LED, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 70, 43, 23 }, - //ctrl win alt space alt win mod left down right - { 30, 29, 28, NO_LED, NO_LED, NO_LED, 27, NO_LED, NO_LED, NO_LED, 26, 25, 24, 22, 21, 20 }, - //underglow lights - //{ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }, - //{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } - -}, { - // Underglow lights - { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, { 254, 63 }, - // right down left rctl mod rwin ralt space lalt lwin lctl - { 225, 63 }, { 215, 63 }, { 206, 63 }, { 180, 63 }, { 168, 63}, { 153, 63 }, { 135, 63 }, { 101, 63 }, { 33, 63 }, { 22, 63 }, { 0, 63 }, - // lshift z x c v b n m comma period question rshift up - { 0, 48 }, { 30, 48 }, { 45, 48 }, { 60, 48 }, { 75, 48 }, { 90, 48 }, { 105, 48 }, { 120, 48 }, { 135, 48 }, { 150, 48 }, { 165, 48 }, { 198, 48 }, { 215, 48}, - // return ' ; l k j h g f d s a capslock - { 198, 36 }, { 180, 36 }, { 176, 36 }, { 161, 36 }, { 146, 36 }, { 131, 36 }, { 116, 36 }, { 101, 36 }, { 86, 36 }, { 71, 36 }, { 56, 36 }, { 41, 36 }, { 0, 36 }, - // tab q w e r t y u i o p [ ] backslash del end pgdn - { 0, 24 }, { 22, 24}, { 37, 24 }, { 52, 24 }, { 67, 24 }, { 82, 24 }, { 97, 24 }, { 112, 24 }, { 127, 24 }, { 142, 24 }, { 157, 24 }, { 172, 24 }, { 187, 24 }, { 202, 24}, { 206, 24 }, {215, 24}, { 225, 24 }, - // pgup home ins backspace = - 0 9 8 7 6 5 4 3 2 1 tilde - { 225, 12 }, {215, 12}, { 206, 12 }, { 202, 12}, { 187, 12 }, { 172, 12 }, { 157, 12 }, { 142, 12 }, { 127, 12 }, { 112, 12 }, { 97, 12 }, { 82, 12 }, { 67, 12 }, { 52, 12 }, { 37, 12 }, { 22, 12}, { 0, 12 }, - // esc ind1 ind2 ind3 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 prtscr scrlck pause - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 25, 0 }, { 40, 0 }, { 55, 0 }, { 82, 0 }, { 108, 0 }, { 120, 0 }, { 130, 0 }, { 148, 0 }, { 172, 0 }, { 187, 0 }, { 190, 0 }, { 195, 0 }, { 206, 0 }, { 215, 0}, { 225, 0 } -}, { - // underglow - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - // bottom row - 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, - // 2nd row up - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - // 3rd row up - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // 4th row up - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - // 5th row up - 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - // top row - 1, 8, 8, 8, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1 -} }; - - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/mss_studio/m63_rgb/keyboard.json b/keyboards/mss_studio/m63_rgb/keyboard.json index b798df21dd..5aa3a753e2 100644 --- a/keyboards/mss_studio/m63_rgb/keyboard.json +++ b/keyboards/mss_studio/m63_rgb/keyboard.json @@ -61,6 +61,83 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 216, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 88, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 104, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 184, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 220, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 8}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 124, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 140, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 156, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 188, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 214, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 10, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 68, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 84, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 100, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 116, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 132, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 148, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 164, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 186, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 208, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 102, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 160, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 176, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 192, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 208, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 4}, + {"x": 216, "y": 56, "flags": 2}, + {"x": 181, "y": 57, "flags": 2}, + {"x": 138, "y": 59, "flags": 2}, + {"x": 105, "y": 58, "flags": 2}, + {"x": 52, "y": 60, "flags": 2}, + {"x": 10, "y": 60, "flags": 2}, + {"x": 20, "y": 12, "flags": 2}, + {"x": 54, "y": 12, "flags": 2}, + {"x": 102, "y": 10, "flags": 2}, + {"x": 145, "y": 13, "flags": 2}, + {"x": 182, "y": 9, "flags": 2}, + {"x": 211, "y": 10, "flags": 2} + ], "max_brightness": 200 }, "features": { diff --git a/keyboards/mss_studio/m63_rgb/m63_rgb.c b/keyboards/mss_studio/m63_rgb/m63_rgb.c deleted file mode 100644 index 71a43720cc..0000000000 --- a/keyboards/mss_studio/m63_rgb/m63_rgb.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright 2021 Mss Studio - * Copyright 2022 HorrorTroll - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, NO_LED, 40 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, NO_LED, 52, 53 }, - { 54, 55, 56, NO_LED, NO_LED, 57, NO_LED, NO_LED, NO_LED, 58, 59, 60, 61, 62 } -}, { - // Key matrix (0 -> 62) - {0 , 0}, {16 , 0}, {32 , 0}, {48 , 0}, {64 , 0}, {80 , 0}, {96 , 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {216, 0}, - {4 , 16}, {24 , 16}, {40 , 16}, {56 , 16}, {72 , 16}, {88 , 16}, {104, 16}, {120, 16}, {136, 16}, {152, 16}, {168, 16}, {184, 16}, {200, 16}, {220, 16}, - {6 , 32}, {28 , 32}, {44 , 32}, {60 , 32}, {76 , 32}, {92 , 32}, {108, 32}, {124, 32}, {140, 32}, {156, 32}, {172, 32}, {188, 32}, {214, 32}, - {10 , 48}, {36 , 48}, {52 , 48}, {68 , 48}, {84 , 48}, {100, 48}, {116, 48}, {132, 48}, {148, 48}, {164, 48}, {186, 48}, {208, 48}, {224, 48}, - {2 , 64}, {22 , 64}, {42 , 64}, {102, 64}, {160, 64}, {176, 64}, {192, 64}, {208, 64}, {224, 64}, - - // Underglow (63 -> 74) - {216, 56}, {181, 57}, {138, 59}, {105, 58}, {52 , 60}, {10 , 60}, - {20 , 12}, {54 , 12}, {102, 10}, {145, 13}, {182, 9}, {211, 10}, -}, { - // Key matrix (0 -> 62) - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, - 1, 1, 1, 4, 1, 1, 4, 4, 4, - - // Underglow (63 -> 74) - 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2 -} }; -#endif diff --git a/keyboards/mss_studio/m64_rgb/keyboard.json b/keyboards/mss_studio/m64_rgb/keyboard.json index 083afec8c7..b2aa92d8f2 100644 --- a/keyboards/mss_studio/m64_rgb/keyboard.json +++ b/keyboards/mss_studio/m64_rgb/keyboard.json @@ -61,6 +61,84 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 216, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 88, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 104, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 184, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 220, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 8}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 124, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 140, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 156, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 188, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 214, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 8, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 192, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 208, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 102, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 160, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 176, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 192, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 208, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 4}, + {"x": 216, "y": 56, "flags": 2}, + {"x": 181, "y": 57, "flags": 2}, + {"x": 138, "y": 59, "flags": 2}, + {"x": 105, "y": 58, "flags": 2}, + {"x": 52, "y": 60, "flags": 2}, + {"x": 10, "y": 60, "flags": 2}, + {"x": 20, "y": 12, "flags": 2}, + {"x": 54, "y": 12, "flags": 2}, + {"x": 102, "y": 10, "flags": 2}, + {"x": 145, "y": 13, "flags": 2}, + {"x": 182, "y": 9, "flags": 2}, + {"x": 211, "y": 10, "flags": 2} + ], "max_brightness": 200 }, "features": { diff --git a/keyboards/mss_studio/m64_rgb/m64_rgb.c b/keyboards/mss_studio/m64_rgb/m64_rgb.c deleted file mode 100644 index f9b2778371..0000000000 --- a/keyboards/mss_studio/m64_rgb/m64_rgb.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright 2021 Mss Studio - * Copyright 2022 HorrorTroll - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, NO_LED, 40 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54 }, - { 55, 56, 57, NO_LED, NO_LED, 58, NO_LED, NO_LED, NO_LED, 59, 60, 61, 62, 63 } -}, { - // Key matrix (0 -> 63) - {0 , 0}, {16 , 0}, {32 , 0}, {48 , 0}, {64 , 0}, {80 , 0}, {96 , 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {216, 0}, - {4 , 16}, {24 , 16}, {40 , 16}, {56 , 16}, {72 , 16}, {88 , 16}, {104, 16}, {120, 16}, {136, 16}, {152, 16}, {168, 16}, {184, 16}, {200, 16}, {220, 16}, - {6 , 32}, {28 , 32}, {44 , 32}, {60 , 32}, {76 , 32}, {92 , 32}, {108, 32}, {124, 32}, {140, 32}, {156, 32}, {172, 32}, {188, 32}, {214, 32}, - {8 , 48}, {32 , 48}, {48 , 48}, {64 , 48}, {80 , 48}, {96 , 48}, {112, 48}, {128, 48}, {144, 48}, {160, 48}, {176, 48}, {192, 48}, {208, 48}, {224, 48}, - {2 , 64}, {22 , 64}, {42 , 64}, {102, 64}, {160, 64}, {176, 64}, {192, 64}, {208, 64}, {224, 64}, - - // Underglow (64 -> 75) - {216, 56}, {181, 57}, {138, 59}, {105, 58}, {52 , 60}, {10 , 60}, - {20 , 12}, {54 , 12}, {102, 10}, {145, 13}, {182, 9}, {211, 10}, -}, { - // Key matrix (0 -> 63) - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, - 1, 1, 1, 4, 1, 1, 4, 4, 4, - - // Underglow (64 -> 75) - 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2 -} }; -#endif diff --git a/keyboards/mwstudio/mw65_rgb/keyboard.json b/keyboards/mwstudio/mw65_rgb/keyboard.json index ce8e3f978c..5508e3b663 100644 --- a/keyboards/mwstudio/mw65_rgb/keyboard.json +++ b/keyboards/mwstudio/mw65_rgb/keyboard.json @@ -54,6 +54,91 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"x": 180, "y": 52, "flags": 2}, + {"x": 146, "y": 52, "flags": 2}, + {"x": 86, "y": 52, "flags": 2}, + {"x": 45, "y": 52, "flags": 2}, + {"x": 7, "y": 52, "flags": 2}, + {"x": 7, "y": 36, "flags": 2}, + {"x": 7, "y": 20, "flags": 2}, + {"x": 7, "y": 4, "flags": 2}, + {"x": 45, "y": 4, "flags": 2}, + {"x": 86, "y": 4, "flags": 2}, + {"x": 146, "y": 4, "flags": 2}, + {"x": 180, "y": 4, "flags": 2}, + {"x": 217, "y": 4, "flags": 2}, + {"x": 217, "y": 20, "flags": 2}, + {"x": 217, "y": 36, "flags": 2}, + {"x": 217, "y": 52, "flags": 2}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 209, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 194, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 173, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 156, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 36, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 19, "y": 64, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [3, 0], "x": 8, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 31, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 46, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 61, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 76, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 91, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 106, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 121, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 136, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 151, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 166, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 188, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 200, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 175, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 145, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 130, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 115, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 100, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 85, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 70, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 55, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 25, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 5, "y": 32, "flags": 8}, + {"matrix": [1, 0], "x": 3, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 21, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 36, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 51, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 66, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 81, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 111, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 126, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 141, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 156, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 171, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 186, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 205, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1} + ], "max_brightness": 200 }, "features": { diff --git a/keyboards/mwstudio/mw65_rgb/mw65_rgb.c b/keyboards/mwstudio/mw65_rgb/mw65_rgb.c deleted file mode 100644 index 0cd8fdaa75..0000000000 --- a/keyboards/mwstudio/mw65_rgb/mw65_rgb.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright 2021 TW59420 - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68 }, - { 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67 }, - { 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, NO_LED, 40, 39 }, - { 25, NO_LED, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38 }, - { 24, 23, 22, NO_LED, NO_LED, NO_LED, 21, NO_LED, NO_LED, NO_LED, 20, 19, 18, 17, 16 } -}, { - //Underglow (0 -> 15) - {180, 52}, {146, 52}, {86 , 52}, {45 , 52}, {7 , 52}, {7 , 36}, {7 , 20}, {7 , 4}, {45 , 4}, {86 , 4}, {146, 4}, {180, 4}, {217, 4}, {217, 20}, {217, 36}, {217, 52}, - - //Key matrix (16 -> 83) - {224, 64}, {209, 64}, {194, 64}, {173, 64}, {156, 64}, {96 , 64}, {36 , 64}, {19 , 64}, {2 , 64}, - {8 , 48}, {31 , 48}, {46 , 48}, {61 , 48}, {76 , 48}, {91 , 48}, {106, 48}, {121, 48}, {136, 48}, {151, 48}, {166, 48}, {188, 48}, {210, 48}, {224, 48}, - {224, 32}, {200, 32}, {175, 32}, {160, 32}, {145, 32}, {130, 32}, {115, 32}, {100, 32}, {85 , 32}, {70 , 32}, {55 , 32}, {40 , 32}, {25 , 32}, {5 , 32}, - {3 , 16}, {21 , 16}, {36 , 16}, {51 , 16}, {66 , 16}, {81 , 16}, {96 , 16}, {111, 16}, {126, 16}, {141, 16}, {156, 16}, {171, 16}, {186, 16}, {205, 16}, {224, 16}, - {224, 0}, {202, 0}, {180, 0}, {165, 0}, {150, 0}, {135, 0}, {120, 0}, {105, 0}, {90 , 0}, {75 , 0}, {60 , 0}, {45 , 0}, {30 , 0}, {15 , 0}, {0 , 0}, -}, { - //Underglow (0 -> 15) - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - - //Key matrix (16 -> 82) - 4, 4, 4, 1, 1, 4, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, - 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, -} }; -#endif diff --git a/keyboards/mwstudio/mw75/keyboard.json b/keyboards/mwstudio/mw75/keyboard.json index 489e711c5b..4096bd943a 100644 --- a/keyboards/mwstudio/mw75/keyboard.json +++ b/keyboards/mwstudio/mw75/keyboard.json @@ -51,6 +51,105 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [5, 14], "x": 217, "y": 60, "flags": 1}, + {"matrix": [5, 13], "x": 203, "y": 60, "flags": 1}, + {"matrix": [5, 12], "x": 189, "y": 60, "flags": 1}, + {"matrix": [5, 11], "x": 166, "y": 60, "flags": 1}, + {"matrix": [5, 10], "x": 150, "y": 60, "flags": 1}, + {"matrix": [5, 6], "x": 95, "y": 60, "flags": 1}, + {"matrix": [5, 2], "x": 40, "y": 60, "flags": 1}, + {"matrix": [5, 1], "x": 24, "y": 60, "flags": 1}, + {"matrix": [5, 0], "x": 8, "y": 60, "flags": 1}, + {"matrix": [4, 14], "x": 217, "y": 50, "flags": 1}, + {"matrix": [4, 13], "x": 203, "y": 50, "flags": 1}, + {"matrix": [4, 12], "x": 184, "y": 50, "flags": 1}, + {"matrix": [4, 11], "x": 165, "y": 50, "flags": 1}, + {"matrix": [4, 10], "x": 151, "y": 50, "flags": 1}, + {"matrix": [4, 9], "x": 137, "y": 50, "flags": 1}, + {"matrix": [4, 8], "x": 123, "y": 50, "flags": 1}, + {"matrix": [4, 7], "x": 109, "y": 50, "flags": 1}, + {"matrix": [4, 6], "x": 95, "y": 50, "flags": 1}, + {"matrix": [4, 5], "x": 81, "y": 50, "flags": 1}, + {"matrix": [4, 4], "x": 67, "y": 50, "flags": 1}, + {"matrix": [4, 3], "x": 53, "y": 50, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 50, "flags": 1}, + {"matrix": [4, 0], "x": 17, "y": 50, "flags": 1}, + {"matrix": [3, 14], "x": 217, "y": 40, "flags": 1}, + {"matrix": [3, 13], "x": 195, "y": 40, "flags": 1}, + {"matrix": [3, 11], "x": 172, "y": 40, "flags": 1}, + {"matrix": [3, 10], "x": 158, "y": 40, "flags": 1}, + {"matrix": [3, 9], "x": 144, "y": 40, "flags": 1}, + {"matrix": [3, 8], "x": 130, "y": 40, "flags": 1}, + {"matrix": [3, 7], "x": 116, "y": 40, "flags": 1}, + {"matrix": [3, 6], "x": 102, "y": 40, "flags": 1}, + {"matrix": [3, 5], "x": 88, "y": 40, "flags": 1}, + {"matrix": [3, 4], "x": 74, "y": 40, "flags": 1}, + {"matrix": [3, 3], "x": 60, "y": 40, "flags": 1}, + {"matrix": [3, 2], "x": 46, "y": 40, "flags": 1}, + {"matrix": [3, 1], "x": 32, "y": 40, "flags": 1}, + {"matrix": [3, 0], "x": 13, "y": 40, "flags": 1}, + {"matrix": [2, 14], "x": 217, "y": 30, "flags": 1}, + {"matrix": [2, 13], "x": 199, "y": 30, "flags": 1}, + {"matrix": [2, 12], "x": 181, "y": 30, "flags": 1}, + {"matrix": [2, 11], "x": 165, "y": 30, "flags": 1}, + {"matrix": [2, 10], "x": 151, "y": 30, "flags": 1}, + {"matrix": [2, 9], "x": 137, "y": 30, "flags": 1}, + {"matrix": [2, 8], "x": 123, "y": 30, "flags": 1}, + {"matrix": [2, 7], "x": 109, "y": 30, "flags": 1}, + {"matrix": [2, 6], "x": 95, "y": 30, "flags": 1}, + {"matrix": [2, 5], "x": 81, "y": 30, "flags": 1}, + {"matrix": [2, 4], "x": 67, "y": 30, "flags": 1}, + {"matrix": [2, 3], "x": 53, "y": 30, "flags": 1}, + {"matrix": [2, 2], "x": 39, "y": 30, "flags": 1}, + {"matrix": [2, 1], "x": 25, "y": 30, "flags": 1}, + {"matrix": [2, 0], "x": 9, "y": 30, "flags": 1}, + {"matrix": [1, 14], "x": 217, "y": 20, "flags": 1}, + {"matrix": [1, 13], "x": 196, "y": 20, "flags": 1}, + {"matrix": [1, 12], "x": 175, "y": 20, "flags": 1}, + {"matrix": [1, 11], "x": 161, "y": 20, "flags": 1}, + {"matrix": [1, 10], "x": 147, "y": 20, "flags": 1}, + {"matrix": [1, 9], "x": 133, "y": 20, "flags": 1}, + {"matrix": [1, 8], "x": 119, "y": 20, "flags": 1}, + {"matrix": [1, 7], "x": 105, "y": 20, "flags": 1}, + {"matrix": [1, 6], "x": 91, "y": 20, "flags": 1}, + {"matrix": [1, 5], "x": 77, "y": 20, "flags": 1}, + {"matrix": [1, 4], "x": 63, "y": 20, "flags": 1}, + {"matrix": [1, 3], "x": 49, "y": 20, "flags": 1}, + {"matrix": [1, 2], "x": 35, "y": 20, "flags": 1}, + {"matrix": [1, 1], "x": 21, "y": 20, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 20, "flags": 1}, + {"matrix": [0, 14], "x": 217, "y": 5, "flags": 1}, + {"matrix": [0, 13], "x": 196, "y": 5, "flags": 1}, + {"matrix": [0, 12], "x": 182, "y": 5, "flags": 1}, + {"matrix": [0, 11], "x": 168, "y": 5, "flags": 1}, + {"matrix": [0, 10], "x": 154, "y": 5, "flags": 1}, + {"matrix": [0, 9], "x": 133, "y": 5, "flags": 1}, + {"matrix": [0, 8], "x": 119, "y": 5, "flags": 1}, + {"matrix": [0, 7], "x": 105, "y": 5, "flags": 1}, + {"matrix": [0, 6], "x": 91, "y": 5, "flags": 1}, + {"matrix": [0, 5], "x": 70, "y": 5, "flags": 1}, + {"matrix": [0, 4], "x": 56, "y": 5, "flags": 1}, + {"matrix": [0, 3], "x": 42, "y": 5, "flags": 1}, + {"matrix": [0, 2], "x": 28, "y": 5, "flags": 1}, + {"matrix": [0, 1], "x": 7, "y": 5, "flags": 1}, + {"matrix": [0, 0], "x": 14, "y": 14, "flags": 1}, + {"matrix": [6, 0], "x": 42, "y": 14, "flags": 1}, + {"matrix": [6, 1], "x": 98, "y": 14, "flags": 1}, + {"matrix": [6, 2], "x": 154, "y": 14, "flags": 1}, + {"matrix": [6, 3], "x": 182, "y": 14, "flags": 1}, + {"matrix": [6, 4], "x": 210, "y": 14, "flags": 1}, + {"matrix": [6, 5], "x": 210, "y": 25, "flags": 1}, + {"matrix": [6, 6], "x": 210, "y": 40, "flags": 1}, + {"matrix": [6, 7], "x": 210, "y": 55, "flags": 1}, + {"matrix": [6, 8], "x": 182, "y": 55, "flags": 1}, + {"matrix": [6, 9], "x": 126, "y": 55, "flags": 1}, + {"matrix": [6, 10], "x": 98, "y": 55, "flags": 1}, + {"matrix": [6, 11], "x": 42, "y": 55, "flags": 1}, + {"matrix": [6, 12], "x": 14, "y": 55, "flags": 1}, + {"matrix": [6, 13], "x": 14, "y": 40, "flags": 1}, + {"matrix": [6, 14], "x": 14, "y": 25, "flags": 1} + ], "max_brightness": 200 }, "features": { diff --git a/keyboards/mwstudio/mw75/mw75.c b/keyboards/mwstudio/mw75/mw75.c deleted file mode 100644 index dda51cb971..0000000000 --- a/keyboards/mwstudio/mw75/mw75.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright 2021 TW59420 - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67 }, - { 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52 }, - { 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37 }, - { 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, NO_LED, 24, 23 }, - { 22, NO_LED, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9 }, - { 8, 7, 6, NO_LED, NO_LED, NO_LED, 5, NO_LED, NO_LED, NO_LED, 4, 3, 2, 1, 0 }, - { 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 } -}, { - { 217, 60 }, { 203, 60 }, { 189, 60 }, { 166, 60 }, { 150, 60 }, { 95, 60 }, { 40, 60 }, { 24, 60 }, { 8, 60 }, - { 217, 50 }, { 203, 50 }, { 184, 50 }, { 165, 50 }, { 151, 50 }, { 137, 50 }, { 123, 50 }, { 109, 50 }, { 95, 50 }, { 81, 50 }, { 67, 50 }, { 53, 50 }, { 39, 50 }, { 17, 50 }, - { 217, 40 }, { 195, 40 }, { 172, 40 }, { 158, 40 }, { 144, 40 }, { 130, 40 }, { 116, 40 }, { 102, 40 }, { 88, 40 }, { 74, 40 }, { 60, 40 }, { 46, 40 }, { 32, 40 }, { 13, 40 }, - { 217, 30 }, { 199, 30 }, { 181, 30 }, { 165, 30 }, { 151, 30 }, { 137, 30 }, { 123, 30 }, { 109, 30 }, { 95, 30 }, { 81, 30 }, { 67, 30 }, { 53, 30 }, { 39, 30 }, { 25, 30 }, { 9, 30 }, - { 217, 20 }, { 196, 20 }, { 175, 20 }, { 161, 20 }, { 147, 20 }, { 133, 20 }, { 119, 20 }, { 105, 20 }, { 91, 20 }, { 77, 20 }, { 63, 20 }, { 49, 20 }, { 35, 20 }, { 21, 20 }, { 7, 20 }, - { 217, 5 }, { 196, 5 }, { 182, 5 }, { 168, 5 }, { 154, 5 }, { 133, 5 }, { 119, 5 }, { 105, 5 }, { 91, 5 }, { 70, 5 }, { 56, 5 }, { 42, 5 }, { 28, 5 }, { 7, 5 }, - - { 14, 14 }, { 42, 14 }, { 98, 14 }, { 154, 14 }, { 182, 14 }, { 210, 14 }, { 210, 25 }, { 210, 40 }, - { 210, 55 },{ 182, 55 },{ 126, 55 },{ 98, 55 }, { 42, 55 }, { 14, 55 }, { 14, 40 }, { 14, 25 } -}, { - 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 -} }; -#endif diff --git a/keyboards/mwstudio/mw75r2/keyboard.json b/keyboards/mwstudio/mw75r2/keyboard.json index 10c6a226ca..6cb4269400 100644 --- a/keyboards/mwstudio/mw75r2/keyboard.json +++ b/keyboards/mwstudio/mw75r2/keyboard.json @@ -39,7 +39,30 @@ "pixel_fractal": true, "pixel_rain": true }, - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"x": 105, "y": 60, "flags": 1}, + {"x": 70, "y": 60, "flags": 1}, + {"x": 35, "y": 60, "flags": 1}, + {"x": 0, "y": 60, "flags": 1}, + {"x": 0, "y": 40, "flags": 1}, + {"x": 0, "y": 20, "flags": 1}, + {"x": 0, "y": 0, "flags": 1}, + {"x": 42, "y": 0, "flags": 1}, + {"x": 84, "y": 0, "flags": 1}, + {"x": 126, "y": 0, "flags": 1}, + {"x": 168, "y": 0, "flags": 1}, + {"x": 210, "y": 0, "flags": 1}, + {"x": 210, "y": 20, "flags": 1}, + {"x": 210, "y": 40, "flags": 1}, + {"x": 40, "y": 20, "flags": 1}, + {"x": 120, "y": 20, "flags": 1}, + {"x": 40, "y": 40, "flags": 1}, + {"x": 120, "y": 40, "flags": 1}, + {"x": 210, "y": 60, "flags": 1}, + {"x": 175, "y": 60, "flags": 1}, + {"x": 140, "y": 60, "flags": 1} + ] }, "features": { "bootmagic": true, diff --git a/keyboards/mwstudio/mw75r2/mw75r2.c b/keyboards/mwstudio/mw75r2/mw75r2.c deleted file mode 100644 index ca058e9d8d..0000000000 --- a/keyboards/mwstudio/mw75r2/mw75r2.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright 2021 TW59420 - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } -}, { - { 105, 60 }, { 70, 60 }, { 35, 60 }, { 0, 60 }, { 0, 40 }, { 0, 20 }, { 0, 0 }, { 42, 0 }, { 84, 0 }, { 126, 0 }, { 168, 0 }, { 210, 0 }, { 210, 20 }, { 210, 40 }, { 40, 20 }, { 120, 20 }, { 40, 40 }, { 120, 40 }, { 210, 60 }, { 175, 60 },{ 140, 60 } -}, { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 -} }; -#endif From 04978d490ab785e42c0dbb7c79954e6a1a5ce80b Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:09:38 -0600 Subject: [PATCH 40/99] Migrate `g_led_config` to DD (M2) (#25619) --- keyboards/melgeek/mach80/rev1/keyboard.json | 103 +++++++++++++++++- keyboards/melgeek/mach80/rev1/rev1.c | 25 ----- keyboards/melgeek/mach80/rev2/keyboard.json | 100 ++++++++++++++++- keyboards/melgeek/mach80/rev2/rev2.c | 26 ----- keyboards/melgeek/mj61/rev1/keyboard.json | 69 +++++++++++- keyboards/melgeek/mj61/rev1/rev1.c | 24 ---- keyboards/melgeek/mj61/rev2/keyboard.json | 77 ++++++++++++- keyboards/melgeek/mj61/rev2/rev2.c | 24 ---- keyboards/melgeek/mj63/rev1/keyboard.json | 71 +++++++++++- keyboards/melgeek/mj63/rev1/rev1.c | 24 ---- keyboards/melgeek/mj63/rev2/keyboard.json | 77 ++++++++++++- keyboards/melgeek/mj63/rev2/rev2.c | 24 ---- keyboards/melgeek/mj64/rev1/keyboard.json | 70 +++++++++++- keyboards/melgeek/mj64/rev1/rev1.c | 23 ---- keyboards/melgeek/mj64/rev2/keyboard.json | 72 +++++++++++- keyboards/melgeek/mj64/rev2/rev2.c | 24 ---- keyboards/melgeek/mj64/rev3/keyboard.json | 78 ++++++++++++- keyboards/melgeek/mj64/rev3/rev3.c | 24 ---- keyboards/melgeek/mj65/rev3/keyboard.json | 78 +++++++++++++ keyboards/melgeek/mj65/rev3/rev3.c | 26 +---- keyboards/melgeek/mojo68/rev1/keyboard.json | 70 ++++++++++++ keyboards/melgeek/mojo68/rev1/rev1.c | 23 ---- keyboards/melgeek/mojo75/rev1/keyboard.json | 94 ++++++++++++++++ keyboards/melgeek/mojo75/rev1/rev1.c | 27 ----- keyboards/melgeek/tegic/rev1/keyboard.json | 93 ++++++++++++++++ keyboards/melgeek/tegic/rev1/rev1.c | 25 ----- keyboards/melgeek/z70ultra/rev1/keyboard.json | 71 ++++++++++++ keyboards/melgeek/z70ultra/rev1/rev1.c | 25 ----- 28 files changed, 1115 insertions(+), 352 deletions(-) diff --git a/keyboards/melgeek/mach80/rev1/keyboard.json b/keyboards/melgeek/mach80/rev1/keyboard.json index 78a8dbf0f6..7faa507606 100644 --- a/keyboards/melgeek/mach80/rev1/keyboard.json +++ b/keyboards/melgeek/mach80/rev1/keyboard.json @@ -13,5 +13,106 @@ "cols": ["B0", "B1", "B2", "B3", "D2", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "D3"], "rows": ["F0", "F1", "F4", "F5", "F6", "E6"] }, - "diode_direction": "ROW2COL" + "diode_direction": "ROW2COL", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 12, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 24, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 36, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 72, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 84, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 108, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 132, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 156, "y": 0, "flags": 4}, + {"matrix": [0, 15], "x": 168, "y": 0, "flags": 4}, + {"matrix": [3, 13], "x": 180, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 12, "flags": 4}, + {"matrix": [1, 1], "x": 12, "y": 12, "flags": 4}, + {"matrix": [1, 2], "x": 24, "y": 12, "flags": 4}, + {"matrix": [1, 3], "x": 36, "y": 12, "flags": 4}, + {"matrix": [1, 4], "x": 48, "y": 12, "flags": 4}, + {"matrix": [1, 5], "x": 60, "y": 12, "flags": 4}, + {"matrix": [1, 6], "x": 72, "y": 12, "flags": 4}, + {"matrix": [1, 7], "x": 84, "y": 12, "flags": 4}, + {"matrix": [1, 8], "x": 96, "y": 12, "flags": 4}, + {"matrix": [1, 9], "x": 108, "y": 12, "flags": 4}, + {"matrix": [1, 10], "x": 120, "y": 12, "flags": 4}, + {"matrix": [1, 11], "x": 132, "y": 12, "flags": 4}, + {"matrix": [1, 12], "x": 144, "y": 12, "flags": 4}, + {"x": 156, "y": 12, "flags": 4}, + {"matrix": [1, 13], "x": 168, "y": 12, "flags": 4}, + {"x": 180, "y": 12, "flags": 4}, + {"matrix": [1, 14], "x": 192, "y": 12, "flags": 4}, + {"matrix": [1, 15], "x": 204, "y": 12, "flags": 4}, + {"matrix": [3, 14], "x": 216, "y": 12, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 24, "flags": 4}, + {"matrix": [2, 1], "x": 12, "y": 24, "flags": 4}, + {"matrix": [2, 2], "x": 24, "y": 24, "flags": 4}, + {"matrix": [2, 3], "x": 36, "y": 24, "flags": 4}, + {"matrix": [2, 4], "x": 48, "y": 24, "flags": 4}, + {"matrix": [2, 5], "x": 60, "y": 24, "flags": 4}, + {"matrix": [2, 6], "x": 72, "y": 24, "flags": 4}, + {"matrix": [2, 7], "x": 84, "y": 24, "flags": 4}, + {"matrix": [2, 8], "x": 96, "y": 24, "flags": 4}, + {"matrix": [2, 9], "x": 108, "y": 24, "flags": 4}, + {"matrix": [2, 10], "x": 120, "y": 24, "flags": 4}, + {"matrix": [2, 11], "x": 132, "y": 24, "flags": 4}, + {"matrix": [2, 12], "x": 144, "y": 24, "flags": 4}, + {"matrix": [2, 13], "x": 156, "y": 24, "flags": 4}, + {"matrix": [2, 14], "x": 168, "y": 24, "flags": 4}, + {"matrix": [2, 15], "x": 180, "y": 24, "flags": 4}, + {"matrix": [3, 15], "x": 192, "y": 24, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 36, "flags": 4}, + {"matrix": [3, 1], "x": 12, "y": 36, "flags": 4}, + {"matrix": [3, 2], "x": 24, "y": 36, "flags": 4}, + {"matrix": [3, 3], "x": 36, "y": 36, "flags": 4}, + {"matrix": [3, 4], "x": 48, "y": 36, "flags": 4}, + {"matrix": [3, 5], "x": 60, "y": 36, "flags": 4}, + {"matrix": [3, 6], "x": 72, "y": 36, "flags": 4}, + {"matrix": [3, 7], "x": 84, "y": 36, "flags": 4}, + {"matrix": [3, 8], "x": 96, "y": 36, "flags": 4}, + {"matrix": [3, 9], "x": 108, "y": 36, "flags": 4}, + {"matrix": [3, 10], "x": 120, "y": 36, "flags": 4}, + {"matrix": [3, 11], "x": 132, "y": 36, "flags": 4}, + {"x": 144, "y": 36, "flags": 4}, + {"matrix": [3, 12], "x": 156, "y": 36, "flags": 4}, + {"x": 168, "y": 36, "flags": 4}, + {"x": 0, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 12, "y": 48, "flags": 4}, + {"x": 24, "y": 48, "flags": 4}, + {"matrix": [4, 1], "x": 36, "y": 48, "flags": 4}, + {"matrix": [4, 2], "x": 48, "y": 48, "flags": 4}, + {"matrix": [4, 3], "x": 60, "y": 48, "flags": 4}, + {"matrix": [4, 4], "x": 72, "y": 48, "flags": 4}, + {"matrix": [4, 5], "x": 84, "y": 48, "flags": 4}, + {"matrix": [4, 6], "x": 96, "y": 48, "flags": 4}, + {"matrix": [4, 7], "x": 108, "y": 48, "flags": 4}, + {"matrix": [4, 8], "x": 120, "y": 48, "flags": 4}, + {"matrix": [4, 9], "x": 132, "y": 48, "flags": 4}, + {"matrix": [4, 10], "x": 144, "y": 48, "flags": 4}, + {"x": 156, "y": 48, "flags": 4}, + {"matrix": [4, 11], "x": 168, "y": 48, "flags": 4}, + {"x": 180, "y": 48, "flags": 4}, + {"matrix": [4, 14], "x": 192, "y": 48, "flags": 4}, + {"matrix": [5, 0], "x": 0, "y": 60, "flags": 4}, + {"matrix": [5, 1], "x": 12, "y": 60, "flags": 4}, + {"matrix": [5, 2], "x": 24, "y": 60, "flags": 4}, + {"x": 36, "y": 60, "flags": 4}, + {"matrix": [5, 5], "x": 48, "y": 60, "flags": 4}, + {"x": 60, "y": 60, "flags": 4}, + {"matrix": [5, 9], "x": 72, "y": 60, "flags": 4}, + {"matrix": [5, 10], "x": 84, "y": 60, "flags": 4}, + {"matrix": [5, 11], "x": 96, "y": 60, "flags": 4}, + {"matrix": [5, 12], "x": 108, "y": 60, "flags": 4}, + {"matrix": [5, 13], "x": 120, "y": 60, "flags": 4}, + {"matrix": [5, 14], "x": 132, "y": 60, "flags": 4}, + {"matrix": [5, 15], "x": 144, "y": 60, "flags": 4} + ], + } } diff --git a/keyboards/melgeek/mach80/rev1/rev1.c b/keyboards/melgeek/mach80/rev1/rev1.c index a4b49610cc..aad1b71833 100755 --- a/keyboards/melgeek/mach80/rev1/rev1.c +++ b/keyboards/melgeek/mach80/rev1/rev1.c @@ -118,31 +118,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW6_CS39, SW6_CS38, SW6_CS37}, /* RGB111 */ {0, SW7_CS39, SW7_CS38, SW7_CS37}, /* RGB112 */ }; -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 */ - { 0, NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, /* R0 */ - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33 }, /* R1 */ - { 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 }, /* R2 */ - { 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 65, 15, 34, 51 }, /* R3 */ - { 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, NO_LED, NO_LED, 83, NO_LED }, /* R4 */ - { 84, 85, 86, NO_LED, NO_LED, 88, NO_LED, NO_LED, NO_LED, 90, 91, 92, 93, 94, 95, 96 } /* R5 */ - }, { - {0, 0}, {12, 0}, {24, 0}, {36, 0}, {48, 0}, {60, 0}, {72, 0}, {84, 0}, {96, 0}, {108, 0}, {120, 0}, {132, 0}, {144, 0}, {156, 0}, {168, 0}, {180, 0}, //16 - {0, 12}, {12, 12}, {24, 12}, {36, 12}, {48, 12}, {60, 12}, {72, 12}, {84, 12}, {96, 12}, {108, 12}, {120, 12}, {132, 12}, {144, 12}, {156, 12}, {168, 12}, {180, 12}, {192, 12}, {204, 12}, {216, 12}, //19 - {0, 24}, {12, 24}, {24, 24}, {36, 24}, {48, 24}, {60, 24}, {72, 24}, {84, 24}, {96, 24}, {108, 24}, {120, 24}, {132, 24}, {144, 24}, {156, 24}, {168, 24}, {180, 24}, {192, 24}, //17 - {0, 36}, {12, 36}, {24, 36}, {36, 36}, {48, 36}, {60, 36}, {72, 36}, {84, 36}, {96, 36}, {108, 36}, {120, 36}, {132, 36}, {144, 36}, {156, 36}, {168, 36}, //15 - {0, 48}, {12, 48}, {24, 48}, {36, 48}, {48, 48}, {60, 48}, {72, 48}, {84, 48}, {96, 48}, {108, 48}, {120, 48}, {132, 48}, {144, 48}, {156, 48}, {168, 48}, {180, 48}, {192, 48}, //17 - {0, 60}, {12, 60}, {24, 60}, {36, 60}, {48, 60}, {60, 60}, {72, 60}, {84, 60}, {96, 60}, {108, 60}, {120, 60}, {132, 60}, {144, 60} //13 - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - } -}; const is31fl3741_led_t g_is31_indicator_leds[3] = { {0, SW1_CS6, SW1_CS5, SW1_CS4}, /* RGB107 */ diff --git a/keyboards/melgeek/mach80/rev2/keyboard.json b/keyboards/melgeek/mach80/rev2/keyboard.json index 78a8dbf0f6..039e1711fd 100644 --- a/keyboards/melgeek/mach80/rev2/keyboard.json +++ b/keyboards/melgeek/mach80/rev2/keyboard.json @@ -13,5 +13,103 @@ "cols": ["B0", "B1", "B2", "B3", "D2", "D5", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "D3"], "rows": ["F0", "F1", "F4", "F5", "F6", "E6"] }, - "diode_direction": "ROW2COL" + "diode_direction": "ROW2COL", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 12, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 24, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 36, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 72, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 84, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 108, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 132, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 156, "y": 0, "flags": 4}, + {"matrix": [0, 15], "x": 168, "y": 0, "flags": 4}, + {"matrix": [3, 13], "x": 180, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 12, "flags": 4}, + {"matrix": [1, 1], "x": 12, "y": 12, "flags": 4}, + {"matrix": [1, 2], "x": 24, "y": 12, "flags": 4}, + {"matrix": [1, 3], "x": 36, "y": 12, "flags": 4}, + {"matrix": [1, 4], "x": 48, "y": 12, "flags": 4}, + {"matrix": [1, 5], "x": 60, "y": 12, "flags": 4}, + {"matrix": [1, 6], "x": 72, "y": 12, "flags": 4}, + {"matrix": [1, 7], "x": 84, "y": 12, "flags": 4}, + {"matrix": [1, 8], "x": 96, "y": 12, "flags": 4}, + {"matrix": [1, 9], "x": 108, "y": 12, "flags": 4}, + {"matrix": [1, 10], "x": 120, "y": 12, "flags": 4}, + {"matrix": [1, 11], "x": 132, "y": 12, "flags": 4}, + {"matrix": [1, 12], "x": 144, "y": 12, "flags": 4}, + {"x": 156, "y": 12, "flags": 4}, + {"matrix": [1, 13], "x": 168, "y": 12, "flags": 4}, + {"x": 180, "y": 12, "flags": 4}, + {"matrix": [1, 14], "x": 192, "y": 12, "flags": 4}, + {"matrix": [1, 15], "x": 204, "y": 12, "flags": 4}, + {"matrix": [3, 14], "x": 216, "y": 12, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 24, "flags": 4}, + {"matrix": [2, 1], "x": 12, "y": 24, "flags": 4}, + {"matrix": [2, 2], "x": 24, "y": 24, "flags": 4}, + {"matrix": [2, 3], "x": 36, "y": 24, "flags": 4}, + {"matrix": [2, 4], "x": 48, "y": 24, "flags": 4}, + {"matrix": [2, 5], "x": 60, "y": 24, "flags": 4}, + {"matrix": [2, 6], "x": 72, "y": 24, "flags": 4}, + {"matrix": [2, 7], "x": 84, "y": 24, "flags": 4}, + {"matrix": [2, 8], "x": 96, "y": 24, "flags": 4}, + {"matrix": [2, 9], "x": 108, "y": 24, "flags": 4}, + {"matrix": [2, 10], "x": 120, "y": 24, "flags": 4}, + {"matrix": [2, 11], "x": 132, "y": 24, "flags": 4}, + {"matrix": [2, 12], "x": 144, "y": 24, "flags": 4}, + {"matrix": [2, 13], "x": 156, "y": 24, "flags": 4}, + {"matrix": [2, 14], "x": 168, "y": 24, "flags": 4}, + {"matrix": [2, 15], "x": 180, "y": 24, "flags": 4}, + {"matrix": [3, 15], "x": 192, "y": 24, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 36, "flags": 4}, + {"matrix": [3, 1], "x": 12, "y": 36, "flags": 4}, + {"matrix": [3, 2], "x": 24, "y": 36, "flags": 4}, + {"matrix": [3, 3], "x": 36, "y": 36, "flags": 4}, + {"matrix": [3, 4], "x": 48, "y": 36, "flags": 4}, + {"matrix": [3, 5], "x": 60, "y": 36, "flags": 4}, + {"matrix": [3, 6], "x": 72, "y": 36, "flags": 4}, + {"matrix": [3, 7], "x": 84, "y": 36, "flags": 4}, + {"matrix": [3, 8], "x": 96, "y": 36, "flags": 4}, + {"matrix": [3, 9], "x": 108, "y": 36, "flags": 4}, + {"matrix": [3, 10], "x": 120, "y": 36, "flags": 4}, + {"matrix": [3, 11], "x": 132, "y": 36, "flags": 4}, + {"x": 144, "y": 36, "flags": 4}, + {"matrix": [3, 12], "x": 156, "y": 36, "flags": 4}, + {"x": 168, "y": 36, "flags": 4}, + {"x": 0, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 12, "y": 48, "flags": 4}, + {"x": 24, "y": 48, "flags": 4}, + {"matrix": [4, 1], "x": 36, "y": 48, "flags": 4}, + {"matrix": [4, 2], "x": 48, "y": 48, "flags": 4}, + {"matrix": [4, 3], "x": 60, "y": 48, "flags": 4}, + {"matrix": [4, 4], "x": 72, "y": 48, "flags": 4}, + {"matrix": [4, 5], "x": 84, "y": 48, "flags": 4}, + {"matrix": [4, 6], "x": 96, "y": 48, "flags": 4}, + {"matrix": [4, 7], "x": 108, "y": 48, "flags": 4}, + {"matrix": [4, 8], "x": 120, "y": 48, "flags": 4}, + {"matrix": [4, 9], "x": 132, "y": 48, "flags": 4}, + {"matrix": [4, 10], "x": 144, "y": 48, "flags": 4}, + {"x": 156, "y": 48, "flags": 4}, + {"matrix": [4, 11], "x": 168, "y": 48, "flags": 4}, + {"x": 180, "y": 48, "flags": 4}, + {"matrix": [4, 14], "x": 192, "y": 48, "flags": 4}, + {"matrix": [5, 0], "x": 0, "y": 60, "flags": 4}, + {"matrix": [5, 2], "x": 12, "y": 60, "flags": 4}, + {"x": 24, "y": 60, "flags": 4}, + {"matrix": [5, 5], "x": 36, "y": 60, "flags": 4}, + {"x": 48, "y": 60, "flags": 4}, + {"matrix": [5, 9], "x": 60, "y": 60, "flags": 4}, + {"matrix": [5, 12], "x": 72, "y": 60, "flags": 4}, + {"matrix": [5, 13], "x": 84, "y": 60, "flags": 4}, + {"matrix": [5, 14], "x": 96, "y": 60, "flags": 4}, + {"matrix": [5, 15], "x": 108, "y": 60, "flags": 4} + ], + } } diff --git a/keyboards/melgeek/mach80/rev2/rev2.c b/keyboards/melgeek/mach80/rev2/rev2.c index 1a759f38c6..63fbbbedfc 100755 --- a/keyboards/melgeek/mach80/rev2/rev2.c +++ b/keyboards/melgeek/mach80/rev2/rev2.c @@ -115,32 +115,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW9_CS24, SW9_CS23, SW9_CS22}, /* RGB54 */ {0, SW4_CS39, SW4_CS38, SW4_CS37}, /* RGB101 */ }; -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 */ - { 0, NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, /* R0 */ - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33 }, /* R1 */ - { 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 }, /* R2 */ - { 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 65, 15, 34, 51 }, /* R3 */ - { 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, NO_LED, NO_LED, 83, NO_LED }, /* R4 */ - { 84, NO_LED, 85, NO_LED, NO_LED, 87, NO_LED, NO_LED, NO_LED, 89, NO_LED, NO_LED, 90, 91, 92, 93 } /* R5 */ - }, { - {0, 0}, {12, 0}, {24, 0}, {36, 0}, {48, 0}, {60, 0}, {72, 0}, {84, 0}, {96, 0}, {108, 0}, {120, 0}, {132, 0}, {144, 0}, {156, 0}, {168, 0}, {180, 0}, //16 - {0, 12}, {12, 12}, {24, 12}, {36, 12}, {48, 12}, {60, 12}, {72, 12}, {84, 12}, {96, 12}, {108, 12}, {120, 12}, {132, 12}, {144, 12}, {156, 12}, {168, 12}, {180, 12}, {192, 12}, {204, 12}, {216, 12}, //19 - {0, 24}, {12, 24}, {24, 24}, {36, 24}, {48, 24}, {60, 24}, {72, 24}, {84, 24}, {96, 24}, {108, 24}, {120, 24}, {132, 24}, {144, 24}, {156, 24}, {168, 24}, {180, 24}, {192, 24}, //17 - {0, 36}, {12, 36}, {24, 36}, {36, 36}, {48, 36}, {60, 36}, {72, 36}, {84, 36}, {96, 36}, {108, 36}, {120, 36}, {132, 36}, {144, 36}, {156, 36}, {168, 36}, //15 - {0, 48}, {12, 48}, {24, 48}, {36, 48}, {48, 48}, {60, 48}, {72, 48}, {84, 48}, {96, 48}, {108, 48}, {120, 48}, {132, 48}, {144, 48}, {156, 48}, {168, 48}, {180, 48}, {192, 48}, //17 - {0, 60}, {12, 60}, {24, 60}, {36, 60}, {48, 60}, {60, 60}, {72, 60}, {84, 60}, {96, 60}, {108, 60} - //10 - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - } -}; const is31fl3741_led_t g_is31_indicator_leds[3] = { {0, SW1_CS6, SW1_CS5, SW1_CS4}, /* RGB107 */ diff --git a/keyboards/melgeek/mj61/rev1/keyboard.json b/keyboards/melgeek/mj61/rev1/keyboard.json index b388908579..e8dedb8ea5 100644 --- a/keyboards/melgeek/mj61/rev1/keyboard.json +++ b/keyboards/melgeek/mj61/rev1/keyboard.json @@ -10,5 +10,72 @@ "cols": ["B15", "A8", "A10", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"], "rows": ["B12", "B11", "B10", "B1", "A3"] }, - "diode_direction": "COL2ROW" + "diode_direction": "COL2ROW", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 4}, + {"matrix": [1, 13], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 208, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 192, "y": 32, "flags": 4}, + {"matrix": [3, 12], "x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 16, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 176, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 16, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 32, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 48, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 64, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 80, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 4], "x": 128, "y": 64, "flags": 4}, + {"matrix": [4, 6], "x": 144, "y": 64, "flags": 4} + ], + } } diff --git a/keyboards/melgeek/mj61/rev1/rev1.c b/keyboards/melgeek/mj61/rev1/rev1.c index 8e0be62127..d543ad60c0 100644 --- a/keyboards/melgeek/mj61/rev1/rev1.c +++ b/keyboards/melgeek/mj61/rev1/rev1.c @@ -82,28 +82,4 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW8_CS30, SW8_CS29, SW8_CS28}, /* RGB62 */ {0, SW9_CS30, SW9_CS29, SW9_CS28}, /* RGB63 */ }; - -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 */ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, /* R0 */ - { 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 }, /* R1 */ - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, NO_LED,}, /* R2 */ - { 52, NO_LED, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, NO_LED }, /* R3 */ - { 53, 54, NO_LED, 55, 61, 56, 62, NO_LED, NO_LED, 57, 58, 59, 60, NO_LED }, /* R4 */ - }, { - {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {80, 0}, {96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {208, 0}, - {0, 16}, {16, 16}, {32, 16}, {48, 16}, {64, 16}, {80, 16}, {96, 16}, {112, 16}, {128, 16}, {144, 16}, {160, 16}, {176, 16}, {192, 16}, {208, 16}, - {0, 32}, {16, 32}, {32, 32}, {48, 32}, {64, 32}, {80, 32}, {96, 32}, {112, 32}, {128, 32}, {144, 32}, {160, 32}, {176, 32}, {192, 32}, - {0, 48}, {16, 48}, {32, 48}, {48, 48}, {64, 48}, {80, 48}, {96, 48}, {112, 48}, {128, 48}, {144, 48}, {160, 48}, {176, 48}, - {0, 64}, {16, 64}, {32, 64}, {48, 64}, {64, 64}, {80, 64}, {96, 64}, {112, 64}, {128, 64}, {144, 64}, - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - } -}; - #endif diff --git a/keyboards/melgeek/mj61/rev2/keyboard.json b/keyboards/melgeek/mj61/rev2/keyboard.json index fcff9e10a5..da6c60d7ed 100644 --- a/keyboards/melgeek/mj61/rev2/keyboard.json +++ b/keyboards/melgeek/mj61/rev2/keyboard.json @@ -10,5 +10,80 @@ "cols": ["B15", "A8", "B13", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"], "rows": ["B12", "B11", "B10", "B1", "A3"] }, - "diode_direction": "COL2ROW" + "diode_direction": "COL2ROW", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"x": 208, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 224, "y": 0, "flags": 4}, + {"x": 240, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 208, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"x": 192, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 208, "y": 32, "flags": 4}, + {"x": 224, "y": 32, "flags": 4}, + {"x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 16, "y": 48, "flags": 4}, + {"x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 192, "y": 48, "flags": 4}, + {"x": 208, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 224, "y": 48, "flags": 4}, + {"x": 240, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 16, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 32, "y": 64, "flags": 4}, + {"x": 48, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 64, "y": 64, "flags": 4}, + {"x": 80, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 128, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 144, "y": 64, "flags": 4} + ] + } } diff --git a/keyboards/melgeek/mj61/rev2/rev2.c b/keyboards/melgeek/mj61/rev2/rev2.c index 7b27fa44c3..e936998ace 100644 --- a/keyboards/melgeek/mj61/rev2/rev2.c +++ b/keyboards/melgeek/mj61/rev2/rev2.c @@ -92,28 +92,4 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW9_CS21, SW9_CS20, SW9_CS19}, /* RGB42 */ {0, SW8_CS30, SW8_CS29, SW8_CS28}, /* RGB71 */ }; - -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 */ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14 }, /* R0 */ - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, /* R1 */ - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, NO_LED }, /* R2 */ - { 46, NO_LED, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, NO_LED }, /* R3 */ - { 61, 62, NO_LED, 63, NO_LED, 65, NO_LED, NO_LED, NO_LED, 67, 68, 69, NO_LED, 70 }, /* R4 */ - }, { - {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {80, 0}, {96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {208, 0}, {224, 0}, {240, 0}, - {0, 16}, {16, 16}, {32, 16}, {48, 16}, {64, 16}, {80, 16}, {96, 16}, {112, 16}, {128, 16}, {144, 16}, {160, 16}, {176, 16}, {192, 16}, {208, 16}, - {0, 32}, {16, 32}, {32, 32}, {48, 32}, {64, 32}, {80, 32}, {96, 32}, {112, 32}, {128, 32}, {144, 32}, {160, 32}, {176, 32}, {192, 32}, {208, 32}, {224, 32}, - {0, 48}, {16, 48}, {32, 48}, {48, 48}, {64, 48}, {80, 48}, {96, 48}, {112, 48}, {128, 48}, {144, 48}, {160, 48}, {176, 48}, {192, 48}, {208, 48}, {224, 48}, {240, 48}, - {0, 64}, {16, 64}, {32, 64}, {48, 64}, {64, 64}, {80, 64}, {96, 64}, {112, 64}, {128, 64}, {144, 64}, - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - } -}; - #endif diff --git a/keyboards/melgeek/mj63/rev1/keyboard.json b/keyboards/melgeek/mj63/rev1/keyboard.json index b388908579..0d0759910e 100644 --- a/keyboards/melgeek/mj63/rev1/keyboard.json +++ b/keyboards/melgeek/mj63/rev1/keyboard.json @@ -10,5 +10,74 @@ "cols": ["B15", "A8", "A10", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"], "rows": ["B12", "B11", "B10", "B1", "A3"] }, - "diode_direction": "COL2ROW" + "diode_direction": "COL2ROW", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 4}, + {"matrix": [1, 13], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 208, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 192, "y": 32, "flags": 4}, + {"matrix": [3, 13], "x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 16, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 192, "y": 48, "flags": 4}, + {"matrix": [4, 13], "x": 0, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 16, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 32, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 48, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 64, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 80, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 128, "y": 64, "flags": 4}, + {"matrix": [4, 6], "x": 144, "y": 64, "flags": 4}, + {"matrix": [4, 4], "x": 160, "y": 64, "flags": 4} + ] + } } diff --git a/keyboards/melgeek/mj63/rev1/rev1.c b/keyboards/melgeek/mj63/rev1/rev1.c index d6caeac0c1..bdd7f34352 100644 --- a/keyboards/melgeek/mj63/rev1/rev1.c +++ b/keyboards/melgeek/mj63/rev1/rev1.c @@ -86,28 +86,4 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW1_CS27, SW1_CS26, SW1_CS25}, /* RGB65 */ {0, SW5_CS30, SW5_CS29, SW5_CS28}, /* RGB66 */ }; - -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 */ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, /* R0 */ - { 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 }, /* R1 */ - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, NO_LED }, /* R2 */ - { 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, NO_LED, 43, 42, 41 }, /* R3 */ - { 61, 60, 59, NO_LED, 64, 62, 63, NO_LED, NO_LED, 58, 57, 56, 55, 54 }, /* R4 */ - }, { - {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {80, 0}, {96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {208, 0}, - {0, 16}, {16, 16}, {32, 16}, {48, 16}, {64, 16}, {80, 16}, {96, 16}, {112, 16}, {128, 16}, {144, 16}, {160, 16}, {176, 16}, {192, 16}, {208, 16}, - {0, 32}, {16, 32}, {32, 32}, {48, 32}, {64, 32}, {80, 32}, {96, 32}, {112, 32}, {128, 32}, {144, 32}, {160, 32}, {176, 32}, {192, 32}, - {0, 48}, {16, 48}, {32, 48}, {48, 48}, {64, 48}, {80, 48}, {96, 48}, {112, 48}, {128, 48}, {144, 48}, {160, 48}, {176, 48}, {192, 48}, - {0, 64}, {16, 64}, {32, 64}, {48, 64}, {64, 64}, {80, 64}, {96, 64}, {112, 64}, {128, 64}, {144, 64}, {160, 64}, - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - } -}; - #endif diff --git a/keyboards/melgeek/mj63/rev2/keyboard.json b/keyboards/melgeek/mj63/rev2/keyboard.json index fcff9e10a5..8140afe4b8 100644 --- a/keyboards/melgeek/mj63/rev2/keyboard.json +++ b/keyboards/melgeek/mj63/rev2/keyboard.json @@ -10,5 +10,80 @@ "cols": ["B15", "A8", "B13", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"], "rows": ["B12", "B11", "B10", "B1", "A3"] }, - "diode_direction": "COL2ROW" + "diode_direction": "COL2ROW", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"x": 208, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 224, "y": 0, "flags": 4}, + {"x": 240, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 208, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"x": 192, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 208, "y": 32, "flags": 4}, + {"x": 224, "y": 32, "flags": 4}, + {"x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 16, "y": 48, "flags": 4}, + {"x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 192, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 208, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 16, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 32, "y": 64, "flags": 4}, + {"x": 48, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 64, "y": 64, "flags": 4}, + {"x": 80, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 128, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 144, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 160, "y": 64, "flags": 4} + ], + } } diff --git a/keyboards/melgeek/mj63/rev2/rev2.c b/keyboards/melgeek/mj63/rev2/rev2.c index 95f0b28f5d..20dfaaf684 100644 --- a/keyboards/melgeek/mj63/rev2/rev2.c +++ b/keyboards/melgeek/mj63/rev2/rev2.c @@ -92,28 +92,4 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW8_CS30, SW8_CS29, SW8_CS28}, /* RGB71 */ {0, SW9_CS30, SW9_CS29, SW9_CS28}, /* RGB72 */ }; - -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 */ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14 }, /* R0 */ - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, /* R1 */ - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, NO_LED }, /* R2 */ - { 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, NO_LED, 57, 58, 59 }, /* R3 */ - { 60, 61, 62, NO_LED, NO_LED, 64, NO_LED, NO_LED, NO_LED, 66, 67, 68, 69, 70 }, /* R4 */ - }, { - {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {80, 0}, {96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {208, 0}, {224, 0}, {240, 0}, - {0, 16}, {16, 16}, {32, 16}, {48, 16}, {64, 16}, {80, 16}, {96, 16}, {112, 16}, {128, 16}, {144, 16}, {160, 16}, {176, 16}, {192, 16}, {208, 16}, - {0, 32}, {16, 32}, {32, 32}, {48, 32}, {64, 32}, {80, 32}, {96, 32}, {112, 32}, {128, 32}, {144, 32}, {160, 32}, {176, 32}, {192, 32}, {208, 32}, {224, 32}, - {0, 48}, {16, 48}, {32, 48}, {48, 48}, {64, 48}, {80, 48}, {96, 48}, {112, 48}, {128, 48}, {144, 48}, {160, 48}, {176, 48}, {192, 48}, {208, 48}, {224, 48}, - {0, 64}, {16, 64}, {32, 64}, {48, 64}, {64, 64}, {80, 64}, {96, 64}, {112, 64}, {128, 64}, {144, 64}, {160, 64}, - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - } -}; - #endif diff --git a/keyboards/melgeek/mj64/rev1/keyboard.json b/keyboards/melgeek/mj64/rev1/keyboard.json index b388908579..bddfc0bef5 100644 --- a/keyboards/melgeek/mj64/rev1/keyboard.json +++ b/keyboards/melgeek/mj64/rev1/keyboard.json @@ -10,5 +10,73 @@ "cols": ["B15", "A8", "A10", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"], "rows": ["B12", "B11", "B10", "B1", "A3"] }, - "diode_direction": "COL2ROW" + "diode_direction": "COL2ROW", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 4}, + {"matrix": [1, 13], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 208, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 192, "y": 32, "flags": 4}, + {"matrix": [3, 13], "x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 16, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 192, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 208, "y": 48, "flags": 4}, + {"matrix": [4, 13], "x": 0, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 16, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 32, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 48, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 64, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 128, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 144, "y": 64, "flags": 4} + ] + } } diff --git a/keyboards/melgeek/mj64/rev1/rev1.c b/keyboards/melgeek/mj64/rev1/rev1.c index ea3376a8c7..d5859cf5e4 100644 --- a/keyboards/melgeek/mj64/rev1/rev1.c +++ b/keyboards/melgeek/mj64/rev1/rev1.c @@ -84,27 +84,4 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW9_CS27, SW9_CS26, SW9_CS25}, /* RGB63 */ {0, SW1_CS30, SW1_CS29, SW1_CS28}, /* RGB64 */ }; - -led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 }, - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, NO_LED }, - { 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41 }, - { 62, 61, 60, NO_LED, NO_LED, 63, NO_LED, NO_LED, NO_LED, 59, 58, 57, 56, 55 } - }, { - { 0, 0 }, { 16, 0 }, { 32, 0 }, { 48, 0 }, { 64, 0 }, { 80, 0 }, { 96, 0 }, { 112, 0 }, { 128, 0 }, { 144, 0 }, { 160, 0 }, { 176, 0 }, { 192, 0 }, { 208, 0 }, - { 0, 16 }, { 16, 16 }, { 32, 16 }, { 48, 16 }, { 64, 16 }, { 80, 16 }, { 96, 16 }, { 112, 16 }, { 128, 16 }, { 144, 16 }, { 160, 16 }, { 176, 16 }, { 192, 16 }, { 208, 16 }, - { 0, 32 }, { 16, 32 }, { 32, 32 }, { 48, 32 }, { 64, 32 }, { 80, 32 }, { 96, 32 }, { 112, 32 }, { 128, 32 }, { 144, 32 }, { 160, 32 }, { 176, 32 }, { 192, 32 }, - { 0, 48 }, { 16, 48 }, { 32, 48 }, { 48, 48 }, { 64, 48 }, { 80, 48 }, { 96, 48 }, { 112, 48 }, { 128, 48 }, { 144, 48 }, { 160, 48 }, { 176, 48 }, { 192, 48 }, { 208, 48 }, - { 0, 64 }, { 16, 64 }, { 32, 64 }, { 48, 64 }, { 64, 64 }, { 96, 64 }, { 112, 64 }, { 128, 64 }, { 144, 64 } - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4 - } -}; - #endif diff --git a/keyboards/melgeek/mj64/rev2/keyboard.json b/keyboards/melgeek/mj64/rev2/keyboard.json index b388908579..0a48604710 100644 --- a/keyboards/melgeek/mj64/rev2/keyboard.json +++ b/keyboards/melgeek/mj64/rev2/keyboard.json @@ -10,5 +10,75 @@ "cols": ["B15", "A8", "A10", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"], "rows": ["B12", "B11", "B10", "B1", "A3"] }, - "diode_direction": "COL2ROW" + "diode_direction": "COL2ROW", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 4}, + {"matrix": [1, 13], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 208, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 192, "y": 32, "flags": 4}, + {"matrix": [3, 13], "x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 16, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 192, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 208, "y": 48, "flags": 4}, + {"matrix": [4, 13], "x": 0, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 16, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 32, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 48, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 64, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 80, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 128, "y": 64, "flags": 4}, + {"matrix": [4, 4], "x": 144, "y": 64, "flags": 4}, + {"matrix": [4, 6], "x": 160, "y": 64, "flags": 4} + ] + } } diff --git a/keyboards/melgeek/mj64/rev2/rev2.c b/keyboards/melgeek/mj64/rev2/rev2.c index 17947282ce..0a236374c7 100644 --- a/keyboards/melgeek/mj64/rev2/rev2.c +++ b/keyboards/melgeek/mj64/rev2/rev2.c @@ -86,28 +86,4 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW1_CS27, SW1_CS26, SW1_CS25}, /* RGB65 */ {0, SW5_CS30, SW5_CS29, SW5_CS28}, /* RGB66 */ }; - -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 */ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, /* R0 */ - { 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14 }, /* R1 */ - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, NO_LED }, /* R2 */ - { 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41 }, /* R3 */ - { 62, 61, 60, NO_LED, 64, 63, 65, NO_LED, NO_LED, 59, 58, 57, 56, 55 }, /* R4 */ - }, { - {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {80, 0}, {96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {208, 0}, - {0, 16}, {16, 16}, {32, 16}, {48, 16}, {64, 16}, {80, 16}, {96, 16}, {112, 16}, {128, 16}, {144, 16}, {160, 16}, {176, 16}, {192, 16}, {208, 16}, - {0, 32}, {16, 32}, {32, 32}, {48, 32}, {64, 32}, {80, 32}, {96, 32}, {112, 32}, {128, 32}, {144, 32}, {160, 32}, {176, 32}, {192, 32}, - {0, 48}, {16, 48}, {32, 48}, {48, 48}, {64, 48}, {80, 48}, {96, 48}, {112, 48}, {128, 48}, {144, 48}, {160, 48}, {176, 48}, {192, 48}, {208, 48}, - {0, 64}, {16, 64}, {32, 64}, {48, 64}, {64, 64}, {80, 64}, {96, 64}, {112, 64}, {128, 64}, {144, 64}, {160, 64}, - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - } -}; - #endif diff --git a/keyboards/melgeek/mj64/rev3/keyboard.json b/keyboards/melgeek/mj64/rev3/keyboard.json index fcff9e10a5..fdc0371c25 100644 --- a/keyboards/melgeek/mj64/rev3/keyboard.json +++ b/keyboards/melgeek/mj64/rev3/keyboard.json @@ -10,5 +10,81 @@ "cols": ["B15", "A8", "B13", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"], "rows": ["B12", "B11", "B10", "B1", "A3"] }, - "diode_direction": "COL2ROW" + "diode_direction": "COL2ROW", + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"x": 208, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 224, "y": 0, "flags": 4}, + {"x": 240, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 208, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"x": 192, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 208, "y": 32, "flags": 4}, + {"x": 224, "y": 32, "flags": 4}, + {"x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 16, "y": 48, "flags": 4}, + {"x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 192, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 208, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 224, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 240, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 16, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 32, "y": 64, "flags": 4}, + {"x": 48, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 64, "y": 64, "flags": 4}, + {"x": 80, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 128, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 144, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 160, "y": 64, "flags": 4} + ] + } } diff --git a/keyboards/melgeek/mj64/rev3/rev3.c b/keyboards/melgeek/mj64/rev3/rev3.c index 8555082e7d..9bd58016b3 100644 --- a/keyboards/melgeek/mj64/rev3/rev3.c +++ b/keyboards/melgeek/mj64/rev3/rev3.c @@ -92,28 +92,4 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW8_CS30, SW8_CS29, SW8_CS28}, /* RGB71 */ {0, SW9_CS30, SW9_CS29, SW9_CS28}, /* RGB72 */ }; - -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 */ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14 }, /* R0 */ - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, /* R1 */ - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, NO_LED }, /* R2 */ - { 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60 }, /* R3 */ - { 61, 62, 63, NO_LED, NO_LED, 65, NO_LED, NO_LED, NO_LED, 67, 68, 69, 70, 71 }, /* R4 */ - }, { - {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {80, 0}, {96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {208, 0}, {224, 0}, {240, 0}, - {0, 16}, {16, 16}, {32, 16}, {48, 16}, {64, 16}, {80, 16}, {96, 16}, {112, 16}, {128, 16}, {144, 16}, {160, 16}, {176, 16}, {192, 16}, {208, 16}, - {0, 32}, {16, 32}, {32, 32}, {48, 32}, {64, 32}, {80, 32}, {96, 32}, {112, 32}, {128, 32}, {144, 32}, {160, 32}, {176, 32}, {192, 32}, {208, 32}, {224, 32}, - {0, 48}, {16, 48}, {32, 48}, {48, 48}, {64, 48}, {80, 48}, {96, 48}, {112, 48}, {128, 48}, {144, 48}, {160, 48}, {176, 48}, {192, 48}, {208, 48}, {224, 48}, {240, 48}, - {0, 64}, {16, 64}, {32, 64}, {48, 64}, {64, 64}, {80, 64}, {96, 64}, {112, 64}, {128, 64}, {144, 64}, {160, 64}, - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - } -}; - #endif diff --git a/keyboards/melgeek/mj65/rev3/keyboard.json b/keyboards/melgeek/mj65/rev3/keyboard.json index a4513b45e7..446e440d33 100644 --- a/keyboards/melgeek/mj65/rev3/keyboard.json +++ b/keyboards/melgeek/mj65/rev3/keyboard.json @@ -61,6 +61,84 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"x": 208, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 224, "y": 0, "flags": 4}, + {"x": 240, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 255, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 208, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 240, "y": 16, "flags": 4}, + {"matrix": [2, 1], "x": 255, "y": 16, "flags": 4}, + {"matrix": [2, 2], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 144, "y": 32, "flags": 4}, + {"x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 176, "y": 32, "flags": 4}, + {"x": 192, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 208, "y": 32, "flags": 4}, + {"x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 16, "y": 48, "flags": 4}, + {"x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 192, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 208, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 0, "y": 64, "flags": 4}, + {"matrix": [3, 14], "x": 16, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 32, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 48, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 64, "y": 64, "flags": 4}, + {"x": 80, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 96, "y": 64, "flags": 4}, + {"x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 144, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 160, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 176, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 192, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 208, "y": 64, "flags": 4}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 4} + ], "led_flush_limit": 26, "led_process_limit": 4, "sleep": true diff --git a/keyboards/melgeek/mj65/rev3/rev3.c b/keyboards/melgeek/mj65/rev3/rev3.c index 0a020fad74..a6ef6359c0 100644 --- a/keyboards/melgeek/mj65/rev3/rev3.c +++ b/keyboards/melgeek/mj65/rev3/rev3.c @@ -96,28 +96,4 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW3_CS33, SW3_CS32, SW3_CS31}, /* RGB75 */ {0, SW4_CS33, SW4_CS32, SW4_CS31}, /* RGB76 */ }; - -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 */ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16 }, /* R0 */ - { 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, /* R1 */ - { 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, NO_LED, 47 }, /* R2 */ - { 49, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, NO_LED, 63 }, /* R3 */ - { 64, 65, 66, NO_LED, NO_LED, 68, NO_LED, NO_LED, NO_LED, 70, 71, 72, 73, 74, 75 }, /* R4 */ - }, { - {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {80, 0}, {96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {208, 0}, {224, 0}, {240, 0}, {255, 0}, - {0, 16}, {16, 16}, {32, 16}, {48, 16}, {64, 16}, {80, 16}, {96, 16}, {112, 16}, {128, 16}, {144, 16}, {160, 16}, {176, 16}, {192, 16}, {208, 16}, {224, 16}, {240, 16}, {255, 16}, - {0, 32}, {16, 32}, {32, 32}, {48, 32}, {64, 32}, {80, 32}, {96, 32}, {112, 32}, {128, 32}, {144, 32}, {160, 32}, {176, 32}, {192, 32}, {208, 32}, - {0, 48}, {16, 48}, {32, 48}, {48, 48}, {64, 48}, {80, 48}, {96, 48}, {112, 48}, {128, 48}, {144, 48}, {160, 48}, {176, 48}, {192, 48}, {208, 48}, - {0, 64}, {16, 64}, {32, 64}, {48, 64}, {64, 64}, {80, 64}, {96, 64}, {112, 64}, {144, 64}, {160, 64}, {176, 64}, {192, 64}, {208, 64}, {224, 64}, - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - } -}; - -#endif +#endif diff --git a/keyboards/melgeek/mojo68/rev1/keyboard.json b/keyboards/melgeek/mojo68/rev1/keyboard.json index 88f17665b4..db868c485a 100755 --- a/keyboards/melgeek/mojo68/rev1/keyboard.json +++ b/keyboards/melgeek/mojo68/rev1/keyboard.json @@ -56,6 +56,76 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 208, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 192, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 208, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 16, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 192, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 208, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 16, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 32, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 48, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 64, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 80, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 128, "y": 64, "flags": 4}, + {"matrix": [4, 14], "x": 144, "y": 64, "flags": 4} + ], "led_flush_limit": 26, "led_process_limit": 4, "sleep": true diff --git a/keyboards/melgeek/mojo68/rev1/rev1.c b/keyboards/melgeek/mojo68/rev1/rev1.c index af17d96c6d..d30a5817a8 100755 --- a/keyboards/melgeek/mojo68/rev1/rev1.c +++ b/keyboards/melgeek/mojo68/rev1/rev1.c @@ -89,29 +89,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW5_CS30, SW5_CS29, SW5_CS28}, /* RGB68 */ }; -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14*/ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, /* R0 */ - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, /* R1 */ - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, NO_LED, 43 }, /* R2 */ - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, NO_LED, 57 }, /* R3 */ - { 58, 59, 60, NO_LED, NO_LED, 61, NO_LED, NO_LED, NO_LED, 62, 63, 64, 65, 66, 67 }, /* R4 */ - }, { - {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {80, 0}, {96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {208, 0}, {224, 0}, - {0, 16}, {16, 16}, {32, 16}, {48, 16}, {64, 16}, {80, 16}, {96, 16}, {112, 16}, {128, 16}, {144, 16}, {160, 16}, {176, 16}, {192, 16}, {208, 16}, {224, 16}, - {0, 32}, {16, 32}, {32, 32}, {48, 32}, {64, 32}, {80, 32}, {96, 32}, {112, 32}, {128, 32}, {144, 32}, {160, 32}, {176, 32}, {192, 32}, {208, 32}, - {0, 48}, {16, 48}, {32, 48}, {48, 48}, {64, 48}, {80, 48}, {96, 48}, {112, 48}, {128, 48}, {144, 48}, {160, 48}, {176, 48}, {192, 48}, {208, 48}, - {0, 64}, {16, 64}, {32, 64}, {48, 64}, {64, 64}, {80, 64}, {96, 64}, {112, 64}, {128, 64}, {144, 64}, - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - } -}; - const is31fl3741_led_t g_is31_indicator_leds[3] = { {0, SW1_CS6, SW1_CS5, SW1_CS4}, /* RGB124 */ {0, SW2_CS6, SW2_CS5, SW2_CS4}, /* RGB125 */ diff --git a/keyboards/melgeek/mojo75/rev1/keyboard.json b/keyboards/melgeek/mojo75/rev1/keyboard.json index 0b0a722c90..339609c8f0 100644 --- a/keyboards/melgeek/mojo75/rev1/keyboard.json +++ b/keyboards/melgeek/mojo75/rev1/keyboard.json @@ -61,6 +61,100 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"matrix": [0, 15], "x": 240, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 192, "y": 16, "flags": 4}, + {"x": 208, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 224, "y": 16, "flags": 4}, + {"x": 240, "y": 16, "flags": 4}, + {"matrix": [1, 15], "x": 255, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 192, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 208, "y": 32, "flags": 4}, + {"matrix": [2, 15], "x": 224, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 16, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 176, "y": 48, "flags": 4}, + {"x": 192, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 208, "y": 48, "flags": 4}, + {"x": 224, "y": 48, "flags": 4}, + {"matrix": [3, 15], "x": 240, "y": 48, "flags": 4}, + {"x": 0, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 16, "y": 64, "flags": 4}, + {"x": 32, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 48, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 64, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 80, "y": 64, "flags": 4}, + {"matrix": [4, 4], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 6], "x": 128, "y": 64, "flags": 4}, + {"matrix": [4, 7], "x": 144, "y": 64, "flags": 4}, + {"matrix": [4, 8], "x": 160, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 176, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 192, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 208, "y": 64, "flags": 4}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 4}, + {"matrix": [4, 15], "x": 240, "y": 64, "flags": 4}, + {"matrix": [5, 0], "x": 0, "y": 80, "flags": 4}, + {"matrix": [5, 1], "x": 16, "y": 80, "flags": 4}, + {"matrix": [5, 2], "x": 32, "y": 80, "flags": 4}, + {"x": 48, "y": 80, "flags": 4}, + {"matrix": [5, 5], "x": 64, "y": 80, "flags": 4}, + {"x": 80, "y": 80, "flags": 4}, + {"matrix": [5, 9], "x": 96, "y": 80, "flags": 4}, + {"matrix": [5, 10], "x": 112, "y": 80, "flags": 4}, + {"matrix": [5, 12], "x": 128, "y": 80, "flags": 4}, + {"matrix": [5, 13], "x": 144, "y": 80, "flags": 4}, + {"matrix": [5, 14], "x": 160, "y": 80, "flags": 4}, + {"matrix": [5, 15], "x": 176, "y": 80, "flags": 4} + ], "led_flush_limit": 26, "led_process_limit": 4, "sleep": true diff --git a/keyboards/melgeek/mojo75/rev1/rev1.c b/keyboards/melgeek/mojo75/rev1/rev1.c index 60bb6eb850..93f8345604 100644 --- a/keyboards/melgeek/mojo75/rev1/rev1.c +++ b/keyboards/melgeek/mojo75/rev1/rev1.c @@ -112,31 +112,4 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW5_CS39, SW5_CS38, SW5_CS37}, /* RGB92 */ {0, SW6_CS39, SW6_CS38, SW6_CS37}, /* RGB90 */ }; - -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 */ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, /* R0 */ - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, NO_LED, 32 }, /* R1 */ - { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, NO_LED, 47 }, /* R2 */ - { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, NO_LED, 61, NO_LED, 63 }, /* R3 */ - { 65, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, NO_LED, 77, NO_LED, 78, 79 }, /* R4 */ - { 80, 81, 82, NO_LED, NO_LED, 84, NO_LED, NO_LED, NO_LED, 86, 87, NO_LED, 88, 89, 90, 91 }, /* R5 */ - }, { - {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {80, 0}, {96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {208, 0}, {224, 0}, {240, 0}, - {0, 16}, {16, 16}, {32, 16}, {48, 16}, {64, 16}, {80, 16}, {96, 16}, {112, 16}, {128, 16}, {144, 16}, {160, 16}, {176, 16}, {192, 16}, {208, 16}, {224, 16}, {240, 16}, {255, 16}, - {0, 32}, {16, 32}, {32, 32}, {48, 32}, {64, 32}, {80, 32}, {96, 32}, {112, 32}, {128, 32}, {144, 32}, {160, 32}, {176, 32}, {192, 32}, {208, 32}, {224, 32}, - {0, 48}, {16, 48}, {32, 48}, {48, 48}, {64, 48}, {80, 48}, {96, 48}, {112, 48}, {128, 48}, {144, 48}, {160, 48}, {176, 48}, {192, 48}, {208, 48}, {224, 48}, {240, 48}, - {0, 64}, {16, 64}, {32, 64}, {48, 64}, {64, 64}, {80, 64}, {96, 64}, {112, 64}, {128, 64}, {144, 64}, {160, 64}, {176, 64}, {192, 64}, {208, 64}, {224, 64}, {240, 64}, - {0, 80}, {16, 80}, {32, 80}, {48, 80}, {64, 80}, {80, 80}, {96, 80}, {112, 80}, {128, 80}, {144, 80}, {160, 80}, {176, 80}, - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - } -}; - #endif diff --git a/keyboards/melgeek/tegic/rev1/keyboard.json b/keyboards/melgeek/tegic/rev1/keyboard.json index 5a1ca4f350..532792d27e 100644 --- a/keyboards/melgeek/tegic/rev1/keyboard.json +++ b/keyboards/melgeek/tegic/rev1/keyboard.json @@ -67,6 +67,99 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 12, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 24, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 36, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 72, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 84, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 108, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 132, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 156, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 168, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 12, "flags": 4}, + {"matrix": [1, 1], "x": 12, "y": 12, "flags": 4}, + {"matrix": [1, 2], "x": 24, "y": 12, "flags": 4}, + {"matrix": [1, 3], "x": 36, "y": 12, "flags": 4}, + {"matrix": [1, 4], "x": 48, "y": 12, "flags": 4}, + {"matrix": [1, 5], "x": 60, "y": 12, "flags": 4}, + {"matrix": [1, 6], "x": 72, "y": 12, "flags": 4}, + {"matrix": [1, 7], "x": 84, "y": 12, "flags": 4}, + {"matrix": [1, 8], "x": 96, "y": 12, "flags": 4}, + {"matrix": [1, 9], "x": 108, "y": 12, "flags": 4}, + {"matrix": [1, 10], "x": 120, "y": 12, "flags": 4}, + {"matrix": [1, 11], "x": 132, "y": 12, "flags": 4}, + {"matrix": [1, 12], "x": 144, "y": 12, "flags": 4}, + {"x": 156, "y": 12, "flags": 4}, + {"matrix": [1, 13], "x": 168, "y": 12, "flags": 4}, + {"x": 180, "y": 12, "flags": 4}, + {"matrix": [1, 14], "x": 192, "y": 12, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 24, "flags": 4}, + {"matrix": [2, 1], "x": 12, "y": 24, "flags": 4}, + {"matrix": [2, 2], "x": 24, "y": 24, "flags": 4}, + {"matrix": [2, 3], "x": 36, "y": 24, "flags": 4}, + {"matrix": [2, 4], "x": 48, "y": 24, "flags": 4}, + {"matrix": [2, 5], "x": 60, "y": 24, "flags": 4}, + {"matrix": [2, 6], "x": 72, "y": 24, "flags": 4}, + {"matrix": [2, 7], "x": 84, "y": 24, "flags": 4}, + {"matrix": [2, 8], "x": 96, "y": 24, "flags": 4}, + {"matrix": [2, 9], "x": 108, "y": 24, "flags": 4}, + {"matrix": [2, 10], "x": 120, "y": 24, "flags": 4}, + {"matrix": [2, 11], "x": 132, "y": 24, "flags": 4}, + {"matrix": [2, 12], "x": 144, "y": 24, "flags": 4}, + {"matrix": [2, 13], "x": 156, "y": 24, "flags": 4}, + {"matrix": [2, 14], "x": 168, "y": 24, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 36, "flags": 4}, + {"matrix": [3, 1], "x": 12, "y": 36, "flags": 4}, + {"matrix": [3, 2], "x": 24, "y": 36, "flags": 4}, + {"matrix": [3, 3], "x": 36, "y": 36, "flags": 4}, + {"matrix": [3, 4], "x": 48, "y": 36, "flags": 4}, + {"matrix": [3, 5], "x": 60, "y": 36, "flags": 4}, + {"matrix": [3, 6], "x": 72, "y": 36, "flags": 4}, + {"matrix": [3, 7], "x": 84, "y": 36, "flags": 4}, + {"matrix": [3, 8], "x": 96, "y": 36, "flags": 4}, + {"matrix": [3, 9], "x": 108, "y": 36, "flags": 4}, + {"matrix": [3, 10], "x": 120, "y": 36, "flags": 4}, + {"matrix": [3, 11], "x": 132, "y": 36, "flags": 4}, + {"x": 144, "y": 36, "flags": 4}, + {"matrix": [3, 12], "x": 156, "y": 36, "flags": 4}, + {"x": 168, "y": 36, "flags": 4}, + {"x": 0, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 12, "y": 48, "flags": 4}, + {"x": 24, "y": 48, "flags": 4}, + {"matrix": [4, 1], "x": 36, "y": 48, "flags": 4}, + {"matrix": [4, 2], "x": 48, "y": 48, "flags": 4}, + {"matrix": [4, 3], "x": 60, "y": 48, "flags": 4}, + {"matrix": [4, 4], "x": 72, "y": 48, "flags": 4}, + {"matrix": [4, 5], "x": 84, "y": 48, "flags": 4}, + {"matrix": [4, 6], "x": 96, "y": 48, "flags": 4}, + {"matrix": [4, 7], "x": 108, "y": 48, "flags": 4}, + {"matrix": [4, 8], "x": 120, "y": 48, "flags": 4}, + {"matrix": [4, 9], "x": 132, "y": 48, "flags": 4}, + {"matrix": [4, 10], "x": 144, "y": 48, "flags": 4}, + {"x": 156, "y": 48, "flags": 4}, + {"matrix": [4, 11], "x": 168, "y": 48, "flags": 4}, + {"x": 180, "y": 48, "flags": 4}, + {"matrix": [4, 13], "x": 192, "y": 48, "flags": 4}, + {"matrix": [5, 0], "x": 0, "y": 60, "flags": 4}, + {"matrix": [5, 1], "x": 12, "y": 60, "flags": 4}, + {"matrix": [5, 2], "x": 24, "y": 60, "flags": 4}, + {"x": 36, "y": 60, "flags": 4}, + {"matrix": [5, 5], "x": 48, "y": 60, "flags": 4}, + {"x": 60, "y": 60, "flags": 4}, + {"matrix": [5, 9], "x": 72, "y": 60, "flags": 4}, + {"matrix": [5, 10], "x": 84, "y": 60, "flags": 4}, + {"matrix": [5, 11], "x": 96, "y": 60, "flags": 4}, + {"matrix": [5, 12], "x": 108, "y": 60, "flags": 4}, + {"matrix": [5, 13], "x": 120, "y": 60, "flags": 4}, + {"matrix": [5, 14], "x": 132, "y": 60, "flags": 4} + ], "led_flush_limit": 26, "led_process_limit": 4, "sleep": true diff --git a/keyboards/melgeek/tegic/rev1/rev1.c b/keyboards/melgeek/tegic/rev1/rev1.c index b087264919..3b4e335c05 100755 --- a/keyboards/melgeek/tegic/rev1/rev1.c +++ b/keyboards/melgeek/tegic/rev1/rev1.c @@ -117,29 +117,4 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW9_CS36, SW9_CS35, SW9_CS34}, /* RGB143 */ {0, SW1_CS39, SW1_CS38, SW1_CS37}, /* RGB149 */ }; -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 */ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, /* R0 */ - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31 }, /* R1 */ - { 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46 }, /* R2 */ - { 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, NO_LED, NO_LED }, /* R3 */ - { 63, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 76, NO_LED, 78, NO_LED }, /* R4 */ - { 79, 80, 81, NO_LED, NO_LED, 83, NO_LED, NO_LED, NO_LED, 85, 86, 87, 88, 89, 90 }, /* R5 */ - }, { - {0, 0}, {12, 0}, {24, 0}, {36, 0}, {48, 0}, {60, 0}, {72, 0}, {84, 0}, {96, 0}, {108, 0}, {120, 0}, {132, 0}, {144, 0}, {156, 0}, {168, 0}, //15 - {0, 12}, {12, 12}, {24, 12}, {36, 12}, {48, 12}, {60, 12}, {72, 12}, {84, 12}, {96, 12}, {108, 12}, {120, 12}, {132, 12}, {144, 12}, {156, 12}, {168, 12}, {180, 12}, {192, 12}, //17 - {0, 24}, {12, 24}, {24, 24}, {36, 24}, {48, 24}, {60, 24}, {72, 24}, {84, 24}, {96, 24}, {108, 24}, {120, 24}, {132, 24}, {144, 24}, {156, 24}, {168, 24}, //15 - {0, 36}, {12, 36}, {24, 36}, {36, 36}, {48, 36}, {60, 36}, {72, 36}, {84, 36}, {96, 36}, {108, 36}, {120, 36}, {132, 36}, {144, 36}, {156, 36}, {168, 36}, //15 - {0, 48}, {12, 48}, {24, 48}, {36, 48}, {48, 48}, {60, 48}, {72, 48}, {84, 48}, {96, 48}, {108, 48}, {120, 48}, {132, 48}, {144, 48}, {156, 48}, {168, 48}, {180, 48}, {192, 48}, //17 - {0, 60}, {12, 60}, {24, 60}, {36, 60}, {48, 60}, {60, 60}, {72, 60}, {84, 60}, {96, 60}, {108, 60}, {120, 60}, {132, 60}, //12 - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - } -}; #endif diff --git a/keyboards/melgeek/z70ultra/rev1/keyboard.json b/keyboards/melgeek/z70ultra/rev1/keyboard.json index 5a8868265b..145f5dffdf 100644 --- a/keyboards/melgeek/z70ultra/rev1/keyboard.json +++ b/keyboards/melgeek/z70ultra/rev1/keyboard.json @@ -61,6 +61,77 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 4}, + {"matrix": [5, 6], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 208, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 0, "y": 32, "flags": 4}, + {"matrix": [5, 7], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 192, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 0, "y": 48, "flags": 4}, + {"matrix": [2, 13], "x": 16, "y": 48, "flags": 4}, + {"matrix": [5, 9], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 0, "y": 64, "flags": 4}, + {"matrix": [3, 11], "x": 16, "y": 64, "flags": 4}, + {"matrix": [3, 12], "x": 32, "y": 64, "flags": 4}, + {"matrix": [5, 8], "x": 48, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 64, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 80, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 4], "x": 0, "y": 80, "flags": 4}, + {"matrix": [4, 5], "x": 16, "y": 80, "flags": 4}, + {"matrix": [4, 6], "x": 32, "y": 80, "flags": 4}, + {"matrix": [4, 9], "x": 48, "y": 80, "flags": 4}, + {"matrix": [4, 10], "x": 64, "y": 80, "flags": 4}, + {"matrix": [5, 11], "x": 80, "y": 80, "flags": 4}, + {"matrix": [5, 12], "x": 96, "y": 80, "flags": 4}, + {"matrix": [5, 13], "x": 112, "y": 80, "flags": 4} + ], "led_flush_limit": 26, "led_process_limit": 4, "sleep": true diff --git a/keyboards/melgeek/z70ultra/rev1/rev1.c b/keyboards/melgeek/z70ultra/rev1/rev1.c index 1cb46df643..7eaf839763 100644 --- a/keyboards/melgeek/z70ultra/rev1/rev1.c +++ b/keyboards/melgeek/z70ultra/rev1/rev1.c @@ -91,31 +91,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW4_CS37, SW4_CS39, SW4_CS38}, /* RGB22 */ {0, SW9_CS37, SW9_CS39, SW9_CS38}, /* RGB27 */ }; -led_config_t g_led_config = { - { - /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 */ - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, }, /* R0 */ - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, }, /* R1 */ - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED, 42, }, /* R2 */ - { 44, NO_LED, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, }, /* R3 */ - { 58, 59, 60, NO_LED, 61, 62, 63, NO_LED, NO_LED, 64, 65, NO_LED, NO_LED, NO_LED, }, /* R4 */ - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 14, 29, 56, 43, 57, 66, 67, 68, }, /* R5 */ - }, { - {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {80, 0}, {96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {208, 0}, - {0, 16}, {16, 16}, {32, 16}, {48, 16}, {64, 16}, {80, 16}, {96, 16}, {112, 16}, {128, 16}, {144, 16}, {160, 16}, {176, 16}, {192, 16}, {208, 16}, - {0, 32}, {16, 32}, {32, 32}, {48, 32}, {64, 32}, {80, 32}, {96, 32}, {112, 32}, {128, 32}, {144, 32}, {160, 32}, {176, 32}, {192, 32}, - {0, 48}, {16, 48}, {32, 48}, {48, 48}, {64, 48}, {80, 48}, {96, 48}, {112, 48}, {128, 48}, {144, 48}, {160, 48}, {176, 48}, - {0, 64}, {16, 64}, {32, 64}, {48, 64}, {64, 64}, {80, 64}, {96, 64}, {112, 64}, - {0, 80}, {16, 80}, {32, 80}, {48, 80}, {64, 80}, {80, 80}, {96, 80}, {112, 80}, - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, - } -}; const is31fl3741_led_t g_is31_indicator_leds[6] = { {0, SW1_CS5, SW1_CS3, SW1_CS4}, /* RGB71 */ From ed2de216031af9335433465e478d1c349621288b Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:10:34 -0600 Subject: [PATCH 41/99] Migrate `g_led_config` to DD (M1) (#25618) --- keyboards/machkeyboards/mach3/mach3.c | 21 +---- keyboards/magic_force/mf34/keyboard.json | 36 +++++++ keyboards/magic_force/mf34/mf34.c | 48 ---------- .../marksard/rhymestone/rev1/keyboard.json | 42 +++++++++ keyboards/marksard/rhymestone/rev1/rev1.c | 60 ------------ .../adelais/rgb_led/rev1/keyboard.json | 93 +++++++++++++++++++ .../mechlovin/adelais/rgb_led/rev1/rev1.c | 42 --------- .../adelais/rgb_led/rev2/keyboard.json | 70 ++++++++++++++ .../mechlovin/adelais/rgb_led/rev2/rev2.c | 23 ----- .../adelais/rgb_led/rev3/keyboard.json | 68 ++++++++++++++ .../mechlovin/adelais/rgb_led/rev3/rev3.c | 24 ----- .../mechlovin/delphine/rgb_led/keyboard.json | 27 ++++++ .../mechlovin/delphine/rgb_led/rgb_led.c | 26 ------ .../mechlovin/hannah60rgb/rev1/keyboard.json | 74 +++++++++++++++ keyboards/mechlovin/hannah60rgb/rev1/rev1.c | 22 ----- .../mechlovin/hannah60rgb/rev2/keyboard.json | 80 ++++++++++++++++ keyboards/mechlovin/hannah60rgb/rev2/rev2.c | 48 ---------- .../infinity87/rgb_rev1/keyboard.json | 93 +++++++++++++++++++ .../mechlovin/infinity87/rgb_rev1/rgb_rev1.c | 25 ----- keyboards/mechlovin/infinity875/infinity875.c | 46 --------- keyboards/mechlovin/infinity875/keyboard.json | 44 +++++++++ 21 files changed, 628 insertions(+), 384 deletions(-) delete mode 100644 keyboards/magic_force/mf34/mf34.c delete mode 100644 keyboards/marksard/rhymestone/rev1/rev1.c delete mode 100644 keyboards/mechlovin/adelais/rgb_led/rev1/rev1.c delete mode 100644 keyboards/mechlovin/infinity875/infinity875.c diff --git a/keyboards/machkeyboards/mach3/mach3.c b/keyboards/machkeyboards/mach3/mach3.c index 948df5a066..881528d650 100644 --- a/keyboards/machkeyboards/mach3/mach3.c +++ b/keyboards/machkeyboards/mach3/mach3.c @@ -15,28 +15,9 @@ */ #include "quantum.h" -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2 }, - { 5, 4, 3 }, - { 6, 7, 8 }, -}, { - // LED Index to Physical Position - { 0, 0 }, { 112, 0 }, { 224, 0 }, - { 0, 112 }, { 112, 112 }, { 224, 112 }, - { 0, 224 }, { 112, 224 }, { 224, 224 }, -}, { - // LED Index to Flag - 4, 4, 4, - 4, 4, 4, - 4, 4, 4 -} }; -#endif - void keyboard_pre_init_kb(void) { gpio_set_pin_output(F5); gpio_write_pin_high(F5); - + keyboard_pre_init_user(); } diff --git a/keyboards/magic_force/mf34/keyboard.json b/keyboards/magic_force/mf34/keyboard.json index 9acae04b27..35a652422d 100644 --- a/keyboards/magic_force/mf34/keyboard.json +++ b/keyboards/magic_force/mf34/keyboard.json @@ -65,6 +65,42 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 37, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 74, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 149, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 186, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 12, "flags": 4}, + {"matrix": [1, 1], "x": 37, "y": 12, "flags": 4}, + {"matrix": [1, 2], "x": 74, "y": 12, "flags": 4}, + {"matrix": [1, 3], "x": 112, "y": 12, "flags": 4}, + {"matrix": [1, 4], "x": 149, "y": 12, "flags": 4}, + {"matrix": [1, 5], "x": 186, "y": 12, "flags": 4}, + {"matrix": [1, 6], "x": 224, "y": 12, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 24, "flags": 4}, + {"matrix": [2, 1], "x": 37, "y": 24, "flags": 4}, + {"matrix": [2, 2], "x": 74, "y": 24, "flags": 4}, + {"matrix": [2, 3], "x": 112, "y": 17, "flags": 4}, + {"matrix": [2, 4], "x": 149, "y": 17, "flags": 4}, + {"matrix": [2, 5], "x": 186, "y": 17, "flags": 4}, + {"matrix": [3, 3], "x": 112, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 149, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 186, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 224, "y": 38, "flags": 4}, + {"matrix": [4, 1], "x": 37, "y": 51, "flags": 4}, + {"matrix": [4, 3], "x": 112, "y": 51, "flags": 4}, + {"matrix": [4, 4], "x": 149, "y": 51, "flags": 4}, + {"matrix": [4, 5], "x": 186, "y": 51, "flags": 4}, + {"matrix": [5, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [5, 1], "x": 37, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 74, "y": 64, "flags": 4}, + {"matrix": [5, 4], "x": 149, "y": 64, "flags": 4}, + {"matrix": [5, 5], "x": 186, "y": 64, "flags": 4}, + {"matrix": [5, 6], "x": 224, "y": 64, "flags": 4} + ], "max_brightness": 200 }, "features": { diff --git a/keyboards/magic_force/mf34/mf34.c b/keyboards/magic_force/mf34/mf34.c deleted file mode 100644 index 8cced36866..0000000000 --- a/keyboards/magic_force/mf34/mf34.c +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright 2015 Álvaro "Gondolindrim" Volpato - -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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE - -// RGB Matrix -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3 , 4, 5, 6}, - { 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, NO_LED }, - { NO_LED, NO_LED, NO_LED, 20, 21, 22, 23 }, - { NO_LED, 24, NO_LED, 25, 26, 27, NO_LED }, - { 28, 29, 30, NO_LED, 31, 32, 33 } - }, { - {0, 0}, {37, 0}, {74, 0}, {112, 0}, {149, 0}, {186, 0}, {224, 0}, - {0, 12}, {37, 12}, {74, 12}, {112, 12}, {149, 12}, {186, 12}, {224, 12}, - {0, 24}, {37, 24}, {74, 24}, {112, 17}, {149, 17}, {186, 17}, - {112, 38}, {149, 38}, {186, 38}, {224, 38}, - {37, 51}, {112, 51}, {149, 51}, {186, 51}, - {0, 64}, {37, 64}, {74, 64}, {149, 64}, {186, 64}, {224, 64} - }, { - 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4 - } -}; -#endif diff --git a/keyboards/marksard/rhymestone/rev1/keyboard.json b/keyboards/marksard/rhymestone/rev1/keyboard.json index aaff1515e0..2b9829e711 100644 --- a/keyboards/marksard/rhymestone/rev1/keyboard.json +++ b/keyboards/marksard/rhymestone/rev1/keyboard.json @@ -10,6 +10,48 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"matrix": [0, 4], "x": 100, "y": 0, "flags": 4}, + {"matrix": [1, 4], "x": 100, "y": 21, "flags": 4}, + {"matrix": [2, 4], "x": 100, "y": 43, "flags": 4}, + {"matrix": [3, 4], "x": 100, "y": 64, "flags": 1}, + {"matrix": [3, 3], "x": 75, "y": 64, "flags": 1}, + {"matrix": [3, 2], "x": 50, "y": 64, "flags": 1}, + {"matrix": [3, 1], "x": 25, "y": 64, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 43, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 21, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 25, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 50, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 75, "y": 0, "flags": 4}, + {"matrix": [1, 3], "x": 75, "y": 21, "flags": 4}, + {"matrix": [2, 3], "x": 75, "y": 43, "flags": 4}, + {"matrix": [2, 2], "x": 50, "y": 43, "flags": 4}, + {"matrix": [2, 1], "x": 25, "y": 43, "flags": 4}, + {"matrix": [1, 1], "x": 25, "y": 21, "flags": 4}, + {"matrix": [1, 2], "x": 50, "y": 21, "flags": 4}, + {"matrix": [4, 4], "x": 125, "y": 0, "flags": 4}, + {"matrix": [5, 4], "x": 125, "y": 21, "flags": 4}, + {"matrix": [6, 4], "x": 125, "y": 43, "flags": 4}, + {"matrix": [7, 4], "x": 125, "y": 64, "flags": 1}, + {"matrix": [7, 3], "x": 150, "y": 64, "flags": 1}, + {"matrix": [7, 2], "x": 175, "y": 64, "flags": 1}, + {"matrix": [7, 1], "x": 200, "y": 64, "flags": 1}, + {"matrix": [7, 0], "x": 224, "y": 64, "flags": 1}, + {"matrix": [6, 0], "x": 224, "y": 43, "flags": 4}, + {"matrix": [5, 0], "x": 224, "y": 21, "flags": 4}, + {"matrix": [4, 0], "x": 224, "y": 0, "flags": 4}, + {"matrix": [4, 1], "x": 200, "y": 0, "flags": 4}, + {"matrix": [4, 2], "x": 175, "y": 0, "flags": 4}, + {"matrix": [4, 3], "x": 150, "y": 0, "flags": 4}, + {"matrix": [5, 3], "x": 150, "y": 21, "flags": 4}, + {"matrix": [6, 3], "x": 150, "y": 43, "flags": 4}, + {"matrix": [6, 2], "x": 175, "y": 43, "flags": 4}, + {"matrix": [6, 1], "x": 200, "y": 43, "flags": 4}, + {"matrix": [5, 1], "x": 200, "y": 21, "flags": 4}, + {"matrix": [5, 2], "x": 175, "y": 21, "flags": 4} + ], "sat_steps": 8, "val_steps": 8, "speed_steps": 10, diff --git a/keyboards/marksard/rhymestone/rev1/rev1.c b/keyboards/marksard/rhymestone/rev1/rev1.c deleted file mode 100644 index 06ea367707..0000000000 --- a/keyboards/marksard/rhymestone/rev1/rev1.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright 2020 marksard - * - * 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 "quantum.h" - -// Optional override functions below. -// You can leave any or all of these undefined. -// These are only required if you want to perform custom actions. - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 10, 11, 12, 13, 0 }, - { 9, 18, 19, 14, 1 }, - { 8, 17, 16, 15, 2 }, - { 7, 6, 5, 4, 3 }, - { 30, 31, 32, 33, 20 }, - { 29, 38, 39, 34, 21 }, - { 28, 37, 36, 35, 22 }, - { 27, 26, 25, 24, 23 } -}, { - { 100, 0 }, { 100, 21 }, { 100, 43 }, { 100, 64 }, - { 75, 64 }, { 50, 64 }, { 25, 64 }, { 0, 64 }, - { 0, 43 }, { 0, 21 }, { 0, 0 }, - { 25, 0 }, { 50, 0 }, { 75, 0 }, - { 75, 21 }, { 75, 43 }, - { 50, 43 }, { 25, 43 }, - { 25, 21 }, { 50, 21 }, - { 125, 0 }, { 125, 21 }, { 125, 43 }, { 125, 64 }, - { 150, 64 }, { 175, 64 }, { 200, 64 }, { 225, 64 }, - { 225, 43 }, { 225, 21 }, { 225, 0 }, - { 200, 0 }, { 175, 0 }, { 150, 0 }, - { 150, 21 }, { 150, 43 }, - { 175, 43 }, { 200, 43 }, - { 200, 21 }, { 150, 21 } -}, { - 4, 4, 4, 1, - 1, 1, 1, 1, - 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, 1, - 1, 1, 1, 1, - 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, 4 -} }; -#endif diff --git a/keyboards/mechlovin/adelais/rgb_led/rev1/keyboard.json b/keyboards/mechlovin/adelais/rgb_led/rev1/keyboard.json index 01232b07e8..1de0b83552 100644 --- a/keyboards/mechlovin/adelais/rgb_led/rev1/keyboard.json +++ b/keyboards/mechlovin/adelais/rgb_led/rev1/keyboard.json @@ -62,6 +62,99 @@ "animation": "cycle_pinwheel" }, "driver": "ws2812", + "layout": [ + {"matrix": [1, 14], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 0], "x": 17, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 34, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 51, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 69, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 86, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 100, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 103, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 120, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 138, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 155, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 172, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 189, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 207, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 215, "y": 0, "flags": 1}, + {"x": 223, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [2, 14], "x": 0, "y": 16, "flags": 1}, + {"matrix": [1, 0], "x": 17, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 34, "y": 16, "flags": 1}, + {"matrix": [1, 2], "x": 51, "y": 16, "flags": 1}, + {"matrix": [1, 3], "x": 69, "y": 16, "flags": 1}, + {"matrix": [1, 4], "x": 86, "y": 16, "flags": 1}, + {"matrix": [1, 5], "x": 103, "y": 16, "flags": 1}, + {"matrix": [1, 6], "x": 120, "y": 16, "flags": 1}, + {"matrix": [1, 7], "x": 138, "y": 16, "flags": 1}, + {"matrix": [1, 8], "x": 155, "y": 16, "flags": 1}, + {"matrix": [1, 9], "x": 172, "y": 16, "flags": 1}, + {"matrix": [1, 10], "x": 189, "y": 16, "flags": 1}, + {"matrix": [1, 11], "x": 207, "y": 16, "flags": 1}, + {"matrix": [1, 12], "x": 215, "y": 16, "flags": 1}, + {"matrix": [1, 13], "x": 224, "y": 16, "flags": 1}, + {"matrix": [3, 14], "x": 0, "y": 32, "flags": 1}, + {"matrix": [2, 0], "x": 17, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 34, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 51, "y": 32, "flags": 1}, + {"matrix": [2, 3], "x": 69, "y": 32, "flags": 1}, + {"matrix": [2, 4], "x": 86, "y": 32, "flags": 1}, + {"matrix": [2, 5], "x": 103, "y": 32, "flags": 1}, + {"matrix": [2, 6], "x": 120, "y": 32, "flags": 1}, + {"matrix": [2, 7], "x": 138, "y": 32, "flags": 1}, + {"matrix": [2, 8], "x": 155, "y": 32, "flags": 1}, + {"matrix": [2, 9], "x": 172, "y": 32, "flags": 1}, + {"matrix": [2, 10], "x": 189, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 207, "y": 32, "flags": 1}, + {"matrix": [2, 13], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 17, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 1}, + {"matrix": [3, 3], "x": 51, "y": 48, "flags": 1}, + {"matrix": [3, 4], "x": 69, "y": 48, "flags": 1}, + {"matrix": [3, 5], "x": 86, "y": 48, "flags": 1}, + {"matrix": [3, 6], "x": 103, "y": 48, "flags": 1}, + {"matrix": [3, 7], "x": 120, "y": 48, "flags": 1}, + {"matrix": [3, 8], "x": 138, "y": 48, "flags": 1}, + {"matrix": [3, 9], "x": 155, "y": 48, "flags": 1}, + {"matrix": [3, 10], "x": 172, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 189, "y": 48, "flags": 1}, + {"matrix": [4, 13], "x": 207, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 215, "y": 48, "flags": 1}, + {"x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 17, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 51, "y": 64, "flags": 1}, + {"matrix": [4, 4], "x": 86, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 103, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 138, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 172, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1}, + {"x": 100, "y": 0, "flags": 1}, + {"x": 69, "y": 0, "flags": 1}, + {"x": 24, "y": 0, "flags": 1}, + {"x": 0, "y": 3, "flags": 1}, + {"x": 0, "y": 16, "flags": 1}, + {"x": 0, "y": 32, "flags": 1}, + {"x": 0, "y": 51, "flags": 1}, + {"x": 15, "y": 64, "flags": 1}, + {"x": 34, "y": 64, "flags": 1}, + {"x": 69, "y": 64, "flags": 1}, + {"x": 103, "y": 64, "flags": 1}, + {"x": 110, "y": 64, "flags": 1}, + {"x": 120, "y": 64, "flags": 1}, + {"x": 155, "y": 64, "flags": 1}, + {"x": 189, "y": 64, "flags": 1}, + {"x": 192, "y": 64, "flags": 1}, + {"x": 224, "y": 58, "flags": 1}, + {"x": 224, "y": 32, "flags": 1}, + {"x": 224, "y": 16, "flags": 1}, + {"x": 224, "y": 0, "flags": 1}, + {"x": 207, "y": 0, "flags": 1}, + {"x": 172, "y": 0, "flags": 1}, + {"x": 138, "y": 0, "flags": 1} + ], "max_brightness": 220, "react_on_keyup": true, "sleep": true diff --git a/keyboards/mechlovin/adelais/rgb_led/rev1/rev1.c b/keyboards/mechlovin/adelais/rgb_led/rev1/rev1.c deleted file mode 100644 index 5f01f322df..0000000000 --- a/keyboards/mechlovin/adelais/rgb_led/rev1/rev1.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright 2020 Team Mechlovin - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - //Key Matrix to LED Index - {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16}, - {18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0}, - {33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, NO_LED, 45, 17}, - {46, NO_LED, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 58, 60, 32}, - {61, NO_LED, 62, NO_LED, 63, NO_LED, 64, NO_LED, 65, NO_LED, 66, NO_LED, NO_LED, 57, 67} -}, { - //LED Index to Physical Positon - {0,0}, { 17, 0}, { 34, 0 }, { 51, 0 }, { 69, 0}, { 86, 0}, {100, 0}, {103, 0}, { 120, 0}, { 138, 0}, { 155, 0}, { 172, 0}, { 189, 0}, {207, 0}, {215, 0}, {223, 0}, {224, 0}, - {0,16}, { 17, 16}, { 34,16 }, { 51,16 }, { 69,16}, { 86,16}, {103,16}, { 120,16}, { 138,16}, { 155,16}, { 172,16}, { 189,16}, {207, 16}, {215, 16}, {224,16}, - {0,32}, { 17, 32}, { 34,32 }, { 51,32 }, { 69,32}, { 86,32}, {103,32}, { 120,32}, { 138,32}, { 155,32}, { 172,32}, { 189,32}, {207, 32}, {224,32}, - { 17, 48}, { 34,48 }, { 51,48 }, { 69,48}, { 86,48}, {103,48}, { 120,48}, { 138,48}, { 155,48}, { 172,48}, { 189,48}, {207, 48}, {215, 48}, {224,48}, {224,48}, - { 17, 64}, { 51,64 }, { 86,64}, { 103,64}, { 138,64}, { 172,64}, {224, 64}, - {100,0}, { 69,0}, { 24, 0}, { 0,3}, { 0,16}, { 0,32}, { 0,51}, { 15,64 }, { 34,64}, { 69,64}, { 103,64}, {110,64}, { 120,64}, { 155,64}, { 189,64}, { 192,64}, { 224,58}, { 224,32}, { 224,16}, { 224,0}, { 207,0}, { 172,0}, { 138,0}, -}, { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -} }; -#endif diff --git a/keyboards/mechlovin/adelais/rgb_led/rev2/keyboard.json b/keyboards/mechlovin/adelais/rgb_led/rev2/keyboard.json index a8633af5da..e71f103635 100644 --- a/keyboards/mechlovin/adelais/rgb_led/rev2/keyboard.json +++ b/keyboards/mechlovin/adelais/rgb_led/rev2/keyboard.json @@ -64,6 +64,76 @@ "animation": "cycle_pinwheel" }, "driver": "is31fl3731", + "layout": [ + {"matrix": [1, 14], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 0], "x": 17, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 34, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 51, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 69, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 86, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 100, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 103, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 120, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 138, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 155, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 172, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 189, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 207, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 215, "y": 0, "flags": 1}, + {"x": 223, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [2, 14], "x": 0, "y": 16, "flags": 1}, + {"matrix": [1, 0], "x": 17, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 34, "y": 16, "flags": 1}, + {"matrix": [1, 2], "x": 51, "y": 16, "flags": 1}, + {"matrix": [1, 3], "x": 69, "y": 16, "flags": 1}, + {"matrix": [1, 4], "x": 86, "y": 16, "flags": 1}, + {"matrix": [1, 5], "x": 103, "y": 16, "flags": 1}, + {"matrix": [1, 6], "x": 120, "y": 16, "flags": 1}, + {"matrix": [1, 7], "x": 138, "y": 16, "flags": 1}, + {"matrix": [1, 8], "x": 155, "y": 16, "flags": 1}, + {"matrix": [1, 9], "x": 172, "y": 16, "flags": 1}, + {"matrix": [1, 10], "x": 189, "y": 16, "flags": 1}, + {"matrix": [1, 11], "x": 207, "y": 16, "flags": 1}, + {"matrix": [1, 12], "x": 215, "y": 16, "flags": 1}, + {"matrix": [1, 13], "x": 224, "y": 16, "flags": 1}, + {"matrix": [3, 14], "x": 0, "y": 32, "flags": 1}, + {"matrix": [2, 0], "x": 17, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 34, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 51, "y": 32, "flags": 1}, + {"matrix": [2, 3], "x": 69, "y": 32, "flags": 1}, + {"matrix": [2, 4], "x": 86, "y": 32, "flags": 1}, + {"matrix": [2, 5], "x": 103, "y": 32, "flags": 1}, + {"matrix": [2, 6], "x": 120, "y": 32, "flags": 1}, + {"matrix": [2, 7], "x": 138, "y": 32, "flags": 1}, + {"matrix": [2, 8], "x": 155, "y": 32, "flags": 1}, + {"matrix": [2, 9], "x": 172, "y": 32, "flags": 1}, + {"matrix": [2, 10], "x": 189, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 207, "y": 32, "flags": 1}, + {"matrix": [2, 13], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 17, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 1}, + {"matrix": [3, 3], "x": 51, "y": 48, "flags": 1}, + {"matrix": [3, 4], "x": 69, "y": 48, "flags": 1}, + {"matrix": [3, 5], "x": 86, "y": 48, "flags": 1}, + {"matrix": [3, 6], "x": 103, "y": 48, "flags": 1}, + {"matrix": [3, 7], "x": 120, "y": 48, "flags": 1}, + {"matrix": [3, 8], "x": 138, "y": 48, "flags": 1}, + {"matrix": [3, 9], "x": 155, "y": 48, "flags": 1}, + {"matrix": [3, 10], "x": 172, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 189, "y": 48, "flags": 1}, + {"matrix": [4, 13], "x": 207, "y": 48, "flags": 1}, + {"x": 215, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 17, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 51, "y": 64, "flags": 1}, + {"matrix": [4, 4], "x": 86, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 103, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 138, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 172, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "react_on_keyup": true, "sleep": true }, diff --git a/keyboards/mechlovin/adelais/rgb_led/rev2/rev2.c b/keyboards/mechlovin/adelais/rgb_led/rev2/rev2.c index 2dffbc24f0..d0bd63cdb4 100644 --- a/keyboards/mechlovin/adelais/rgb_led/rev2/rev2.c +++ b/keyboards/mechlovin/adelais/rgb_led/rev2/rev2.c @@ -94,29 +94,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {1, C4_7, C5_7, C6_7}, //D83-D13-67 }; -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16}, - {18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0}, - {33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, NO_LED, 45, 17}, - {46, NO_LED, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 60, 32}, - {61, NO_LED, 62, NO_LED, 63, NO_LED, 64, NO_LED, 65, NO_LED, 66, NO_LED, NO_LED, 57, 67} - }, - { - //LED Index to Physical Positon - {0,0}, { 17, 0}, { 34, 0 }, { 51, 0 }, { 69, 0}, { 86, 0}, {100, 0}, {103, 0}, { 120, 0}, { 138, 0}, { 155, 0}, { 172, 0}, { 189, 0}, {207, 0}, {215, 0}, {223, 0}, {224, 0}, - {0,16}, { 17, 16}, { 34,16 }, { 51,16 }, { 69,16}, { 86,16}, {103,16}, { 120,16}, { 138,16}, { 155,16}, { 172,16}, { 189,16}, {207, 16}, {215, 16}, {224,16}, - {0,32}, { 17, 32}, { 34,32 }, { 51,32 }, { 69,32}, { 86,32}, {103,32}, { 120,32}, { 138,32}, { 155,32}, { 172,32}, { 189,32}, {207, 32}, {224,32}, - { 17, 48}, { 34,48 }, { 51,48 }, { 69,48}, { 86,48}, {103,48}, { 120,48}, { 138,48}, { 155,48}, { 172,48}, { 189,48}, {207, 48}, {215, 48}, {224,48}, {224,48}, - { 17, 64}, { 51,64 }, { 86,64}, { 103,64}, { 138,64}, { 172,64}, {224, 64}, -}, { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -} }; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/mechlovin/adelais/rgb_led/rev3/keyboard.json b/keyboards/mechlovin/adelais/rgb_led/rev3/keyboard.json index a7cd8faa78..fd68b62baf 100644 --- a/keyboards/mechlovin/adelais/rgb_led/rev3/keyboard.json +++ b/keyboards/mechlovin/adelais/rgb_led/rev3/keyboard.json @@ -61,6 +61,74 @@ "animation": "cycle_pinwheel" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [3, 1], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 0], "x": 17, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 34, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 51, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 69, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 86, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 100, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 103, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 120, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 138, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 155, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 172, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 189, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 207, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 215, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [4, 1], "x": 0, "y": 16, "flags": 1}, + {"matrix": [1, 0], "x": 17, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 34, "y": 16, "flags": 1}, + {"matrix": [1, 2], "x": 51, "y": 16, "flags": 1}, + {"matrix": [1, 3], "x": 69, "y": 16, "flags": 1}, + {"matrix": [1, 4], "x": 86, "y": 16, "flags": 1}, + {"matrix": [1, 5], "x": 103, "y": 16, "flags": 1}, + {"matrix": [1, 6], "x": 120, "y": 16, "flags": 1}, + {"matrix": [1, 7], "x": 138, "y": 16, "flags": 1}, + {"matrix": [1, 8], "x": 155, "y": 16, "flags": 1}, + {"matrix": [1, 9], "x": 172, "y": 16, "flags": 1}, + {"matrix": [1, 10], "x": 189, "y": 16, "flags": 1}, + {"matrix": [1, 11], "x": 207, "y": 16, "flags": 1}, + {"matrix": [1, 12], "x": 215, "y": 16, "flags": 1}, + {"matrix": [1, 13], "x": 224, "y": 16, "flags": 1}, + {"matrix": [4, 3], "x": 0, "y": 32, "flags": 1}, + {"matrix": [2, 0], "x": 17, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 34, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 51, "y": 32, "flags": 1}, + {"matrix": [2, 3], "x": 69, "y": 32, "flags": 1}, + {"matrix": [2, 4], "x": 86, "y": 32, "flags": 1}, + {"matrix": [2, 5], "x": 103, "y": 32, "flags": 1}, + {"matrix": [2, 6], "x": 120, "y": 32, "flags": 1}, + {"matrix": [2, 7], "x": 138, "y": 32, "flags": 1}, + {"matrix": [2, 8], "x": 155, "y": 32, "flags": 1}, + {"matrix": [2, 9], "x": 172, "y": 32, "flags": 1}, + {"matrix": [2, 10], "x": 189, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 207, "y": 32, "flags": 1}, + {"matrix": [2, 13], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 17, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 1}, + {"matrix": [3, 3], "x": 51, "y": 48, "flags": 1}, + {"matrix": [3, 4], "x": 69, "y": 48, "flags": 1}, + {"matrix": [3, 5], "x": 86, "y": 48, "flags": 1}, + {"matrix": [3, 6], "x": 103, "y": 48, "flags": 1}, + {"matrix": [3, 7], "x": 120, "y": 48, "flags": 1}, + {"matrix": [3, 8], "x": 138, "y": 48, "flags": 1}, + {"matrix": [3, 9], "x": 155, "y": 48, "flags": 1}, + {"matrix": [3, 10], "x": 172, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 189, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 207, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 215, "y": 48, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 17, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 51, "y": 64, "flags": 1}, + {"matrix": [4, 4], "x": 86, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 103, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 138, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 172, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "react_on_keyup": true, "sleep": true }, diff --git a/keyboards/mechlovin/adelais/rgb_led/rev3/rev3.c b/keyboards/mechlovin/adelais/rgb_led/rev3/rev3.c index 33dd2157e4..d934e6df18 100644 --- a/keyboards/mechlovin/adelais/rgb_led/rev3/rev3.c +++ b/keyboards/mechlovin/adelais/rgb_led/rev3/rev3.c @@ -88,30 +88,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW1_CS24, SW1_CS23, SW1_CS22}, /* D103-K4E-65 */ }; -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - {17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, NO_LED}, - {32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, NO_LED, 44, NO_LED}, - {45, 0, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58}, - {59, 16, 60, 31, 61, NO_LED, 62, NO_LED, 63, NO_LED, 64, NO_LED, NO_LED, NO_LED, 65}, - }, { - //LED Index to Physical Positon - {0,0}, { 17, 0}, { 34, 0 }, { 51, 0 }, { 69, 0}, { 86, 0}, {100, 0}, {103, 0}, { 120, 0}, { 138, 0}, { 155, 0}, { 172, 0}, { 189, 0}, {207, 0}, {215, 0}, {224, 0}, - {0,16}, { 17, 16}, { 34,16 }, { 51,16 }, { 69,16}, { 86,16}, {103,16}, { 120,16}, { 138,16}, { 155,16}, { 172,16}, { 189,16}, {207, 16}, {215, 16}, {224,16}, - {0,32}, { 17, 32}, { 34,32 }, { 51,32 }, { 69,32}, { 86,32}, {103,32}, { 120,32}, { 138,32}, { 155,32}, { 172,32}, { 189,32}, {207, 32}, {224,32}, - { 17, 48}, { 34,48 }, { 51,48 }, { 69,48}, { 86,48}, {103,48}, { 120,48}, { 138,48}, { 155,48}, { 172,48}, { 189,48}, {207, 48}, {215, 48}, {224,48}, - { 17, 64}, { 51,64 }, { 86,64}, { 103,64}, { 138,64}, { 172,64}, {224, 64}, - }, { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - } -}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/mechlovin/delphine/rgb_led/keyboard.json b/keyboards/mechlovin/delphine/rgb_led/keyboard.json index d6e7a27f81..5cb2c13ac1 100644 --- a/keyboards/mechlovin/delphine/rgb_led/keyboard.json +++ b/keyboards/mechlovin/delphine/rgb_led/keyboard.json @@ -78,6 +78,33 @@ "animation": "cycle_pinwheel" }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 149, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 13, "flags": 4}, + {"matrix": [1, 1], "x": 75, "y": 13, "flags": 1}, + {"matrix": [1, 2], "x": 149, "y": 13, "flags": 1}, + {"matrix": [1, 3], "x": 224, "y": 13, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 25, "flags": 4}, + {"matrix": [2, 1], "x": 75, "y": 25, "flags": 1}, + {"matrix": [2, 2], "x": 149, "y": 25, "flags": 1}, + {"matrix": [2, 3], "x": 224, "y": 25, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 38, "flags": 4}, + {"matrix": [3, 1], "x": 75, "y": 38, "flags": 1}, + {"matrix": [3, 2], "x": 149, "y": 38, "flags": 1}, + {"matrix": [3, 3], "x": 224, "y": 38, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 51, "flags": 4}, + {"matrix": [4, 1], "x": 75, "y": 51, "flags": 1}, + {"matrix": [4, 2], "x": 149, "y": 51, "flags": 1}, + {"matrix": [4, 3], "x": 224, "y": 51, "flags": 4}, + {"matrix": [5, 0], "x": 0, "y": 64, "flags": 4}, + {"x": 37, "y": 64, "flags": 0}, + {"matrix": [5, 1], "x": 75, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 149, "y": 64, "flags": 1}, + {"matrix": [5, 3], "x": 224, "y": 64, "flags": 4} + ], "react_on_keyup": true } } diff --git a/keyboards/mechlovin/delphine/rgb_led/rgb_led.c b/keyboards/mechlovin/delphine/rgb_led/rgb_led.c index feda05a071..0f3f1c0889 100644 --- a/keyboards/mechlovin/delphine/rgb_led/rgb_led.c +++ b/keyboards/mechlovin/delphine/rgb_led/rgb_led.c @@ -49,32 +49,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C4_14, C5_14, C6_14}, //D51-24 }; -led_config_t g_led_config = { { - // Key Matrix to LED Index - {0, 1, 2, 3}, - {4, 5, 6, 7}, - {8, 9, 10, 11}, - {12, 13, 14, 15}, - {16, 17, 18, 19}, - {20, 22, 23, 24} - }, - { - //LED Index to Physical Positon - { 0, 0}, { 75, 0}, {149, 0}, {224, 0}, - { 0, 13}, { 75, 13}, {149, 13}, {224, 13}, - { 0, 25}, { 75, 25}, {149, 25}, {224, 25}, - { 0, 38}, { 75, 38}, {149, 38}, {224, 38}, - { 0, 51}, { 75, 51}, {149, 51}, {224, 51}, - { 0, 64}, { 37, 64}, { 75, 64}, {149, 64}, {224, 64}, -}, { - 4, 4, 4, 4, - 4, 1, 1, 4, - 4, 1, 1, 4, - 4, 1, 1, 4, - 4, 1, 1, 4, - 4, 0, 1, 1, 4, -} }; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/mechlovin/hannah60rgb/rev1/keyboard.json b/keyboards/mechlovin/hannah60rgb/rev1/keyboard.json index e2b0ae715e..82911ddaf9 100644 --- a/keyboards/mechlovin/hannah60rgb/rev1/keyboard.json +++ b/keyboards/mechlovin/hannah60rgb/rev1/keyboard.json @@ -69,6 +69,80 @@ "animation": "cycle_pinwheel" }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 1}, + {"x": 216, "y": 0, "flags": 1}, + {"matrix": [1, 13], "x": 220, "y": 0, "flags": 1}, + {"matrix": [2, 12], "x": 211, "y": 16, "flags": 1}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 1}, + {"matrix": [1, 11], "x": 176, "y": 16, "flags": 1}, + {"matrix": [1, 10], "x": 160, "y": 16, "flags": 1}, + {"matrix": [1, 9], "x": 144, "y": 16, "flags": 1}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 1}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 1}, + {"matrix": [1, 6], "x": 96, "y": 16, "flags": 1}, + {"matrix": [1, 5], "x": 80, "y": 16, "flags": 1}, + {"matrix": [1, 4], "x": 64, "y": 16, "flags": 1}, + {"matrix": [1, 3], "x": 48, "y": 16, "flags": 1}, + {"matrix": [1, 2], "x": 32, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 16, "y": 16, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 1}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 1}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 1}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 1}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 1}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 1}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 1}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 1}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 1}, + {"x": 192, "y": 32, "flags": 1}, + {"matrix": [2, 13], "x": 208, "y": 32, "flags": 1}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 1}, + {"x": 208, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 192, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 160, "y": 48, "flags": 1}, + {"matrix": [3, 10], "x": 144, "y": 48, "flags": 1}, + {"matrix": [3, 9], "x": 128, "y": 48, "flags": 1}, + {"matrix": [3, 8], "x": 112, "y": 48, "flags": 1}, + {"matrix": [3, 7], "x": 96, "y": 48, "flags": 1}, + {"matrix": [3, 6], "x": 80, "y": 48, "flags": 1}, + {"matrix": [3, 5], "x": 64, "y": 48, "flags": 1}, + {"matrix": [3, 4], "x": 48, "y": 48, "flags": 1}, + {"matrix": [3, 3], "x": 32, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 16, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 8, "y": 48, "flags": 1}, + {"x": 0, "y": 48, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 16, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 32, "y": 64, "flags": 1}, + {"matrix": [4, 4], "x": 48, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 64, "y": 64, "flags": 1}, + {"x": 80, "y": 64, "flags": 1}, + {"x": 96, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 112, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 144, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 160, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 192, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1} + ], "react_on_keyup": true }, "matrix_pins": { diff --git a/keyboards/mechlovin/hannah60rgb/rev1/rev1.c b/keyboards/mechlovin/hannah60rgb/rev1/rev1.c index 139db81bbe..2918d82318 100644 --- a/keyboards/mechlovin/hannah60rgb/rev1/rev1.c +++ b/keyboards/mechlovin/hannah60rgb/rev1/rev1.c @@ -17,28 +17,6 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - //Key Matrix to LED Index - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, - {29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 15}, - {30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 16, 43}, - {59, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 44}, - {60, 61, 62, NO_LED, 63, NO_LED, 64, NO_LED, 67, NO_LED, 68, 69, 70, 71} -}, { - //LED Index to Physical Positon - { 0, 0}, { 16, 0}, { 32, 0 }, { 48, 0 }, { 64, 0}, { 80, 0}, { 96, 0}, { 112, 0}, { 128, 0}, { 144, 0}, { 160, 0}, { 176, 0}, {192, 0}, {208, 0}, {216, 0}, - {220, 0}, {211, 16}, {200,16 }, {176,16 }, {160,16}, {144,16}, {128,16}, { 112,16}, { 96,16}, { 80,16}, { 64,16}, { 48,16}, {32, 16}, {16, 16}, {0,16}, - { 0, 32}, { 16, 32}, { 32,32 }, { 48,32 }, { 64,32}, { 80,32}, { 96,32}, { 112,32}, { 128,32}, { 144,32}, { 160,32}, { 176,32}, {192, 32}, {208, 32}, {224,48}, - {208, 48}, {192, 48}, {160,48 }, {144,48 }, {128,48}, {112,48}, {96,48}, { 80,48}, { 64,48}, { 48,48}, { 32,48}, { 16,48}, {8, 48}, {0, 48}, {0,48}, - { 0, 64}, { 16, 64}, { 32,64 }, { 48,64 }, { 64,64}, { 80,64}, { 96,64}, { 112,64}, { 144,64}, { 160,64}, { 192,64}, { 224,64}, -}, { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -} }; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/mechlovin/hannah60rgb/rev2/keyboard.json b/keyboards/mechlovin/hannah60rgb/rev2/keyboard.json index 066422b3e3..158e6907b4 100644 --- a/keyboards/mechlovin/hannah60rgb/rev2/keyboard.json +++ b/keyboards/mechlovin/hannah60rgb/rev2/keyboard.json @@ -87,6 +87,86 @@ "animation": "cycle_pinwheel" }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 16, "y": 16, "flags": 1}, + {"matrix": [1, 2], "x": 32, "y": 16, "flags": 1}, + {"matrix": [1, 3], "x": 48, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 1}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 1}, + {"x": 0, "y": 48, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 12, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 16, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 16, "y": 64, "flags": 1}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 1}, + {"matrix": [1, 4], "x": 64, "y": 16, "flags": 1}, + {"matrix": [1, 5], "x": 80, "y": 16, "flags": 1}, + {"matrix": [1, 6], "x": 96, "y": 16, "flags": 1}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 1}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 1}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 1}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 1}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 1}, + {"matrix": [3, 3], "x": 32, "y": 48, "flags": 1}, + {"matrix": [3, 4], "x": 48, "y": 48, "flags": 1}, + {"matrix": [3, 5], "x": 64, "y": 48, "flags": 1}, + {"matrix": [3, 6], "x": 80, "y": 48, "flags": 1}, + {"matrix": [4, 2], "x": 32, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 80, "y": 64, "flags": 1}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 220, "y": 0, "flags": 1}, + {"x": 210, "y": 0, "flags": 1}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 1}, + {"matrix": [1, 9], "x": 144, "y": 16, "flags": 1}, + {"matrix": [1, 10], "x": 160, "y": 16, "flags": 1}, + {"matrix": [1, 11], "x": 176, "y": 16, "flags": 1}, + {"matrix": [1, 12], "x": 192, "y": 16, "flags": 1}, + {"x": 220, "y": 16, "flags": 1}, + {"x": 220, "y": 16, "flags": 1}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 1}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 1}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 1}, + {"matrix": [2, 12], "x": 192, "y": 32, "flags": 1}, + {"matrix": [2, 13], "x": 220, "y": 32, "flags": 1}, + {"matrix": [3, 7], "x": 96, "y": 48, "flags": 1}, + {"matrix": [3, 8], "x": 112, "y": 48, "flags": 1}, + {"matrix": [3, 9], "x": 128, "y": 48, "flags": 1}, + {"matrix": [3, 10], "x": 144, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 160, "y": 48, "flags": 1}, + {"x": 200, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 220, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 220, "y": 48, "flags": 1}, + {"x": 96, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 144, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 160, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 176, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 220, "y": 64, "flags": 1}, + {"matrix": [1, 13], "x": 220, "y": 0, "flags": 1}, + {"x": 0, "y": 0, "flags": 9}, + {"x": 0, "y": 0, "flags": 9}, + {"x": 0, "y": 0, "flags": 9}, + {"x": 0, "y": 0, "flags": 9}, + {"x": 0, "y": 0, "flags": 9}, + {"x": 0, "y": 0, "flags": 9}, + {"x": 0, "y": 0, "flags": 9}, + {"x": 0, "y": 0, "flags": 9} + ], "react_on_keyup": true }, "matrix_pins": { diff --git a/keyboards/mechlovin/hannah60rgb/rev2/rev2.c b/keyboards/mechlovin/hannah60rgb/rev2/rev2.c index 90a42a88a2..0667e8bc78 100644 --- a/keyboards/mechlovin/hannah60rgb/rev2/rev2.c +++ b/keyboards/mechlovin/hannah60rgb/rev2/rev2.c @@ -110,54 +110,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C9_16, C9_11, C7_12},//INDICATOR LED-77 }; -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 18, 19, 20, 21, 36, 37, 38, 39, 40, 41 }, - { 4, 5, 6, 7, 22, 23, 24, 25, 43, 44, 45, 46, 47, 69 }, - { 8, 9, 10, 11, 26, 27, 28, 29, 50, 51, 52, 53, 54, 55 }, - { 13, 14, 15, 30, 31, 32, 33, 56, 57, 58, 59, 60, 62, 63 }, - { 16, 17, 34, NO_LED, NO_LED, NO_LED, 35, NO_LED, NO_LED, NO_LED, 65, 66, 67, 68 } - }, { - //LED Index to Physical Positon - { 0, 0 }, { 16, 0 }, { 32, 0 }, { 48, 0 }, //9-59-68-76 - { 0, 16 }, { 16, 16 }, { 32, 16 }, { 48, 16 }, //10-60-72-77 - { 0, 32 }, { 16, 32 }, { 32, 32 }, { 48, 32 }, //46-61-73-78 - { 0, 48 }, { 0, 48 }, { 12, 48 }, { 16, 48 }, //126-51-63-74 - { 0, 64 }, { 16, 64 }, //56-67 - { 64, 0 }, { 80, 0 }, { 96, 0 }, { 112, 0 }, //80-84-89-94 - { 64, 16 }, { 80, 16 }, { 96, 16 }, { 112, 16 }, //81-85-90-95 - { 64, 32 }, { 80, 32 }, { 96, 32 }, { 112, 32 }, //82-86-91-96 - { 32, 48 }, { 48, 48 }, { 64, 48 }, { 80, 48 }, //79-83-87-92 - { 32, 64 }, { 80, 64 }, //75-93 - { 128, 0 }, { 144, 0 }, { 160, 0 }, { 176, 0 }, { 192, 0 }, { 220, 0 }, { 210, 0 }, //98-102-106-111-116-121-130 - { 128, 16 }, { 144, 16 }, { 160, 16 }, { 176, 16 }, { 192, 16 }, { 220, 16 }, { 220, 16 }, //99-103-107-112-117-129-122 - { 128, 32 }, { 144, 32 }, { 160, 32 }, { 176, 32 }, { 192, 32 }, { 220, 32 }, //100-104-108-113-118-123 - { 96, 48 }, { 112, 48 }, { 128, 48 }, { 144, 48 }, { 160, 48 }, { 200, 48 }, { 220, 48 }, { 220, 48 }, //97-101-105-109-114-119-128-124 - { 96, 64 }, { 144, 64 }, { 160, 64 }, { 176, 64 }, { 220, 64 }, //127-110-115-120-125 - { 220, 0 }, //140 - { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } - }, { - 1, 1, 1, 1, - 1, 1, 1, 1, - 1, 1, 1, 1, - 1, 1, 1, 1, - 1, 1, - 1, 1, 1, 1, - 1, 1, 1, 1, - 1, 1, 1, 1, - 1, 1, 1, 1, - 1, 1, - 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, - 1, - 9, 9, 9, 9, 9, 9, 9, 9 - } -}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/mechlovin/infinity87/rgb_rev1/keyboard.json b/keyboards/mechlovin/infinity87/rgb_rev1/keyboard.json index 2ca5e03b36..3709736be0 100644 --- a/keyboards/mechlovin/infinity87/rgb_rev1/keyboard.json +++ b/keyboards/mechlovin/infinity87/rgb_rev1/keyboard.json @@ -66,6 +66,99 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 14, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 28, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 56, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 70, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 84, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 98, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 112, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 126, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 140, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 154, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 168, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 182, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 196, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 210, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 14, "y": 16, "flags": 1}, + {"matrix": [1, 2], "x": 28, "y": 16, "flags": 1}, + {"matrix": [1, 3], "x": 42, "y": 16, "flags": 1}, + {"matrix": [1, 4], "x": 56, "y": 16, "flags": 1}, + {"matrix": [1, 5], "x": 70, "y": 16, "flags": 1}, + {"matrix": [1, 6], "x": 84, "y": 16, "flags": 1}, + {"matrix": [1, 7], "x": 98, "y": 16, "flags": 1}, + {"matrix": [1, 8], "x": 112, "y": 16, "flags": 1}, + {"matrix": [1, 9], "x": 126, "y": 16, "flags": 1}, + {"matrix": [1, 10], "x": 140, "y": 16, "flags": 1}, + {"matrix": [1, 11], "x": 154, "y": 16, "flags": 1}, + {"matrix": [1, 12], "x": 168, "y": 16, "flags": 1}, + {"matrix": [1, 13], "x": 182, "y": 16, "flags": 1}, + {"matrix": [1, 14], "x": 196, "y": 16, "flags": 1}, + {"matrix": [1, 15], "x": 210, "y": 16, "flags": 1}, + {"matrix": [1, 16], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 14, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 28, "y": 32, "flags": 1}, + {"matrix": [2, 3], "x": 42, "y": 32, "flags": 1}, + {"matrix": [2, 4], "x": 56, "y": 32, "flags": 1}, + {"matrix": [2, 5], "x": 70, "y": 32, "flags": 1}, + {"matrix": [2, 6], "x": 84, "y": 32, "flags": 1}, + {"matrix": [2, 7], "x": 98, "y": 32, "flags": 1}, + {"matrix": [2, 8], "x": 112, "y": 32, "flags": 1}, + {"matrix": [2, 9], "x": 126, "y": 32, "flags": 1}, + {"matrix": [2, 10], "x": 140, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 154, "y": 32, "flags": 1}, + {"matrix": [2, 12], "x": 168, "y": 32, "flags": 1}, + {"matrix": [2, 13], "x": 182, "y": 32, "flags": 1}, + {"matrix": [2, 14], "x": 196, "y": 32, "flags": 1}, + {"matrix": [2, 15], "x": 210, "y": 32, "flags": 1}, + {"matrix": [2, 16], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 14, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 28, "y": 48, "flags": 1}, + {"matrix": [3, 3], "x": 42, "y": 48, "flags": 1}, + {"matrix": [3, 4], "x": 56, "y": 48, "flags": 1}, + {"matrix": [3, 5], "x": 70, "y": 48, "flags": 1}, + {"matrix": [3, 6], "x": 84, "y": 48, "flags": 1}, + {"matrix": [3, 7], "x": 98, "y": 48, "flags": 1}, + {"matrix": [3, 8], "x": 112, "y": 48, "flags": 1}, + {"matrix": [3, 9], "x": 126, "y": 48, "flags": 1}, + {"matrix": [3, 10], "x": 140, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 154, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 168, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 182, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 28, "y": 64, "flags": 1}, + {"matrix": [4, 3], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 4], "x": 56, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 70, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 84, "y": 64, "flags": 1}, + {"matrix": [4, 7], "x": 98, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 112, "y": 64, "flags": 1}, + {"matrix": [4, 9], "x": 126, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 140, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 154, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 168, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 182, "y": 64, "flags": 1}, + {"matrix": [4, 15], "x": 210, "y": 64, "flags": 1}, + {"matrix": [5, 0], "x": 0, "y": 80, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 80, "flags": 1}, + {"matrix": [5, 2], "x": 28, "y": 80, "flags": 1}, + {"matrix": [5, 6], "x": 84, "y": 80, "flags": 1}, + {"matrix": [5, 10], "x": 140, "y": 80, "flags": 1}, + {"matrix": [5, 11], "x": 154, "y": 80, "flags": 1}, + {"matrix": [5, 12], "x": 168, "y": 80, "flags": 1}, + {"matrix": [5, 13], "x": 182, "y": 80, "flags": 1}, + {"matrix": [5, 14], "x": 196, "y": 80, "flags": 1}, + {"matrix": [5, 15], "x": 210, "y": 80, "flags": 1}, + {"matrix": [5, 16], "x": 224, "y": 80, "flags": 1} + ], "sleep": true }, "matrix_pins": { diff --git a/keyboards/mechlovin/infinity87/rgb_rev1/rgb_rev1.c b/keyboards/mechlovin/infinity87/rgb_rev1/rgb_rev1.c index 8df305bb1a..ae4dfef158 100644 --- a/keyboards/mechlovin/infinity87/rgb_rev1/rgb_rev1.c +++ b/keyboards/mechlovin/infinity87/rgb_rev1/rgb_rev1.c @@ -111,31 +111,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW9_CS19, SW9_CS20, SW9_CS21}, //D165-K2G-90 }; -led_config_t g_led_config = { { - // Key Matrix to LED Index - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, - {17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33}, - {34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50}, - {51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, NO_LED, NO_LED, NO_LED}, - {65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, NO_LED, 79, NO_LED}, - {80, 81, 82, NO_LED, NO_LED, NO_LED, 83, NO_LED, NO_LED, NO_LED, 84, 85, 86, 87, 88, 89, 90} - }, { - {0, 0}, {14, 0}, {28, 0}, {42, 0}, {56, 0}, {70, 0}, {84, 0}, {98, 0}, {112, 0}, {126, 0}, {140, 0}, {154, 0}, {168, 0}, {182, 0}, {196, 0}, {210, 0}, {224, 0}, - {0,16}, {14,16}, {28,16}, {42, 16}, {56, 16}, {70, 16}, {84, 16}, {98, 16}, {112, 16}, {126, 16}, {140, 16}, {154, 16}, {168, 16}, {182, 16}, {196, 16}, {210, 16}, {224, 16}, - {0,32}, {14,32}, {28,32}, {42, 32}, {56, 32}, {70, 32}, {84, 32}, {98, 32}, {112, 32}, {126, 32}, {140, 32}, {154, 32}, {168, 32}, {182, 32}, {196, 32}, {210, 32}, {224, 32}, - {0,48}, {14,48}, {28,48}, {42, 48}, {56, 48}, {70, 48}, {84, 48}, {98, 48}, {112, 48}, {126, 48}, {140, 48}, {154, 48}, {168, 48}, {182, 48}, - {0,64}, {14,64}, {28,64}, {42, 64}, {56, 64}, {70, 64}, {84, 64}, {98, 64}, {112, 64}, {126, 64}, {140, 64}, {154, 64}, {168, 64}, {182, 64}, {210, 64}, - {0,80}, {14,80}, {28,80}, {84, 80}, {140, 80}, {154, 80}, {168, 80}, {182, 80}, {196, 80}, {210, 80}, {224, 80} - }, { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - } }; - - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/mechlovin/infinity875/infinity875.c b/keyboards/mechlovin/infinity875/infinity875.c deleted file mode 100644 index 09749bbc2b..0000000000 --- a/keyboards/mechlovin/infinity875/infinity875.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright 2021 Mechlovin' Studio - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - //Key Matrix to LED Index - {0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17}, - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED} -}, { - //LED Index to Physical Positon - {0,0}, {14,0}, {28,0}, {42,0}, {56,0}, {67,0}, {70,0}, {84,0}, {98,0}, {112,0}, {126,0}, {140,0}, {154,0}, {168,0}, {182,0}, {196,0}, {210,0}, {224,0}, - {224,13}, {196,13}, {182,13}, {154,13}, {112,13}, {84,13}, {56,13}, {28,13}, {0,13}, - {0,25}, {0,38}, - {0,51}, {0,64}, - {28,64}, {56,64}, - {84,64}, {112,64}, {154,64}, {182,64}, {196,64}, {224,64}, {224,51}, {224,38}, {224,25}, -//{244,64}, {196,64}, {182,64}, {154,64}, {112,64}, {84,64}, {56,64}, {28,64}, {0,64}, -}, { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, - 1, 1, - 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, -} }; -#endif - diff --git a/keyboards/mechlovin/infinity875/keyboard.json b/keyboards/mechlovin/infinity875/keyboard.json index 1016178caa..223fce2cac 100644 --- a/keyboards/mechlovin/infinity875/keyboard.json +++ b/keyboards/mechlovin/infinity875/keyboard.json @@ -15,6 +15,50 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 14, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 28, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 56, "y": 0, "flags": 1}, + {"x": 67, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 70, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 84, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 98, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 112, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 126, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 140, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 154, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 168, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 182, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 196, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 210, "y": 0, "flags": 1}, + {"matrix": [0, 16], "x": 224, "y": 0, "flags": 1}, + {"x": 224, "y": 13, "flags": 1}, + {"x": 196, "y": 13, "flags": 1}, + {"x": 182, "y": 13, "flags": 1}, + {"x": 154, "y": 13, "flags": 1}, + {"x": 112, "y": 13, "flags": 1}, + {"x": 84, "y": 13, "flags": 1}, + {"x": 56, "y": 13, "flags": 1}, + {"x": 28, "y": 13, "flags": 1}, + {"x": 0, "y": 13, "flags": 1}, + {"x": 0, "y": 25, "flags": 1}, + {"x": 0, "y": 38, "flags": 1}, + {"x": 0, "y": 51, "flags": 1}, + {"x": 0, "y": 64, "flags": 1}, + {"x": 28, "y": 64, "flags": 1}, + {"x": 56, "y": 64, "flags": 1}, + {"x": 84, "y": 64, "flags": 1}, + {"x": 112, "y": 64, "flags": 1}, + {"x": 154, "y": 64, "flags": 1}, + {"x": 182, "y": 64, "flags": 1}, + {"x": 196, "y": 64, "flags": 1}, + {"x": 224, "y": 64, "flags": 1}, + {"x": 224, "y": 51, "flags": 1}, + {"x": 224, "y": 38, "flags": 1}, + {"x": 224, "y": 25, "flags": 1} + ], "max_brightness": 200, "sleep": true }, From 3934a7f3c8e153d020d84fc5823379d3af21cfe9 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 03:18:16 -0600 Subject: [PATCH 42/99] Migrate `g_led_config` to DD (I) (#25600) --- keyboards/idobao/id42/id42.c | 45 ------- keyboards/idobao/id42/keyboard.json | 44 +++++++ keyboards/idobao/id61/id61.c | 68 ---------- keyboards/idobao/id61/keyboard.json | 73 +++++++++++ keyboards/idobao/id63/id63.c | 68 ---------- keyboards/idobao/id63/keyboard.json | 77 +++++++++++ keyboards/idobao/id67/id67.c | 68 ---------- keyboards/idobao/id67/keyboard.json | 79 +++++++++++ keyboards/idobao/id75/v2/keyboard.json | 89 ++++++++++++- keyboards/idobao/id75/v2/v2.c | 49 ------- keyboards/idobao/id80/v3/ansi/ansi.c | 76 ----------- keyboards/idobao/id80/v3/ansi/keyboard.json | 96 ++++++++++++++ keyboards/idobao/id87/v2/keyboard.json | 105 +++++++++++++++ keyboards/idobao/id87/v2/v2.c | 83 ------------ keyboards/idobao/montex/v1rgb/keyboard.json | 33 +++++ keyboards/idobao/montex/v1rgb/v1rgb.c | 58 --------- keyboards/idobao/montex/v2/keyboard.json | 33 +++++ keyboards/idobao/montex/v2/v2.c | 82 ------------ keyboards/idyllic/tinny50_rgb/keyboard.json | 34 ++++- keyboards/idyllic/tinny50_rgb/tinny50_rgb.c | 45 ------- keyboards/ilumkb/simpler61/keyboard.json | 63 +++++++++ keyboards/ilumkb/simpler61/simpler61.c | 23 ---- keyboards/ilumkb/simpler64/keyboard.json | 66 ++++++++++ keyboards/ilumkb/simpler64/simpler64.c | 23 ---- keyboards/inett_studio/sqx/hotswap/hotswap.c | 38 ------ .../inett_studio/sqx/hotswap/keyboard.json | 66 ++++++++++ .../inett_studio/sqx/universal/keyboard.json | 74 +++++++++++ .../inett_studio/sqx/universal/universal.c | 42 ------ keyboards/input_club/k_type/k_type.c | 51 -------- keyboards/input_club/k_type/keyboard.json | 123 +++++++++++++++++- 30 files changed, 1052 insertions(+), 822 deletions(-) delete mode 100755 keyboards/idobao/id42/id42.c delete mode 100644 keyboards/idobao/id61/id61.c delete mode 100644 keyboards/idobao/id63/id63.c delete mode 100644 keyboards/idobao/id67/id67.c delete mode 100644 keyboards/idobao/id75/v2/v2.c delete mode 100644 keyboards/idobao/id80/v3/ansi/ansi.c delete mode 100644 keyboards/idobao/id87/v2/v2.c delete mode 100755 keyboards/idobao/montex/v1rgb/v1rgb.c delete mode 100755 keyboards/idobao/montex/v2/v2.c delete mode 100644 keyboards/idyllic/tinny50_rgb/tinny50_rgb.c diff --git a/keyboards/idobao/id42/id42.c b/keyboards/idobao/id42/id42.c deleted file mode 100755 index 5e76e4c5be..0000000000 --- a/keyboards/idobao/id42/id42.c +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2022 Vino Rodrigues (@vinorodrigues) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "quantum.h" - -#define __ NO_LED - -#ifdef RGB_MATRIX_ENABLE - -/* - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ - * │41 │40 │39 │38 │37 │36 │35 │34 │33 │32 │31 │30 │ - * ├───┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤ - * │ 29 │28 │27 │26 │25 │24 │23 │22 │21 │20 │ 19 │ - * ├────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴──┬┴──┬───┤ - * │ 18 │17 │16 │15 │14 │13 │12 │11 │ 10 │ 9 │ 8 │ - * ├────┬┴──┬┴───┼───┴───┴─┬─┴───┴───┼─┬───┼───┼───┤ - * │ 7 │ 6 │ 5 │ 4 │ 3 │ │ 2 │ 1 │ 0 │ - * └────┴───┴────┴─────────┴─────────┘ └───┴───┴───┘ - */ -led_config_t g_led_config = { { - // Key Matrix to LED Index - // WS2812 LED strings are addressed from 0 (1st) to RGB_MATRIX_LED_COUNT-1 (last) - { 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30 }, - { 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, __, 19 }, - { 18, 17, 16, 15, 14, 13, 12, 11, 10, __, 9, 8 }, - { 7, 6, 5, 4, __, __, 3, __, __, 2, 1, 0 } -}, { - // LED Index to Physical Position - // **NB**: Reversed order - // Generated from: https://xelus.netlify.app/guides/KLE_to_RGB_parser - {224,64 }, {204,64 }, {183,64 }, {135,64 }, { 84,64 }, { 48,64 }, { 25,64 }, { 3,64 }, - {224,43 }, {204,43 }, {181,43 }, {158,43 }, {137,43 }, {117,43 }, { 97,43 }, { 76,43 }, { 56,43 }, { 36,43 }, { 8,43 }, - {216,21 }, {188,21 }, {168,21 }, {148,21 }, {127,21 }, {107,21 }, { 87,21 }, { 66,21 }, { 46,21 }, { 25,21 }, { 3,21 }, - {224,0 }, {204,0 }, {183,0 }, {163,0 }, {143,0 }, {122,0 }, {102,0 }, { 81,0 }, { 61,0 }, { 41,0 }, { 20,0 }, { 0,0 } -}, { - // LED Index to Flag - // **NB**: Reversed order - 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 4, - 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, - 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 -} }; - -#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/idobao/id42/keyboard.json b/keyboards/idobao/id42/keyboard.json index 0f1cecd16a..d726f04e78 100644 --- a/keyboards/idobao/id42/keyboard.json +++ b/keyboards/idobao/id42/keyboard.json @@ -56,6 +56,50 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [3, 11], "x": 224, "y": 64, "flags": 4}, + {"matrix": [3, 10], "x": 204, "y": 64, "flags": 4}, + {"matrix": [3, 9], "x": 183, "y": 64, "flags": 4}, + {"matrix": [3, 6], "x": 135, "y": 64, "flags": 4}, + {"matrix": [3, 3], "x": 84, "y": 64, "flags": 4}, + {"matrix": [3, 2], "x": 48, "y": 64, "flags": 4}, + {"matrix": [3, 1], "x": 25, "y": 64, "flags": 4}, + {"matrix": [3, 0], "x": 3, "y": 64, "flags": 4}, + {"matrix": [2, 11], "x": 224, "y": 43, "flags": 4}, + {"matrix": [2, 10], "x": 204, "y": 43, "flags": 4}, + {"matrix": [2, 8], "x": 181, "y": 43, "flags": 4}, + {"matrix": [2, 7], "x": 158, "y": 43, "flags": 1}, + {"matrix": [2, 6], "x": 137, "y": 43, "flags": 1}, + {"matrix": [2, 5], "x": 117, "y": 43, "flags": 1}, + {"matrix": [2, 4], "x": 97, "y": 43, "flags": 1}, + {"matrix": [2, 3], "x": 76, "y": 43, "flags": 1}, + {"matrix": [2, 2], "x": 56, "y": 43, "flags": 1}, + {"matrix": [2, 1], "x": 36, "y": 43, "flags": 1}, + {"matrix": [2, 0], "x": 8, "y": 43, "flags": 4}, + {"matrix": [1, 11], "x": 216, "y": 21, "flags": 4}, + {"matrix": [1, 9], "x": 188, "y": 21, "flags": 1}, + {"matrix": [1, 8], "x": 168, "y": 21, "flags": 1}, + {"matrix": [1, 7], "x": 148, "y": 21, "flags": 1}, + {"matrix": [1, 6], "x": 127, "y": 21, "flags": 1}, + {"matrix": [1, 5], "x": 107, "y": 21, "flags": 1}, + {"matrix": [1, 4], "x": 87, "y": 21, "flags": 1}, + {"matrix": [1, 3], "x": 66, "y": 21, "flags": 1}, + {"matrix": [1, 2], "x": 46, "y": 21, "flags": 1}, + {"matrix": [1, 1], "x": 25, "y": 21, "flags": 1}, + {"matrix": [1, 0], "x": 3, "y": 21, "flags": 4}, + {"matrix": [0, 11], "x": 224, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 204, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 183, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 163, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 143, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 122, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 102, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 81, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 61, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 41, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 20, "y": 0, "flags": 1}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4} + ], "max_brightness": 180, "sleep": true }, diff --git a/keyboards/idobao/id61/id61.c b/keyboards/idobao/id61/id61.c deleted file mode 100644 index bd2271049b..0000000000 --- a/keyboards/idobao/id61/id61.c +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2022 Vino Rodrigues (@vinorodrigues) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "quantum.h" - -#define __ NO_LED - -#if defined(RGB_MATRIX_ENABLE) - -/* Pre-key - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ - * │60 │59 │58 │57 │56 │55 │54 │53 │52 │51 │50 │49 │48 │ 47 │ - * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ - * │ 46 │45 │44 │43 │42 │41 │40 │39 │38 │37 │36 │35 │34 │ 33 │ - * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ - * │ 32 │31 │30 │29 │28 │27 │26 │25 │24 │23 │22 │21 │ 20 │ - * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ - * │ 19 │18 │17 │16 │15 │14 │13 │12 │11 │10 │ 9 │ 8 │ - * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ - * │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │ - * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ - * - * Underglow (from top / [Esc] = top left) - * ┌────┬────┬────┬────┬────┐ - * │ 61 │ 62 │ 63 │ 64 │ 65 │ - * ├────┴────┴────┴────┴────┤ - * ├────┬────┬────┬────┬────┤ - * │ 70 │ 69 │ 68 │ 67 │ 66 │ - * └────┴────┴────┴────┴────┘ - */ - -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47 }, - { 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33 }, - { 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, __ }, - { 19, __, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, __ }, - { 7, 6, 5, __, __, __, 4, __, __, __, 3, 2, 1, 0 }, -}, { - // LED Index to Physical Position - // generated from: https://xelus.netlify.app/guides/KLE_to_RGB_parser - /* NB: Reverse order! */ - {224,64 }, {204,64 }, {184,64 }, {163,64 }, {103,64 }, { 42,64 }, { 22,64 }, { 2,64 }, - {212,48 }, {182,48 }, {165,48 }, {149,48 }, {133,48 }, {117,48 }, {101,48 }, { 85,48 }, { 69,48 }, { 52,48 }, { 36,48 }, { 10,48 }, - {216,32 }, {190,32 }, {174,32 }, {157,32 }, {141,32 }, {125,32 }, {109,32 }, { 93,32 }, { 77,32 }, { 61,32 }, { 44,32 }, { 28,32 }, { 6,32 }, - {222,16 }, {202,16 }, {186,16 }, {170,16 }, {153,16 }, {137,16 }, {121,16 }, {105,16 }, { 89,16 }, { 73,16 }, { 57,16 }, { 40,16 }, { 24,16 }, { 4,16 }, - {218,0 }, {194,0 }, {178,0 }, {161,0 }, {145,0 }, {129,0 }, {113,0 }, { 97,0 }, { 81,0 }, { 65,0 }, { 48,0 }, { 32,0 }, { 16,0 }, { 0,0 } - // underglow LEDs (positions pushed to nearest edge to match edge key colors) - #ifndef ID61_DISABLE_UNDERGLOW - , { 0,0 }, { 56,0 }, { 112,0 }, {168,0 }, {224,0 }, - {224,64 }, {168,64 }, {112,64 }, { 56,64 }, { 0,64 } - #endif -}, { - // LED Index to Flag - /* NB: Reverse order! */ - 1, 1, 1, 1, 4, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 - // underglow LEDs - #ifndef ID61_DISABLE_UNDERGLOW - , 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2 - #endif -} }; - -#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/idobao/id61/keyboard.json b/keyboards/idobao/id61/keyboard.json index d3bf62c726..af0c29788d 100644 --- a/keyboards/idobao/id61/keyboard.json +++ b/keyboards/idobao/id61/keyboard.json @@ -56,6 +56,79 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 204, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 184, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 163, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 103, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [3, 12], "x": 212, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 182, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 165, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 149, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 133, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 117, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 101, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 85, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 69, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 10, "y": 48, "flags": 1}, + {"matrix": [2, 12], "x": 216, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 190, "y": 32, "flags": 1}, + {"matrix": [2, 10], "x": 174, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 157, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 141, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 125, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 109, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 93, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 77, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 61, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 9}, + {"matrix": [1, 13], "x": 222, "y": 16, "flags": 1}, + {"matrix": [1, 12], "x": 202, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 186, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 170, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 153, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 137, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 121, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 105, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 89, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 73, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 57, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [0, 13], "x": 218, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 194, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 178, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 161, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 145, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 129, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 113, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 97, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 81, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 65, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 56, "y": 0, "flags": 2}, + {"x": 112, "y": 0, "flags": 2}, + {"x": 168, "y": 0, "flags": 2}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 168, "y": 64, "flags": 2}, + {"x": 112, "y": 64, "flags": 2}, + {"x": 56, "y": 64, "flags": 2}, + {"x": 0, "y": 64, "flags": 2} + ], "max_brightness": 170, "sleep": true }, diff --git a/keyboards/idobao/id63/id63.c b/keyboards/idobao/id63/id63.c deleted file mode 100644 index f425eb4fe4..0000000000 --- a/keyboards/idobao/id63/id63.c +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2022 Vino Rodrigues (@vinorodrigues) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "quantum.h" - -#define __ NO_LED - -#ifdef RGB_MATRIX_ENABLE - -/* Pre-key LED addresses - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ - * │62 │61 │60 │59 │58 │57 │56 │55 │54 │53 │52 │51 │50 │ 49 │ - * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ - * │ 48 │47 │46 │45 │44 │43 │42 │41 │40 │39 │38 │37 │36 │ 35 │ - * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ - * │ 34 │33 │32 │31 │30 │29 │28 │27 │26 │25 │24 │23 │ 22 │ - * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤ - * │ 21 │20 │19 │18 │17 │16 │15 │14 │13 │12 │ 11 │10 │ 9 │ - * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬───┼───┼───┤ - * │ 8 │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │ - * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘ - * - * Underglow LED addresses (as seen from top / [Esc] = top left) - * ┌────┬────┬────┬────┬────┬────┐ - * │ 63 │ 64 │ 65 │ 66 │ 67 │ 68 │ - * ├────┴────┴────┴────┴────┴────┤ - * ├────┬────┬────┬────┬────┬────┤ - * │ 74 │ 73 │ 72 │ 71 │ 70 │ 69 │ - * └────┴────┴────┴────┴────┴────┘ - */ - -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49 }, - { 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35 }, - { 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, __, 22 }, - { 21, __, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9 }, - { 8, 7, __, 6, __, __, 5, __, __, 4, 3, 2, 1, 0 }, -}, { - // LED Index to Physical Position - // generated from: https://xelus.netlify.app/guides/KLE_to_RGB_parser - /* NB: Reverse & upside-down order! */ - {224,64 }, {208,64 }, {192,64 }, {176,64 }, {160,64 }, {102,64 }, { 42,64 }, { 22,64 }, { 2,64 }, - {224,48 }, {208,48 }, {186,48 }, {164,48 }, {148,48 }, {132,48 }, {116,48 }, {100,48 }, { 84,48 }, { 68,48 }, { 52,48 }, { 36,48 }, { 10,48 }, - {214,32 }, {188,32 }, {172,32 }, {156,32 }, {140,32 }, {124,32 }, {108,32 }, { 92,32 }, { 76,32 }, { 60,32 }, { 44,32 }, { 28,32 }, { 6,32 }, - {220,16 }, {200,16 }, {184,16 }, {168,16 }, {152,16 }, {136,16 }, {120,16 }, {104,16 }, { 88,16 }, { 72,16 }, { 56,16 }, { 40,16 }, { 24,16 }, { 4,16 }, - {216,0 }, {192,0 }, {176,0 }, {160,0 }, {144,0 }, {128,0 }, {112,0 }, { 96,0 }, { 80,0 }, { 64,0 }, { 48,0 }, { 32,0 }, { 16,0 }, { 0,0 } - // underglow LEDs (positions pushed to nearest edge to match edge key colors) - #ifndef ID63_DISABLE_UNDERGLOW - , { 0,0 }, { 45,0 }, { 90,0 }, {134,0 }, {179,0 }, {224,0 }, - {224,64 }, {179,64 }, {134,64 }, { 90,64 }, { 45,64 }, { 0,64 } - #endif -}, { - // LED Index to Flag - /* NB: Reverse & upside-down order! */ - 4, 4, 4, 1, 1, 4, 1, 1, 1, - 1, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 - // underglow LEDs - #ifndef ID63_DISABLE_UNDERGLOW - , 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2 - #endif -} }; - -#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/idobao/id63/keyboard.json b/keyboards/idobao/id63/keyboard.json index 141c1263d1..bfe0ac7cbe 100644 --- a/keyboards/idobao/id63/keyboard.json +++ b/keyboards/idobao/id63/keyboard.json @@ -56,6 +56,83 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 208, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 192, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 176, "y": 64, "flags": 1}, + {"matrix": [4, 9], "x": 160, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 102, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 208, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 186, "y": 48, "flags": 1}, + {"matrix": [3, 10], "x": 164, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 148, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 132, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 116, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 100, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 84, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 68, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 10, "y": 48, "flags": 1}, + {"matrix": [2, 13], "x": 214, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 188, "y": 32, "flags": 1}, + {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 156, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 140, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 124, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 9}, + {"matrix": [1, 13], "x": 220, "y": 16, "flags": 1}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 184, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 104, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 88, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [0, 13], "x": 216, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 1}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 45, "y": 0, "flags": 2}, + {"x": 90, "y": 0, "flags": 2}, + {"x": 134, "y": 0, "flags": 2}, + {"x": 179, "y": 0, "flags": 2}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 179, "y": 64, "flags": 2}, + {"x": 134, "y": 64, "flags": 2}, + {"x": 90, "y": 64, "flags": 2}, + {"x": 45, "y": 64, "flags": 2}, + {"x": 0, "y": 64, "flags": 2} + ], "max_brightness": 180, "sleep": true }, diff --git a/keyboards/idobao/id67/id67.c b/keyboards/idobao/id67/id67.c deleted file mode 100644 index dab6347eb3..0000000000 --- a/keyboards/idobao/id67/id67.c +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2021 Tybera (@tybera) -// Copyright 2021 Werther (@thewerther) -// Copyright 2022 Vino Rodrigues (@vinorodrigues) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "quantum.h" - -#define __ NO_LED - -#if defined(RGB_MATRIX_ENABLE) - -/* NB!!: Indices are reversed on the physical board, top left is bottom right. - * These "LED Index to *" arrays are in that reversed order! - * i.e., Space row on top, listed right to left */ -led_config_t g_led_config = { { - /* Under- / Per-Key - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐ - * │66 │65 │64 │63 │62 │61 │60 │59 │58 │57 │56 │55 │54 │ 53 │52 │ - * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ - * │ 51 │50 │49 │48 │47 │46 │45 │44 │43 │42 │41 │40 │39 │ 38 │37 │ - * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ - * │ 36 │35 │34 │33 │32 │31 │30 │29 │28 │27 │26 │25 │ 24 │23 │ - * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ - * │ 22 │21 │20 │19 │18 │17 │16 │15 │14 │13 │12 │ 11 │10 │ 9 │ - * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤ - * │ 8 │ 7 │ 6 │ 5 │ 4 │ 3 │ │ 2 │ 1 │ 0 │ - * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘ - * - * Bottom Side (as seen from top orientation) - * 67 68 69 70 71 - * 76 75 74 73 72 - */ - // Key Matrix to LED Index - {66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52}, - {51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37}, - {36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, __, 24, 23}, - {22, __, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9}, - { 8, 7, __, 6, __, __, 5, __, __, __, 4, 3, 2, 1, 0}, -}, { - // LED Index to Physical Position - // based on: https://gist.github.com/vinorodrigues/07fd735683856b2a06c7c52b9b3878cb - // **NB: In reverse order** - {224,64 }, {209,64 }, {194,64 }, {170,64 }, {151,64 }, { 95,64 }, { 39,64 }, { 21,64 }, { 2,64 }, - {224,48 }, {209,48 }, {189,48 }, {168,48 }, {153,48 }, {138,48 }, {123,48 }, {108,48 }, { 93,48 }, { 78,48 }, { 63,48 }, { 49,48 }, { 34,48 }, { 9,48 }, - {224,32 }, {200,32 }, {175,32 }, {161,32 }, {146,32 }, {131,32 }, {116,32 }, {101,32 }, { 86,32 }, { 71,32 }, { 56,32 }, { 41,32 }, { 26,32 }, { 6,32 }, - {224,16 }, {205,16 }, {187,16 }, {172,16 }, {157,16 }, {142,16 }, {127,16 }, {112,16 }, { 97,16 }, { 82,16 }, { 67,16 }, { 52,16 }, { 37,16 }, { 22,16 }, { 4,16 }, - {224,0 }, {202,0 }, {179,0 }, {164,0 }, {149,0 }, {134,0 }, {119,0 }, {105,0 }, { 90,0 }, { 75,0 }, { 60,0 }, { 45,0 }, { 30,0 }, { 15,0 }, { 0,0 } - // underglow LEDs - #ifndef ID67_DISABLE_UNDERGLOW - , {0, 0}, {56, 0}, {112, 0}, {168, 0}, {224, 0}, - {224, 64}, {168, 64}, {112, 64}, {56, 64}, {0, 64} - #endif -}, { - // LED Index to Flag - // **NB: In reverse order** - 1, 1, 1, 1, 1, 4, 1, 1, 1, // fifth/bottom row - 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, // fourth row - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, // third row - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, // second row - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1 // first/top row - // underglow LEDs - #ifndef ID67_DISABLE_UNDERGLOW - , 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2 - #endif -} }; - -#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/idobao/id67/keyboard.json b/keyboards/idobao/id67/keyboard.json index 786ed39be0..025b965050 100644 --- a/keyboards/idobao/id67/keyboard.json +++ b/keyboards/idobao/id67/keyboard.json @@ -56,6 +56,85 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 209, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 194, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 170, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 151, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 95, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 209, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 189, "y": 48, "flags": 1}, + {"matrix": [3, 11], "x": 168, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 153, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 138, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 123, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 108, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 93, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 78, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 63, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [2, 13], "x": 200, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 175, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 9}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [1, 13], "x": 205, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 179, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 164, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 149, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 134, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 119, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 56, "y": 0, "flags": 2}, + {"x": 112, "y": 0, "flags": 2}, + {"x": 168, "y": 0, "flags": 2}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 168, "y": 64, "flags": 2}, + {"x": 112, "y": 64, "flags": 2}, + {"x": 56, "y": 64, "flags": 2}, + {"x": 0, "y": 64, "flags": 2} + ], "max_brightness": 180, "sleep": true }, diff --git a/keyboards/idobao/id75/v2/keyboard.json b/keyboards/idobao/id75/v2/keyboard.json index 743c7cf404..068c01a785 100644 --- a/keyboards/idobao/id75/v2/keyboard.json +++ b/keyboards/idobao/id75/v2/keyboard.json @@ -44,7 +44,94 @@ "solid_splash": true, "solid_multisplash": true }, - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"x": 8, "y": 12, "flags": 2}, + {"x": 60, "y": 12, "flags": 2}, + {"x": 112, "y": 12, "flags": 2}, + {"x": 164, "y": 12, "flags": 2}, + {"x": 216, "y": 12, "flags": 2}, + {"x": 216, "y": 60, "flags": 2}, + {"x": 164, "y": 60, "flags": 2}, + {"x": 112, "y": 60, "flags": 2}, + {"x": 60, "y": 60, "flags": 2}, + {"x": 8, "y": 60, "flags": 2}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 208, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 192, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 176, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 160, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 144, "y": 64, "flags": 4}, + {"matrix": [4, 8], "x": 128, "y": 64, "flags": 4}, + {"matrix": [4, 7], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 6], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 80, "y": 64, "flags": 4}, + {"matrix": [4, 4], "x": 64, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 48, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 32, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 16, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 208, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 192, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 16, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 208, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 192, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 208, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4} + ] }, "build": { "lto": true diff --git a/keyboards/idobao/id75/v2/v2.c b/keyboards/idobao/id75/v2/v2.c deleted file mode 100644 index 55d58d92e1..0000000000 --- a/keyboards/idobao/id75/v2/v2.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright 2022 peepeetee - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index -{ 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70 }, -{ 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55 }, -{ 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40 }, -{ 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25 }, -{ 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10 } -}, { - // LED Index to Physical Position -{8, 12},{60, 12},{112, 12},{164, 12},{216, 12}, -{216, 60},{164, 60},{112, 60},{60, 60},{8, 60}, - - -{224, 64}, {208, 64}, {192, 64}, {176, 64}, {160, 64}, {144, 64}, {128, 64}, {112, 64}, {96, 64}, {80, 64}, {64, 64}, {48, 64}, {32, 64}, {16, 64}, {0, 64}, -{224, 48}, {208, 48}, {192, 48}, {176, 48}, {160, 48}, {144, 48}, {128, 48}, {112, 48}, {96, 48}, {80, 48}, {64, 48}, {48, 48}, {32, 48}, {16, 48}, {0, 48}, -{224, 32}, {208, 32}, {192, 32}, {176, 32}, {160, 32}, {144, 32}, {128, 32}, {112, 32}, {96, 32}, {80, 32}, {64, 32}, {48, 32}, {32, 32}, {16, 32}, {0, 32}, -{224, 16}, {208, 16}, {192, 16}, {176, 16}, {160, 16}, {144, 16}, {128, 16}, {112, 16}, {96, 16}, {80, 16}, {64, 16}, {48, 16}, {32, 16}, {16, 16}, {0, 16}, -{224, 0}, {208, 0}, {192, 0}, {176, 0}, {160, 0}, {144, 0}, {128, 0}, {112, 0}, {96, 0}, {80, 0}, {64, 0}, {48, 0}, {32, 0}, {16, 0}, {0, 0}, - -}, { - // LED Index to Flag -2,2,2,2,2,2,2,2,2,2, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, - -} }; - -#endif diff --git a/keyboards/idobao/id80/v3/ansi/ansi.c b/keyboards/idobao/id80/v3/ansi/ansi.c deleted file mode 100644 index 75f995fbbe..0000000000 --- a/keyboards/idobao/id80/v3/ansi/ansi.c +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2022 Vino Rodrigues (@vinorodrigues) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "quantum.h" - -#define __ NO_LED - -#ifdef RGB_MATRIX_ENABLE - -/* Per-key LED's - * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┐ - * │79 ││78 │77 │76 │75 ││74 │73 │72 │71 ││70 │69 │68 │67 ││66 ││65 │ - * ├───┼┴──┬┴──┬┴──┬┴──┬┴┴─┬─┴─┬─┴─┬─┴─┬─┴┴┬──┴┬──┴┬──┴┬──┴┴───┤├───┤ - * │64 │63 │62 │61 │60 │59 │58 │57 │56 │55 │54 │53 │52 │ 51 ││50 │ - * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┤ - * │ 49 │48 │47 │46 │45 │44 │43 │42 │41 │40 │39 │38 │37 │ 36 ││35 │ - * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┘ - * │ 34 │33 │32 │31 │30 │29 │28 │27 │26 │25 │24 │23 │ 22 │ - * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┘ - * │ 21 │20 │19 │18 │17 │16 │15 │14 │13 │12 │11 │ 10 │┌───┐ - * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┘│ 9 │ - * │ 8 │ 7 │ 6 │ 5 │ 4 │ 3 │┌───┼───┼───┐ - * └────┴────┴────┴────────────────────────┴─────┴─────┘│ 2 │ 1 │ 0 │ - * └───┴───┴───┘ - * Underglow (as seen from top) - * ┌────┬────┬────┬────┬────┬────┐ - * │ 80 │ 81 │ 82 │ 83 │ 84 │ 85 │ - * ├────┼────┴────┴────┴────┼────┤ - * │ 93 │ │ 86 │ - * ├────┼────┬────┬────┬────┼────┤ - * │ 92 │ 91 │ 90 │ 89 │ 88 │ 87 │ - * └────┴────┴────┴────┴────┴────┘ - */ - -led_config_t g_led_config = { { - // Key Matrix to LED Index - /* Generated with: https://xelus.netlify.app/guides/KLE_to_RGB_parser */ - { 8, 21, 34, 49, 64, 79, __, __, __, __, __ }, - { 7, __, 33, 48, 63, 78, __, __, __, __, __ }, - { 6, 20, 32, 47, 62, 77, __, __, 35, 50, 65 }, - { 0, 19, 31, 46, 61, 76, 9, __, 36, __, 67 }, - { 1, 18, 30, 45, 60, 75, 10, 22, 37, 52, 68 }, - { 2, 17, 29, 44, 59, 74, 11, 23, 38, 53, 69 }, - { 5, 16, 28, 43, 58, 73, __, __, __, 51, 66 }, - { 3, 15, 27, 42, 57, 72, 12, 24, 39, 54, 70 }, - { 4, 14, 26, 41, 56, 71, 13, 25, 40, 55, __ }, -}, { - /* NB: Reversed order */ - // per-key - {224,64 }, {209,64 }, {195,64 }, {173,61 }, {151,61 }, { 94,61 }, { 39,61 }, { 20,61 }, { 2,61 }, - {209,52 }, {185,49 }, {165,49 }, {151,49 }, {136,49 }, {121,49 }, {106,49 }, { 92,49 }, { 77,49 }, { 62,49 }, { 48,49 }, { 33,49 }, { 9,49 }, - {196,38 }, {173,38 }, {158,38 }, {143,38 }, {129,38 }, {114,38 }, { 99,38 }, { 84,38 }, { 70,38 }, { 55,38 }, { 40,38 }, { 26,38 }, { 6,38 }, - {224,26 }, {202,26 }, {184,26 }, {169,26 }, {154,26 }, {140,26 }, {125,26 }, {110,26 }, { 95,26 }, { 81,26 }, { 66,26 }, { 51,26 }, { 37,26 }, { 22,26 }, { 4,26 }, - {224,15 }, {198,15 }, {176,15 }, {162,15 }, {147,15 }, {132,15 }, {118,15 }, {103,15 }, { 88,15 }, { 73,15 }, { 59,15 }, { 44,15 }, { 29,15 }, { 15,15 }, { 0,15 }, - {224,0 }, {206,0 }, {187,0 }, {173,0 }, {158,0 }, {143,0 }, {125,0 }, {110,0 }, { 95,0 }, { 81,0 }, { 62,0 }, { 48,0 }, { 33,0 }, { 18,0 }, { 0,0 }, - // underglow - { 0,0 }, { 45,0 }, { 90,0 }, {134,0 }, {179,0 }, {224,0 }, - {224,32 }, - {224,64 }, {179,64 }, {134,64 }, { 90,64 }, { 45,64 }, { 0,64 }, - { 0,32 } -}, { - /* NB: Reversed order */ - 4, 4, 4, 4, 4, 1, 4, 4, 4, - 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, - 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, - 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, - 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - // - 2, 2, 2, 2, 2, 2, - 2, - 2, 2, 2, 2, 2, 2, - 2 -} }; - -#endif diff --git a/keyboards/idobao/id80/v3/ansi/keyboard.json b/keyboards/idobao/id80/v3/ansi/keyboard.json index 0ab369fb5d..a366289a1f 100644 --- a/keyboards/idobao/id80/v3/ansi/keyboard.json +++ b/keyboards/idobao/id80/v3/ansi/keyboard.json @@ -53,6 +53,102 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [3, 0], "x": 224, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 209, "y": 64, "flags": 4}, + {"matrix": [5, 0], "x": 195, "y": 64, "flags": 4}, + {"matrix": [7, 0], "x": 173, "y": 61, "flags": 4}, + {"matrix": [8, 0], "x": 151, "y": 61, "flags": 4}, + {"matrix": [6, 0], "x": 94, "y": 61, "flags": 1}, + {"matrix": [2, 0], "x": 39, "y": 61, "flags": 4}, + {"matrix": [1, 0], "x": 20, "y": 61, "flags": 4}, + {"matrix": [0, 0], "x": 2, "y": 61, "flags": 4}, + {"matrix": [3, 6], "x": 209, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 185, "y": 49, "flags": 4}, + {"matrix": [5, 6], "x": 165, "y": 49, "flags": 1}, + {"matrix": [7, 6], "x": 151, "y": 49, "flags": 1}, + {"matrix": [8, 6], "x": 136, "y": 49, "flags": 1}, + {"matrix": [8, 1], "x": 121, "y": 49, "flags": 1}, + {"matrix": [7, 1], "x": 106, "y": 49, "flags": 1}, + {"matrix": [6, 1], "x": 92, "y": 49, "flags": 1}, + {"matrix": [5, 1], "x": 77, "y": 49, "flags": 1}, + {"matrix": [4, 1], "x": 62, "y": 49, "flags": 1}, + {"matrix": [3, 1], "x": 48, "y": 49, "flags": 1}, + {"matrix": [2, 1], "x": 33, "y": 49, "flags": 1}, + {"matrix": [0, 1], "x": 9, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 196, "y": 38, "flags": 4}, + {"matrix": [5, 7], "x": 173, "y": 38, "flags": 1}, + {"matrix": [7, 7], "x": 158, "y": 38, "flags": 1}, + {"matrix": [8, 7], "x": 143, "y": 38, "flags": 1}, + {"matrix": [8, 2], "x": 129, "y": 38, "flags": 1}, + {"matrix": [7, 2], "x": 114, "y": 38, "flags": 1}, + {"matrix": [6, 2], "x": 99, "y": 38, "flags": 1}, + {"matrix": [5, 2], "x": 84, "y": 38, "flags": 1}, + {"matrix": [4, 2], "x": 70, "y": 38, "flags": 1}, + {"matrix": [3, 2], "x": 55, "y": 38, "flags": 1}, + {"matrix": [2, 2], "x": 40, "y": 38, "flags": 1}, + {"matrix": [1, 2], "x": 26, "y": 38, "flags": 1}, + {"matrix": [0, 2], "x": 6, "y": 38, "flags": 4}, + {"matrix": [2, 8], "x": 224, "y": 26, "flags": 4}, + {"matrix": [3, 8], "x": 202, "y": 26, "flags": 1}, + {"matrix": [4, 8], "x": 184, "y": 26, "flags": 1}, + {"matrix": [5, 8], "x": 169, "y": 26, "flags": 1}, + {"matrix": [7, 8], "x": 154, "y": 26, "flags": 1}, + {"matrix": [8, 8], "x": 140, "y": 26, "flags": 1}, + {"matrix": [8, 3], "x": 125, "y": 26, "flags": 1}, + {"matrix": [7, 3], "x": 110, "y": 26, "flags": 1}, + {"matrix": [6, 3], "x": 95, "y": 26, "flags": 1}, + {"matrix": [5, 3], "x": 81, "y": 26, "flags": 1}, + {"matrix": [4, 3], "x": 66, "y": 26, "flags": 1}, + {"matrix": [3, 3], "x": 51, "y": 26, "flags": 1}, + {"matrix": [2, 3], "x": 37, "y": 26, "flags": 1}, + {"matrix": [1, 3], "x": 22, "y": 26, "flags": 1}, + {"matrix": [0, 3], "x": 4, "y": 26, "flags": 4}, + {"matrix": [2, 9], "x": 224, "y": 15, "flags": 4}, + {"matrix": [6, 9], "x": 198, "y": 15, "flags": 4}, + {"matrix": [4, 9], "x": 176, "y": 15, "flags": 1}, + {"matrix": [5, 9], "x": 162, "y": 15, "flags": 1}, + {"matrix": [7, 9], "x": 147, "y": 15, "flags": 1}, + {"matrix": [8, 9], "x": 132, "y": 15, "flags": 1}, + {"matrix": [8, 4], "x": 118, "y": 15, "flags": 1}, + {"matrix": [7, 4], "x": 103, "y": 15, "flags": 1}, + {"matrix": [6, 4], "x": 88, "y": 15, "flags": 1}, + {"matrix": [5, 4], "x": 73, "y": 15, "flags": 1}, + {"matrix": [4, 4], "x": 59, "y": 15, "flags": 1}, + {"matrix": [3, 4], "x": 44, "y": 15, "flags": 1}, + {"matrix": [2, 4], "x": 29, "y": 15, "flags": 1}, + {"matrix": [1, 4], "x": 15, "y": 15, "flags": 1}, + {"matrix": [0, 4], "x": 0, "y": 15, "flags": 1}, + {"matrix": [2, 10], "x": 224, "y": 0, "flags": 4}, + {"matrix": [6, 10], "x": 206, "y": 0, "flags": 4}, + {"matrix": [3, 10], "x": 187, "y": 0, "flags": 4}, + {"matrix": [4, 10], "x": 173, "y": 0, "flags": 4}, + {"matrix": [5, 10], "x": 158, "y": 0, "flags": 4}, + {"matrix": [7, 10], "x": 143, "y": 0, "flags": 4}, + {"matrix": [8, 5], "x": 125, "y": 0, "flags": 4}, + {"matrix": [7, 5], "x": 110, "y": 0, "flags": 4}, + {"matrix": [6, 5], "x": 95, "y": 0, "flags": 4}, + {"matrix": [5, 5], "x": 81, "y": 0, "flags": 4}, + {"matrix": [4, 5], "x": 62, "y": 0, "flags": 4}, + {"matrix": [3, 5], "x": 48, "y": 0, "flags": 4}, + {"matrix": [2, 5], "x": 33, "y": 0, "flags": 4}, + {"matrix": [1, 5], "x": 18, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 0, "y": 0, "flags": 4}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 45, "y": 0, "flags": 2}, + {"x": 90, "y": 0, "flags": 2}, + {"x": 134, "y": 0, "flags": 2}, + {"x": 179, "y": 0, "flags": 2}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 224, "y": 32, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 179, "y": 64, "flags": 2}, + {"x": 134, "y": 64, "flags": 2}, + {"x": 90, "y": 64, "flags": 2}, + {"x": 45, "y": 64, "flags": 2}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 0, "y": 32, "flags": 2} + ], "max_brightness": 180, "sleep": true }, diff --git a/keyboards/idobao/id87/v2/keyboard.json b/keyboards/idobao/id87/v2/keyboard.json index ad6641f954..1b7d428dda 100644 --- a/keyboards/idobao/id87/v2/keyboard.json +++ b/keyboards/idobao/id87/v2/keyboard.json @@ -56,6 +56,111 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"x": 0, "y": 64, "flags": 2}, + {"x": 37, "y": 64, "flags": 2}, + {"x": 75, "y": 64, "flags": 2}, + {"x": 112, "y": 64, "flags": 2}, + {"x": 149, "y": 64, "flags": 2}, + {"x": 187, "y": 64, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 224, "y": 32, "flags": 2}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 187, "y": 0, "flags": 2}, + {"x": 149, "y": 0, "flags": 2}, + {"x": 112, "y": 0, "flags": 2}, + {"x": 75, "y": 0, "flags": 2}, + {"x": 37, "y": 0, "flags": 2}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 0, "y": 32, "flags": 2}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 18, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 34, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 83, "y": 64, "flags": 4}, + {"matrix": [5, 8], "x": 131, "y": 64, "flags": 1}, + {"matrix": [5, 7], "x": 148, "y": 64, "flags": 1}, + {"matrix": [5, 4], "x": 164, "y": 64, "flags": 1}, + {"matrix": [5, 3], "x": 180, "y": 64, "flags": 1}, + {"matrix": [10, 6], "x": 198, "y": 64, "flags": 1}, + {"matrix": [10, 2], "x": 211, "y": 64, "flags": 1}, + {"matrix": [10, 1], "x": 224, "y": 64, "flags": 1}, + {"matrix": [9, 2], "x": 211, "y": 52, "flags": 1}, + {"matrix": [10, 4], "x": 170, "y": 52, "flags": 1}, + {"matrix": [10, 5], "x": 146, "y": 52, "flags": 4}, + {"matrix": [10, 7], "x": 133, "y": 52, "flags": 4}, + {"matrix": [10, 8], "x": 120, "y": 52, "flags": 4}, + {"matrix": [4, 8], "x": 107, "y": 52, "flags": 4}, + {"matrix": [4, 7], "x": 94, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 81, "y": 52, "flags": 4}, + {"matrix": [4, 5], "x": 68, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 55, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 29, "y": 52, "flags": 4}, + {"matrix": [4, 0], "x": 8, "y": 52, "flags": 1}, + {"matrix": [3, 0], "x": 5, "y": 40, "flags": 1}, + {"matrix": [3, 1], "x": 23, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 114, "y": 40, "flags": 4}, + {"matrix": [9, 8], "x": 127, "y": 40, "flags": 4}, + {"matrix": [9, 7], "x": 140, "y": 40, "flags": 4}, + {"matrix": [9, 5], "x": 153, "y": 40, "flags": 4}, + {"matrix": [9, 3], "x": 174, "y": 40, "flags": 1}, + {"matrix": [8, 1], "x": 224, "y": 27, "flags": 1}, + {"matrix": [8, 2], "x": 211, "y": 27, "flags": 1}, + {"matrix": [8, 6], "x": 198, "y": 27, "flags": 1}, + {"matrix": [8, 3], "x": 179, "y": 27, "flags": 4}, + {"matrix": [8, 4], "x": 162, "y": 27, "flags": 4}, + {"matrix": [8, 5], "x": 149, "y": 27, "flags": 4}, + {"matrix": [8, 7], "x": 136, "y": 27, "flags": 4}, + {"matrix": [8, 8], "x": 123, "y": 27, "flags": 4}, + {"matrix": [2, 8], "x": 110, "y": 27, "flags": 4}, + {"matrix": [2, 7], "x": 97, "y": 27, "flags": 4}, + {"matrix": [2, 6], "x": 84, "y": 27, "flags": 4}, + {"matrix": [2, 5], "x": 71, "y": 27, "flags": 4}, + {"matrix": [2, 4], "x": 58, "y": 27, "flags": 4}, + {"matrix": [2, 3], "x": 45, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 27, "flags": 4}, + {"matrix": [2, 1], "x": 19, "y": 27, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 27, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 13, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 26, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 39, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 65, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 78, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 91, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 104, "y": 15, "flags": 4}, + {"matrix": [7, 8], "x": 117, "y": 15, "flags": 4}, + {"matrix": [7, 0], "x": 130, "y": 15, "flags": 4}, + {"matrix": [7, 7], "x": 143, "y": 15, "flags": 4}, + {"matrix": [7, 5], "x": 156, "y": 15, "flags": 4}, + {"matrix": [7, 3], "x": 175, "y": 15, "flags": 1}, + {"matrix": [7, 6], "x": 198, "y": 15, "flags": 1}, + {"matrix": [7, 2], "x": 211, "y": 15, "flags": 1}, + {"matrix": [7, 1], "x": 224, "y": 15, "flags": 1}, + {"matrix": [6, 1], "x": 224, "y": 0, "flags": 1}, + {"matrix": [6, 2], "x": 211, "y": 0, "flags": 1}, + {"matrix": [6, 6], "x": 198, "y": 0, "flags": 1}, + {"matrix": [6, 3], "x": 182, "y": 0, "flags": 1}, + {"matrix": [6, 4], "x": 169, "y": 0, "flags": 1}, + {"matrix": [6, 5], "x": 156, "y": 0, "flags": 1}, + {"matrix": [6, 7], "x": 143, "y": 0, "flags": 1}, + {"matrix": [6, 8], "x": 123, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 110, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 97, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 84, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 65, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 52, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 39, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 26, "y": 0, "flags": 1}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1} + ], "max_brightness": 180, "sleep": true }, diff --git a/keyboards/idobao/id87/v2/v2.c b/keyboards/idobao/id87/v2/v2.c deleted file mode 100644 index 7992fb6295..0000000000 --- a/keyboards/idobao/id87/v2/v2.c +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2022 vinorodrigues (@vinorodrigues) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "quantum.h" - -#define __ NO_LED - -#if defined(RGB_MATRIX_ENABLE) - -/* Under-, Per-Key - * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ - * │102│ │101│100│99 │98 │ │97 │96 │95 │94 │ │93 │92 │91 │90 │ │89 │88 │87 │ - * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ - * │70 │71 │72 │73 │74 │75 │76 │77 │78 │79 │80 │81 │82 │ 83 │ │84 │85 │86 │ - * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ - * │ 69 │68 │67 │66 │65 │64 │63 │62 │61 │60 │59 │58 │57 │ 56 │ │55 │54 │53 │ - * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ - * │ 40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │50 │51 │ 52 │ - * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ - * │ 39 │38 │37 │36 │35 │34 │33 │32 │31 │30 │29 │ 28 │ │27 │ - * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ - * │ 16 │ 17 │ 18 │ 19 │ 20 │ 21 │ 22 │ 23 │ │24 │25 │26 │ - * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ - * - * Underglow (as seen from top) - * ┌───┬───┬───┬───┬───┬───┬───┐ - * │14 │13 │12 │11 │10 │ 9 │ 8 │ - * ├───┼───┴───┴───┴───┴───┼───┤ - * │15 │ │ 7 │ - * ├───┼───┬───┬───┬───┬───┼───┤ - * │ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ - * └───┴───┴───┴───┴───┴───┴───┘ -*/ -led_config_t g_led_config = { { - // Key Matrix to LED Index - // partially generated from: https://xelus.netlify.app/guides/KLE_to_RGB_parser & CSV Excel formula - - { 102, __, 101, 100, 99, 98, 97, 96, 95 }, - { 70, 71, 72, 73, 74, 75, 76, 77, 78 }, - { 69, 68, 67, 66, 65, 64, 63, 62, 61 }, - { 40, 41, 42, 43, 44, 45, 46, 47, 48 }, - { 39, __, 38, 37, 36, 35, 34, 33, 32 }, - { 16, 17, 18, 23, 22, __, 19, 21, 20 }, - { __, 87, 88, 90, 91, 92, 89, 93, 94 }, - { 80, 86, 85, 83, __, 82, 84, 81, 79 }, - { __, 53, 54, 56, 57, 58, 55, 59, 60 }, - { __, __, 27, 52, __, 51, __, 50, 49 }, - { __, 26, 25, __, 28, 29, 24, 30, 31 } -}, { - // LED Index to Physical Position - // generated from: https://xelus.netlify.app/guides/KLE_to_RGB_parser - // underglow - /* colors are pushed to the edge as only the edges can be seen */ - { 0,64 }, { 37,64 }, { 75,64 }, {112,64 }, {149,64 }, {187,64 }, {224,64 }, - {224,32 }, - {224,0 }, {187,0 }, {149,0 }, {112,0 }, { 75,0 }, { 37,0 }, { 0,0 }, - { 0,32 }, - // under-, per-key - /* pattern is complex; starts at btm-lft, zig-zags up, and ends top-lft */ - { 2,64 }, { 18,64 }, { 34,64 }, { 83,64 }, {131,64 }, {148,64 }, {164,64 }, {180,64 }, {198,64 }, {211,64 }, {224,64 }, // lf-2-rt, btm - {211,52 }, {170,52 }, {146,52 }, {133,52 }, {120,52 }, {107,52 }, { 94,52 }, { 81,52 }, { 68,52 }, { 55,52 }, { 42,52 }, { 29,52 }, { 8,52 }, // rt-2-lf** - { 5,40 }, { 23,40 }, { 36,40 }, { 49,40 }, { 62,40 }, { 75,40 }, { 88,40 }, {101,40 }, {114,40 }, {127,40 }, {140,40 }, {153,40 }, {174,40 }, // lf-2-rt - {224,27 }, {211,27 }, {198,27 }, {179,27 }, {162,27 }, {149,27 }, {136,27 }, {123,27 }, {110,27 }, { 97,27 }, { 84,27 }, { 71,27 }, { 58,27 }, { 45,27 }, { 32,27 }, { 19,27 }, { 3,27 }, // rt-2-lf** - { 0,15 }, { 13,15 }, { 26,15 }, { 39,15 }, { 52,15 }, { 65,15 }, { 78,15 }, { 91,15 }, {104,15 }, {117,15 }, {130,15 }, {143,15 }, {156,15 }, {175,15 }, {198,15 }, {211,15 }, {224,15 }, // lf-2-rt - {224,0 }, {211,0 }, {198,0 }, {182,0 }, {169,0 }, {156,0 }, {143,0 }, {123,0 }, {110,0 }, { 97,0 }, { 84,0 }, { 65,0 }, { 52,0 }, { 39,0 }, { 26,0 }, { 0,0 }, // rt-2-lf**, top -}, { - // LED Index to Flag - // underglow - 2, 2, 2, 2, 2, 2, 2, - 2, - 2, 2, 2, 2, 2, 2, 2, - 2, - // under-, per-key - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 -} }; - -#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/idobao/montex/v1rgb/keyboard.json b/keyboards/idobao/montex/v1rgb/keyboard.json index 1c5252bbea..affe87fd1f 100755 --- a/keyboards/idobao/montex/v1rgb/keyboard.json +++ b/keyboards/idobao/montex/v1rgb/keyboard.json @@ -33,6 +33,39 @@ "solid_splash": true }, "driver": "ws2812", + "layout": [ + {"x": 224, "y": 0, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 0, "y": 0, "flags": 2}, + {"matrix": [0, 2], "x": 112, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 56, "y": 0, "flags": 1}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [5, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [5, 1], "x": 84, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 168, "y": 64, "flags": 4}, + {"matrix": [5, 3], "x": 224, "y": 58, "flags": 4}, + {"matrix": [4, 3], "x": 168, "y": 41, "flags": 4}, + {"matrix": [4, 2], "x": 112, "y": 41, "flags": 4}, + {"matrix": [4, 1], "x": 56, "y": 41, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 41, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 29, "flags": 4}, + {"matrix": [3, 1], "x": 56, "y": 29, "flags": 4}, + {"matrix": [3, 2], "x": 112, "y": 29, "flags": 4}, + {"matrix": [3, 3], "x": 168, "y": 29, "flags": 4}, + {"matrix": [2, 4], "x": 224, "y": 35, "flags": 4}, + {"matrix": [2, 3], "x": 168, "y": 29, "flags": 4}, + {"matrix": [2, 2], "x": 112, "y": 29, "flags": 4}, + {"matrix": [2, 1], "x": 56, "y": 29, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 29, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 17, "flags": 4}, + {"matrix": [1, 1], "x": 56, "y": 17, "flags": 4}, + {"matrix": [1, 2], "x": 112, "y": 17, "flags": 4}, + {"matrix": [1, 3], "x": 168, "y": 17, "flags": 4}, + {"matrix": [1, 4], "x": 224, "y": 17, "flags": 4}, + {"matrix": [0, 4], "x": 224, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 168, "y": 0, "flags": 1} + ], "max_brightness": 170 }, "features": { diff --git a/keyboards/idobao/montex/v1rgb/v1rgb.c b/keyboards/idobao/montex/v1rgb/v1rgb.c deleted file mode 100755 index b70067cfcf..0000000000 --- a/keyboards/idobao/montex/v1rgb/v1rgb.c +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2022 peepeetee (@peepeetee) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "quantum.h" - -#ifdef RGB_MATRIX_ENABLE - -/* WS2812 indices always start at 0 - * underglow = 0-3 - * note: starting point of 4 and jump from 6 to 7 - * ┌───┌───┐───┬───┬───┐ - * │ 6 │ 5 │ 4 │30 │29 │ - * ├───┼───┘───┼───┼───┤ - * │24 │25 │26 │27 │28 │ - * ├───┼───┼───┼───┼───┤ - * │23 │22 │21 │20 │19 │ - * ├───┼───┼───┼───┤ │ - * │15 │16 │17 │18 │ │ - * ├───┼───┼───┼───┤───┤ - * │14 │13 │12 │11 │10 │ - * ├───┼───┴───┼───┤ │ - * │ 7 │ 8 │ 9 │ │ - * └───┴───────┴───┘───┘ - */ - -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 6, 5, 4, 30, 29}, - { 24, 25, 26, 27, 28}, - { 23, 22, 21, 20, 19}, - { 15, 16, 17, 18, NO_LED}, - { 14, 13, 12, 11, NO_LED}, - { 7, 8, 9, 10, NO_LED} -}, { - // LED Index to Physical Position - /* underglow: because this is under the kb, you want the colors on the edge (corners) of the acrylic plate */ - { 224,0 }, { 224,64}, { 0,64 }, { 0,0 }, // 0-3 (underglow) - /* per-key: origins generated from https://xelus.netlify.app/guides/KLE_to_RGB_parser */ - { 112,0 }, { 56,0 }, { 0,0 }, /* ---- */ /* ---- */ // 4-6 (top row middle to left) - { 0,64 }, { 84,64 }, { 168,64 }, // 7-9 (jump to bottom left) - { 224,58 }, { 168,41 }, { 112,41 }, { 56,41 }, { 0,41 }, // 10-14 (flow Z pattern upwards...) - { 0,29 }, { 56,29 }, { 112,29 }, { 168,29 }, // 15-18 - { 224,35 }, { 168,29 }, { 112,29 }, { 56,29 }, { 0,29 }, // 19-23 - { 0,17 }, { 56,17 }, { 112,17 }, { 168,17 }, { 224,17 }, // 24-28 - /* ---- */ /* ---- */ /* ---- */ { 224,0 }, { 168,0 } // 29-30 (end at top) -}, { - // LED Index to Flag - 2, 2, 2, 2, // 0 1 2 3 (underglow) - 1, 1, 1, // 4 5 6 - 4, 4, 4, 4, // 7 - 10 - 4, 4, 4, 4, //11 - 14 - 4, 4, 4, 4, //15 - 18 - 4, 4, 4, 4, 4, //19 - 23 - 4, 4, 4, 4, 4, //24 - 28 - 1, 1 //29 30 -} }; - -#endif diff --git a/keyboards/idobao/montex/v2/keyboard.json b/keyboards/idobao/montex/v2/keyboard.json index 319f46a459..0832ed8729 100755 --- a/keyboards/idobao/montex/v2/keyboard.json +++ b/keyboards/idobao/montex/v2/keyboard.json @@ -41,6 +41,39 @@ "solid_splash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 4], "x": 224, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 168, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 112, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 56, "y": 0, "flags": 1}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 17, "flags": 4}, + {"matrix": [1, 1], "x": 56, "y": 17, "flags": 4}, + {"matrix": [1, 2], "x": 112, "y": 17, "flags": 4}, + {"matrix": [1, 3], "x": 168, "y": 17, "flags": 4}, + {"matrix": [1, 4], "x": 224, "y": 17, "flags": 4}, + {"matrix": [2, 4], "x": 224, "y": 35, "flags": 4}, + {"matrix": [2, 3], "x": 168, "y": 29, "flags": 4}, + {"matrix": [2, 2], "x": 112, "y": 29, "flags": 4}, + {"matrix": [2, 1], "x": 56, "y": 29, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 29, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 41, "flags": 4}, + {"matrix": [3, 1], "x": 56, "y": 41, "flags": 4}, + {"matrix": [3, 2], "x": 112, "y": 41, "flags": 4}, + {"matrix": [3, 3], "x": 168, "y": 41, "flags": 4}, + {"matrix": [5, 3], "x": 224, "y": 58, "flags": 4}, + {"matrix": [4, 3], "x": 168, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 112, "y": 52, "flags": 4}, + {"matrix": [4, 1], "x": 56, "y": 52, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 52, "flags": 4}, + {"matrix": [5, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [5, 1], "x": 84, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 168, "y": 64, "flags": 4}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 224, "y": 0, "flags": 2} + ], "max_brightness": 180, "sleep": true }, diff --git a/keyboards/idobao/montex/v2/v2.c b/keyboards/idobao/montex/v2/v2.c deleted file mode 100755 index ad6e32a692..0000000000 --- a/keyboards/idobao/montex/v2/v2.c +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2022 IBNobody (@IBNobody) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "quantum.h" - -#define __ NO_LED - -#ifdef RGB_MATRIX_ENABLE - -/* Under-, Per-key - * ┌───┬───┬───┬───┬───┐ - * │ 4 │ 3 │ 2 │ 1 │ 0 │ - * ├───┼───┼───┼───┼───┤ - * │ 5 │ 6 │ 7 │ 8 │ 9 │ - * ├───┼───┼───┼───┼───┤ - * │14 │13 │12 │11 │ │ - * ├───┼───┼───┼───┤10 │ - * │15 │16 │17 │18 │ │ - * ├───┼───┼───┼───┼───┤ - * │23 │22 │21 │20 │ │ - * ├───┼───┴───┼───┤19 │ - * │24 │ 25 │26 │ │ - * └───┴───────┴───┴───┘ - * - * Underglow (from top / [Esc] = top left) - * ┌─────────┬─────────┐ - * │ │ │ - * │ │ │ - * │ 29 │ 30 │ - * │ │ │ - * │ │ │ - * ├─────────┼─────────┤ - * │ │ │ - * │ │ │ - * │ 28 │ 27 │ - * │ │ │ - * │ │ │ - * └─────────┴─────────┘ - */ - -led_config_t g_led_config = { { - // Key Matrix to LED Index - // Montex v2 WS2812 are laid in a Z-shape with index 0 = top-right - // Based on: https://xelus.netlify.app/guides/KLE_to_RGB_parser - { 4, 3, 2, 1, 0}, - { 5, 6, 7, 8, 9}, - { 14, 13, 12, 11, 10}, - { 15, 16, 17, 18, __}, - { 23, 22, 21, 20, __}, - { 24, 25, 26, 19, __} -}, { - // LED Index to Physical Position - // per-key - // Based on: https://xelus.netlify.app/guides/KLE_to_RGB_parser - {224,0 }, {168,0 }, {112,0 }, { 56,0 }, { 0,0 }, // top row - { 0,17 }, { 56,17 }, {112,17 }, {168,17 }, {224,17 }, // num-lk & /*- (reversed) - {224,35 }, {168,29 }, {112,29 }, { 56,29 }, { 0,29 }, // 789+ - { 0,41 }, { 56,41 }, {112,41 }, {168,41 }, // 456 (reversed) - {224,58 }, {168,52 }, {112,52 }, { 56,52 }, // 123 - { 0,52 }, { 0,64 }, { 84,64 }, {168,64 } // 0. & enter (reversed) - // underglow LEDs (positions pushed to nearest edge to match edge key colors) - #ifndef ID27_DISABLE_UNDERGLOW - , {224,64 }, { 0,64 }, - { 0,0 }, { 224,0 } - #endif -}, { - // LED Index to Flag - // LED_FLAG_MODIFIER 0x01, LED_FLAG_UNDERGLOW 0x02, LED_FLAG_KEYLIGHT 0x04, LED_FLAG_INDICATOR 0x08 - // per-key - 1, 1, 1, 1, 1, - 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, 4 - // underglow - #ifndef ID27_DISABLE_UNDERGLOW - , 2, 2, 2, 2 - #endif -} }; - -#endif diff --git a/keyboards/idyllic/tinny50_rgb/keyboard.json b/keyboards/idyllic/tinny50_rgb/keyboard.json index 4d3cd320dd..e3d44714ab 100644 --- a/keyboards/idyllic/tinny50_rgb/keyboard.json +++ b/keyboards/idyllic/tinny50_rgb/keyboard.json @@ -59,7 +59,39 @@ "default": { "val": 223 }, - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"x": 126, "y": 64, "flags": 2}, + {"x": 108, "y": 64, "flags": 2}, + {"x": 90, "y": 64, "flags": 2}, + {"x": 72, "y": 64, "flags": 2}, + {"x": 54, "y": 64, "flags": 2}, + {"x": 36, "y": 64, "flags": 2}, + {"x": 18, "y": 64, "flags": 2}, + {"x": 0, "y": 52, "flags": 2}, + {"x": 0, "y": 39, "flags": 2}, + {"x": 0, "y": 26, "flags": 2}, + {"x": 0, "y": 13, "flags": 2}, + {"x": 18, "y": 0, "flags": 2}, + {"x": 36, "y": 0, "flags": 2}, + {"x": 54, "y": 0, "flags": 2}, + {"x": 72, "y": 0, "flags": 2}, + {"x": 90, "y": 0, "flags": 2}, + {"x": 108, "y": 0, "flags": 2}, + {"x": 126, "y": 0, "flags": 2}, + {"x": 144, "y": 0, "flags": 2}, + {"x": 162, "y": 0, "flags": 2}, + {"x": 180, "y": 0, "flags": 2}, + {"x": 198, "y": 0, "flags": 2}, + {"x": 224, "y": 13, "flags": 2}, + {"x": 224, "y": 26, "flags": 2}, + {"x": 224, "y": 39, "flags": 2}, + {"x": 224, "y": 52, "flags": 2}, + {"x": 198, "y": 64, "flags": 2}, + {"x": 180, "y": 64, "flags": 2}, + {"x": 162, "y": 64, "flags": 2}, + {"x": 144, "y": 64, "flags": 2} + ] }, "ws2812": { "pin": "GP10", diff --git a/keyboards/idyllic/tinny50_rgb/tinny50_rgb.c b/keyboards/idyllic/tinny50_rgb/tinny50_rgb.c deleted file mode 100644 index d8b06b8fb6..0000000000 --- a/keyboards/idyllic/tinny50_rgb/tinny50_rgb.c +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright 2022 Zykrah - -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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - // Key Matrix to LED Index - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED} - }, { - // LED Index to Physical Position - {150, 64}, {130, 64}, {110, 64}, { 90, 64}, { 70, 64}, { 50, 64}, { 30, 64}, - { 0, 52}, { 0, 39}, { 0, 26}, { 0, 13}, - { 30, 0}, { 50, 0}, { 70, 0}, { 90, 0}, {110, 0}, {130, 0}, {150, 0}, {170, 0}, {190, 0}, {210, 0}, {230, 0}, - {255, 13}, {255, 26}, {255, 39}, {255, 52}, - {230, 64}, {210, 64}, {190, 64}, {170, 64} - }, { - // LED Index to Flag - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // UNDERGLOW - 2, 2, 2, 2, // UNDERGLOW - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // UNDERGLOW - 2, 2, 2, 2, // UNDERGLOW - } -}; -#endif - diff --git a/keyboards/ilumkb/simpler61/keyboard.json b/keyboards/ilumkb/simpler61/keyboard.json index 10e182dac8..eb98400603 100644 --- a/keyboards/ilumkb/simpler61/keyboard.json +++ b/keyboards/ilumkb/simpler61/keyboard.json @@ -43,6 +43,69 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 216, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 88, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 104, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 184, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 220, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 2, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 114, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 130, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 162, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 178, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 204, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 68, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 84, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 100, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 116, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 132, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 148, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 164, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 180, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 202, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 4, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 24, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 44, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 180, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 200, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 220, "y": 64, "flags": 4} + ], "led_process_limit": 4, "led_flush_limit": 26, "sleep": true diff --git a/keyboards/ilumkb/simpler61/simpler61.c b/keyboards/ilumkb/simpler61/simpler61.c index 99cefc7844..afff4dbc36 100644 --- a/keyboards/ilumkb/simpler61/simpler61.c +++ b/keyboards/ilumkb/simpler61/simpler61.c @@ -84,27 +84,4 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW7_CS30, SW7_CS29, SW7_CS28}, {0, SW5_CS30, SW5_CS29, SW5_CS28}, }; - -led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27}, - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, NO_LED, 40}, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, NO_LED, 53}, - { 54, 55, 56, NO_LED, NO_LED, 57, NO_LED, NO_LED, NO_LED, NO_LED, 58, 59, NO_LED, 60}, - }, { - {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {80, 0}, {96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {216, 0}, - {4, 16}, {24, 16}, {40, 16}, {56, 16}, {72, 16}, {88, 16}, {104, 16}, {120, 16}, {136, 16}, {152, 16}, {168, 16}, {184, 16}, {200, 16}, {220, 16}, - {2, 32}, {28, 32}, {44, 32}, {60, 32}, {76, 32}, {92, 32}, {108, 32}, {114, 32}, {130, 32}, {146, 32}, {162, 32}, {178, 32}, {204, 32}, - {9, 48}, {36, 48}, {52, 48}, {68, 48}, {84, 48}, {100, 48}, {116, 48}, {132, 48}, {148, 48}, {164, 48}, {180, 48}, {202, 48}, {224, 48}, - {4, 64}, {24, 64}, {44, 64}, {112, 64}, {180, 64}, {200, 64}, {220, 64}, - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, - } -}; - #endif diff --git a/keyboards/ilumkb/simpler64/keyboard.json b/keyboards/ilumkb/simpler64/keyboard.json index 240d0d67c2..b49c986d86 100644 --- a/keyboards/ilumkb/simpler64/keyboard.json +++ b/keyboards/ilumkb/simpler64/keyboard.json @@ -43,6 +43,72 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 216, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 88, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 104, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 184, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 220, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 114, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 130, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 162, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 178, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 204, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 8, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 138, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 192, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 208, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 42, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 102, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 160, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 176, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 192, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 208, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 4} + ], "led_process_limit": 4, "led_flush_limit": 26, "sleep": true diff --git a/keyboards/ilumkb/simpler64/simpler64.c b/keyboards/ilumkb/simpler64/simpler64.c index 21892a55f4..aa0a97fe54 100644 --- a/keyboards/ilumkb/simpler64/simpler64.c +++ b/keyboards/ilumkb/simpler64/simpler64.c @@ -87,27 +87,4 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW6_CS30, SW6_CS29, SW6_CS28}, {0, SW5_CS30, SW5_CS29, SW5_CS28}, }; - -led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27}, - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, NO_LED, 40}, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54}, - { 55, 56, 57, NO_LED, NO_LED, 58, NO_LED, NO_LED, NO_LED, 59, 60, 61, 62, 63}, - }, { - {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {80, 0}, {96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {216, 0}, - {4, 16}, {24, 16}, {40, 16}, {56, 16}, {72, 16}, {88, 16}, {104, 16}, {120, 16}, {136, 16}, {152, 16}, {168, 16}, {184, 16}, {200, 16}, {220, 16}, - {6, 32}, {28, 32}, {44, 32}, {60, 32}, {76, 32}, {92, 32}, {108, 32}, {114, 32}, {130, 32}, {146, 32}, {162, 32}, {178, 32}, {204, 32}, - {8, 48}, {32, 48}, {48, 48}, {64, 48}, {80, 48}, {96, 48}, {112, 48}, {138, 48}, {154, 48}, {160, 48}, {176, 48}, {192, 48}, {208, 48}, {224, 48}, - {2, 64}, {22, 64}, {42, 64}, {102, 64}, {160, 64}, {176, 64}, {192, 64}, {208, 64}, {224, 64}, - }, { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, - } -}; - #endif diff --git a/keyboards/inett_studio/sqx/hotswap/hotswap.c b/keyboards/inett_studio/sqx/hotswap/hotswap.c index dc12ec4f30..da9f0fd617 100644 --- a/keyboards/inett_studio/sqx/hotswap/hotswap.c +++ b/keyboards/inett_studio/sqx/hotswap/hotswap.c @@ -114,44 +114,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {1, C9_16, C7_15, C6_15}, }; -led_config_t g_led_config = { - { - { 18, 19, 20, 21, 22, 23, 24, 16, 17, 36, 37, 38, 39, 40}, - { 26, 27, 28, 29, 30, 31, 25, 48, 41, 42, 43, 44, 45, 46}, - { 8, 7, 0, 32, 33, 34, 35, 49, 50, 51, 52, 53, NO_LED, 47}, - { 9, NO_LED, 10, 1, 2, 3, 4, 5, 56, 55, 57, 58, 59, 54}, - { 14, 13, 12, 11, NO_LED, NO_LED, 6, 15, NO_LED, NO_LED, 60, 61, 62, 63}, - }, - { - { 48, 32},{ 48, 48},{ 64, 48},{ 80, 48},{ 96, 48},{112, 48},{112, 64},{ 32, 32}, - { 16, 32},{ 16, 48}, { 32, 48},{ 64, 64},{ 40, 64},{ 20, 64},{ 0, 64}, - - { 0, 0},{ 16, 0},{ 32, 0},{ 48, 0},{ 64, 0},{ 80, 0},{ 96, 0},{ 96, 16}, - { 0, 16},{ 16, 16}, - { 32, 16},{ 48, 16},{ 64, 16},{ 80, 16},{ 64, 32},{ 80, 32},{ 96, 32},{112, 32}, - - {112, 0},{128, 0},{144, 0},{160, 0},{176, 0},{192, 0},{208, 0},{224, 0}, - {128, 16},{144, 16},{160, 16},{176, 16},{192, 16},{216, 16},{216, 32},{112, 16}, - - {128, 32},{144, 32},{160, 32},{176, 32},{192, 32}, {224, 48},{144, 48}, - {128, 48},{160, 48},{176, 48},{192, 48},{160, 64},{180, 64},{200, 64},{224, 64} - }, - { - 4, 4, 4, 4, 4, 4, 4, 4, - 1, 1, 4, 1, 1, 1, 1, - - 1, 4, 4, 4, 4, 4, 4, 4, - 1, 4, - 4, 4, 4, 4, 4, 4, 4, 4, - - 4, 4, 4, 4, 4, 4, 1, 1, - 4, 4, 4, 4, 4, 1, 1, 4, - - 4, 4, 4, 4, 4, 1, 4, - 4, 4, 4, 1, 1, 1, 1, 1, - } -}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/inett_studio/sqx/hotswap/keyboard.json b/keyboards/inett_studio/sqx/hotswap/keyboard.json index 0c28be4582..a7dd508f3f 100644 --- a/keyboards/inett_studio/sqx/hotswap/keyboard.json +++ b/keyboards/inett_studio/sqx/hotswap/keyboard.json @@ -40,6 +40,72 @@ "pixel_fractal": true }, "driver": "is31fl3731", + "layout": [ + {"matrix": [2, 2], "x": 48, "y": 32, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 112, "y": 48, "flags": 4}, + {"matrix": [4, 6], "x": 112, "y": 64, "flags": 4}, + {"matrix": [2, 1], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 16, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 16, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 32, "y": 48, "flags": 4}, + {"matrix": [4, 3], "x": 64, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 40, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 20, "y": 64, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [4, 7], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 96, "y": 16, "flags": 4}, + {"matrix": [0, 5], "x": 0, "y": 16, "flags": 1}, + {"matrix": [0, 6], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 64, "y": 32, "flags": 4}, + {"matrix": [1, 4], "x": 80, "y": 32, "flags": 4}, + {"matrix": [1, 5], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 112, "y": 0, "flags": 4}, + {"matrix": [2, 5], "x": 128, "y": 0, "flags": 4}, + {"matrix": [2, 6], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 208, "y": 0, "flags": 1}, + {"matrix": [0, 13], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 216, "y": 16, "flags": 1}, + {"matrix": [2, 13], "x": 216, "y": 32, "flags": 1}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [2, 7], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 192, "y": 32, "flags": 4}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 9], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 192, "y": 48, "flags": 1}, + {"matrix": [4, 10], "x": 160, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 180, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 200, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1} + ], "max_brightness": 170 }, "rgblight": { diff --git a/keyboards/inett_studio/sqx/universal/keyboard.json b/keyboards/inett_studio/sqx/universal/keyboard.json index 2c2b03bd0d..7e207f0eb1 100644 --- a/keyboards/inett_studio/sqx/universal/keyboard.json +++ b/keyboards/inett_studio/sqx/universal/keyboard.json @@ -40,6 +40,80 @@ "pixel_fractal": true }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 32, "y": 32, "flags": 4}, + {"matrix": [0, 1], "x": 48, "y": 48, "flags": 4}, + {"matrix": [0, 2], "x": 64, "y": 48, "flags": 4}, + {"matrix": [0, 3], "x": 80, "y": 48, "flags": 4}, + {"matrix": [0, 4], "x": 96, "y": 48, "flags": 4}, + {"matrix": [0, 5], "x": 112, "y": 48, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 64, "flags": 4}, + {"matrix": [1, 6], "x": 96, "y": 64, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 32, "flags": 1}, + {"matrix": [1, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [1, 2], "x": 0, "y": 48, "flags": 4}, + {"matrix": [1, 3], "x": 0, "y": 48, "flags": 4}, + {"matrix": [1, 4], "x": 16, "y": 48, "flags": 1}, + {"matrix": [1, 5], "x": 32, "y": 48, "flags": 1}, + {"matrix": [2, 3], "x": 64, "y": 64, "flags": 1}, + {"matrix": [2, 4], "x": 32, "y": 64, "flags": 4}, + {"matrix": [2, 5], "x": 16, "y": 64, "flags": 4}, + {"matrix": [2, 6], "x": 0, "y": 64, "flags": 4}, + {"matrix": [2, 2], "x": 0, "y": 0, "flags": 1}, + {"matrix": [3, 3], "x": 16, "y": 0, "flags": 4}, + {"matrix": [3, 4], "x": 32, "y": 0, "flags": 4}, + {"matrix": [3, 5], "x": 48, "y": 0, "flags": 4}, + {"matrix": [3, 6], "x": 64, "y": 0, "flags": 4}, + {"matrix": [3, 7], "x": 80, "y": 0, "flags": 4}, + {"matrix": [4, 6], "x": 96, "y": 0, "flags": 4}, + {"x": 96, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 16, "flags": 1}, + {"matrix": [2, 1], "x": 16, "y": 16, "flags": 4}, + {"x": 32, "y": 16, "flags": 4}, + {"matrix": [3, 0], "x": 48, "y": 16, "flags": 4}, + {"matrix": [3, 1], "x": 64, "y": 16, "flags": 4}, + {"matrix": [3, 2], "x": 80, "y": 16, "flags": 4}, + {"x": 48, "y": 32, "flags": 4}, + {"matrix": [4, 2], "x": 64, "y": 32, "flags": 4}, + {"matrix": [4, 1], "x": 80, "y": 32, "flags": 4}, + {"matrix": [4, 0], "x": 96, "y": 32, "flags": 4}, + {"matrix": [0, 7], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 208, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 216, "y": 0, "flags": 1}, + {"x": 224, "y": 0, "flags": 1}, + {"matrix": [4, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [1, 7], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 208, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 224, "y": 16, "flags": 1}, + {"x": 224, "y": 32, "flags": 1}, + {"matrix": [2, 13], "x": 216, "y": 32, "flags": 1}, + {"matrix": [2, 7], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 192, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 208, "y": 32, "flags": 4}, + {"x": 208, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 8], "x": 128, "y": 48, "flags": 1}, + {"matrix": [3, 9], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 192, "y": 48, "flags": 4}, + {"x": 142, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 160, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 176, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 208, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1} + ], "max_brightness": 170 }, "rgblight": { diff --git a/keyboards/inett_studio/sqx/universal/universal.c b/keyboards/inett_studio/sqx/universal/universal.c index 105e89ecc5..0f92fa3807 100644 --- a/keyboards/inett_studio/sqx/universal/universal.c +++ b/keyboards/inett_studio/sqx/universal/universal.c @@ -114,48 +114,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {1, C9_16, C7_15, C6_15}, }; -led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 36, 37, 38, 39, 40, 41, 42}, - { 8, 9, 10, 11, 12, 13, 7, 45, 46, 47, 48, 49, 50, 51}, - { 26,27, 18, 14, 15, 16, 17, 54, 55, 56, 57, 58, 59, 53}, - { 29,30, 31, 19, 20, 21, 22, 23, 62, 63, 64, 65, 66, 61}, - { 35,34, 33, NO_LED, NO_LED, NO_LED, 24, 44, NO_LED, NO_LED, 68, 69, 70, 71}, - }, - { - { 32, 32},{ 48, 48},{ 64, 48},{ 80, 48},{ 96, 48},{112, 48},{ 96, 64},{ 96, 64}, - { 0, 32},{ 16, 32}, - { 0, 48},{ 0, 48},{ 16, 48},{ 32, 48},{ 64, 64},{ 32, 64},{ 16, 64},{ 0, 64}, - { 0, 0},{ 16, 0},{ 32, 0},{ 48, 0},{ 64, 0},{ 80, 0},{ 96, 0},{ 96, 16}, - { 0, 16},{ 16, 16}, - { 32, 16},{ 48, 16},{ 64, 16},{ 80, 16},{ 48, 32},{ 64, 32},{ 80, 32},{ 96, 32}, - - {128, 0},{144, 0},{160, 0},{176, 0},{192, 0},{208, 0},{216, 0},{224, 0}, - {112, 0},{128, 16}, - {144, 16},{160, 16},{176, 16},{192, 16},{208, 16},{224, 16},{224, 32},{216, 32}, - {128, 32},{144, 32},{160, 32},{176, 32},{192, 32},{208, 32},{208, 48},{224, 48}, - {128, 48},{144, 48}, - {160, 48},{176, 48},{192, 48},{142, 64},{160, 64},{176, 64},{208, 64},{224, 64} - }, - { - 4, 4, 4, 4, 4, 4, 4, 4, - 1, 4, - 4, 4, 1, 1, 1, 4, 4, 4, - - 1, 4, 4, 4, 4, 4, 4, 4, - 1, 4, - 4, 4, 4, 4, 4, 4, 4, 4, - - 4, 4, 4, 4, 4, 4, 1, 1, - 4, 4, - 4, 4, 4, 4, 4, 1, 1, 1, - - 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, - 4, 4, 4, 4, 1, 1, 1, 1, - } -}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/input_club/k_type/k_type.c b/keyboards/input_club/k_type/k_type.c index c719208af1..2fd1bd0612 100644 --- a/keyboards/input_club/k_type/k_type.c +++ b/keyboards/input_club/k_type/k_type.c @@ -150,57 +150,6 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 1, SW11_CS7, SW10_CS7, SW12_CS7 } }; -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, - { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }, - { 20, 21, 22, 23, 24, 25, 26, 27, 28, NO_LED }, - { 29, NO_LED, 30, 31, 32, 33, 34, 35, 36, 37 }, - { 38, 39, 40, 41, 42, 43, 44, 45, 46, NO_LED }, - { 47, 48, 49, 50, 51, 52, 53, 54, 55, 56 }, - { 57, 58, 59, 60, 61, NO_LED, 62, NO_LED, 63, NO_LED }, - { 64, 65, 66, 67, 68, 69, 70, 71, 72, 73 }, - { NO_LED, 74, NO_LED, 75, 76, 77, 78, 79, 80, 81 }, - { 82, 83, 84, 85, 86, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } - }, { - // LED Index to Physical Position - // Key LED - { 0, 0 }, { 26, 0 }, { 39, 0 }, { 52, 0 }, { 65, 0 }, { 79, 0 }, { 92, 0 }, { 105, 0 }, { 118, 0 }, { 131, 0 }, { 144, 0 }, { 158, 0 }, { 171, 0 }, { 197, 0 }, { 210, 0 }, { 224, 0 }, - - { 0, 21 }, { 13, 21 }, { 26, 21 }, { 39, 21 }, { 52, 21 }, { 65, 21 }, { 79, 21 }, { 92, 21 }, { 105, 21 }, { 118, 21 }, { 131, 21 }, { 144, 21 }, { 158, 21 }, { 171, 21 }, { 197, 21 }, { 210, 21 }, { 224, 21 }, - { 0, 32 }, { 13, 32 }, { 26, 32 }, { 39, 32 }, { 52, 32 }, { 65, 32 }, { 79, 32 }, { 92, 32 }, { 105, 32 }, { 118, 32 }, { 131, 32 }, { 144, 32 }, { 158, 32 }, { 171, 32 }, { 197, 32 }, { 210, 32 }, { 224, 32 }, - { 0, 42 }, { 13, 42 }, { 26, 42 }, { 39, 42 }, { 52, 42 }, { 65, 42 }, { 79, 42 }, { 92, 42 }, { 105, 42 }, { 118, 42 }, { 131, 42 }, { 144, 42 }, { 171, 42 }, - { 0, 53 }, { 26, 53 }, { 39, 53 }, { 52, 53 }, { 65, 53 }, { 79, 53 }, { 92, 53 }, { 105, 53 }, { 118, 53 }, { 131, 53 }, { 144, 53 }, { 171, 53 }, { 210, 53 }, - { 0, 64 }, { 13, 64 }, { 26, 64 }, { 79, 64 }, { 131, 64 }, { 144, 64 }, { 158, 64 }, { 171, 64 }, { 197, 64 }, { 210, 64 }, { 224, 64 }, - - // Underglow LED - { 224, 64 }, { 206, 64 }, { 189, 64 }, { 172, 64 }, { 155, 64 }, { 137, 64 }, { 120, 64 }, { 103, 64 }, { 86, 64 }, { 68, 64 }, { 51, 64 }, { 34, 64 }, { 17, 64 }, { 0, 64 }, - { 0, 42 }, { 0, 21 }, - { 0, 0 }, { 17, 0 }, { 34, 0 }, { 51, 0 }, { 68, 0 }, { 86, 0 }, { 103, 0 }, { 120, 0 }, { 137, 0 }, { 155, 0 }, { 172, 0 }, { 189, 0 }, { 206, 0 }, { 224, 0 }, - { 224, 21 }, { 224, 42 } - }, { - // LED Index to Flag - //Key LED - 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, - - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - - // Underglow LED - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - - 2, 2, - - 2, 2, - - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - } -}; - void matrix_init_kb(void) { // put your keyboard start-up code here // runs once when the firmware starts up diff --git a/keyboards/input_club/k_type/keyboard.json b/keyboards/input_club/k_type/keyboard.json index ed004335c0..99ff1fe5b6 100644 --- a/keyboards/input_club/k_type/keyboard.json +++ b/keyboards/input_club/k_type/keyboard.json @@ -53,7 +53,128 @@ "solid_splash": true, "solid_multisplash": true }, - "driver": "custom" + "driver": "custom", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 26, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 39, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 52, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 65, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 79, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 92, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 118, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 131, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 144, "y": 0, "flags": 4}, + {"matrix": [1, 1], "x": 158, "y": 0, "flags": 4}, + {"matrix": [1, 2], "x": 171, "y": 0, "flags": 4}, + {"matrix": [1, 3], "x": 197, "y": 0, "flags": 1}, + {"matrix": [1, 4], "x": 210, "y": 0, "flags": 1}, + {"matrix": [1, 5], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 6], "x": 0, "y": 21, "flags": 1}, + {"matrix": [1, 7], "x": 13, "y": 21, "flags": 4}, + {"matrix": [1, 8], "x": 26, "y": 21, "flags": 4}, + {"matrix": [1, 9], "x": 39, "y": 21, "flags": 4}, + {"matrix": [2, 0], "x": 52, "y": 21, "flags": 4}, + {"matrix": [2, 1], "x": 65, "y": 21, "flags": 4}, + {"matrix": [2, 2], "x": 79, "y": 21, "flags": 4}, + {"matrix": [2, 3], "x": 92, "y": 21, "flags": 4}, + {"matrix": [2, 4], "x": 105, "y": 21, "flags": 4}, + {"matrix": [2, 5], "x": 118, "y": 21, "flags": 4}, + {"matrix": [2, 6], "x": 131, "y": 21, "flags": 4}, + {"matrix": [2, 7], "x": 144, "y": 21, "flags": 4}, + {"matrix": [2, 8], "x": 158, "y": 21, "flags": 4}, + {"matrix": [3, 0], "x": 171, "y": 21, "flags": 1}, + {"matrix": [3, 2], "x": 197, "y": 21, "flags": 4}, + {"matrix": [3, 3], "x": 210, "y": 21, "flags": 4}, + {"matrix": [3, 4], "x": 224, "y": 21, "flags": 4}, + {"matrix": [3, 5], "x": 0, "y": 32, "flags": 1}, + {"matrix": [3, 6], "x": 13, "y": 32, "flags": 4}, + {"matrix": [3, 7], "x": 26, "y": 32, "flags": 4}, + {"matrix": [3, 8], "x": 39, "y": 32, "flags": 4}, + {"matrix": [3, 9], "x": 52, "y": 32, "flags": 4}, + {"matrix": [4, 0], "x": 65, "y": 32, "flags": 4}, + {"matrix": [4, 1], "x": 79, "y": 32, "flags": 4}, + {"matrix": [4, 2], "x": 92, "y": 32, "flags": 4}, + {"matrix": [4, 3], "x": 105, "y": 32, "flags": 4}, + {"matrix": [4, 4], "x": 118, "y": 32, "flags": 4}, + {"matrix": [4, 5], "x": 131, "y": 32, "flags": 4}, + {"matrix": [4, 6], "x": 144, "y": 32, "flags": 4}, + {"matrix": [4, 7], "x": 158, "y": 32, "flags": 4}, + {"matrix": [4, 8], "x": 171, "y": 32, "flags": 4}, + {"matrix": [5, 0], "x": 197, "y": 32, "flags": 4}, + {"matrix": [5, 1], "x": 210, "y": 32, "flags": 4}, + {"matrix": [5, 2], "x": 224, "y": 32, "flags": 4}, + {"matrix": [5, 3], "x": 0, "y": 42, "flags": 1}, + {"matrix": [5, 4], "x": 13, "y": 42, "flags": 4}, + {"matrix": [5, 5], "x": 26, "y": 42, "flags": 4}, + {"matrix": [5, 6], "x": 39, "y": 42, "flags": 4}, + {"matrix": [5, 7], "x": 52, "y": 42, "flags": 4}, + {"matrix": [5, 8], "x": 65, "y": 42, "flags": 4}, + {"matrix": [5, 9], "x": 79, "y": 42, "flags": 4}, + {"matrix": [6, 0], "x": 92, "y": 42, "flags": 4}, + {"matrix": [6, 1], "x": 105, "y": 42, "flags": 4}, + {"matrix": [6, 2], "x": 118, "y": 42, "flags": 4}, + {"matrix": [6, 3], "x": 131, "y": 42, "flags": 4}, + {"matrix": [6, 4], "x": 144, "y": 42, "flags": 4}, + {"matrix": [6, 6], "x": 171, "y": 42, "flags": 1}, + {"matrix": [6, 8], "x": 0, "y": 53, "flags": 1}, + {"matrix": [7, 0], "x": 26, "y": 53, "flags": 4}, + {"matrix": [7, 1], "x": 39, "y": 53, "flags": 4}, + {"matrix": [7, 2], "x": 52, "y": 53, "flags": 4}, + {"matrix": [7, 3], "x": 65, "y": 53, "flags": 4}, + {"matrix": [7, 4], "x": 79, "y": 53, "flags": 4}, + {"matrix": [7, 5], "x": 92, "y": 53, "flags": 4}, + {"matrix": [7, 6], "x": 105, "y": 53, "flags": 4}, + {"matrix": [7, 7], "x": 118, "y": 53, "flags": 4}, + {"matrix": [7, 8], "x": 131, "y": 53, "flags": 4}, + {"matrix": [7, 9], "x": 144, "y": 53, "flags": 4}, + {"matrix": [8, 1], "x": 171, "y": 53, "flags": 1}, + {"matrix": [8, 3], "x": 210, "y": 53, "flags": 1}, + {"matrix": [8, 4], "x": 0, "y": 64, "flags": 1}, + {"matrix": [8, 5], "x": 13, "y": 64, "flags": 1}, + {"matrix": [8, 6], "x": 26, "y": 64, "flags": 1}, + {"matrix": [8, 7], "x": 79, "y": 64, "flags": 4}, + {"matrix": [8, 8], "x": 131, "y": 64, "flags": 1}, + {"matrix": [8, 9], "x": 144, "y": 64, "flags": 1}, + {"matrix": [9, 0], "x": 158, "y": 64, "flags": 1}, + {"matrix": [9, 1], "x": 171, "y": 64, "flags": 1}, + {"matrix": [9, 2], "x": 197, "y": 64, "flags": 1}, + {"matrix": [9, 3], "x": 210, "y": 64, "flags": 1}, + {"matrix": [9, 4], "x": 224, "y": 64, "flags": 1}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 206, "y": 64, "flags": 2}, + {"x": 189, "y": 64, "flags": 2}, + {"x": 172, "y": 64, "flags": 2}, + {"x": 155, "y": 64, "flags": 2}, + {"x": 137, "y": 64, "flags": 2}, + {"x": 120, "y": 64, "flags": 2}, + {"x": 103, "y": 64, "flags": 2}, + {"x": 86, "y": 64, "flags": 2}, + {"x": 68, "y": 64, "flags": 2}, + {"x": 51, "y": 64, "flags": 2}, + {"x": 34, "y": 64, "flags": 2}, + {"x": 17, "y": 64, "flags": 2}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 0, "y": 42, "flags": 2}, + {"x": 0, "y": 21, "flags": 2}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 17, "y": 0, "flags": 2}, + {"x": 34, "y": 0, "flags": 2}, + {"x": 51, "y": 0, "flags": 2}, + {"x": 68, "y": 0, "flags": 2}, + {"x": 86, "y": 0, "flags": 2}, + {"x": 103, "y": 0, "flags": 2}, + {"x": 120, "y": 0, "flags": 2}, + {"x": 137, "y": 0, "flags": 2}, + {"x": 155, "y": 0, "flags": 2}, + {"x": 172, "y": 0, "flags": 2}, + {"x": 189, "y": 0, "flags": 2}, + {"x": 206, "y": 0, "flags": 2}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 224, "y": 21, "flags": 2}, + {"x": 224, "y": 42, "flags": 2} + ] }, "features": { "bootmagic": false, From db9b295aa720721ea3e3f94617a90dfc7dcbad58 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 9 Sep 2025 04:50:36 -0600 Subject: [PATCH 43/99] Migrate `g_led_config` to DD (L) (#25617) --- keyboards/labbe/labbeminiv1/keyboard.json | 9 ++ keyboards/labbe/labbeminiv1/labbeminiv1.c | 36 -------- .../latincompass/latin17rgb/keyboard.json | 19 ++++ .../latincompass/latin17rgb/latin17rgb.c | 54 ++++------- .../latincompass/latin6rgb/keyboard.json | 8 ++ keyboards/latincompass/latin6rgb/latin6rgb.c | 43 +++------ keyboards/latincompass/latinpad/keyboard.json | 22 ++++- keyboards/latincompass/latinpad/latinpad.c | 38 -------- keyboards/linworks/fave65h/fave65h.c | 44 --------- keyboards/linworks/fave65h/keyboard.json | 69 ++++++++++++++ keyboards/linworks/fave87h/fave87h.c | 48 ---------- keyboards/linworks/fave87h/keyboard.json | 89 +++++++++++++++++++ 12 files changed, 244 insertions(+), 235 deletions(-) delete mode 100644 keyboards/labbe/labbeminiv1/labbeminiv1.c delete mode 100644 keyboards/latincompass/latinpad/latinpad.c delete mode 100644 keyboards/linworks/fave65h/fave65h.c delete mode 100644 keyboards/linworks/fave87h/fave87h.c diff --git a/keyboards/labbe/labbeminiv1/keyboard.json b/keyboards/labbe/labbeminiv1/keyboard.json index e1b94dfa4e..905a180d22 100644 --- a/keyboards/labbe/labbeminiv1/keyboard.json +++ b/keyboards/labbe/labbeminiv1/keyboard.json @@ -26,6 +26,15 @@ "diode_direction": "COL2ROW", "processor": "atmega32u4", "bootloader": "atmel-dfu", + "rgb_matrix": { + "driver": "ws2812", + "layout": [ + {"matrix": [0, 1], "x": 112, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [1, 1], "x": 112, "y": 64, "flags": 4}, + {"matrix": [1, 2], "x": 224, "y": 64, "flags": 4} + ] + }, "layouts": { "LAYOUT_wasd": { "layout": [ diff --git a/keyboards/labbe/labbeminiv1/labbeminiv1.c b/keyboards/labbe/labbeminiv1/labbeminiv1.c deleted file mode 100644 index a2ce367c5b..0000000000 --- a/keyboards/labbe/labbeminiv1/labbeminiv1.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - // Key Matrix to LED Index - {NO_LED, 0, NO_LED}, - {1, 2, 3} - }, - { - // LED Index to Physical Position - {112, 0}, - {0, 64}, {112, 64}, {224, 64}, - }, - { - // LED Index to Flag - 4, - 4, 4, 4 - } -}; -#endif \ No newline at end of file diff --git a/keyboards/latincompass/latin17rgb/keyboard.json b/keyboards/latincompass/latin17rgb/keyboard.json index 6dab2faf68..d6689f203a 100644 --- a/keyboards/latincompass/latin17rgb/keyboard.json +++ b/keyboards/latincompass/latin17rgb/keyboard.json @@ -61,6 +61,25 @@ "solid_reactive": true }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 48, "y": 32, "flags": 4}, + {"matrix": [0, 1], "x": 48, "y": 48, "flags": 4}, + {"matrix": [0, 2], "x": 64, "y": 48, "flags": 4}, + {"matrix": [0, 3], "x": 80, "y": 48, "flags": 1}, + {"matrix": [1, 0], "x": 16, "y": 32, "flags": 1}, + {"matrix": [1, 1], "x": 16, "y": 48, "flags": 1}, + {"matrix": [1, 2], "x": 32, "y": 48, "flags": 4}, + {"matrix": [1, 3], "x": 64, "y": 64, "flags": 1}, + {"matrix": [2, 0], "x": 80, "y": 16, "flags": 1}, + {"matrix": [2, 1], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 80, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 112, "y": 0, "flags": 1}, + {"matrix": [3, 1], "x": 128, "y": 0, "flags": 4}, + {"matrix": [3, 2], "x": 144, "y": 0, "flags": 4}, + {"matrix": [3, 3], "x": 160, "y": 0, "flags": 4}, + {"matrix": [4, 0], "x": 128, "y": 16, "flags": 4}, + {"matrix": [4, 1], "x": 144, "y": 16, "flags": 4} + ], "sleep": true }, "features": { diff --git a/keyboards/latincompass/latin17rgb/latin17rgb.c b/keyboards/latincompass/latin17rgb/latin17rgb.c index 54705bf4f7..c9120920eb 100644 --- a/keyboards/latincompass/latin17rgb/latin17rgb.c +++ b/keyboards/latincompass/latin17rgb/latin17rgb.c @@ -1,18 +1,18 @@ /* Copyright 2021 18438880 - * - * 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 . - */ + * + * 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 "quantum.h" #ifdef RGB_MATRIX_ENABLE @@ -31,7 +31,7 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C1_12, C2_12, C3_12},// BL5 {0, C1_13, C2_13, C3_13},// BL6 {0, C1_6, C2_6, C3_6},// BL7 - {0, C1_7, C2_7, C3_7},//BL8 + {0, C1_7, C2_7, C3_7},//BL8 {0, C1_8, C2_8, C3_8},// BL9 {0, C1_14, C2_14, C3_14},// BL10 {0, C1_15, C2_15, C3_15},// BL11 @@ -41,30 +41,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C9_3, C8_3, C7_3},//BL15 {0, C9_5, C8_5, C7_5},// BL16 {0, C9_6, C8_6, C7_6},// BL17 - -}; -led_config_t g_led_config = { - { - { 0, 1, 2, 3}, - { 4, 5, 6, 7}, - { 8, 9, 10, NO_LED}, - { 11, 12, 13, 14}, - { 15, 16, NO_LED, NO_LED}, - }, - { - { 48, 32},{ 48, 48},{ 64, 48},{ 80, 48}, - { 16, 32},{ 16, 48}, { 32, 48},{ 64, 64}, - { 80, 16},{ 64, 32},{ 80, 32}, - {112, 0},{128, 0},{144, 0},{160, 0}, - {128, 16},{144, 16} - }, - { - 4, 4, 4, 1, - 1, 1, 4, 1, - 1, 4, 4, - 1, 4, 4, 4, - 4, 4 - } }; #endif diff --git a/keyboards/latincompass/latin6rgb/keyboard.json b/keyboards/latincompass/latin6rgb/keyboard.json index d2708df399..6674b58205 100644 --- a/keyboards/latincompass/latin6rgb/keyboard.json +++ b/keyboards/latincompass/latin6rgb/keyboard.json @@ -39,6 +39,14 @@ "solid_reactive": true }, "driver": "is31fl3731", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [0, 1], "x": 0, "y": 64, "flags": 4}, + {"matrix": [0, 2], "x": 112, "y": 64, "flags": 4}, + {"matrix": [1, 0], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 1], "x": 112, "y": 32, "flags": 1}, + {"matrix": [1, 2], "x": 224, "y": 32, "flags": 4} + ], "sleep": true }, "matrix_pins": { diff --git a/keyboards/latincompass/latin6rgb/latin6rgb.c b/keyboards/latincompass/latin6rgb/latin6rgb.c index 779373ae8f..1176063c37 100644 --- a/keyboards/latincompass/latin6rgb/latin6rgb.c +++ b/keyboards/latincompass/latin6rgb/latin6rgb.c @@ -1,18 +1,18 @@ /* Copyright 2021 18438880 - * - * 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 . - */ + * + * 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 "quantum.h" #ifdef RGB_MATRIX_ENABLE @@ -31,19 +31,4 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C1_12, C2_12, C3_12},// BL5 {0, C1_13, C2_13, C3_13},// BL6 }; - -led_config_t g_led_config = { - { - { 0, 1, 2}, - { 3, 4, 5}, - }, - { - { 48, 32},{ 48, 48},{ 64, 48}, - { 80, 16},{ 64, 32},{ 80, 32} - }, - { - 4, 4, 4, - 1, 1, 4 - } -}; #endif diff --git a/keyboards/latincompass/latinpad/keyboard.json b/keyboards/latincompass/latinpad/keyboard.json index 3b4563b1ca..930cdadad8 100644 --- a/keyboards/latincompass/latinpad/keyboard.json +++ b/keyboards/latincompass/latinpad/keyboard.json @@ -40,7 +40,27 @@ "pixel_flow": true, "pixel_fractal": true }, - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 16, "flags": 1}, + {"matrix": [0, 1], "x": 74, "y": 16, "flags": 1}, + {"matrix": [0, 2], "x": 148, "y": 16, "flags": 1}, + {"matrix": [0, 3], "x": 224, "y": 16, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 32, "flags": 1}, + {"matrix": [1, 1], "x": 74, "y": 32, "flags": 1}, + {"matrix": [1, 2], "x": 148, "y": 32, "flags": 1}, + {"matrix": [1, 3], "x": 224, "y": 32, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 48, "flags": 1}, + {"matrix": [2, 1], "x": 74, "y": 48, "flags": 1}, + {"matrix": [2, 2], "x": 148, "y": 48, "flags": 1}, + {"matrix": [2, 3], "x": 224, "y": 48, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [3, 1], "x": 74, "y": 64, "flags": 1}, + {"matrix": [3, 2], "x": 148, "y": 64, "flags": 1}, + {"matrix": [3, 3], "x": 224, "y": 64, "flags": 1}, + {"matrix": [4, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [4, 1], "x": 74, "y": 0, "flags": 1} + ] }, "features": { "bootmagic": true, diff --git a/keyboards/latincompass/latinpad/latinpad.c b/keyboards/latincompass/latinpad/latinpad.c deleted file mode 100644 index b476b4c238..0000000000 --- a/keyboards/latincompass/latinpad/latinpad.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright 2020 latincompass - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 0, 1, 2, 3 }, - { 4, 5, 6, 7 }, - { 8, 9, 10, 11 }, - { 12, 13, 14, 15 }, - { 16, 17, NO_LED, NO_LED } -},{ - { 74, 21 }, { 37, 21 }, { 24, 21 }, { 18, 21 }, - { 74, 10 }, { 37, 10 }, { 28, 10 }, { 18, 10 }, - { 74, 7 }, { 37, 7 }, { 20, 7 }, { 18, 7 }, - { 74, 5 }, { 37, 5 }, { 22, 5 }, { 18, 5 }, - { 74, 5 }, { 37, 5 }, -},{ - 1, 1, 1, 1, - 1, 1, 1, 1, - 1, 1, 1, 1, - 1, 1, 1, 1, - 1, 1 -} }; -#endif diff --git a/keyboards/linworks/fave65h/fave65h.c b/keyboards/linworks/fave65h/fave65h.c deleted file mode 100644 index 01cf705e2a..0000000000 --- a/keyboards/linworks/fave65h/fave65h.c +++ /dev/null @@ -1,44 +0,0 @@ -/* -Copyright 2020 -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 "quantum.h" - - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52 }, - { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, - { 0, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, NO_LED, 17, 16 }, - { 51, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, NO_LED, 39, 40, 41 }, - { 50, 49, 48, NO_LED, NO_LED, NO_LED, 47, NO_LED, 46, NO_LED, 45, NO_LED, 44, 43, 42 } - }, { - // LED Index to Physical Position - {3, 32}, {8, 16}, {28, 16}, {44, 16}, {60, 16}, {76, 16}, {92, 16}, {108, 16}, {124, 16}, {140, 16}, - {156, 16}, {172, 16}, {188, 16}, {204, 16}, {224, 16}, {244, 16}, {244, 32}, {218, 32}, {192, 32}, {176, 32}, - {160, 32}, {144, 32}, {128, 32}, {112, 32}, {96, 32}, {80, 32}, {64, 32}, {48, 32}, {32, 32}, {40, 48}, - {56, 48}, {72, 48}, {88, 48}, {104, 48}, {120, 48}, {136, 48}, {152, 48}, {168, 48}, {184, 48}, {206, 48}, - {228, 48}, {244, 48}, {244, 64}, {228, 64}, {212, 64}, {186, 64}, {166, 64}, {96, 64}, {46, 64}, {22, 64}, - {0, 64}, {14, 48}, {244, 0}, {220, 3}, {196, 0}, {180, 0}, {164, 0}, {148, 0}, {132, 0}, {116, 0}, - {100, 0}, {84, 0}, {68, 0}, {52, 0}, {36, 0}, {20, 0}, {4, 0} - }, { - // LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1 - } -}; -#endif diff --git a/keyboards/linworks/fave65h/keyboard.json b/keyboards/linworks/fave65h/keyboard.json index 212bd0a37b..e92bb4abca 100644 --- a/keyboards/linworks/fave65h/keyboard.json +++ b/keyboards/linworks/fave65h/keyboard.json @@ -53,6 +53,75 @@ "animation": "cycle_all" }, "driver": "ws2812", + "layout": [ + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 188, "y": 16, "flags": 1}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 1}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 201, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [3, 1], "x": 34, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 49, "y": 48, "flags": 9}, + {"matrix": [3, 3], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 189, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 4}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 171, "y": 64, "flags": 4}, + {"matrix": [4, 8], "x": 152, "y": 64, "flags": 4}, + {"matrix": [4, 6], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 4}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 1}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 1}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1} + ], "max_brightness": 120, "sleep": true }, diff --git a/keyboards/linworks/fave87h/fave87h.c b/keyboards/linworks/fave87h/fave87h.c deleted file mode 100644 index c529e439b9..0000000000 --- a/keyboards/linworks/fave87h/fave87h.c +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright 2020 -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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 47, NO_LED, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62 }, - { 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30 }, - { 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, NO_LED, 0, NO_LED, NO_LED, NO_LED }, - { 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, NO_LED, 85, NO_LED, NO_LED, 86, NO_LED }, - { 73, 72, 71, NO_LED, NO_LED, 70, NO_LED, NO_LED, NO_LED, 69, 68, NO_LED, 67, 66, 65, 64, 63 } - }, { - // LED Index to Physical Position - { 190, 40 }, { 167, 40 }, { 153, 40 }, { 139, 40 }, { 125, 40 }, { 111, 40 }, { 97, 40 }, { 83, 40 }, { 69, 40 }, { 55, 40 }, - { 40, 40 }, { 26, 40 }, { 0, 41 }, { 5, 27 }, { 23, 27 }, { 37, 27 }, { 51, 27 }, { 65, 27 }, { 79, 27 }, { 93, 27 }, - { 107, 27 }, { 121, 27 }, { 135, 27 }, { 149, 27 }, { 163, 27 }, { 177, 27 }, { 195, 27 }, { 216, 27 }, { 230, 27 }, { 244, 27 }, - { 244, 15 }, { 230, 15 }, { 216, 15 }, { 191, 17 }, { 170, 15 }, { 156, 15 }, { 142, 15 }, { 128, 15 }, { 114, 15 }, { 100, 15 }, - { 86, 15 }, { 72, 15 }, { 58, 15 }, { 44, 15 }, { 30, 15 }, { 16, 15 }, { 2, 15 }, { 2, 0 }, { 30, 0 }, { 44, 0 }, - { 58, 0 }, { 72, 0 }, { 93, 0 }, { 107, 0 }, { 121, 0 }, { 135, 0 }, { 156, 0 }, { 170, 0 }, { 184, 0 }, { 198, 0 }, - { 216, 0 }, { 230, 0 }, { 244, 0 }, { 244, 64 }, { 230, 64 }, { 216, 64 }, { 197, 64 }, { 179, 64 }, { 162, 64 }, { 144, 64 }, - { 91, 64 }, { 39, 64 }, { 21, 64 }, { 4, 64 }, { 11, 52 }, { 33, 52 }, { 47, 52 }, { 62, 52 }, { 76, 52 }, { 90, 52 }, - { 104, 52 }, { 118, 52 }, { 132, 52 }, { 146, 52 }, { 160, 52 }, { 186, 52 }, { 230, 52 } - }, { - // LED Index to Flag - 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1 - } -}; -#endif diff --git a/keyboards/linworks/fave87h/keyboard.json b/keyboards/linworks/fave87h/keyboard.json index 4bb6e42de4..b3d125c770 100644 --- a/keyboards/linworks/fave87h/keyboard.json +++ b/keyboards/linworks/fave87h/keyboard.json @@ -56,6 +56,95 @@ "animation": "cycle_all" }, "driver": "ws2812", + "layout": [ + {"matrix": [3, 13], "x": 174, "y": 40, "flags": 1}, + {"matrix": [3, 11], "x": 153, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 127, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 114, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 101, "y": 40, "flags": 1}, + {"matrix": [3, 6], "x": 88, "y": 40, "flags": 1}, + {"matrix": [3, 5], "x": 75, "y": 40, "flags": 1}, + {"matrix": [3, 4], "x": 62, "y": 40, "flags": 1}, + {"matrix": [3, 3], "x": 49, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 40, "flags": 4}, + {"matrix": [3, 1], "x": 23, "y": 40, "flags": 4}, + {"matrix": [3, 0], "x": 5, "y": 40, "flags": 4}, + {"matrix": [2, 0], "x": 3, "y": 28, "flags": 1}, + {"matrix": [2, 1], "x": 20, "y": 28, "flags": 1}, + {"matrix": [2, 2], "x": 33, "y": 28, "flags": 1}, + {"matrix": [2, 3], "x": 46, "y": 28, "flags": 1}, + {"matrix": [2, 4], "x": 59, "y": 28, "flags": 4}, + {"matrix": [2, 5], "x": 72, "y": 28, "flags": 4}, + {"matrix": [2, 6], "x": 85, "y": 28, "flags": 4}, + {"matrix": [2, 7], "x": 98, "y": 28, "flags": 4}, + {"matrix": [2, 8], "x": 111, "y": 28, "flags": 4}, + {"matrix": [2, 9], "x": 124, "y": 28, "flags": 4}, + {"matrix": [2, 10], "x": 137, "y": 28, "flags": 4}, + {"matrix": [2, 11], "x": 150, "y": 28, "flags": 4}, + {"matrix": [2, 12], "x": 163, "y": 28, "flags": 4}, + {"matrix": [2, 13], "x": 179, "y": 28, "flags": 4}, + {"matrix": [2, 14], "x": 198, "y": 28, "flags": 4}, + {"matrix": [2, 15], "x": 211, "y": 28, "flags": 4}, + {"matrix": [2, 16], "x": 224, "y": 28, "flags": 1}, + {"matrix": [1, 16], "x": 224, "y": 15, "flags": 1}, + {"matrix": [1, 15], "x": 211, "y": 15, "flags": 1}, + {"matrix": [1, 14], "x": 198, "y": 15, "flags": 1}, + {"matrix": [1, 13], "x": 176, "y": 15, "flags": 1}, + {"matrix": [1, 12], "x": 156, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 143, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 130, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 117, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 104, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 91, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 78, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 65, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 3], "x": 39, "y": 15, "flags": 4}, + {"matrix": [1, 2], "x": 26, "y": 15, "flags": 4}, + {"matrix": [1, 1], "x": 13, "y": 15, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 15, "flags": 1}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 26, "y": 0, "flags": 1}, + {"matrix": [0, 3], "x": 39, "y": 0, "flags": 1}, + {"matrix": [0, 4], "x": 52, "y": 0, "flags": 9}, + {"matrix": [0, 5], "x": 65, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 85, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 98, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 111, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 124, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 143, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 156, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 169, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 182, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 198, "y": 0, "flags": 4}, + {"matrix": [0, 15], "x": 211, "y": 0, "flags": 4}, + {"matrix": [0, 16], "x": 224, "y": 0, "flags": 1}, + {"matrix": [5, 16], "x": 224, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 211, "y": 64, "flags": 4}, + {"matrix": [5, 14], "x": 198, "y": 64, "flags": 4}, + {"matrix": [5, 13], "x": 180, "y": 64, "flags": 4}, + {"matrix": [5, 12], "x": 164, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 148, "y": 64, "flags": 4}, + {"matrix": [5, 9], "x": 131, "y": 64, "flags": 4}, + {"matrix": [5, 5], "x": 83, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 34, "y": 64, "flags": 4}, + {"matrix": [5, 1], "x": 18, "y": 64, "flags": 4}, + {"matrix": [5, 0], "x": 2, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 8, "y": 52, "flags": 1}, + {"matrix": [4, 1], "x": 29, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 42, "y": 52, "flags": 1}, + {"matrix": [4, 3], "x": 55, "y": 52, "flags": 1}, + {"matrix": [4, 4], "x": 68, "y": 52, "flags": 1}, + {"matrix": [4, 5], "x": 81, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 94, "y": 52, "flags": 1}, + {"matrix": [4, 7], "x": 107, "y": 52, "flags": 1}, + {"matrix": [4, 8], "x": 120, "y": 52, "flags": 1}, + {"matrix": [4, 9], "x": 133, "y": 52, "flags": 1}, + {"matrix": [4, 10], "x": 146, "y": 52, "flags": 1}, + {"matrix": [4, 12], "x": 171, "y": 52, "flags": 1}, + {"matrix": [4, 15], "x": 211, "y": 52, "flags": 1} + ], "max_brightness": 120, "sleep": true }, From eda39f435698e41a043a4a21f48a75253f2fb879 Mon Sep 17 00:00:00 2001 From: Ryan Date: Wed, 10 Sep 2025 02:34:33 +1000 Subject: [PATCH 44/99] Update default OLED font (#25565) --- drivers/oled/glcdfont.c | 264 +++++++++++++++++++++++++++++-- platforms/avr/drivers/glcdfont.c | 23 --- 2 files changed, 252 insertions(+), 35 deletions(-) delete mode 100644 platforms/avr/drivers/glcdfont.c diff --git a/drivers/oled/glcdfont.c b/drivers/oled/glcdfont.c index 0e201d71ee..4099389691 100644 --- a/drivers/oled/glcdfont.c +++ b/drivers/oled/glcdfont.c @@ -1,16 +1,256 @@ +// Copyright 2025 QMK +// SPDX-License-Identifier: GPL-2.0-or-later WITH BSD-2-Clause + #include "progmem.h" -// Helidox 8x6 font with QMK Firmware Logo -// Online editor: http://teripom.x0.com/ - +/** + * QMK 6x8 Font for LCD and OLED displays + * + * Derived from the first half of the Adafruit GFX Library font: + * https://github.com/adafruit/Adafruit-GFX-Library + * + * The first 128 characters match that of code page 437, the character set used by the original IBM PC, which includes all printable ASCII characters. + * Each byte represents a column of 8 pixels, with the least significant bit being the top of the glyph. + * + * A large 21x3 character QMK Firmware logo is encoded from 0x80-0x94, 0xA0-0xB4, and 0xC0-0xD4. + * 2x2 character OS logos for Apple, Windows, Linux and Android are encoded from 0x95-0x9C and 0xB5-0xBC. + */ static const unsigned char font[] PROGMEM = { - 0x07, 0x08, 0x7F, 0x08, 0x07, 0x00, 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, - 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, - 0x72, 0x49, 0x49, 0x49, 0x46, 0x00, 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, 0x41, 0x21, 0x11, 0x09, 0x07, 0x00, 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, - 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x03, 0x07, 0x08, 0x00, 0x00, 0x20, 0x54, 0x54, 0x78, 0x40, 0x00, 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, 0x38, 0x44, 0x44, 0x44, 0x28, 0x00, - 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, 0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC, 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, - 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xF0, 0xF8, 0xF8, 0xFF, 0x38, 0xFF, 0xF8, 0xF8, 0x3F, 0xF8, 0xF8, 0xFF, 0x38, 0xFF, 0xF8, 0xF8, 0xF0, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xF8, 0xFC, 0x3E, - 0x1E, 0x06, 0x01, 0x00, 0x00, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xDF, 0xBF, 0xBF, 0x00, 0xBF, 0xBF, 0xDF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x60, 0x60, 0xE0, 0xBF, 0x1F, 0x00, 0x7F, 0x7F, 0x07, 0x1E, 0x38, 0x1E, 0x07, 0x7F, 0x7F, 0x00, 0x7F, 0x7F, 0x0E, 0x1F, 0x3B, 0x71, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x0C, 0x0C, 0x0C, 0x00, 0x7E, 0x7E, 0x00, 0x7F, 0x7E, 0x03, 0x03, 0x00, 0x7F, 0x7E, 0x03, 0x03, 0x7E, 0x7E, 0x03, 0x03, 0x7F, 0x7E, 0x00, 0x0F, - 0x3E, 0x70, 0x3C, 0x06, 0x3C, 0x70, 0x3E, 0x0F, 0x00, 0x32, 0x7B, 0x49, 0x49, 0x3F, 0x7E, 0x00, 0x7F, 0x7E, 0x03, 0x03, 0x00, 0x1E, 0x3F, 0x69, 0x69, 0x6F, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0F, 0x1F, 0x3F, 0x3C, 0x78, 0x70, 0x60, 0x00, 0x00, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00, 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x07, 0x0F, 0x0F, 0x7F, 0x0F, 0x7F, 0x0F, 0x0F, 0x7E, 0x0F, 0x0F, 0x7F, 0x0F, 0x7F, 0x0F, 0x0F, 0x07, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x7F, 0x08, 0x07, 0x00, // 0x00 NUL / Ψ + 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, // 0x01 SOH / ☺︎ + 0xC1, 0x94, 0xB0, 0x94, 0xC1, 0x00, // 0x02 STX / ☻ + 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, // 0x03 ETX / ♥︎ + 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, // 0x04 EOT / ♦︎ + 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, // 0x05 ENQ / ♣︎ + 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, // 0x06 ACK / ♠︎ + 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, // 0x07 BEL / • + 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, // 0x08 BS / ◘ + 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, // 0x09 HT / ○ + 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, // 0x0A LF / ◙ + 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, // 0x0B VT / ♂︎ + 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, // 0x0C FF / ♀︎ + 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, // 0x0D CR / ♪ + 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, // 0x0E SO / ♫ + 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, // 0x0F SI / ☼ + + 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, // 0x10 DLE / ► + 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, // 0x11 DC1 / ◄ + 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, // 0x12 DC2 / ↕︎ + 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, // 0x13 DC3 / ‼︎ + 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, // 0x14 DC4 / ¶ + 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, // 0x15 NAK / § + 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, // 0x16 SYN / ▬ + 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, // 0x17 ETB / ↨ + 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, // 0x18 CAN / ↑ + 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, // 0x19 EM / ↓ + 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, // 0x1A SUB / → + 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, // 0x1B ESC / ← + 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, // 0x1C FS / ∟ + 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, // 0x1D GS / ↔︎ + 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, // 0x1E RS / ▲ + 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, // 0x1F US / ▼ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x20 Space + 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, // 0x21 ! + 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, // 0x22 " + 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, // 0x23 # + 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, // 0x24 $ + 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, // 0x25 % + 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, // 0x26 & + 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, // 0x27 ' + 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, // 0x28 ( + 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, // 0x29 ) + 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, // 0x2A * + 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, // 0x2B + + 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, // 0x2C , + 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, // 0x2D - + 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, // 0x2E . + 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, // 0x2F / + + 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, // 0x30 0 + 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, // 0x31 1 + 0x72, 0x49, 0x49, 0x49, 0x46, 0x00, // 0x32 2 + 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, // 0x33 3 + 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, // 0x34 4 + 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, // 0x35 5 + 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, // 0x36 6 + 0x41, 0x21, 0x11, 0x09, 0x07, 0x00, // 0x37 7 + 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, // 0x38 8 + 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, // 0x39 9 + 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, // 0x3A : + 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, // 0x3B ; + 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, // 0x3C < + 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, // 0x3D = + 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, // 0x3E > + 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, // 0x3F ? + + 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, // 0x40 @ + 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, // 0x41 A + 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, // 0x42 B + 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, // 0x43 C + 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, // 0x44 D + 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, // 0x45 E + 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, // 0x46 F + 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, // 0x47 G + 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, // 0x48 H + 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, // 0x49 I + 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, // 0x4A J + 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, // 0x4B K + 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, // 0x4C L + 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, // 0x4D M + 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, // 0x4E N + 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, // 0x4F O + + 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, // 0x50 P + 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, // 0x51 Q + 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, // 0x52 R + 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, // 0x53 S + 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, // 0x54 T + 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, // 0x55 U + 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, // 0x56 V + 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, // 0x57 W + 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, // 0x58 X + 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, // 0x59 Y + 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, // 0x5A Z + 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, // 0x5B [ + 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, // 0x5C Backslash + 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, // 0x5D ] + 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, // 0x5E ^ + 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, // 0x5F _ + + 0x00, 0x03, 0x07, 0x08, 0x00, 0x00, // 0x60 ` + 0x20, 0x54, 0x54, 0x78, 0x40, 0x00, // 0x61 a + 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, // 0x62 b + 0x38, 0x44, 0x44, 0x44, 0x28, 0x00, // 0x63 c + 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, // 0x64 d + 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, // 0x65 e + 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, // 0x66 f + 0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00, // 0x67 g + 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, // 0x68 h + 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, // 0x69 i + 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, // 0x6A j + 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, // 0x6B k + 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, // 0x6C l + 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, // 0x6D m + 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, // 0x6E n + 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, // 0x6F o + + 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00, // 0x70 p + 0x18, 0x24, 0x24, 0x18, 0xFC, 0x00, // 0x71 q + 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, // 0x72 r + 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, // 0x73 s + 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, // 0x74 t + 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, // 0x75 u + 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, // 0x76 v + 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, // 0x77 w + 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, // 0x78 x + 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, // 0x79 y + 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, // 0x7A z + 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, // 0x7B { + 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, // 0x7C | + 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, // 0x7D } + 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, // 0x7E ~ + 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, // 0x7F DEL / ⌂ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x80 QMK Logo Top 1 + 0x00, 0x00, 0x80, 0x80, 0xE0, 0xF0, // 0x81 QMK Logo Top 2 + 0xF0, 0xFC, 0x70, 0xFC, 0xF0, 0x7C, // 0x82 QMK Logo Top 3 + 0xF0, 0xFC, 0x70, 0xFC, 0xF0, 0xF0, // 0x83 QMK Logo Top 4 + 0xE0, 0x80, 0x80, 0x00, 0x00, 0x00, // 0x84 QMK Logo Top 5 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x85 QMK Logo Top 6 + 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, // 0x86 QMK Logo Top 7 + 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, // 0x87 QMK Logo Top 8 + 0x00, 0x80, 0x80, 0x00, 0x80, 0x80, // 0x88 QMK Logo Top 9 + 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, // 0x89 QMK Logo Top 10 + 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, // 0x8A QMK Logo Top 11 + 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, // 0x8B QMK Logo Top 12 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x8C QMK Logo Top 13 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x8D QMK Logo Top 14 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x8E QMK Logo Top 15 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x8F QMK Logo Top 16 + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x90 QMK Logo Top 17 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x91 QMK Logo Top 18 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x92 QMK Logo Top 19 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x93 QMK Logo Top 20 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x94 QMK Logo Top 21 + 0x00, 0xC0, 0xF0, 0xF8, 0xFC, 0x3E, // 0x95 Apple Logo TL + 0x1E, 0x06, 0x01, 0x00, 0x00, 0x00, // 0x96 Apple Logo TR + 0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00, // 0x97 Windows Logo TL + 0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00, // 0x98 Windows Logo TR + 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, // 0x99 Linux Logo TL + 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, // 0x9A Linux Logo TR + 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, // 0x9B Android Logo TL + 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, // 0x9C Android Logo TR + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x9D + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x9E + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x9F + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xA0 QMK Logo Middle 1 + 0x00, 0x00, 0xAA, 0xAA, 0xFF, 0xFF, // 0xA1 QMK Logo Middle 2 + 0xFF, 0xFF, 0xE0, 0xDF, 0xDF, 0x00, // 0xA2 QMK Logo Middle 3 + 0xDF, 0xDF, 0xE0, 0xFF, 0xFF, 0xFF, // 0xA3 QMK Logo Middle 4 + 0xFF, 0xAA, 0xAA, 0x00, 0x00, 0x00, // 0xA4 QMK Logo Middle 5 + 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7F, // 0xA5 QMK Logo Middle 6 + 0xC1, 0xC1, 0xC1, 0x7F, 0x3E, 0x00, // 0xA6 QMK Logo Middle 7 + 0xFF, 0xFF, 0x0F, 0x3C, 0x78, 0x3C, // 0xA7 QMK Logo Middle 8 + 0x0F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, // 0xA8 QMK Logo Middle 9 + 0x1C, 0x3E, 0x77, 0xE3, 0xC1, 0x00, // 0xA9 QMK Logo Middle 10 + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, // 0xAA QMK Logo Middle 11 + 0x19, 0x19, 0x19, 0x00, 0xFD, 0xFD, // 0xAB QMK Logo Middle 12 + 0x00, 0xFE, 0xFC, 0x06, 0x06, 0x00, // 0xAC QMK Logo Middle 13 + 0xFE, 0xFC, 0x06, 0x06, 0xFC, 0xFC, // 0xAD QMK Logo Middle 14 + 0x06, 0x06, 0xFE, 0xFC, 0x00, 0x1E, // 0xAE QMK Logo Middle 15 + 0x7C, 0xE0, 0x78, 0x0C, 0x78, 0xE0, // 0xAF QMK Logo Middle 16 + + 0x7C, 0x1E, 0x00, 0x64, 0xF6, 0x92, // 0xB0 QMK Logo Middle 17 + 0x92, 0x7E, 0xFC, 0x00, 0xFE, 0xFC, // 0xB1 QMK Logo Middle 18 + 0x06, 0x06, 0x00, 0x3C, 0x7E, 0xD2, // 0xB2 QMK Logo Middle 19 + 0xD2, 0xDE, 0x4C, 0x00, 0x00, 0x00, // 0xB3 QMK Logo Middle 20 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xB4 QMK Logo Middle 21 + 0x00, 0x03, 0x0F, 0x1F, 0x3F, 0x3C, // 0xB5 Apple Logo BL + 0x78, 0x70, 0x60, 0x00, 0x00, 0x00, // 0xB6 Apple Logo BR + 0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00, // 0xB7 Windows Logo BL + 0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00, // 0xB8 Windows Logo BR + 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, // 0xB9 Linux Logo BL + 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, // 0xBA Linux Logo BR + 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, // 0xBB Android Logo BL + 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, // 0xBC Android Logo BR + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xBD + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xBE + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xBF + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xC0 QMK Logo Bottom 1 + 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, // 0xC1 QMK Logo Bottom 2 + 0x07, 0x1F, 0x07, 0x1F, 0x07, 0x1F, // 0xC2 QMK Logo Bottom 3 + 0x07, 0x1F, 0x07, 0x1F, 0x07, 0x07, // 0xC3 QMK Logo Bottom 4 + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xC4 QMK Logo Bottom 5 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xC5 QMK Logo Bottom 6 + 0x00, 0x00, 0x01, 0x03, 0x02, 0x00, // 0xC6 QMK Logo Bottom 7 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xC7 QMK Logo Bottom 8 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xC8 QMK Logo Bottom 9 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xC9 QMK Logo Bottom 10 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xCA QMK Logo Bottom 11 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xCB QMK Logo Bottom 12 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xCC QMK Logo Bottom 13 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xCD QMK Logo Bottom 14 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xCE QMK Logo Bottom 15 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xCF QMK Logo Bottom 16 + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD0 QMK Logo Bottom 17 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD1 QMK Logo Bottom 18 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD2 QMK Logo Bottom 19 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD3 QMK Logo Bottom 10 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD4 QMK Logo Bottom 21 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD5 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD6 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD7 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD8 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD9 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xDA + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xDB + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xDC + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xDD + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xDE + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // 0xDF }; diff --git a/platforms/avr/drivers/glcdfont.c b/platforms/avr/drivers/glcdfont.c deleted file mode 100644 index 57a21965de..0000000000 --- a/platforms/avr/drivers/glcdfont.c +++ /dev/null @@ -1,23 +0,0 @@ -// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. -// See gfxfont.h for newer custom bitmap font info. - -#include "progmem.h" - -// Standard ASCII 5x7 font - -static const unsigned char font[] PROGMEM = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, 0x18, 0x3C, 0x18, 0x00, 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, 0x18, 0x24, 0x18, 0x00, 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x26, 0x29, 0x79, 0x29, 0x26, 0x40, 0x7F, 0x05, 0x05, 0x07, 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, 0x66, 0x89, 0x95, 0x6A, 0x60, 0x60, 0x60, 0x60, 0x60, 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x08, 0x04, 0x7E, 0x04, 0x08, 0x10, 0x20, 0x7E, 0x20, 0x10, 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x1E, 0x10, 0x10, 0x10, 0x10, 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, - 0x30, 0x38, 0x3E, 0x38, 0x30, 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x23, 0x13, 0x08, 0x64, 0x62, 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x80, 0x70, 0x30, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x60, 0x60, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x72, 0x49, 0x49, 0x49, 0x46, 0x21, 0x41, 0x49, 0x4D, 0x33, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x27, 0x45, 0x45, 0x45, 0x39, 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x41, 0x21, 0x11, 0x09, 0x07, 0x36, 0x49, 0x49, 0x49, 0x36, 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x40, 0x34, 0x00, 0x00, - 0x00, 0x08, 0x14, 0x22, 0x41, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x41, 0x22, 0x14, 0x08, 0x02, 0x01, 0x59, 0x09, 0x06, 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x3E, 0x41, 0x41, 0x51, 0x73, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x26, 0x49, 0x49, 0x49, 0x32, 0x03, 0x01, 0x7F, 0x01, 0x03, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x63, 0x14, 0x08, 0x14, 0x63, 0x03, 0x04, 0x78, 0x04, 0x03, - 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x41, 0x41, 0x41, 0x7F, 0x04, 0x02, 0x01, 0x02, 0x04, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x03, 0x07, 0x08, 0x00, 0x20, 0x54, 0x54, 0x78, 0x40, 0x7F, 0x28, 0x44, 0x44, 0x38, 0x38, 0x44, 0x44, 0x44, 0x28, 0x38, 0x44, 0x44, 0x28, 0x7F, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x08, 0x7E, 0x09, 0x02, 0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x44, 0x7D, 0x40, 0x00, 0x20, 0x40, 0x40, 0x3D, 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, 0x7C, 0x04, 0x78, 0x04, 0x78, 0x7C, 0x08, 0x04, 0x04, 0x78, 0x38, 0x44, 0x44, 0x44, 0x38, 0xFC, 0x18, 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x18, 0xFC, 0x7C, 0x08, 0x04, 0x04, 0x08, 0x48, 0x54, 0x54, 0x54, 0x24, 0x04, 0x04, 0x3F, 0x44, 0x24, 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x3C, 0x40, 0x30, 0x40, 0x3C, - 0x44, 0x28, 0x10, 0x28, 0x44, 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x41, 0x36, 0x08, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x1E, 0xA1, 0xA1, 0x61, 0x12, 0x3A, 0x40, 0x40, 0x20, 0x7A, 0x38, 0x54, 0x54, 0x55, 0x59, 0x21, 0x55, 0x55, 0x79, 0x41, 0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut - 0x21, 0x55, 0x54, 0x78, 0x40, 0x20, 0x54, 0x55, 0x79, 0x40, 0x0C, 0x1E, 0x52, 0x72, 0x12, 0x39, 0x55, 0x55, 0x55, 0x59, 0x39, 0x54, 0x54, 0x54, 0x59, 0x39, 0x55, 0x54, 0x54, 0x58, 0x00, 0x00, 0x45, 0x7C, 0x41, 0x00, 0x02, 0x45, 0x7D, 0x42, 0x00, 0x01, 0x45, 0x7C, 0x40, 0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut - 0xF0, 0x28, 0x25, 0x28, 0xF0, 0x7C, 0x54, 0x55, 0x45, 0x00, 0x20, 0x54, 0x54, 0x7C, 0x54, 0x7C, 0x0A, 0x09, 0x7F, 0x49, 0x32, 0x49, 0x49, 0x49, 0x32, 0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut - 0x32, 0x4A, 0x48, 0x48, 0x30, 0x3A, 0x41, 0x41, 0x21, 0x7A, 0x3A, 0x42, 0x40, 0x20, 0x78, 0x00, 0x9D, 0xA0, 0xA0, 0x7D, 0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut - 0x3D, 0x40, 0x40, 0x40, 0x3D, 0x3C, 0x24, 0xFF, 0x24, 0x24, 0x48, 0x7E, 0x49, 0x43, 0x66, 0x2B, 0x2F, 0xFC, 0x2F, 0x2B, 0xFF, 0x09, 0x29, 0xF6, 0x20, 0xC0, 0x88, 0x7E, 0x09, 0x03, 0x20, 0x54, 0x54, 0x79, 0x41, 0x00, 0x00, 0x44, 0x7D, 0x41, 0x30, 0x48, 0x48, 0x4A, 0x32, 0x38, 0x40, 0x40, 0x22, 0x7A, 0x00, 0x7A, 0x0A, 0x0A, 0x72, 0x7D, 0x0D, 0x19, 0x31, 0x7D, 0x26, 0x29, 0x29, 0x2F, 0x28, 0x26, 0x29, 0x29, 0x29, 0x26, 0x30, 0x48, 0x4D, 0x40, 0x20, 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x38, 0x2F, 0x10, 0xC8, 0xAC, 0xBA, 0x2F, 0x10, 0x28, 0x34, 0xFA, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x08, 0x14, 0x2A, 0x14, 0x22, 0x22, 0x14, 0x2A, 0x14, 0x08, 0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old code - 0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block - 0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x10, 0x10, 0x10, 0xFF, 0x00, 0x14, 0x14, 0x14, 0xFF, 0x00, 0x10, 0x10, 0xFF, 0x00, 0xFF, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x14, 0x14, 0x14, 0xFC, 0x00, 0x14, 0x14, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x14, 0x14, 0xF4, 0x04, 0xFC, 0x14, 0x14, 0x17, 0x10, 0x1F, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x14, 0x14, 0x14, 0x1F, 0x00, 0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0x00, 0x00, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x00, 0x00, 0x00, 0xFF, 0x14, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0x10, 0x17, 0x00, 0x00, 0xFC, 0x04, 0xF4, 0x14, 0x14, 0x17, 0x10, 0x17, 0x14, 0x14, 0xF4, 0x04, 0xF4, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x00, 0xF7, 0x14, 0x14, 0x14, 0x17, 0x14, 0x10, 0x10, 0x1F, 0x10, 0x1F, - 0x14, 0x14, 0x14, 0xF4, 0x14, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x00, 0x00, 0x1F, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x14, 0x00, 0x00, 0x00, 0xFC, 0x14, 0x00, 0x00, 0xF0, 0x10, 0xF0, 0x10, 0x10, 0xFF, 0x10, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x14, 0x10, 0x10, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x38, 0x44, 0x44, 0x38, 0x44, 0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta - 0x7E, 0x02, 0x02, 0x06, 0x06, 0x02, 0x7E, 0x02, 0x7E, 0x02, 0x63, 0x55, 0x49, 0x41, 0x63, 0x38, 0x44, 0x44, 0x3C, 0x04, 0x40, 0x7E, 0x20, 0x1E, 0x20, 0x06, 0x02, 0x7E, 0x02, 0x02, 0x99, 0xA5, 0xE7, 0xA5, 0x99, 0x1C, 0x2A, 0x49, 0x2A, 0x1C, 0x4C, 0x72, 0x01, 0x72, 0x4C, 0x30, 0x4A, 0x4D, 0x4D, 0x30, 0x30, 0x48, 0x78, 0x48, 0x30, 0xBC, 0x62, 0x5A, 0x46, 0x3D, 0x3E, 0x49, 0x49, 0x49, 0x00, 0x7E, 0x01, 0x01, 0x01, 0x7E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x44, 0x44, 0x5F, 0x44, 0x44, 0x40, 0x51, 0x4A, 0x44, 0x40, 0x40, 0x44, 0x4A, 0x51, 0x40, 0x00, 0x00, 0xFF, 0x01, 0x03, 0xE0, 0x80, 0xFF, 0x00, 0x00, 0x08, 0x08, 0x6B, 0x6B, 0x08, 0x36, 0x12, 0x36, 0x24, 0x36, 0x06, 0x0F, 0x09, 0x0F, 0x06, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x30, 0x40, 0xFF, 0x01, 0x01, 0x00, 0x1F, 0x01, 0x01, 0x1E, 0x00, 0x19, 0x1D, 0x17, 0x12, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00 // #255 NBSP -}; From a91de722467afc2a080c8c1a7a6f904f1f361c07 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Wed, 10 Sep 2025 02:14:04 -0600 Subject: [PATCH 45/99] Migrate `g_led_config` to DD (K7) (#25616) --- .../kprepublic/bm40hsrgb/rev1/keyboard.json | 55 +++++++ keyboards/kprepublic/bm40hsrgb/rev1/rev1.c | 43 ------ .../kprepublic/bm60hsrgb/rev1/keyboard.json | 71 +++++++++ keyboards/kprepublic/bm60hsrgb/rev1/rev1.c | 50 ------ .../bm60hsrgb_ec/rev1/keyboard.json | 71 +++++++++ keyboards/kprepublic/bm60hsrgb_ec/rev1/rev1.c | 33 ---- .../bm60hsrgb_ec/rev2/keyboard.json | 67 ++++++++- keyboards/kprepublic/bm60hsrgb_ec/rev2/rev2.c | 32 ---- .../bm60hsrgb_iso/rev1/keyboard.json | 72 +++++++++ .../kprepublic/bm60hsrgb_iso/rev1/rev1.c | 52 ------- .../bm60hsrgb_poker/rev1/keyboard.json | 69 +++++++++ .../kprepublic/bm60hsrgb_poker/rev1/rev1.c | 52 ------- .../kprepublic/bm65hsrgb/rev1/keyboard.json | 77 +++++++++- keyboards/kprepublic/bm65hsrgb/rev1/rev1.c | 44 ------ .../bm65hsrgb_iso/rev1/keyboard.json | 76 ++++++++++ .../kprepublic/bm65hsrgb_iso/rev1/rev1.c | 38 ----- .../kprepublic/bm68hsrgb/rev1/keyboard.json | 76 ++++++++++ keyboards/kprepublic/bm68hsrgb/rev1/rev1.c | 25 --- .../kprepublic/bm68hsrgb/rev2/keyboard.json | 70 +++++++++ keyboards/kprepublic/bm68hsrgb/rev2/rev2.c | 20 --- keyboards/kprepublic/bm80hsrgb/bm80hsrgb.c | 142 ------------------ keyboards/kprepublic/bm80hsrgb/keyboard.json | 91 ++++++++++- keyboards/kprepublic/bm80v2/bm80v2.c | 24 --- keyboards/kprepublic/bm80v2/keyboard.json | 89 +++++++++++ keyboards/kprepublic/bm80v2_iso/bm80v2_iso.c | 24 --- keyboards/kprepublic/bm80v2_iso/keyboard.json | 90 +++++++++++ keyboards/kprepublic/bm980hsrgb/bm980hsrgb.c | 51 ------- keyboards/kprepublic/bm980hsrgb/keyboard.json | 102 ++++++++++++- 28 files changed, 1072 insertions(+), 634 deletions(-) delete mode 100755 keyboards/kprepublic/bm40hsrgb/rev1/rev1.c delete mode 100644 keyboards/kprepublic/bm60hsrgb/rev1/rev1.c delete mode 100644 keyboards/kprepublic/bm60hsrgb_iso/rev1/rev1.c delete mode 100644 keyboards/kprepublic/bm60hsrgb_poker/rev1/rev1.c delete mode 100644 keyboards/kprepublic/bm65hsrgb/rev1/rev1.c delete mode 100644 keyboards/kprepublic/bm80hsrgb/bm80hsrgb.c delete mode 100644 keyboards/kprepublic/bm980hsrgb/bm980hsrgb.c diff --git a/keyboards/kprepublic/bm40hsrgb/rev1/keyboard.json b/keyboards/kprepublic/bm40hsrgb/rev1/keyboard.json index 5cad0a013a..9dc347da6e 100644 --- a/keyboards/kprepublic/bm40hsrgb/rev1/keyboard.json +++ b/keyboards/kprepublic/bm40hsrgb/rev1/keyboard.json @@ -57,6 +57,61 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 20, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 40, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 61, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 81, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 101, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 122, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 142, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 162, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 183, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 21, "flags": 1}, + {"matrix": [1, 1], "x": 20, "y": 21, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 21, "flags": 4}, + {"matrix": [1, 3], "x": 61, "y": 21, "flags": 4}, + {"matrix": [1, 4], "x": 81, "y": 21, "flags": 4}, + {"matrix": [1, 5], "x": 101, "y": 21, "flags": 4}, + {"matrix": [1, 6], "x": 122, "y": 21, "flags": 4}, + {"matrix": [1, 7], "x": 142, "y": 21, "flags": 4}, + {"matrix": [1, 8], "x": 162, "y": 21, "flags": 4}, + {"matrix": [1, 9], "x": 183, "y": 21, "flags": 4}, + {"matrix": [1, 10], "x": 203, "y": 21, "flags": 4}, + {"matrix": [1, 11], "x": 224, "y": 21, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 42, "flags": 1}, + {"matrix": [2, 1], "x": 20, "y": 42, "flags": 4}, + {"matrix": [2, 2], "x": 40, "y": 42, "flags": 4}, + {"matrix": [2, 3], "x": 61, "y": 42, "flags": 4}, + {"matrix": [2, 4], "x": 81, "y": 42, "flags": 4}, + {"matrix": [2, 5], "x": 101, "y": 42, "flags": 4}, + {"matrix": [2, 6], "x": 122, "y": 42, "flags": 4}, + {"matrix": [2, 7], "x": 142, "y": 42, "flags": 4}, + {"matrix": [2, 8], "x": 162, "y": 42, "flags": 4}, + {"matrix": [2, 9], "x": 183, "y": 42, "flags": 4}, + {"matrix": [2, 10], "x": 203, "y": 42, "flags": 4}, + {"matrix": [2, 11], "x": 224, "y": 42, "flags": 1}, + {"matrix": [3, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [3, 1], "x": 20, "y": 64, "flags": 1}, + {"matrix": [3, 2], "x": 40, "y": 64, "flags": 1}, + {"matrix": [3, 3], "x": 61, "y": 64, "flags": 1}, + {"matrix": [3, 4], "x": 81, "y": 64, "flags": 1}, + {"matrix": [3, 5], "x": 111, "y": 64, "flags": 1}, + {"matrix": [3, 7], "x": 142, "y": 64, "flags": 1}, + {"matrix": [3, 8], "x": 162, "y": 64, "flags": 1}, + {"matrix": [3, 9], "x": 183, "y": 64, "flags": 1}, + {"matrix": [3, 10], "x": 203, "y": 64, "flags": 1}, + {"matrix": [3, 11], "x": 224, "y": 64, "flags": 1}, + {"x": 220, "y": 32, "flags": 2}, + {"x": 176, "y": 32, "flags": 2}, + {"x": 132, "y": 32, "flags": 2}, + {"x": 88, "y": 32, "flags": 2}, + {"x": 44, "y": 32, "flags": 2}, + {"x": 0, "y": 32, "flags": 2} + ] "max_brightness": 180, "sleep": true }, diff --git a/keyboards/kprepublic/bm40hsrgb/rev1/rev1.c b/keyboards/kprepublic/bm40hsrgb/rev1/rev1.c deleted file mode 100755 index f6df97ebf1..0000000000 --- a/keyboards/kprepublic/bm40hsrgb/rev1/rev1.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright 2020 tominabox1, Richard Goulter - * - * 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 "quantum.h" - -#if defined(RGB_MATRIX_ENABLE) -led_config_t g_led_config = { - { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, - {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23}, - {24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35}, - {36, 37, 38, 39, 40, 41, NO_LED, 42, 43, 44, 45, 46} - }, { - // LED Index to Physical Position - { 0, 0}, { 20, 0}, { 40, 0}, {61, 0}, {81, 0}, {101, 0}, {122, 0}, {142, 0}, {162, 0}, {183, 0}, {203, 0}, {224, 0}, - { 0, 21}, { 20, 21}, { 40, 21}, {61, 21}, {81, 21}, {101, 21}, {122, 21}, {142, 21}, {162, 21}, {183, 21}, {203, 21}, {224, 21}, - { 0, 42}, { 20, 42}, { 40, 42}, {61, 42}, {81, 42}, {101, 42}, {122, 42}, {142, 42}, {162, 42}, {183, 42}, {203, 42}, {224, 42}, - { 0, 64}, { 20, 64}, { 40, 64}, {61, 64}, {81, 64}, {111, 64}, {142, 64}, {162, 64}, {183, 64}, {203, 64}, {224, 64}, - {220, 32}, {176, 32}, {132, 32}, {88, 32}, {44, 32}, {0, 32} - }, { - // LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2 - } -}; - -#endif diff --git a/keyboards/kprepublic/bm60hsrgb/rev1/keyboard.json b/keyboards/kprepublic/bm60hsrgb/rev1/keyboard.json index 55ec5589d1..4dcf26964f 100644 --- a/keyboards/kprepublic/bm60hsrgb/rev1/keyboard.json +++ b/keyboards/kprepublic/bm60hsrgb/rev1/keyboard.json @@ -57,6 +57,77 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 11, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 198, "y": 32, "flags": 1}, + {"matrix": [3, 1], "x": 18, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 30, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 45, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 60, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 90, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 105, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 120, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 135, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 150, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 165, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 191, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 3, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 33, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 101, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 135, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 153, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1}, + {"x": 216, "y": 32, "flags": 2}, + {"x": 180, "y": 32, "flags": 2}, + {"x": 144, "y": 32, "flags": 2}, + {"x": 108, "y": 32, "flags": 2}, + {"x": 72, "y": 32, "flags": 2}, + {"x": 36, "y": 32, "flags": 2} + ] "max_brightness": 180 }, "rgblight": { diff --git a/keyboards/kprepublic/bm60hsrgb/rev1/rev1.c b/keyboards/kprepublic/bm60hsrgb/rev1/rev1.c deleted file mode 100644 index bec465b2e6..0000000000 --- a/keyboards/kprepublic/bm60hsrgb/rev1/rev1.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright 2020 MechMerlin - * - * 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 "quantum.h" - -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, - { 28, NO_LED, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 }, - { NO_LED, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 }, - { 54, 55, 56, NO_LED, NO_LED, NO_LED, 57, NO_LED, NO_LED, 58, 59, 60, 61, 62 } -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 202, 0 }, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , - { 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 }, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter - { 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 }, - // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, - { 18, 48 }, { 30, 48 }, { 45, 48 }, { 60, 48 }, { 75, 48 }, { 90, 48 }, { 105, 48 }, { 120, 48 }, { 135, 48 }, { 150, 48 }, { 165, 48 }, { 191, 48 }, { 210, 48 }, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 195, 64 }, { 210, 64 }, { 225, 64 }, - // UNDERGLOW - { 216, 32 }, { 180, 32 }, { 144, 32 }, { 108, 32 }, { 72, 32 }, { 36, 32 } -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - 1, 1, 1, 4, 1, 1, 1, 1, 1, - // UNDERGLOW - 2, 2, 2, 2, 2, 2 -} }; diff --git a/keyboards/kprepublic/bm60hsrgb_ec/rev1/keyboard.json b/keyboards/kprepublic/bm60hsrgb_ec/rev1/keyboard.json index 75e8333f7a..84e962e90c 100644 --- a/keyboards/kprepublic/bm60hsrgb_ec/rev1/keyboard.json +++ b/keyboards/kprepublic/bm60hsrgb_ec/rev1/keyboard.json @@ -51,6 +51,77 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 195, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 11, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 198, "y": 32, "flags": 1}, + {"matrix": [3, 1], "x": 18, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 30, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 45, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 60, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 90, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 105, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 120, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 135, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 150, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 165, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 191, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 3, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 33, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 101, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 135, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 153, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1}, + {"x": 216, "y": 32, "flags": 2}, + {"x": 180, "y": 32, "flags": 2}, + {"x": 144, "y": 32, "flags": 2}, + {"x": 108, "y": 32, "flags": 2}, + {"x": 72, "y": 32, "flags": 2}, + {"x": 36, "y": 32, "flags": 2} + ] "max_brightness": 140 }, "build": { diff --git a/keyboards/kprepublic/bm60hsrgb_ec/rev1/rev1.c b/keyboards/kprepublic/bm60hsrgb_ec/rev1/rev1.c index 26afae87ae..55b6df9233 100644 --- a/keyboards/kprepublic/bm60hsrgb_ec/rev1/rev1.c +++ b/keyboards/kprepublic/bm60hsrgb_ec/rev1/rev1.c @@ -14,39 +14,6 @@ * along with this program. If not, see . */ #include "quantum.h" -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, - { 28, NO_LED, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 }, - { NO_LED, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 }, - { 54, 55, 56, NO_LED, NO_LED, NO_LED, 57, NO_LED, NO_LED, 58, 59, 60, 61, 62 } -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 195, 0 }, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , - { 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 }, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter - { 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 }, - // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, - { 18, 48 }, { 30, 48 }, { 45, 48 }, { 60, 48 }, { 75, 48 }, { 90, 48 }, { 105, 48 }, { 120, 48 }, { 135, 48 }, { 150, 48 }, { 165, 48 }, { 191, 48 }, { 210, 48 }, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 195, 64 }, { 210, 64 }, { 225, 64 }, - // UNDERGLOW - { 216, 32 }, { 180, 32 }, { 144, 32 }, { 108, 32 }, { 72, 32 }, { 36, 32 } -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - 1, 1, 1, 4, 1, 1, 1, 1, 1, - // UNDERGLOW - 2, 2, 2, 2, 2, 2 -} }; bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { diff --git a/keyboards/kprepublic/bm60hsrgb_ec/rev2/keyboard.json b/keyboards/kprepublic/bm60hsrgb_ec/rev2/keyboard.json index dd43d36d71..bdff11563b 100644 --- a/keyboards/kprepublic/bm60hsrgb_ec/rev2/keyboard.json +++ b/keyboards/kprepublic/bm60hsrgb_ec/rev2/keyboard.json @@ -36,6 +36,71 @@ "solid_multisplash": true }, "driver": "is31fl3733", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 195, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 11, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 198, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 18, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 30, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 45, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 60, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 75, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 90, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 105, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 120, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 135, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 150, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 165, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 191, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 3, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 33, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 101, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 135, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 153, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1} + ] "max_brightness": 180, "sleep": true }, @@ -58,7 +123,7 @@ }, "default": { "animation": "rainbow_mood" - } + } }, "build": { "lto": true diff --git a/keyboards/kprepublic/bm60hsrgb_ec/rev2/rev2.c b/keyboards/kprepublic/bm60hsrgb_ec/rev2/rev2.c index eca53e9893..e8d7f69435 100644 --- a/keyboards/kprepublic/bm60hsrgb_ec/rev2/rev2.c +++ b/keyboards/kprepublic/bm60hsrgb_ec/rev2/rev2.c @@ -85,38 +85,6 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, SW5_CS16, SW4_CS16, SW6_CS16 } }; -led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, NO_LED, 40 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, NO_LED, 51, 52, 53 }, - { 54, 55, 56, NO_LED, NO_LED, 57, NO_LED, NO_LED, NO_LED, 58, 59, 60, 61, 62 } - }, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 195, 0 }, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , - { 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 }, - // Capslock, A, S, D, F, G, H, A, K, L, ;, ', Enter - { 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 }, - // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, - { 18, 48 }, { 30, 48 }, { 45, 48 }, { 60, 48 }, { 75, 48 }, { 90, 48 }, { 105, 48 }, { 120, 48 }, { 135, 48 }, { 150, 48 }, { 165, 48 }, { 191, 48 }, { 210, 48 }, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 195, 64 }, { 210, 64 }, { 225, 64 } -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Capslock, A, S, D, F, G, H, A, K, L, ;, ', Enter - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - 1, 1, 1, 4, 1, 1, 1, 1, 1 - } -}; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/kprepublic/bm60hsrgb_iso/rev1/keyboard.json b/keyboards/kprepublic/bm60hsrgb_iso/rev1/keyboard.json index b3bf6e44b2..9468251899 100644 --- a/keyboards/kprepublic/bm60hsrgb_iso/rev1/keyboard.json +++ b/keyboards/kprepublic/bm60hsrgb_iso/rev1/keyboard.json @@ -57,6 +57,78 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 11, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 198, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 3, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 22, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 33, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 63, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 78, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 93, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 108, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 123, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 138, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 153, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 168, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 194, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 213, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 3, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 33, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 101, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 135, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 153, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1}, + {"x": 216, "y": 32, "flags": 2}, + {"x": 180, "y": 32, "flags": 2}, + {"x": 144, "y": 32, "flags": 2}, + {"x": 108, "y": 32, "flags": 2}, + {"x": 72, "y": 32, "flags": 2}, + {"x": 36, "y": 32, "flags": 2} + ] "max_brightness": 180 }, "build": { diff --git a/keyboards/kprepublic/bm60hsrgb_iso/rev1/rev1.c b/keyboards/kprepublic/bm60hsrgb_iso/rev1/rev1.c deleted file mode 100644 index 80bc2e2283..0000000000 --- a/keyboards/kprepublic/bm60hsrgb_iso/rev1/rev1.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright 2020 markva - * - * 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 "quantum.h" - -#if defined(RGB_MATRIX_ENABLE) -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, - { 28, NO_LED, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54 }, - { 55, 56, 57, NO_LED, NO_LED, NO_LED, 58, NO_LED, NO_LED, 59, 60, 61, 62, 63} -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 202, 0 }, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , - { 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 }, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter - { 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 }, - // LShift, <, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, - { 3, 48 }, { 22, 48 }, { 33, 48 }, { 48, 48 }, { 63, 48 }, { 78, 48 }, { 93, 48 }, { 108, 48 }, { 123, 48 }, { 138, 48 }, { 153, 48 }, { 168, 48 }, { 194, 48 }, { 213, 48 }, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 195, 64 }, { 210, 64 }, { 225, 64 }, - // UNDERGLOW - { 216, 32 }, { 180, 32 }, { 144, 32 }, { 108, 32 }, { 72, 32 }, { 36, 32 } -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // LShift,<, Z, X, C, V, B, N, M, ,, ., Shift, Up, / - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - 1, 1, 1, 4, 1, 1, 1, 1, 1, - // UNDERGLOW - 2, 2, 2, 2, 2, 2 -} }; -#endif diff --git a/keyboards/kprepublic/bm60hsrgb_poker/rev1/keyboard.json b/keyboards/kprepublic/bm60hsrgb_poker/rev1/keyboard.json index 9619665e6d..00cf89b973 100644 --- a/keyboards/kprepublic/bm60hsrgb_poker/rev1/keyboard.json +++ b/keyboards/kprepublic/bm60hsrgb_poker/rev1/keyboard.json @@ -56,6 +56,75 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 11, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 198, "y": 32, "flags": 1}, + {"matrix": [3, 1], "x": 18, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 30, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 45, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 60, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 90, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 105, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 120, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 135, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 150, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 165, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 191, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 3, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 33, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 101, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 135, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 153, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1}, + {"x": 216, "y": 32, "flags": 2}, + {"x": 180, "y": 32, "flags": 2}, + {"x": 144, "y": 32, "flags": 2}, + {"x": 108, "y": 32, "flags": 2}, + {"x": 72, "y": 32, "flags": 2}, + {"x": 36, "y": 32, "flags": 2} + ] "max_brightness": 180 }, "rgblight": { diff --git a/keyboards/kprepublic/bm60hsrgb_poker/rev1/rev1.c b/keyboards/kprepublic/bm60hsrgb_poker/rev1/rev1.c deleted file mode 100644 index d5dd1f2f97..0000000000 --- a/keyboards/kprepublic/bm60hsrgb_poker/rev1/rev1.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright 2020 ipetepete - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, - { 28, NO_LED, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 }, - { NO_LED, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, NO_LED, 52 }, - { 53, 54, 55, NO_LED, NO_LED, NO_LED, 56, NO_LED, NO_LED, 57, 58, NO_LED, 59, 60 } -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 202, 0 }, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , - { 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 }, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter - { 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 }, - // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, - { 18, 48 }, { 30, 48 }, { 45, 48 }, { 60, 48 }, { 75, 48 }, { 90, 48 }, { 105, 48 }, { 120, 48 }, { 135, 48 }, { 150, 48 }, { 165, 48 }, { 191, 48 }, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 210, 64 }, { 225, 64 }, - // UNDERGLOW - { 216, 32 }, { 180, 32 }, { 144, 32 }, { 108, 32 }, { 72, 32 }, { 36, 32 } -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - 1, 1, 1, 4, 1, 1, 1, 1, - // UNDERGLOW - 2, 2, 2, 2, 2, 2 -} }; -#endif diff --git a/keyboards/kprepublic/bm65hsrgb/rev1/keyboard.json b/keyboards/kprepublic/bm65hsrgb/rev1/keyboard.json index d761606a5a..ae88446469 100644 --- a/keyboards/kprepublic/bm65hsrgb/rev1/keyboard.json +++ b/keyboards/kprepublic/bm65hsrgb/rev1/keyboard.json @@ -11,7 +11,82 @@ "pin": "E2" }, "rgb_matrix": { - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 201, "y": 32, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 1], "x": 9, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 189, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 208, "y": 48, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 94, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 148, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 163, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 193, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 208, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1}, + {"x": 185, "y": 45, "flags": 2}, + {"x": 160, "y": 45, "flags": 2}, + {"x": 125, "y": 45, "flags": 2}, + {"x": 95, "y": 45, "flags": 2}, + {"x": 60, "y": 45, "flags": 2}, + {"x": 25, "y": 45, "flags": 2} + ] }, "build": { "lto": true diff --git a/keyboards/kprepublic/bm65hsrgb/rev1/rev1.c b/keyboards/kprepublic/bm65hsrgb/rev1/rev1.c deleted file mode 100644 index 7f416bc9ae..0000000000 --- a/keyboards/kprepublic/bm65hsrgb/rev1/rev1.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright 2021 bytesapart - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, NO_LED, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43 }, - { NO_LED, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 }, - { 58, 59, 60, NO_LED, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, 63, NO_LED, 64, 65, 66 } -}, { - // LED Index to Physical Position - { 0, 0}, { 15, 0}, { 30, 0}, { 45, 0}, { 60, 0}, { 75, 0}, { 90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {202, 0}, {225, 0}, // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Delete - { 4, 16}, { 22, 16}, { 37, 16}, { 52, 16}, { 67, 16}, { 82, 16}, { 97, 16}, {112, 16}, {127, 16}, {142, 16}, {157, 16}, {172, 16}, {187, 16}, {206, 16}, {225, 16}, // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], backslash , Home - { 6, 32}, { 26, 32}, { 41, 32}, { 56, 32}, { 71, 32}, { 86, 32}, {101, 32}, {116, 32}, {131, 32}, {146, 32}, {161, 32}, {176, 32}, {201, 32}, {225, 32}, // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter, Page up - { 9, 48}, { 34, 48}, { 49, 48}, { 64, 48}, { 79, 48}, { 94, 48}, {109, 48}, {124, 48}, {139, 48}, {154, 48}, {169, 48}, {189, 48}, {208, 48}, {225, 48}, // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, Page Down - { 2, 64}, { 21, 64}, { 39, 64}, { 94, 64}, {148, 64}, {163, 64}, {193, 64}, {208, 64}, {225, 64}, // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - {185, 45}, {160, 45}, {125, 45}, { 95, 45}, { 60, 45}, { 25, 45} // UNDERGLOW -}, { - // LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Delete - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], backslash , Home - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter, Page up - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, Page Down - 1, 1, 1, 4, 1, 1, 1, 1, 1, // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - 2, 2, 2, 2, 2, 2 // UNDERGLOW -} }; -#endif diff --git a/keyboards/kprepublic/bm65hsrgb_iso/rev1/keyboard.json b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keyboard.json index 187816b660..d8fb49fb5f 100644 --- a/keyboards/kprepublic/bm65hsrgb_iso/rev1/keyboard.json +++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/keyboard.json @@ -82,6 +82,82 @@ "animation": "band_sat" }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 11, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 198, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 3, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 18, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 33, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 63, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 78, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 93, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 108, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 123, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 138, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 153, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 168, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 190, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 209, "y": 48, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 3, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 33, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 101, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 135, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 153, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 194, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 209, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1}, + {"x": 216, "y": 32, "flags": 2}, + {"x": 180, "y": 32, "flags": 2}, + {"x": 144, "y": 32, "flags": 2}, + {"x": 108, "y": 32, "flags": 2}, + {"x": 72, "y": 32, "flags": 2}, + {"x": 36, "y": 32, "flags": 2} + ] "max_brightness": 140 }, "build": { diff --git a/keyboards/kprepublic/bm65hsrgb_iso/rev1/rev1.c b/keyboards/kprepublic/bm65hsrgb_iso/rev1/rev1.c index 52c661d3f4..acf2aed98b 100644 --- a/keyboards/kprepublic/bm65hsrgb_iso/rev1/rev1.c +++ b/keyboards/kprepublic/bm65hsrgb_iso/rev1/rev1.c @@ -16,44 +16,6 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}, - { 30, NO_LED, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43}, - { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58}, - { 59, 60, NO_LED, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, 63, NO_LED, 64, 65, 66, 67} - -}, { - // LED Index to Physical Position - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Delete - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 202, 0 }, { 224, 0 }, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], Enter, Pos1 - { 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 }, { 224, 16 }, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', , PageUp - { 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 }, { 224, 32 }, - // LShift, <, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, PageDown - { 3, 48 }, { 18, 48 }, { 33, 48 }, { 48, 48 }, { 63, 48 }, { 78, 48 }, { 93, 48 }, { 108, 48 }, { 123, 48 }, { 138, 48 }, { 153, 48 }, { 168, 48 }, { 190, 48 }, { 209, 48 }, { 224, 48 }, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 194, 64 }, { 209, 64 },{ 224, 64 }, - // UNDERGLOW - { 216, 32 }, { 180, 32 }, { 144, 32 }, { 108, 32 }, { 72, 32 }, { 36, 32 } -}, { - // LED Index to Flag - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Delete - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], Enter, Pos1 - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', , PageUp - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // LShift, <, Z, X, C, V, B, N, M, ,, ., /, RShift, Up, PageDown - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - 1, 1, 1, 4, 1, 1, 1, 1, 1, - // UNDERGLOW - 2, 2, 2, 2, 2, 2 -} }; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { return false; diff --git a/keyboards/kprepublic/bm68hsrgb/rev1/keyboard.json b/keyboards/kprepublic/bm68hsrgb/rev1/keyboard.json index b5ca4d696d..3b379437c4 100644 --- a/keyboards/kprepublic/bm68hsrgb/rev1/keyboard.json +++ b/keyboards/kprepublic/bm68hsrgb/rev1/keyboard.json @@ -57,6 +57,82 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 1}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 201, "y": 32, "flags": 1}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 1], "x": 9, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 189, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 208, "y": 48, "flags": 1}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 94, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 148, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 163, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 178, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 193, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 208, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1}, + {"x": 185, "y": 45, "flags": 2}, + {"x": 160, "y": 45, "flags": 2}, + {"x": 125, "y": 45, "flags": 2}, + {"x": 95, "y": 45, "flags": 2}, + {"x": 60, "y": 45, "flags": 2}, + {"x": 25, "y": 45, "flags": 2} + ] "max_brightness": 180 }, "build": { diff --git a/keyboards/kprepublic/bm68hsrgb/rev1/rev1.c b/keyboards/kprepublic/bm68hsrgb/rev1/rev1.c index abe2b98c20..5484b15353 100644 --- a/keyboards/kprepublic/bm68hsrgb/rev1/rev1.c +++ b/keyboards/kprepublic/bm68hsrgb/rev1/rev1.c @@ -17,31 +17,6 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, NO_LED, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43 }, - { NO_LED, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 }, - { 58, 59, 60, NO_LED, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, 63, 64, 65, 66, 67 } -}, { - // LED Index to Physical Position - { 0, 0}, { 15, 0}, { 30, 0}, { 45, 0}, { 60, 0}, { 75, 0}, { 90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {202, 0}, {225, 0}, // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Delete - { 4, 16}, { 22, 16}, { 37, 16}, { 52, 16}, { 67, 16}, { 82, 16}, { 97, 16}, {112, 16}, {127, 16}, {142, 16}, {157, 16}, {172, 16}, {187, 16}, {206, 16}, {225, 16}, // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], backslash , Home - { 6, 32}, { 26, 32}, { 41, 32}, { 56, 32}, { 71, 32}, { 86, 32}, {101, 32}, {116, 32}, {131, 32}, {146, 32}, {161, 32}, {176, 32}, {201, 32}, {225, 32}, // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter, Page up - { 9, 48}, { 34, 48}, { 49, 48}, { 64, 48}, { 79, 48}, { 94, 48}, {109, 48}, {124, 48}, {139, 48}, {154, 48}, {169, 48}, {189, 48}, {208, 48}, {225, 48}, // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, Page Down - { 2, 64}, { 21, 64}, { 39, 64}, { 94, 64}, {148, 64}, {163, 64}, {178, 64}, {193, 64}, {208, 64}, {225, 64}, // Ctrl, GUI, Alt, Space, RAlt, FN, Ctrl, Left, Down, Right - {185, 45}, {160, 45}, {125, 45}, { 95, 45}, { 60, 45}, { 25, 45} // UNDERGLOW -}, { - // LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace, Delete - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], backslash , Home - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter, Page up - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, Page Down - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, // Ctrl, GUI, Alt, Space, RAlt, FN, Ctrl, Left, Down, Right - 2, 2, 2, 2, 2, 2 // UNDERGLOW -} }; - //CAPS backlight bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { diff --git a/keyboards/kprepublic/bm68hsrgb/rev2/keyboard.json b/keyboards/kprepublic/bm68hsrgb/rev2/keyboard.json index 28ad31304e..56f4df55fb 100644 --- a/keyboards/kprepublic/bm68hsrgb/rev2/keyboard.json +++ b/keyboards/kprepublic/bm68hsrgb/rev2/keyboard.json @@ -42,6 +42,76 @@ "solid_multisplash": true }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 53, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 68, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 83, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 98, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 113, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 143, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 158, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 173, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 188, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 201, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 79, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 94, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 109, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 124, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 139, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 154, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 169, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 189, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 96, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 150, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 165, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 180, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "max_brightness": 180, "sleep": true }, diff --git a/keyboards/kprepublic/bm68hsrgb/rev2/rev2.c b/keyboards/kprepublic/bm68hsrgb/rev2/rev2.c index 68068d7fb9..43f1eb56c0 100644 --- a/keyboards/kprepublic/bm68hsrgb/rev2/rev2.c +++ b/keyboards/kprepublic/bm68hsrgb/rev2/rev2.c @@ -92,26 +92,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW7_CS30, SW7_CS29, SW7_CS28} }; -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED, 42, 43 }, - { 44,NO_LED, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 }, - { 58, 59, 60, NO_LED, NO_LED,NO_LED, 61, NO_LED, NO_LED, 62, 63, 64, 65, 66, 67 } -}, { - {0,0},{15,0},{30,0},{45,0},{60,0},{75,0},{90,0},{105,0},{120,0},{135,0},{150,0},{165,0},{180,0},{203,0},{224,0}, - {4,16},{23,16},{38,16},{53,16},{68,16},{83,16},{98,16},{113,16},{128,16},{143,16},{158,16},{173,16},{188,16},{206,16},{224,16}, - {6,32},{26,32},{41,32},{56,32},{71,32},{86,32},{101,32},{116,32},{131,32},{146,32},{161,32},{176,32},{201,32},{224,32}, - {9,48},{34,48},{49,48},{64,48},{79,48},{94,48},{109,48},{124,48},{139,48},{154,48},{169,48},{189,48},{210,48},{224,48}, - { 2, 64 }, { 21, 64 }, { 39, 64 }, { 96, 64 }, { 150, 64 }, { 165, 64 }, { 180, 64 }, { 195, 64 }, { 210, 64 }, { 224, 64 } -}, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1 -} }; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { diff --git a/keyboards/kprepublic/bm80hsrgb/bm80hsrgb.c b/keyboards/kprepublic/bm80hsrgb/bm80hsrgb.c deleted file mode 100644 index 2ec020739a..0000000000 --- a/keyboards/kprepublic/bm80hsrgb/bm80hsrgb.c +++ /dev/null @@ -1,142 +0,0 @@ -/* Copyright 2021 peepeetee - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, NO_LED, 1, 2, 3, 4, NO_LED, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 }, - { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49 }, - { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 11, 62, NO_LED, NO_LED, NO_LED }, - /* ^ this one is f11*/ - { 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, NO_LED, 74, NO_LED, NO_LED, 75, NO_LED }, - { 76, 77, 78, NO_LED, NO_LED, 79, NO_LED, NO_LED, NO_LED, 80, 81, 82, 83, 84, NO_LED, 85, 86 } - -// K0_0, K0_2, K0_3, K0_4, K0_5, K0_7, K0_8, K0_9, K0_A, K0_B, K0_C, K3_C, K0_D, K0_E, K0_F, K0_10, -// K1_0, K1_1, K1_2, K1_3, K1_4, K1_5, K1_6, K1_7, K1_8, K1_9, K1_A, K1_B, K1_C, K1_D, K1_E, K1_F, K1_10, -// K2_0, K2_1, K2_2, K2_3, K2_4, K2_5, K2_6, K2_7, K2_8, K2_9, K2_A, K2_B, K2_C, K2_D, K2_E, K2_F, K2_10, -// K3_0, K3_1, K3_2, K3_3, K3_4, K3_5, K3_6, K3_7, K3_8, K3_9, K3_A, K3_B, K3_D, -// K4_0, K4_1, K4_2, K4_3, K4_4, K4_5, K4_6, K4_7, K4_8, K4_9, K4_A, K4_C, K4_F, -// K5_0, K5_1, K5_2, K5_5, K5_9, K5_A, K5_B, K5_C, K5_D, K5_F, K5_10 - - -// K0_0, KC_NO, K0_2, K0_3, K0_4, K0_5, KC_NO, K0_7, K0_8, K0_9, K0_A, K0_B, K0_C, K0_D, K0_E, K0_F, K0_10 -// K1_0, K1_1, K1_2, K1_3, K1_4, K1_5, K1_6, K1_7, K1_8, K1_9, K1_A, K1_B, K1_C, K1_D, K1_E, K1_F, K1_10 -// K2_0, K2_1, K2_2, K2_3, K2_4, K2_5, K2_6, K2_7, K2_8, K2_9, K2_A, K2_B, K2_C, K2_D, K2_E, K2_F, K2_10 -// K3_0, K3_1, K3_2, K3_3, K3_4, K3_5, K3_6, K3_7, K3_8, K3_9, K3_A, K3_B, K3_C, K3_D, KC_NO, KC_NO, KC_NO -// K4_0, K4_1, K4_2, K4_3, K4_4, K4_5, K4_6, K4_7, K4_8, K4_9, K4_A, KC_NO, K4_C, KC_NO, KC_NO, K4_F, KC_NO -// K5_0, K5_1, K5_2, KC_NO, KC_NO, K5_5, KC_NO, KC_NO, KC_NO, K5_9, K5_A, K5_B, K5_C, K5_D, KC_NO, K5_F, K5_10 - - /* - * ┌───┐   ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ - * │ 0 │   │ 1 │ 2 │ 3 │ 4 │ │ 5 │ 6 │ 7 │ 8 │ │ 9 │ 10│ 11│ 12│ │ 13│ 14│ 15│ - * └───┘   └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ - * │ 16│ 17│ 18│ 19│ 20│ 21│ 22│ 23│ 24│ 25│ 26│ 27│ 28│  29 │ │ 30│ 31│ 32│ - * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ - * │  33 │ 34│ 35│ 36│ 37│ 38│ 39│ 40│ 41│ 42│ 43│ 44│ 45│  46 │ │ 47│ 48│ 49│ - * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ - * │ 50  │ 51│ 52│ 53│ 54│ 55│ 56│ 57│ 58│ 59│ 60│ 61│   62  │ - * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤     ┌───┐ - * │ 63   │ 64│ 65│ 66│ 67│ 68│ 69│ 70│ 71│ 72│ 73│    74  │     │ 75│ - * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ - * │ 76 │ 77 │ 78 │           79           │ 80 │ 81 │ 82 │ 83 │ │ 84│ 85│ 86│ - * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ - */ - -}, { - // LED Index to Physical Position - { 7, 5 }, { 31, 5 }, { 43, 5 }, { 55, 5 }, { 67, 5 }, { 85, 5 }, { 97, 5 }, { 109, 5 }, { 121, 5 }, { 139, 5 }, { 151, 5 }, { 163, 5 }, { 175, 5 }, { 193, 5 }, { 205, 5 }, { 217, 5 }, - /* - * ┌───┐   ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ - * │ 0 │   │ 1 │ 2 │ 3 │ 4 │ │ 5 │ 6 │ 7 │ 8 │ │ 9 │ 10│ 11│ 12│ │ 13│ 14│ 15│ - * └───┘   └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ - */ - { 7, 20 }, { 19, 20 }, { 31, 20 }, { 43, 20 }, { 55, 20 }, { 67, 20 }, { 79, 20 }, { 91, 20 }, { 103, 20 }, { 115, 20 }, { 127, 20 }, { 139, 20 }, { 151, 20 }, { 169, 20 }, { 193, 20 }, { 205, 20 }, { 217, 20 }, - /* - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ - * │ 16│ 17│ 18│ 19│ 20│ 21│ 22│ 23│ 24│ 25│ 26│ 27│ 28│  29 │ │ 30│ 31│ 32│ - * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───────┘ └───┴───┴───┘ - */ - { 10, 30 }, { 25, 30 }, { 37, 30 }, { 49, 30 }, { 61, 30 }, { 73, 30 }, { 85, 30 }, { 97, 30 }, { 109, 30 }, { 121, 30 }, { 133, 30 }, { 145, 30 }, { 157, 30 }, { 172, 30 }, { 193, 30 }, { 205, 30 }, { 217, 30 }, - /* - * ┌─────┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐ ┌───┬───┬───┐ - * │  33 │ 34│ 35│ 36│ 37│ 38│ 39│ 40│ 41│ 42│ 43│ 44│ 45│  46 │ │ 47│ 48│ 49│ - * └─────┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴─────┘ └───┴───┴───┘ - */ - { 11, 39 }, { 28, 39 }, { 40, 39 }, { 52, 39 }, { 64, 39 }, { 76, 39 }, { 88, 39 }, { 100, 39 }, { 112, 39 }, { 124, 39 }, { 136, 39 }, { 148, 39 }, { 168, 39 }, - /* - * ┌──────┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬────────┐ - * │ 50  │ 51│ 52│ 53│ 54│ 55│ 56│ 57│ 58│ 59│ 60│ 61│   62  │ - * └──────┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴────────┘ - */ - { 14, 49 }, { 34, 49 }, { 46, 49 }, { 58, 49 }, { 70, 49 }, { 82, 49 }, { 94, 49 }, { 106, 49 }, { 118, 49 }, { 130, 49 }, { 142, 49 }, { 165, 49 }, { 205, 49 }, - /* - * ┌────────┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────────┐     ┌───┐ - * │ 63   │ 64│ 65│ 66│ 67│ 68│ 69│ 70│ 71│ 72│ 73│    74  │     │ 75│ - * └────────┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴──────────┘  └───┘ - */ - { 8, 59 }, { 23, 59 }, { 38, 59 }, { 83, 59 }, { 129, 59 }, { 144, 59 }, { 159, 59 }, { 174, 59 }, { 193, 59 }, { 205, 59 }, { 217, 59 } - /* - * ┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐ ┌───┬───┬───┐ - * │ 76 │ 77 │ 78 │           79           │ 80 │ 81 │ 82 │ 83 │ │ 84│ 85│ 86│ - * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ - */ -}, { - // LED Index to Flag - 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 1, 9/*scroll lock*/, 1, - /* - * ┌───┐   ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ - * │ 0 │   │ 1 │ 2 │ 3 │ 4 │ │ 5 │ 6 │ 7 │ 8 │ │ 9 │ 10│ 11│ 12│ │ 13│ 14│ 15│ - * └───┘   └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ - */ - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - /* - * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ - * │ 16│ 17│ 18│ 19│ 20│ 21│ 22│ 23│ 24│ 25│ 26│ 27│ 28│  29 │ │ 30│ 31│ 32│ - * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───────┘ └───┴───┴───┘ - */ - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - /* - * ┌─────┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐ ┌───┬───┬───┐ - * │  33 │ 34│ 35│ 36│ 37│ 38│ 39│ 40│ 41│ 42│ 43│ 44│ 45│  46 │ │ 47│ 48│ 49│ - * └─────┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴─────┘ └───┴───┴───┘ - */ - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - //caps lock is 1 instead of 1+8, this board has a dedicated led - /* - * ┌──────┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬────────┐ - * │ 50  │ 51│ 52│ 53│ 54│ 55│ 56│ 57│ 58│ 59│ 60│ 61│   62  │ - * └──────┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴────────┘ - */ - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - /* - * ┌────────┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────────┐     ┌───┐ - * │ 63   │ 64│ 65│ 66│ 67│ 68│ 69│ 70│ 71│ 72│ 73│    74  │     │ 75│ - * └────────┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴──────────┘  └───┘ - */ - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1 - /* - * ┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐ ┌───┬───┬───┐ - * │ 76 │ 77 │ 78 │           79           │ 80 │ 81 │ 82 │ 83 │ │ 84│ 85│ 86│ - * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ - */ -} }; - - -#endif diff --git a/keyboards/kprepublic/bm80hsrgb/keyboard.json b/keyboards/kprepublic/bm80hsrgb/keyboard.json index 1a1b1a6ed3..4acf4be5e8 100644 --- a/keyboards/kprepublic/bm80hsrgb/keyboard.json +++ b/keyboards/kprepublic/bm80hsrgb/keyboard.json @@ -55,7 +55,96 @@ "solid_splash": true, "solid_multisplash": true }, - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 7, "y": 5, "flags": 1}, + {"matrix": [0, 2], "x": 31, "y": 5, "flags": 4}, + {"matrix": [0, 3], "x": 43, "y": 5, "flags": 4}, + {"matrix": [0, 4], "x": 55, "y": 5, "flags": 4}, + {"matrix": [0, 5], "x": 67, "y": 5, "flags": 4}, + {"matrix": [0, 7], "x": 85, "y": 5, "flags": 1}, + {"matrix": [0, 8], "x": 97, "y": 5, "flags": 1}, + {"matrix": [0, 9], "x": 109, "y": 5, "flags": 1}, + {"matrix": [0, 10], "x": 121, "y": 5, "flags": 1}, + {"matrix": [0, 11], "x": 139, "y": 5, "flags": 4}, + {"matrix": [0, 12], "x": 151, "y": 5, "flags": 4}, + {"matrix": [3, 12], "x": 163, "y": 5, "flags": 4}, + {"matrix": [0, 13], "x": 175, "y": 5, "flags": 4}, + {"matrix": [0, 14], "x": 193, "y": 5, "flags": 1}, + {"matrix": [0, 15], "x": 205, "y": 5, "flags": 9}, + {"matrix": [0, 16], "x": 217, "y": 5, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 20, "flags": 4}, + {"matrix": [1, 1], "x": 19, "y": 20, "flags": 4}, + {"matrix": [1, 2], "x": 31, "y": 20, "flags": 4}, + {"matrix": [1, 3], "x": 43, "y": 20, "flags": 4}, + {"matrix": [1, 4], "x": 55, "y": 20, "flags": 4}, + {"matrix": [1, 5], "x": 67, "y": 20, "flags": 4}, + {"matrix": [1, 6], "x": 79, "y": 20, "flags": 4}, + {"matrix": [1, 7], "x": 91, "y": 20, "flags": 4}, + {"matrix": [1, 8], "x": 103, "y": 20, "flags": 4}, + {"matrix": [1, 9], "x": 115, "y": 20, "flags": 4}, + {"matrix": [1, 10], "x": 127, "y": 20, "flags": 4}, + {"matrix": [1, 11], "x": 139, "y": 20, "flags": 4}, + {"matrix": [1, 12], "x": 151, "y": 20, "flags": 4}, + {"matrix": [1, 13], "x": 169, "y": 20, "flags": 1}, + {"matrix": [1, 14], "x": 193, "y": 20, "flags": 1}, + {"matrix": [1, 15], "x": 205, "y": 20, "flags": 1}, + {"matrix": [1, 16], "x": 217, "y": 20, "flags": 1}, + {"matrix": [2, 0], "x": 10, "y": 30, "flags": 1}, + {"matrix": [2, 1], "x": 25, "y": 30, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 30, "flags": 4}, + {"matrix": [2, 3], "x": 49, "y": 30, "flags": 4}, + {"matrix": [2, 4], "x": 61, "y": 30, "flags": 4}, + {"matrix": [2, 5], "x": 73, "y": 30, "flags": 4}, + {"matrix": [2, 6], "x": 85, "y": 30, "flags": 4}, + {"matrix": [2, 7], "x": 97, "y": 30, "flags": 4}, + {"matrix": [2, 8], "x": 109, "y": 30, "flags": 4}, + {"matrix": [2, 9], "x": 121, "y": 30, "flags": 4}, + {"matrix": [2, 10], "x": 133, "y": 30, "flags": 4}, + {"matrix": [2, 11], "x": 145, "y": 30, "flags": 4}, + {"matrix": [2, 12], "x": 157, "y": 30, "flags": 4}, + {"matrix": [2, 13], "x": 172, "y": 30, "flags": 4}, + {"matrix": [2, 14], "x": 193, "y": 30, "flags": 1}, + {"matrix": [2, 15], "x": 205, "y": 30, "flags": 1}, + {"matrix": [2, 16], "x": 217, "y": 30, "flags": 1}, + {"matrix": [3, 0], "x": 11, "y": 39, "flags": 1}, + {"matrix": [3, 1], "x": 28, "y": 39, "flags": 4}, + {"matrix": [3, 2], "x": 40, "y": 39, "flags": 4}, + {"matrix": [3, 3], "x": 52, "y": 39, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 39, "flags": 4}, + {"matrix": [3, 5], "x": 76, "y": 39, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 39, "flags": 4}, + {"matrix": [3, 7], "x": 100, "y": 39, "flags": 4}, + {"matrix": [3, 8], "x": 112, "y": 39, "flags": 4}, + {"matrix": [3, 9], "x": 124, "y": 39, "flags": 4}, + {"matrix": [3, 10], "x": 136, "y": 39, "flags": 4}, + {"matrix": [3, 11], "x": 148, "y": 39, "flags": 4}, + {"matrix": [3, 13], "x": 168, "y": 39, "flags": 1}, + {"matrix": [4, 0], "x": 14, "y": 49, "flags": 1}, + {"matrix": [4, 1], "x": 34, "y": 49, "flags": 4}, + {"matrix": [4, 2], "x": 46, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 58, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 70, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 82, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 94, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 106, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 118, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 130, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 142, "y": 49, "flags": 4}, + {"matrix": [4, 12], "x": 165, "y": 49, "flags": 1}, + {"matrix": [4, 15], "x": 205, "y": 49, "flags": 1}, + {"matrix": [5, 0], "x": 8, "y": 59, "flags": 1}, + {"matrix": [5, 1], "x": 23, "y": 59, "flags": 1}, + {"matrix": [5, 2], "x": 38, "y": 59, "flags": 1}, + {"matrix": [5, 5], "x": 83, "y": 59, "flags": 4}, + {"matrix": [5, 9], "x": 129, "y": 59, "flags": 1}, + {"matrix": [5, 10], "x": 144, "y": 59, "flags": 1}, + {"matrix": [5, 11], "x": 159, "y": 59, "flags": 1}, + {"matrix": [5, 12], "x": 174, "y": 59, "flags": 1}, + {"matrix": [5, 13], "x": 193, "y": 59, "flags": 1}, + {"matrix": [5, 15], "x": 205, "y": 59, "flags": 1}, + {"matrix": [5, 16], "x": 217, "y": 59, "flags": 1} + ] }, "build": { "lto": true diff --git a/keyboards/kprepublic/bm80v2/bm80v2.c b/keyboards/kprepublic/bm80v2/bm80v2.c index 9c1b71d057..94a8032a17 100644 --- a/keyboards/kprepublic/bm80v2/bm80v2.c +++ b/keyboards/kprepublic/bm80v2/bm80v2.c @@ -112,30 +112,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW8_CS36, SW8_CS35, SW8_CS34} }; -led_config_t g_led_config = { { - { 0, NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 }, - { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49 }, - { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, NO_LED, NO_LED, NO_LED, NO_LED }, - { 63, NO_LED, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, NO_LED, NO_LED, 75, NO_LED }, - { 76, 77, 78, NO_LED,NO_LED, 79, NO_LED, NO_LED, NO_LED, NO_LED, 80, 81, 82, 83, 84, 85, 86 } -}, -{ - { 7, 5 }, { 31, 5 }, { 43, 5 }, { 55, 5 }, { 67, 5 }, { 85, 5 }, { 97, 5 }, { 109, 5 }, { 121, 5 }, { 139, 5 }, { 151, 5 }, { 163, 5 }, { 175, 5 }, { 193, 5 }, { 205, 5 }, { 217, 5 }, - { 7, 20 }, { 19, 20 }, { 31, 20 }, { 43, 20 }, { 55, 20 }, { 67, 20 }, { 79, 20 }, { 91, 20 }, { 103, 20 }, { 115, 20 }, { 127, 20 }, { 139, 20 }, { 151, 20 }, { 169, 20 }, { 193, 20 }, { 205, 20 }, { 217, 20 }, - { 10, 30 }, { 25, 30 }, { 37, 30 }, { 49, 30 }, { 61, 30 }, { 73, 30 }, { 85, 30 }, { 97, 30 }, { 109, 30 }, { 121, 30 }, { 133, 30 }, { 145, 30 }, { 157, 30 }, { 172, 30 }, { 193, 30 }, { 205, 30 }, { 217, 30 }, - { 11, 39 }, { 28, 39 }, { 40, 39 }, { 52, 39 }, { 64, 39 }, { 76, 39 }, { 88, 39 }, { 100, 39 }, { 112, 39 }, { 124, 39 }, { 136, 39 }, { 148, 39 }, { 168, 39 }, - { 17, 49 }, { 34, 49 }, { 46, 49 }, { 58, 49 }, { 70, 49 }, { 82, 49 }, { 94, 49 }, { 106, 49 }, { 118, 49 }, { 130, 49 }, { 142, 49 }, { 165, 49 }, { 205, 49 }, - { 8, 59 }, { 23, 59 }, { 38, 59 }, { 83, 59 }, { 129, 59 }, { 144, 59 }, { 159, 59 }, { 174, 59 }, { 193, 59 }, { 205, 59 }, { 217, 59 } -}, -{ 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1 -} }; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { diff --git a/keyboards/kprepublic/bm80v2/keyboard.json b/keyboards/kprepublic/bm80v2/keyboard.json index 43de1e4933..a5da2324a9 100644 --- a/keyboards/kprepublic/bm80v2/keyboard.json +++ b/keyboards/kprepublic/bm80v2/keyboard.json @@ -45,6 +45,95 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 7, "y": 5, "flags": 1}, + {"matrix": [0, 2], "x": 31, "y": 5, "flags": 4}, + {"matrix": [0, 3], "x": 43, "y": 5, "flags": 4}, + {"matrix": [0, 4], "x": 55, "y": 5, "flags": 4}, + {"matrix": [0, 5], "x": 67, "y": 5, "flags": 4}, + {"matrix": [0, 6], "x": 85, "y": 5, "flags": 1}, + {"matrix": [0, 7], "x": 97, "y": 5, "flags": 1}, + {"matrix": [0, 8], "x": 109, "y": 5, "flags": 1}, + {"matrix": [0, 9], "x": 121, "y": 5, "flags": 1}, + {"matrix": [0, 10], "x": 139, "y": 5, "flags": 4}, + {"matrix": [0, 11], "x": 151, "y": 5, "flags": 4}, + {"matrix": [0, 12], "x": 163, "y": 5, "flags": 4}, + {"matrix": [0, 13], "x": 175, "y": 5, "flags": 4}, + {"matrix": [0, 14], "x": 193, "y": 5, "flags": 1}, + {"matrix": [0, 15], "x": 205, "y": 5, "flags": 1}, + {"matrix": [0, 16], "x": 217, "y": 5, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 20, "flags": 4}, + {"matrix": [1, 1], "x": 19, "y": 20, "flags": 4}, + {"matrix": [1, 2], "x": 31, "y": 20, "flags": 4}, + {"matrix": [1, 3], "x": 43, "y": 20, "flags": 4}, + {"matrix": [1, 4], "x": 55, "y": 20, "flags": 4}, + {"matrix": [1, 5], "x": 67, "y": 20, "flags": 4}, + {"matrix": [1, 6], "x": 79, "y": 20, "flags": 4}, + {"matrix": [1, 7], "x": 91, "y": 20, "flags": 4}, + {"matrix": [1, 8], "x": 103, "y": 20, "flags": 4}, + {"matrix": [1, 9], "x": 115, "y": 20, "flags": 4}, + {"matrix": [1, 10], "x": 127, "y": 20, "flags": 4}, + {"matrix": [1, 11], "x": 139, "y": 20, "flags": 4}, + {"matrix": [1, 12], "x": 151, "y": 20, "flags": 4}, + {"matrix": [1, 13], "x": 169, "y": 20, "flags": 1}, + {"matrix": [1, 14], "x": 193, "y": 20, "flags": 1}, + {"matrix": [1, 15], "x": 205, "y": 20, "flags": 1}, + {"matrix": [1, 16], "x": 217, "y": 20, "flags": 1}, + {"matrix": [2, 0], "x": 10, "y": 30, "flags": 1}, + {"matrix": [2, 1], "x": 25, "y": 30, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 30, "flags": 4}, + {"matrix": [2, 3], "x": 49, "y": 30, "flags": 4}, + {"matrix": [2, 4], "x": 61, "y": 30, "flags": 4}, + {"matrix": [2, 5], "x": 73, "y": 30, "flags": 4}, + {"matrix": [2, 6], "x": 85, "y": 30, "flags": 4}, + {"matrix": [2, 7], "x": 97, "y": 30, "flags": 4}, + {"matrix": [2, 8], "x": 109, "y": 30, "flags": 4}, + {"matrix": [2, 9], "x": 121, "y": 30, "flags": 4}, + {"matrix": [2, 10], "x": 133, "y": 30, "flags": 4}, + {"matrix": [2, 11], "x": 145, "y": 30, "flags": 4}, + {"matrix": [2, 12], "x": 157, "y": 30, "flags": 4}, + {"matrix": [2, 13], "x": 172, "y": 30, "flags": 4}, + {"matrix": [2, 14], "x": 193, "y": 30, "flags": 1}, + {"matrix": [2, 15], "x": 205, "y": 30, "flags": 1}, + {"matrix": [2, 16], "x": 217, "y": 30, "flags": 1}, + {"matrix": [3, 0], "x": 11, "y": 39, "flags": 1}, + {"matrix": [3, 1], "x": 28, "y": 39, "flags": 4}, + {"matrix": [3, 2], "x": 40, "y": 39, "flags": 4}, + {"matrix": [3, 3], "x": 52, "y": 39, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 39, "flags": 4}, + {"matrix": [3, 5], "x": 76, "y": 39, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 39, "flags": 4}, + {"matrix": [3, 7], "x": 100, "y": 39, "flags": 4}, + {"matrix": [3, 8], "x": 112, "y": 39, "flags": 4}, + {"matrix": [3, 9], "x": 124, "y": 39, "flags": 4}, + {"matrix": [3, 10], "x": 136, "y": 39, "flags": 4}, + {"matrix": [3, 11], "x": 148, "y": 39, "flags": 4}, + {"matrix": [3, 12], "x": 168, "y": 39, "flags": 1}, + {"matrix": [4, 0], "x": 17, "y": 49, "flags": 1}, + {"matrix": [4, 2], "x": 34, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 46, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 58, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 70, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 82, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 94, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 106, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 118, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 130, "y": 49, "flags": 4}, + {"matrix": [4, 11], "x": 142, "y": 49, "flags": 4}, + {"matrix": [4, 12], "x": 165, "y": 49, "flags": 1}, + {"matrix": [4, 15], "x": 205, "y": 49, "flags": 1}, + {"matrix": [5, 0], "x": 8, "y": 59, "flags": 1}, + {"matrix": [5, 1], "x": 23, "y": 59, "flags": 1}, + {"matrix": [5, 2], "x": 38, "y": 59, "flags": 1}, + {"matrix": [5, 5], "x": 83, "y": 59, "flags": 4}, + {"matrix": [5, 10], "x": 129, "y": 59, "flags": 1}, + {"matrix": [5, 11], "x": 144, "y": 59, "flags": 1}, + {"matrix": [5, 12], "x": 159, "y": 59, "flags": 1}, + {"matrix": [5, 13], "x": 174, "y": 59, "flags": 1}, + {"matrix": [5, 14], "x": 193, "y": 59, "flags": 1}, + {"matrix": [5, 15], "x": 205, "y": 59, "flags": 1}, + {"matrix": [5, 16], "x": 217, "y": 59, "flags": 1} + ], "max_brightness": 180, "sleep": true }, diff --git a/keyboards/kprepublic/bm80v2_iso/bm80v2_iso.c b/keyboards/kprepublic/bm80v2_iso/bm80v2_iso.c index 3009359c65..fbaf9e0bcf 100644 --- a/keyboards/kprepublic/bm80v2_iso/bm80v2_iso.c +++ b/keyboards/kprepublic/bm80v2_iso/bm80v2_iso.c @@ -113,30 +113,6 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW8_CS36, SW8_CS35, SW8_CS34} }; -led_config_t g_led_config = { { - { 0, NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, - { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 }, - { 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49 }, - { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, NO_LED, NO_LED, NO_LED, NO_LED }, - { 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, NO_LED, NO_LED, 76, NO_LED }, - { 77, 78, 79, NO_LED,NO_LED, 80, NO_LED, NO_LED, NO_LED, NO_LED, 81, 82, 83, 84, 85, 86, 87 } -}, -{ - { 7, 5 }, { 31, 5 }, { 43, 5 }, { 55, 5 }, { 67, 5 }, { 85, 5 }, { 97, 5 }, { 109, 5 }, { 121, 5 }, { 139, 5 }, { 151, 5 }, { 163, 5 }, { 175, 5 }, { 193, 5 }, { 205, 5 }, { 217, 5 }, - { 7, 20 }, { 19, 20 }, { 31, 20 }, { 43, 20 }, { 55, 20 }, { 67, 20 }, { 79, 20 }, { 91, 20 }, { 103, 20 }, { 115, 20 }, { 127, 20 }, { 139, 20 }, { 151, 20 }, { 169, 20 }, { 193, 20 }, { 205, 20 }, { 217, 20 }, - { 10, 30 }, { 25, 30 }, { 37, 30 }, { 49, 30 }, { 61, 30 }, { 73, 30 }, { 85, 30 }, { 97, 30 }, { 109, 30 }, { 121, 30 }, { 133, 30 }, { 145, 30 }, { 157, 30 }, { 175, 35 }, { 193, 30 }, { 205, 30 }, { 217, 30 }, - { 11, 39 }, { 28, 39 }, { 40, 39 }, { 52, 39 }, { 64, 39 }, { 76, 39 }, { 88, 39 }, { 100, 39 }, { 112, 39 }, { 124, 39 }, { 136, 39 }, { 148, 39 }, { 168, 39 }, - { 8, 49 }, { 22, 49 }, { 34, 49 }, { 46, 49 }, { 58, 49 }, { 70, 49 }, { 82, 49 }, { 94, 49 }, { 106, 49 }, { 118, 49 }, { 130, 49 }, { 142, 49 }, { 165, 49 }, { 205, 49 }, - { 8, 59 }, { 23, 59 }, { 38, 59 }, { 83, 59 }, { 129, 59 }, { 144, 59 }, { 159, 59 }, { 174, 59 }, { 193, 59 }, { 205, 59 }, { 217, 59 } -}, -{ 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1 -} }; - bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { diff --git a/keyboards/kprepublic/bm80v2_iso/keyboard.json b/keyboards/kprepublic/bm80v2_iso/keyboard.json index beb90a3738..5cf4c9c1bc 100644 --- a/keyboards/kprepublic/bm80v2_iso/keyboard.json +++ b/keyboards/kprepublic/bm80v2_iso/keyboard.json @@ -45,6 +45,96 @@ "animation": "cycle_all" }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 7, "y": 5, "flags": 1}, + {"matrix": [0, 2], "x": 31, "y": 5, "flags": 4}, + {"matrix": [0, 3], "x": 43, "y": 5, "flags": 4}, + {"matrix": [0, 4], "x": 55, "y": 5, "flags": 4}, + {"matrix": [0, 5], "x": 67, "y": 5, "flags": 4}, + {"matrix": [0, 6], "x": 85, "y": 5, "flags": 1}, + {"matrix": [0, 7], "x": 97, "y": 5, "flags": 1}, + {"matrix": [0, 8], "x": 109, "y": 5, "flags": 1}, + {"matrix": [0, 9], "x": 121, "y": 5, "flags": 1}, + {"matrix": [0, 10], "x": 139, "y": 5, "flags": 4}, + {"matrix": [0, 11], "x": 151, "y": 5, "flags": 4}, + {"matrix": [0, 12], "x": 163, "y": 5, "flags": 4}, + {"matrix": [0, 13], "x": 175, "y": 5, "flags": 4}, + {"matrix": [0, 14], "x": 193, "y": 5, "flags": 1}, + {"matrix": [0, 15], "x": 205, "y": 5, "flags": 1}, + {"matrix": [0, 16], "x": 217, "y": 5, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 20, "flags": 4}, + {"matrix": [1, 1], "x": 19, "y": 20, "flags": 4}, + {"matrix": [1, 2], "x": 31, "y": 20, "flags": 4}, + {"matrix": [1, 3], "x": 43, "y": 20, "flags": 4}, + {"matrix": [1, 4], "x": 55, "y": 20, "flags": 4}, + {"matrix": [1, 5], "x": 67, "y": 20, "flags": 4}, + {"matrix": [1, 6], "x": 79, "y": 20, "flags": 4}, + {"matrix": [1, 7], "x": 91, "y": 20, "flags": 4}, + {"matrix": [1, 8], "x": 103, "y": 20, "flags": 4}, + {"matrix": [1, 9], "x": 115, "y": 20, "flags": 4}, + {"matrix": [1, 10], "x": 127, "y": 20, "flags": 4}, + {"matrix": [1, 11], "x": 139, "y": 20, "flags": 4}, + {"matrix": [1, 12], "x": 151, "y": 20, "flags": 4}, + {"matrix": [1, 13], "x": 169, "y": 20, "flags": 1}, + {"matrix": [1, 14], "x": 193, "y": 20, "flags": 1}, + {"matrix": [1, 15], "x": 205, "y": 20, "flags": 1}, + {"matrix": [1, 16], "x": 217, "y": 20, "flags": 1}, + {"matrix": [2, 0], "x": 10, "y": 30, "flags": 1}, + {"matrix": [2, 1], "x": 25, "y": 30, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 30, "flags": 4}, + {"matrix": [2, 3], "x": 49, "y": 30, "flags": 4}, + {"matrix": [2, 4], "x": 61, "y": 30, "flags": 4}, + {"matrix": [2, 5], "x": 73, "y": 30, "flags": 4}, + {"matrix": [2, 6], "x": 85, "y": 30, "flags": 4}, + {"matrix": [2, 7], "x": 97, "y": 30, "flags": 4}, + {"matrix": [2, 8], "x": 109, "y": 30, "flags": 4}, + {"matrix": [2, 9], "x": 121, "y": 30, "flags": 4}, + {"matrix": [2, 10], "x": 133, "y": 30, "flags": 4}, + {"matrix": [2, 11], "x": 145, "y": 30, "flags": 4}, + {"matrix": [2, 12], "x": 157, "y": 30, "flags": 4}, + {"matrix": [2, 13], "x": 175, "y": 35, "flags": 4}, + {"matrix": [2, 14], "x": 193, "y": 30, "flags": 1}, + {"matrix": [2, 15], "x": 205, "y": 30, "flags": 1}, + {"matrix": [2, 16], "x": 217, "y": 30, "flags": 1}, + {"matrix": [3, 0], "x": 11, "y": 39, "flags": 1}, + {"matrix": [3, 1], "x": 28, "y": 39, "flags": 4}, + {"matrix": [3, 2], "x": 40, "y": 39, "flags": 4}, + {"matrix": [3, 3], "x": 52, "y": 39, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 39, "flags": 4}, + {"matrix": [3, 5], "x": 76, "y": 39, "flags": 4}, + {"matrix": [3, 6], "x": 88, "y": 39, "flags": 4}, + {"matrix": [3, 7], "x": 100, "y": 39, "flags": 4}, + {"matrix": [3, 8], "x": 112, "y": 39, "flags": 4}, + {"matrix": [3, 9], "x": 124, "y": 39, "flags": 4}, + {"matrix": [3, 10], "x": 136, "y": 39, "flags": 4}, + {"matrix": [3, 11], "x": 148, "y": 39, "flags": 4}, + {"matrix": [3, 12], "x": 168, "y": 39, "flags": 1}, + {"matrix": [4, 0], "x": 8, "y": 49, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 49, "flags": 1}, + {"matrix": [4, 2], "x": 34, "y": 49, "flags": 4}, + {"matrix": [4, 3], "x": 46, "y": 49, "flags": 4}, + {"matrix": [4, 4], "x": 58, "y": 49, "flags": 4}, + {"matrix": [4, 5], "x": 70, "y": 49, "flags": 4}, + {"matrix": [4, 6], "x": 82, "y": 49, "flags": 4}, + {"matrix": [4, 7], "x": 94, "y": 49, "flags": 4}, + {"matrix": [4, 8], "x": 106, "y": 49, "flags": 4}, + {"matrix": [4, 9], "x": 118, "y": 49, "flags": 4}, + {"matrix": [4, 10], "x": 130, "y": 49, "flags": 4}, + {"matrix": [4, 11], "x": 142, "y": 49, "flags": 4}, + {"matrix": [4, 12], "x": 165, "y": 49, "flags": 1}, + {"matrix": [4, 15], "x": 205, "y": 49, "flags": 1}, + {"matrix": [5, 0], "x": 8, "y": 59, "flags": 1}, + {"matrix": [5, 1], "x": 23, "y": 59, "flags": 1}, + {"matrix": [5, 2], "x": 38, "y": 59, "flags": 1}, + {"matrix": [5, 5], "x": 83, "y": 59, "flags": 4}, + {"matrix": [5, 10], "x": 129, "y": 59, "flags": 1}, + {"matrix": [5, 11], "x": 144, "y": 59, "flags": 1}, + {"matrix": [5, 12], "x": 159, "y": 59, "flags": 1}, + {"matrix": [5, 13], "x": 174, "y": 59, "flags": 1}, + {"matrix": [5, 14], "x": 193, "y": 59, "flags": 1}, + {"matrix": [5, 15], "x": 205, "y": 59, "flags": 1}, + {"matrix": [5, 16], "x": 217, "y": 59, "flags": 1} + ], "max_brightness": 180, "sleep": true }, diff --git a/keyboards/kprepublic/bm980hsrgb/bm980hsrgb.c b/keyboards/kprepublic/bm980hsrgb/bm980hsrgb.c deleted file mode 100644 index 12475ac36b..0000000000 --- a/keyboards/kprepublic/bm980hsrgb/bm980hsrgb.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright 2021 peepeetee - * Copyright 2021 bdtc123 - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, NO_LED, 13 }, - { 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, - { 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49 }, - { 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, NO_LED, 65, 66 }, - { 69, NO_LED, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82 }, - { 86, 87, 88, 96, 97, 85, 89, 84, 83, 90, 91, 92, 93, 94, 95 }, - { NO_LED, NO_LED, 34, 50, 51, 52, 16, 68, 67, 33, 15, 32, NO_LED, 14, NO_LED } - - -}, { - // LED Index to Physical Position - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 195, 0 }, { 202, 0 }, { 212, 0 }, { 224, 0 }, - { 0, 20 }, { 15, 20 }, { 30, 20 }, { 45, 20 }, { 60, 20 }, { 75, 20 }, { 90, 20 }, { 105, 20 }, { 120, 20 }, { 135, 20 }, { 150, 20 }, { 165, 20 }, { 180, 20 },{ 195, 20 }, { 202, 20 }, { 212, 20 },{ 220, 20 },{ 224, 20 }, - { 8, 30 }, { 15, 30 }, { 30, 30 }, { 45, 30 }, { 60, 30 }, { 75, 30 }, { 90, 30 }, { 105, 30 }, { 120, 30 }, { 135, 30 }, { 150, 30 }, { 165, 30 }, { 180, 30 },{ 195, 30 }, { 202, 30 }, { 212, 30 },{ 220, 30 },{ 224, 30 }, - { 9, 40 }, { 15, 40 }, { 30, 40 }, { 45, 40 }, { 60, 40 }, { 75, 40 }, { 90, 40 }, { 105, 40 }, { 120, 40 }, { 135, 40 }, { 150, 40 }, { 165, 40 }, { 180, 40 },{ 195, 40 }, { 202, 40 }, { 212, 40 }, - { 12, 50 }, { 15, 50 }, { 30, 50 }, { 45, 50 }, { 60, 50 }, { 75, 50 }, { 90, 50 }, { 105, 50 }, { 120, 50 }, { 135, 50 }, { 150, 50 }, { 165, 50 }, { 180, 50 },{ 195, 50 }, { 202, 50 }, { 212, 50 },{ 224, 50 }, - { 2, 60 }, { 17, 60 }, { 34, 60 }, { 77, 60 }, { 120, 60 }, { 135, 60 }, { 150, 60 }, { 165, 60 }, { 177, 60 }, { 182, 60 }, { 197, 60 }, { 212, 60 }, - -}, { - // LED Index to Flag - 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 1, 9/*scroll lock*/, 1,1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 9/*caps lock*/, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 4, 4 -} }; - - -#endif diff --git a/keyboards/kprepublic/bm980hsrgb/keyboard.json b/keyboards/kprepublic/bm980hsrgb/keyboard.json index 85f8b006ae..c4ffb1746a 100644 --- a/keyboards/kprepublic/bm980hsrgb/keyboard.json +++ b/keyboards/kprepublic/bm980hsrgb/keyboard.json @@ -8,7 +8,107 @@ "device_version": "0.0.1" }, "rgb_matrix": { - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 1}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 1}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 1}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 1}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 195, "y": 0, "flags": 1}, + {"matrix": [6, 13], "x": 202, "y": 0, "flags": 9}, + {"matrix": [6, 10], "x": 212, "y": 0, "flags": 1}, + {"matrix": [6, 6], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 20, "flags": 4}, + {"matrix": [1, 1], "x": 15, "y": 20, "flags": 4}, + {"matrix": [1, 2], "x": 30, "y": 20, "flags": 4}, + {"matrix": [1, 3], "x": 45, "y": 20, "flags": 4}, + {"matrix": [1, 4], "x": 60, "y": 20, "flags": 4}, + {"matrix": [1, 5], "x": 75, "y": 20, "flags": 4}, + {"matrix": [1, 6], "x": 90, "y": 20, "flags": 4}, + {"matrix": [1, 7], "x": 105, "y": 20, "flags": 4}, + {"matrix": [1, 8], "x": 120, "y": 20, "flags": 4}, + {"matrix": [1, 9], "x": 135, "y": 20, "flags": 4}, + {"matrix": [1, 10], "x": 150, "y": 20, "flags": 4}, + {"matrix": [1, 11], "x": 165, "y": 20, "flags": 4}, + {"matrix": [1, 12], "x": 180, "y": 20, "flags": 4}, + {"matrix": [1, 13], "x": 195, "y": 20, "flags": 1}, + {"matrix": [1, 14], "x": 202, "y": 20, "flags": 1}, + {"matrix": [6, 11], "x": 212, "y": 20, "flags": 1}, + {"matrix": [6, 9], "x": 220, "y": 20, "flags": 1}, + {"matrix": [6, 2], "x": 224, "y": 20, "flags": 1}, + {"matrix": [2, 0], "x": 8, "y": 30, "flags": 1}, + {"matrix": [2, 1], "x": 15, "y": 30, "flags": 4}, + {"matrix": [2, 2], "x": 30, "y": 30, "flags": 4}, + {"matrix": [2, 3], "x": 45, "y": 30, "flags": 4}, + {"matrix": [2, 4], "x": 60, "y": 30, "flags": 4}, + {"matrix": [2, 5], "x": 75, "y": 30, "flags": 4}, + {"matrix": [2, 6], "x": 90, "y": 30, "flags": 4}, + {"matrix": [2, 7], "x": 105, "y": 30, "flags": 4}, + {"matrix": [2, 8], "x": 120, "y": 30, "flags": 4}, + {"matrix": [2, 9], "x": 135, "y": 30, "flags": 4}, + {"matrix": [2, 10], "x": 150, "y": 30, "flags": 4}, + {"matrix": [2, 11], "x": 165, "y": 30, "flags": 4}, + {"matrix": [2, 12], "x": 180, "y": 30, "flags": 4}, + {"matrix": [2, 13], "x": 195, "y": 30, "flags": 4}, + {"matrix": [2, 14], "x": 202, "y": 30, "flags": 4}, + {"matrix": [6, 3], "x": 212, "y": 30, "flags": 4}, + {"matrix": [6, 4], "x": 220, "y": 30, "flags": 4}, + {"matrix": [6, 5], "x": 224, "y": 30, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 40, "flags": 9}, + {"matrix": [3, 1], "x": 15, "y": 40, "flags": 4}, + {"matrix": [3, 2], "x": 30, "y": 40, "flags": 4}, + {"matrix": [3, 3], "x": 45, "y": 40, "flags": 4}, + {"matrix": [3, 4], "x": 60, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 40, "flags": 4}, + {"matrix": [3, 6], "x": 90, "y": 40, "flags": 4}, + {"matrix": [3, 7], "x": 105, "y": 40, "flags": 4}, + {"matrix": [3, 8], "x": 120, "y": 40, "flags": 4}, + {"matrix": [3, 9], "x": 135, "y": 40, "flags": 4}, + {"matrix": [3, 10], "x": 150, "y": 40, "flags": 4}, + {"matrix": [3, 11], "x": 165, "y": 40, "flags": 4}, + {"matrix": [3, 13], "x": 180, "y": 40, "flags": 1}, + {"matrix": [3, 14], "x": 195, "y": 40, "flags": 4}, + {"matrix": [6, 8], "x": 202, "y": 40, "flags": 4}, + {"matrix": [6, 7], "x": 212, "y": 40, "flags": 4}, + {"matrix": [4, 0], "x": 12, "y": 50, "flags": 1}, + {"matrix": [4, 2], "x": 15, "y": 50, "flags": 4}, + {"matrix": [4, 3], "x": 30, "y": 50, "flags": 4}, + {"matrix": [4, 4], "x": 45, "y": 50, "flags": 4}, + {"matrix": [4, 5], "x": 60, "y": 50, "flags": 4}, + {"matrix": [4, 6], "x": 75, "y": 50, "flags": 4}, + {"matrix": [4, 7], "x": 90, "y": 50, "flags": 4}, + {"matrix": [4, 8], "x": 105, "y": 50, "flags": 4}, + {"matrix": [4, 9], "x": 120, "y": 50, "flags": 4}, + {"matrix": [4, 10], "x": 135, "y": 50, "flags": 4}, + {"matrix": [4, 11], "x": 150, "y": 50, "flags": 4}, + {"matrix": [4, 12], "x": 165, "y": 50, "flags": 1}, + {"matrix": [4, 13], "x": 180, "y": 50, "flags": 1}, + {"matrix": [4, 14], "x": 195, "y": 50, "flags": 4}, + {"matrix": [5, 8], "x": 202, "y": 50, "flags": 4}, + {"matrix": [5, 7], "x": 212, "y": 50, "flags": 4}, + {"matrix": [5, 5], "x": 224, "y": 50, "flags": 1}, + {"matrix": [5, 0], "x": 2, "y": 60, "flags": 1}, + {"matrix": [5, 1], "x": 17, "y": 60, "flags": 1}, + {"matrix": [5, 2], "x": 34, "y": 60, "flags": 1}, + {"matrix": [5, 6], "x": 77, "y": 60, "flags": 4}, + {"matrix": [5, 9], "x": 120, "y": 60, "flags": 1}, + {"matrix": [5, 10], "x": 135, "y": 60, "flags": 1}, + {"matrix": [5, 11], "x": 150, "y": 60, "flags": 1}, + {"matrix": [5, 12], "x": 165, "y": 60, "flags": 1}, + {"matrix": [5, 13], "x": 177, "y": 60, "flags": 1}, + {"matrix": [5, 14], "x": 182, "y": 60, "flags": 1}, + {"matrix": [5, 3], "x": 197, "y": 60, "flags": 4}, + {"matrix": [5, 4], "x": 212, "y": 60, "flags": 4} + ] }, "build": { "lto": true From 633479ced5a70076cf6906f3ecf7d199928bdb55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=95=E3=82=A3=E3=83=AB=E3=82=BF=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=83=91=E3=83=BC?= <76888457+filterpaper@users.noreply.github.com> Date: Wed, 10 Sep 2025 16:41:29 +0800 Subject: [PATCH 46/99] Restructure Pixel Rain interval code (#25516) Co-authored-by: Joel Challis --- .../rgb_matrix/animations/pixel_rain_anim.h | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/quantum/rgb_matrix/animations/pixel_rain_anim.h b/quantum/rgb_matrix/animations/pixel_rain_anim.h index c0370831d8..f92a285b67 100644 --- a/quantum/rgb_matrix/animations/pixel_rain_anim.h +++ b/quantum/rgb_matrix/animations/pixel_rain_anim.h @@ -6,20 +6,27 @@ RGB_MATRIX_EFFECT(PIXEL_RAIN) # ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS static bool PIXEL_RAIN(effect_params_t* params) { - static fast_timer_t timer = 0; - static uint16_t index = RGB_MATRIX_LED_COUNT + 1; + static uint8_t index = 0; + static uint32_t timer = 0; - if ((params->iter == 0) && (timer_elapsed_fast(timer) > (320 - rgb_matrix_config.speed))) { + if (params->iter == 0 && params->init) { index = random8_max(RGB_MATRIX_LED_COUNT); - timer = timer_read_fast(); } RGB_MATRIX_USE_LIMITS(led_min, led_max); - if (led_min <= index && index < led_max && HAS_ANY_FLAGS(g_led_config.flags[index], params->flags)) { - hsv_t hsv = (random8() & 2) ? (hsv_t){0, 0, 0} : (hsv_t){random8(), random8_min_max(127, 255), rgb_matrix_config.hsv.v}; - rgb_t rgb = rgb_matrix_hsv_to_rgb(hsv); - rgb_matrix_set_color(index, rgb.r, rgb.g, rgb.b); - index = RGB_MATRIX_LED_COUNT + 1; + if (timer < g_rgb_timer) { // Execute when the delay period has elapsed + if (led_min <= index && index < led_max && HAS_ANY_FLAGS(g_led_config.flags[index], params->flags)) { + // Assign a random HSV color to hsv with 50% probability, otherwise assign zeroed hsv + hsv_t hsv = (random8() & 2) ? (hsv_t){0, 0, 0} : (hsv_t){random8(), random8_min_max(127, 255), rgb_matrix_config.hsv.v}; + rgb_t rgb = rgb_matrix_hsv_to_rgb(hsv); + rgb_matrix_set_color(index, rgb.r, rgb.g, rgb.b); + } + if (!rgb_matrix_check_finished_leds(led_max)) { + // In the final LED range, update the LED index and advance the timer for + // the next cycle, scaling the delay between 256–2048 ms based on speed. + index = random8_max(RGB_MATRIX_LED_COUNT); + timer = g_rgb_timer + (2048 - scale16by8(1792, rgb_matrix_config.speed)); + } } return rgb_matrix_check_finished_leds(led_max); } From f12902eb1689d6c8269ac7bb1421d4cf4e888d70 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Wed, 10 Sep 2025 17:32:48 -0600 Subject: [PATCH 47/99] Refactor `1upkeyboards/sweet16v2` (#25610) --- data/mappings/keyboard_aliases.hjson | 6 + .../sweet16v2/kb2040/keyboard.json | 143 ------------------ .../sweet16v2/{pro_micro => }/keyboard.json | 5 +- .../sweet16v2/keymaps/default/keymap.c | 41 ----- .../sweet16v2/keymaps/default/keymap.json | 28 ++++ keyboards/1upkeyboards/sweet16v2/readme.md | 22 +-- 6 files changed, 42 insertions(+), 203 deletions(-) delete mode 100644 keyboards/1upkeyboards/sweet16v2/kb2040/keyboard.json rename keyboards/1upkeyboards/sweet16v2/{pro_micro => }/keyboard.json (97%) delete mode 100644 keyboards/1upkeyboards/sweet16v2/keymaps/default/keymap.c create mode 100644 keyboards/1upkeyboards/sweet16v2/keymaps/default/keymap.json diff --git a/data/mappings/keyboard_aliases.hjson b/data/mappings/keyboard_aliases.hjson index 3978235e20..babbf38940 100644 --- a/data/mappings/keyboard_aliases.hjson +++ b/data/mappings/keyboard_aliases.hjson @@ -1632,6 +1632,12 @@ "1upkeyboards/sweet16": { "target": "1upkeyboards/sweet16/v1" }, + "1upkeyboards/sweet16v2/kb2040": { + "target": "1upkeyboards/sweet16v2" + }, + "1upkeyboards/sweet16v2/pro_micro": { + "target": "1upkeyboards/sweet16v2" + }, "25keys/aleth42": { "target": "25keys/aleth42/rev1" }, diff --git a/keyboards/1upkeyboards/sweet16v2/kb2040/keyboard.json b/keyboards/1upkeyboards/sweet16v2/kb2040/keyboard.json deleted file mode 100644 index 40a0ec4039..0000000000 --- a/keyboards/1upkeyboards/sweet16v2/kb2040/keyboard.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "manufacturer": "1upkeyboards", - "keyboard_name": "sweet16v2", - "url": "1upkeyboards.com/shop/keyboard-kits/macro-pads/sweet-16-v2-macropad-kit/", - "maintainer": "ziptyze", - "processor": "RP2040", - "bootloader": "rp2040", - "board": "GENERIC_RP_RP2040", - "usb": { - "device_version": "1.0.0", - "pid": "0x5518", - "vid": "0x6F75" - }, - "features": { - "bootmagic": true, - "encoder": true, - "extrakey": true, - "mousekey": true, - "nkro": false, - "rgb_matrix": true - }, - "qmk": { - "locking": { - "enabled": true, - "resync": true - } - }, - "ws2812": { - "pin": "GP6", - "driver": "vendor" - }, - "matrix_pins": { - "cols": ["GP2", "GP9", "GP8", "GP7"], - "rows": ["GP26", "GP1", "GP18", "GP5"] - }, - "diode_direction": "COL2ROW", - "dynamic_keymap": { - "layer_count": 10 - }, - "encoder": { - "enabled": true, - "rotary": [ - {"pin_a": "GP27", "pin_b": "GP28"}, - {"pin_a": "GP4", "pin_b": "GP3"} - ] - }, - "rgb_matrix": { - "animmations": { - "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, - "rainbow_moving_chevron": true, - "cycle_out_in": true, - "cycle_out_in_dual": 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_rain": true, - "pixel_flow": true, - "pixel_fractal": true, - "typing_heatmap": true, - "digital_rain": true, - "solid_reactive_simple": true, - "solid_reactive": true, - "solid_reactive_wide": true, - "solid_reactive_multiwide": true, - "solid_reactive_cross": true, - "solid_reactive_multicross": true, - "solid_reactive_nexus": true, - "solid_reactive_multinexus": true, - "splash": true, - "multisplash": true, - "solid_splash": true, - "solid_multisplash": true - }, - "driver": "ws2812", - "layout": [ - {"flags": 4, "matrix": [0, 0], "x": 28, "y": 12}, - {"flags": 4, "matrix": [0, 1], "x": 84, "y": 12}, - {"flags": 4, "matrix": [0, 2], "x": 140, "y": 12}, - {"flags": 4, "matrix": [0, 3], "x": 196, "y": 12}, - {"flags": 2, "x": 196, "y": 17}, - {"flags": 4, "matrix": [1, 3], "x": 196, "y": 28}, - {"flags": 4, "matrix": [1, 2], "x": 140, "y": 28}, - {"flags": 4, "matrix": [1, 1], "x": 84, "y": 28}, - {"flags": 2, "x": 28, "y": 17}, - {"flags": 4, "matrix": [1, 0], "x": 28, "y": 28}, - {"flags": 4, "matrix": [2, 0], "x": 28, "y": 44}, - {"flags": 4, "matrix": [2, 1], "x": 84, "y": 44}, - {"flags": 4, "matrix": [2, 2], "x": 140, "y": 44}, - {"flags": 4, "matrix": [2, 3], "x": 196, "y": 44}, - {"flags": 2, "x": 196, "y": 47}, - {"flags": 4, "matrix": [3, 3], "x": 196, "y": 60}, - {"flags": 4, "matrix": [3, 2], "x": 140, "y": 60}, - {"flags": 4, "matrix": [3, 1], "x": 84, "y": 60}, - {"flags": 2, "x": 28, "y": 47}, - {"flags": 4, "matrix": [3, 0], "x": 28, "y": 60} - ], - "sleep": true - }, - "community_layouts": [ - "ortho_4x4" - ], - "layouts": { - "LAYOUT_ortho_4x4": { - "layout": [ - {"matrix": [0, 0], "x": 0, "y": 0}, - {"matrix": [0, 1], "x": 1, "y": 0}, - {"matrix": [0, 2], "x": 2, "y": 0}, - {"matrix": [0, 3], "x": 3, "y": 0}, - {"matrix": [1, 0], "x": 0, "y": 1}, - {"matrix": [1, 1], "x": 1, "y": 1}, - {"matrix": [1, 2], "x": 2, "y": 1}, - {"matrix": [1, 3], "x": 3, "y": 1}, - {"matrix": [2, 0], "x": 0, "y": 2}, - {"matrix": [2, 1], "x": 1, "y": 2}, - {"matrix": [2, 2], "x": 2, "y": 2}, - {"matrix": [2, 3], "x": 3, "y": 2}, - {"matrix": [3, 0], "x": 0, "y": 3}, - {"matrix": [3, 1], "x": 1, "y": 3}, - {"matrix": [3, 2], "x": 2, "y": 3}, - {"matrix": [3, 3], "x": 3, "y": 3} - ] - } - } -} diff --git a/keyboards/1upkeyboards/sweet16v2/pro_micro/keyboard.json b/keyboards/1upkeyboards/sweet16v2/keyboard.json similarity index 97% rename from keyboards/1upkeyboards/sweet16v2/pro_micro/keyboard.json rename to keyboards/1upkeyboards/sweet16v2/keyboard.json index d8ff291e69..b84a43ff40 100644 --- a/keyboards/1upkeyboards/sweet16v2/pro_micro/keyboard.json +++ b/keyboards/1upkeyboards/sweet16v2/keyboard.json @@ -3,8 +3,7 @@ "keyboard_name": "sweet16v2", "url": "1upkeyboards.com/shop/keyboard-kits/macro-pads/sweet-16-v2-macropad-kit/", "maintainer": "ziptyze", - "bootloader": "atmel-dfu", - "processor": "atmega32u4", + "development_board": "elite_c", "usb": { "device_version": "1.0.0", "pid": "0x5518", @@ -15,7 +14,6 @@ "encoder": true, "extrakey": true, "mousekey": true, - "nkro": false, "rgb_matrix": true }, "qmk": { @@ -36,7 +34,6 @@ "layer_count": 10 }, "encoder": { - "enabled": true, "rotary": [ {"pin_a": "F6", "pin_b": "F5"}, {"pin_a": "D4", "pin_b": "D0"} diff --git a/keyboards/1upkeyboards/sweet16v2/keymaps/default/keymap.c b/keyboards/1upkeyboards/sweet16v2/keymaps/default/keymap.c deleted file mode 100644 index 6ccf21e18f..0000000000 --- a/keyboards/1upkeyboards/sweet16v2/keymaps/default/keymap.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright 2022 ziptyze - * - * 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_ortho_4x4( - KC_P7, KC_P8, KC_P9, KC_PMNS, - KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_P1, KC_P2, KC_P3, KC_PSLS, - MO(1), KC_P0, KC_PDOT, KC_PENT - ), - - [1] = LAYOUT_ortho_4x4( - RM_TOGG, RM_HUEU, RM_SATU, RM_VALU, - RM_NEXT, RM_HUED, RM_SATD, RM_VALD, - RM_SPDD, RM_SPDU, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT - ) -}; - - -#if defined(ENCODER_MAP_ENABLE) -const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RM_VALD, RM_VALU) }, - [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) } -}; -#endif \ No newline at end of file diff --git a/keyboards/1upkeyboards/sweet16v2/keymaps/default/keymap.json b/keyboards/1upkeyboards/sweet16v2/keymaps/default/keymap.json new file mode 100644 index 0000000000..fd2a0dc766 --- /dev/null +++ b/keyboards/1upkeyboards/sweet16v2/keymaps/default/keymap.json @@ -0,0 +1,28 @@ +{ + "keyboard": "1upkeyboards/sweet16v2", + "keymap": "default", + "coonfig": { + "features": { + "encoder_map": true + } + }, + "layout": "LAYOUT_ortho_4x4", + "layers": [ + [ + "KC_P7", "KC_P8", "KC_P8", "KC_PMNS", + "KC_P4", "KC_P5", "KC_P6", "KC_PPLS", + "KC_P1", "KC_P2", "KC_P3", "KC_PSLS", + "MO(1)", "KC_P0", "KC_PDOT", "KC_PENT" + ], + [ + "RM_TOGG", "RM_HUEU", "RM_SATU", "RM_VALU", + "RM_NEXT", "RM_HUED", "RM_SATD", "RM_VALD", + "RM_SPDD", "RM_SPDU", "_______", "_______", + "_______", "_______", "_______", "QK_BOOT" + ] + ], + "encoders": [ + [{"ccw": "KC_VOLD", "cw": "KC_VOLU"}, {"ccw": "RM_VALD", "cw": "RM_VALU"}], + [{"ccw": "_______", "cw": "_______"}, {"ccw": "_______", "cw": "_______"}] + ] +} diff --git a/keyboards/1upkeyboards/sweet16v2/readme.md b/keyboards/1upkeyboards/sweet16v2/readme.md index e3f5859f96..eacaf0d0ce 100644 --- a/keyboards/1upkeyboards/sweet16v2/readme.md +++ b/keyboards/1upkeyboards/sweet16v2/readme.md @@ -1,26 +1,18 @@ # sweet16v2 -A 4x4 macropad with RGB inswitch lighting and underglow. +A 4x4 macropad with per-key RGB lighting and underglow. * Keyboard Maintainer: [ziptyze](https://github.com/ziptyze) * Hardware Supported: 1upkeyboards Sweet 16 v2 * Hardware Availability: [1upkeyboards](https://1upkeyboards.com/) -Make example for this keyboard using an atmel-based controller (after setting up your build environment): +Make example for this keyboard (after setting up your build environment): - make 1upkeyboards/sweet16v2/promicro:default + make 1upkeyboards/sweet16v2:default -Flashing example for this keyboard using an atmel-based controller: +Flashing example for this keyboard: - make 1upkeyboards/sweet16v2/promicro:default:flash - -Make example for this keyboard using an rp2040-based controller (after setting up your build environment): - - make 1upkeyboards/sweet16v2/kb2040:default - -Flashing example for this keyboard using an rp2040-based controller: - - make 1upkeyboards/sweet16v2/kb2040:default:flash + make 1upkeyboards/sweet16v2: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). @@ -30,10 +22,10 @@ Enter the bootloader in 3 ways for atmel-based controllers: * **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard * **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead -* **Keycode in layout**: Press the key mapped to `RESET` if it is available +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available Enter the bootloader in 2 ways for rp2040-based controllers: * **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard -* **Bootsel button**: Hold the bootsel button on controller and plug in the keyboard \ No newline at end of file +* **Bootsel button**: Hold the bootsel button on controller and plug in the keyboard From 286947b6faa3b3afd7862c52e52542c8a6ab3f20 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Wed, 10 Sep 2025 17:33:12 -0600 Subject: [PATCH 48/99] Refactor `0xcb/splaytoraid` (#25609) --- data/mappings/keyboard_aliases.hjson | 7 +- keyboards/0xcb/splaytoraid/32u4/keyboard.json | 27 ----- .../splaytoraid/{info.json => keyboard.json} | 105 ++++++++++++------ .../0xcb/splaytoraid/keymaps/default/keymap.c | 49 -------- .../splaytoraid/keymaps/default/keymap.json | 21 ++++ .../0xcb/splaytoraid/keymaps/default/rules.mk | 1 - keyboards/0xcb/splaytoraid/readme.md | 9 +- .../0xcb/splaytoraid/rp2040_ce/keyboard.json | 44 -------- .../0xcb/splaytoraid/rp2040_ce/readme.md | 3 - 9 files changed, 99 insertions(+), 167 deletions(-) delete mode 100644 keyboards/0xcb/splaytoraid/32u4/keyboard.json rename keyboards/0xcb/splaytoraid/{info.json => keyboard.json} (72%) delete mode 100644 keyboards/0xcb/splaytoraid/keymaps/default/keymap.c create mode 100644 keyboards/0xcb/splaytoraid/keymaps/default/keymap.json delete mode 100644 keyboards/0xcb/splaytoraid/keymaps/default/rules.mk delete mode 100644 keyboards/0xcb/splaytoraid/rp2040_ce/keyboard.json delete mode 100644 keyboards/0xcb/splaytoraid/rp2040_ce/readme.md diff --git a/data/mappings/keyboard_aliases.hjson b/data/mappings/keyboard_aliases.hjson index babbf38940..4f63c5f15f 100644 --- a/data/mappings/keyboard_aliases.hjson +++ b/data/mappings/keyboard_aliases.hjson @@ -1620,8 +1620,11 @@ "0_sixty": { "target": "0_sixty/base" }, - "0xcb/splaytoraid": { - "target": "0xcb/splaytoraid/rp2040_ce" + "0xcb/splaytoraid/32u4": { + "target": "0xcb/splaytoraid" + }, + "0xcb/splaytoraid/rp2040_ce": { + "target": "0xcb/splaytoraid" }, "1upkeyboards/pi40": { "target": "1upkeyboards/pi40/mit_v1_0" diff --git a/keyboards/0xcb/splaytoraid/32u4/keyboard.json b/keyboards/0xcb/splaytoraid/32u4/keyboard.json deleted file mode 100644 index 7c3f0590a6..0000000000 --- a/keyboards/0xcb/splaytoraid/32u4/keyboard.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "development_board": "promicro", - "bootloader": "qmk-dfu", - "matrix_pins": { - "cols": ["F5", "F6", "F7", "F4", "B3", "B1", "B2"], - "rows": ["D3", "D2", "D1", "D4", "D7", "E6", "B4", "C6"] - }, - "diode_direction": "COL2ROW", - "rgb_matrix": { - "animations": { - "band_sat": true, - "band_spiral_val": true, - "breathing": true, - "cycle_all": true, - "cycle_left_right": true, - "raindrops": true - } - }, - "encoder": { - "rotary": [ - {"pin_a": "B5", "pin_b": "B6"} - ] - }, - "ws2812": { - "pin": "D0" - } -} diff --git a/keyboards/0xcb/splaytoraid/info.json b/keyboards/0xcb/splaytoraid/keyboard.json similarity index 72% rename from keyboards/0xcb/splaytoraid/info.json rename to keyboards/0xcb/splaytoraid/keyboard.json index 8c32b0dc11..457cc7a23a 100644 --- a/keyboards/0xcb/splaytoraid/info.json +++ b/keyboards/0xcb/splaytoraid/keyboard.json @@ -2,28 +2,58 @@ "manufacturer": "Freya", "keyboard_name": "splaytoraid", "maintainer": "freya-irl", - "url": "https://github.com/freya-irl/splaytoraid40", - "usb": { - "device_version": "1.0.0", - "pid": "0xCB00", - "vid": "0x2004" - }, - "features": { - "extrakey": true, - "rgb_matrix": true, - "bootmagic": true, - "console": true, - "mousekey": true, - "nkro": true, - "encoder": true - }, + "bootloader": "qmk-dfu", "bootmagic": { "matrix": [1, 0] }, "build": { "lto": true }, + "development_board": "promicro", + "diode_direction": "COL2ROW", + "encoder": { + "rotary": [ + {"pin_a": "B5", "pin_b": "B6"} + ] + }, + "features": { + "bootmagic": true, + "encoder": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgb_matrix": true + }, + "matrix_pins": { + "cols": ["F5", "F6", "F7", "F4", "B3", "B1", "B2"], + "rows": ["D3", "D2", "D1", "D4", "D7", "E6", "B4", "C6"] + }, "rgb_matrix": { + "animations": { + "band_sat": true, + "band_spiral_val": true, + "breathing": true, + "cycle_all": true, + "cycle_left_right": true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_up_down": true, + "digital_rain": true, + "dual_beacon": true, + "hue_breathing": true, + "jellybean_raindrops": true, + "multisplash": true, + "pixel_fractal": true, + "pixel_rain": true, + "rainbow_moving_chevron": true, + "raindrops": true, + "solid_reactive": true, + "solid_reactive_simple": true, + "solid_splash": true, + "splash": true, + "typing_heatmap": true + }, "default": { "animation": "breathing", "hue": 152, @@ -32,27 +62,36 @@ }, "driver": "ws2812", "layout": [ - {"flags": 4, "matrix": [0, 2], "x": 0, "y": 0}, - {"flags": 4, "matrix": [1, 0], "x": 20, "y": 0}, - {"flags": 4, "matrix": [7, 0], "x": 61, "y": 0}, - {"flags": 4, "matrix": [7, 1], "x": 163, "y": 0}, - {"flags": 4, "matrix": [5, 0], "x": 203, "y": 0}, - {"flags": 4, "matrix": [4, 2], "x": 224, "y": 0}, - {"flags": 4, "matrix": [6, 2], "x": 0, "y": 21}, - {"flags": 4, "matrix": [6, 1], "x": 224, "y": 21}, - {"flags": 4, "matrix": [3, 3], "x": 20, "y": 43}, - {"flags": 4, "matrix": [7, 3], "x": 61, "y": 43}, - {"flags": 4, "matrix": [6, 4], "x": 163, "y": 43}, - {"flags": 4, "matrix": [6, 3], "x": 203, "y": 43}, - {"flags": 4, "matrix": [4, 3], "x": 61, "y": 64}, - {"flags": 4, "matrix": [5, 5], "x": 81, "y": 64}, - {"flags": 4, "matrix": [7, 4], "x": 101, "y": 64}, - {"flags": 4, "matrix": [7, 5], "x": 122, "y": 64}, - {"flags": 4, "matrix": [1, 5], "x": 142, "y": 64}, - {"flags": 4, "matrix": [0, 3], "x": 163, "y": 64} + {"matrix": [0, 2], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 20, "y": 0, "flags": 4}, + {"matrix": [7, 0], "x": 61, "y": 0, "flags": 4}, + {"matrix": [7, 1], "x": 163, "y": 0, "flags": 4}, + {"matrix": [5, 0], "x": 203, "y": 0, "flags": 4}, + {"matrix": [4, 2], "x": 224, "y": 0, "flags": 4}, + {"matrix": [6, 2], "x": 0, "y": 21, "flags": 4}, + {"matrix": [6, 1], "x": 224, "y": 21, "flags": 4}, + {"matrix": [3, 3], "x": 20, "y": 43, "flags": 4}, + {"matrix": [7, 3], "x": 61, "y": 43, "flags": 4}, + {"matrix": [6, 4], "x": 163, "y": 43, "flags": 4}, + {"matrix": [6, 3], "x": 203, "y": 43, "flags": 4}, + {"matrix": [4, 3], "x": 61, "y": 64, "flags": 4}, + {"matrix": [5, 5], "x": 81, "y": 64, "flags": 4}, + {"matrix": [7, 4], "x": 101, "y": 64, "flags": 4}, + {"matrix": [7, 5], "x": 122, "y": 64, "flags": 4}, + {"matrix": [1, 5], "x": 142, "y": 64, "flags": 4}, + {"matrix": [0, 3], "x": 163, "y": 64, "flags": 4} ], "max_brightness": 200 }, + "url": "https://github.com/freya-irl/splaytoraid40", + "usb": { + "device_version": "1.0.0", + "pid": "0xCB00", + "vid": "0x2004" + }, + "ws2812": { + "pin": "D0" + }, "layouts": { "LAYOUT_36": { "layout": [ diff --git a/keyboards/0xcb/splaytoraid/keymaps/default/keymap.c b/keyboards/0xcb/splaytoraid/keymaps/default/keymap.c deleted file mode 100644 index 6a82f2ca74..0000000000 --- a/keyboards/0xcb/splaytoraid/keymaps/default/keymap.c +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2023 Conor Burns (@Conor-Burns) -/* SPDX-License-Identifier: GPL-2.0-or-later */ - -#include QMK_KEYBOARD_H - -enum layer_names { - _BASE, - _LOWER, - _RAISE, - _ADJUST -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BASE] = LAYOUT_40( - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, - KC_LSFT, KC_ESC, KC_ENT, KC_MPLY, KC_SPC, KC_DEL, KC_RSFT - ), - - [_LOWER] = LAYOUT_40( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______ - ), - - [_RAISE] = LAYOUT_40( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______ - ), - - [_ADJUST] = LAYOUT_40( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______ - ) -}; - - -const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [_LOWER] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, - [_RAISE] = { ENCODER_CCW_CW(UG_VALD, UG_VALU) }, - [_ADJUST] = { ENCODER_CCW_CW(KC_RGHT, KC_LEFT) } -}; diff --git a/keyboards/0xcb/splaytoraid/keymaps/default/keymap.json b/keyboards/0xcb/splaytoraid/keymaps/default/keymap.json new file mode 100644 index 0000000000..42bcaf28a1 --- /dev/null +++ b/keyboards/0xcb/splaytoraid/keymaps/default/keymap.json @@ -0,0 +1,21 @@ +{ + "keyboard": "0xcb/splaytoraid", + "keymap": "default", + "config": { + "features": { + "encoder_map": true + } + }, + "layout": "LAYOUT_40", + "layers": [ + [ + "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSPC", + "KC_LCTL", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", + "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", + "KC_LSFT", "KC_ESC", "KC_ENT", "KC_MPLY", "KC_SPC", "KC_DEL", "KC_RSFT" + ] + ], + "encoders": [ + [{"ccw": "KC_VOLD", "cw": "KC_VOLU"}] + ] +} diff --git a/keyboards/0xcb/splaytoraid/keymaps/default/rules.mk b/keyboards/0xcb/splaytoraid/keymaps/default/rules.mk deleted file mode 100644 index ee32568148..0000000000 --- a/keyboards/0xcb/splaytoraid/keymaps/default/rules.mk +++ /dev/null @@ -1 +0,0 @@ -ENCODER_MAP_ENABLE = yes diff --git a/keyboards/0xcb/splaytoraid/readme.md b/keyboards/0xcb/splaytoraid/readme.md index ab53696c95..4fe04c8abd 100644 --- a/keyboards/0xcb/splaytoraid/readme.md +++ b/keyboards/0xcb/splaytoraid/readme.md @@ -11,13 +11,10 @@ A 40% ergonomic keyboard with a stacked acrylic case and RGB underglow. Make example for this keyboard (after setting up your build environment): make 0xcb/splaytoraid:default - make 0xcb/splaytoraid/32u4:default Flashing example for this keyboard: make 0xcb/splaytoraid:default:flash - make 0xcb/splaytoraid/32u4: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). @@ -29,8 +26,4 @@ Enter the bootloader in 3 ways: * **Physical reset button**: Press the button on the controller (Helios) for more than 500ms or just press it (Pluto) * **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available -Please note that the default bootloader for the `32u4` version is QMK DFU, for compatibility with [0xCB Pluto](https://github.com/0xCB-dev/0xCB-Pluto). Generic Pro Micros often use a different bootloader, such as `caterina`. - -If the incorrect bootloader is specified, bootmagic reset and the `QK_BOOT` keycode will not work. - -To avoid this problem, set the correct bootloader in your custom keymap's `rules.mk` file before compiling, or flash using an appropriate target (ex: `make 0xcb/splaytoraid/32u4:default:avrdude`). See [flashing instructions and bootloader information](https://docs.qmk.fm/#/flashing) for more details. +When using an AVR microcontroller with this keyboard, the bootloader is configured to be QMK DFU for compatibility with [0xCB Pluto](https://github.com/0xCB-dev/0xCB-Pluto). If your microcontroller does not use this bootloader, ensure to set this parameter appropriately in your keymap's `rules.mk` file. diff --git a/keyboards/0xcb/splaytoraid/rp2040_ce/keyboard.json b/keyboards/0xcb/splaytoraid/rp2040_ce/keyboard.json deleted file mode 100644 index b5a4f95c69..0000000000 --- a/keyboards/0xcb/splaytoraid/rp2040_ce/keyboard.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "development_board": "promicro_rp2040", - "matrix_pins": { - "cols": ["GP28", "GP27", "GP26", "GP29", "GP20", "GP22", "GP23"], - "rows": ["GP0", "GP1", "GP2", "GP4", "GP6", "GP7", "GP8", "GP5"] - }, - "diode_direction": "COL2ROW", - "rgb_matrix": { - "animations": { - "band_sat": true, - "band_spiral_val": true, - "breathing": true, - "cycle_all": true, - "cycle_left_right": true, - "cycle_out_in": true, - "cycle_out_in_dual": true, - "cycle_pinwheel": true, - "cycle_up_down": true, - "digital_rain": true, - "dual_beacon": true, - "hue_breathing": true, - "jellybean_raindrops": true, - "multisplash": true, - "pixel_fractal": true, - "pixel_rain": true, - "rainbow_moving_chevron": true, - "raindrops": true, - "solid_reactive": true, - "solid_reactive_simple": true, - "solid_splash": true, - "splash": true, - "typing_heatmap": true - } - }, - "encoder": { - "rotary": [ - {"pin_a": "GP9", "pin_b": "GP21"} - ] - }, - "ws2812": { - "pin": "GP3", - "driver": "vendor" - } -} diff --git a/keyboards/0xcb/splaytoraid/rp2040_ce/readme.md b/keyboards/0xcb/splaytoraid/rp2040_ce/readme.md deleted file mode 100644 index f6ff200ac3..0000000000 --- a/keyboards/0xcb/splaytoraid/rp2040_ce/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -# rp2040_ce - -This folder is set as default in the parent rules.mk - it will build firmware compatible with the RP2040 Community Edition. See [here](https://docs.qmk.fm/#/platformdev_rp2040?id=rp2040_ce) for a list. From a4d10e9f64da253ffea326ce4dc9fe2c06298f71 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Wed, 10 Sep 2025 17:33:38 -0600 Subject: [PATCH 49/99] Refactor `40percentclub/gherkin` (#25608) --- data/mappings/keyboard_aliases.hjson | 6 ++ keyboards/40percentclub/gherkin/info.json | 62 ---------------- .../gherkin/kb2040/keyboard.json | 12 --- .../40percentclub/gherkin/kb2040/readme.md | 22 ------ keyboards/40percentclub/gherkin/keyboard.json | 74 +++++++++++++++++++ .../gherkin/keymaps/default/keymap.c | 52 ------------- .../gherkin/keymaps/default/keymap.json | 37 ++++++++++ .../gherkin/pro_micro/keyboard.json | 16 ---- keyboards/40percentclub/gherkin/readme.md | 22 ++++-- 9 files changed, 131 insertions(+), 172 deletions(-) delete mode 100644 keyboards/40percentclub/gherkin/info.json delete mode 100644 keyboards/40percentclub/gherkin/kb2040/keyboard.json delete mode 100644 keyboards/40percentclub/gherkin/kb2040/readme.md create mode 100644 keyboards/40percentclub/gherkin/keyboard.json delete mode 100644 keyboards/40percentclub/gherkin/keymaps/default/keymap.c create mode 100644 keyboards/40percentclub/gherkin/keymaps/default/keymap.json delete mode 100644 keyboards/40percentclub/gherkin/pro_micro/keyboard.json diff --git a/data/mappings/keyboard_aliases.hjson b/data/mappings/keyboard_aliases.hjson index 4f63c5f15f..c958cecbc9 100644 --- a/data/mappings/keyboard_aliases.hjson +++ b/data/mappings/keyboard_aliases.hjson @@ -1647,6 +1647,12 @@ "25keys/zinc": { "target": "25keys/zinc/rev1" }, + "40percentclub/gherkin/kb2040": { + "target": "40percentclub/gherkin" + }, + "40percentclub/gherkin/pro_micro": { + "target": "40percentclub/gherkin" + }, "40percentclub/i75": { "target": "40percentclub/i75/promicro" }, diff --git a/keyboards/40percentclub/gherkin/info.json b/keyboards/40percentclub/gherkin/info.json deleted file mode 100644 index 644001bc05..0000000000 --- a/keyboards/40percentclub/gherkin/info.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "keyboard_name": "Gherkin", - "manufacturer": "40 Percent Club", - "maintainer": "qmk", - "usb": { - "vid": "0x4025", - "pid": "0x6060", - "device_version": "0.0.1" - }, - "features": { - "bootmagic": true, - "mousekey": true, - "extrakey": true, - "nkro": true, - "backlight": true - }, - "qmk": { - "locking": { - "enabled": true, - "resync": true - } - }, - "community_layouts": ["ortho_3x10"], - "layouts": { - "LAYOUT_ortho_3x10": { - "layout": [ - {"matrix": [0, 0], "x": 0, "y": 0}, - {"matrix": [0, 1], "x": 1, "y": 0}, - {"matrix": [0, 2], "x": 2, "y": 0}, - {"matrix": [0, 3], "x": 3, "y": 0}, - {"matrix": [0, 4], "x": 4, "y": 0}, - {"matrix": [0, 5], "x": 5, "y": 0}, - {"matrix": [1, 0], "x": 6, "y": 0}, - {"matrix": [1, 1], "x": 7, "y": 0}, - {"matrix": [1, 2], "x": 8, "y": 0}, - {"matrix": [1, 3], "x": 9, "y": 0}, - - {"matrix": [1, 4], "x": 0, "y": 1}, - {"matrix": [1, 5], "x": 1, "y": 1}, - {"matrix": [2, 0], "x": 2, "y": 1}, - {"matrix": [2, 1], "x": 3, "y": 1}, - {"matrix": [2, 2], "x": 4, "y": 1}, - {"matrix": [2, 3], "x": 5, "y": 1}, - {"matrix": [2, 4], "x": 6, "y": 1}, - {"matrix": [2, 5], "x": 7, "y": 1}, - {"matrix": [3, 0], "x": 8, "y": 1}, - {"matrix": [3, 1], "x": 9, "y": 1}, - - {"matrix": [3, 2], "x": 0, "y": 2}, - {"matrix": [3, 3], "x": 1, "y": 2}, - {"matrix": [3, 4], "x": 2, "y": 2}, - {"matrix": [3, 5], "x": 3, "y": 2}, - {"matrix": [4, 0], "x": 4, "y": 2}, - {"matrix": [4, 1], "x": 5, "y": 2}, - {"matrix": [4, 2], "x": 6, "y": 2}, - {"matrix": [4, 3], "x": 7, "y": 2}, - {"matrix": [4, 4], "x": 8, "y": 2}, - {"matrix": [4, 5], "x": 9, "y": 2} - ] - } - } -} diff --git a/keyboards/40percentclub/gherkin/kb2040/keyboard.json b/keyboards/40percentclub/gherkin/kb2040/keyboard.json deleted file mode 100644 index 431ac371ee..0000000000 --- a/keyboards/40percentclub/gherkin/kb2040/keyboard.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "development_board": "kb2040", - "matrix_pins": { - "cols": ["GP8", "GP7", "GP6", "GP5", "GP4", "GP3"], - "rows": ["GP26", "GP18", "GP20", "GP19", "GP10"] - }, - "diode_direction": "COL2ROW", - "backlight": { - "pin": "GP9", - "driver": "software" - } -} diff --git a/keyboards/40percentclub/gherkin/kb2040/readme.md b/keyboards/40percentclub/gherkin/kb2040/readme.md deleted file mode 100644 index 1fc9e8b18e..0000000000 --- a/keyboards/40percentclub/gherkin/kb2040/readme.md +++ /dev/null @@ -1,22 +0,0 @@ -# Gherkin - -![Gherkin](https://i.imgur.com/XrqqtTq.jpg) -![KB2040](https://cdn-shop.adafruit.com/640x480/5302-12.jpg) - -=== - -A 30 key keyboard with Adafruit's KB2040 as microcontroller. - -* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/gherkin) - -Keyboard Maintainer: QMK Community -Hardware Supported: Gherkin PCB & Adafruit KB2040 -Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.club/2016/11/gherkin.html) and [Adafruit KB2040](https://www.adafruit.com/product/5302) - -Make example for this keyboard (after setting up your build environment): - - make 40percentclub/gherkin/kb2040: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). - -Use the KB2040 microcontroller as a drop-in replacement for the Pro Micro in this cute 30% keyboard. diff --git a/keyboards/40percentclub/gherkin/keyboard.json b/keyboards/40percentclub/gherkin/keyboard.json new file mode 100644 index 0000000000..1416997b47 --- /dev/null +++ b/keyboards/40percentclub/gherkin/keyboard.json @@ -0,0 +1,74 @@ +{ + "manufacturer": "40 Percent Club", + "keyboard_name": "Gherkin", + "maintainer": "qmk", + "backlight": { + "pin": "B5" + }, + "development_board": "promicro", + "diode_direction": "COL2ROW", + "features": { + "backlight": true, + "bootmagic": true, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "indicators": { + "caps_lock": "B0", + "num_lock": "D5", + "on_state": 0 + }, + "matrix_pins": { + "cols": ["B4", "E6", "D7", "C6", "D4", "D0"], + "rows": ["F7", "B1", "B3", "B2", "B6"] + }, + "qmk": { + "locking": { + "enabled": true, + "resync": true + } + }, + "usb": { + "device_version": "0.0.1", + "pid": "0x6060", + "vid": "0x4025" + }, + "community_layouts": ["ortho_3x10"], + "layouts": { + "LAYOUT_ortho_3x10": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + {"matrix": [0, 5], "x": 5, "y": 0}, + {"matrix": [1, 0], "x": 6, "y": 0}, + {"matrix": [1, 1], "x": 7, "y": 0}, + {"matrix": [1, 2], "x": 8, "y": 0}, + {"matrix": [1, 3], "x": 9, "y": 0}, + {"matrix": [1, 4], "x": 0, "y": 1}, + {"matrix": [1, 5], "x": 1, "y": 1}, + {"matrix": [2, 0], "x": 2, "y": 1}, + {"matrix": [2, 1], "x": 3, "y": 1}, + {"matrix": [2, 2], "x": 4, "y": 1}, + {"matrix": [2, 3], "x": 5, "y": 1}, + {"matrix": [2, 4], "x": 6, "y": 1}, + {"matrix": [2, 5], "x": 7, "y": 1}, + {"matrix": [3, 0], "x": 8, "y": 1}, + {"matrix": [3, 1], "x": 9, "y": 1}, + {"matrix": [3, 2], "x": 0, "y": 2}, + {"matrix": [3, 3], "x": 1, "y": 2}, + {"matrix": [3, 4], "x": 2, "y": 2}, + {"matrix": [3, 5], "x": 3, "y": 2}, + {"matrix": [4, 0], "x": 4, "y": 2}, + {"matrix": [4, 1], "x": 5, "y": 2}, + {"matrix": [4, 2], "x": 6, "y": 2}, + {"matrix": [4, 3], "x": 7, "y": 2}, + {"matrix": [4, 4], "x": 8, "y": 2}, + {"matrix": [4, 5], "x": 9, "y": 2} + ] + } + } +} diff --git a/keyboards/40percentclub/gherkin/keymaps/default/keymap.c b/keyboards/40percentclub/gherkin/keymaps/default/keymap.c deleted file mode 100644 index 8c28b68afa..0000000000 --- a/keyboards/40percentclub/gherkin/keymaps/default/keymap.c +++ /dev/null @@ -1,52 +0,0 @@ -#include QMK_KEYBOARD_H - -#define FN1_SPC LT(1, KC_SPC) -#define FN2_BSPC LT(2, KC_BSPC) -#define FN3_C LT(3, KC_C) -#define FN4_V LT(4, KC_V) -#define FN5_B LT(5, KC_B) -#define CTL_Z CTL_T(KC_Z) -#define ALT_X ALT_T(KC_X) -#define ALT_N ALGR_T(KC_N) -#define CTL_M RCTL_T(KC_M) -#define SFT_ENT RSFT_T(KC_ENT) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [0] = LAYOUT_ortho_3x10( - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC, - CTL_Z, ALT_X, FN3_C, FN4_V, FN2_BSPC,FN1_SPC, FN5_B, ALT_N, CTL_M, SFT_ENT - ), - - [1] = LAYOUT_ortho_3x10( - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, - _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______ - ), - - [2] = LAYOUT_ortho_3x10( - KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, - KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, KC_GRV, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - [3] = LAYOUT_ortho_3x10( - _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, - KC_TAB, _______, _______, _______, _______, KC_COMM, KC_DOT, KC_SLSH, KC_SCLN, KC_QUOT, - _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT - ), - - [4] = LAYOUT_ortho_3x10( - _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, - KC_TAB, _______, _______, _______, _______, KC_LABK, KC_RABK, KC_QUES, KC_COLN, KC_DQUO, - _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END - ), - - [5] = LAYOUT_ortho_3x10( - KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, _______, _______, _______, _______, _______, KC_PSCR, - _______, _______, _______, _______, _______, _______, _______, _______, BL_DOWN, BL_UP, - _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______ - ) - -}; diff --git a/keyboards/40percentclub/gherkin/keymaps/default/keymap.json b/keyboards/40percentclub/gherkin/keymaps/default/keymap.json new file mode 100644 index 0000000000..e81a6fd8f5 --- /dev/null +++ b/keyboards/40percentclub/gherkin/keymaps/default/keymap.json @@ -0,0 +1,37 @@ +{ + "keyboard": "40percentclub/gherkin", + "keymap": "default", + "layout": "LAYOUT_ortho_3x10", + "layers": [ + [ + "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", + "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_ESC", + "CTL_T(KC_Z)", "ALT_T(KC_X)", "LT(3, KC_C)", "LT(4, KC_V)", "LT(2, KC_BSPC)", "LT(1, KC_SPC)", "LT(5, KC_B)", "ALGR_T(KC_N)", "RCTL_T(KC_M)", "RSFT_T(KC_ENT)" + ], + [ + "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", + "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", + "_______", "_______", "_______", "_______", "KC_DEL", "_______", "_______", "_______", "_______", "_______" + ], + [ + "KC_EXLM", "KC_AT", "KC_HASH", "KC_DLR", "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_LPRN", "KC_RPRN", + "KC_F11", "KC_F12", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "KC_GRV", + "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______" + ], + [ + "_______", "_______", "_______", "_______", "_______", "KC_MINS", "KC_EQL", "KC_LBRC", "KC_RBRC", "KC_BSLS", + "KC_TAB", "_______", "_______", "_______", "_______", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_SCLN", "KC_QUOT", + "_______", "_______", "_______", "_______", "_______", "_______", "KC_LEFT", "KC_DOWN", "KC_UP", "KC_RGHT" + ], + [ + "_______", "_______", "_______", "_______", "_______", "KC_UNDS", "KC_PLUS", "KC_LCBR", "KC_RCBR", "KC_PIPE", + "KC_TAB", "_______", "_______", "_______", "_______", "KC_LABK", "KC_RABK", "KC_QUES", "KC_COLN", "KC_DQUO", + "_______", "_______", "_______", "_______", "_______", "_______", "KC_HOME", "KC_PGDN", "KC_PGUP", "KC_END" + ], + [ + "KC_CALC", "KC_WHOM", "KC_MAIL", "KC_MYCM", "_______", "_______", "_______", "_______", "_______", "KC_PSCR", + "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "BL_DOWN", "BL_UP", + "_______", "_______", "_______", "_______", "QK_BOOT", "_______", "_______", "_______", "_______", "_______" + ] + ] +} diff --git a/keyboards/40percentclub/gherkin/pro_micro/keyboard.json b/keyboards/40percentclub/gherkin/pro_micro/keyboard.json deleted file mode 100644 index 882ea8f72b..0000000000 --- a/keyboards/40percentclub/gherkin/pro_micro/keyboard.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "development_board": "promicro", - "matrix_pins": { - "cols": ["B4", "E6", "D7", "C6", "D4", "D0"], - "rows": ["F7", "B1", "B3", "B2", "B6"] - }, - "diode_direction": "COL2ROW", - "indicators": { - "num_lock": "D5", - "caps_lock": "B0", - "on_state": 0 - }, - "backlight": { - "pin": "B5" - } -} diff --git a/keyboards/40percentclub/gherkin/readme.md b/keyboards/40percentclub/gherkin/readme.md index 7404f19819..5ce4d173ca 100644 --- a/keyboards/40percentclub/gherkin/readme.md +++ b/keyboards/40percentclub/gherkin/readme.md @@ -1,21 +1,27 @@ # Gherkin ![Gherkin](https://i.imgur.com/XrqqtTq.jpg) -=== A 30 key keyboard. -* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/gherkin) - -Keyboard Maintainer: QMK Community -Hardware Supported: Gherkin PCB -Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.club/2016/11/gherkin.html) +* Keyboard Maintainer: QMK Community +* Hardware Supported: Gherkin PCB w/ Pro Micro compatible development board +* Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.club/2016/11/gherkin.html) Make example for this keyboard (after setting up your build environment): make 40percentclub/gherkin:default +Flashing example for this keyboard: + + make 40percentclub/gherkin: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). -First pass at adding support for the gherkin keyboard. Compiles but completely -untested. Intended to kick-start development. +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix and plug in the keyboard +* **Physical reset**: Short the Ground and Reset pins on the microcontroller +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available From f8d677af88eb5bcfc061ef1c3ec1d4cf0d8c3d57 Mon Sep 17 00:00:00 2001 From: "Christian C. Berclaz" Date: Thu, 11 Sep 2025 10:19:10 +0200 Subject: [PATCH 50/99] Add D60B tsangan pcb (#25245) Co-authored-by: Joel Challis Co-authored-by: Drashna Jaelre --- keyboards/kbdfans/d60b/keyboard.json | 215 ++++++++++++++++++ .../kbdfans/d60b/keymaps/default/keymap.c | 37 +++ keyboards/kbdfans/d60b/readme.md | 26 +++ 3 files changed, 278 insertions(+) create mode 100644 keyboards/kbdfans/d60b/keyboard.json create mode 100644 keyboards/kbdfans/d60b/keymaps/default/keymap.c create mode 100644 keyboards/kbdfans/d60b/readme.md diff --git a/keyboards/kbdfans/d60b/keyboard.json b/keyboards/kbdfans/d60b/keyboard.json new file mode 100644 index 0000000000..817cc6f504 --- /dev/null +++ b/keyboards/kbdfans/d60b/keyboard.json @@ -0,0 +1,215 @@ +{ + "manufacturer": "KBDfans", + "keyboard_name": "D60B", + "maintainer": "chrisgve", + "bootloader": "atmel-dfu", + "community_layouts": ["60_ansi_tsangan_split_bs_rshift"], + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgb_matrix": true + }, + "matrix_pins": { + "cols": ["F0", "F1", "F5", "F4", "E6", "B7", "D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4"], + "rows": ["C7", "C6", "B6", "B5", "F6"] + }, + "processor": "atmega32u4", + "qmk": { + "locking": { + "enabled": true + } + }, + "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, + "digital_rain": true, + "dual_beacon": true, + "flower_blooming": true, + "gradient_left_right": true, + "gradient_up_down": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": true, + "jellybean_raindrops": true, + "multisplash": true, + "pixel_flow": true, + "pixel_fractal": true, + "pixel_rain": true, + "rainbow_beacon": true, + "rainbow_moving_chevron": true, + "rainbow_pinwheels": true, + "raindrops": true, + "riverflow": true, + "solid_multisplash": true, + "solid_reactive": true, + "solid_reactive_cross": true, + "solid_reactive_multicross": true, + "solid_reactive_multinexus": true, + "solid_reactive_multiwide": true, + "solid_reactive_nexus": true, + "solid_reactive_simple": true, + "solid_reactive_wide": true, + "solid_splash": true + }, + "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 208, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 192, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4}, + {"matrix": [3, 1], "x": 16, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 208, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 32, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 48, "y": 64, "flags": 4}, + {"matrix": [4, 7], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 176, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 208, "y": 64, "flags": 4}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 4} + ], + "max_brightness": 200, + "sleep": true + }, + "usb": { + "device_version": "0.0.1", + "pid": "0x1600", + "vid": "0xCA04" + }, + "ws2812": { + "pin": "F7" + }, + "layouts": { + "LAYOUT_60_ansi_tsangan_split_bs_rshift": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + {"matrix": [0, 5], "x": 5, "y": 0}, + {"matrix": [0, 6], "x": 6, "y": 0}, + {"matrix": [0, 7], "x": 7, "y": 0}, + {"matrix": [0, 8], "x": 8, "y": 0}, + {"matrix": [0, 9], "x": 9, "y": 0}, + {"matrix": [0, 10], "x": 10, "y": 0}, + {"matrix": [0, 11], "x": 11, "y": 0}, + {"matrix": [0, 12], "x": 12, "y": 0}, + {"matrix": [0, 13], "x": 13, "y": 0}, + {"matrix": [0, 14], "x": 14, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [1, 2], "x": 1.5, "y": 1}, + {"matrix": [1, 3], "x": 2.5, "y": 1}, + {"matrix": [1, 4], "x": 3.5, "y": 1}, + {"matrix": [1, 5], "x": 4.5, "y": 1}, + {"matrix": [1, 6], "x": 5.5, "y": 1}, + {"matrix": [1, 7], "x": 6.5, "y": 1}, + {"matrix": [1, 8], "x": 7.5, "y": 1}, + {"matrix": [1, 9], "x": 8.5, "y": 1}, + {"matrix": [1, 10], "x": 9.5, "y": 1}, + {"matrix": [1, 11], "x": 10.5, "y": 1}, + {"matrix": [1, 12], "x": 11.5, "y": 1}, + {"matrix": [1, 13], "x": 12.5, "y": 1}, + {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5}, + {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [2, 2], "x": 1.75, "y": 2}, + {"matrix": [2, 3], "x": 2.75, "y": 2}, + {"matrix": [2, 4], "x": 3.75, "y": 2}, + {"matrix": [2, 5], "x": 4.75, "y": 2}, + {"matrix": [2, 6], "x": 5.75, "y": 2}, + {"matrix": [2, 7], "x": 6.75, "y": 2}, + {"matrix": [2, 8], "x": 7.75, "y": 2}, + {"matrix": [2, 9], "x": 8.75, "y": 2}, + {"matrix": [2, 10], "x": 9.75, "y": 2}, + {"matrix": [2, 11], "x": 10.75, "y": 2}, + {"matrix": [2, 12], "x": 11.75, "y": 2}, + {"matrix": [2, 14], "x": 12.75, "y": 2, "w": 2.25}, + {"matrix": [3, 1], "x": 0, "y": 3, "w": 2.25}, + {"matrix": [3, 2], "x": 2.25, "y": 3}, + {"matrix": [3, 3], "x": 3.25, "y": 3}, + {"matrix": [3, 4], "x": 4.25, "y": 3}, + {"matrix": [3, 5], "x": 5.25, "y": 3}, + {"matrix": [3, 6], "x": 6.25, "y": 3}, + {"matrix": [3, 7], "x": 7.25, "y": 3}, + {"matrix": [3, 8], "x": 8.25, "y": 3}, + {"matrix": [3, 9], "x": 9.25, "y": 3}, + {"matrix": [3, 10], "x": 10.25, "y": 3}, + {"matrix": [3, 11], "x": 11.25, "y": 3}, + {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75}, + {"matrix": [3, 14], "x": 14, "y": 3}, + {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5}, + {"matrix": [4, 2], "x": 1.5, "y": 4}, + {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5}, + {"matrix": [4, 7], "x": 4, "y": 4, "w": 7}, + {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5}, + {"matrix": [4, 13], "x": 12.5, "y": 4}, + {"matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5} + ] + } + } +} diff --git a/keyboards/kbdfans/d60b/keymaps/default/keymap.c b/keyboards/kbdfans/d60b/keymaps/default/keymap.c new file mode 100644 index 0000000000..d0a47b0d2f --- /dev/null +++ b/keyboards/kbdfans/d60b/keymaps/default/keymap.c @@ -0,0 +1,37 @@ +/* Copyright 2025 chrisgve + * + * 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 + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0]=LAYOUT_60_ansi_tsangan_split_bs_rshift( + QK_GESC, 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_GRAVE, KC_BSPC, + 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_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), + KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL + ), + + [1]=LAYOUT_60_ansi_tsangan_split_bs_rshift( + KC_GRV, 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_DEL, + RM_TOGG, RM_NEXT, RM_PREV, RM_HUEU, RM_HUED, RM_SATU, RM_SATD, RM_VALU, RM_VALD, RM_SPDU, RM_SPDD, _______, QK_BOOT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______ + ) +}; +//clang-format on diff --git a/keyboards/kbdfans/d60b/readme.md b/keyboards/kbdfans/d60b/readme.md new file mode 100644 index 0000000000..903a52019f --- /dev/null +++ b/keyboards/kbdfans/d60b/readme.md @@ -0,0 +1,26 @@ +# KBDfans D60B + +Customizable 60% Tsangan Hotswap by PCB by [KBDfans](https://kbdfans.com). +This board has also, at times, been referred to as the Sun60, but the name on the PCB is D60 B. + +- Keyboard Maintainer: [chrisgve](https://github.com/chrisgve) +- Hardware Supported: KBDfans D60B +- Hardware Availability: no longer available for sale + +Make example for this keyboard (after setting up your build environment): + + make kbdfans/d60b:default + +The keyboard uses a DFU bootloader. To make a keymap and use dfu to flash it: + + make kbdfans/d60b: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 3 ways: + +- **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +- **Physical reset button**: Short the two pads close to the position of the caps lock key +- **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available From 74b0f054c1850baab3a4a66b6296ebe240a6b7ae Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Thu, 11 Sep 2025 11:34:10 -0600 Subject: [PATCH 51/99] Migrate `g_led_config` to DD (YZ) (#25650) --- keyboards/yandrstudio/nz64/keyboard.json | 84 +++++++++++++++++++++ keyboards/yandrstudio/nz64/nz64.c | 34 --------- keyboards/yandrstudio/nz67v2/keyboard.json | 88 ++++++++++++++++++++++ keyboards/yandrstudio/nz67v2/nz67v2.c | 30 -------- keyboards/yandrstudio/tg67/keyboard.json | 71 +++++++++++++++++ keyboards/yandrstudio/tg67/tg67.c | 46 ----------- keyboards/yanghu/unicorne/info.json | 12 ++- keyboards/yanghu/unicorne/unicorne.c | 31 -------- keyboards/ymdk/ymd40/air40/air40.c | 43 ----------- keyboards/ymdk/ymd40/air40/keyboard.json | 53 +++++++++++++ keyboards/yncognito/batpad/batpad.c | 35 --------- keyboards/yncognito/batpad/keyboard.json | 10 +++ keyboards/yushakobo/quick17/keyboard.json | 20 +++++ keyboards/yushakobo/quick17/quick17.c | 37 --------- keyboards/zykrah/fuyu/fuyu.c | 46 ----------- keyboards/zykrah/fuyu/keyboard.json | 43 +++++++++++ 16 files changed, 380 insertions(+), 303 deletions(-) delete mode 100644 keyboards/yandrstudio/tg67/tg67.c delete mode 100644 keyboards/ymdk/ymd40/air40/air40.c delete mode 100644 keyboards/yncognito/batpad/batpad.c delete mode 100644 keyboards/yushakobo/quick17/quick17.c delete mode 100644 keyboards/zykrah/fuyu/fuyu.c diff --git a/keyboards/yandrstudio/nz64/keyboard.json b/keyboards/yandrstudio/nz64/keyboard.json index 8c36b73c1e..e7c879ca36 100644 --- a/keyboards/yandrstudio/nz64/keyboard.json +++ b/keyboards/yandrstudio/nz64/keyboard.json @@ -59,6 +59,90 @@ }, "center_point": [96, 32], "driver": "ws2812", + "layout": [ + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 207, "y": 64, "flags": 4}, + {"matrix": [4, 11], "x": 190, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 172, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 155, "y": 64, "flags": 4}, + {"x": 121, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 86, "y": 64, "flags": 4}, + {"x": 52, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 34, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 17, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [3, 13], "x": 224, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 207, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 190, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 172, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 155, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 138, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 121, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 103, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 86, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 69, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 34, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 17, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4}, + {"matrix": [2, 13], "x": 224, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 190, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 155, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 138, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 121, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 103, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 69, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 52, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 34, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 17, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [1, 13], "x": 224, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 207, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 190, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 155, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 138, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 121, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 103, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 86, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 69, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 34, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 17, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [0, 13], "x": 224, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 207, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 190, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 172, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 155, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 138, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 121, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 103, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 86, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 69, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 52, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 34, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 17, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 37, "y": 0, "flags": 2}, + {"x": 75, "y": 0, "flags": 2}, + {"x": 112, "y": 0, "flags": 2}, + {"x": 149, "y": 0, "flags": 2}, + {"x": 187, "y": 0, "flags": 2}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 0, "y": 32, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 187, "y": 64, "flags": 2}, + {"x": 149, "y": 64, "flags": 2}, + {"x": 112, "y": 64, "flags": 2}, + {"x": 75, "y": 64, "flags": 2}, + {"x": 37, "y": 64, "flags": 2}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 224, "y": 32, "flags": 2} + ], "max_brightness": 180, "sleep": true }, diff --git a/keyboards/yandrstudio/nz64/nz64.c b/keyboards/yandrstudio/nz64/nz64.c index 928b0b5114..6bd3e08fbf 100644 --- a/keyboards/yandrstudio/nz64/nz64.c +++ b/keyboards/yandrstudio/nz64/nz64.c @@ -23,40 +23,6 @@ typedef union { } kb_cums_t; kb_cums_t kb_cums; -led_config_t g_led_config = { - { - { 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52 }, - { 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38 }, - { 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, NO_LED, 25 }, - { 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11 }, - { 10, 9, 8, NO_LED, NO_LED, 6, NO_LED, NO_LED, NO_LED, 4, 3, 2, 1, 0 } - }, - { - /* LED Index to Physical Position */ - {224,64},{207,64},{190,64},{172,64},{155,64}, {121,64}, {86,64}, {52,64}, {34,64},{17,64},{0,64}, - {224,48},{207,48},{190,48},{172,48},{155,48},{138,48},{121,48},{103,48},{86,48},{69,48},{52,48},{34,48},{17,48},{0,48}, - {224,32},{190,32},{172,32},{155,32},{138,32},{121,32},{103,32},{86,32},{69,32},{52,32},{34,32},{17,32},{0,32}, - {224,16},{207,16},{190,16},{172,16},{155,16},{138,16},{121,16},{103,16},{86,16},{69,16},{52,16},{34,16},{17,16},{0,16}, - {224,0},{207,0},{190,0},{172,0},{155,0},{138,0},{121,0},{103,0},{86,0},{69,0},{52,0},{34,0},{17,0},{0,0}, - {0,0},{37,0},{75,0},{112,0},{149,0},{187,0},{224,0}, - {0,32}, - {224,64},{187,64},{149,64},{112,64},{75,64},{37,64},{0,64}, - {224,32} - }, - { - /* LED Index to Flag */ - 4,4,4,4,4, 4,4,4,4,4, - 4,4,4,4,4, 4,4,4,4,4, - 4,4,4,4,4, 4,4,4,4,4, - 4,4,4,4,4, 4,4,4,4,4, - 4,4,4,4,4, 4,4,4,4,4, - 4,4,4,4,4, 4,4,4,4,4, - 4,4,4,4,4, 4, - 2,2,2,2,2, 2,2,2,2,2, - 2,2,2,2,2, 2 - } -}; - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; diff --git a/keyboards/yandrstudio/nz67v2/keyboard.json b/keyboards/yandrstudio/nz67v2/keyboard.json index fc931f3427..56de8d8b87 100644 --- a/keyboards/yandrstudio/nz67v2/keyboard.json +++ b/keyboards/yandrstudio/nz67v2/keyboard.json @@ -65,6 +65,94 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 16, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 32, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 48, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 80, "y": 64, "flags": 4}, + {"matrix": [4, 7], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 144, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 160, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 192, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 208, "y": 64, "flags": 4}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 208, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 192, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 16, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 208, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 208, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"x": 224, "y": 0, "flags": 2}, + {"x": 196, "y": 0, "flags": 2}, + {"x": 168, "y": 0, "flags": 2}, + {"x": 140, "y": 0, "flags": 2}, + {"x": 112, "y": 0, "flags": 2}, + {"x": 84, "y": 0, "flags": 2}, + {"x": 56, "y": 0, "flags": 2}, + {"x": 28, "y": 0, "flags": 2}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 224, "y": 64, "flags": 2}, + {"x": 196, "y": 64, "flags": 2}, + {"x": 168, "y": 64, "flags": 2}, + {"x": 140, "y": 64, "flags": 2}, + {"x": 112, "y": 64, "flags": 2}, + {"x": 84, "y": 64, "flags": 2}, + {"x": 56, "y": 64, "flags": 2}, + {"x": 28, "y": 64, "flags": 2} + ], "max_brightness": 180, "sleep": true }, diff --git a/keyboards/yandrstudio/nz67v2/nz67v2.c b/keyboards/yandrstudio/nz67v2/nz67v2.c index c3162dd961..22f3570607 100644 --- a/keyboards/yandrstudio/nz67v2/nz67v2.c +++ b/keyboards/yandrstudio/nz67v2/nz67v2.c @@ -24,36 +24,6 @@ typedef union { } kb_cums_t; kb_cums_t kb_cums; -led_config_t g_led_config = { - { - {54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68}, - {53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39}, - {25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, NO_LED, 37, 38}, - {24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, NO_LED, 13, 12, 11}, - {0, 1, 2, 3, NO_LED, 4, NO_LED, 5, NO_LED, 6, 7, NO_LED, 8, 9, 10} - }, - { - {0,64},{16,64},{32,64},{48,64}, {80,64}, {112,64}, {144,64},{160,64}, {192,64},{208,64},{224,64}, - {224,48},{208,48},{192,48}, {160,48},{144,48},{128,48},{112,48},{96,48},{80,48},{64,48},{48,48},{32,48},{16,48},{0,48}, - {0,32},{16,32},{32,32},{48,32},{64,32},{80,32},{96,32},{112,32},{128,32},{144,32},{160,32},{176,32}, {208,32},{224,32}, - {224,16},{208,16},{192,16},{176,16},{160,16},{144,16},{128,16},{112,16},{96,16},{80,16},{64,16},{48,16},{32,16},{16,16},{0,16}, - {0,0},{16,0},{32,0},{48,0},{64,0},{80,0},{96,0},{112,0},{128,0},{144,0},{160,0},{176,0},{192,0},{208,0},{224,0}, - {224,0},{196,0},{168,0},{140,0},{112,0},{84,0},{56,0},{28,0},{0,0}, - {224,64},{196,64},{168,64},{140,64},{112,64},{84,64},{56,64},{28,64} - }, - { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2 - } -}; - bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; diff --git a/keyboards/yandrstudio/tg67/keyboard.json b/keyboards/yandrstudio/tg67/keyboard.json index 8a1df37805..924b1ec689 100644 --- a/keyboards/yandrstudio/tg67/keyboard.json +++ b/keyboards/yandrstudio/tg67/keyboard.json @@ -64,6 +64,77 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 16, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 32, "y": 64, "flags": 4}, + {"x": 48, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 80, "y": 64, "flags": 4}, + {"x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 144, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 160, "y": 64, "flags": 4}, + {"matrix": [4, 12], "x": 192, "y": 64, "flags": 4}, + {"matrix": [4, 13], "x": 208, "y": 64, "flags": 4}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 208, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 192, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 16, "y": 48, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 208, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 208, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 16, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4} + ], "max_brightness": 250, "sleep": true }, diff --git a/keyboards/yandrstudio/tg67/tg67.c b/keyboards/yandrstudio/tg67/tg67.c deleted file mode 100644 index 5384778a68..0000000000 --- a/keyboards/yandrstudio/tg67/tg67.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright 2022 JasonRen(biu) - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE - -led_config_t g_led_config = { - { - {54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68}, - {53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39}, - {25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, NO_LED, 37, 38}, - {24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, NO_LED, 13, 12, 11}, - {0, 1, 2, NO_LED, NO_LED, 4, NO_LED, NO_LED, NO_LED, 6, 7, NO_LED, 8, 9, 10} - }, - { - {0,64},{16,64},{32,64},{48,64}, {80,64}, {112,64}, {144,64},{160,64}, {192,64},{208,64},{224,64}, - {224,48},{208,48},{192,48}, {160,48},{144,48},{128,48},{112,48},{96,48},{80,48},{64,48},{48,48},{32,48},{16,48},{0,48}, - {0,32},{16,32},{32,32},{48,32},{64,32},{80,32},{96,32},{112,32},{128,32},{144,32},{160,32},{176,32}, {208,32},{224,32}, - {224,16},{208,16},{192,16},{176,16},{160,16},{144,16},{128,16},{112,16},{96,16},{80,16},{64,16},{48,16},{32,16},{16,16},{0,16}, - {0,0},{16,0},{32,0},{48,0},{64,0},{80,0},{96,0},{112,0},{128,0},{144,0},{160,0},{176,0},{192,0},{208,0},{224,0} - }, - { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4 - } -}; - -#endif diff --git a/keyboards/yanghu/unicorne/info.json b/keyboards/yanghu/unicorne/info.json index 1b890dcaba..838f9d330e 100644 --- a/keyboards/yanghu/unicorne/info.json +++ b/keyboards/yanghu/unicorne/info.json @@ -41,7 +41,17 @@ "driver": "pwm" }, "rgb_matrix": { - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [3, 5], "x": 94, "y": 60, "flags": 255}, + {"matrix": [2, 2], "x": 18, "y": 44, "flags": 255}, + {"matrix": [1, 2], "x": 8, "y": 10, "flags": 255}, + {"matrix": [1, 5], "x": 94, "y": 10, "flags": 255}, + {"matrix": [1, 8], "x": 130, "y": 10, "flags": 255}, + {"matrix": [1, 11], "x": 216, "y": 10, "flags": 255}, + {"matrix": [2, 11], "x": 208, "y": 44, "flags": 255}, + {"matrix": [3, 8], "x": 130, "y": 60, "flags": 255} + ] }, "matrix_pins": { "cols": ["A14", "A15", "B13", "B14", "B15", "A13", "A0", "A1", "A2", "A3", "A6", "A7"], diff --git a/keyboards/yanghu/unicorne/unicorne.c b/keyboards/yanghu/unicorne/unicorne.c index bce8f52075..e1d173d8c5 100644 --- a/keyboards/yanghu/unicorne/unicorne.c +++ b/keyboards/yanghu/unicorne/unicorne.c @@ -33,37 +33,6 @@ void i2c_init(void) { } } -// LED matrix -// physical location -// 2 3 4 5 -// -// 1 6 -// 0 7 -#ifdef RGB_MATRIX_ENABLE -// clang-format off -led_config_t g_led_config = {{ - // Key Matrix to LED Index - // Since we only have 8 LEDs, map the keys near them to the same LED. - {2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5}, - {2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5}, - {1, 1, 1, 0, 0, 0, 7, 7, 7, 6, 6, 6}, - {NO_LED, NO_LED, NO_LED, 0, 0, 0, 7, 7, 7, NO_LED, NO_LED, NO_LED}, -}, {// LED Index to Physical Position - {94, 60}, - {18, 44}, - {8, 10}, - {94, 10}, - {130,10}, - {216, 10}, - {208, 44}, - {130, 60} -}, {// LED Index to Flag - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, - LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL -}}; -// clang-format on -#endif - #ifdef OLED_ENABLE // OLED shared code // The oled is vertical. Need to rotate 270 degrees. diff --git a/keyboards/ymdk/ymd40/air40/air40.c b/keyboards/ymdk/ymd40/air40/air40.c deleted file mode 100644 index 633b4943ff..0000000000 --- a/keyboards/ymdk/ymd40/air40/air40.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright 2022 Dennis Kruyt (dennis@kruyt.org) - * - * 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 "quantum.h" - -#if defined(RGB_MATRIX_ENABLE) -led_config_t g_led_config = { - { - // Key Matrix to LED Index for center 2u - {11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, - {23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12}, - {35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24}, - {50, 49, 48, 47, 46, 43, 41, 40, 39, 38, 37, 36} - }, { - // LED Index to Physical Position, more positions due to extra leds for other layout options - { 0, 0}, { 20, 0}, { 40, 0}, {61, 0}, {81, 0}, {101, 0}, {122, 0}, {142, 0}, {162, 0}, {183, 0}, {203, 0}, {224, 0}, - { 0, 21}, { 20, 21}, { 40, 21}, {61, 21}, {81, 21}, {101, 21}, {122, 21}, {142, 21}, {162, 21}, {183, 21}, {203, 21}, {224, 21}, - { 0, 42}, { 20, 42}, { 40, 42}, {61, 42}, {81, 42}, {101, 42}, {122, 42}, {142, 42}, {162, 42}, {183, 42}, {203, 42}, {224, 42}, - { 0, 64}, { 20, 64}, { 40, 64}, {61, 64}, {81, 64}, {85, 64}, {94, 64}, {103, 64}, {112, 64}, {122, 64}, {142, 64}, {162, 64}, {183, 64}, {203, 64}, {224, 64} - - }, { - // LED Index to Flag - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1 ,1 ,1, 1, 1, 1, 1, 1, 1, 1 - - } -}; -#endif diff --git a/keyboards/ymdk/ymd40/air40/keyboard.json b/keyboards/ymdk/ymd40/air40/keyboard.json index 0adc965cc7..ea21557423 100644 --- a/keyboards/ymdk/ymd40/air40/keyboard.json +++ b/keyboards/ymdk/ymd40/air40/keyboard.json @@ -60,6 +60,59 @@ "solid_multisplash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 11], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 10], "x": 20, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 40, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 61, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 81, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 101, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 122, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 142, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 162, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 183, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 203, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 11], "x": 0, "y": 21, "flags": 1}, + {"matrix": [1, 10], "x": 20, "y": 21, "flags": 4}, + {"matrix": [1, 9], "x": 40, "y": 21, "flags": 4}, + {"matrix": [1, 8], "x": 61, "y": 21, "flags": 4}, + {"matrix": [1, 7], "x": 81, "y": 21, "flags": 4}, + {"matrix": [1, 6], "x": 101, "y": 21, "flags": 4}, + {"matrix": [1, 5], "x": 122, "y": 21, "flags": 4}, + {"matrix": [1, 4], "x": 142, "y": 21, "flags": 4}, + {"matrix": [1, 3], "x": 162, "y": 21, "flags": 4}, + {"matrix": [1, 2], "x": 183, "y": 21, "flags": 4}, + {"matrix": [1, 1], "x": 203, "y": 21, "flags": 4}, + {"matrix": [1, 0], "x": 224, "y": 21, "flags": 1}, + {"matrix": [2, 11], "x": 0, "y": 42, "flags": 1}, + {"matrix": [2, 10], "x": 20, "y": 42, "flags": 4}, + {"matrix": [2, 9], "x": 40, "y": 42, "flags": 4}, + {"matrix": [2, 8], "x": 61, "y": 42, "flags": 4}, + {"matrix": [2, 7], "x": 81, "y": 42, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 42, "flags": 4}, + {"matrix": [2, 5], "x": 122, "y": 42, "flags": 4}, + {"matrix": [2, 4], "x": 142, "y": 42, "flags": 4}, + {"matrix": [2, 3], "x": 162, "y": 42, "flags": 4}, + {"matrix": [2, 2], "x": 183, "y": 42, "flags": 4}, + {"matrix": [2, 1], "x": 203, "y": 42, "flags": 4}, + {"matrix": [2, 0], "x": 224, "y": 42, "flags": 1}, + {"matrix": [3, 11], "x": 0, "y": 64, "flags": 1}, + {"matrix": [3, 10], "x": 20, "y": 64, "flags": 1}, + {"matrix": [3, 9], "x": 40, "y": 64, "flags": 1}, + {"matrix": [3, 8], "x": 61, "y": 64, "flags": 1}, + {"matrix": [3, 7], "x": 81, "y": 64, "flags": 1}, + {"matrix": [3, 6], "x": 85, "y": 64, "flags": 1}, + {"x": 94, "y": 64, "flags": 1}, + {"matrix": [3, 5], "x": 103, "y": 64, "flags": 1}, + {"x": 112, "y": 64, "flags": 1}, + {"x": 122, "y": 64, "flags": 1}, + {"matrix": [3, 4], "x": 142, "y": 64, "flags": 1}, + {"matrix": [3, 3], "x": 162, "y": 64, "flags": 1}, + {"matrix": [3, 2], "x": 183, "y": 64, "flags": 1}, + {"matrix": [3, 1], "x": 203, "y": 64, "flags": 1}, + {"matrix": [3, 0], "x": 224, "y": 64, "flags": 1} + ], "max_brightness": 130, "sleep": true }, diff --git a/keyboards/yncognito/batpad/batpad.c b/keyboards/yncognito/batpad/batpad.c deleted file mode 100644 index d5eef4246d..0000000000 --- a/keyboards/yncognito/batpad/batpad.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright 2020 Yncognito - * - * 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 "quantum.h" - - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config ={ - { - {4 ,5 ,6 ,7 }, - {0 ,1 ,2 ,3 } - }, - { - {0,0},{75,0},{145,0},{224,0}, - {0,64},{75,64},{145,64},{224,64} - }, - { - 0x04,0x04,0x04,0x04, - 0x04,0x04,0x04,0x04 - } -}; - -#endif diff --git a/keyboards/yncognito/batpad/keyboard.json b/keyboards/yncognito/batpad/keyboard.json index 3e62042a4e..02e480ca22 100644 --- a/keyboards/yncognito/batpad/keyboard.json +++ b/keyboards/yncognito/batpad/keyboard.json @@ -60,6 +60,16 @@ "animation": "cycle_all" }, "driver": "ws2812", + "layout": [ + {"matrix": [1, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 1], "x": 75, "y": 0, "flags": 4}, + {"matrix": [1, 2], "x": 145, "y": 0, "flags": 4}, + {"matrix": [1, 3], "x": 224, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [0, 1], "x": 75, "y": 64, "flags": 4}, + {"matrix": [0, 2], "x": 145, "y": 64, "flags": 4}, + {"matrix": [0, 3], "x": 224, "y": 64, "flags": 4} + ], "react_on_keyup": true }, "features": { diff --git a/keyboards/yushakobo/quick17/keyboard.json b/keyboards/yushakobo/quick17/keyboard.json index 627642a179..621bbf810a 100644 --- a/keyboards/yushakobo/quick17/keyboard.json +++ b/keyboards/yushakobo/quick17/keyboard.json @@ -18,6 +18,26 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"matrix": [1, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [1, 1], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [2, 1], "x": 44, "y": 64, "flags": 4}, + {"matrix": [2, 2], "x": 89, "y": 64, "flags": 4}, + {"matrix": [2, 3], "x": 134, "y": 64, "flags": 4}, + {"matrix": [2, 4], "x": 179, "y": 64, "flags": 4}, + {"matrix": [2, 5], "x": 224, "y": 64, "flags": 4}, + {"matrix": [1, 5], "x": 224, "y": 32, "flags": 4}, + {"matrix": [1, 4], "x": 179, "y": 32, "flags": 4}, + {"matrix": [1, 3], "x": 134, "y": 32, "flags": 4}, + {"matrix": [1, 2], "x": 89, "y": 32, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 44, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 89, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 134, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 179, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 224, "y": 0, "flags": 4} + ], "max_brightness": 150, "sat_steps": 8, "sleep": true, diff --git a/keyboards/yushakobo/quick17/quick17.c b/keyboards/yushakobo/quick17/quick17.c deleted file mode 100644 index d6fe84199b..0000000000 --- a/keyboards/yushakobo/quick17/quick17.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2021 yushakobo - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - {12, 13, 14, 15, 16, 17}, - {0, 1, 11, 10, 9, 8}, - {2, 3, 4, 5, 6, 7} - }, - { - {0,32}, {44,32}, {0,64}, {44,64}, {89,64}, {134,64}, - {179,64},{224,64},{224,32},{179,32},{134,32},{89,32}, - {0,0}, {44,0}, {89,0}, {134,0}, {179,0}, {224,0} - }, - { - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4 - } -}; -#endif diff --git a/keyboards/zykrah/fuyu/fuyu.c b/keyboards/zykrah/fuyu/fuyu.c deleted file mode 100644 index ea1e048a64..0000000000 --- a/keyboards/zykrah/fuyu/fuyu.c +++ /dev/null @@ -1,46 +0,0 @@ -/* -Copyright 2022 Zykrah - -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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { - { - // Key Matrix to LED Index - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED} - }, { - // LED Index to Physical Position - {112, 32}, {138, 17}, {112, 2}, { 86, 17}, { 86, 47}, {112, 62}, {138, 47}, // SNOWFLAKE - { 0, 0}, { 16, 0}, { 32, 0}, { 48, 0}, { 64, 0}, { 80, 0}, { 96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {208, 0}, // UNDERGLOW - {208, 16}, {208, 32}, {208, 48}, // UNDERGLOW - {208, 64}, {192, 64}, {176, 64}, {160, 64}, {144, 64}, {128, 64}, {112, 64}, { 96, 64}, { 80, 64}, { 64, 64}, { 48, 64}, { 32, 64}, { 16, 64}, { 0, 64}, // UNDERGLOW - { 0, 48}, { 0, 32}, { 0, 16} // UNDERGLOW - }, { - // LED Index to Flag - 8, 8, 8, 8, 8, 8, 8, // SNOWFLAKE - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // UNDERGLOW - 2, 2, 2, // UNDERGLOW - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // UNDERGLOW - 2, 2, 2 // UNDERGLOW - } -}; -#endif diff --git a/keyboards/zykrah/fuyu/keyboard.json b/keyboards/zykrah/fuyu/keyboard.json index db4236b698..eafc92c1d2 100644 --- a/keyboards/zykrah/fuyu/keyboard.json +++ b/keyboards/zykrah/fuyu/keyboard.json @@ -60,6 +60,49 @@ "val": 150 }, "driver": "ws2812", + "layout": [ + {"x": 112, "y": 32, "flags": 8}, + {"x": 138, "y": 17, "flags": 8}, + {"x": 112, "y": 2, "flags": 8}, + {"x": 86, "y": 17, "flags": 8}, + {"x": 86, "y": 47, "flags": 8}, + {"x": 112, "y": 62, "flags": 8}, + {"x": 138, "y": 47, "flags": 8}, + {"x": 0, "y": 0, "flags": 2}, + {"x": 16, "y": 0, "flags": 2}, + {"x": 32, "y": 0, "flags": 2}, + {"x": 48, "y": 0, "flags": 2}, + {"x": 64, "y": 0, "flags": 2}, + {"x": 80, "y": 0, "flags": 2}, + {"x": 96, "y": 0, "flags": 2}, + {"x": 112, "y": 0, "flags": 2}, + {"x": 128, "y": 0, "flags": 2}, + {"x": 144, "y": 0, "flags": 2}, + {"x": 160, "y": 0, "flags": 2}, + {"x": 176, "y": 0, "flags": 2}, + {"x": 192, "y": 0, "flags": 2}, + {"x": 208, "y": 0, "flags": 2}, + {"x": 208, "y": 16, "flags": 2}, + {"x": 208, "y": 32, "flags": 2}, + {"x": 208, "y": 48, "flags": 2}, + {"x": 208, "y": 64, "flags": 2}, + {"x": 192, "y": 64, "flags": 2}, + {"x": 176, "y": 64, "flags": 2}, + {"x": 160, "y": 64, "flags": 2}, + {"x": 144, "y": 64, "flags": 2}, + {"x": 128, "y": 64, "flags": 2}, + {"x": 112, "y": 64, "flags": 2}, + {"x": 96, "y": 64, "flags": 2}, + {"x": 80, "y": 64, "flags": 2}, + {"x": 64, "y": 64, "flags": 2}, + {"x": 48, "y": 64, "flags": 2}, + {"x": 32, "y": 64, "flags": 2}, + {"x": 16, "y": 64, "flags": 2}, + {"x": 0, "y": 64, "flags": 2}, + {"x": 0, "y": 48, "flags": 2}, + {"x": 0, "y": 32, "flags": 2}, + {"x": 0, "y": 16, "flags": 2} + ], "max_brightness": 200 }, "ws2812": { From 4a4e4aa083db1752400ab84eade2a5b884cdc136 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 12 Sep 2025 08:12:48 +0100 Subject: [PATCH 52/99] Remove idobao *_DISABLE_UNDERGLOW behaviour (#25638) --- keyboards/idobao/id61/config.h | 28 ---------------------- keyboards/idobao/id61/post_rules.mk | 8 ------- keyboards/idobao/id63/config.h | 28 ---------------------- keyboards/idobao/id63/post_rules.mk | 8 ------- keyboards/idobao/id67/config.h | 30 ------------------------ keyboards/idobao/id67/post_rules.mk | 8 ------- keyboards/idobao/montex/v2/config.h | 28 ---------------------- keyboards/idobao/montex/v2/post_rules.mk | 8 ------- 8 files changed, 146 deletions(-) delete mode 100644 keyboards/idobao/id61/config.h delete mode 100644 keyboards/idobao/id61/post_rules.mk delete mode 100644 keyboards/idobao/id63/config.h delete mode 100644 keyboards/idobao/id63/post_rules.mk delete mode 100644 keyboards/idobao/id67/config.h delete mode 100644 keyboards/idobao/id67/post_rules.mk delete mode 100755 keyboards/idobao/montex/v2/config.h delete mode 100644 keyboards/idobao/montex/v2/post_rules.mk diff --git a/keyboards/idobao/id61/config.h b/keyboards/idobao/id61/config.h deleted file mode 100644 index 3766a8ef1d..0000000000 --- a/keyboards/idobao/id61/config.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2022 Vino Rodrigues (@vinorodrigues) -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#if defined(RGB_MATRIX_ENABLE) - #ifndef ID61_DISABLE_UNDERGLOW - #define RGB_MATRIX_LED_COUNT 71 - #else - #define RGB_MATRIX_LED_COUNT 61 // = 71 - 10 - #endif -#endif // RGB_MATRIX_ENABLE - -/* ----------------------- - * Feature disable options - * These options are also useful to firmware size reduction. - * ----------------------- */ - -/* disable debug print */ -// #define NO_DEBUG - -/* disable print */ -// #define NO_PRINT - -/* disable action features */ -// #define NO_ACTION_LAYER -// #define NO_ACTION_TAPPING -// #define NO_ACTION_ONESHOT diff --git a/keyboards/idobao/id61/post_rules.mk b/keyboards/idobao/id61/post_rules.mk deleted file mode 100644 index 673b260396..0000000000 --- a/keyboards/idobao/id61/post_rules.mk +++ /dev/null @@ -1,8 +0,0 @@ -# The Denwir D60 case has a sealed/solid undercase, -# this enables switching off thoes LEDs -# Usage: `make idobao/id61:default UNDERGLOW=off` - -UNDERGLOW ?= yes -ifneq ($(strip $(UNDERGLOW)), yes) - OPT_DEFS += -DID61_DISABLE_UNDERGLOW -endif diff --git a/keyboards/idobao/id63/config.h b/keyboards/idobao/id63/config.h deleted file mode 100644 index 5a7df9028e..0000000000 --- a/keyboards/idobao/id63/config.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2022 Vino Rodrigues (@vinorodrigues) -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#if defined(RGB_MATRIX_ENABLE) - #ifndef ID63_DISABLE_UNDERGLOW - #define RGB_MATRIX_LED_COUNT 75 - #else - #define RGB_MATRIX_LED_COUNT (75 - 12) - #endif -#endif // RGB_MATRIX_ENABLE - -/* ----------------------- - * Feature disable options - * These options are also useful to firmware size reduction. - * ----------------------- */ - -/* disable debug print */ -// #define NO_DEBUG - -/* disable print */ -// #define NO_PRINT - -/* disable action features */ -// #define NO_ACTION_LAYER -// #define NO_ACTION_TAPPING -// #define NO_ACTION_ONESHOT diff --git a/keyboards/idobao/id63/post_rules.mk b/keyboards/idobao/id63/post_rules.mk deleted file mode 100644 index 1a465397fd..0000000000 --- a/keyboards/idobao/id63/post_rules.mk +++ /dev/null @@ -1,8 +0,0 @@ -# The Denwir D60 case has a sealed/solid undercase, -# this enables switching off thoes LEDs -# Usage: `make idobao/id63:default UNDERGLOW=off` - -UNDERGLOW ?= yes -ifneq ($(strip $(UNDERGLOW)), yes) - OPT_DEFS += -DID63_DISABLE_UNDERGLOW -endif diff --git a/keyboards/idobao/id67/config.h b/keyboards/idobao/id67/config.h deleted file mode 100644 index 8f454d1ff4..0000000000 --- a/keyboards/idobao/id67/config.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2021 Tybera (@tybera) -// Copyright 2021 Werther (@thewerther) -// Copyright 2022 Vino Rodrigues (@vinorodrigues) -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#if defined(RGB_MATRIX_ENABLE) - #ifndef ID67_DISABLE_UNDERGLOW - #define RGB_MATRIX_LED_COUNT 77 - #else - #define RGB_MATRIX_LED_COUNT (77 - 10) - #endif -#endif // RGB_MATRIX_ENABLE - -/* ----------------------- - * Feature disable options - * These options are also useful to firmware size reduction. - * ----------------------- */ - -/* disable debug print */ -// #define NO_DEBUG - -/* disable print */ -// #define NO_PRINT - -/* disable action features */ -// #define NO_ACTION_LAYER -// #define NO_ACTION_TAPPING -// #define NO_ACTION_ONESHOT diff --git a/keyboards/idobao/id67/post_rules.mk b/keyboards/idobao/id67/post_rules.mk deleted file mode 100644 index 32832a65b2..0000000000 --- a/keyboards/idobao/id67/post_rules.mk +++ /dev/null @@ -1,8 +0,0 @@ -# Some ID67 variants (v1 base build & "Bestype") have a solid back plate, -# this enables switching off thoes LEDs -# Usage: `make idobao/id67:default UNDERGLOW=off` - -UNDERGLOW ?= yes -ifneq ($(strip $(UNDERGLOW)), yes) - OPT_DEFS += -DID67_DISABLE_UNDERGLOW -endif diff --git a/keyboards/idobao/montex/v2/config.h b/keyboards/idobao/montex/v2/config.h deleted file mode 100755 index 548f3f62e7..0000000000 --- a/keyboards/idobao/montex/v2/config.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2022 IBNobody (@IBNobody) -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#if defined(RGB_MATRIX_ENABLE) - #ifndef ID27_DISABLE_UNDERGLOW - #define RGB_MATRIX_LED_COUNT 31 // The number of LEDs connected - #else - #define RGB_MATRIX_LED_COUNT 27 // -4 disabled underglow LEDs - #endif -#endif // RGB_MATRIX_ENABLE - -/* ----------------------- - * Feature disable options - * These options are also useful to firmware size reduction. - * ----------------------- */ - -/* disable debug print */ -// #define NO_DEBUG - -/* disable print */ -// #define NO_PRINT - -/* disable action features */ -// #define NO_ACTION_LAYER -// #define NO_ACTION_TAPPING -// #define NO_ACTION_ONESHOT diff --git a/keyboards/idobao/montex/v2/post_rules.mk b/keyboards/idobao/montex/v2/post_rules.mk deleted file mode 100644 index f2d43fa6ac..0000000000 --- a/keyboards/idobao/montex/v2/post_rules.mk +++ /dev/null @@ -1,8 +0,0 @@ -# some (if not most) Montex have a solid back plate, -# this enables switching off the bottom facing LEDs -# Usage: `make idobao/montex/v2:default UNDERGLOW=off` - -UNDERGLOW ?= yes -ifneq ($(strip $(UNDERGLOW)), yes) - OPT_DEFS += -DID27_DISABLE_UNDERGLOW -endif From 319da7bfdb7d6d923baff139f2f5ee58c9d53182 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 12 Sep 2025 08:13:12 +0100 Subject: [PATCH 53/99] Refactor 40percentclub/ut47 (#25571) --- keyboards/40percentclub/ut47/config.h | 32 --- keyboards/40percentclub/ut47/keyboard.json | 9 + .../ut47/keymaps/default/keymap.c | 54 +---- .../40percentclub/ut47/keymaps/rgb/config.h | 20 +- .../40percentclub/ut47/keymaps/rgb/keymap.c | 54 +---- keyboards/40percentclub/ut47/led.c | 39 ---- keyboards/40percentclub/ut47/led_controls.c | 44 ++++ .../{LED_controls.ino => led_controls.ino} | 0 keyboards/40percentclub/ut47/matrix.c | 194 ------------------ keyboards/40percentclub/ut47/post_rules.mk | 5 +- keyboards/40percentclub/ut47/readme.md | 9 +- keyboards/40percentclub/ut47/rules.mk | 3 - keyboards/40percentclub/ut47/ut47.c | 36 ---- 13 files changed, 66 insertions(+), 433 deletions(-) delete mode 100644 keyboards/40percentclub/ut47/config.h delete mode 100644 keyboards/40percentclub/ut47/led.c create mode 100644 keyboards/40percentclub/ut47/led_controls.c rename keyboards/40percentclub/ut47/{LED_controls.ino => led_controls.ino} (100%) delete mode 100644 keyboards/40percentclub/ut47/matrix.c delete mode 100644 keyboards/40percentclub/ut47/rules.mk delete mode 100644 keyboards/40percentclub/ut47/ut47.c diff --git a/keyboards/40percentclub/ut47/config.h b/keyboards/40percentclub/ut47/config.h deleted file mode 100644 index f0182a59f8..0000000000 --- a/keyboards/40percentclub/ut47/config.h +++ /dev/null @@ -1,32 +0,0 @@ -/* -Copyright 2018 Carlos Filoteo - -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 . -*/ - -#pragma once - - -/* key matrix size */ -#define MATRIX_ROWS 4 -#define MATRIX_COLS 12 - -#define MATRIX_ROW_PINS { D1, D0, D4, C6 } -#define MATRIX_COL_PINS { D7, E6, B4, B5, B6, B2, B3, B1, F7, F6, F5, F4 } - -/* COL2ROW, ROW2COL*/ -#define DIODE_DIRECTION COL2ROW - -/* Enable GNAP matrix serial output */ -#define GNAP_ENABLE diff --git a/keyboards/40percentclub/ut47/keyboard.json b/keyboards/40percentclub/ut47/keyboard.json index 00c8edef69..176d2a6b2d 100644 --- a/keyboards/40percentclub/ut47/keyboard.json +++ b/keyboards/40percentclub/ut47/keyboard.json @@ -22,6 +22,15 @@ "resync": true } }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["D7", "E6", "B4", "B5", "B6", "B2", "B3", "B1", "F7", "F6", "F5", "F4"], + "rows": ["D1", "D0", "D4", "C6"] + }, + "keycodes": [ + {"key": "LED_TOG"}, + {"key": "LED_CHG"} + ], "layouts": { "LAYOUT": { "layout": [ diff --git a/keyboards/40percentclub/ut47/keymaps/default/keymap.c b/keyboards/40percentclub/ut47/keymaps/default/keymap.c index 4a9de82492..050cb6d4b3 100644 --- a/keyboards/40percentclub/ut47/keymaps/default/keymap.c +++ b/keyboards/40percentclub/ut47/keymaps/default/keymap.c @@ -1,31 +1,10 @@ -/* Copyright 2018 Carlos Filoteo - * - * 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 2018 Carlos Filoteo +// SPDX-License-Identifier: GPL-2.0-or-later #include QMK_KEYBOARD_H -#ifdef LED_ENABLE - #include "uart.h" -#endif #define LT3_TAB LT(3, KC_TAB) #define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT) -enum custom_keycodes { - LED_TOG = SAFE_RANGE, - LED_CHG -}; - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Base Layer @@ -104,32 +83,3 @@ LAYOUT( /* Tab */ _______, _______, _______, _______, _______, _______, _______, MS_LEFT, MS_DOWN, MS_UP, MS_RGHT ), }; - -//LED keymap functions - #ifdef LED_ENABLE -void led_chmode(void) { - uart_write(0x65); -} - -void led_toggle(void) { - uart_write(0x64); -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (record->event.pressed) { - switch(keycode) { - case LED_TOG: - #ifdef LED_ENABLE - led_toggle(); - #endif - return false; - case LED_CHG: - #ifdef LED_ENABLE - led_chmode(); - #endif - return false; - } - } - return true; -}; -#endif diff --git a/keyboards/40percentclub/ut47/keymaps/rgb/config.h b/keyboards/40percentclub/ut47/keymaps/rgb/config.h index d48ee2bf3f..7a66d80f0e 100644 --- a/keyboards/40percentclub/ut47/keymaps/rgb/config.h +++ b/keyboards/40percentclub/ut47/keymaps/rgb/config.h @@ -1,23 +1,7 @@ -/* Copyright 2018 Carlos Filoteo - * - * 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 2018 Carlos Filoteo +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once - -// place overrides here #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD #define RGBLIGHT_EFFECT_RAINBOW_SWIRL diff --git a/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c b/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c index 17c0be7772..1250c72f2a 100644 --- a/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c +++ b/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c @@ -1,31 +1,10 @@ -/* Copyright 2018 Carlos Filoteo - * - * 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 2018 Carlos Filoteo +// SPDX-License-Identifier: GPL-2.0-or-later #include QMK_KEYBOARD_H -#ifdef LED_ENABLE - #include "uart.h" -#endif #define LT3_TAB LT(3, KC_TAB) #define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT) -enum custom_keycodes { - LED_TOG = SAFE_RANGE, - LED_CHG -}; - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LAYOUT( @@ -56,32 +35,3 @@ LAYOUT( /* Tab */ _______, _______, _______, _______, _______, _______, _______, MS_LEFT, MS_DOWN, MS_UP, MS_RGHT ), }; - -//LED keymap functions - #ifdef LED_ENABLE -void led_chmode(void) { - uart_write(0x65); -} - -void led_toggle(void) { - uart_write(0x64); -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (record->event.pressed) { - switch(keycode) { - case LED_TOG: - #ifdef LED_ENABLE - led_toggle(); - #endif - return false; - case LED_CHG: - #ifdef LED_ENABLE - led_chmode(); - #endif - return false; - } - } - return true; -}; -#endif diff --git a/keyboards/40percentclub/ut47/led.c b/keyboards/40percentclub/ut47/led.c deleted file mode 100644 index fa431de760..0000000000 --- a/keyboards/40percentclub/ut47/led.c +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright 2012 Jun Wako - -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 -#include -#include "led.h" - -bool led_update_kb(led_t led_state) -{ - bool res = led_update_user(led_state); - if (res) { - if (led_state.caps_lock) { - // output low - gpio_set_pin_output(B0); - gpio_write_pin_low(B0); - gpio_set_pin_output(D5); - gpio_write_pin_low(D5); - } else { - // Hi-Z - gpio_set_pin_input(B0); - gpio_set_pin_input(D5); - } - } - return false; -} diff --git a/keyboards/40percentclub/ut47/led_controls.c b/keyboards/40percentclub/ut47/led_controls.c new file mode 100644 index 0000000000..34a0ceb5b7 --- /dev/null +++ b/keyboards/40percentclub/ut47/led_controls.c @@ -0,0 +1,44 @@ +// Copyright 2018 Carlos Filoteo +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H +#include "uart.h" + +bool led_update_kb(led_t led_state) { + bool res = led_update_user(led_state); + if (res) { + if (led_state.caps_lock) { + // output low + gpio_set_pin_output(B0); + gpio_write_pin_low(B0); + gpio_set_pin_output(D5); + gpio_write_pin_low(D5); + } else { + // Hi-Z + gpio_set_pin_input(B0); + gpio_set_pin_input(D5); + } + } + return false; +} + +void keyboard_post_init_kb(void) { + uart_init(9600); + + keyboard_post_init_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + uart_write((record->event.key.row * 16) + record->event.key.col); + + switch (keycode) { + case LED_TOG: + uart_write(0x64); + return false; + case LED_CHG: + uart_write(0x65); + return false; + } + } + return process_record_user(keycode, record); +} diff --git a/keyboards/40percentclub/ut47/LED_controls.ino b/keyboards/40percentclub/ut47/led_controls.ino similarity index 100% rename from keyboards/40percentclub/ut47/LED_controls.ino rename to keyboards/40percentclub/ut47/led_controls.ino diff --git a/keyboards/40percentclub/ut47/matrix.c b/keyboards/40percentclub/ut47/matrix.c deleted file mode 100644 index d803f11c5e..0000000000 --- a/keyboards/40percentclub/ut47/matrix.c +++ /dev/null @@ -1,194 +0,0 @@ -/* -Copyright 2018 Carlos Filoteo - -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 . -*/ - -/* - * scan matrix - */ -#include -#include -#include -#include -#include "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" - -#ifndef DEBOUNCE -# define DEBOUNCE 5 -#endif -static uint8_t debouncing = DEBOUNCE; - -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; - -static matrix_row_t read_cols(void); -static void init_cols(void); -static void unselect_rows(void); -static void select_row(uint8_t row); - - -inline -uint8_t matrix_rows(void) -{ - return MATRIX_ROWS; -} - -inline -uint8_t matrix_cols(void) -{ - return MATRIX_COLS; -} - -void matrix_init(void) -{ - // initialize row and col - unselect_rows(); - init_cols(); - - // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) { - matrix[i] = 0; - matrix_debouncing[i] = 0; - } -} - -uint8_t matrix_scan(void) -{ - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - select_row(i); - _delay_us(30); // without this wait read unstable value. - matrix_row_t cols = read_cols(); - if (matrix_debouncing[i] != cols) { - matrix_debouncing[i] = cols; - if (debouncing) { - dprintf("bounce!: %02X\n", debouncing); - } - debouncing = DEBOUNCE; - } - unselect_rows(); - } - - if (debouncing) { - if (--debouncing) { - _delay_ms(1); - } else { - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - matrix[i] = matrix_debouncing[i]; - } - } - } - - return 1; -} - -inline -bool matrix_is_on(uint8_t row, uint8_t col) -{ - return (matrix[row] & ((matrix_row_t)1<The reason this is an "opt-in" feature is to prevent sending serial communication over the pin, in case it ends up being used for something else (like RGB underglow). diff --git a/keyboards/40percentclub/ut47/rules.mk b/keyboards/40percentclub/ut47/rules.mk deleted file mode 100644 index 5480f61b9b..0000000000 --- a/keyboards/40percentclub/ut47/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -CUSTOM_MATRIX = yes -SRC += matrix.c -UART_DRIVER_REQUIRED = yes diff --git a/keyboards/40percentclub/ut47/ut47.c b/keyboards/40percentclub/ut47/ut47.c deleted file mode 100644 index 867d8c0202..0000000000 --- a/keyboards/40percentclub/ut47/ut47.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2018 Carlos Filoteo - * - * 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 "quantum.h" -#ifdef LED_ENABLE - #include "uart.h" - -void matrix_init_kb(void) { - uart_init(9600); - - matrix_init_user(); -} -#endif - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - // put your per-action keyboard code here - // runs for every action, just before processing by the firmware - if (record->event.pressed) { - #ifdef LED_ENABLE - uart_write((record->event.key.row*16)+record->event.key.col); - #endif - } - return process_record_user(keycode, record); -} From 3320e98ccf6d1fccfada9d6f1d97759e80a340e8 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 12 Sep 2025 10:23:16 +0100 Subject: [PATCH 54/99] Migrate `eeconfig_init_kb` implementations to config (#25422) --- keyboards/keebio/bdn9/rev1/config.h | 6 ++++ keyboards/keebio/bdn9/rev1/keyboard.json | 3 ++ keyboards/keebio/bdn9/rev1/rev1.c | 20 ++----------- keyboards/keebio/bdn9/rev2/config.h | 6 ++++ keyboards/keebio/bdn9/rev2/rev2.c | 20 ++----------- keyboards/keebio/chocopad/rev1/config.h | 6 ++++ keyboards/keebio/chocopad/rev1/keyboard.json | 3 ++ keyboards/keebio/chocopad/rev1/rev1.c | 21 -------------- keyboards/keebio/dilly/config.h | 6 ++++ keyboards/keebio/dilly/dilly.c | 18 ------------ keyboards/keebio/dsp40/rev1/keyboard.json | 3 ++ keyboards/keebio/dsp40/rev1/rev1.c | 26 ----------------- keyboards/keebio/ergodicity/config.h | 6 ++++ keyboards/keebio/ergodicity/ergodicity.c | 18 ------------ keyboards/keebio/ergodicity/keyboard.json | 3 ++ keyboards/keebio/foldkb/rev1/rev1.c | 9 ------ keyboards/keebio/iris/rev2/config.h | 6 ++++ keyboards/keebio/iris/rev2/keyboard.json | 3 ++ keyboards/keebio/iris/rev2/rev2.c | 20 ++----------- keyboards/keebio/iris/rev3/config.h | 6 ++++ keyboards/keebio/iris/rev3/keyboard.json | 3 ++ keyboards/keebio/iris/rev3/rev3.c | 20 ++----------- keyboards/keebio/iris/rev4/config.h | 6 ++++ keyboards/keebio/iris/rev4/keyboard.json | 3 ++ keyboards/keebio/iris/rev4/rev4.c | 20 ++----------- keyboards/keebio/kbo5000/rev1/config.h | 2 ++ keyboards/keebio/kbo5000/rev1/rev1.c | 20 ++----------- keyboards/keebio/levinson/rev2/config.h | 6 ++++ keyboards/keebio/levinson/rev2/keyboard.json | 17 ++++++++++- keyboards/keebio/levinson/rev2/rev2.c | 18 ------------ keyboards/keebio/levinson/rev3/config.h | 6 ++++ keyboards/keebio/levinson/rev3/keyboard.json | 3 ++ keyboards/keebio/levinson/rev3/rev3.c | 18 ------------ keyboards/keebio/nyquist/rev2/config.h | 6 ++++ keyboards/keebio/nyquist/rev2/keyboard.json | 17 ++++++++++- keyboards/keebio/nyquist/rev2/rev2.c | 18 ------------ keyboards/keebio/nyquist/rev3/config.h | 6 ++++ keyboards/keebio/nyquist/rev3/keyboard.json | 3 ++ keyboards/keebio/nyquist/rev3/rev3.c | 18 ------------ keyboards/keebio/quefrency/rev1/config.h | 6 ++++ keyboards/keebio/quefrency/rev1/rev1.c | 14 --------- keyboards/keebio/quefrency/rev2/config.h | 2 ++ keyboards/keebio/quefrency/rev2/rev2.c | 20 ++----------- keyboards/keebio/quefrency/rev3/config.h | 2 ++ keyboards/keebio/quefrency/rev3/rev3.c | 17 ----------- keyboards/keebio/stick/config.h | 6 ++++ keyboards/keebio/stick/stick.c | 17 ----------- keyboards/keebio/viterbi/rev2/config.h | 6 ++++ keyboards/keebio/viterbi/rev2/keyboard.json | 3 ++ keyboards/keebio/viterbi/rev2/rev2.c | 18 ------------ keyboards/sendyyeah/pix/config.h | 2 ++ keyboards/sendyyeah/pix/pix.c | 30 -------------------- 52 files changed, 181 insertions(+), 381 deletions(-) create mode 100644 keyboards/keebio/bdn9/rev1/config.h create mode 100644 keyboards/keebio/bdn9/rev2/config.h create mode 100644 keyboards/keebio/chocopad/rev1/config.h delete mode 100644 keyboards/keebio/chocopad/rev1/rev1.c create mode 100644 keyboards/keebio/dilly/config.h delete mode 100644 keyboards/keebio/dilly/dilly.c delete mode 100644 keyboards/keebio/dsp40/rev1/rev1.c create mode 100644 keyboards/keebio/ergodicity/config.h delete mode 100644 keyboards/keebio/ergodicity/ergodicity.c create mode 100644 keyboards/keebio/iris/rev2/config.h create mode 100644 keyboards/keebio/iris/rev3/config.h create mode 100644 keyboards/keebio/iris/rev4/config.h create mode 100644 keyboards/keebio/levinson/rev2/config.h delete mode 100644 keyboards/keebio/levinson/rev2/rev2.c create mode 100644 keyboards/keebio/levinson/rev3/config.h delete mode 100644 keyboards/keebio/levinson/rev3/rev3.c create mode 100644 keyboards/keebio/nyquist/rev2/config.h delete mode 100644 keyboards/keebio/nyquist/rev2/rev2.c create mode 100644 keyboards/keebio/nyquist/rev3/config.h delete mode 100644 keyboards/keebio/nyquist/rev3/rev3.c create mode 100644 keyboards/keebio/quefrency/rev1/config.h delete mode 100644 keyboards/keebio/quefrency/rev1/rev1.c create mode 100644 keyboards/keebio/stick/config.h create mode 100644 keyboards/keebio/viterbi/rev2/config.h delete mode 100644 keyboards/keebio/viterbi/rev2/rev2.c delete mode 100644 keyboards/sendyyeah/pix/pix.c diff --git a/keyboards/keebio/bdn9/rev1/config.h b/keyboards/keebio/bdn9/rev1/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/bdn9/rev1/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/bdn9/rev1/keyboard.json b/keyboards/keebio/bdn9/rev1/keyboard.json index 5c677db78d..8130b115f9 100644 --- a/keyboards/keebio/bdn9/rev1/keyboard.json +++ b/keyboards/keebio/bdn9/rev1/keyboard.json @@ -12,6 +12,9 @@ ] }, "backlight": { + "default": { + "brightness": 5 + }, "pin": "B5", "levels": 7 }, diff --git a/keyboards/keebio/bdn9/rev1/rev1.c b/keyboards/keebio/bdn9/rev1/rev1.c index 567de03af4..fe3defa156 100644 --- a/keyboards/keebio/bdn9/rev1/rev1.c +++ b/keyboards/keebio/bdn9/rev1/rev1.c @@ -1,22 +1,8 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + #include "quantum.h" -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(5); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} - bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } if (index == 0) { diff --git a/keyboards/keebio/bdn9/rev2/config.h b/keyboards/keebio/bdn9/rev2/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/bdn9/rev2/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/bdn9/rev2/rev2.c b/keyboards/keebio/bdn9/rev2/rev2.c index 70b0b0c4fd..fe3defa156 100644 --- a/keyboards/keebio/bdn9/rev2/rev2.c +++ b/keyboards/keebio/bdn9/rev2/rev2.c @@ -1,22 +1,8 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + #include "quantum.h" -void eeconfig_init_kb(void) { -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -# ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -# endif -#endif - -#ifdef RGB_MATRIX_ENABLE - rgb_matrix_enable(); // Enable RGB by default -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} - bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } if (index == 0) { diff --git a/keyboards/keebio/chocopad/rev1/config.h b/keyboards/keebio/chocopad/rev1/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/chocopad/rev1/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/chocopad/rev1/keyboard.json b/keyboards/keebio/chocopad/rev1/keyboard.json index fafea9dce0..06dbbf0bc6 100644 --- a/keyboards/keebio/chocopad/rev1/keyboard.json +++ b/keyboards/keebio/chocopad/rev1/keyboard.json @@ -17,6 +17,9 @@ "rgblight": true }, "backlight": { + "default": { + "brightness": 5 + }, "pin": "B5", "levels": 6 }, diff --git a/keyboards/keebio/chocopad/rev1/rev1.c b/keyboards/keebio/chocopad/rev1/rev1.c deleted file mode 100644 index e362bb3483..0000000000 --- a/keyboards/keebio/chocopad/rev1/rev1.c +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2023 Danny Nguyen (danny@keeb.io) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "quantum.h" - -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(5); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_MODE_EFFECT_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} diff --git a/keyboards/keebio/dilly/config.h b/keyboards/keebio/dilly/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/dilly/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/dilly/dilly.c b/keyboards/keebio/dilly/dilly.c deleted file mode 100644 index 231a828f07..0000000000 --- a/keyboards/keebio/dilly/dilly.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "quantum.h" - -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(3); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} diff --git a/keyboards/keebio/dsp40/rev1/keyboard.json b/keyboards/keebio/dsp40/rev1/keyboard.json index 776f67837c..2553e12c2b 100644 --- a/keyboards/keebio/dsp40/rev1/keyboard.json +++ b/keyboards/keebio/dsp40/rev1/keyboard.json @@ -26,6 +26,9 @@ } }, "backlight": { + "default": { + "brightness": 5 + }, "pin": "A6", "levels": 7 }, diff --git a/keyboards/keebio/dsp40/rev1/rev1.c b/keyboards/keebio/dsp40/rev1/rev1.c deleted file mode 100644 index 091cfc1523..0000000000 --- a/keyboards/keebio/dsp40/rev1/rev1.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright 2021 Danny Nguyen - -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 "quantum.h" - -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(5); -#endif - eeconfig_update_kb(0); - eeconfig_init_user(); -} diff --git a/keyboards/keebio/ergodicity/config.h b/keyboards/keebio/ergodicity/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/ergodicity/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/ergodicity/ergodicity.c b/keyboards/keebio/ergodicity/ergodicity.c deleted file mode 100644 index 76fb136c03..0000000000 --- a/keyboards/keebio/ergodicity/ergodicity.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "quantum.h" - -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(5); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} diff --git a/keyboards/keebio/ergodicity/keyboard.json b/keyboards/keebio/ergodicity/keyboard.json index 6f755ba45c..504edf3b56 100644 --- a/keyboards/keebio/ergodicity/keyboard.json +++ b/keyboards/keebio/ergodicity/keyboard.json @@ -29,6 +29,9 @@ }, "diode_direction": "COL2ROW", "backlight": { + "default": { + "brightness": 5 + }, "pin": "B5", "levels": 7, "breathing": true diff --git a/keyboards/keebio/foldkb/rev1/rev1.c b/keyboards/keebio/foldkb/rev1/rev1.c index c2ba942a30..33915a0efe 100644 --- a/keyboards/keebio/foldkb/rev1/rev1.c +++ b/keyboards/keebio/foldkb/rev1/rev1.c @@ -16,15 +16,6 @@ along with this program. If not, see . #include "quantum.h" -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(3); -#endif - eeconfig_update_kb(0); - eeconfig_init_user(); -} - bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } if (index == 0) { diff --git a/keyboards/keebio/iris/rev2/config.h b/keyboards/keebio/iris/rev2/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/iris/rev2/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/iris/rev2/keyboard.json b/keyboards/keebio/iris/rev2/keyboard.json index 9ea21851ee..23023fa3db 100644 --- a/keyboards/keebio/iris/rev2/keyboard.json +++ b/keyboards/keebio/iris/rev2/keyboard.json @@ -10,6 +10,9 @@ }, "diode_direction": "COL2ROW", "backlight": { + "default": { + "brightness": 3 + }, "pin": "B5", "levels": 5 }, diff --git a/keyboards/keebio/iris/rev2/rev2.c b/keyboards/keebio/iris/rev2/rev2.c index 87d4b4029d..45c8d90361 100644 --- a/keyboards/keebio/iris/rev2/rev2.c +++ b/keyboards/keebio/iris/rev2/rev2.c @@ -1,3 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + #include "quantum.h" #ifdef SWAP_HANDS_ENABLE @@ -18,20 +21,3 @@ const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}}, }; #endif - -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(3); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} diff --git a/keyboards/keebio/iris/rev3/config.h b/keyboards/keebio/iris/rev3/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/iris/rev3/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/iris/rev3/keyboard.json b/keyboards/keebio/iris/rev3/keyboard.json index f7b3f894fe..68805c27f8 100644 --- a/keyboards/keebio/iris/rev3/keyboard.json +++ b/keyboards/keebio/iris/rev3/keyboard.json @@ -15,6 +15,9 @@ ] }, "backlight": { + "default": { + "brightness": 3 + }, "pin": "B6", "levels": 5 }, diff --git a/keyboards/keebio/iris/rev3/rev3.c b/keyboards/keebio/iris/rev3/rev3.c index 8b12388cac..0f7f5a7f75 100644 --- a/keyboards/keebio/iris/rev3/rev3.c +++ b/keyboards/keebio/iris/rev3/rev3.c @@ -1,3 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + #include "quantum.h" #ifdef SWAP_HANDS_ENABLE @@ -22,23 +25,6 @@ const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = {1, 0}; # endif #endif -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(3); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} - #ifdef ENCODER_ENABLE bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } diff --git a/keyboards/keebio/iris/rev4/config.h b/keyboards/keebio/iris/rev4/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/iris/rev4/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/iris/rev4/keyboard.json b/keyboards/keebio/iris/rev4/keyboard.json index 3acd3d0a14..dc5392d91f 100644 --- a/keyboards/keebio/iris/rev4/keyboard.json +++ b/keyboards/keebio/iris/rev4/keyboard.json @@ -15,6 +15,9 @@ ] }, "backlight": { + "default": { + "brightness": 3 + }, "pin": "B5", "levels": 5 }, diff --git a/keyboards/keebio/iris/rev4/rev4.c b/keyboards/keebio/iris/rev4/rev4.c index 04a2241966..03a25c3395 100644 --- a/keyboards/keebio/iris/rev4/rev4.c +++ b/keyboards/keebio/iris/rev4/rev4.c @@ -1,22 +1,8 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + #include "quantum.h" -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(3); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} - #ifdef ENCODER_ENABLE bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } diff --git a/keyboards/keebio/kbo5000/rev1/config.h b/keyboards/keebio/kbo5000/rev1/config.h index 12f7f76c87..365d756870 100644 --- a/keyboards/keebio/kbo5000/rev1/config.h +++ b/keyboards/keebio/kbo5000/rev1/config.h @@ -18,4 +18,6 @@ along with this program. If not, see . #pragma once +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) + #define CAPS_LOCK_LED_PIN B6 diff --git a/keyboards/keebio/kbo5000/rev1/rev1.c b/keyboards/keebio/kbo5000/rev1/rev1.c index 8aa227deba..1fd1b9b905 100644 --- a/keyboards/keebio/kbo5000/rev1/rev1.c +++ b/keyboards/keebio/kbo5000/rev1/rev1.c @@ -1,3 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + #include "quantum.h" #include "split_util.h" @@ -14,23 +17,6 @@ bool led_update_kb(led_t led_state) { return true; } -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(3); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} - bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } if (index == 0) { diff --git a/keyboards/keebio/levinson/rev2/config.h b/keyboards/keebio/levinson/rev2/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/levinson/rev2/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/levinson/rev2/keyboard.json b/keyboards/keebio/levinson/rev2/keyboard.json index dd71186837..b6b1fcfa33 100644 --- a/keyboards/keebio/levinson/rev2/keyboard.json +++ b/keyboards/keebio/levinson/rev2/keyboard.json @@ -15,12 +15,27 @@ }, "diode_direction": "COL2ROW", "backlight": { + "default": { + "brightness": 5 + }, "pin": "B5", "levels": 7 }, "rgblight": { "led_count": 12, - "split_count": [6, 6] + "split_count": [6, 6], + "animations": { + "breathing": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "snake": true, + "knight": true, + "christmas": true, + "static_gradient": true, + "rgb_test": true, + "alternating": true, + "twinkle": true + } }, "ws2812": { "pin": "D3" diff --git a/keyboards/keebio/levinson/rev2/rev2.c b/keyboards/keebio/levinson/rev2/rev2.c deleted file mode 100644 index 76fb136c03..0000000000 --- a/keyboards/keebio/levinson/rev2/rev2.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "quantum.h" - -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(5); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} diff --git a/keyboards/keebio/levinson/rev3/config.h b/keyboards/keebio/levinson/rev3/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/levinson/rev3/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/levinson/rev3/keyboard.json b/keyboards/keebio/levinson/rev3/keyboard.json index 7930727755..0c619bb627 100644 --- a/keyboards/keebio/levinson/rev3/keyboard.json +++ b/keyboards/keebio/levinson/rev3/keyboard.json @@ -24,6 +24,9 @@ }, "diode_direction": "COL2ROW", "backlight": { + "default": { + "brightness": 5 + }, "pin": "B6", "levels": 7 }, diff --git a/keyboards/keebio/levinson/rev3/rev3.c b/keyboards/keebio/levinson/rev3/rev3.c deleted file mode 100644 index 76fb136c03..0000000000 --- a/keyboards/keebio/levinson/rev3/rev3.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "quantum.h" - -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(5); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} diff --git a/keyboards/keebio/nyquist/rev2/config.h b/keyboards/keebio/nyquist/rev2/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/nyquist/rev2/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/nyquist/rev2/keyboard.json b/keyboards/keebio/nyquist/rev2/keyboard.json index 69639db6bf..a66dff3904 100644 --- a/keyboards/keebio/nyquist/rev2/keyboard.json +++ b/keyboards/keebio/nyquist/rev2/keyboard.json @@ -24,12 +24,27 @@ }, "diode_direction": "COL2ROW", "backlight": { + "default": { + "brightness": 5 + }, "pin": "B6", "levels": 7 }, "rgblight": { "led_count": 12, - "split_count": [6, 6] + "split_count": [6, 6], + "animations": { + "breathing": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "snake": true, + "knight": true, + "christmas": true, + "static_gradient": true, + "rgb_test": true, + "alternating": true, + "twinkle": true + } }, "ws2812": { "pin": "D3" diff --git a/keyboards/keebio/nyquist/rev2/rev2.c b/keyboards/keebio/nyquist/rev2/rev2.c deleted file mode 100644 index 76fb136c03..0000000000 --- a/keyboards/keebio/nyquist/rev2/rev2.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "quantum.h" - -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(5); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} diff --git a/keyboards/keebio/nyquist/rev3/config.h b/keyboards/keebio/nyquist/rev3/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/nyquist/rev3/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/nyquist/rev3/keyboard.json b/keyboards/keebio/nyquist/rev3/keyboard.json index bdc7be0e4e..a4db4dcd8e 100644 --- a/keyboards/keebio/nyquist/rev3/keyboard.json +++ b/keyboards/keebio/nyquist/rev3/keyboard.json @@ -24,6 +24,9 @@ }, "diode_direction": "COL2ROW", "backlight": { + "default": { + "brightness": 5 + }, "pin": "B5", "levels": 7 }, diff --git a/keyboards/keebio/nyquist/rev3/rev3.c b/keyboards/keebio/nyquist/rev3/rev3.c deleted file mode 100644 index 76fb136c03..0000000000 --- a/keyboards/keebio/nyquist/rev3/rev3.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "quantum.h" - -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(5); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} diff --git a/keyboards/keebio/quefrency/rev1/config.h b/keyboards/keebio/quefrency/rev1/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/quefrency/rev1/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/quefrency/rev1/rev1.c b/keyboards/keebio/quefrency/rev1/rev1.c deleted file mode 100644 index 51adb74d31..0000000000 --- a/keyboards/keebio/quefrency/rev1/rev1.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "quantum.h" - -void eeconfig_init_kb(void) { -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} diff --git a/keyboards/keebio/quefrency/rev2/config.h b/keyboards/keebio/quefrency/rev2/config.h index 12f7f76c87..365d756870 100644 --- a/keyboards/keebio/quefrency/rev2/config.h +++ b/keyboards/keebio/quefrency/rev2/config.h @@ -18,4 +18,6 @@ along with this program. If not, see . #pragma once +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) + #define CAPS_LOCK_LED_PIN B6 diff --git a/keyboards/keebio/quefrency/rev2/rev2.c b/keyboards/keebio/quefrency/rev2/rev2.c index f0320597f7..63a02ee20b 100644 --- a/keyboards/keebio/quefrency/rev2/rev2.c +++ b/keyboards/keebio/quefrency/rev2/rev2.c @@ -1,3 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + #include "quantum.h" #include "split_util.h" @@ -14,23 +17,6 @@ bool led_update_kb(led_t led_state) { return true; } -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(3); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} - #ifdef ENCODER_ENABLE bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } diff --git a/keyboards/keebio/quefrency/rev3/config.h b/keyboards/keebio/quefrency/rev3/config.h index 12f7f76c87..365d756870 100644 --- a/keyboards/keebio/quefrency/rev3/config.h +++ b/keyboards/keebio/quefrency/rev3/config.h @@ -18,4 +18,6 @@ along with this program. If not, see . #pragma once +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) + #define CAPS_LOCK_LED_PIN B6 diff --git a/keyboards/keebio/quefrency/rev3/rev3.c b/keyboards/keebio/quefrency/rev3/rev3.c index 74d68723f5..3e61e07928 100644 --- a/keyboards/keebio/quefrency/rev3/rev3.c +++ b/keyboards/keebio/quefrency/rev3/rev3.c @@ -30,23 +30,6 @@ bool led_update_kb(led_t led_state) { return true; } -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(3); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} - #ifdef ENCODER_ENABLE bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } diff --git a/keyboards/keebio/stick/config.h b/keyboards/keebio/stick/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/stick/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/stick/stick.c b/keyboards/keebio/stick/stick.c index e54a0aa09f..9c5e67d93d 100644 --- a/keyboards/keebio/stick/stick.c +++ b/keyboards/keebio/stick/stick.c @@ -17,23 +17,6 @@ along with this program. If not, see . #include "quantum.h" -void eeconfig_init_kb(void) { -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -# ifdef RGBLIGHT_EFFECT_RAINDOWN_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -# endif -#endif - -#ifdef RGB_MATRIX_ENABLE - rgb_matrix_enable(); // Enable RGB by default -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} - bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; } if (index == 0) { diff --git a/keyboards/keebio/viterbi/rev2/config.h b/keyboards/keebio/viterbi/rev2/config.h new file mode 100644 index 0000000000..4ffb768771 --- /dev/null +++ b/keyboards/keebio/viterbi/rev2/config.h @@ -0,0 +1,6 @@ +// Copyright 2025 Danny Nguyen (danny@keeb.io) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) diff --git a/keyboards/keebio/viterbi/rev2/keyboard.json b/keyboards/keebio/viterbi/rev2/keyboard.json index a3e2d055b2..4d427df6ef 100644 --- a/keyboards/keebio/viterbi/rev2/keyboard.json +++ b/keyboards/keebio/viterbi/rev2/keyboard.json @@ -18,6 +18,9 @@ }, "diode_direction": "COL2ROW", "backlight": { + "default": { + "brightness": 5 + }, "pin": "B6", "levels": 7 }, diff --git a/keyboards/keebio/viterbi/rev2/rev2.c b/keyboards/keebio/viterbi/rev2/rev2.c deleted file mode 100644 index f00bb726e9..0000000000 --- a/keyboards/keebio/viterbi/rev2/rev2.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "quantum.h" - -void eeconfig_init_kb(void) { -#ifdef BACKLIGHT_ENABLE - backlight_enable(); - backlight_level(5); -#endif -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB by default - rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness -#ifdef RGBLIGHT_MODE_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} diff --git a/keyboards/sendyyeah/pix/config.h b/keyboards/sendyyeah/pix/config.h index 3a6cb6297f..7557991a58 100644 --- a/keyboards/sendyyeah/pix/config.h +++ b/keyboards/sendyyeah/pix/config.h @@ -19,5 +19,7 @@ #define OLED_FONT_H "keymaps/default/glcdfont.c" #define OLED_TIMEOUT 600000 // Turn of after 10 minutes +#define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 5) + #define RGBLIGHT_LAYERS #define RGBLIGHT_LAYER_BLINK diff --git a/keyboards/sendyyeah/pix/pix.c b/keyboards/sendyyeah/pix/pix.c deleted file mode 100644 index 1bd8627e16..0000000000 --- a/keyboards/sendyyeah/pix/pix.c +++ /dev/null @@ -1,30 +0,0 @@ - /* Copyright 2020 sendyyeah - * - * 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 "quantum.h" - -void eeconfig_init_kb(void) { -#ifdef RGBLIGHT_ENABLE - rgblight_enable(); // Enable RGB underglow by default - rgblight_sethsv(0, 255, 255); -#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL - rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 5); // Set to RGB_RAINBOW_SWIRL animation by default -#endif -#endif - - eeconfig_update_kb(0); - eeconfig_init_user(); -} From cf58a8733d35bbfea2f54bd0175747ee63d9b2e3 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 12 Sep 2025 10:23:23 +0100 Subject: [PATCH 55/99] Add DIP Switch map support to keymap.json (#25431) --- data/schemas/keymap.jsonschema | 11 +++++++++++ lib/python/qmk/keymap.py | 20 ++++++++++++++++++++ lib/python/qmk/tests/test_cli_commands.py | 2 ++ lib/python/qmk/tests/test_qmk_keymap.py | 1 + 4 files changed, 34 insertions(+) diff --git a/data/schemas/keymap.jsonschema b/data/schemas/keymap.jsonschema index 99aeaa6b6c..71b39fc7c4 100644 --- a/data/schemas/keymap.jsonschema +++ b/data/schemas/keymap.jsonschema @@ -35,6 +35,17 @@ } } }, + "dip_switches": { + "type": "array", + "items": { + "type": "object", + "required": ["on", "off"], + "properties": { + "on": {"type": "string"}, + "off": {"type": "string"} + } + } + }, "macros": { "type": "array", "items": { diff --git a/lib/python/qmk/keymap.py b/lib/python/qmk/keymap.py index 4cf07f59d6..0ac04f6f73 100644 --- a/lib/python/qmk/keymap.py +++ b/lib/python/qmk/keymap.py @@ -32,6 +32,7 @@ __INCLUDES__ __KEYMAP_GOES_HERE__ __ENCODER_MAP_GOES_HERE__ +__DIP_SWITCH_MAP_GOES_HERE__ __MACRO_OUTPUT_GOES_HERE__ #ifdef OTHER_KEYMAP_C @@ -66,6 +67,19 @@ def _generate_encodermap_table(keymap_json): return lines +def _generate_dipswitchmap_table(keymap_json): + lines = [ + '#if defined(DIP_SWITCH_ENABLE) && defined(DIP_SWITCH_MAP_ENABLE)', + 'const uint16_t PROGMEM dip_switch_map[NUM_DIP_SWITCHES][NUM_DIP_STATES] = {', + ] + for index, switch in enumerate(keymap_json['dip_switches']): + if index != 0: + lines[-1] = lines[-1] + ',' + lines.append(f' DIP_SWITCH_OFF_ON({_strip_any(switch["off"])}, {_strip_any(switch["on"])})') + lines.extend(['};', '#endif // defined(DIP_SWITCH_ENABLE) && defined(DIP_SWITCH_MAP_ENABLE)']) + return lines + + def _generate_macros_function(keymap_json): macro_txt = [ 'bool process_record_user(uint16_t keycode, keyrecord_t *record) {', @@ -286,6 +300,12 @@ def generate_c(keymap_json): encodermap = '\n'.join(encoder_txt) new_keymap = new_keymap.replace('__ENCODER_MAP_GOES_HERE__', encodermap) + dipswitchmap = '' + if 'dip_switches' in keymap_json and keymap_json['dip_switches'] is not None: + dip_txt = _generate_dipswitchmap_table(keymap_json) + dipswitchmap = '\n'.join(dip_txt) + new_keymap = new_keymap.replace('__DIP_SWITCH_MAP_GOES_HERE__', dipswitchmap) + macros = '' if 'macros' in keymap_json and keymap_json['macros'] is not None: macro_txt = _generate_macros_function(keymap_json) diff --git a/lib/python/qmk/tests/test_cli_commands.py b/lib/python/qmk/tests/test_cli_commands.py index dd659fe0f2..2716459989 100644 --- a/lib/python/qmk/tests/test_cli_commands.py +++ b/lib/python/qmk/tests/test_cli_commands.py @@ -159,6 +159,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + #ifdef OTHER_KEYMAP_C # include OTHER_KEYMAP_C #endif // OTHER_KEYMAP_C @@ -196,6 +197,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + #ifdef OTHER_KEYMAP_C # include OTHER_KEYMAP_C #endif // OTHER_KEYMAP_C diff --git a/lib/python/qmk/tests/test_qmk_keymap.py b/lib/python/qmk/tests/test_qmk_keymap.py index 80cc679b00..34360d3b6d 100644 --- a/lib/python/qmk/tests/test_qmk_keymap.py +++ b/lib/python/qmk/tests/test_qmk_keymap.py @@ -27,6 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + #ifdef OTHER_KEYMAP_C # include OTHER_KEYMAP_C #endif // OTHER_KEYMAP_C From d34cade5abe11da93a6f3d204b00278127299f8b Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 12 Sep 2025 13:21:49 +0100 Subject: [PATCH 56/99] Generate default encoder resolution for sparse config (#25247) --- lib/python/qmk/cli/generate/config_h.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/python/qmk/cli/generate/config_h.py b/lib/python/qmk/cli/generate/config_h.py index d6d0299291..1ade452f95 100755 --- a/lib/python/qmk/cli/generate/config_h.py +++ b/lib/python/qmk/cli/generate/config_h.py @@ -125,11 +125,12 @@ def generate_encoder_config(encoder_json, config_h_lines, postfix=''): config_h_lines.append(generate_define(f'ENCODER_A_PINS{postfix}', f'{{ {", ".join(a_pads)} }}')) config_h_lines.append(generate_define(f'ENCODER_B_PINS{postfix}', f'{{ {", ".join(b_pads)} }}')) - if None in resolutions: - cli.log.debug(f"Unable to generate ENCODER_RESOLUTION{postfix} configuration") - elif len(resolutions) == 0: + if len(resolutions) == 0 or all(r is None for r in resolutions): cli.log.debug(f"Skipping ENCODER_RESOLUTION{postfix} configuration") - elif len(set(resolutions)) == 1: + return + + resolutions = [4 if r is None else r for r in resolutions] + if len(set(resolutions)) == 1: config_h_lines.append(generate_define(f'ENCODER_RESOLUTION{postfix}', resolutions[0])) else: config_h_lines.append(generate_define(f'ENCODER_RESOLUTIONS{postfix}', f'{{ {", ".join(map(str,resolutions))} }}')) From b6310b5a1507aa085a732f1105b7f022c837f443 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 12 Sep 2025 16:56:06 +0100 Subject: [PATCH 57/99] Remove encoder resolution where duplicating defaults (#25654) --- keyboards/cxt_studio/12e3/keyboard.json | 4 ++-- keyboards/doio/kb03/keyboard.json | 2 +- keyboards/draculad/keyboard.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/cxt_studio/12e3/keyboard.json b/keyboards/cxt_studio/12e3/keyboard.json index a85126aab6..0b8949cda7 100644 --- a/keyboards/cxt_studio/12e3/keyboard.json +++ b/keyboards/cxt_studio/12e3/keyboard.json @@ -21,8 +21,8 @@ }, "encoder": { "rotary": [ - {"pin_a": "F5", "pin_b": "F6", "resolution": 4}, - {"pin_a": "E6", "pin_b": "F0", "resolution": 4}, + {"pin_a": "F5", "pin_b": "F6"}, + {"pin_a": "E6", "pin_b": "F0"}, {"pin_a": "B3", "pin_b": "B2", "resolution": 2} ] }, diff --git a/keyboards/doio/kb03/keyboard.json b/keyboards/doio/kb03/keyboard.json index d2a214c92f..a3e77369fc 100644 --- a/keyboards/doio/kb03/keyboard.json +++ b/keyboards/doio/kb03/keyboard.json @@ -6,7 +6,7 @@ "diode_direction": "COL2ROW", "encoder": { "rotary": [ - {"pin_a": "B5", "pin_b": "B6", "resolution": 4}, + {"pin_a": "B5", "pin_b": "B6"}, {"pin_a": "A2", "pin_b": "A1", "resolution": 2} ] }, diff --git a/keyboards/draculad/keyboard.json b/keyboards/draculad/keyboard.json index 9c21b2a97d..f4464da35f 100644 --- a/keyboards/draculad/keyboard.json +++ b/keyboards/draculad/keyboard.json @@ -39,7 +39,7 @@ "encoder": { "right": { "rotary": [ - {"pin_a": "B2", "pin_b": "B6", "resolution": 4}, + {"pin_a": "B2", "pin_b": "B6"}, {"pin_a": "B4", "pin_b": "B5", "resolution": 1} ] } From 46231df62d1914bb7d25f26a7ece41b7805cc807 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 12 Sep 2025 20:00:03 +0100 Subject: [PATCH 58/99] Tidy Keebio keyboards (#25653) --- keyboards/keebio/bamfk4/config.h | 16 ----------- keyboards/keebio/bdn9/keymaps/test/config.h | 5 ---- keyboards/keebio/bdn9/rev3/config.h | 14 ++++------ .../keebio/bfo9000/keymaps/default/config.h | 27 ------------------ .../keebio/bfo9000/keymaps/default/keymap.c | 3 ++ keyboards/keebio/bfo9000/readme.md | 13 ++++----- .../bigswitchseat/keymaps/default/keymap.c | 14 +--------- keyboards/keebio/chiri_ce/rev1/config.h | 4 ++- keyboards/keebio/chiri_ce/rev1/keyboard.json | 3 ++ keyboards/keebio/chocopad/readme.md | 15 ++++++---- keyboards/keebio/convolution/readme.md | 2 +- .../keebio/dilly/keymaps/default/keymap.c | 4 ++- keyboards/keebio/dilly/readme.md | 15 ++++++---- .../keebio/dsp40/keymaps/default/keymap.c | 3 +- keyboards/keebio/dsp40/readme.md | 4 +++ keyboards/keebio/dsp40/rev1/readme.md | 4 +++ keyboards/keebio/ergodicity/readme.md | 12 +++++--- .../keebio/fourier/keymaps/default/config.h | 23 --------------- .../keebio/fourier/keymaps/default/keymap.c | 7 ++--- keyboards/keebio/fourier/readme.md | 13 ++++----- keyboards/keebio/iris/readme.md | 9 +++--- keyboards/keebio/iris/rev1/rev1.c | 3 ++ keyboards/keebio/iris/rev1_led/rev1_led.c | 3 ++ keyboards/keebio/iris_lm/g1/config.h | 15 ++++------ keyboards/keebio/iris_lm/g1/keyboard.json | 3 ++ keyboards/keebio/iris_lm/k1/config.h | 15 ++++------ keyboards/keebio/iris_lm/k1/keyboard.json | 3 ++ .../keebio/kbo5000/keymaps/default/keymap.c | 3 ++ keyboards/keebio/kbo5000/keymaps/iso/keymap.c | 3 ++ keyboards/keebio/kbo5000/readme.md | 2 +- .../keebio/laplace/keymaps/default/keymap.c | 3 ++ keyboards/keebio/laplace/readme.md | 13 ++++----- .../keebio/levinson/keymaps/default/config.h | 28 ------------------- .../keebio/levinson/keymaps/default/keymap.c | 4 ++- keyboards/keebio/levinson/levinson.c | 3 ++ keyboards/keebio/levinson/readme.md | 11 ++++---- keyboards/keebio/nyquist/readme.md | 11 ++++---- keyboards/keebio/nyquist/rev5/config.h | 2 -- keyboards/keebio/nyquist/rev5/keyboard.json | 3 ++ .../keebio/quefrency/keymaps/default/config.h | 24 ---------------- .../keebio/quefrency/keymaps/default/keymap.c | 4 --- .../quefrency/keymaps/default60/keymap.c | 4 --- .../quefrency/keymaps/default65/keymap.c | 6 ---- keyboards/keebio/quefrency/readme.md | 11 ++++---- keyboards/keebio/quefrency/rev6/config.h | 15 ++++------ keyboards/keebio/quefrency/rev6/keyboard.json | 6 ++++ keyboards/keebio/quefrency/rev6/rules.mk | 1 - .../keebio/rorschach/keymaps/default/config.h | 24 ---------------- .../keebio/rorschach/keymaps/default/keymap.c | 4 ++- keyboards/keebio/rorschach/readme.md | 13 ++++----- keyboards/keebio/sinc/readme.md | 2 +- .../tragicforce68/keymaps/default/keymap.c | 3 ++ keyboards/keebio/tragicforce68/readme.md | 13 ++++----- keyboards/keebio/tukey/readme.md | 10 +++++-- .../keebio/viterbi/keymaps/default/config.h | 7 ----- .../keebio/viterbi/keymaps/default/keymap.c | 4 ++- keyboards/keebio/viterbi/readme.md | 14 ++++------ .../keebio/wavelet/keymaps/default/keymap.c | 4 ++- keyboards/keebio/wavelet/readme.md | 13 ++++----- keyboards/keebio/wavelet/wavelet.c | 3 ++ 60 files changed, 197 insertions(+), 326 deletions(-) delete mode 100644 keyboards/keebio/bdn9/keymaps/test/config.h delete mode 100644 keyboards/keebio/bfo9000/keymaps/default/config.h delete mode 100644 keyboards/keebio/fourier/keymaps/default/config.h delete mode 100644 keyboards/keebio/levinson/keymaps/default/config.h delete mode 100644 keyboards/keebio/quefrency/keymaps/default/config.h delete mode 100644 keyboards/keebio/quefrency/rev6/rules.mk delete mode 100644 keyboards/keebio/rorschach/keymaps/default/config.h diff --git a/keyboards/keebio/bamfk4/config.h b/keyboards/keebio/bamfk4/config.h index e97e28f5a9..832d0afd67 100644 --- a/keyboards/keebio/bamfk4/config.h +++ b/keyboards/keebio/bamfk4/config.h @@ -4,19 +4,3 @@ #pragma once #define RGBLIGHT_DEFAULT_MODE (RGBLIGHT_MODE_RAINBOW_SWIRL + 2) - -/* - * Feature disable options - * These options are also useful to firmware size reduction. - */ - -/* disable debug print */ -//#define NO_DEBUG - -/* disable print */ -//#define NO_PRINT - -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT diff --git a/keyboards/keebio/bdn9/keymaps/test/config.h b/keyboards/keebio/bdn9/keymaps/test/config.h deleted file mode 100644 index e09fba9232..0000000000 --- a/keyboards/keebio/bdn9/keymaps/test/config.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -#ifdef RGB_MATRIX_ENABLE -# define RGB_MATRIX_KEYPRESSES -#endif diff --git a/keyboards/keebio/bdn9/rev3/config.h b/keyboards/keebio/bdn9/rev3/config.h index 3afa37bce1..98f261b801 100644 --- a/keyboards/keebio/bdn9/rev3/config.h +++ b/keyboards/keebio/bdn9/rev3/config.h @@ -4,11 +4,9 @@ #pragma once /* Defines for the RGB matrix */ -#ifdef RGB_MATRIX_ENABLE -# define WS2812_PWM_DRIVER PWMD15 -# define WS2812_PWM_CHANNEL 2 -# define WS2812_PWM_PAL_MODE 1 -# define WS2812_DMA_STREAM STM32_DMA1_STREAM2 -# define WS2812_DMA_CHANNEL 2 -# define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM15_UP -#endif +#define WS2812_PWM_DRIVER PWMD15 +#define WS2812_PWM_CHANNEL 2 +#define WS2812_PWM_PAL_MODE 1 +#define WS2812_DMA_STREAM STM32_DMA1_STREAM2 +#define WS2812_DMA_CHANNEL 2 +#define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM15_UP diff --git a/keyboards/keebio/bfo9000/keymaps/default/config.h b/keyboards/keebio/bfo9000/keymaps/default/config.h deleted file mode 100644 index a9ae679110..0000000000 --- a/keyboards/keebio/bfo9000/keymaps/default/config.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -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 . -*/ - -#pragma once - -// #define USE_I2C - -/* Select hand configuration */ -// #define MASTER_RIGHT -// #define EE_HANDS diff --git a/keyboards/keebio/bfo9000/keymaps/default/keymap.c b/keyboards/keebio/bfo9000/keymaps/default/keymap.c index f37ea79c40..0d28c3c5c2 100644 --- a/keyboards/keebio/bfo9000/keymaps/default/keymap.c +++ b/keyboards/keebio/bfo9000/keymaps/default/keymap.c @@ -1,3 +1,6 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + #include QMK_KEYBOARD_H #define _BASE 0 diff --git a/keyboards/keebio/bfo9000/readme.md b/keyboards/keebio/bfo9000/readme.md index 059f2800a2..3fa6239680 100644 --- a/keyboards/keebio/bfo9000/readme.md +++ b/keyboards/keebio/bfo9000/readme.md @@ -1,11 +1,10 @@ -BFO-9000 -======== +# BFO-9000 A split full-size ortholinear keyboard made and sold by Keebio. Each half is a 6x9 arrangement, with breakable pieces to allow the number of rows to be customized between 4 to 6, and the number of columns to be between 7 to 9. [More info at Keebio](https://keeb.io). -Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) -Hardware Supported: Pro Micro -Hardware Availability: [Keebio](https://keeb.io) +* Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) +* Hardware Supported: Pro Micro +* Hardware Availability: [Keebio](https://keeb.io) Make example for this keyboard (after setting up your build environment): @@ -13,6 +12,6 @@ Make example for this keyboard (after setting up your build environment): Example of flashing this keyboard: - make keebio/bfo9000:default:avrdude + make keebio/bfo9000:default:flash -See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. +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). diff --git a/keyboards/keebio/bigswitchseat/keymaps/default/keymap.c b/keyboards/keebio/bigswitchseat/keymaps/default/keymap.c index 6d4378b995..a48f4f9165 100644 --- a/keyboards/keebio/bigswitchseat/keymaps/default/keymap.c +++ b/keyboards/keebio/bigswitchseat/keymaps/default/keymap.c @@ -5,23 +5,11 @@ // Defines names for use in layer keycodes and the keymap enum layer_names { - _MAIN, - _FN1, - _FN2, - _FN3 + _MAIN }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_MAIN] = LAYOUT( KC_A - ), - [_FN1] = LAYOUT( - _______ - ), - [_FN2] = LAYOUT( - _______ - ), - [_FN3] = LAYOUT( - _______ ) }; diff --git a/keyboards/keebio/chiri_ce/rev1/config.h b/keyboards/keebio/chiri_ce/rev1/config.h index b1eb9da4e9..e9d9934301 100644 --- a/keyboards/keebio/chiri_ce/rev1/config.h +++ b/keyboards/keebio/chiri_ce/rev1/config.h @@ -3,14 +3,16 @@ #pragma once -#define SPLIT_HAND_PIN GP4 #define USB_VBUS_PIN GP0 + #define SERIAL_USART_FULL_DUPLEX #define SERIAL_USART_TX_PIN GP12 #define SERIAL_USART_RX_PIN GP13 #define SERIAL_USART_PIN_SWAP + #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U + #define I2C_DRIVER I2CD2 #define I2C1_SDA_PIN GP10 #define I2C1_SCL_PIN GP11 diff --git a/keyboards/keebio/chiri_ce/rev1/keyboard.json b/keyboards/keebio/chiri_ce/rev1/keyboard.json index 9cf7f51654..aea1fb1d6f 100644 --- a/keyboards/keebio/chiri_ce/rev1/keyboard.json +++ b/keyboards/keebio/chiri_ce/rev1/keyboard.json @@ -118,6 +118,9 @@ "matrix": [4, 0] }, "enabled": true, + "handedness": { + "pin": "GP4" + }, "matrix_pins": { "right": { "cols": ["GP29", "GP28", "GP2", "GP27", "GP18", "GP7"], diff --git a/keyboards/keebio/chocopad/readme.md b/keyboards/keebio/chocopad/readme.md index 67c875d923..9a6e62178f 100644 --- a/keyboards/keebio/chocopad/readme.md +++ b/keyboards/keebio/chocopad/readme.md @@ -1,14 +1,17 @@ -Chocopad -======== +# Chocopad A 4x4 macropad keyboard using Kailh PG1350 Lower Profile Choc switches. -Keyboard Maintainer: Keebio -Hardware Supported: Chocopad PCB, Arduino Pro Micro -Hardware Availability: [Keebio](https://keeb.io) +* Keyboard Maintainer: Keebio +* Hardware Supported: Chocopad PCB, Arduino Pro Micro +* Hardware Availability: [Keebio](https://keeb.io) Make example for this keyboard (after setting up your build environment): make keebio/chocopad/rev1:default -See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. +Example of flashing this keyboard: + + make keebio/chocopad/rev1: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). diff --git a/keyboards/keebio/convolution/readme.md b/keyboards/keebio/convolution/readme.md index c1bc8ae3d8..cb7d7c35db 100644 --- a/keyboards/keebio/convolution/readme.md +++ b/keyboards/keebio/convolution/readme.md @@ -13,6 +13,6 @@ Example of flashing this keyboard: make keebio/convolution/rev1:default:flash -See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. +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). A build guide for this keyboard can be found here: [Keebio Build Guides](https://docs.keeb.io) diff --git a/keyboards/keebio/dilly/keymaps/default/keymap.c b/keyboards/keebio/dilly/keymaps/default/keymap.c index 71a92037b6..9cef52ae4e 100644 --- a/keyboards/keebio/dilly/keymaps/default/keymap.c +++ b/keyboards/keebio/dilly/keymaps/default/keymap.c @@ -1,5 +1,7 @@ -#include QMK_KEYBOARD_H +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H #define _BASE 0 #define _FN1 1 diff --git a/keyboards/keebio/dilly/readme.md b/keyboards/keebio/dilly/readme.md index 74139eaeae..e4b6e418a3 100644 --- a/keyboards/keebio/dilly/readme.md +++ b/keyboards/keebio/dilly/readme.md @@ -1,14 +1,17 @@ -Dilly -===== +# Dilly A 3x10 ortholinear keyboard using Kailh PG1350 Lower Profile Choc switches. -Keyboard Maintainer: Keebio -Hardware Supported: Dilly PCB, Arduino Pro Micro -Hardware Availability: [Keebio](https://keeb.io) +* Keyboard Maintainer: Keebio +* Hardware Supported: Dilly PCB, Arduino Pro Micro +* Hardware Availability: [Keebio](https://keeb.io) Make example for this keyboard (after setting up your build environment): make keebio/dilly:default -See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. +Example of flashing this keyboard: + + make keebio/dilly: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). diff --git a/keyboards/keebio/dsp40/keymaps/default/keymap.c b/keyboards/keebio/dsp40/keymaps/default/keymap.c index e8d3627ff2..c1496844bb 100755 --- a/keyboards/keebio/dsp40/keymaps/default/keymap.c +++ b/keyboards/keebio/dsp40/keymaps/default/keymap.c @@ -24,8 +24,7 @@ enum custom_layer { }; enum custom_keycodes { - QWERTY = SAFE_RANGE, - LOWER, + LOWER = SAFE_RANGE, RAISE, ADJUST, }; diff --git a/keyboards/keebio/dsp40/readme.md b/keyboards/keebio/dsp40/readme.md index c6b195c404..1a37587313 100644 --- a/keyboards/keebio/dsp40/readme.md +++ b/keyboards/keebio/dsp40/readme.md @@ -10,4 +10,8 @@ Make example for this keyboard (after setting up your build environment): make keebio/dsp40/rev1:default +Example of flashing this keyboard: + + make keebio/dsp40/rev1: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). diff --git a/keyboards/keebio/dsp40/rev1/readme.md b/keyboards/keebio/dsp40/rev1/readme.md index ee62ba7886..8852ef5501 100644 --- a/keyboards/keebio/dsp40/rev1/readme.md +++ b/keyboards/keebio/dsp40/rev1/readme.md @@ -10,4 +10,8 @@ Make example for this keyboard (after setting up your build environment): make keebio/dsp40/rev1:default +Example of flashing this keyboard: + + make keebio/dsp40/rev1: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). diff --git a/keyboards/keebio/ergodicity/readme.md b/keyboards/keebio/ergodicity/readme.md index 61f4ee658c..3fe77848e3 100644 --- a/keyboards/keebio/ergodicity/readme.md +++ b/keyboards/keebio/ergodicity/readme.md @@ -1,11 +1,15 @@ # Ergodicity -Keyboard Maintainer: [nooges/bakingpy](https://github.com/nooges) -Hardware Supported: Ergodicity PCB w/ATmega32u4 -Hardware Availability: [Keebio](https://keeb.io) +* Keyboard Maintainer: [nooges/bakingpy](https://github.com/nooges) +* Hardware Supported: Ergodicity PCB w/ATmega32u4 +* Hardware Availability: [Keebio](https://keeb.io) Make example for this keyboard (after setting up your build environment): - make keebio/ergodicity:default:dfu + make keebio/ergodicity:default + +Example of flashing this keyboard: + + make keebio/ergodicity: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). diff --git a/keyboards/keebio/fourier/keymaps/default/config.h b/keyboards/keebio/fourier/keymaps/default/config.h deleted file mode 100644 index fa952ef4c3..0000000000 --- a/keyboards/keebio/fourier/keymaps/default/config.h +++ /dev/null @@ -1,23 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert - -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 . -*/ - -#pragma once - -// #define USE_I2C diff --git a/keyboards/keebio/fourier/keymaps/default/keymap.c b/keyboards/keebio/fourier/keymaps/default/keymap.c index 6fa9ab5799..0c8e1168af 100644 --- a/keyboards/keebio/fourier/keymaps/default/keymap.c +++ b/keyboards/keebio/fourier/keymaps/default/keymap.c @@ -1,3 +1,6 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + #include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. @@ -8,10 +11,6 @@ #define _FN1 1 #define _FN2 2 -enum custom_keycodes { - QWERTY = SAFE_RANGE, -}; - #define KC_FN1 MO(_FN1) #define KC_FN2 MO(_FN2) #define SPFN1 LT(_FN1, KC_SPACE) diff --git a/keyboards/keebio/fourier/readme.md b/keyboards/keebio/fourier/readme.md index c18d1a7484..d3d0f81f1e 100644 --- a/keyboards/keebio/fourier/readme.md +++ b/keyboards/keebio/fourier/readme.md @@ -1,11 +1,10 @@ -Fourier -======== +# Fourier A split 40% staggered keyboard made and sold by Keebio. [More info at Keebio](https://keeb.io). -Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) -Hardware Supported: Pro Micro -Hardware Availability: [Keebio](https://keeb.io/collections/frontpage/products/fourier-40-split-staggered-keyboard) +* Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) +* Hardware Supported: Pro Micro +* Hardware Availability: [Keebio](https://keeb.io/collections/frontpage/products/fourier-40-split-staggered-keyboard) Make example for this keyboard (after setting up your build environment): @@ -13,8 +12,8 @@ Make example for this keyboard (after setting up your build environment): Example of flashing this keyboard: - make keebio/fourier:default:avrdude + make keebio/fourier:default:flash -See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. +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). A build guide for this keyboard can be found here: [Keebio Build Guides](https://docs.keeb.io) diff --git a/keyboards/keebio/iris/readme.md b/keyboards/keebio/iris/readme.md index e98f985394..d1d498c67e 100644 --- a/keyboards/keebio/iris/readme.md +++ b/keyboards/keebio/iris/readme.md @@ -1,11 +1,10 @@ -Iris -==== +# Iris A split ergo 4x6 keyboard with 3 or 4 thumb keys made and sold by Keebio. [More info at Keebio](https://keeb.io). -Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) -Hardware Supported: Pro Micro, ATmega32u4 -Hardware Availability: [Keebio](https://keeb.io) +* Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) +* Hardware Supported: Pro Micro, ATmega32u4 +* Hardware Availability: [Keebio](https://keeb.io) Make example for this keyboard (after setting up your build environment): diff --git a/keyboards/keebio/iris/rev1/rev1.c b/keyboards/keebio/iris/rev1/rev1.c index e05b758a44..ea8029f47c 100644 --- a/keyboards/keebio/iris/rev1/rev1.c +++ b/keyboards/keebio/iris/rev1/rev1.c @@ -1,3 +1,6 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + #include "quantum.h" #ifdef SWAP_HANDS_ENABLE diff --git a/keyboards/keebio/iris/rev1_led/rev1_led.c b/keyboards/keebio/iris/rev1_led/rev1_led.c index e05b758a44..ea8029f47c 100644 --- a/keyboards/keebio/iris/rev1_led/rev1_led.c +++ b/keyboards/keebio/iris/rev1_led/rev1_led.c @@ -1,3 +1,6 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + #include "quantum.h" #ifdef SWAP_HANDS_ENABLE diff --git a/keyboards/keebio/iris_lm/g1/config.h b/keyboards/keebio/iris_lm/g1/config.h index 952033edf1..ca19ea6402 100644 --- a/keyboards/keebio/iris_lm/g1/config.h +++ b/keyboards/keebio/iris_lm/g1/config.h @@ -13,14 +13,11 @@ #define SERIAL_USART_PIN_SWAP #define USB_VBUS_PIN C6 -#define SPLIT_HAND_PIN A0 /* Defines for the RGB matrix */ -#ifdef RGB_MATRIX_ENABLE -# 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 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 diff --git a/keyboards/keebio/iris_lm/g1/keyboard.json b/keyboards/keebio/iris_lm/g1/keyboard.json index 6aca0c9bac..20cd78d937 100644 --- a/keyboards/keebio/iris_lm/g1/keyboard.json +++ b/keyboards/keebio/iris_lm/g1/keyboard.json @@ -33,6 +33,9 @@ ] } }, + "handedness": { + "pin": "A0" + }, "matrix_pins": { "right": { "cols": ["C11", "C13", "B6", "B9", "B12", "B2"], diff --git a/keyboards/keebio/iris_lm/k1/config.h b/keyboards/keebio/iris_lm/k1/config.h index 952033edf1..ca19ea6402 100644 --- a/keyboards/keebio/iris_lm/k1/config.h +++ b/keyboards/keebio/iris_lm/k1/config.h @@ -13,14 +13,11 @@ #define SERIAL_USART_PIN_SWAP #define USB_VBUS_PIN C6 -#define SPLIT_HAND_PIN A0 /* Defines for the RGB matrix */ -#ifdef RGB_MATRIX_ENABLE -# 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 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 diff --git a/keyboards/keebio/iris_lm/k1/keyboard.json b/keyboards/keebio/iris_lm/k1/keyboard.json index e5b0d5c655..3a86f6253b 100644 --- a/keyboards/keebio/iris_lm/k1/keyboard.json +++ b/keyboards/keebio/iris_lm/k1/keyboard.json @@ -18,6 +18,9 @@ }, "split": { "enabled": true, + "handedness": { + "pin": "A0" + }, "matrix_pins": { "right": { "cols": ["C11", "C13", "B6", "B9", "B12", "B2"], diff --git a/keyboards/keebio/kbo5000/keymaps/default/keymap.c b/keyboards/keebio/kbo5000/keymaps/default/keymap.c index e164711fc9..e3ad5fe6fa 100644 --- a/keyboards/keebio/kbo5000/keymaps/default/keymap.c +++ b/keyboards/keebio/kbo5000/keymaps/default/keymap.c @@ -1,3 +1,6 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + #include QMK_KEYBOARD_H enum encoder_names { diff --git a/keyboards/keebio/kbo5000/keymaps/iso/keymap.c b/keyboards/keebio/kbo5000/keymaps/iso/keymap.c index b08c92d7e1..78b3023267 100644 --- a/keyboards/keebio/kbo5000/keymaps/iso/keymap.c +++ b/keyboards/keebio/kbo5000/keymaps/iso/keymap.c @@ -1,3 +1,6 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + #include QMK_KEYBOARD_H enum encoder_names { diff --git a/keyboards/keebio/kbo5000/readme.md b/keyboards/keebio/kbo5000/readme.md index 1f1f63889e..2208542122 100644 --- a/keyboards/keebio/kbo5000/readme.md +++ b/keyboards/keebio/kbo5000/readme.md @@ -15,6 +15,6 @@ Example of flashing this keyboard: Handedness detection is already hardwired onto the PCB, so no need to deal with `EE_HANDS` or flashing .eep files. -See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. +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). A build guide for this keyboard can be found here: [Keebio Build Guides](https://docs.keeb.io) diff --git a/keyboards/keebio/laplace/keymaps/default/keymap.c b/keyboards/keebio/laplace/keymaps/default/keymap.c index fbd88c72af..c45a7956e5 100644 --- a/keyboards/keebio/laplace/keymaps/default/keymap.c +++ b/keyboards/keebio/laplace/keymaps/default/keymap.c @@ -1,3 +1,6 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + #include QMK_KEYBOARD_H #define _BASE 0 diff --git a/keyboards/keebio/laplace/readme.md b/keyboards/keebio/laplace/readme.md index 4292483bc8..f71efb0c37 100644 --- a/keyboards/keebio/laplace/readme.md +++ b/keyboards/keebio/laplace/readme.md @@ -1,11 +1,10 @@ -Laplace -======= +# Laplace A 40% staggered keyboard made and sold by Keebio. [More info at Keebio](https://keeb.io). -Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) -Hardware Supported: Pro Micro -Hardware Availability: [Keebio](https://keeb.io) +* Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) +* Hardware Supported: Pro Micro +* Hardware Availability: [Keebio](https://keeb.io) Make example for this keyboard (after setting up your build environment): @@ -13,8 +12,8 @@ Make example for this keyboard (after setting up your build environment): Example of flashing this keyboard: - make keebio/laplace:default:avrdude + make keebio/laplace:default:flash -See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. +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). A build guide for this keyboard can be found here: [Keebio Build Guides](https://docs.keeb.io) diff --git a/keyboards/keebio/levinson/keymaps/default/config.h b/keyboards/keebio/levinson/keymaps/default/config.h deleted file mode 100644 index be2d71e8f0..0000000000 --- a/keyboards/keebio/levinson/keymaps/default/config.h +++ /dev/null @@ -1,28 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert -Copyright 2018 Danny Nguyen - -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 . -*/ - -#pragma once - -// #define USE_I2C - -/* Select hand configuration */ -// #define MASTER_RIGHT -// #define EE_HANDS diff --git a/keyboards/keebio/levinson/keymaps/default/keymap.c b/keyboards/keebio/levinson/keymaps/default/keymap.c index 20be1edd39..b3f4e17124 100644 --- a/keyboards/keebio/levinson/keymaps/default/keymap.c +++ b/keyboards/keebio/levinson/keymaps/default/keymap.c @@ -1,5 +1,7 @@ -#include QMK_KEYBOARD_H +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. diff --git a/keyboards/keebio/levinson/levinson.c b/keyboards/keebio/levinson/levinson.c index 6f1a050e80..e78585b731 100644 --- a/keyboards/keebio/levinson/levinson.c +++ b/keyboards/keebio/levinson/levinson.c @@ -1,3 +1,6 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + #include "quantum.h" #ifdef SWAP_HANDS_ENABLE diff --git a/keyboards/keebio/levinson/readme.md b/keyboards/keebio/levinson/readme.md index f328aa4205..2c63b7d8f5 100644 --- a/keyboards/keebio/levinson/readme.md +++ b/keyboards/keebio/levinson/readme.md @@ -1,11 +1,10 @@ -Levinson -======== +# Levinson A split 40% split 4x12 ortholinear keyboard made and sold by Keebio. It's essentially a Let's Split with LED backlight support and 2u thumb key support. [More info at Keebio](https://keeb.io). -Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) -Hardware Supported: Pro Micro, Elite-C -Hardware Availability: [Keebio](https://keeb.io) +* Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) +* Hardware Supported: Pro Micro, Elite-C +* Hardware Availability: [Keebio](https://keeb.io) Make example for this keyboard (after setting up your build environment): @@ -13,7 +12,7 @@ Make example for this keyboard (after setting up your build environment): Example of flashing this keyboard with Pro micro: - make keebio/levinson/rev3:default:avrdude + make keebio/levinson/rev3:default:flash Example of flashing this keyboard with Elite-C: diff --git a/keyboards/keebio/nyquist/readme.md b/keyboards/keebio/nyquist/readme.md index 40e7ebf3d2..1bfcd59bfa 100644 --- a/keyboards/keebio/nyquist/readme.md +++ b/keyboards/keebio/nyquist/readme.md @@ -1,11 +1,10 @@ -Nyquist -======= +# Nyquist A split 60% split 5x12 ortholinear keyboard made and sold by Keebio. [More info at Keebio](https://keeb.io). -Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) -Hardware Supported: Pro Micro, ATmega32u4 -Hardware Availability: [Keebio](https://keeb.io) +* Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) +* Hardware Supported: Pro Micro, ATmega32u4 +* Hardware Availability: [Keebio](https://keeb.io) Make example for this keyboard (after setting up your build environment): @@ -15,6 +14,6 @@ Example of flashing this keyboard: make keebio/nyquist/rev3:default:flash -See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. +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). A build guide for this keyboard can be found here: [Nyquist Build Guide](https://docs.keeb.io) diff --git a/keyboards/keebio/nyquist/rev5/config.h b/keyboards/keebio/nyquist/rev5/config.h index c4bbd6c5b2..f05cd8695f 100644 --- a/keyboards/keebio/nyquist/rev5/config.h +++ b/keyboards/keebio/nyquist/rev5/config.h @@ -3,8 +3,6 @@ #pragma once -#define SPLIT_HAND_PIN GP23 - #define USB_VBUS_PIN GP18 #define SERIAL_USART_FULL_DUPLEX diff --git a/keyboards/keebio/nyquist/rev5/keyboard.json b/keyboards/keebio/nyquist/rev5/keyboard.json index fc03c00e29..6ff3dd3821 100644 --- a/keyboards/keebio/nyquist/rev5/keyboard.json +++ b/keyboards/keebio/nyquist/rev5/keyboard.json @@ -25,6 +25,9 @@ ] } }, + "handedness": { + "pin": "GP23" + }, "matrix_pins": { "right":{ "cols": ["GP25", "GP29", "GP20", "GP11", "GP3", "GP2"], diff --git a/keyboards/keebio/quefrency/keymaps/default/config.h b/keyboards/keebio/quefrency/keymaps/default/config.h deleted file mode 100644 index 53bf8fb933..0000000000 --- a/keyboards/keebio/quefrency/keymaps/default/config.h +++ /dev/null @@ -1,24 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako -Copyright 2015 Jack Humbert -Copyright 2018 Danny Nguyen - -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 . -*/ - -#pragma once - -// #define USE_I2C diff --git a/keyboards/keebio/quefrency/keymaps/default/keymap.c b/keyboards/keebio/quefrency/keymaps/default/keymap.c index 48dcd73eff..35fb3eec1b 100644 --- a/keyboards/keebio/quefrency/keymaps/default/keymap.c +++ b/keyboards/keebio/quefrency/keymaps/default/keymap.c @@ -12,10 +12,6 @@ enum custom_layer { _FN1, }; -enum custom_keycodes { - QWERTY = SAFE_RANGE, -}; - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT_65_with_macro( KC_F1, KC_F2, QK_GESC, 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_DEL, KC_BSPC, KC_HOME, diff --git a/keyboards/keebio/quefrency/keymaps/default60/keymap.c b/keyboards/keebio/quefrency/keymaps/default60/keymap.c index f3545dfbdc..2f06f69309 100644 --- a/keyboards/keebio/quefrency/keymaps/default60/keymap.c +++ b/keyboards/keebio/quefrency/keymaps/default60/keymap.c @@ -12,10 +12,6 @@ enum custom_layer { _FN1, }; -enum custom_keycodes { - QWERTY = SAFE_RANGE, -}; - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT_60( QK_GESC, 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_DEL, KC_BSPC, diff --git a/keyboards/keebio/quefrency/keymaps/default65/keymap.c b/keyboards/keebio/quefrency/keymaps/default65/keymap.c index 980dd95eed..0cdc7dbcdc 100644 --- a/keyboards/keebio/quefrency/keymaps/default65/keymap.c +++ b/keyboards/keebio/quefrency/keymaps/default65/keymap.c @@ -3,8 +3,6 @@ #include QMK_KEYBOARD_H -extern keymap_config_t keymap_config; - // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. // Layer names don't all need to be of the same length, obviously, and you can also skip them @@ -12,10 +10,6 @@ extern keymap_config_t keymap_config; #define _BASE 0 #define _FN1 1 -enum custom_keycodes { - QWERTY = SAFE_RANGE, -}; - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT_65( QK_GESC, 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_DEL, KC_BSPC, KC_HOME, diff --git a/keyboards/keebio/quefrency/readme.md b/keyboards/keebio/quefrency/readme.md index dd2bde88f4..2138a5d14b 100644 --- a/keyboards/keebio/quefrency/readme.md +++ b/keyboards/keebio/quefrency/readme.md @@ -1,11 +1,10 @@ -Quefrency -========= +# Quefrency A split 60/65% staggered keyboard made and sold by Keebio. [More info at Keebio](https://keeb.io). -Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) -Hardware Supported: Pro Micro (Rev. 1), ATmega32u4 (Rev. 2 & 3) -Hardware Availability: [Keebio](https://keeb.io/) +* Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) +* Hardware Supported: Pro Micro (Rev. 1), ATmega32u4 (Rev. 2 & 3) +* Hardware Availability: [Keebio](https://keeb.io/) Make example for this keyboard (after setting up your build environment): @@ -17,6 +16,6 @@ Example of flashing this keyboard: Handedness detection is already hardwired onto the PCB, so no need to deal with `EE_HANDS` or flashing .eep files. -See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. +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). A build guide for this keyboard can be found here: [Keebio Build Guides](https://docs.keeb.io) diff --git a/keyboards/keebio/quefrency/rev6/config.h b/keyboards/keebio/quefrency/rev6/config.h index 952033edf1..ca19ea6402 100644 --- a/keyboards/keebio/quefrency/rev6/config.h +++ b/keyboards/keebio/quefrency/rev6/config.h @@ -13,14 +13,11 @@ #define SERIAL_USART_PIN_SWAP #define USB_VBUS_PIN C6 -#define SPLIT_HAND_PIN A0 /* Defines for the RGB matrix */ -#ifdef RGB_MATRIX_ENABLE -# 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 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 diff --git a/keyboards/keebio/quefrency/rev6/keyboard.json b/keyboards/keebio/quefrency/rev6/keyboard.json index 84629eb4cf..ac488daa08 100644 --- a/keyboards/keebio/quefrency/rev6/keyboard.json +++ b/keyboards/keebio/quefrency/rev6/keyboard.json @@ -200,12 +200,18 @@ ] } }, + "handedness": { + "pin": "A0" + }, "matrix_pins": { "right": { "cols": ["B2", "B1", "B0", "B12", "B13", "A7", "B6", "C13", "C14"], "rows": ["A5", "A4", "A3", "B5", "F1"] } }, + "serial": { + "driver": "usart" + }, "transport": { "sync": { "matrix_state": true diff --git a/keyboards/keebio/quefrency/rev6/rules.mk b/keyboards/keebio/quefrency/rev6/rules.mk deleted file mode 100644 index c6e2988321..0000000000 --- a/keyboards/keebio/quefrency/rev6/rules.mk +++ /dev/null @@ -1 +0,0 @@ -SERIAL_DRIVER = usart diff --git a/keyboards/keebio/rorschach/keymaps/default/config.h b/keyboards/keebio/rorschach/keymaps/default/config.h deleted file mode 100644 index da32daebb3..0000000000 --- a/keyboards/keebio/rorschach/keymaps/default/config.h +++ /dev/null @@ -1,24 +0,0 @@ -/* -Copyright 2018 Danny Nguyen - -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 . -*/ - -#pragma once - -// #define USE_I2C - -/* Select hand configuration */ -// #define MASTER_RIGHT -// #define EE_HANDS diff --git a/keyboards/keebio/rorschach/keymaps/default/keymap.c b/keyboards/keebio/rorschach/keymaps/default/keymap.c index 2949164c34..df03718193 100644 --- a/keyboards/keebio/rorschach/keymaps/default/keymap.c +++ b/keyboards/keebio/rorschach/keymaps/default/keymap.c @@ -1,5 +1,7 @@ -#include QMK_KEYBOARD_H +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H enum layer_names { _QWERTY, diff --git a/keyboards/keebio/rorschach/readme.md b/keyboards/keebio/rorschach/readme.md index 1a623a5353..f048cd307a 100644 --- a/keyboards/keebio/rorschach/readme.md +++ b/keyboards/keebio/rorschach/readme.md @@ -1,11 +1,10 @@ -Rorschach -========= +# Rorschach A split ortholinear 4x6 keyboard with 2 additional thumb keys and sold by Keebio. [More info at Keebio](https://keeb.io). -Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) -Hardware Supported: Pro Micro -Hardware Availability: [Keebio](https://keeb.io) +* Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) +* Hardware Supported: Pro Micro +* Hardware Availability: [Keebio](https://keeb.io) Make example for this keyboard (after setting up your build environment): @@ -13,8 +12,8 @@ Make example for this keyboard (after setting up your build environment): Example of flashing this keyboard: - make keebio/rorschach/rev1:default:avrdude + make keebio/rorschach/rev1:default:flash -See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. +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). A build guide for this keyboard can be found here: [Iris Build Guide](https://docs.keeb.io/iris-build-guide.html) diff --git a/keyboards/keebio/sinc/readme.md b/keyboards/keebio/sinc/readme.md index 29d9ed0415..9ffdf29c42 100644 --- a/keyboards/keebio/sinc/readme.md +++ b/keyboards/keebio/sinc/readme.md @@ -15,6 +15,6 @@ Example of flashing this keyboard: Handedness detection is already hardwired onto the PCB, so no need to deal with `EE_HANDS` or flashing .eep files. -See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. +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). A build guide for this keyboard can be found here: [Keebio Build Guides](https://docs.keeb.io) diff --git a/keyboards/keebio/tragicforce68/keymaps/default/keymap.c b/keyboards/keebio/tragicforce68/keymaps/default/keymap.c index 59076d4ecf..ee1c567c1b 100644 --- a/keyboards/keebio/tragicforce68/keymaps/default/keymap.c +++ b/keyboards/keebio/tragicforce68/keymaps/default/keymap.c @@ -1,3 +1,6 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + #include QMK_KEYBOARD_H #define _QWERTY 0 diff --git a/keyboards/keebio/tragicforce68/readme.md b/keyboards/keebio/tragicforce68/readme.md index c3ea92d7ad..07a673e848 100644 --- a/keyboards/keebio/tragicforce68/readme.md +++ b/keyboards/keebio/tragicforce68/readme.md @@ -1,11 +1,10 @@ -Tragicforce 68 -=============== +# Tragicforce 68 Magicforce 68 with [Tragicforce 68 replacement PCB](https://keeb.io/products/mf68-magicforce-68-pcb-replacement-kit) from Keebio. -Keyboard Maintainer: [Keebio](https://keeb.io) -Hardware Supported: Pro Micro -Hardware Availability: [Keebio](https://keeb.io) +* Keyboard Maintainer: [Keebio](https://keeb.io) +* Hardware Supported: Pro Micro +* Hardware Availability: [Keebio](https://keeb.io) Make example for this keyboard (after setting up your build environment): @@ -13,6 +12,6 @@ Make example for this keyboard (after setting up your build environment): Example of flashing this keyboard: - make keebio/tragicforce68:default:avrdude + make keebio/tragicforce68:default:flash -See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. +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). diff --git a/keyboards/keebio/tukey/readme.md b/keyboards/keebio/tukey/readme.md index 21527b6bf4..7e0334084c 100644 --- a/keyboards/keebio/tukey/readme.md +++ b/keyboards/keebio/tukey/readme.md @@ -2,12 +2,16 @@ 2-key keyboard for Big Switches -Keyboard Maintainer: [nooges/Keebio](https://github.com/nooges) -Hardware Supported: Pro Micro, Elite-C -Hardware Availability: [Keebio](https://keeb.io) +* Keyboard Maintainer: [nooges/Keebio](https://github.com/nooges) +* Hardware Supported: Pro Micro, Elite-C +* Hardware Availability: [Keebio](https://keeb.io) Make example for this keyboard (after setting up your build environment): make keebio/tukey:default +Example of flashing this keyboard: + + make keebio/tukey: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). diff --git a/keyboards/keebio/viterbi/keymaps/default/config.h b/keyboards/keebio/viterbi/keymaps/default/config.h index acc5970dcb..ffe91d3bee 100644 --- a/keyboards/keebio/viterbi/keymaps/default/config.h +++ b/keyboards/keebio/viterbi/keymaps/default/config.h @@ -17,13 +17,6 @@ along with this program. If not, see . #pragma once -// #define USE_I2C - -/* Select hand configuration */ - -// #define MASTER_RIGHT -// #define EE_HANDS - #undef RGBLIGHT_LED_COUNT #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD diff --git a/keyboards/keebio/viterbi/keymaps/default/keymap.c b/keyboards/keebio/viterbi/keymaps/default/keymap.c index e37fc8f790..4a658ac6ec 100644 --- a/keyboards/keebio/viterbi/keymaps/default/keymap.c +++ b/keyboards/keebio/viterbi/keymaps/default/keymap.c @@ -1,5 +1,7 @@ -#include QMK_KEYBOARD_H +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. diff --git a/keyboards/keebio/viterbi/readme.md b/keyboards/keebio/viterbi/readme.md index 2e475100b6..393fd6bbfb 100644 --- a/keyboards/keebio/viterbi/readme.md +++ b/keyboards/keebio/viterbi/readme.md @@ -1,21 +1,19 @@ -Viterbi -======= +# Viterbi A split 5x14 ortholinear keyboard kit made and sold by Keebio. [More info at Keebio](https://keeb.io) -Keyboard Maintainer: [Bakingpy](https://github.com/nooges) -Hardware Supported: Pro Micro -Hardware Availability: [Keebio](https://keeb.io) +* Keyboard Maintainer: [Bakingpy](https://github.com/nooges) +* Hardware Supported: Pro Micro +* Hardware Availability: [Keebio](https://keeb.io) Make example for this keyboard (after setting up your build environment): make keebio/viterbi/rev1:default - Example of flashing this keyboard: - make keebio/viterbi/rev1:default:avrdude + make keebio/viterbi/rev1:default:flash -See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. +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). A build guide for this keyboard can be found here: [Viterbi Build Guide](https://docs.keeb.io) diff --git a/keyboards/keebio/wavelet/keymaps/default/keymap.c b/keyboards/keebio/wavelet/keymaps/default/keymap.c index 20be1edd39..b3f4e17124 100644 --- a/keyboards/keebio/wavelet/keymaps/default/keymap.c +++ b/keyboards/keebio/wavelet/keymaps/default/keymap.c @@ -1,5 +1,7 @@ -#include QMK_KEYBOARD_H +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. diff --git a/keyboards/keebio/wavelet/readme.md b/keyboards/keebio/wavelet/readme.md index a107289bb4..e77344bfb6 100644 --- a/keyboards/keebio/wavelet/readme.md +++ b/keyboards/keebio/wavelet/readme.md @@ -1,11 +1,10 @@ -Wavelet -======= +# Wavelet A 4x12 ortholinear keyboard using Kailh Choc Low-Profile switches made and sold by [Keebio](https://keeb.io). -Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) -Hardware Supported: Pro Micro -Hardware Availability: [Keebio](https://keeb.io) +* Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) +* Hardware Supported: Pro Micro +* Hardware Availability: [Keebio](https://keeb.io) Make example for this keyboard (after setting up your build environment): @@ -13,8 +12,8 @@ Make example for this keyboard (after setting up your build environment): Example of flashing this keyboard: - make keebio/wavelet:default:avrdude + make keebio/wavelet:default:flash -See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. +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). A build guide for this keyboard can be found here: [Levinson Build Guide](https://docs.keeb.io) diff --git a/keyboards/keebio/wavelet/wavelet.c b/keyboards/keebio/wavelet/wavelet.c index 6f1a050e80..e78585b731 100644 --- a/keyboards/keebio/wavelet/wavelet.c +++ b/keyboards/keebio/wavelet/wavelet.c @@ -1,3 +1,6 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + #include "quantum.h" #ifdef SWAP_HANDS_ENABLE From a4b112b1efa1e47bf0cd7da7ffd2120e9dfb6ce0 Mon Sep 17 00:00:00 2001 From: silvinor <366673+silvinor@users.noreply.github.com> Date: Sat, 20 Sep 2025 13:37:18 +1000 Subject: [PATCH 59/99] [keyboard] Binepad KnobX1 - refactor `x1_layer_led` function as weak (#25668) refactor `x1_layer_led` function as weak --- keyboards/binepad/knobx1/knobx1.c | 7 +++++++ keyboards/binepad/knobx1/knobx1.h | 8 +------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/keyboards/binepad/knobx1/knobx1.c b/keyboards/binepad/knobx1/knobx1.c index 7f299b67e3..37602ca78c 100644 --- a/keyboards/binepad/knobx1/knobx1.c +++ b/keyboards/binepad/knobx1/knobx1.c @@ -9,6 +9,13 @@ # define X1_KEYMAP_LAYER_COUNT 4 #endif +__attribute__((weak)) void x1_layer_led(uint8_t lyr) { + gpio_write_pin(IND1_LED, lyr >= 0); + gpio_write_pin(IND2_LED, lyr >= 1); + gpio_write_pin(IND3_LED, lyr >= 2); + gpio_write_pin(IND4_LED, lyr >= 3); +} + void keyboard_pre_init_kb(void) { const pin_t indicator_leds[4] = {IND1_LED, IND2_LED, IND3_LED, IND4_LED}; for (int i = 0; i < 4; i++) { diff --git a/keyboards/binepad/knobx1/knobx1.h b/keyboards/binepad/knobx1/knobx1.h index 7645124057..3932fbd448 100644 --- a/keyboards/binepad/knobx1/knobx1.h +++ b/keyboards/binepad/knobx1/knobx1.h @@ -38,12 +38,6 @@ static inline void x1_led_3_off(void) { gpio_write_pin_low(IND3_LED); } static inline void x1_led_4_off(void) { gpio_write_pin_low(IND4_LED); } // clang-format on -static inline void x1_layer_led(uint8_t lyr) { - gpio_write_pin(IND1_LED, lyr >= 0); - gpio_write_pin(IND2_LED, lyr >= 1); - gpio_write_pin(IND3_LED, lyr >= 2); - gpio_write_pin(IND4_LED, lyr >= 3); -} - +void x1_layer_led(uint8_t lyr); bool process_x1_layer_up(keyrecord_t *record); bool process_x1_layer_down(keyrecord_t *record); From 115bf771a8b07bd571ccac52f091e081794d40fd Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 21 Sep 2025 21:40:30 +1000 Subject: [PATCH 60/99] Custom oled fonts cleanup (#25665) --- keyboards/anavi/macropad8/config.h | 7 +- keyboards/anavi/macropad8/glcdfont.c | 232 --------------- keyboards/gkeyboard/greatpad/config.h | 8 +- keyboards/gkeyboard/greatpad/lib/glcdfont.c | 236 ---------------- .../kimiko/keymaps/default/glcdfont.c | 237 ---------------- .../{ => rev1}/keymaps/default/config.h | 4 - .../{ => rev1}/keymaps/default/keymap.c | 0 .../{ => rev1}/keymaps/default/rules.mk | 1 - .../kimiko/{post_config.h => rev2/config.h} | 6 +- .../keycapsss/kimiko/{ => rev2}/glcdfont.c | 0 .../{ => rev3}/keymaps/oled/config.h | 2 +- .../{ => rev3}/keymaps/oled/keymap.c | 0 .../{ => rev3}/keymaps/oled/readme.md | 0 .../{ => rev3}/keymaps/oled/rules.mk | 0 .../{keymaps/oled => rev3/lib}/glcdfont.c | 0 .../marksard/treadstone48/common/glcdfont.c | 233 --------------- .../treadstone48/keymaps/default/config.h | 2 - .../rev1/keymaps/like_jis_rs/config.h | 2 - keyboards/orthodox/common/glcdfont.c | 265 ------------------ keyboards/rate/pistachio_pro/config.h | 1 - keyboards/rate/pistachio_pro/lib/glcdfont.c | 232 --------------- keyboards/rgbkb/zygomorph/common/glcdfont.c | 233 --------------- 22 files changed, 8 insertions(+), 1693 deletions(-) delete mode 100644 keyboards/anavi/macropad8/glcdfont.c delete mode 100644 keyboards/gkeyboard/greatpad/lib/glcdfont.c delete mode 100644 keyboards/keycapsss/kimiko/keymaps/default/glcdfont.c rename keyboards/keycapsss/kimiko/{ => rev1}/keymaps/default/config.h (91%) rename keyboards/keycapsss/kimiko/{ => rev1}/keymaps/default/keymap.c (100%) rename keyboards/keycapsss/kimiko/{ => rev1}/keymaps/default/rules.mk (95%) rename keyboards/keycapsss/kimiko/{post_config.h => rev2/config.h} (87%) rename keyboards/keycapsss/kimiko/{ => rev2}/glcdfont.c (100%) rename keyboards/keycapsss/plaid_pad/{ => rev3}/keymaps/oled/config.h (90%) rename keyboards/keycapsss/plaid_pad/{ => rev3}/keymaps/oled/keymap.c (100%) rename keyboards/keycapsss/plaid_pad/{ => rev3}/keymaps/oled/readme.md (100%) rename keyboards/keycapsss/plaid_pad/{ => rev3}/keymaps/oled/rules.mk (100%) rename keyboards/keycapsss/plaid_pad/{keymaps/oled => rev3/lib}/glcdfont.c (100%) delete mode 100644 keyboards/marksard/treadstone48/common/glcdfont.c delete mode 100644 keyboards/orthodox/common/glcdfont.c delete mode 100644 keyboards/rate/pistachio_pro/lib/glcdfont.c delete mode 100644 keyboards/rgbkb/zygomorph/common/glcdfont.c diff --git a/keyboards/anavi/macropad8/config.h b/keyboards/anavi/macropad8/config.h index f7c7b4b44c..edcc85f722 100644 --- a/keyboards/anavi/macropad8/config.h +++ b/keyboards/anavi/macropad8/config.h @@ -17,8 +17,5 @@ along with this program. If not, see . #pragma once -#ifdef OLED_ENABLE -# define OLED_DISPLAY_128X64 -# define OLED_TIMEOUT 60000 -# define OLED_FONT_H "keyboards/anavi/macropad8/glcdfont.c" -#endif +#define OLED_DISPLAY_128X64 +#define OLED_TIMEOUT 60000 diff --git a/keyboards/anavi/macropad8/glcdfont.c b/keyboards/anavi/macropad8/glcdfont.c deleted file mode 100644 index 10ce3b3457..0000000000 --- a/keyboards/anavi/macropad8/glcdfont.c +++ /dev/null @@ -1,232 +0,0 @@ -#include "progmem.h" - -// Corne 8x6 font with QMK Firmware Logo -// Online editor: https://helixfonteditor.netlify.com/ - -// clang-format off -const unsigned char font[] PROGMEM = { -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, -0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, -0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, -0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, -0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, -0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, -0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, -0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, -0x00, 0x18, 0x24, 0x18, 0x00, 0x00, -0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, -0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, -0x26, 0x29, 0x79, 0x29, 0x26, 0x00, -0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, -0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, -0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, -0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, -0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, -0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, -0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, -0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, -0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, -0x60, 0x60, 0x60, 0x60, 0x60, 0x00, -0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, -0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, -0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, -0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, -0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, -0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, -0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, -0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, -0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, -0x00, 0x07, 0x00, 0x07, 0x00, 0x00, -0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, -0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, -0x23, 0x13, 0x08, 0x64, 0x62, 0x00, -0x36, 0x49, 0x56, 0x20, 0x50, 0x00, -0x00, 0x08, 0x07, 0x03, 0x00, 0x00, -0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, -0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, -0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, -0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, -0x00, 0x80, 0x70, 0x30, 0x00, 0x00, -0x08, 0x08, 0x08, 0x08, 0x08, 0x00, -0x00, 0x00, 0x60, 0x60, 0x00, 0x00, -0x20, 0x10, 0x08, 0x04, 0x02, 0x00, -0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, -0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, -0x72, 0x49, 0x49, 0x49, 0x46, 0x00, -0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, -0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, -0x27, 0x45, 0x45, 0x45, 0x39, 0x00, -0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, -0x41, 0x21, 0x11, 0x09, 0x07, 0x00, -0x36, 0x49, 0x49, 0x49, 0x36, 0x00, -0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, -0x00, 0x00, 0x14, 0x00, 0x00, 0x00, -0x00, 0x40, 0x34, 0x00, 0x00, 0x00, -0x00, 0x08, 0x14, 0x22, 0x41, 0x00, -0x14, 0x14, 0x14, 0x14, 0x14, 0x00, -0x00, 0x41, 0x22, 0x14, 0x08, 0x00, -0x02, 0x01, 0x59, 0x09, 0x06, 0x00, -0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, -0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, -0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, -0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, -0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, -0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, -0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, -0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, -0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, -0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, -0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, -0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, -0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, -0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, -0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, -0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, -0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, -0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, -0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, -0x26, 0x49, 0x49, 0x49, 0x32, 0x00, -0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, -0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, -0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, -0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, -0x63, 0x14, 0x08, 0x14, 0x63, 0x00, -0x03, 0x04, 0x78, 0x04, 0x03, 0x00, -0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, -0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, -0x02, 0x04, 0x08, 0x10, 0x20, 0x00, -0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, -0x04, 0x02, 0x01, 0x02, 0x04, 0x00, -0x40, 0x40, 0x40, 0x40, 0x40, 0x00, -0x00, 0x03, 0x07, 0x08, 0x00, 0x00, -0x20, 0x54, 0x54, 0x78, 0x40, 0x00, -0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, -0x38, 0x44, 0x44, 0x44, 0x28, 0x00, -0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, -0x38, 0x54, 0x54, 0x54, 0x18, 0x00, -0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, -0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, -0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, -0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, -0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, -0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, -0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, -0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, -0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, -0x38, 0x44, 0x44, 0x44, 0x38, 0x00, -0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, -0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, -0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, -0x48, 0x54, 0x54, 0x54, 0x24, 0x00, -0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, -0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, -0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, -0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, -0x44, 0x28, 0x10, 0x28, 0x44, 0x00, -0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, -0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, -0x00, 0x08, 0x36, 0x41, 0x00, 0x00, -0x00, 0x00, 0x77, 0x00, 0x00, 0x00, -0x00, 0x41, 0x36, 0x08, 0x00, 0x00, -0x02, 0x01, 0x02, 0x04, 0x02, 0x00, -0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, -0xF0, 0xF8, 0xF8, 0x18, 0x00, 0xC0, -0xF0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, -0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0, -0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, -0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, -0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, -0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, -0x00, 0x00, 0x00, 0xE0, 0xE0, 0xC0, -0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, -0x00, 0xE0, 0xE0, 0xC0, 0xC0, 0xE0, -0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, -0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, -0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, -0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC, -0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00, -0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E, -0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, -0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, -0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, -0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, -0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xF8, 0xFC, 0xFE, -0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, -0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, -0xFF, 0x1F, 0x07, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0xFF, 0xFF, 0xFF, 0x81, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x81, -0xC3, 0xC3, 0xC3, 0x00, 0x00, 0xFF, -0xFF, 0xFF, 0x81, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x81, 0xFF, 0xFF, -0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, -0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, -0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, -0x9D, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, -0x1C, 0x9D, 0xDF, 0xDF, 0xDF, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, -0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, -0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F, -0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, -0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, -0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, -0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, -0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x0F, 0x1F, -0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F, -0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x3F, -0x3F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, -0x7F, 0x7C, 0x78, 0x78, 0x38, 0x1C, -0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x01, 0x03, 0x07, 0x07, -0x07, 0x07, 0x07, 0x07, 0x07, 0x07, -0x03, 0x01, 0x00, 0x00, 0x00, 0x00, -0x01, 0x03, 0x07, 0x07, 0x07, 0x07, -0x07, 0x07, 0x07, 0x07, 0x03, 0x01, -0x00, 0x00, 0x00, 0x07, 0x07, 0x07, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x07, 0x07, 0x07, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x07, 0x07, -0x07, 0x00, 0x00, 0x00, 0x01, 0x03, -0x07, 0x07, 0x07, 0x07, 0x07, 0x07, -0x07, 0x07, 0x03, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; diff --git a/keyboards/gkeyboard/greatpad/config.h b/keyboards/gkeyboard/greatpad/config.h index 4c745779b4..3ea0c44f9b 100644 --- a/keyboards/gkeyboard/greatpad/config.h +++ b/keyboards/gkeyboard/greatpad/config.h @@ -3,9 +3,9 @@ #pragma once -#define OLED_DISPLAY_128X64 -#define I2C1_SCL_PIN GP21 -#define I2C1_SDA_PIN GP20 #define I2C_DRIVER I2CD0 +#define I2C1_SCL_PIN GP21 +#define I2C1_SDA_PIN GP20 + +#define OLED_DISPLAY_128X64 #define OLED_BRIGHTNESS 128 -#define OLED_FONT_H "lib/glcdfont.c" diff --git a/keyboards/gkeyboard/greatpad/lib/glcdfont.c b/keyboards/gkeyboard/greatpad/lib/glcdfont.c deleted file mode 100644 index 10ced2bb2b..0000000000 --- a/keyboards/gkeyboard/greatpad/lib/glcdfont.c +++ /dev/null @@ -1,236 +0,0 @@ -// Copyright 2023 gkeyboard (@gkeyboard) -// SPDX-License-Identifier: GPL-2.0-or-later - -// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. -// See gfxfont.h for newer custom bitmap font info. - -#pragma once - -#include "progmem.h" - -static const unsigned char PROGMEM font[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, - 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, - 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, - 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, - 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, - 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, - 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, - 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, - 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, - 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, - 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, - 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, - 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, - 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, - 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, - 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, - 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, - 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, - 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, - 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, - 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, - 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, - 0x94, 0xB6, 0xFF, 0xB6, 0x94, 0x00, - 0x08, 0x0C, 0x7E, 0x0C, 0x08, 0x00, - 0x10, 0x30, 0x7E, 0x30, 0x10, 0x00, - 0x08, 0x08, 0x3E, 0x1C, 0x08, 0x00, - 0x08, 0x1C, 0x3E, 0x08, 0x08, 0x00, - 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, - 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, - 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, - 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, - 0x14, 0x3E, 0x14, 0x3E, 0x14, 0x00, - 0x2E, 0x2A, 0x7F, 0x2A, 0x3A, 0x00, - 0x20, 0x12, 0x08, 0x24, 0x02, 0x00, - 0x37, 0x49, 0x49, 0x37, 0x50, 0x00, - 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, - 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, - 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, - 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, - 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, - 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, - 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, - 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, - 0x7F, 0x51, 0x49, 0x45, 0x7F, 0x00, - 0x08, 0x04, 0x02, 0x7F, 0x00, 0x00, - 0x71, 0x49, 0x49, 0x49, 0x4F, 0x00, - 0x41, 0x41, 0x49, 0x49, 0x77, 0x00, - 0x0F, 0x10, 0x10, 0x10, 0x7F, 0x00, - 0x4F, 0x49, 0x49, 0x49, 0x71, 0x00, - 0x7E, 0x49, 0x49, 0x49, 0x70, 0x00, - 0x01, 0x01, 0x71, 0x09, 0x07, 0x00, - 0x77, 0x49, 0x49, 0x49, 0x77, 0x00, - 0x07, 0x49, 0x49, 0x49, 0x3F, 0x00, - 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, - 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, - 0x01, 0x01, 0x59, 0x09, 0x0F, 0x00, - 0x7F, 0x41, 0x5D, 0x59, 0x4F, 0x00, - 0x7F, 0x09, 0x09, 0x09, 0x7F, 0x00, - 0x7F, 0x49, 0x49, 0x49, 0x76, 0x00, - 0x7F, 0x41, 0x41, 0x41, 0x41, 0x00, - 0x7F, 0x41, 0x41, 0x41, 0x7E, 0x00, - 0x7F, 0x49, 0x49, 0x49, 0x49, 0x00, - 0x7F, 0x09, 0x09, 0x09, 0x09, 0x00, - 0x7F, 0x41, 0x41, 0x49, 0x7B, 0x00, - 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x70, 0x40, 0x40, 0x40, 0x7F, 0x00, - 0x7F, 0x08, 0x08, 0x08, 0x77, 0x00, - 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, - 0x7F, 0x01, 0x1F, 0x01, 0x7F, 0x00, - 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, - 0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00, - 0x7F, 0x09, 0x09, 0x09, 0x0F, 0x00, - 0x7F, 0x41, 0x71, 0x41, 0x7F, 0x00, - 0x7F, 0x09, 0x09, 0x19, 0x6F, 0x00, - 0x47, 0x49, 0x49, 0x49, 0x79, 0x00, - 0x01, 0x01, 0x7F, 0x01, 0x01, 0x00, - 0x7F, 0x40, 0x40, 0x40, 0x7F, 0x00, - 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, - 0x7F, 0x40, 0x7F, 0x40, 0x7F, 0x00, - 0x77, 0x08, 0x08, 0x08, 0x77, 0x00, - 0x4F, 0x48, 0x48, 0x48, 0x7F, 0x00, - 0x61, 0x51, 0x49, 0x45, 0x43, 0x00, - 0x00, 0x7F, 0x41, 0x41, 0x00, 0x00, - 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, - 0x00, 0x41, 0x41, 0x7F, 0x00, 0x00, - 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, - 0x00, 0x00, 0x07, 0x08, 0x00, 0x00, - 0x60, 0x54, 0x54, 0x54, 0x7C, 0x00, - 0x7F, 0x44, 0x44, 0x44, 0x78, 0x00, - 0x7C, 0x44, 0x44, 0x44, 0x44, 0x00, - 0x78, 0x44, 0x44, 0x44, 0x7F, 0x00, - 0x7C, 0x54, 0x54, 0x54, 0x5C, 0x00, - 0x08, 0x7F, 0x09, 0x09, 0x09, 0x00, - 0x38, 0xA4, 0xA4, 0xA4, 0xFC, 0x00, - 0x7F, 0x04, 0x04, 0x04, 0x78, 0x00, - 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, - 0x70, 0x40, 0x40, 0x7D, 0x00, 0x00, - 0x7F, 0x08, 0x08, 0x08, 0x76, 0x00, - 0x00, 0x00, 0x7F, 0x40, 0x00, 0x00, - 0x7C, 0x04, 0x7C, 0x04, 0x7C, 0x00, - 0x7C, 0x04, 0x04, 0x04, 0x78, 0x00, - 0x7C, 0x44, 0x44, 0x44, 0x7C, 0x00, - 0xFC, 0x24, 0x24, 0x24, 0x38, 0x00, - 0x38, 0x24, 0x24, 0x24, 0xFC, 0x00, - 0x7C, 0x04, 0x04, 0x04, 0x04, 0x00, - 0x5C, 0x54, 0x54, 0x54, 0x74, 0x00, - 0x04, 0x04, 0x7F, 0x04, 0x04, 0x00, - 0x7C, 0x40, 0x40, 0x40, 0x7C, 0x00, - 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, - 0x7C, 0x40, 0x7C, 0x40, 0x7C, 0x00, - 0x6C, 0x10, 0x10, 0x10, 0x6C, 0x00, - 0xBC, 0xA0, 0xA0, 0xA0, 0xFC, 0x00, - 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, - 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, - 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, - 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, - 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, - 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, - 0x00, 0x00, 0xE0, 0xF0, 0xF0, 0xF0, - 0xF0, 0xFE, 0xFF, 0x9F, 0x0F, 0x0F, - 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, - 0x0F, 0x0F, 0x9F, 0xFF, 0xFE, 0xF0, - 0xF0, 0xF0, 0xF0, 0xE0, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xE0, 0x10, 0x08, 0x04, 0x02, 0x02, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x02, 0x02, 0x02, 0x04, 0x08, - 0x10, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, - 0x7F, 0x51, 0x55, 0x55, 0x45, 0x7F, - 0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00, - 0x7F, 0x41, 0x7B, 0x77, 0x41, 0x7F, - 0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00, - 0x7F, 0x41, 0x5D, 0x5D, 0x5D, 0x7F, - 0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00, - 0xC0, 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, - 0xE6, 0xF7, 0xF3, 0xF0, 0x60, 0x00, - 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00, - 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00, - 0xF8, 0x1C, 0xDE, 0x1F, 0xFF, 0xFF, - 0xFF, 0x1F, 0xDE, 0x1C, 0xF8, 0x00, - 0xC0, 0xE2, 0xB4, 0xF8, 0xF8, 0xF8, - 0xF8, 0xF8, 0xB4, 0xE2, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x0F, 0x0F, 0x0F, - 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, - 0x87, 0xE1, 0xF9, 0xF9, 0xE1, 0x87, - 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, - 0x0F, 0x0F, 0x0F, 0x07, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0xC0, 0x30, 0x0C, - 0x33, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, - 0xFF, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x38, 0xC8, 0x08, 0x08, 0x0F, - 0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x24, 0x24, 0x12, 0x12, 0x24, 0x24, - 0x48, 0x48, 0x24, 0x24, 0x12, 0x12, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x3F, - 0x3F, 0x7F, 0x7F, 0x38, 0x10, 0x00, - 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, - 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, - 0x0F, 0x14, 0x21, 0x40, 0x45, 0x41, - 0x45, 0x40, 0x21, 0x14, 0x0F, 0x00, - 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, - 0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x0C, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x0C, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x01, 0x02, 0x04, 0x08, 0x10, 0x10, - 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x10, 0x10, 0x10, 0x08, 0x04, - 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x0C, 0x30, - 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, - 0x1C, 0x3E, 0x3E, 0x3E, 0x1C, 0x00, - 0x3E, 0x1C, 0x1C, 0x08, 0x08, 0x00, - 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; diff --git a/keyboards/keycapsss/kimiko/keymaps/default/glcdfont.c b/keyboards/keycapsss/kimiko/keymaps/default/glcdfont.c deleted file mode 100644 index c3c79d76ee..0000000000 --- a/keyboards/keycapsss/kimiko/keymaps/default/glcdfont.c +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2019 MechMerlin -// Copyright 2020 @ben_roe (keycapsss.com) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "progmem.h" - -// Corne 8x6 font -// Online editor: https://helixfonteditor.netlify.com -// or https://joric.github.io/qle/ -// See also: https://github.com/soundmonster/glcdfont_converter - -const unsigned char font[] PROGMEM = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, - 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, - 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, - 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, - 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, - 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, - 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, - 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, - 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, - 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, - 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, - 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, - 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, - 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, - 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, - 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, - 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, - 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, - 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, - 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, - 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, - 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, - 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, - 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, - 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, - 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, - 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, - 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, - 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, - 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, - 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, - 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, - 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, - 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, - 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, - 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, - 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, - 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, - 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, - 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, - 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, - 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, - 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, - 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, - 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, - 0x72, 0x49, 0x49, 0x49, 0x46, 0x00, - 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, - 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, - 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, - 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, - 0x41, 0x21, 0x11, 0x09, 0x07, 0x00, - 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, - 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, - 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, - 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, - 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, - 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, - 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, - 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, - 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, - 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, - 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, - 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, - 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, - 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, - 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, - 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, - 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, - 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, - 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, - 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, - 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, - 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, - 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, - 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, - 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, - 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, - 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, - 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, - 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, - 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, - 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, - 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, - 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, - 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, - 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, - 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, - 0x00, 0x13, 0x07, 0x08, 0x00, 0x00, - 0x20, 0x54, 0x54, 0x78, 0x40, 0x00, - 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, - 0x38, 0x44, 0x44, 0x44, 0x28, 0x00, - 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, - 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, - 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, - 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, - 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, - 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, - 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, - 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, - 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, - 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, - 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, - 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, - 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, - 0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, - 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, - 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, - 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, - 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, - 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, - 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, - 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, - 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, - 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, - 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, - 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, - 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, - 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, - 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xF8, 0x04, 0x22, 0x52, 0xE2, - 0x42, 0x42, 0x42, 0xE2, 0x52, 0x22, - 0x22, 0x22, 0x42, 0x82, 0x02, 0x02, - 0x22, 0x22, 0x02, 0x04, 0xF8, 0x00, - 0x00, 0xF8, 0x04, 0x02, 0x02, 0x82, - 0x42, 0x22, 0x42, 0x82, 0x02, 0x02, - 0x02, 0x82, 0x42, 0x22, 0x12, 0x22, - 0x42, 0x82, 0x02, 0x04, 0xF8, 0x00, - 0x00, 0xF8, 0xFC, 0xDE, 0xAE, 0x1E, - 0xBE, 0xBE, 0xBE, 0x1E, 0xAE, 0xDE, - 0xDE, 0xDE, 0xBE, 0x7E, 0xFE, 0xFE, - 0xDE, 0xDE, 0xFE, 0xFC, 0xF8, 0x00, - 0x00, 0xF8, 0xFC, 0xFE, 0xFE, 0x7E, - 0xBE, 0xDE, 0xBE, 0x7E, 0xFE, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, - 0x10, 0x10, 0x08, 0x08, 0x10, 0x10, - 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, - 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xE0, - 0xF0, 0xF0, 0xF8, 0xF8, 0xF0, 0xF0, - 0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, - 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, - 0x10, 0x10, 0x08, 0x08, 0x10, 0x10, - 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, - 0x80, 0x80, 0x40, 0xC0, 0x60, 0xA0, - 0x50, 0xB0, 0x58, 0xA8, 0x50, 0xB0, - 0x60, 0xA0, 0x40, 0xC0, 0x80, 0x80, - 0x1F, 0x1F, 0x0E, 0x1B, 0x11, 0xC0, - 0x1F, 0x1F, 0x00, 0x1F, 0x1F, 0x06, - 0x0C, 0xC6, 0x1F, 0x1F, 0x80, 0x5F, - 0x1F, 0x00, 0x1F, 0x1F, 0x8E, 0x9B, - 0x91, 0x80, 0x9F, 0x9F, 0x91, 0x1F, - 0x00, 0x1F, 0x20, 0x44, 0x4A, 0x47, - 0x42, 0x42, 0x42, 0x47, 0x4A, 0x44, - 0x40, 0x40, 0x40, 0x40, 0x41, 0x42, - 0x44, 0x44, 0x40, 0x20, 0x1F, 0x00, - 0x00, 0x1F, 0x20, 0x40, 0x41, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x41, 0x40, - 0x41, 0x41, 0x4F, 0x48, 0x48, 0x48, - 0x4F, 0x41, 0x41, 0x20, 0x1F, 0x00, - 0x00, 0x1F, 0x3F, 0x7B, 0x75, 0x78, - 0x7D, 0x7D, 0x7D, 0x78, 0x75, 0x7B, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7E, 0x7D, - 0x7B, 0x7B, 0x7F, 0x3F, 0x1F, 0x00, - 0x00, 0x1F, 0x3F, 0x7F, 0x7E, 0x7F, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7E, 0x7F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x88, 0x5D, 0x5D, 0x3E, 0x3E, - 0x7C, 0x7C, 0xF8, 0xF8, 0x7C, 0x7C, - 0x3E, 0x3E, 0x5D, 0x5D, 0x88, 0x88, - 0x88, 0x88, 0x55, 0x55, 0x23, 0x23, - 0x47, 0x47, 0x8F, 0x8F, 0x47, 0x47, - 0x23, 0x23, 0x55, 0x55, 0x88, 0x88, - 0x88, 0x88, 0xD5, 0xD5, 0xE2, 0xE2, - 0xC4, 0xC4, 0x88, 0x88, 0xC4, 0xC4, - 0xE2, 0xE2, 0xD5, 0xD5, 0x88, 0x88, - 0x88, 0x88, 0x5D, 0xD5, 0x6B, 0xB6, - 0x6D, 0xD6, 0xAD, 0xDA, 0x6D, 0xD6, - 0x6B, 0xB6, 0x5D, 0xD5, 0x88, 0x88, - 0x00, 0x84, 0x87, 0x7D, 0x55, 0x57, - 0x55, 0x7D, 0x87, 0x84, 0x00, 0x91, - 0x95, 0x55, 0x55, 0x3F, 0x55, 0x55, - 0x95, 0x91, 0x00, 0x08, 0x08, 0x08, - 0x88, 0xFC, 0x0A, 0x09, 0x08, 0x08, - 0x04, 0xF8, 0x00, 0x00, 0xF8, 0x04, - 0x20, 0x1F, 0x00, 0x00, 0x1F, 0x20, - 0xFC, 0xF8, 0x00, 0x00, 0xF8, 0x04, - 0x3F, 0x1F, 0x00, 0x00, 0x1F, 0x20, - 0x04, 0xF8, 0x00, 0x00, 0xF8, 0xFC, - 0x20, 0x1F, 0x00, 0x00, 0x1F, 0x3F, - 0xFC, 0xF8, 0x00, 0x00, 0xF8, 0xFC, - 0x3F, 0x1F, 0x00, 0x00, 0x1F, 0x3F, - 0xFE, 0x7E, 0xBE, 0xDE, 0xEE, 0xDE, - 0xBE, 0x7E, 0xFE, 0xFC, 0xF8, 0x00, - 0x7E, 0x7E, 0x70, 0x77, 0x77, 0x77, - 0x70, 0x7E, 0x7E, 0x3F, 0x1F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, - 0x04, 0x04, 0x08, 0x08, 0x04, 0x04, - 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, - 0x04, 0x04, 0x08, 0x08, 0x04, 0x04, - 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, - 0x07, 0x07, 0x0F, 0x0F, 0x07, 0x07, - 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x03, 0x02, - 0x05, 0x06, 0x0D, 0x0A, 0x05, 0x06, - 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, -}; diff --git a/keyboards/keycapsss/kimiko/keymaps/default/config.h b/keyboards/keycapsss/kimiko/rev1/keymaps/default/config.h similarity index 91% rename from keyboards/keycapsss/kimiko/keymaps/default/config.h rename to keyboards/keycapsss/kimiko/rev1/keymaps/default/config.h index 8be15d964a..fc6f93bec0 100644 --- a/keyboards/keycapsss/kimiko/keymaps/default/config.h +++ b/keyboards/keycapsss/kimiko/rev1/keymaps/default/config.h @@ -17,10 +17,6 @@ #pragma once -#define OLED_FONT_H "keyboards/keycapsss/kimiko/keymaps/default/glcdfont.c" -// #define OLED_FONT_WIDTH 5 -// #define OLED_FONT_HEIGHT 7 - #ifdef RGBLIGHT_ENABLE # define RGBLIGHT_HUE_STEP 8 # define RGBLIGHT_SAT_STEP 8 diff --git a/keyboards/keycapsss/kimiko/keymaps/default/keymap.c b/keyboards/keycapsss/kimiko/rev1/keymaps/default/keymap.c similarity index 100% rename from keyboards/keycapsss/kimiko/keymaps/default/keymap.c rename to keyboards/keycapsss/kimiko/rev1/keymaps/default/keymap.c diff --git a/keyboards/keycapsss/kimiko/keymaps/default/rules.mk b/keyboards/keycapsss/kimiko/rev1/keymaps/default/rules.mk similarity index 95% rename from keyboards/keycapsss/kimiko/keymaps/default/rules.mk rename to keyboards/keycapsss/kimiko/rev1/keymaps/default/rules.mk index ef4f0c0b43..16cecbdbc6 100644 --- a/keyboards/keycapsss/kimiko/keymaps/default/rules.mk +++ b/keyboards/keycapsss/kimiko/rev1/keymaps/default/rules.mk @@ -1,4 +1,3 @@ -OLED_ENABLE = yes ENCODER_ENABLE = yes # ENables the use of one or more encoders RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow diff --git a/keyboards/keycapsss/kimiko/post_config.h b/keyboards/keycapsss/kimiko/rev2/config.h similarity index 87% rename from keyboards/keycapsss/kimiko/post_config.h rename to keyboards/keycapsss/kimiko/rev2/config.h index 31be5898cf..c728510c30 100644 --- a/keyboards/keycapsss/kimiko/post_config.h +++ b/keyboards/keycapsss/kimiko/rev2/config.h @@ -18,8 +18,4 @@ #pragma once -// OLED definitions -#ifndef OLED_FONT_H -# define OLED_FONT_H "keyboards/keycapsss/kimiko/glcdfont.c" -#endif - +#define OLED_FONT_H "keyboards/keycapsss/kimiko/rev2/glcdfont.c" diff --git a/keyboards/keycapsss/kimiko/glcdfont.c b/keyboards/keycapsss/kimiko/rev2/glcdfont.c similarity index 100% rename from keyboards/keycapsss/kimiko/glcdfont.c rename to keyboards/keycapsss/kimiko/rev2/glcdfont.c diff --git a/keyboards/keycapsss/plaid_pad/keymaps/oled/config.h b/keyboards/keycapsss/plaid_pad/rev3/keymaps/oled/config.h similarity index 90% rename from keyboards/keycapsss/plaid_pad/keymaps/oled/config.h rename to keyboards/keycapsss/plaid_pad/rev3/keymaps/oled/config.h index ddb539fb09..74597b4253 100644 --- a/keyboards/keycapsss/plaid_pad/keymaps/oled/config.h +++ b/keyboards/keycapsss/plaid_pad/rev3/keymaps/oled/config.h @@ -17,4 +17,4 @@ #pragma once // place overrides here -#define OLED_FONT_H "keyboards/keycapsss/plaid_pad/keymaps/oled/glcdfont.c" +#define OLED_FONT_H "keyboards/keycapsss/plaid_pad/rev3/lib/glcdfont.c" diff --git a/keyboards/keycapsss/plaid_pad/keymaps/oled/keymap.c b/keyboards/keycapsss/plaid_pad/rev3/keymaps/oled/keymap.c similarity index 100% rename from keyboards/keycapsss/plaid_pad/keymaps/oled/keymap.c rename to keyboards/keycapsss/plaid_pad/rev3/keymaps/oled/keymap.c diff --git a/keyboards/keycapsss/plaid_pad/keymaps/oled/readme.md b/keyboards/keycapsss/plaid_pad/rev3/keymaps/oled/readme.md similarity index 100% rename from keyboards/keycapsss/plaid_pad/keymaps/oled/readme.md rename to keyboards/keycapsss/plaid_pad/rev3/keymaps/oled/readme.md diff --git a/keyboards/keycapsss/plaid_pad/keymaps/oled/rules.mk b/keyboards/keycapsss/plaid_pad/rev3/keymaps/oled/rules.mk similarity index 100% rename from keyboards/keycapsss/plaid_pad/keymaps/oled/rules.mk rename to keyboards/keycapsss/plaid_pad/rev3/keymaps/oled/rules.mk diff --git a/keyboards/keycapsss/plaid_pad/keymaps/oled/glcdfont.c b/keyboards/keycapsss/plaid_pad/rev3/lib/glcdfont.c similarity index 100% rename from keyboards/keycapsss/plaid_pad/keymaps/oled/glcdfont.c rename to keyboards/keycapsss/plaid_pad/rev3/lib/glcdfont.c diff --git a/keyboards/marksard/treadstone48/common/glcdfont.c b/keyboards/marksard/treadstone48/common/glcdfont.c deleted file mode 100644 index 003ce1a87b..0000000000 --- a/keyboards/marksard/treadstone48/common/glcdfont.c +++ /dev/null @@ -1,233 +0,0 @@ -// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. -// See gfxfont.h for newer custom bitmap font info. - -#include "progmem.h" - -// Standard ASCII 5x7 font - -static const unsigned char font[] PROGMEM = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, - 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, - 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, - 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, - 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, - 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, - 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, - 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, - 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, - 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, - 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, - 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, - 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, - 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, - 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, - 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, - 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, - 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, - 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, - 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, - 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, - 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, - 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, - 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, - 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, - 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, - 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, - 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, - 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, - 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, - 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, - 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, - 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, - 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, - 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, - 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, - 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, - 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, - 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, - 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, - 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, - 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, - 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, - 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, - 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, - 0x72, 0x49, 0x49, 0x49, 0x46, 0x00, - 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, - 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, - 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, - 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, - 0x41, 0x21, 0x11, 0x09, 0x07, 0x00, - 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, - 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, - 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, - 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, - 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, - 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, - 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, - 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, - 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, - 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, - 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, - 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, - 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, - 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, - 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, - 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, - 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, - 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, - 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, - 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, - 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, - 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, - 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, - 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, - 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, - 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, - 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, - 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, - 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, - 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, - 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, - 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, - 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, - 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, - 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, - 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, - 0x00, 0x03, 0x07, 0x08, 0x00, 0x00, - 0x20, 0x54, 0x54, 0x78, 0x40, 0x00, - 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, - 0x38, 0x44, 0x44, 0x44, 0x28, 0x00, - 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, - 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, - 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, - 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, - 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, - 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, - 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, - 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, - 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, - 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, - 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, - 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, - 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00, - 0x18, 0x24, 0x24, 0x18, 0xFC, 0x00, - 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, - 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, - 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, - 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, - 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, - 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, - 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, - 0x4C, 0x10, 0x10, 0x10, 0x7C, 0x00, - 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, - 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, - 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, - 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, - 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, - 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; diff --git a/keyboards/marksard/treadstone48/keymaps/default/config.h b/keyboards/marksard/treadstone48/keymaps/default/config.h index a5f68e7a2b..ec84fb39f1 100644 --- a/keyboards/marksard/treadstone48/keymaps/default/config.h +++ b/keyboards/marksard/treadstone48/keymaps/default/config.h @@ -45,5 +45,3 @@ // If you plug in the USB on the right side, please enable MASTER_RIGHT // #define RHYMESTONE_RIGHTHAND - -#define OLED_FONT_H "keyboards/marksard/treadstone48/common/glcdfont.c" diff --git a/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/config.h b/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/config.h index f18bcf44e7..d5973a16d8 100644 --- a/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/config.h +++ b/keyboards/marksard/treadstone48/rev1/keymaps/like_jis_rs/config.h @@ -46,5 +46,3 @@ // If you plug in the USB on the right side, please enable MASTER_RIGHT // #define RHYMESTONE_RIGHTHAND - -#define OLED_FONT_H "keyboards/marksard/treadstone48/common/glcdfont.c" diff --git a/keyboards/orthodox/common/glcdfont.c b/keyboards/orthodox/common/glcdfont.c deleted file mode 100644 index d607d34b77..0000000000 --- a/keyboards/orthodox/common/glcdfont.c +++ /dev/null @@ -1,265 +0,0 @@ -// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. -// See gfxfont.h for newer custom bitmap font info. - -#include "progmem.h" - -// Standard ASCII 5x7 font - -static const unsigned char font[] PROGMEM = { - 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, - 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, - 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, - 0x18, 0x3C, 0x7E, 0x3C, 0x18, - 0x1C, 0x57, 0x7D, 0x57, 0x1C, - 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, - 0x00, 0x18, 0x3C, 0x18, 0x00, - 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, - 0x00, 0x18, 0x24, 0x18, 0x00, - 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, - 0x30, 0x48, 0x3A, 0x06, 0x0E, - 0x26, 0x29, 0x79, 0x29, 0x26, - 0x40, 0x7F, 0x05, 0x05, 0x07, - 0x40, 0x7F, 0x05, 0x25, 0x3F, - 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, - 0x7F, 0x3E, 0x1C, 0x1C, 0x08, - 0x08, 0x1C, 0x1C, 0x3E, 0x7F, - 0x14, 0x22, 0x7F, 0x22, 0x14, - 0x5F, 0x5F, 0x00, 0x5F, 0x5F, - 0x06, 0x09, 0x7F, 0x01, 0x7F, - 0x00, 0x66, 0x89, 0x95, 0x6A, - 0x60, 0x60, 0x60, 0x60, 0x60, - 0x94, 0xA2, 0xFF, 0xA2, 0x94, - 0x08, 0x04, 0x7E, 0x04, 0x08, - 0x10, 0x20, 0x7E, 0x20, 0x10, - 0x08, 0x08, 0x2A, 0x1C, 0x08, - 0x08, 0x1C, 0x2A, 0x08, 0x08, - 0x1E, 0x10, 0x10, 0x10, 0x10, - 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, - 0x30, 0x38, 0x3E, 0x38, 0x30, - 0x06, 0x0E, 0x3E, 0x0E, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5F, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x07, 0x00, - 0x14, 0x7F, 0x14, 0x7F, 0x14, - 0x24, 0x2A, 0x7F, 0x2A, 0x12, - 0x23, 0x13, 0x08, 0x64, 0x62, - 0x36, 0x49, 0x56, 0x20, 0x50, - 0x00, 0x08, 0x07, 0x03, 0x00, - 0x00, 0x1C, 0x22, 0x41, 0x00, - 0x00, 0x41, 0x22, 0x1C, 0x00, - 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, - 0x08, 0x08, 0x3E, 0x08, 0x08, - 0x00, 0x80, 0x70, 0x30, 0x00, - 0x08, 0x08, 0x08, 0x08, 0x08, - 0x00, 0x00, 0x60, 0x60, 0x00, - 0x20, 0x10, 0x08, 0x04, 0x02, - 0x3E, 0x51, 0x49, 0x45, 0x3E, - 0x00, 0x42, 0x7F, 0x40, 0x00, - 0x72, 0x49, 0x49, 0x49, 0x46, - 0x21, 0x41, 0x49, 0x4D, 0x33, - 0x18, 0x14, 0x12, 0x7F, 0x10, - 0x27, 0x45, 0x45, 0x45, 0x39, - 0x3C, 0x4A, 0x49, 0x49, 0x31, - 0x41, 0x21, 0x11, 0x09, 0x07, - 0x36, 0x49, 0x49, 0x49, 0x36, - 0x46, 0x49, 0x49, 0x29, 0x1E, - 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x40, 0x34, 0x00, 0x00, - 0x00, 0x08, 0x14, 0x22, 0x41, - 0x14, 0x14, 0x14, 0x14, 0x14, - 0x00, 0x41, 0x22, 0x14, 0x08, - 0x02, 0x01, 0x59, 0x09, 0x06, - 0x3E, 0x41, 0x5D, 0x59, 0x4E, - 0x7C, 0x12, 0x11, 0x12, 0x7C, - 0x7F, 0x49, 0x49, 0x49, 0x36, - 0x3E, 0x41, 0x41, 0x41, 0x22, - 0x7F, 0x41, 0x41, 0x41, 0x3E, - 0x7F, 0x49, 0x49, 0x49, 0x41, - 0x7F, 0x09, 0x09, 0x09, 0x01, - 0x3E, 0x41, 0x41, 0x51, 0x73, - 0x7F, 0x08, 0x08, 0x08, 0x7F, - 0x00, 0x41, 0x7F, 0x41, 0x00, - 0x20, 0x40, 0x41, 0x3F, 0x01, - 0x7F, 0x08, 0x14, 0x22, 0x41, - 0x7F, 0x40, 0x40, 0x40, 0x40, - 0x7F, 0x02, 0x1C, 0x02, 0x7F, - 0x7F, 0x04, 0x08, 0x10, 0x7F, - 0x3E, 0x41, 0x41, 0x41, 0x3E, - 0x7F, 0x09, 0x09, 0x09, 0x06, - 0x3E, 0x41, 0x51, 0x21, 0x5E, - 0x7F, 0x09, 0x19, 0x29, 0x46, - 0x26, 0x49, 0x49, 0x49, 0x32, - 0x03, 0x01, 0x7F, 0x01, 0x03, - 0x3F, 0x40, 0x40, 0x40, 0x3F, - 0x1F, 0x20, 0x40, 0x20, 0x1F, - 0x3F, 0x40, 0x38, 0x40, 0x3F, - 0x63, 0x14, 0x08, 0x14, 0x63, - 0x03, 0x04, 0x78, 0x04, 0x03, - 0x61, 0x59, 0x49, 0x4D, 0x43, - 0x00, 0x7F, 0x41, 0x41, 0x41, - 0x02, 0x04, 0x08, 0x10, 0x20, - 0x00, 0x41, 0x41, 0x41, 0x7F, - 0x04, 0x02, 0x01, 0x02, 0x04, - 0x40, 0x40, 0x40, 0x40, 0x40, - 0x00, 0x03, 0x07, 0x08, 0x00, - 0x20, 0x54, 0x54, 0x78, 0x40, - 0x7F, 0x28, 0x44, 0x44, 0x38, - 0x38, 0x44, 0x44, 0x44, 0x28, - 0x38, 0x44, 0x44, 0x28, 0x7F, - 0x38, 0x54, 0x54, 0x54, 0x18, - 0x00, 0x08, 0x7E, 0x09, 0x02, - 0x18, 0xA4, 0xA4, 0x9C, 0x78, - 0x7F, 0x08, 0x04, 0x04, 0x78, - 0x00, 0x44, 0x7D, 0x40, 0x00, - 0x20, 0x40, 0x40, 0x3D, 0x00, - 0x7F, 0x10, 0x28, 0x44, 0x00, - 0x00, 0x41, 0x7F, 0x40, 0x00, - 0x7C, 0x04, 0x78, 0x04, 0x78, - 0x7C, 0x08, 0x04, 0x04, 0x78, - 0x38, 0x44, 0x44, 0x44, 0x38, - 0xFC, 0x18, 0x24, 0x24, 0x18, - 0x18, 0x24, 0x24, 0x18, 0xFC, - 0x7C, 0x08, 0x04, 0x04, 0x08, - 0x48, 0x54, 0x54, 0x54, 0x24, - 0x04, 0x04, 0x3F, 0x44, 0x24, - 0x3C, 0x40, 0x40, 0x20, 0x7C, - 0x1C, 0x20, 0x40, 0x20, 0x1C, - 0x3C, 0x40, 0x30, 0x40, 0x3C, - 0x44, 0x28, 0x10, 0x28, 0x44, - 0x4C, 0x90, 0x90, 0x90, 0x7C, - 0x44, 0x64, 0x54, 0x4C, 0x44, - 0x00, 0x08, 0x36, 0x41, 0x00, - 0x00, 0x00, 0x77, 0x00, 0x00, - 0x00, 0x41, 0x36, 0x08, 0x00, - 0x02, 0x01, 0x02, 0x04, 0x02, - 0x3C, 0x26, 0x23, 0x26, 0x3C, - 0x1E, 0xA1, 0xA1, 0x61, 0x12, - 0x3A, 0x40, 0x40, 0x20, 0x7A, - 0x38, 0x54, 0x54, 0x55, 0x59, - 0x21, 0x55, 0x55, 0x79, 0x41, - 0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut - 0x21, 0x55, 0x54, 0x78, 0x40, - 0x20, 0x54, 0x55, 0x79, 0x40, - 0x0C, 0x1E, 0x52, 0x72, 0x12, - 0x39, 0x55, 0x55, 0x55, 0x59, - 0x39, 0x54, 0x54, 0x54, 0x59, - 0x39, 0x55, 0x54, 0x54, 0x58, - 0x00, 0x00, 0x45, 0x7C, 0x41, - 0x00, 0x02, 0x45, 0x7D, 0x42, - 0x00, 0x01, 0x45, 0x7C, 0x40, - 0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut - 0xF0, 0x28, 0x25, 0x28, 0xF0, - 0x7C, 0x54, 0x55, 0x45, 0x00, - 0x20, 0x54, 0x54, 0x7C, 0x54, - 0x7C, 0x0A, 0x09, 0x7F, 0x49, - 0x32, 0x49, 0x49, 0x49, 0x32, - 0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut - 0x32, 0x4A, 0x48, 0x48, 0x30, - 0x3A, 0x41, 0x41, 0x21, 0x7A, - 0x3A, 0x42, 0x40, 0x20, 0x78, - 0x00, 0x9D, 0xA0, 0xA0, 0x7D, - 0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut - 0x3D, 0x40, 0x40, 0x40, 0x3D, - 0x3C, 0x24, 0xFF, 0x24, 0x24, - 0x48, 0x7E, 0x49, 0x43, 0x66, - 0x2B, 0x2F, 0xFC, 0x2F, 0x2B, - 0xFF, 0x09, 0x29, 0xF6, 0x20, - 0xC0, 0x88, 0x7E, 0x09, 0x03, - 0x20, 0x54, 0x54, 0x79, 0x41, - 0x00, 0x00, 0x44, 0x7D, 0x41, - 0x30, 0x48, 0x48, 0x4A, 0x32, - 0x38, 0x40, 0x40, 0x22, 0x7A, - 0x00, 0x7A, 0x0A, 0x0A, 0x72, - 0x7D, 0x0D, 0x19, 0x31, 0x7D, - 0x26, 0x29, 0x29, 0x2F, 0x28, - 0x26, 0x29, 0x29, 0x29, 0x26, - 0x30, 0x48, 0x4D, 0x40, 0x20, - 0x38, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x38, - 0x2F, 0x10, 0xC8, 0xAC, 0xBA, - 0x2F, 0x10, 0x28, 0x34, 0xFA, - 0x00, 0x00, 0x7B, 0x00, 0x00, - 0x08, 0x14, 0x2A, 0x14, 0x22, - 0x22, 0x14, 0x2A, 0x14, 0x08, - 0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old code - 0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block - 0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block - 0x00, 0x00, 0x00, 0xFF, 0x00, - 0x10, 0x10, 0x10, 0xFF, 0x00, - 0x14, 0x14, 0x14, 0xFF, 0x00, - 0x10, 0x10, 0xFF, 0x00, 0xFF, - 0x10, 0x10, 0xF0, 0x10, 0xF0, - 0x14, 0x14, 0x14, 0xFC, 0x00, - 0x14, 0x14, 0xF7, 0x00, 0xFF, - 0x00, 0x00, 0xFF, 0x00, 0xFF, - 0x14, 0x14, 0xF4, 0x04, 0xFC, - 0x14, 0x14, 0x17, 0x10, 0x1F, - 0x10, 0x10, 0x1F, 0x10, 0x1F, - 0x14, 0x14, 0x14, 0x1F, 0x00, - 0x10, 0x10, 0x10, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x10, - 0x10, 0x10, 0x10, 0x1F, 0x10, - 0x10, 0x10, 0x10, 0xF0, 0x10, - 0x00, 0x00, 0x00, 0xFF, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0xFF, 0x10, - 0x00, 0x00, 0x00, 0xFF, 0x14, - 0x00, 0x00, 0xFF, 0x00, 0xFF, - 0x00, 0x00, 0x1F, 0x10, 0x17, - 0x00, 0x00, 0xFC, 0x04, 0xF4, - 0x14, 0x14, 0x17, 0x10, 0x17, - 0x14, 0x14, 0xF4, 0x04, 0xF4, - 0x00, 0x00, 0xFF, 0x00, 0xF7, - 0x14, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x14, 0xF7, 0x00, 0xF7, - 0x14, 0x14, 0x14, 0x17, 0x14, - 0x10, 0x10, 0x1F, 0x10, 0x1F, - 0x14, 0x14, 0x14, 0xF4, 0x14, - 0x10, 0x10, 0xF0, 0x10, 0xF0, - 0x00, 0x00, 0x1F, 0x10, 0x1F, - 0x00, 0x00, 0x00, 0x1F, 0x14, - 0x00, 0x00, 0x00, 0xFC, 0x14, - 0x00, 0x00, 0xF0, 0x10, 0xF0, - 0x10, 0x10, 0xFF, 0x10, 0xFF, - 0x14, 0x14, 0x14, 0xFF, 0x14, - 0x10, 0x10, 0x10, 0x1F, 0x00, - 0x00, 0x00, 0x00, 0xF0, 0x10, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, - 0xFF, 0xFF, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x38, 0x44, 0x44, 0x38, 0x44, - 0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta - 0x7E, 0x02, 0x02, 0x06, 0x06, - 0x02, 0x7E, 0x02, 0x7E, 0x02, - 0x63, 0x55, 0x49, 0x41, 0x63, - 0x38, 0x44, 0x44, 0x3C, 0x04, - 0x40, 0x7E, 0x20, 0x1E, 0x20, - 0x06, 0x02, 0x7E, 0x02, 0x02, - 0x99, 0xA5, 0xE7, 0xA5, 0x99, - 0x1C, 0x2A, 0x49, 0x2A, 0x1C, - 0x4C, 0x72, 0x01, 0x72, 0x4C, - 0x30, 0x4A, 0x4D, 0x4D, 0x30, - 0x30, 0x48, 0x78, 0x48, 0x30, - 0xBC, 0x62, 0x5A, 0x46, 0x3D, - 0x3E, 0x49, 0x49, 0x49, 0x00, - 0x7E, 0x01, 0x01, 0x01, 0x7E, - 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, - 0x44, 0x44, 0x5F, 0x44, 0x44, - 0x40, 0x51, 0x4A, 0x44, 0x40, - 0x40, 0x44, 0x4A, 0x51, 0x40, - 0x00, 0x00, 0xFF, 0x01, 0x03, - 0xE0, 0x80, 0xFF, 0x00, 0x00, - 0x08, 0x08, 0x6B, 0x6B, 0x08, - 0x36, 0x12, 0x36, 0x24, 0x36, - 0x06, 0x0F, 0x09, 0x0F, 0x06, - 0x00, 0x00, 0x18, 0x18, 0x00, - 0x00, 0x00, 0x10, 0x10, 0x00, - 0x30, 0x40, 0xFF, 0x01, 0x01, - 0x00, 0x1F, 0x01, 0x01, 0x1E, - 0x00, 0x19, 0x1D, 0x17, 0x12, - 0x00, 0x3C, 0x3C, 0x3C, 0x3C, - 0x00, 0x00, 0x00, 0x00, 0x00 // #255 NBSP -}; diff --git a/keyboards/rate/pistachio_pro/config.h b/keyboards/rate/pistachio_pro/config.h index 309d51f79c..d0b1ddcae8 100644 --- a/keyboards/rate/pistachio_pro/config.h +++ b/keyboards/rate/pistachio_pro/config.h @@ -42,7 +42,6 @@ along with this program. If not, see . /* OLED */ #define OLED_DISPLAY_128X64 -#define OLED_FONT_H "keyboards/rate/pistachio_pro/lib/glcdfont.c" #define OLED_FONT_WIDTH 6 #define OLED_FONT_HEIGHT 6 diff --git a/keyboards/rate/pistachio_pro/lib/glcdfont.c b/keyboards/rate/pistachio_pro/lib/glcdfont.c deleted file mode 100644 index 41041f12bb..0000000000 --- a/keyboards/rate/pistachio_pro/lib/glcdfont.c +++ /dev/null @@ -1,232 +0,0 @@ -// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. -// See gfxfont.h for newer custom bitmap font info. - -#include "progmem.h" - -// Standard ASCII 5x7 font -const unsigned char font[] PROGMEM = { -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, -0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, -0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, -0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, -0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, -0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, -0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, -0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, -0x00, 0x18, 0x24, 0x18, 0x00, 0x00, -0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, -0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, -0x26, 0x29, 0x79, 0x29, 0x26, 0x00, -0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, -0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, -0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, -0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, -0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, -0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, -0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, -0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, -0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, -0x60, 0x60, 0x60, 0x60, 0x60, 0x00, -0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, -0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, -0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, -0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, -0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, -0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, -0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, -0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, -0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, -0x00, 0x07, 0x00, 0x07, 0x00, 0x00, -0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, -0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, -0x23, 0x13, 0x08, 0x64, 0x62, 0x00, -0x36, 0x49, 0x56, 0x20, 0x50, 0x00, -0x00, 0x08, 0x07, 0x03, 0x00, 0x00, -0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, -0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, -0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, -0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, -0x00, 0x80, 0x70, 0x30, 0x00, 0x00, -0x08, 0x08, 0x08, 0x08, 0x08, 0x00, -0x00, 0x00, 0x60, 0x60, 0x00, 0x00, -0x20, 0x10, 0x08, 0x04, 0x02, 0x00, -0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, -0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, -0x72, 0x49, 0x49, 0x49, 0x46, 0x00, -0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, -0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, -0x27, 0x45, 0x45, 0x45, 0x39, 0x00, -0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, -0x41, 0x21, 0x11, 0x09, 0x07, 0x00, -0x36, 0x49, 0x49, 0x49, 0x36, 0x00, -0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, -0x00, 0x00, 0x14, 0x00, 0x00, 0x00, -0x00, 0x40, 0x34, 0x00, 0x00, 0x00, -0x00, 0x08, 0x14, 0x22, 0x41, 0x00, -0x14, 0x14, 0x14, 0x14, 0x14, 0x00, -0x00, 0x41, 0x22, 0x14, 0x08, 0x00, -0x02, 0x01, 0x59, 0x09, 0x06, 0x00, -0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, -0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, -0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, -0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, -0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, -0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, -0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, -0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, -0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, -0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, -0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, -0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, -0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, -0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, -0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, -0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, -0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, -0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, -0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, -0x26, 0x49, 0x49, 0x49, 0x32, 0x00, -0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, -0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, -0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, -0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, -0x63, 0x14, 0x08, 0x14, 0x63, 0x00, -0x03, 0x04, 0x78, 0x04, 0x03, 0x00, -0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, -0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, -0x02, 0x04, 0x08, 0x10, 0x20, 0x00, -0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, -0x04, 0x02, 0x01, 0x02, 0x04, 0x00, -0x40, 0x40, 0x40, 0x40, 0x40, 0x00, -0x00, 0x03, 0x07, 0x08, 0x00, 0x00, -0x20, 0x54, 0x54, 0x78, 0x40, 0x00, -0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, -0x38, 0x44, 0x44, 0x44, 0x28, 0x00, -0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, -0x38, 0x54, 0x54, 0x54, 0x18, 0x00, -0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, -0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, -0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, -0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, -0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, -0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, -0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, -0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, -0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, -0x38, 0x44, 0x44, 0x44, 0x38, 0x00, -0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, -0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, -0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, -0x48, 0x54, 0x54, 0x54, 0x24, 0x00, -0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, -0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, -0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, -0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, -0x44, 0x28, 0x10, 0x28, 0x44, 0x00, -0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, -0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, -0x00, 0x08, 0x36, 0x41, 0x00, 0x00, -0x00, 0x00, 0x77, 0x00, 0x00, 0x00, -0x00, 0x41, 0x36, 0x08, 0x00, 0x00, -0x02, 0x01, 0x02, 0x04, 0x02, 0x00, -0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, -0xF0, 0xF8, 0xF8, 0x18, 0x00, 0xC0, -0xF0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, -0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0, -0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, -0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, -0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0, -0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, -0x00, 0x00, 0x00, 0xE0, 0xE0, 0xC0, -0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, -0x00, 0xE0, 0xE0, 0xC0, 0xC0, 0xE0, -0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80, -0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, -0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, -0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC, -0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00, -0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E, -0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, -0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, -0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, -0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, -0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xF8, 0xFC, 0xFE, -0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, -0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, -0xFF, 0x1F, 0x07, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0xFF, 0xFF, 0xFF, 0x81, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x81, -0xC3, 0xC3, 0xC3, 0x00, 0x00, 0xFF, -0xFF, 0xFF, 0x81, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x81, 0xFF, 0xFF, -0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, -0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, -0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, -0x9D, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, -0x1C, 0x9D, 0xDF, 0xDF, 0xDF, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, -0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, -0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F, -0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, -0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, -0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, -0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, -0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x0F, 0x1F, -0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F, -0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x3F, -0x3F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, -0x7F, 0x7C, 0x78, 0x78, 0x38, 0x1C, -0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x01, 0x03, 0x07, 0x07, -0x07, 0x07, 0x07, 0x07, 0x07, 0x07, -0x03, 0x01, 0x00, 0x00, 0x00, 0x00, -0x01, 0x03, 0x07, 0x07, 0x07, 0x07, -0x07, 0x07, 0x07, 0x07, 0x03, 0x01, -0x00, 0x00, 0x00, 0x07, 0x07, 0x07, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x07, 0x07, 0x07, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x07, 0x07, -0x07, 0x00, 0x00, 0x00, 0x01, 0x03, -0x07, 0x07, 0x07, 0x07, 0x07, 0x07, -0x07, 0x07, 0x03, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; diff --git a/keyboards/rgbkb/zygomorph/common/glcdfont.c b/keyboards/rgbkb/zygomorph/common/glcdfont.c deleted file mode 100644 index 697d58886e..0000000000 --- a/keyboards/rgbkb/zygomorph/common/glcdfont.c +++ /dev/null @@ -1,233 +0,0 @@ -// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. -// See gfxfont.h for newer custom bitmap font info. - -#include "progmem.h" - -// Standard ASCII 5x7 font - -static const unsigned char font[] PROGMEM = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, - 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, - 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, - 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, - 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, - 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, - 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, - 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, - 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, - 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, - 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, - 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, - 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, - 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, - 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, - 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, - 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, - 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, - 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, - 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, - 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, - 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, - 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, - 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, - 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, - 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, - 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, - 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, - 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, - 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, - 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, - 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, - 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, - 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, - 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, - 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, - 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, - 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, - 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, - 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, - 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, - 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, - 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, - 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, - 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, - 0x72, 0x49, 0x49, 0x49, 0x46, 0x00, - 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, - 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, - 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, - 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, - 0x41, 0x21, 0x11, 0x09, 0x07, 0x00, - 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, - 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, - 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, - 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, - 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, - 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, - 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, - 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, - 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, - 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, - 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, - 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, - 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, - 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, - 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, - 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, - 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, - 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, - 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, - 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, - 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, - 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, - 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, - 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, - 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, - 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, - 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, - 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, - 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, - 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, - 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, - 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, - 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, - 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, - 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, - 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, - 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, - 0x00, 0x03, 0x07, 0x08, 0x00, 0x00, - 0x20, 0x54, 0x54, 0x78, 0x40, 0x00, - 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, - 0x38, 0x44, 0x44, 0x44, 0x28, 0x00, - 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, - 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, - 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, - 0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00, - 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, - 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, - 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, - 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, - 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, - 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, - 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, - 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, - 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00, - 0x18, 0x24, 0x24, 0x18, 0xFC, 0x00, - 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, - 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, - 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, - 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, - 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, - 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, - 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, - 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, - 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, - 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, - 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, - 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, - 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, - 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, - 0x03, 0x07, 0x1F, 0x7F, 0xFF, 0xFF, - 0xFE, 0xF8, 0xF0, 0xC0, 0x20, 0xF8, - 0xFE, 0xFF, 0xFE, 0x79, 0x27, 0x1F, - 0x7F, 0xFF, 0xFF, 0xFE, 0xF8, 0xF0, - 0xC0, 0x20, 0xF8, 0xFE, 0xFF, 0xFF, - 0x7F, 0x3F, 0x3F, 0x7F, 0xFF, 0xFE, - 0xF8, 0xF0, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0x7F, 0x7F, 0x7F, - 0xBF, 0xBF, 0xC0, 0xC0, 0xC0, 0xE0, - 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0, - 0xF8, 0x78, 0x78, 0x7C, 0x3C, 0x3C, - 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, - 0xBF, 0xBF, 0xDF, 0xDF, 0xEF, 0xEF, - 0x00, 0x03, 0x07, 0x1F, 0x7F, 0xFF, - 0xFF, 0xFF, 0xFE, 0xF8, 0xE0, 0xC0, - 0xE0, 0xF8, 0xFE, 0xFF, 0xFF, 0xFF, - 0x7F, 0x1F, 0x07, 0x03, 0x00, 0x00, - 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC, - 0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00, - 0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E, - 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00, - 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B, - 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00, - 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE, - 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC1, 0xF3, - 0xCF, 0xBF, 0x7F, 0xFF, 0xFF, 0xFC, - 0xFB, 0xE7, 0x81, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xE3, 0xCF, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFC, 0xFB, 0xE7, 0x81, - 0x00, 0x00, 0x00, 0x00, 0x81, 0xE7, - 0xFF, 0xFF, 0xFF, 0xFF, 0x3C, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF8, 0xF8, 0xFC, 0x7C, 0x7E, - 0x7E, 0x3E, 0xFE, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF7, 0xF7, 0xF7, 0xFB, - 0xFB, 0x7D, 0x7D, 0x7D, 0xBE, 0xBE, - 0xBE, 0xDF, 0xDF, 0xE0, 0xE0, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0xFC, 0xFC, 0x7C, 0x7E, 0x7E, - 0x3E, 0x3E, 0x1F, 0x1F, 0x1F, 0x0F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, - 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x81, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00, - 0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F, - 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00, - 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20, - 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00, - 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F, - 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x70, 0x7C, 0x7F, 0x7F, 0x7F, - 0x7F, 0x1F, 0x06, 0x01, 0x03, 0x0F, - 0x3F, 0x7F, 0x7F, 0x7E, 0x7C, 0x7C, - 0x7E, 0x7F, 0x7F, 0x7F, 0x1F, 0x06, - 0x01, 0x07, 0x0F, 0x3F, 0x7F, 0x7F, - 0x7E, 0x7C, 0x7C, 0x7E, 0x7F, 0x7F, - 0x3F, 0x0F, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7F, 0x7F, 0x7D, 0x7D, 0x3D, 0x3E, - 0x1E, 0x1F, 0x1F, 0x1F, 0x0F, 0x0F, - 0x07, 0x07, 0x07, 0x03, 0x03, 0x00, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, - 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00, - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, - 0x00, 0x40, 0x70, 0x78, 0x7E, 0x7F, - 0x7F, 0x7F, 0x3F, 0x0F, 0x03, 0x01, - 0x03, 0x0F, 0x3F, 0x7F, 0x7F, 0x7F, - 0x7E, 0x78, 0x70, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; From 883465d9fb29cd793684ee0ac688ff3517cf8bc0 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Mon, 22 Sep 2025 00:01:23 +0100 Subject: [PATCH 61/99] Add generic handling to cycle LED/RGB Matrix flags (#24649) --- data/constants/keycodes/keycodes_0.0.8.hjson | 0 .../keycodes/keycodes_0.0.8_lighting.hjson | 37 ++++++++++++++ data/mappings/info_config.hjson | 2 + data/schemas/keyboard.jsonschema | 10 ++++ docs/reference_info_json.md | 6 +++ lib/python/qmk/info.py | 8 +++ quantum/keycodes.h | 22 +++++--- quantum/led_matrix/led_matrix.c | 51 +++++++++++++++++++ quantum/led_matrix/led_matrix.h | 4 ++ quantum/process_keycode/process_led_matrix.c | 6 +++ quantum/process_keycode/process_rgb_matrix.c | 14 +++++ quantum/rgb_matrix/rgb_matrix.c | 51 +++++++++++++++++++ quantum/rgb_matrix/rgb_matrix.h | 4 ++ 13 files changed, 208 insertions(+), 7 deletions(-) create mode 100644 data/constants/keycodes/keycodes_0.0.8.hjson create mode 100644 data/constants/keycodes/keycodes_0.0.8_lighting.hjson diff --git a/data/constants/keycodes/keycodes_0.0.8.hjson b/data/constants/keycodes/keycodes_0.0.8.hjson new file mode 100644 index 0000000000..e69de29bb2 diff --git a/data/constants/keycodes/keycodes_0.0.8_lighting.hjson b/data/constants/keycodes/keycodes_0.0.8_lighting.hjson new file mode 100644 index 0000000000..fa7227235e --- /dev/null +++ b/data/constants/keycodes/keycodes_0.0.8_lighting.hjson @@ -0,0 +1,37 @@ +{ + "keycodes": { + "0x7819": { + "group": "led_matrix", + "key": "QK_LED_MATRIX_FLAG_NEXT", + "label": "LED Matrix Flag Next", + "aliases": [ + "LM_FLGN" + ] + }, + "0x781A": { + "group": "led_matrix", + "key": "QK_LED_MATRIX_FLAG_PREVIOUS", + "label": "LED Matrix Flag Previous", + "aliases": [ + "LM_FLGP" + ] + }, + + "0x784D": { + "group": "rgb_matrix", + "key": "QK_RGB_MATRIX_FLAG_NEXT", + "label": "RGB Matrix Flag Next", + "aliases": [ + "RM_FLGN" + ] + }, + "0x784E": { + "group": "rgb_matrix", + "key": "QK_RGB_MATRIX_FLAG_PREVIOUS", + "label": "RGB Matrix Flag Previous", + "aliases": [ + "RM_FLGP" + ] + } + } +} diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson index 4c53aa4339..c4052c64f6 100644 --- a/data/mappings/info_config.hjson +++ b/data/mappings/info_config.hjson @@ -98,6 +98,7 @@ // LED Matrix "LED_MATRIX_CENTER": {"info_key": "led_matrix.center_point", "value_type": "array.int"}, + "LED_MATRIX_FLAG_STEPS": {"info_key": "led_matrix.flag_steps", "value_type": "array.int"}, "LED_MATRIX_KEYRELEASES": {"info_key": "led_matrix.react_on_keyup", "value_type": "flag"}, "LED_MATRIX_LED_FLUSH_LIMIT": {"info_key": "led_matrix.led_flush_limit", "value_type": "int"}, "LED_MATRIX_LED_PROCESS_LIMIT": {"info_key": "led_matrix.led_process_limit", "value_type": "int", "to_json": false}, @@ -147,6 +148,7 @@ // RGB Matrix "RGB_MATRIX_CENTER": {"info_key": "rgb_matrix.center_point", "value_type": "array.int"}, + "RGB_MATRIX_FLAG_STEPS": {"info_key": "rgb_matrix.flag_steps", "value_type": "array.int"}, "RGB_MATRIX_HUE_STEP": {"info_key": "rgb_matrix.hue_steps", "value_type": "int"}, "RGB_MATRIX_KEYRELEASES": {"info_key": "rgb_matrix.react_on_keyup", "value_type": "flag"}, "RGB_MATRIX_LED_FLUSH_LIMIT": {"info_key": "rgb_matrix.led_flush_limit", "value_type": "int"}, diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index 93b1c82b1c..93fc4ed8a2 100644 --- a/data/schemas/keyboard.jsonschema +++ b/data/schemas/keyboard.jsonschema @@ -571,6 +571,11 @@ "maxItems": 2, "items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} }, + "flag_steps": { + "type": "array", + "minItems": 1, + "items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} + }, "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "val_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"}, @@ -656,6 +661,11 @@ "maxItems": 2, "items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} }, + "flag_steps": { + "type": "array", + "minItems": 1, + "items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} + }, "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "hue_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"}, diff --git a/docs/reference_info_json.md b/docs/reference_info_json.md index 84377ef36c..e7cb8c31e8 100644 --- a/docs/reference_info_json.md +++ b/docs/reference_info_json.md @@ -415,6 +415,9 @@ Configures the [LED Matrix](features/led_matrix) feature. * `center_point` Array: Number * The centroid (geometric center) of the LEDs. Used for certain effects. * Default: `[112, 32]` + * `flag_steps` Array: Number + * A list of flag bitfields that can be cycled through. + * Default: `[255, 5, 0]` * `default` * `animation` String * The default effect. Must be one of `led_matrix.animations` @@ -660,6 +663,9 @@ Configures the [RGB Matrix](features/rgb_matrix) feature. * `center_point` Array: Number * The centroid (geometric center) of the LEDs. Used for certain effects. * Default: `[112, 32]` + * `flag_steps` Array: Number + * A list of flag bitfields that can be cycled through. + * Default: `[255, 5, 2, 0]` * `default` * `animation` String * The default effect. Must be one of `rgb_matrix.animations` diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py index f63228b2bc..59a64095e7 100644 --- a/lib/python/qmk/info.py +++ b/lib/python/qmk/info.py @@ -800,6 +800,14 @@ def _extract_led_config(info_data, keyboard): if info_data[feature].get('layout', None) and not info_data[feature].get('led_count', None): info_data[feature]['led_count'] = len(info_data[feature]['layout']) + if info_data[feature].get('layout', None) and not info_data[feature].get('flag_steps', None): + flags = {0xFF, 0} + # if only a single flag is used, assume only all+none flags + unique_flags = set(x.get('flags', 0) for x in info_data[feature]['layout']) + if len(unique_flags) > 1: + flags.update(unique_flags) + info_data[feature]['flag_steps'] = sorted(list(flags), reverse=True) + return info_data diff --git a/quantum/keycodes.h b/quantum/keycodes.h index 6a59aa376d..e5a64d9a71 100644 --- a/quantum/keycodes.h +++ b/quantum/keycodes.h @@ -26,11 +26,11 @@ #pragma once // clang-format off -#define QMK_KEYCODES_VERSION "0.0.7" -#define QMK_KEYCODES_VERSION_BCD 0x00000007 +#define QMK_KEYCODES_VERSION "0.0.8" +#define QMK_KEYCODES_VERSION_BCD 0x00000008 #define QMK_KEYCODES_VERSION_MAJOR 0 #define QMK_KEYCODES_VERSION_MINOR 0 -#define QMK_KEYCODES_VERSION_PATCH 7 +#define QMK_KEYCODES_VERSION_PATCH 8 enum qk_keycode_ranges { // Ranges @@ -663,6 +663,8 @@ enum qk_keycode_defines { QK_LED_MATRIX_BRIGHTNESS_DOWN = 0x7816, QK_LED_MATRIX_SPEED_UP = 0x7817, QK_LED_MATRIX_SPEED_DOWN = 0x7818, + QK_LED_MATRIX_FLAG_NEXT = 0x7819, + QK_LED_MATRIX_FLAG_PREVIOUS = 0x781A, QK_UNDERGLOW_TOGGLE = 0x7820, QK_UNDERGLOW_MODE_NEXT = 0x7821, QK_UNDERGLOW_MODE_PREVIOUS = 0x7822, @@ -697,6 +699,8 @@ enum qk_keycode_defines { QK_RGB_MATRIX_VALUE_DOWN = 0x784A, QK_RGB_MATRIX_SPEED_UP = 0x784B, QK_RGB_MATRIX_SPEED_DOWN = 0x784C, + QK_RGB_MATRIX_FLAG_NEXT = 0x784D, + QK_RGB_MATRIX_FLAG_PREVIOUS = 0x784E, QK_BOOTLOADER = 0x7C00, QK_REBOOT = 0x7C01, QK_DEBUG_TOGGLE = 0x7C02, @@ -1352,6 +1356,8 @@ enum qk_keycode_defines { LM_BRID = QK_LED_MATRIX_BRIGHTNESS_DOWN, LM_SPDU = QK_LED_MATRIX_SPEED_UP, LM_SPDD = QK_LED_MATRIX_SPEED_DOWN, + LM_FLGN = QK_LED_MATRIX_FLAG_NEXT, + LM_FLGP = QK_LED_MATRIX_FLAG_PREVIOUS, UG_TOGG = QK_UNDERGLOW_TOGGLE, UG_NEXT = QK_UNDERGLOW_MODE_NEXT, UG_PREV = QK_UNDERGLOW_MODE_PREVIOUS, @@ -1386,6 +1392,8 @@ enum qk_keycode_defines { RM_VALD = QK_RGB_MATRIX_VALUE_DOWN, RM_SPDU = QK_RGB_MATRIX_SPEED_UP, RM_SPDD = QK_RGB_MATRIX_SPEED_DOWN, + RM_FLGN = QK_RGB_MATRIX_FLAG_NEXT, + RM_FLGP = QK_RGB_MATRIX_FLAG_PREVIOUS, QK_BOOT = QK_BOOTLOADER, QK_RBT = QK_REBOOT, DB_TOGG = QK_DEBUG_TOGGLE, @@ -1511,10 +1519,10 @@ enum qk_keycode_defines { #define IS_MACRO_KEYCODE(code) ((code) >= QK_MACRO_0 && (code) <= QK_MACRO_31) #define IS_CONNECTION_KEYCODE(code) ((code) >= QK_OUTPUT_AUTO && (code) <= QK_BLUETOOTH_PROFILE5) #define IS_BACKLIGHT_KEYCODE(code) ((code) >= QK_BACKLIGHT_ON && (code) <= QK_BACKLIGHT_TOGGLE_BREATHING) -#define IS_LED_MATRIX_KEYCODE(code) ((code) >= QK_LED_MATRIX_ON && (code) <= QK_LED_MATRIX_SPEED_DOWN) +#define IS_LED_MATRIX_KEYCODE(code) ((code) >= QK_LED_MATRIX_ON && (code) <= QK_LED_MATRIX_FLAG_PREVIOUS) #define IS_UNDERGLOW_KEYCODE(code) ((code) >= QK_UNDERGLOW_TOGGLE && (code) <= QK_UNDERGLOW_SPEED_DOWN) #define IS_RGB_KEYCODE(code) ((code) >= RGB_MODE_PLAIN && (code) <= RGB_MODE_TWINKLE) -#define IS_RGB_MATRIX_KEYCODE(code) ((code) >= QK_RGB_MATRIX_ON && (code) <= QK_RGB_MATRIX_SPEED_DOWN) +#define IS_RGB_MATRIX_KEYCODE(code) ((code) >= QK_RGB_MATRIX_ON && (code) <= QK_RGB_MATRIX_FLAG_PREVIOUS) #define IS_QUANTUM_KEYCODE(code) ((code) >= QK_BOOTLOADER && (code) <= QK_LAYER_LOCK) #define IS_KB_KEYCODE(code) ((code) >= QK_KB_0 && (code) <= QK_KB_31) #define IS_USER_KEYCODE(code) ((code) >= QK_USER_0 && (code) <= QK_USER_31) @@ -1537,10 +1545,10 @@ enum qk_keycode_defines { #define MACRO_KEYCODE_RANGE QK_MACRO_0 ... QK_MACRO_31 #define CONNECTION_KEYCODE_RANGE QK_OUTPUT_AUTO ... QK_BLUETOOTH_PROFILE5 #define BACKLIGHT_KEYCODE_RANGE QK_BACKLIGHT_ON ... QK_BACKLIGHT_TOGGLE_BREATHING -#define LED_MATRIX_KEYCODE_RANGE QK_LED_MATRIX_ON ... QK_LED_MATRIX_SPEED_DOWN +#define LED_MATRIX_KEYCODE_RANGE QK_LED_MATRIX_ON ... QK_LED_MATRIX_FLAG_PREVIOUS #define UNDERGLOW_KEYCODE_RANGE QK_UNDERGLOW_TOGGLE ... QK_UNDERGLOW_SPEED_DOWN #define RGB_KEYCODE_RANGE RGB_MODE_PLAIN ... RGB_MODE_TWINKLE -#define RGB_MATRIX_KEYCODE_RANGE QK_RGB_MATRIX_ON ... QK_RGB_MATRIX_SPEED_DOWN +#define RGB_MATRIX_KEYCODE_RANGE QK_RGB_MATRIX_ON ... QK_RGB_MATRIX_FLAG_PREVIOUS #define QUANTUM_KEYCODE_RANGE QK_BOOTLOADER ... QK_LAYER_LOCK #define KB_KEYCODE_RANGE QK_KB_0 ... QK_KB_31 #define USER_KEYCODE_RANGE QK_USER_0 ... QK_USER_31 diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c index 9c8004cc17..b2665597df 100644 --- a/quantum/led_matrix/led_matrix.c +++ b/quantum/led_matrix/led_matrix.c @@ -70,6 +70,13 @@ uint8_t g_led_frame_buffer[MATRIX_ROWS][MATRIX_COLS] = {{0}}; last_hit_t g_last_hit_tracker; #endif // LED_MATRIX_KEYREACTIVE_ENABLED +#ifndef LED_MATRIX_FLAG_STEPS +# define LED_MATRIX_FLAG_STEPS \ + { LED_FLAG_ALL, LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER, LED_FLAG_NONE } +#endif +static const uint8_t led_matrix_flag_steps[] = LED_MATRIX_FLAG_STEPS; +#define LED_MATRIX_FLAG_STEPS_COUNT ARRAY_SIZE(led_matrix_flag_steps) + // internals static bool suspend_state = false; static uint8_t led_last_enable = UINT8_MAX; @@ -661,6 +668,50 @@ void led_matrix_set_flags_noeeprom(led_flags_t flags) { led_matrix_set_flags_eeprom_helper(flags, false); } +void led_matrix_flags_step_helper(bool write_to_eeprom) { + led_flags_t flags = led_matrix_get_flags(); + + uint8_t next = 0; + for (uint8_t i = 0; i < LED_MATRIX_FLAG_STEPS_COUNT; i++) { + if (led_matrix_flag_steps[i] == flags) { + next = i == LED_MATRIX_FLAG_STEPS_COUNT - 1 ? 0 : i + 1; + break; + } + } + + led_matrix_set_flags_eeprom_helper(led_matrix_flag_steps[next], write_to_eeprom); +} + +void led_matrix_flags_step_noeeprom(void) { + led_matrix_flags_step_helper(false); +} + +void led_matrix_flags_step(void) { + led_matrix_flags_step_helper(true); +} + +void led_matrix_flags_step_reverse_helper(bool write_to_eeprom) { + led_flags_t flags = led_matrix_get_flags(); + + uint8_t next = 0; + for (uint8_t i = 0; i < LED_MATRIX_FLAG_STEPS_COUNT; i++) { + if (led_matrix_flag_steps[i] == flags) { + next = i == 0 ? LED_MATRIX_FLAG_STEPS_COUNT - 1 : i - 1; + break; + } + } + + led_matrix_set_flags_eeprom_helper(led_matrix_flag_steps[next], write_to_eeprom); +} + +void led_matrix_flags_step_reverse_noeeprom(void) { + led_matrix_flags_step_reverse_helper(false); +} + +void led_matrix_flags_step_reverse(void) { + led_matrix_flags_step_reverse_helper(true); +} + // LED Matrix naming #undef LED_MATRIX_EFFECT #ifdef LED_MATRIX_MODE_NAME_ENABLE diff --git a/quantum/led_matrix/led_matrix.h b/quantum/led_matrix/led_matrix.h index 9a49515ab2..f484c700f4 100644 --- a/quantum/led_matrix/led_matrix.h +++ b/quantum/led_matrix/led_matrix.h @@ -183,6 +183,10 @@ void led_matrix_decrease_speed_noeeprom(void); led_flags_t led_matrix_get_flags(void); void led_matrix_set_flags(led_flags_t flags); void led_matrix_set_flags_noeeprom(led_flags_t flags); +void led_matrix_flags_step_noeeprom(void); +void led_matrix_flags_step(void); +void led_matrix_flags_step_reverse_noeeprom(void); +void led_matrix_flags_step_reverse(void); #ifdef LED_MATRIX_MODE_NAME_ENABLE const char *led_matrix_get_mode_name(uint8_t mode); diff --git a/quantum/process_keycode/process_led_matrix.c b/quantum/process_keycode/process_led_matrix.c index 7f95bf1011..3342b33b92 100644 --- a/quantum/process_keycode/process_led_matrix.c +++ b/quantum/process_keycode/process_led_matrix.c @@ -40,6 +40,12 @@ bool process_led_matrix(uint16_t keycode, keyrecord_t *record) { case QK_LED_MATRIX_SPEED_DOWN: led_matrix_decrease_speed(); return false; + case QK_LED_MATRIX_FLAG_NEXT: + led_matrix_flags_step(); + return false; + case QK_LED_MATRIX_FLAG_PREVIOUS: + led_matrix_flags_step_reverse(); + return false; } } diff --git a/quantum/process_keycode/process_rgb_matrix.c b/quantum/process_keycode/process_rgb_matrix.c index fd2aa1a0c7..c18212294d 100644 --- a/quantum/process_keycode/process_rgb_matrix.c +++ b/quantum/process_keycode/process_rgb_matrix.c @@ -94,6 +94,20 @@ bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record) { rgb_matrix_decrease_speed(); } return false; + case QK_RGB_MATRIX_FLAG_NEXT: + if (shifted) { + rgb_matrix_flags_step_reverse(); + } else { + rgb_matrix_flags_step(); + } + return false; + case QK_RGB_MATRIX_FLAG_PREVIOUS: + if (shifted) { + rgb_matrix_flags_step(); + } else { + rgb_matrix_flags_step_reverse(); + } + return false; } } diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c index ab0aa17512..19edfb52b0 100644 --- a/quantum/rgb_matrix/rgb_matrix.c +++ b/quantum/rgb_matrix/rgb_matrix.c @@ -72,6 +72,13 @@ uint8_t g_rgb_frame_buffer[MATRIX_ROWS][MATRIX_COLS] = {{0}}; last_hit_t g_last_hit_tracker; #endif // RGB_MATRIX_KEYREACTIVE_ENABLED +#ifndef RGB_MATRIX_FLAG_STEPS +# define RGB_MATRIX_FLAG_STEPS \ + { LED_FLAG_ALL, LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER, LED_FLAG_UNDERGLOW, LED_FLAG_NONE } +#endif +static const uint8_t rgb_matrix_flag_steps[] = RGB_MATRIX_FLAG_STEPS; +#define RGB_MATRIX_FLAG_STEPS_COUNT ARRAY_SIZE(rgb_matrix_flag_steps) + // internals static bool suspend_state = false; static uint8_t rgb_last_enable = UINT8_MAX; @@ -747,6 +754,50 @@ void rgb_matrix_set_flags_noeeprom(led_flags_t flags) { rgb_matrix_set_flags_eeprom_helper(flags, false); } +void rgb_matrix_flags_step_helper(bool write_to_eeprom) { + led_flags_t flags = rgb_matrix_get_flags(); + + uint8_t next = 0; + for (uint8_t i = 0; i < RGB_MATRIX_FLAG_STEPS_COUNT; i++) { + if (rgb_matrix_flag_steps[i] == flags) { + next = i == RGB_MATRIX_FLAG_STEPS_COUNT - 1 ? 0 : i + 1; + break; + } + } + + rgb_matrix_set_flags_eeprom_helper(rgb_matrix_flag_steps[next], write_to_eeprom); +} + +void rgb_matrix_flags_step_noeeprom(void) { + rgb_matrix_flags_step_helper(false); +} + +void rgb_matrix_flags_step(void) { + rgb_matrix_flags_step_helper(true); +} + +void rgb_matrix_flags_step_reverse_helper(bool write_to_eeprom) { + led_flags_t flags = rgb_matrix_get_flags(); + + uint8_t next = 0; + for (uint8_t i = 0; i < RGB_MATRIX_FLAG_STEPS_COUNT; i++) { + if (rgb_matrix_flag_steps[i] == flags) { + next = i == 0 ? RGB_MATRIX_FLAG_STEPS_COUNT - 1 : i - 1; + break; + } + } + + rgb_matrix_set_flags_eeprom_helper(rgb_matrix_flag_steps[next], write_to_eeprom); +} + +void rgb_matrix_flags_step_reverse_noeeprom(void) { + rgb_matrix_flags_step_reverse_helper(false); +} + +void rgb_matrix_flags_step_reverse(void) { + rgb_matrix_flags_step_reverse_helper(true); +} + //---------------------------------------------------------- // RGB Matrix naming #undef RGB_MATRIX_EFFECT diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h index a91dded4a8..f800679b46 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h @@ -218,6 +218,10 @@ void rgb_matrix_decrease_speed_noeeprom(void); led_flags_t rgb_matrix_get_flags(void); void rgb_matrix_set_flags(led_flags_t flags); void rgb_matrix_set_flags_noeeprom(led_flags_t flags); +void rgb_matrix_flags_step_noeeprom(void); +void rgb_matrix_flags_step(void); +void rgb_matrix_flags_step_reverse_noeeprom(void); +void rgb_matrix_flags_step_reverse(void); void rgb_matrix_update_pwm_buffers(void); #ifdef RGB_MATRIX_MODE_NAME_ENABLE From 0a4c1caf204bd9750ef8af8296b2e225682b6029 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Mon, 29 Sep 2025 20:26:47 +0100 Subject: [PATCH 62/99] Add DD {LED,RGB}_MATRIX_DEFAULT_FLAGS support (#25671) --- data/mappings/info_config.hjson | 2 ++ data/mappings/info_defaults.hjson | 6 ++++-- data/schemas/keyboard.jsonschema | 6 ++++-- docs/reference_info_json.md | 6 ++++++ keyboards/xelus/valor/rev2/keyboard.json | 3 +++ keyboards/xelus/valor/rev2/rev2.c | 5 ----- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson index c4052c64f6..1c6e86d876 100644 --- a/data/mappings/info_config.hjson +++ b/data/mappings/info_config.hjson @@ -112,6 +112,7 @@ "LED_MATRIX_DEFAULT_ON": {"info_key": "led_matrix.default.on", "value_type": "bool"}, "LED_MATRIX_DEFAULT_VAL": {"info_key": "led_matrix.default.val", "value_type": "int"}, "LED_MATRIX_DEFAULT_SPD": {"info_key": "led_matrix.default.speed", "value_type": "int"}, + "LED_MATRIX_DEFAULT_FLAGS": {"info_key": "led_matrix.default.flags", "value_type": "int"}, // Locking Switch "LOCKING_SUPPORT_ENABLE": {"info_key": "qmk.locking.enabled", "value_type": "flag"}, @@ -166,6 +167,7 @@ "RGB_MATRIX_DEFAULT_SAT": {"info_key": "rgb_matrix.default.sat", "value_type": "int"}, "RGB_MATRIX_DEFAULT_VAL": {"info_key": "rgb_matrix.default.val", "value_type": "int"}, "RGB_MATRIX_DEFAULT_SPD": {"info_key": "rgb_matrix.default.speed", "value_type": "int"}, + "RGB_MATRIX_DEFAULT_FLAGS": {"info_key": "rgb_matrix.default.flags", "value_type": "int"}, // RGBLight "RGBLED_SPLIT": {"info_key": "rgblight.split_count", "value_type": "array.int"}, diff --git a/data/mappings/info_defaults.hjson b/data/mappings/info_defaults.hjson index b33cb4fa1f..d1f1579c55 100644 --- a/data/mappings/info_defaults.hjson +++ b/data/mappings/info_defaults.hjson @@ -23,7 +23,8 @@ "animation": "solid", "on": true, "val": 255, - "speed": 128 + "speed": 128, + "flags": 255 }, "led_flush_limit": 16, "max_brightness": 255, @@ -53,7 +54,8 @@ "hue": 0, "sat": 255, "val": 255, - "speed": 128 + "speed": 128, + "flags": 255 }, "hue_steps": 8, "led_flush_limit": 16, diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index 93fc4ed8a2..57aeb3de22 100644 --- a/data/schemas/keyboard.jsonschema +++ b/data/schemas/keyboard.jsonschema @@ -543,7 +543,8 @@ "on": {"type": "boolean"}, "animation": {"type": "string"}, "val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, - "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} + "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "flags": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} } }, "driver": { @@ -631,7 +632,8 @@ "hue": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, "sat": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, "val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, - "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} + "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "flags": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} } }, "driver": { diff --git a/docs/reference_info_json.md b/docs/reference_info_json.md index e7cb8c31e8..91ab7f4577 100644 --- a/docs/reference_info_json.md +++ b/docs/reference_info_json.md @@ -431,6 +431,9 @@ Configures the [LED Matrix](features/led_matrix) feature. * `speed` Number * The default animation speed. * Default: `128` + * `flags` Number + * The default LED flags. + * Default: `255` * `driver` String Required * The driver to use. Must be one of `custom`, `is31fl3218`, `is31fl3731`, `is31fl3733`, `is31fl3736`, `is31fl3737`, `is31fl3741`, `is31fl3742a`, `is31fl3743a`, `is31fl3745`, `is31fl3746a`, `snled27351`. * `layout` Array: Object Required @@ -685,6 +688,9 @@ Configures the [RGB Matrix](features/rgb_matrix) feature. * `speed` Number * The default animation speed. * Default: `128` + * `flags` Number + * The default LED flags. + * Default: `255` * `driver` String Required * The driver to use. Must be one of `aw20216s`, `custom`, `is31fl3218`, `is31fl3236`, `is31fl3729`, `is31fl3731`, `is31fl3733`, `is31fl3736`, `is31fl3737`, `is31fl3741`, `is31fl3742a`, `is31fl3743a`, `is31fl3745`, `is31fl3746a`, `snled27351`, `ws2812`. * `hue_steps` Number diff --git a/keyboards/xelus/valor/rev2/keyboard.json b/keyboards/xelus/valor/rev2/keyboard.json index 451eeb99ff..6356f69646 100644 --- a/keyboards/xelus/valor/rev2/keyboard.json +++ b/keyboards/xelus/valor/rev2/keyboard.json @@ -67,6 +67,9 @@ "solid_splash": true, "solid_multisplash": true }, + "default": { + "flags": 7 + }, "driver": "ws2812", "max_brightness": 200, "sleep": true diff --git a/keyboards/xelus/valor/rev2/rev2.c b/keyboards/xelus/valor/rev2/rev2.c index 34a32cfc61..99db45e08d 100644 --- a/keyboards/xelus/valor/rev2/rev2.c +++ b/keyboards/xelus/valor/rev2/rev2.c @@ -64,9 +64,4 @@ led_config_t g_led_config = { { 8, 8, 8, 8 } }; - -void keyboard_pre_init_kb(void) { - rgb_matrix_set_flags(LED_FLAG_MODIFIER|LED_FLAG_UNDERGLOW|LED_FLAG_KEYLIGHT); - keyboard_pre_init_user(); -} #endif From 6f93a86e6e12ddc999da3cf940f5c327d5f9b91a Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Mon, 29 Sep 2025 20:27:07 +0100 Subject: [PATCH 63/99] Add LED/RGB Matrix flags API docs (#25673) --- docs/features/led_matrix.md | 59 +++++++++++++++++++++++++++++++++++++ docs/features/rgb_matrix.md | 59 +++++++++++++++++++++++++++++++++++++ docs/keycodes.md | 4 +++ 3 files changed, 122 insertions(+) diff --git a/docs/features/led_matrix.md b/docs/features/led_matrix.md index 28d24bc400..f14fb47d62 100644 --- a/docs/features/led_matrix.md +++ b/docs/features/led_matrix.md @@ -88,6 +88,8 @@ As mentioned earlier, the center of the keyboard by default is expected to be `{ |`QK_LED_MATRIX_BRIGHTNESS_DOWN`|`LM_BRID`|Decrease the brightness level | |`QK_LED_MATRIX_SPEED_UP` |`LM_SPDU`|Increase the animation speed | |`QK_LED_MATRIX_SPEED_DOWN` |`LM_SPDD`|Decrease the animation speed | +|`QK_LED_MATRIX_FLAG_NEXT` |`LM_FLGN`|Cycle through flags | +|`QK_LED_MATRIX_FLAG_PREVIOUS` |`LM_FLGP`|Cycle through flags in reverse | ## LED Matrix Effects {#led-matrix-effects} @@ -253,6 +255,7 @@ const char* effect_name = led_matrix_get_mode_name(led_matrix_get_mode()); #define LED_MATRIX_DEFAULT_FLAGS LED_FLAG_ALL // Sets the default LED flags, if none has been set #define LED_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right. // If reactive effects are enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR +#define LED_MATRIX_FLAG_STEPS { LED_FLAG_ALL, LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER, LED_FLAG_NONE } // Sets the flags which can be cycled through. ``` ## EEPROM storage {#eeprom-storage} @@ -505,6 +508,62 @@ The current effect speed, from 0 to 255. --- +### `void led_matrix_set_flags(led_flags_t flags)` {#api-led-matrix-set-flags} + +Set the global effect flags. + +#### Arguments {#api-led-matrix-set-flags-arguments} + + - `led_flags_t flags` + The [flags](#flags) value to set. + +--- + +### `void led_matrix_set_flags_noeeprom(led_flags_t flags)` {#api-led-matrix-set-flags-noeeprom} + +Set the global effect flags. New state is not written to EEPROM. + +#### Arguments {#api-led-matrix-set-flags-noeeprom-arguments} + + - `led_flags_t flags` + The [flags](#flags) value to set. + +--- + +### `void led_matrix_flags_step(void)` {#api-led-matrix-flags-step} + +Move to the next flag combination. + +--- + +### `void led_matrix_flags_step_noeeprom(void)` {#api-led-matrix-flags-step-noeeprom} + +Move to the next flag combination. New state is not written to EEPROM. + +--- + +### `void led_matrix_flags_step_reverse(void)` {#api-led-matrix-flags-step-reverse} + +Move to the previous flag combination. + +--- + +### `void led_matrix_flags_step_reverse_noeeprom(void)` {#api-led-matrix-flags-step-reverse-noeeprom} + +Move to the previous flag combination. New state is not written to EEPROM. + +--- + +### `uint8_t led_matrix_get_flags(void)` {#api-led-matrix-get-flags} + +Get the current global effect flags. + +#### Return Value {#api-led-matrix-get-flags-return} + +The current effect [flags](#flags). + +--- + ### `void led_matrix_reload_from_eeprom(void)` {#api-led-matrix-reload-from-eeprom} Reload the effect configuration (enabled, mode and brightness) from EEPROM. diff --git a/docs/features/rgb_matrix.md b/docs/features/rgb_matrix.md index 95ee4c4896..36680f24a2 100644 --- a/docs/features/rgb_matrix.md +++ b/docs/features/rgb_matrix.md @@ -96,6 +96,8 @@ As mentioned earlier, the center of the keyboard by default is expected to be `{ |`QK_RGB_MATRIX_VALUE_DOWN` |`RM_VALD`|Decrease the brightness level | |`QK_RGB_MATRIX_SPEED_UP` |`RM_SPDU`|Increase the animation speed | |`QK_RGB_MATRIX_SPEED_DOWN` |`RM_SPDD`|Decrease the animation speed | +|`QK_RGB_MATRIX_FLAG_NEXT` |`RM_FLGN`|Cycle through flags | +|`QK_RGB_MATRIX_FLAG_PREVIOUS` |`RM_FLGP`|Cycle through flags in reverse | ## RGB Matrix Effects {#rgb-matrix-effects} @@ -409,6 +411,7 @@ const char* effect_name = rgb_matrix_get_mode_name(rgb_matrix_get_mode()); #define RGB_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right. // If reactive effects are enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR #define RGB_TRIGGER_ON_KEYDOWN // Triggers RGB keypress events on key down. This makes RGB control feel more responsive. This may cause RGB to not function properly on some boards +#define RGB_MATRIX_FLAG_STEPS { LED_FLAG_ALL, LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER, LED_FLAG_UNDERGLOW, LED_FLAG_NONE } // Sets the flags which can be cycled through. ``` ## EEPROM storage {#eeprom-storage} @@ -852,6 +855,62 @@ The current effect speed, from 0 to 255. --- +### `void rgb_matrix_set_flags(led_flags_t flags)` {#api-rgb-matrix-set-flags} + +Set the global effect flags. + +#### Arguments {#api-rgb-matrix-set-flags-arguments} + + - `led_flags_t flags` + The [flags](#flags) value to set. + +--- + +### `void rgb_matrix_set_flags_noeeprom(led_flags_t flags)` {#api-rgb-matrix-set-flags-noeeprom} + +Set the global effect flags. New state is not written to EEPROM. + +#### Arguments {#api-rgb-matrix-set-flags-noeeprom-arguments} + + - `led_flags_t flags` + The [flags](#flags) value to set. + +--- + +### `void rgb_matrix_flags_step(void)` {#api-rgb-matrix-flags-step} + +Move to the next flag combination. + +--- + +### `void rgb_matrix_flags_step_noeeprom(void)` {#api-rgb-matrix-flags-step-noeeprom} + +Move to the next flag combination. New state is not written to EEPROM. + +--- + +### `void rgb_matrix_flags_step_reverse(void)` {#api-rgb-matrix-flags-step-reverse} + +Move to the previous flag combination. + +--- + +### `void rgb_matrix_flags_step_reverse_noeeprom(void)` {#api-rgb-matrix-flags-step-reverse-noeeprom} + +Move to the previous flag combination. New state is not written to EEPROM. + +--- + +### `uint8_t rgb_matrix_get_flags(void)` {#api-rgb-matrix-get-flags} + +Get the current global effect flags. + +#### Return Value {#api-rgb-matrix-get-flags-return} + +The current effect [flags](#flags). + +--- + ### `void rgb_matrix_sethsv(uint8_t h, uint8_t s, uint8_t v)` {#api-rgb-matrix-sethsv} Set the global effect hue, saturation, and value (brightness). diff --git a/docs/keycodes.md b/docs/keycodes.md index e569e87431..9a4ca7ea0c 100644 --- a/docs/keycodes.md +++ b/docs/keycodes.md @@ -433,6 +433,8 @@ See also: [LED Matrix](features/led_matrix) |`QK_LED_MATRIX_BRIGHTNESS_DOWN`|`LM_BRID`|Decrease the brightness level | |`QK_LED_MATRIX_SPEED_UP` |`LM_SPDU`|Increase the animation speed | |`QK_LED_MATRIX_SPEED_DOWN` |`LM_SPDD`|Decrease the animation speed | +|`QK_LED_MATRIX_FLAG_NEXT` |`LM_FLGN`|Cycle through flags | +|`QK_LED_MATRIX_FLAG_PREVIOUS` |`LM_FLGP`|Cycle through flags in reverse | ## Magic Keycodes {#magic-keycodes} @@ -783,6 +785,8 @@ See also: [RGB Matrix](features/rgb_matrix) |`QK_RGB_MATRIX_VALUE_DOWN` |`RM_VALD`|Decrease the brightness level | |`QK_RGB_MATRIX_SPEED_UP` |`RM_SPDU`|Increase the animation speed | |`QK_RGB_MATRIX_SPEED_DOWN` |`RM_SPDD`|Decrease the animation speed | +|`QK_RGB_MATRIX_FLAG_NEXT` |`RM_FLGN`|Cycle through flags | +|`QK_RGB_MATRIX_FLAG_PREVIOUS` |`RM_FLGP`|Cycle through flags in reverse | ## US ANSI Shifted Symbols {#us-ansi-shifted-symbols} From bbd6e8ab340bb4b3f25671fea59fd608397e8a34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Mart=C3=ADnez?= <58857054+elpekenin@users.noreply.github.com> Date: Tue, 30 Sep 2025 16:52:43 +0200 Subject: [PATCH 64/99] [Feature] Implement `mod_t` packed struct (#25168) --- quantum/action_util.c | 47 ++++++++++++++++++++++++++++++++++++------- quantum/action_util.h | 21 +++++++++++++++++++ 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/quantum/action_util.c b/quantum/action_util.c index e821e113ef..0996ff908e 100644 --- a/quantum/action_util.c +++ b/quantum/action_util.c @@ -46,9 +46,20 @@ extern inline void clear_keys(void); #ifndef NO_ACTION_ONESHOT static uint8_t oneshot_mods = 0; static uint8_t oneshot_locked_mods = 0; -uint8_t get_oneshot_locked_mods(void) { +/** + * @brief Retrieve current state of locked oneshot modifiers. + * + * @return Current state of the locked oneshot modifier keys as a bitmask. + */ +uint8_t get_oneshot_locked_mods(void) { return oneshot_locked_mods; } +/** + * Same as \ref get_oneshot_locked_mods but returns \ref mod_t for convenience. + */ +mod_t get_oneshot_locked_mod_state(void) { + return (mod_t)get_oneshot_locked_mods(); +} void add_oneshot_locked_mods(uint8_t mods) { if ((oneshot_locked_mods & mods) != mods) { oneshot_locked_mods |= mods; @@ -326,13 +337,20 @@ void send_keyboard_report(void) { send_6kro_report(); } -/** \brief Get mods +/** + * @brief Retrieve current state of modifiers. * - * FIXME: needs doc + * @return Current state of the modifier keys as a bitmask. */ uint8_t get_mods(void) { return real_mods; } +/** + * Same as \ref get_mods but returns \ref mod_t for convenience. + */ +mod_t get_mod_state(void) { + return (mod_t)get_mods(); +} /** \brief add mods * * FIXME: needs doc @@ -362,13 +380,20 @@ void clear_mods(void) { real_mods = 0; } -/** \brief get weak mods +/** + * @brief Retrieve current state of weak modifiers. * - * FIXME: needs doc + * @return Current state of the weak modifier keys as a bitmask. */ uint8_t get_weak_mods(void) { return weak_mods; } +/** + * Same as \ref get_weak_mods but returns \ref mod_t for convenience. + */ +mod_t get_weak_mod_state(void) { + return (mod_t)get_weak_mods(); +} /** \brief add weak mods * * FIXME: needs doc @@ -423,14 +448,22 @@ void clear_suppressed_override_mods(void) { #endif #ifndef NO_ACTION_ONESHOT -/** \brief get oneshot mods +/** + * @brief Retrieve current state of oneshot modifiers. * - * FIXME: needs doc + * @return Current state of the oneshot modifier keys as a bitmask. */ uint8_t get_oneshot_mods(void) { return oneshot_mods; } +/** + * Same as \ref get_oneshot_mods but returns \ref mod_t for convenience. + */ +mod_t get_oneshot_mod_state(void) { + return (mod_t)get_oneshot_mods(); +} + void add_oneshot_mods(uint8_t mods) { if ((oneshot_mods & mods) != mods) { # if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0)) diff --git a/quantum/action_util.h b/quantum/action_util.h index d2ecb145be..8b1974cd32 100644 --- a/quantum/action_util.h +++ b/quantum/action_util.h @@ -18,6 +18,8 @@ along with this program. If not, see . #pragma once #include + +#include "compiler_support.h" #include "report.h" #include "modifiers.h" @@ -25,6 +27,21 @@ along with this program. If not, see . extern "C" { #endif +typedef union { + uint8_t raw; + struct { + bool left_ctrl : 1; + bool left_shift : 1; + bool left_alt : 1; + bool left_gui : 1; + bool right_ctrl : 1; + bool right_shift : 1; + bool right_alt : 1; + bool right_gui : 1; + }; +} PACKED mod_t; +STATIC_ASSERT(sizeof(mod_t) == sizeof(uint8_t), "Invalid size for 'mod_t'"); + extern report_keyboard_t *keyboard_report; #ifdef NKRO_ENABLE extern report_nkro_t *nkro_report; @@ -47,6 +64,7 @@ inline void clear_keys(void) { /* modifier */ uint8_t get_mods(void); +mod_t get_mod_state(void); void add_mods(uint8_t mods); void del_mods(uint8_t mods); void set_mods(uint8_t mods); @@ -54,6 +72,7 @@ void clear_mods(void); /* weak modifier */ uint8_t get_weak_mods(void); +mod_t get_weak_mod_state(void); void add_weak_mods(uint8_t mods); void del_weak_mods(uint8_t mods); void set_weak_mods(uint8_t mods); @@ -61,6 +80,7 @@ void clear_weak_mods(void); /* oneshot modifier */ uint8_t get_oneshot_mods(void); +mod_t get_oneshot_mod_state(void); void add_oneshot_mods(uint8_t mods); void del_oneshot_mods(uint8_t mods); void set_oneshot_mods(uint8_t mods); @@ -68,6 +88,7 @@ void clear_oneshot_mods(void); bool has_oneshot_mods_timed_out(void); uint8_t get_oneshot_locked_mods(void); +mod_t get_oneshot_locked_mod_state(void); void add_oneshot_locked_mods(uint8_t mods); void set_oneshot_locked_mods(uint8_t mods); void clear_oneshot_locked_mods(void); From 36fd2437b07e5326722fc1f20b44cbb7bbdba6ea Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Tue, 30 Sep 2025 10:09:31 -0600 Subject: [PATCH 65/99] Migrate `g_led_config` to DD (0-9, A) (#25558) --- keyboards/1upkeyboards/super16/keyboard.json | 20 ++- keyboards/1upkeyboards/super16/super16.c | 39 ----- .../1upkeyboards/super16v2/keyboard.json | 22 +++ keyboards/1upkeyboards/super16v2/super16v2.c | 41 ----- .../4pplet/perk60_iso/rev_a/keyboard.json | 66 +++++++- keyboards/4pplet/perk60_iso/rev_a/rev_a.c | 155 +++++++----------- keyboards/acheron/apollo/87h/delta/delta.c | 38 ----- .../acheron/apollo/87h/delta/keyboard.json | 89 ++++++++++ keyboards/acheron/apollo/87h/gamma/gamma.c | 23 --- .../acheron/apollo/87h/gamma/keyboard.json | 89 ++++++++++ keyboards/acheron/apollo/87htsc/87htsc.c | 24 --- keyboards/acheron/apollo/87htsc/keyboard.json | 88 ++++++++++ keyboards/acheron/apollo/88htsc/88htsc.c | 42 ----- keyboards/acheron/apollo/88htsc/keyboard.json | 89 ++++++++++ keyboards/adpenrose/akemipad/akemipad.c | 27 --- keyboards/adpenrose/akemipad/keyboard.json | 30 +++- .../aeboards/satellite/rev1/keyboard.json | 74 +++++++++ keyboards/aeboards/satellite/rev1/rev1.c | 40 ----- keyboards/aleblazer/zodiark/keyboard.json | 70 ++++++++ keyboards/aleblazer/zodiark/zodiark.c | 54 ------ keyboards/axolstudio/yeti/hotswap/hotswap.c | 22 --- .../axolstudio/yeti/hotswap/keyboard.json | 66 ++++++++ 22 files changed, 762 insertions(+), 446 deletions(-) delete mode 100644 keyboards/1upkeyboards/super16/super16.c delete mode 100644 keyboards/1upkeyboards/super16v2/super16v2.c delete mode 100644 keyboards/acheron/apollo/88htsc/88htsc.c delete mode 100644 keyboards/adpenrose/akemipad/akemipad.c delete mode 100644 keyboards/aleblazer/zodiark/zodiark.c diff --git a/keyboards/1upkeyboards/super16/keyboard.json b/keyboards/1upkeyboards/super16/keyboard.json index 3b5859474a..bd8c8fe00d 100644 --- a/keyboards/1upkeyboards/super16/keyboard.json +++ b/keyboards/1upkeyboards/super16/keyboard.json @@ -74,7 +74,25 @@ "solid_splash": true, "solid_multisplash": true }, - "driver": "ws2812" + "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 3], "x": 224, "y": 21, "flags": 4}, + {"matrix": [1, 2], "x": 150, "y": 21, "flags": 4}, + {"matrix": [1, 1], "x": 75, "y": 21, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 21, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 43, "flags": 4}, + {"matrix": [2, 1], "x": 75, "y": 43, "flags": 4}, + {"matrix": [2, 2], "x": 150, "y": 43, "flags": 4}, + {"matrix": [2, 3], "x": 224, "y": 43, "flags": 4}, + {"matrix": [3, 3], "x": 224, "y": 64, "flags": 4}, + {"matrix": [3, 2], "x": 150, "y": 64, "flags": 4}, + {"matrix": [3, 1], "x": 75, "y": 64, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 64, "flags": 4} + ] }, "features": { "bootmagic": true, diff --git a/keyboards/1upkeyboards/super16/super16.c b/keyboards/1upkeyboards/super16/super16.c deleted file mode 100644 index a9946c7525..0000000000 --- a/keyboards/1upkeyboards/super16/super16.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2019 MechMerlin - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, 3 }, - { 7, 6, 5, 4 }, - { 8, 9, 10, 11 }, - { 15, 14, 13, 12 } -}, { - // LED Index to Physical Position - { 0, 0 }, { 75, 0 }, { 150, 0 }, { 224, 0 }, - { 224, 21 }, { 150, 21 }, { 75, 21 }, { 0, 21 }, - { 0, 43 }, { 75, 43 }, { 150, 43 }, { 224, 43 }, - { 224, 64 }, { 150, 64 }, { 75, 64 }, { 0, 64 }, - -}, { - // LED Index to Flag - 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, 4 -} }; -#endif diff --git a/keyboards/1upkeyboards/super16v2/keyboard.json b/keyboards/1upkeyboards/super16v2/keyboard.json index 5c5123453c..1fb14d86da 100644 --- a/keyboards/1upkeyboards/super16v2/keyboard.json +++ b/keyboards/1upkeyboards/super16v2/keyboard.json @@ -46,6 +46,28 @@ "splash": true }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 3], "x": 28, "y": 12, "flags": 4}, + {"matrix": [0, 2], "x": 84, "y": 12, "flags": 4}, + {"matrix": [0, 1], "x": 140, "y": 12, "flags": 4}, + {"matrix": [0, 0], "x": 196, "y": 12, "flags": 4}, + {"matrix": [1, 3], "x": 28, "y": 28, "flags": 4}, + {"matrix": [1, 2], "x": 84, "y": 28, "flags": 4}, + {"matrix": [1, 1], "x": 140, "y": 28, "flags": 4}, + {"matrix": [1, 0], "x": 196, "y": 28, "flags": 4}, + {"matrix": [2, 3], "x": 28, "y": 44, "flags": 4}, + {"matrix": [2, 2], "x": 84, "y": 44, "flags": 4}, + {"matrix": [2, 1], "x": 140, "y": 44, "flags": 4}, + {"matrix": [2, 0], "x": 196, "y": 44, "flags": 4}, + {"matrix": [3, 3], "x": 28, "y": 60, "flags": 4}, + {"matrix": [3, 2], "x": 84, "y": 60, "flags": 4}, + {"matrix": [3, 1], "x": 140, "y": 60, "flags": 4}, + {"matrix": [3, 0], "x": 196, "y": 60, "flags": 4}, + {"x": 168, "y": 48, "flags": 2}, + {"x": 168, "y": 16, "flags": 2}, + {"x": 58, "y": 16, "flags": 2}, + {"x": 56, "y": 48, "flags": 2} + ], "sleep": true }, "features": { diff --git a/keyboards/1upkeyboards/super16v2/super16v2.c b/keyboards/1upkeyboards/super16v2/super16v2.c deleted file mode 100644 index 56e5fe7e7f..0000000000 --- a/keyboards/1upkeyboards/super16v2/super16v2.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright 2022 MechMerlin - * - * 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 "quantum.h" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 3, 2, 1, 0 }, - { 7, 6, 5, 4 }, - { 11, 10, 9, 8 }, - { 15, 14, 13, 12 } -}, { - // LED Index to Physical Position - { 28, 12 }, { 84, 12 }, { 140, 12 }, { 196, 12 }, - { 28, 28 }, { 84, 28 }, { 140, 28 }, { 196, 28 }, - { 28, 44 }, { 84, 44 }, { 140, 44 }, { 196, 44 }, - { 28, 60 }, { 84, 60 }, { 140, 60 }, { 196, 60 }, - { 168, 48 }, { 168, 16 }, { 58, 16 }, { 56, 48 } -}, { - // LED Index to Flag - 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, 4, - 4, 4, 4, 4, - 2, 2, 2, 2, -} }; -#endif diff --git a/keyboards/4pplet/perk60_iso/rev_a/keyboard.json b/keyboards/4pplet/perk60_iso/rev_a/keyboard.json index 8d3a519a87..2e50d02a52 100644 --- a/keyboards/4pplet/perk60_iso/rev_a/keyboard.json +++ b/keyboards/4pplet/perk60_iso/rev_a/keyboard.json @@ -37,7 +37,71 @@ "default": { "val": 80 }, - "driver": "is31fl3733" + "driver": "is31fl3733", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 32, "y": 0, "flags": 4}, + {"matrix": [1, 1], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 65, "y": 0, "flags": 4}, + {"matrix": [1, 2], "x": 81, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 97, "y": 0, "flags": 4}, + {"matrix": [1, 3], "x": 113, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 129, "y": 0, "flags": 4}, + {"matrix": [1, 4], "x": 145, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 161, "y": 0, "flags": 4}, + {"matrix": [1, 5], "x": 178, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 194, "y": 0, "flags": 4}, + {"matrix": [3, 6], "x": 218, "y": 0, "flags": 1}, + {"matrix": [2, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [3, 0], "x": 24, "y": 16, "flags": 4}, + {"matrix": [2, 1], "x": 40, "y": 16, "flags": 4}, + {"matrix": [3, 1], "x": 57, "y": 16, "flags": 4}, + {"matrix": [2, 2], "x": 73, "y": 16, "flags": 4}, + {"matrix": [3, 2], "x": 89, "y": 16, "flags": 4}, + {"matrix": [2, 3], "x": 105, "y": 16, "flags": 4}, + {"matrix": [3, 3], "x": 121, "y": 16, "flags": 4}, + {"matrix": [2, 4], "x": 137, "y": 16, "flags": 4}, + {"matrix": [3, 4], "x": 153, "y": 16, "flags": 4}, + {"matrix": [2, 5], "x": 170, "y": 16, "flags": 4}, + {"matrix": [3, 5], "x": 186, "y": 16, "flags": 4}, + {"matrix": [2, 6], "x": 202, "y": 16, "flags": 4}, + {"matrix": [7, 6], "x": 224, "y": 24, "flags": 1}, + {"matrix": [4, 0], "x": 6, "y": 32, "flags": 8}, + {"matrix": [5, 0], "x": 28, "y": 32, "flags": 4}, + {"matrix": [4, 1], "x": 44, "y": 32, "flags": 4}, + {"matrix": [5, 1], "x": 61, "y": 32, "flags": 4}, + {"matrix": [4, 2], "x": 77, "y": 32, "flags": 4}, + {"matrix": [5, 2], "x": 93, "y": 32, "flags": 4}, + {"matrix": [4, 3], "x": 109, "y": 32, "flags": 4}, + {"matrix": [5, 3], "x": 125, "y": 32, "flags": 4}, + {"matrix": [4, 4], "x": 141, "y": 32, "flags": 4}, + {"matrix": [5, 4], "x": 157, "y": 32, "flags": 4}, + {"matrix": [4, 5], "x": 174, "y": 32, "flags": 4}, + {"matrix": [5, 5], "x": 190, "y": 32, "flags": 4}, + {"matrix": [4, 6], "x": 206, "y": 32, "flags": 1}, + {"matrix": [6, 0], "x": 2, "y": 48, "flags": 1}, + {"matrix": [7, 0], "x": 20, "y": 48, "flags": 4}, + {"matrix": [6, 1], "x": 36, "y": 48, "flags": 4}, + {"matrix": [7, 1], "x": 52, "y": 48, "flags": 4}, + {"matrix": [6, 2], "x": 69, "y": 48, "flags": 4}, + {"matrix": [7, 2], "x": 85, "y": 48, "flags": 4}, + {"matrix": [6, 3], "x": 101, "y": 48, "flags": 4}, + {"matrix": [7, 3], "x": 117, "y": 48, "flags": 4}, + {"matrix": [6, 4], "x": 133, "y": 48, "flags": 4}, + {"matrix": [7, 4], "x": 149, "y": 48, "flags": 4}, + {"matrix": [6, 5], "x": 165, "y": 48, "flags": 4}, + {"matrix": [7, 5], "x": 182, "y": 48, "flags": 4}, + {"matrix": [8, 6], "x": 212, "y": 48, "flags": 1}, + {"matrix": [8, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [8, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [9, 0], "x": 42, "y": 64, "flags": 1}, + {"matrix": [8, 3], "x": 103, "y": 64, "flags": 4}, + {"matrix": [9, 3], "x": 163, "y": 64, "flags": 1}, + {"matrix": [9, 4], "x": 184, "y": 64, "flags": 1}, + {"matrix": [8, 5], "x": 204, "y": 64, "flags": 1}, + {"matrix": [9, 5], "x": 224, "y": 64, "flags": 1} + ] }, "features": { "bootmagic": true, diff --git a/keyboards/4pplet/perk60_iso/rev_a/rev_a.c b/keyboards/4pplet/perk60_iso/rev_a/rev_a.c index c4ab064cb2..431400a6b8 100644 --- a/keyboards/4pplet/perk60_iso/rev_a/rev_a.c +++ b/keyboards/4pplet/perk60_iso/rev_a/rev_a.c @@ -31,99 +31,68 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { - { 0, SW11_CS2, SW10_CS2, SW12_CS2 }, //D402 - { 0, SW11_CS3, SW10_CS3, SW12_CS3 }, //D403 - { 0, SW11_CS4, SW10_CS4, SW12_CS4 }, //D404 - { 0, SW11_CS5, SW10_CS5, SW12_CS5 }, //D405 - { 0, SW11_CS6, SW10_CS6, SW12_CS6 }, //D406 - { 0, SW11_CS7, SW10_CS7, SW12_CS7 }, //D407 - { 0, SW11_CS8, SW10_CS8, SW12_CS8 }, //D408 - { 0, SW11_CS9, SW10_CS9, SW12_CS9 }, //D409 - { 0, SW11_CS10, SW10_CS10, SW12_CS10 }, //D410 - { 0, SW11_CS11, SW10_CS11, SW12_CS11 }, //D411 - { 0, SW11_CS12, SW10_CS12, SW12_CS12 }, //D412 - { 0, SW11_CS13, SW10_CS13, SW12_CS13 }, //D413 - { 0, SW11_CS14, SW10_CS14, SW12_CS14 }, //D414 - { 0, SW11_CS15, SW10_CS15, SW12_CS15 }, //D415 - { 0, SW11_CS1, SW10_CS1, SW12_CS1 }, //D401 - { 0, SW8_CS4, SW7_CS4, SW9_CS4 }, //D420 - { 0, SW8_CS5, SW7_CS5, SW9_CS5 }, //D421 - { 0, SW8_CS6, SW7_CS6, SW9_CS6 }, //D422 - { 0, SW8_CS7, SW7_CS7, SW9_CS7 }, //D423 - { 0, SW8_CS8, SW7_CS8, SW9_CS8 }, //D424 - { 0, SW8_CS9, SW7_CS9, SW9_CS9 }, //D425 - { 0, SW8_CS10, SW7_CS10, SW9_CS10 }, //D426 - { 0, SW8_CS11, SW7_CS11, SW9_CS11 }, //D427 - { 0, SW8_CS12, SW7_CS12, SW9_CS12 }, //D428 - { 0, SW8_CS13, SW7_CS13, SW9_CS13 }, //D429 - { 0, SW8_CS14, SW7_CS14, SW9_CS14 }, //D430 - { 0, SW8_CS15, SW7_CS15, SW9_CS15 }, //D431 - { 0, SW11_CS16, SW10_CS16, SW12_CS16 }, //D416 - { 0, SW8_CS2, SW7_CS2, SW9_CS2 }, //D418 - { 0, SW8_CS3, SW7_CS3, SW9_CS3 }, //D419 - { 0, SW5_CS5, SW4_CS5, SW6_CS5 }, //D437 - { 0, SW5_CS6, SW4_CS6, SW6_CS6 }, //D438 - { 0, SW5_CS7, SW4_CS7, SW6_CS7 }, //D439 - { 0, SW5_CS8, SW4_CS8, SW6_CS8 }, //D440 - { 0, SW5_CS9, SW4_CS9, SW6_CS9 }, //D441 - { 0, SW5_CS10, SW4_CS10, SW6_CS10 }, //D442 - { 0, SW5_CS11, SW4_CS11, SW6_CS11 }, //D443 - { 0, SW5_CS12, SW4_CS12, SW6_CS12 }, //D444 - { 0, SW5_CS13, SW4_CS13, SW6_CS13 }, //D445 - { 0, SW5_CS14, SW4_CS14, SW6_CS14 }, //D446 - { 0, SW8_CS16, SW7_CS16, SW9_CS16 }, //D432 - { 0, SW8_CS1, SW7_CS1, SW9_CS1 }, //D417 - { 0, SW5_CS3, SW4_CS3, SW6_CS3 }, //D435 - { 0, SW5_CS4, SW4_CS4, SW6_CS4 }, //D436 - { 0, SW2_CS2, SW1_CS2, SW3_CS2 }, //D450 - { 0, SW2_CS3, SW1_CS3, SW3_CS3 }, //D451 - { 0, SW2_CS4, SW1_CS4, SW3_CS4 }, //D452 - { 0, SW2_CS6, SW1_CS6, SW3_CS6 }, //D454 - { 0, SW2_CS8, SW1_CS8, SW3_CS8 }, //D456 - { 0, SW2_CS9, SW1_CS9, SW3_CS9 }, //D457 - { 0, SW2_CS10, SW1_CS10, SW3_CS10 }, //D458 - { 0, SW2_CS12, SW1_CS12, SW3_CS12 }, //D460 - { 0, SW2_CS13, SW1_CS13, SW3_CS13 }, //D461 - { 0, SW5_CS15, SW4_CS15, SW6_CS15 }, //D447 - { 0, SW5_CS1, SW4_CS1, SW6_CS1 }, //D433 - { 0, SW5_CS2, SW4_CS2, SW6_CS2 }, //D434 - { 0, SW2_CS1, SW1_CS1, SW3_CS1 }, //D449 - { 0, SW2_CS7, SW1_CS7, SW3_CS7 }, //D455 - { 0, SW2_CS11, SW1_CS11, SW3_CS11 }, //D459 - { 0, SW2_CS14, SW1_CS14, SW3_CS14 }, //D462 - { 0, SW2_CS15, SW1_CS15, SW3_CS15 }, //D463 - { 0, SW2_CS16, SW1_CS16, SW3_CS16 } //D464 -}; - -#define XXX NO_LED -led_config_t g_led_config = { - { - { 0, 2, 4, 6, 8, 10, 12 }, - { 1, 3, 5, 7, 9, 11, XXX }, - { 14, 16, 18, 20, 22, 24, 26 }, - { 15, 17, 19, 21, 23, 25, 13 }, - { 28, 30, 32, 34, 36, 38, 40 }, - { 29, 31, 33, 35, 37, 39, XXX }, - { 41, 43, 45, 47, 49, 51, XXX }, - { 42, 44, 46, 48, 50, 52, 27 }, - { 54, 55, XXX, 57, XXX, 60, 53 }, - { 56, XXX, XXX, 58, 59, 61, XXX }, - - }, { - { 0,0 }, { 16,0 }, { 32,0 }, { 48,0 }, { 65,0 }, { 81,0 }, { 97,0 }, {113,0 }, {129,0 }, {145,0 }, - {161,0 }, {178,0 }, {194,0 }, {218,0 }, { 4,16 }, { 24,16 }, { 40,16 }, { 57,16 }, { 73,16 }, { 89,16 }, - {105,16 }, {121,16 }, {137,16 }, {153,16 }, {170,16 }, {186,16 }, {202,16 }, {224,24 }, { 6,32 }, { 28,32 }, - { 44,32 }, { 61,32 }, { 77,32 }, { 93,32 }, {109,32 }, {125,32 }, {141,32 }, {157,32 }, {174,32 }, {190,32 }, - {206,32 }, { 2,48 }, { 20,48 }, { 36,48 }, { 52,48 }, { 69,48 }, { 85,48 }, {101,48 }, {117,48 }, {133,48 }, - {149,48 }, {165,48 }, {182,48 }, {212,48 }, { 2,64 }, { 22,64 }, { 42,64 }, {103,64 }, {163,64 }, {184,64 }, - {204,64 }, {224,64 }, - }, { - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 4, 1, 1, 1, 1 - } + {0, SW11_CS2, SW10_CS2, SW12_CS2}, // D402 + {0, SW11_CS3, SW10_CS3, SW12_CS3}, // D403 + {0, SW11_CS4, SW10_CS4, SW12_CS4}, // D404 + {0, SW11_CS5, SW10_CS5, SW12_CS5}, // D405 + {0, SW11_CS6, SW10_CS6, SW12_CS6}, // D406 + {0, SW11_CS7, SW10_CS7, SW12_CS7}, // D407 + {0, SW11_CS8, SW10_CS8, SW12_CS8}, // D408 + {0, SW11_CS9, SW10_CS9, SW12_CS9}, // D409 + {0, SW11_CS10, SW10_CS10, SW12_CS10}, // D410 + {0, SW11_CS11, SW10_CS11, SW12_CS11}, // D411 + {0, SW11_CS12, SW10_CS12, SW12_CS12}, // D412 + {0, SW11_CS13, SW10_CS13, SW12_CS13}, // D413 + {0, SW11_CS14, SW10_CS14, SW12_CS14}, // D414 + {0, SW11_CS15, SW10_CS15, SW12_CS15}, // D415 + {0, SW11_CS1, SW10_CS1, SW12_CS1}, // D401 + {0, SW8_CS4, SW7_CS4, SW9_CS4}, // D420 + {0, SW8_CS5, SW7_CS5, SW9_CS5}, // D421 + {0, SW8_CS6, SW7_CS6, SW9_CS6}, // D422 + {0, SW8_CS7, SW7_CS7, SW9_CS7}, // D423 + {0, SW8_CS8, SW7_CS8, SW9_CS8}, // D424 + {0, SW8_CS9, SW7_CS9, SW9_CS9}, // D425 + {0, SW8_CS10, SW7_CS10, SW9_CS10}, // D426 + {0, SW8_CS11, SW7_CS11, SW9_CS11}, // D427 + {0, SW8_CS12, SW7_CS12, SW9_CS12}, // D428 + {0, SW8_CS13, SW7_CS13, SW9_CS13}, // D429 + {0, SW8_CS14, SW7_CS14, SW9_CS14}, // D430 + {0, SW8_CS15, SW7_CS15, SW9_CS15}, // D431 + {0, SW11_CS16, SW10_CS16, SW12_CS16}, // D416 + {0, SW8_CS2, SW7_CS2, SW9_CS2}, // D418 + {0, SW8_CS3, SW7_CS3, SW9_CS3}, // D419 + {0, SW5_CS5, SW4_CS5, SW6_CS5}, // D437 + {0, SW5_CS6, SW4_CS6, SW6_CS6}, // D438 + {0, SW5_CS7, SW4_CS7, SW6_CS7}, // D439 + {0, SW5_CS8, SW4_CS8, SW6_CS8}, // D440 + {0, SW5_CS9, SW4_CS9, SW6_CS9}, // D441 + {0, SW5_CS10, SW4_CS10, SW6_CS10}, // D442 + {0, SW5_CS11, SW4_CS11, SW6_CS11}, // D443 + {0, SW5_CS12, SW4_CS12, SW6_CS12}, // D444 + {0, SW5_CS13, SW4_CS13, SW6_CS13}, // D445 + {0, SW5_CS14, SW4_CS14, SW6_CS14}, // D446 + {0, SW8_CS16, SW7_CS16, SW9_CS16}, // D432 + {0, SW8_CS1, SW7_CS1, SW9_CS1}, // D417 + {0, SW5_CS3, SW4_CS3, SW6_CS3}, // D435 + {0, SW5_CS4, SW4_CS4, SW6_CS4}, // D436 + {0, SW2_CS2, SW1_CS2, SW3_CS2}, // D450 + {0, SW2_CS3, SW1_CS3, SW3_CS3}, // D451 + {0, SW2_CS4, SW1_CS4, SW3_CS4}, // D452 + {0, SW2_CS6, SW1_CS6, SW3_CS6}, // D454 + {0, SW2_CS8, SW1_CS8, SW3_CS8}, // D456 + {0, SW2_CS9, SW1_CS9, SW3_CS9}, // D457 + {0, SW2_CS10, SW1_CS10, SW3_CS10}, // D458 + {0, SW2_CS12, SW1_CS12, SW3_CS12}, // D460 + {0, SW2_CS13, SW1_CS13, SW3_CS13}, // D461 + {0, SW5_CS15, SW4_CS15, SW6_CS15}, // D447 + {0, SW5_CS1, SW4_CS1, SW6_CS1}, // D433 + {0, SW5_CS2, SW4_CS2, SW6_CS2}, // D434 + {0, SW2_CS1, SW1_CS1, SW3_CS1}, // D449 + {0, SW2_CS7, SW1_CS7, SW3_CS7}, // D455 + {0, SW2_CS11, SW1_CS11, SW3_CS11}, // D459 + {0, SW2_CS14, SW1_CS14, SW3_CS14}, // D462 + {0, SW2_CS15, SW1_CS15, SW3_CS15}, // D463 + {0, SW2_CS16, SW1_CS16, SW3_CS16} // D464 }; bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { diff --git a/keyboards/acheron/apollo/87h/delta/delta.c b/keyboards/acheron/apollo/87h/delta/delta.c index b17fce5c3a..a03bd01ec7 100644 --- a/keyboards/acheron/apollo/87h/delta/delta.c +++ b/keyboards/acheron/apollo/87h/delta/delta.c @@ -21,41 +21,3 @@ void board_init(void) { gpio_set_pin_input(B9); gpio_set_pin_input(B10); } - -led_config_t g_led_config = { { -// { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , NO_LED , 13 , 14 , 15 }, -// { 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 }, -// { 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 }, -// { 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , NO_LED , NO_LED , NO_LED , NO_LED }, -// { 63 , NO_LED , 64 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , NO_LED , NO_LED , 75 , NO_LED }, -// { 76 , 77 , 78 , NO_LED , NO_LED , NO_LED , 79 , NO_LED , NO_LED , 80 , 81 , 82 , 83 , NO_LED , 84 , 85 , 86 } -// - { 15 , 14 , 13 , 12 , 11 , 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , NO_LED , 2 , 1 , 0 }, - { 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 }, - { 49 , 48 , 47 , 46 , 45 , 44 , 43 , 42 , 41 , 40 , 39 , 38 , 37 , 36 , 35 , 34 , 33 }, - { 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , NO_LED , NO_LED , NO_LED , NO_LED }, - { 75 , NO_LED , 74 , 73 , 72 , 71 , 70 , 69 , 68 , 67 , 66 , 65 , 64 , NO_LED , NO_LED , 63 , NO_LED }, - { 76 , 77 , 78 , NO_LED , NO_LED , NO_LED , 79 , NO_LED , NO_LED , 80 , 81 , 82 , 83 , NO_LED , 84 , 85 , 86 } -},{ -// "Fine-tuned" complex configuration - { 210, 0}, { 196, 0}, { 182, 0}, { 168, 0}, { 154, 0}, { 140, 0}, { 140, 0}, { 126, 0}, { 112, 0}, { 98, 0}, { 84, 0}, { 70, 0}, { 56, 0}, { 28, 0}, { 14, 0}, { 0, 0}, - { 0, 45}, { 14, 45}, { 28, 45}, { 42, 45}, { 56, 45}, { 70, 45}, { 84, 45}, { 98, 45}, { 112, 45}, { 126, 45}, { 140, 45}, { 154, 45}, { 168, 45}, { 182, 45}, { 196, 45}, { 210, 45}, { 224, 45}, - { 224, 90}, { 210, 90}, { 196, 90}, { 182, 90}, { 168, 90}, { 154, 90}, { 140, 90}, { 126, 90}, { 112, 90}, { 98, 90}, { 84, 90}, { 70, 90}, { 56, 90}, { 42, 90}, { 28, 90}, { 14, 90}, { 0, 90}, - { 0, 135}, { 14, 135}, { 28, 135}, { 42, 135}, { 56, 135}, { 70, 135}, { 84, 135}, { 98, 135}, { 112, 135}, { 126, 135}, { 140, 135}, { 154, 135}, { 168, 135}, - { 192, 180}, { 168, 180}, { 154, 180}, { 140, 180}, { 126, 180}, { 112, 180}, { 98, 180}, { 84, 180}, { 70, 180}, { 56, 180}, { 42, 180}, { 28, 180}, { 14, 180}, - { 0, 225}, { 14, 225}, { 28, 225}, { 84, 225}, { 126, 225}, { 140, 225}, { 154, 225}, { 168, 225}, { 196, 45}, { 210, 45}, { 224, 90} -// "Stock" simple configuration -// { 224, 0}, { 210, 0}, { 196, 0}, { 182, 0}, { 168, 0}, { 154, 0}, { 140, 0}, { 126, 0}, { 112, 0}, { 98, 0}, { 84, 0}, { 70, 0}, { 56, 0}, { 28, 0}, { 14, 0}, { 0, 0}, -// { 0, 45}, { 14, 45}, { 28, 45}, { 42, 45}, { 56, 45}, { 70, 45}, { 84, 45}, { 98, 45}, { 112, 45}, { 126, 45}, { 140, 45}, { 154, 45}, { 168, 45}, { 182, 45}, { 196, 45}, { 210, 45}, { 224, 45}, -// { 224, 90}, { 210, 90}, { 196, 90}, { 182, 90}, { 168, 90}, { 154, 90}, { 140, 90}, { 126, 90}, { 112, 90}, { 98, 90}, { 84, 90}, { 70, 90}, { 56, 90}, { 42, 90}, { 28, 90}, { 14, 90}, { 0, 90}, -// { 0, 135}, { 14, 135}, { 28, 135}, { 42, 135}, { 56, 135}, { 70, 135}, { 84, 135}, { 98, 135}, { 112, 135}, { 126, 135}, { 140, 135}, { 154, 135}, { 168, 135}, -// { 224, 180}, { 196, 180}, { 182, 180}, { 168, 180}, { 154, 180}, { 140, 180}, { 126, 180}, { 112, 180}, { 98, 180}, { 84, 180}, { 70, 180}, { 56, 180}, { 14, 180}, -// { 0, 225}, { 14, 225}, { 28, 225}, { 84, 225}, { 126, 225}, { 140, 225}, { 154, 225}, { 168, 225}, { 196, 45}, { 210, 45}, { 224, 90} -}, { - 1 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , - 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , - 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , - 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 1 , - 1 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 1 , 1 , - 1 , 1 , 1 , 4 , 1 , 1 , 1 , 1 , 1 , 1 , 1 -} }; diff --git a/keyboards/acheron/apollo/87h/delta/keyboard.json b/keyboards/acheron/apollo/87h/delta/keyboard.json index f5bdf28d96..d9f6de197a 100644 --- a/keyboards/acheron/apollo/87h/delta/keyboard.json +++ b/keyboards/acheron/apollo/87h/delta/keyboard.json @@ -57,6 +57,95 @@ "val": 60 }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 16], "x": 224, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 210, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 196, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 182, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 168, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 154, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 140, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 126, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 98, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 84, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 70, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 56, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 28, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 14, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 12, "flags": 4}, + {"matrix": [1, 1], "x": 14, "y": 12, "flags": 4}, + {"matrix": [1, 2], "x": 28, "y": 12, "flags": 4}, + {"matrix": [1, 3], "x": 42, "y": 12, "flags": 4}, + {"matrix": [1, 4], "x": 56, "y": 12, "flags": 4}, + {"matrix": [1, 5], "x": 70, "y": 12, "flags": 4}, + {"matrix": [1, 6], "x": 84, "y": 12, "flags": 4}, + {"matrix": [1, 7], "x": 98, "y": 12, "flags": 4}, + {"matrix": [1, 8], "x": 112, "y": 12, "flags": 4}, + {"matrix": [1, 9], "x": 126, "y": 12, "flags": 4}, + {"matrix": [1, 10], "x": 140, "y": 12, "flags": 4}, + {"matrix": [1, 11], "x": 154, "y": 12, "flags": 4}, + {"matrix": [1, 12], "x": 168, "y": 12, "flags": 4}, + {"matrix": [1, 13], "x": 182, "y": 12, "flags": 4}, + {"matrix": [1, 14], "x": 196, "y": 12, "flags": 4}, + {"matrix": [1, 15], "x": 210, "y": 12, "flags": 4}, + {"matrix": [1, 16], "x": 224, "y": 12, "flags": 4}, + {"matrix": [2, 16], "x": 224, "y": 25, "flags": 4}, + {"matrix": [2, 15], "x": 210, "y": 25, "flags": 4}, + {"matrix": [2, 14], "x": 196, "y": 25, "flags": 4}, + {"matrix": [2, 13], "x": 182, "y": 25, "flags": 4}, + {"matrix": [2, 12], "x": 168, "y": 25, "flags": 4}, + {"matrix": [2, 11], "x": 154, "y": 25, "flags": 4}, + {"matrix": [2, 10], "x": 140, "y": 25, "flags": 4}, + {"matrix": [2, 9], "x": 126, "y": 25, "flags": 4}, + {"matrix": [2, 8], "x": 112, "y": 25, "flags": 4}, + {"matrix": [2, 7], "x": 98, "y": 25, "flags": 4}, + {"matrix": [2, 6], "x": 84, "y": 25, "flags": 4}, + {"matrix": [2, 5], "x": 70, "y": 25, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 25, "flags": 4}, + {"matrix": [2, 3], "x": 42, "y": 25, "flags": 4}, + {"matrix": [2, 2], "x": 28, "y": 25, "flags": 4}, + {"matrix": [2, 1], "x": 14, "y": 25, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 25, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 38, "flags": 4}, + {"matrix": [3, 1], "x": 14, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 28, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 42, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 56, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 70, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 84, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 98, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 112, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 126, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 154, "y": 38, "flags": 4}, + {"matrix": [3, 12], "x": 168, "y": 38, "flags": 1}, + {"matrix": [4, 15], "x": 210, "y": 51, "flags": 1}, + {"matrix": [4, 12], "x": 168, "y": 51, "flags": 4}, + {"matrix": [4, 11], "x": 154, "y": 51, "flags": 4}, + {"matrix": [4, 10], "x": 140, "y": 51, "flags": 4}, + {"matrix": [4, 9], "x": 126, "y": 51, "flags": 4}, + {"matrix": [4, 8], "x": 112, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 98, "y": 51, "flags": 4}, + {"matrix": [4, 6], "x": 84, "y": 51, "flags": 4}, + {"matrix": [4, 5], "x": 70, "y": 51, "flags": 4}, + {"matrix": [4, 4], "x": 56, "y": 51, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 51, "flags": 4}, + {"matrix": [4, 2], "x": 28, "y": 51, "flags": 1}, + {"matrix": [4, 0], "x": 14, "y": 51, "flags": 1}, + {"matrix": [5, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 28, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 84, "y": 64, "flags": 4}, + {"matrix": [5, 9], "x": 126, "y": 64, "flags": 1}, + {"matrix": [5, 10], "x": 140, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 154, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 168, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 196, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 210, "y": 64, "flags": 1}, + {"matrix": [5, 16], "x": 224, "y": 64, "flags": 1} + ], "sleep": true }, "features": { diff --git a/keyboards/acheron/apollo/87h/gamma/gamma.c b/keyboards/acheron/apollo/87h/gamma/gamma.c index f047db0fea..92c6697a1c 100644 --- a/keyboards/acheron/apollo/87h/gamma/gamma.c +++ b/keyboards/acheron/apollo/87h/gamma/gamma.c @@ -120,27 +120,4 @@ const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, SW3_CS24, SW3_CS23, SW3_CS22 }, //RIGHT 86 }; - -led_config_t g_led_config = { { - { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 }, - { 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 }, - { 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 41 , 43 , 44 , 45 , 46 , 47 , 48 }, - { 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , NO_LED , NO_LED , NO_LED }, - { 63 , NO_LED , 64 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 49 , 32 }, - { 76 , 77 , 78 , NO_LED , NO_LED , NO_LED , 79 , NO_LED , NO_LED , 80 , 81 , 82 , 83 , 84 , 85 , 86 } -},{ - { 0, 0}, { 15, 0}, { 30, 0}, { 45, 0}, { 60, 0}, { 75, 0}, { 90, 0}, { 105, 0}, { 120, 0}, { 135, 0}, { 150, 0}, { 165, 0}, { 180, 0}, { 210, 0}, { 210, 0}, { 225, 0}, - { 0, 45}, { 15, 45}, { 30, 45}, { 45, 45}, { 60, 45}, { 75, 45}, { 90, 45}, { 105, 45}, { 120, 45}, { 135, 45}, { 150, 45}, { 165, 45}, { 180, 45}, { 210, 45}, { 210, 45}, { 215, 45}, - { 0, 90}, { 15, 90}, { 30, 90}, { 45, 90}, { 60, 90}, { 75, 90}, { 90, 90}, { 105, 90}, { 120, 90}, { 135, 90}, { 150, 90}, { 165, 90}, { 180, 90}, { 195, 90}, { 210, 90}, { 215, 90}, - { 0, 135}, { 15, 135}, { 30, 135}, { 45, 135}, { 60, 135}, { 75, 135}, { 90, 135}, { 105, 135}, { 120, 135}, { 135, 135}, { 150, 135}, { 165, 135}, { 180, 135}, - { 0, 180}, { 30, 180}, { 45, 180}, { 60, 180}, { 75, 180}, { 90, 180}, { 105, 180}, { 120, 180}, { 135, 180}, { 150, 180}, { 165, 180}, { 180, 180}, { 210, 180}, { 225, 45}, { 225, 0}, - { 0, 225}, { 15, 225}, { 30, 225}, { 90, 225}, { 135, 225}, { 150, 225}, { 165, 225}, { 180, 225}, { 195, 225}, { 210, 225}, { 225, 225} -}, { - 1 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , - 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , - 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , - 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 1 , - 1 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 1 , 1 , 1 , 1 , - 1 , 1 , 1 , 4 , 1 , 1 , 1 , 1 , 1 , 1 , 1 -} }; #endif diff --git a/keyboards/acheron/apollo/87h/gamma/keyboard.json b/keyboards/acheron/apollo/87h/gamma/keyboard.json index 5c2087c968..03ba206526 100644 --- a/keyboards/acheron/apollo/87h/gamma/keyboard.json +++ b/keyboards/acheron/apollo/87h/gamma/keyboard.json @@ -58,6 +58,95 @@ "val": 80 }, "driver": "is31fl3741", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 14, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 28, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 56, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 70, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 84, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 98, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 126, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 140, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 154, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 168, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 182, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 196, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 210, "y": 0, "flags": 4}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 12, "flags": 4}, + {"matrix": [1, 1], "x": 14, "y": 12, "flags": 4}, + {"matrix": [1, 2], "x": 28, "y": 12, "flags": 4}, + {"matrix": [1, 3], "x": 42, "y": 12, "flags": 4}, + {"matrix": [1, 4], "x": 56, "y": 12, "flags": 4}, + {"matrix": [1, 5], "x": 70, "y": 12, "flags": 4}, + {"matrix": [1, 6], "x": 84, "y": 12, "flags": 4}, + {"matrix": [1, 7], "x": 98, "y": 12, "flags": 4}, + {"matrix": [1, 8], "x": 112, "y": 12, "flags": 4}, + {"matrix": [1, 9], "x": 126, "y": 12, "flags": 4}, + {"matrix": [1, 10], "x": 140, "y": 12, "flags": 4}, + {"matrix": [1, 11], "x": 154, "y": 12, "flags": 4}, + {"matrix": [1, 12], "x": 168, "y": 12, "flags": 4}, + {"matrix": [1, 13], "x": 182, "y": 12, "flags": 4}, + {"matrix": [1, 14], "x": 196, "y": 12, "flags": 4}, + {"matrix": [1, 15], "x": 210, "y": 12, "flags": 4}, + {"matrix": [4, 15], "x": 224, "y": 12, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 25, "flags": 4}, + {"matrix": [2, 1], "x": 14, "y": 25, "flags": 4}, + {"matrix": [2, 2], "x": 28, "y": 25, "flags": 4}, + {"matrix": [2, 3], "x": 42, "y": 25, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 25, "flags": 4}, + {"matrix": [2, 5], "x": 70, "y": 25, "flags": 4}, + {"matrix": [2, 6], "x": 84, "y": 25, "flags": 4}, + {"matrix": [2, 7], "x": 98, "y": 25, "flags": 4}, + {"matrix": [2, 8], "x": 112, "y": 25, "flags": 4}, + {"matrix": [2, 9], "x": 126, "y": 25, "flags": 4}, + {"matrix": [2, 10], "x": 140, "y": 25, "flags": 4}, + {"matrix": [2, 11], "x": 154, "y": 25, "flags": 4}, + {"matrix": [2, 12], "x": 168, "y": 25, "flags": 4}, + {"matrix": [2, 13], "x": 182, "y": 25, "flags": 4}, + {"matrix": [2, 14], "x": 196, "y": 25, "flags": 4}, + {"matrix": [2, 15], "x": 210, "y": 25, "flags": 4}, + {"matrix": [4, 14], "x": 224, "y": 25, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 38, "flags": 4}, + {"matrix": [3, 1], "x": 14, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 28, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 42, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 56, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 70, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 84, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 98, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 112, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 126, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 38, "flags": 1}, + {"matrix": [3, 11], "x": 156, "y": 38, "flags": 1}, + {"matrix": [3, 12], "x": 168, "y": 38, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 51, "flags": 4}, + {"matrix": [4, 2], "x": 14, "y": 51, "flags": 4}, + {"matrix": [4, 3], "x": 28, "y": 51, "flags": 4}, + {"matrix": [4, 4], "x": 42, "y": 51, "flags": 4}, + {"matrix": [4, 5], "x": 56, "y": 51, "flags": 4}, + {"matrix": [4, 6], "x": 70, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 84, "y": 51, "flags": 4}, + {"matrix": [4, 8], "x": 98, "y": 51, "flags": 4}, + {"matrix": [4, 9], "x": 112, "y": 51, "flags": 4}, + {"matrix": [4, 10], "x": 126, "y": 51, "flags": 1}, + {"matrix": [4, 11], "x": 140, "y": 51, "flags": 1}, + {"matrix": [4, 12], "x": 156, "y": 51, "flags": 1}, + {"matrix": [4, 13], "x": 210, "y": 51, "flags": 1}, + {"matrix": [5, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 28, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 84, "y": 64, "flags": 4}, + {"matrix": [5, 9], "x": 140, "y": 64, "flags": 1}, + {"matrix": [5, 10], "x": 154, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 168, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 182, "y": 64, "flags": 1}, + {"matrix": [5, 13], "x": 196, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 210, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 224, "y": 64, "flags": 1} + ], "sleep": true }, "features": { diff --git a/keyboards/acheron/apollo/87htsc/87htsc.c b/keyboards/acheron/apollo/87htsc/87htsc.c index 4225c34971..a03bd01ec7 100644 --- a/keyboards/acheron/apollo/87htsc/87htsc.c +++ b/keyboards/acheron/apollo/87htsc/87htsc.c @@ -21,27 +21,3 @@ void board_init(void) { gpio_set_pin_input(B9); gpio_set_pin_input(B10); } - -led_config_t g_led_config = { { - { 15 , 14 , 13 , 12 , 11 , 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , NO_LED , 2 , 1 , 0 }, - { 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 }, - { 49 , 48 , 47 , 46 , 45 , 44 , 43 , 42 , 41 , 40 , 39 , 38 , 37 , 36 , 35 , 34 , 33 }, - { 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , NO_LED , NO_LED , NO_LED , NO_LED }, - { 75 , NO_LED , 74 , 73 , 72 , 71 , 70 , 69 , 68 , 67 , 66 , 65 , 64 , NO_LED , NO_LED , 63 , NO_LED }, - { 76 , 77 , 78 , NO_LED , NO_LED , NO_LED , 79 , NO_LED , NO_LED , NO_LED , 80 , 81 , 82 , NO_LED , 83 , 84 , 85 } -},{ -// "Fine-tuned" complex configuration - { 210, 0}, { 196, 0}, { 182, 0}, { 168, 0}, { 154, 0}, { 140, 0}, { 140, 0}, { 126, 0}, { 112, 0}, { 98, 0}, { 84, 0}, { 70, 0}, { 56, 0}, { 28, 0}, { 14, 0}, { 0, 0}, - { 0, 45}, { 14, 45}, { 28, 45}, { 42, 45}, { 56, 45}, { 70, 45}, { 84, 45}, { 98, 45}, { 112, 45}, { 126, 45}, { 140, 45}, { 154, 45}, { 168, 45}, { 182, 45}, { 196, 45}, { 210, 45}, { 224, 45}, - { 224, 90}, { 210, 90}, { 196, 90}, { 182, 90}, { 168, 90}, { 154, 90}, { 140, 90}, { 126, 90}, { 112, 90}, { 98, 90}, { 84, 90}, { 70, 90}, { 56, 90}, { 42, 90}, { 28, 90}, { 14, 90}, { 0, 90}, - { 0, 135}, { 14, 135}, { 28, 135}, { 42, 135}, { 56, 135}, { 70, 135}, { 84, 135}, { 98, 135}, { 112, 135}, { 126, 135}, { 140, 135}, { 154, 135}, { 168, 135}, - { 192, 180}, { 168, 180}, { 154, 180}, { 140, 180}, { 126, 180}, { 112, 180}, { 98, 180}, { 84, 180}, { 70, 180}, { 56, 180}, { 42, 180}, { 28, 180}, { 14, 180}, - { 0, 225}, { 14, 225}, { 28, 225}, { 84, 225}, { 140, 225}, { 154, 225}, { 168, 225}, { 196, 225}, { 210, 225}, { 224, 225} -}, { - 1 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , - 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , - 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , - 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 1 , - 1 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 1 , 1 , - 1 , 1 , 1 , 4 , 1 , 1 , 1 , 1 , 1 , 1 -} }; diff --git a/keyboards/acheron/apollo/87htsc/keyboard.json b/keyboards/acheron/apollo/87htsc/keyboard.json index 4b2ff1ad66..957c02c1b6 100644 --- a/keyboards/acheron/apollo/87htsc/keyboard.json +++ b/keyboards/acheron/apollo/87htsc/keyboard.json @@ -60,6 +60,94 @@ "val": 60 }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 16], "x": 210, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 196, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 182, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 168, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 154, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 140, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 140, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 126, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 98, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 84, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 70, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 56, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 28, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 14, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 12, "flags": 4}, + {"matrix": [1, 1], "x": 14, "y": 12, "flags": 4}, + {"matrix": [1, 2], "x": 28, "y": 12, "flags": 4}, + {"matrix": [1, 3], "x": 42, "y": 12, "flags": 4}, + {"matrix": [1, 4], "x": 56, "y": 12, "flags": 4}, + {"matrix": [1, 5], "x": 70, "y": 12, "flags": 4}, + {"matrix": [1, 6], "x": 84, "y": 12, "flags": 4}, + {"matrix": [1, 7], "x": 98, "y": 12, "flags": 4}, + {"matrix": [1, 8], "x": 112, "y": 12, "flags": 4}, + {"matrix": [1, 9], "x": 126, "y": 12, "flags": 4}, + {"matrix": [1, 10], "x": 140, "y": 12, "flags": 4}, + {"matrix": [1, 11], "x": 154, "y": 12, "flags": 4}, + {"matrix": [1, 12], "x": 168, "y": 12, "flags": 4}, + {"matrix": [1, 13], "x": 182, "y": 12, "flags": 4}, + {"matrix": [1, 14], "x": 196, "y": 12, "flags": 4}, + {"matrix": [1, 15], "x": 210, "y": 12, "flags": 4}, + {"matrix": [1, 16], "x": 224, "y": 12, "flags": 4}, + {"matrix": [2, 16], "x": 224, "y": 25, "flags": 4}, + {"matrix": [2, 15], "x": 210, "y": 25, "flags": 4}, + {"matrix": [2, 14], "x": 196, "y": 25, "flags": 4}, + {"matrix": [2, 13], "x": 182, "y": 25, "flags": 4}, + {"matrix": [2, 12], "x": 168, "y": 25, "flags": 4}, + {"matrix": [2, 11], "x": 154, "y": 25, "flags": 4}, + {"matrix": [2, 10], "x": 140, "y": 25, "flags": 4}, + {"matrix": [2, 9], "x": 126, "y": 25, "flags": 4}, + {"matrix": [2, 8], "x": 112, "y": 25, "flags": 4}, + {"matrix": [2, 7], "x": 98, "y": 25, "flags": 4}, + {"matrix": [2, 6], "x": 84, "y": 25, "flags": 4}, + {"matrix": [2, 5], "x": 70, "y": 25, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 25, "flags": 4}, + {"matrix": [2, 3], "x": 42, "y": 25, "flags": 4}, + {"matrix": [2, 2], "x": 28, "y": 25, "flags": 4}, + {"matrix": [2, 1], "x": 14, "y": 25, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 25, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 38, "flags": 4}, + {"matrix": [3, 1], "x": 14, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 28, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 42, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 56, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 70, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 84, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 98, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 112, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 126, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 154, "y": 38, "flags": 4}, + {"matrix": [3, 12], "x": 168, "y": 38, "flags": 1}, + {"matrix": [4, 15], "x": 192, "y": 51, "flags": 1}, + {"matrix": [4, 12], "x": 168, "y": 51, "flags": 4}, + {"matrix": [4, 11], "x": 154, "y": 51, "flags": 4}, + {"matrix": [4, 10], "x": 140, "y": 51, "flags": 4}, + {"matrix": [4, 9], "x": 126, "y": 51, "flags": 4}, + {"matrix": [4, 8], "x": 112, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 98, "y": 51, "flags": 4}, + {"matrix": [4, 6], "x": 84, "y": 51, "flags": 4}, + {"matrix": [4, 5], "x": 70, "y": 51, "flags": 4}, + {"matrix": [4, 4], "x": 56, "y": 51, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 51, "flags": 4}, + {"matrix": [4, 2], "x": 28, "y": 51, "flags": 1}, + {"matrix": [4, 0], "x": 14, "y": 51, "flags": 1}, + {"matrix": [5, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 28, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 84, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 140, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 154, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 168, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 196, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 210, "y": 64, "flags": 1}, + {"matrix": [5, 16], "x": 224, "y": 64, "flags": 1} + ], "sleep": true }, "features": { diff --git a/keyboards/acheron/apollo/88htsc/88htsc.c b/keyboards/acheron/apollo/88htsc/88htsc.c deleted file mode 100644 index 8144fc57bc..0000000000 --- a/keyboards/acheron/apollo/88htsc/88htsc.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - Copyright 2022 Álvaro "Gondolindrim" Volpato - -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 "quantum.h" - -led_config_t g_led_config = { { - { 16 , 15 , 14 , 13 , 12 , 11 , 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 }, - { 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 }, - { 50 , 49 , 48 , 47 , 46 , 45 , 44 , 43 , 42 , 41 , 40 , 39 , 38 , 37 , 36 , 35 , 34 }, - { 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , NO_LED , NO_LED , NO_LED , NO_LED }, - { 76 , NO_LED , 75 , 74 , 73 , 72 , 71 , 70 , 69 , 68 , 67 , 66 , 65 , NO_LED , NO_LED , 64 , NO_LED }, - { 77 , 78 , 79 , NO_LED , NO_LED , NO_LED , 80 , NO_LED , NO_LED , NO_LED , 81 , 82 , 83 , NO_LED , 84 , 85 , 86 } -},{ -// "Fine-tuned" complex configuration - { 210, 0}, { 196, 0}, { 182, 0}, { 168, 0}, { 154, 0}, { 140, 0}, { 140, 0}, { 126, 0}, { 112, 0}, { 98, 0}, { 84, 0}, { 70, 0}, { 56, 0}, { 45, 0}, { 28, 0}, { 14, 0}, { 0, 0}, - { 0, 45}, { 14, 45}, { 28, 45}, { 42, 45}, { 56, 45}, { 70, 45}, { 84, 45}, { 98, 45}, { 112, 45}, { 126, 45}, { 140, 45}, { 154, 45}, { 168, 45}, { 182, 45}, { 196, 45}, { 210, 45}, { 224, 45}, - { 224, 90}, { 210, 90}, { 196, 90}, { 182, 90}, { 168, 90}, { 154, 90}, { 140, 90}, { 126, 90}, { 112, 90}, { 98, 90}, { 84, 90}, { 70, 90}, { 56, 90}, { 42, 90}, { 28, 90}, { 14, 90}, { 0, 90}, - { 0, 135}, { 14, 135}, { 28, 135}, { 42, 135}, { 56, 135}, { 70, 135}, { 84, 135}, { 98, 135}, { 112, 135}, { 126, 135}, { 140, 135}, { 154, 135}, { 168, 135}, - { 192, 180}, { 168, 180}, { 154, 180}, { 140, 180}, { 126, 180}, { 112, 180}, { 98, 180}, { 84, 180}, { 70, 180}, { 56, 180}, { 42, 180}, { 28, 180}, { 14, 180}, - { 0, 225}, { 14, 225}, { 28, 225}, { 84, 225}, { 140, 225}, { 154, 225}, { 168, 225}, { 196, 45}, { 210, 45}, { 224, 90} -}, { - 1 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , - 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , - 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , - 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 1 , - 1 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 1 , 1 , - 1 , 1 , 1 , 4 , 1 , 1 , 1 , 1 , 1 , 1 -} }; diff --git a/keyboards/acheron/apollo/88htsc/keyboard.json b/keyboards/acheron/apollo/88htsc/keyboard.json index 165c8d76eb..182339b4fd 100644 --- a/keyboards/acheron/apollo/88htsc/keyboard.json +++ b/keyboards/acheron/apollo/88htsc/keyboard.json @@ -60,6 +60,95 @@ "val": 60 }, "driver": "ws2812", + "layout": [ + {"matrix": [0, 16], "x": 210, "y": 0, "flags": 1}, + {"matrix": [0, 15], "x": 196, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 182, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 168, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 154, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 140, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 140, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 126, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 98, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 84, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 70, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 56, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 28, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 14, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 12, "flags": 4}, + {"matrix": [1, 1], "x": 14, "y": 12, "flags": 4}, + {"matrix": [1, 2], "x": 28, "y": 12, "flags": 4}, + {"matrix": [1, 3], "x": 42, "y": 12, "flags": 4}, + {"matrix": [1, 4], "x": 56, "y": 12, "flags": 4}, + {"matrix": [1, 5], "x": 70, "y": 12, "flags": 4}, + {"matrix": [1, 6], "x": 84, "y": 12, "flags": 4}, + {"matrix": [1, 7], "x": 98, "y": 12, "flags": 4}, + {"matrix": [1, 8], "x": 112, "y": 12, "flags": 4}, + {"matrix": [1, 9], "x": 126, "y": 12, "flags": 4}, + {"matrix": [1, 10], "x": 140, "y": 12, "flags": 4}, + {"matrix": [1, 11], "x": 154, "y": 12, "flags": 4}, + {"matrix": [1, 12], "x": 168, "y": 12, "flags": 4}, + {"matrix": [1, 13], "x": 182, "y": 12, "flags": 4}, + {"matrix": [1, 14], "x": 196, "y": 12, "flags": 4}, + {"matrix": [1, 15], "x": 210, "y": 12, "flags": 4}, + {"matrix": [1, 16], "x": 224, "y": 12, "flags": 4}, + {"matrix": [2, 16], "x": 224, "y": 25, "flags": 4}, + {"matrix": [2, 15], "x": 210, "y": 25, "flags": 4}, + {"matrix": [2, 14], "x": 196, "y": 25, "flags": 4}, + {"matrix": [2, 13], "x": 182, "y": 25, "flags": 4}, + {"matrix": [2, 12], "x": 168, "y": 25, "flags": 4}, + {"matrix": [2, 11], "x": 154, "y": 25, "flags": 4}, + {"matrix": [2, 10], "x": 140, "y": 25, "flags": 4}, + {"matrix": [2, 9], "x": 126, "y": 25, "flags": 4}, + {"matrix": [2, 8], "x": 112, "y": 25, "flags": 4}, + {"matrix": [2, 7], "x": 98, "y": 25, "flags": 4}, + {"matrix": [2, 6], "x": 84, "y": 25, "flags": 4}, + {"matrix": [2, 5], "x": 70, "y": 25, "flags": 4}, + {"matrix": [2, 4], "x": 56, "y": 25, "flags": 4}, + {"matrix": [2, 3], "x": 42, "y": 25, "flags": 4}, + {"matrix": [2, 2], "x": 28, "y": 25, "flags": 4}, + {"matrix": [2, 1], "x": 14, "y": 25, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 25, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 38, "flags": 4}, + {"matrix": [3, 1], "x": 14, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 28, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 42, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 56, "y": 38, "flags": 4}, + {"matrix": [3, 5], "x": 70, "y": 38, "flags": 4}, + {"matrix": [3, 6], "x": 84, "y": 38, "flags": 4}, + {"matrix": [3, 7], "x": 98, "y": 38, "flags": 4}, + {"matrix": [3, 8], "x": 112, "y": 38, "flags": 4}, + {"matrix": [3, 9], "x": 126, "y": 38, "flags": 4}, + {"matrix": [3, 10], "x": 140, "y": 38, "flags": 4}, + {"matrix": [3, 11], "x": 154, "y": 38, "flags": 4}, + {"matrix": [3, 12], "x": 168, "y": 38, "flags": 1}, + {"matrix": [4, 15], "x": 192, "y": 51, "flags": 1}, + {"matrix": [4, 12], "x": 168, "y": 51, "flags": 4}, + {"matrix": [4, 11], "x": 154, "y": 51, "flags": 4}, + {"matrix": [4, 10], "x": 140, "y": 51, "flags": 4}, + {"matrix": [4, 9], "x": 126, "y": 51, "flags": 4}, + {"matrix": [4, 8], "x": 112, "y": 51, "flags": 4}, + {"matrix": [4, 7], "x": 98, "y": 51, "flags": 4}, + {"matrix": [4, 6], "x": 84, "y": 51, "flags": 4}, + {"matrix": [4, 5], "x": 70, "y": 51, "flags": 4}, + {"matrix": [4, 4], "x": 56, "y": 51, "flags": 4}, + {"matrix": [4, 3], "x": 42, "y": 51, "flags": 4}, + {"matrix": [4, 2], "x": 28, "y": 51, "flags": 1}, + {"matrix": [4, 0], "x": 14, "y": 51, "flags": 1}, + {"matrix": [5, 0], "x": 0, "y": 64, "flags": 1}, + {"matrix": [5, 1], "x": 14, "y": 64, "flags": 1}, + {"matrix": [5, 2], "x": 28, "y": 64, "flags": 1}, + {"matrix": [5, 6], "x": 84, "y": 64, "flags": 4}, + {"matrix": [5, 10], "x": 140, "y": 64, "flags": 1}, + {"matrix": [5, 11], "x": 154, "y": 64, "flags": 1}, + {"matrix": [5, 12], "x": 168, "y": 64, "flags": 1}, + {"matrix": [5, 14], "x": 196, "y": 64, "flags": 1}, + {"matrix": [5, 15], "x": 210, "y": 64, "flags": 1}, + {"matrix": [5, 16], "x": 224, "y": 64, "flags": 1} + ], "sleep": true }, "features": { diff --git a/keyboards/adpenrose/akemipad/akemipad.c b/keyboards/adpenrose/akemipad/akemipad.c deleted file mode 100644 index 993396dca0..0000000000 --- a/keyboards/adpenrose/akemipad/akemipad.c +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2022 Arturo Avila (@ADPenrose) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "quantum.h" - -#ifdef RGB_MATRIX_ENABLE - -/* Setting up the LED matrix */ -led_config_t g_led_config = { { - // Key Matrix to LED Index - { 0, 1, 2, 3, NO_LED }, - { 4, 5, 6, 7, NO_LED }, - { 8, 9, 10, 11, 12 }, - { 13, 14, 15, 16, NO_LED }, - { 17, 18, 19, 20, 21 }, - { 22, 23, 24, 25, 26 }, -}, { - // LED Index to Physical Position - { 0,0 }, { 37,0 }, { 74,0 }, {111,0 }, { 0,34 }, { 37,34 }, { 74,34 }, {111,34 }, { 0,62 }, { 37,62 }, - { 74,62 }, {111,62 }, {120,75 }, { 0,89 }, { 37,89 }, { 74,89 }, {111,89 }, { 0,117}, { 37,117}, { 74,117}, - {111,117}, {120,130}, { 0,137}, { 18,144}, { 37,137}, { 74,144}, {111,144} -}, { - // LED Index to Flag - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 -} }; - -#endif diff --git a/keyboards/adpenrose/akemipad/keyboard.json b/keyboards/adpenrose/akemipad/keyboard.json index 085ca5e406..a7981d13ef 100644 --- a/keyboards/adpenrose/akemipad/keyboard.json +++ b/keyboards/adpenrose/akemipad/keyboard.json @@ -15,8 +15,36 @@ "cycle_left_right": true, "cycle_up_down": true }, - "center_point": [60, 77], "driver": "ws2812", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 69, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 138, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 207, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 13, "flags": 4}, + {"matrix": [1, 1], "x": 69, "y": 13, "flags": 4}, + {"matrix": [1, 2], "x": 138, "y": 13, "flags": 4}, + {"matrix": [1, 3], "x": 207, "y": 13, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 26, "flags": 4}, + {"matrix": [2, 1], "x": 69, "y": 26, "flags": 4}, + {"matrix": [2, 2], "x": 138, "y": 26, "flags": 4}, + {"matrix": [2, 3], "x": 207, "y": 26, "flags": 4}, + {"matrix": [2, 4], "x": 224, "y": 30, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 38, "flags": 4}, + {"matrix": [3, 1], "x": 69, "y": 38, "flags": 4}, + {"matrix": [3, 2], "x": 138, "y": 38, "flags": 4}, + {"matrix": [3, 3], "x": 207, "y": 38, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 52, "flags": 4}, + {"matrix": [4, 1], "x": 69, "y": 52, "flags": 4}, + {"matrix": [4, 2], "x": 138, "y": 52, "flags": 4}, + {"matrix": [4, 3], "x": 207, "y": 52, "flags": 4}, + {"matrix": [4, 4], "x": 224, "y": 56, "flags": 4}, + {"matrix": [5, 0], "x": 0, "y": 62, "flags": 4}, + {"matrix": [5, 1], "x": 33, "y": 64, "flags": 4}, + {"matrix": [5, 2], "x": 69, "y": 62, "flags": 4}, + {"matrix": [5, 3], "x": 138, "y": 64, "flags": 4}, + {"matrix": [5, 4], "x": 207, "y": 64, "flags": 4} + ], "max_brightness": 175, "sleep": true }, diff --git a/keyboards/aeboards/satellite/rev1/keyboard.json b/keyboards/aeboards/satellite/rev1/keyboard.json index f9355171fb..a6752565bd 100644 --- a/keyboards/aeboards/satellite/rev1/keyboard.json +++ b/keyboards/aeboards/satellite/rev1/keyboard.json @@ -68,6 +68,80 @@ "val": 80 }, "driver": "custom", + "layout": [ + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 52, "y": 16, "flags": 4}, + {"x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [2, 11], "x": 6, "y": 32, "flags": 1}, + {"matrix": [0, 8], "x": 119, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 9], "x": 134, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 149, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 164, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 179, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 4}, + {"x": 212, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 205, "y": 16, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 4}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 209, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 95, "y": 64, "flags": 4}, + {"matrix": [3, 5], "x": 93, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 78, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 63, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 49, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 34, "y": 48, "flags": 4}, + {"x": 67, "y": 56, "flags": 4}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 21, "y": 64, "flags": 1}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"x": 0, "y": 64, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"x": 175, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 200, "y": 32, "flags": 4}, + {"matrix": [3, 10], "x": 168, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 189, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 209, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 108, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 123, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 138, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 153, "y": 48, "flags": 4}, + {"x": 120, "y": 48, "flags": 4}, + {"x": 120, "y": 56, "flags": 4}, + {"matrix": [4, 9], "x": 153, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 175, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 194, "y": 64, "flags": 1} + ], "sleep": true }, "processor": "atmega32u4", diff --git a/keyboards/aeboards/satellite/rev1/rev1.c b/keyboards/aeboards/satellite/rev1/rev1.c index 28ac5ef302..6e468d713d 100644 --- a/keyboards/aeboards/satellite/rev1/rev1.c +++ b/keyboards/aeboards/satellite/rev1/rev1.c @@ -102,46 +102,6 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {1, C8_16, C7_16, C6_16} //D17 }; -led_config_t g_led_config = { { - { 17, 16, 15, 14, 13, 12, 11, 10, 9, 18, 19, 20, 21, 22, 24 }, - { 7, 6, 6, 4, 4, 2, 1, 0, 27, 18, 29, 30, 31, 32, 25 }, - { 8, 50, 49, 48, 47, 46, 45, 54, 55, 56, 57, 8, 59, NO_LED, 26 }, - { 51, 41, 40, 39, 38, 37, 63, 64, 65, 66, 60, NO_LED, 61, 62, 33 }, - { 52, 44, 43, NO_LED, NO_LED, 36, NO_LED, NO_LED, NO_LED, 69, 70, NO_LED, 71, 35, 34 }, -}, { - //A0 .. A17 - {112,16 }, { 97,16 }, { 82,16 }, { 67,16 }, { 52,16 }, { 37,16 }, { 22,16 }, { 4,16 }, { 6,32 }, - {119,0 }, {105,0 }, { 90,0 }, { 75,0 }, { 60,0 }, { 45,0 }, { 30,0 }, { 15,0 }, { 0,0 }, - - //B0 .. B17 - {134,0 }, {149,0 }, {164,0 }, {179,0 }, {202,0 }, {255,255}, {224,0 }, {224,16 }, {224,32 }, - {127,16 }, {142,16 }, {157,16 }, {172,16 }, {187,16 }, {205,16 }, {224,48 }, {224,64 }, {209,64 }, - - //C0 .. C17 - { 95,64 }, { 93,48 }, { 78,48 }, { 63,48 }, { 49,48 }, { 34,48 }, { 67,56 }, { 39,64 }, { 21,64 }, - {101,32 }, { 86,32 }, { 71,32 }, { 56,32 }, { 41,32 }, { 26,32 }, { 9,48 }, { 2,64 }, {255,255}, - - //D0 .. D17 - {116,32 }, {131,32 }, {146,32 }, {161,32 }, {175,32 }, {200,32 }, {168,48 }, {189,48 }, {209,48 }, - {108,48 }, {123,48 }, {138,48 }, {153,48 }, {255,255}, {120,56 }, {153,64 }, {175,64 }, {194,64 } -}, { - //A0 .. A17 - 4, 4, 4, 4, 4, 4, 4, 1, 1, - 4, 4, 4, 4, 4, 4, 4, 4, 4, - - //B0 .. B17 - 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 1, 1, - - //C0 .. C17 - 4, 4, 4, 4, 4, 4, 4, 1, 1, - 4, 4, 4, 4, 4, 4, 1, 1, 4, - - //D0 .. D17 - 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 1, 1, 1 -} }; - // Custom Driver static void init(void) { i2c_init(); diff --git a/keyboards/aleblazer/zodiark/keyboard.json b/keyboards/aleblazer/zodiark/keyboard.json index 6818797809..396e3ca460 100644 --- a/keyboards/aleblazer/zodiark/keyboard.json +++ b/keyboards/aleblazer/zodiark/keyboard.json @@ -42,6 +42,76 @@ }, "rgb_matrix": { "driver": "ws2812", + "layout": [ + {"matrix": [0, 5], "x": 93, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 74, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 56, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 37, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 19, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 19, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 74, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 93, "y": 16, "flags": 4}, + {"matrix": [0, 6], "x": 112, "y": 24, "flags": 4}, + {"matrix": [1, 6], "x": 112, "y": 40, "flags": 4}, + {"matrix": [2, 5], "x": 93, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 74, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 37, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 19, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4}, + {"matrix": [3, 1], "x": 19, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 37, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 56, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 74, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 93, "y": 48, "flags": 4}, + {"matrix": [2, 6], "x": 112, "y": 52, "flags": 4}, + {"matrix": [4, 6], "x": 112, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 93, "y": 64, "flags": 4}, + {"matrix": [4, 4], "x": 74, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 56, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 37, "y": 64, "flags": 4}, + {"matrix": [4, 1], "x": 19, "y": 64, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [5, 5], "x": 132, "y": 0, "flags": 4}, + {"matrix": [5, 4], "x": 150, "y": 0, "flags": 4}, + {"matrix": [5, 3], "x": 169, "y": 0, "flags": 4}, + {"matrix": [5, 2], "x": 187, "y": 0, "flags": 4}, + {"matrix": [5, 1], "x": 206, "y": 0, "flags": 4}, + {"matrix": [5, 0], "x": 224, "y": 0, "flags": 4}, + {"matrix": [6, 0], "x": 224, "y": 16, "flags": 4}, + {"matrix": [6, 1], "x": 206, "y": 16, "flags": 4}, + {"matrix": [6, 2], "x": 187, "y": 16, "flags": 4}, + {"matrix": [6, 3], "x": 169, "y": 16, "flags": 4}, + {"matrix": [6, 4], "x": 150, "y": 16, "flags": 4}, + {"matrix": [6, 5], "x": 132, "y": 16, "flags": 4}, + {"matrix": [5, 6], "x": 113, "y": 24, "flags": 4}, + {"matrix": [6, 6], "x": 113, "y": 40, "flags": 4}, + {"matrix": [7, 5], "x": 132, "y": 32, "flags": 4}, + {"matrix": [7, 4], "x": 150, "y": 32, "flags": 4}, + {"matrix": [7, 3], "x": 169, "y": 32, "flags": 4}, + {"matrix": [7, 2], "x": 187, "y": 32, "flags": 4}, + {"matrix": [7, 1], "x": 206, "y": 32, "flags": 4}, + {"matrix": [7, 0], "x": 224, "y": 32, "flags": 4}, + {"matrix": [8, 0], "x": 224, "y": 48, "flags": 4}, + {"matrix": [8, 1], "x": 206, "y": 48, "flags": 4}, + {"matrix": [8, 2], "x": 187, "y": 48, "flags": 4}, + {"matrix": [8, 3], "x": 169, "y": 48, "flags": 4}, + {"matrix": [8, 4], "x": 150, "y": 48, "flags": 4}, + {"matrix": [8, 5], "x": 132, "y": 48, "flags": 4}, + {"matrix": [7, 6], "x": 113, "y": 52, "flags": 4}, + {"matrix": [9, 6], "x": 113, "y": 64, "flags": 4}, + {"matrix": [9, 5], "x": 132, "y": 64, "flags": 4}, + {"matrix": [9, 4], "x": 150, "y": 64, "flags": 4}, + {"matrix": [9, 3], "x": 169, "y": 64, "flags": 4}, + {"matrix": [9, 2], "x": 187, "y": 64, "flags": 4}, + {"matrix": [9, 1], "x": 206, "y": 64, "flags": 4}, + {"matrix": [9, 0], "x": 224, "y": 64, "flags": 4} + ], "max_brightness": 150, "sat_steps": 8, "speed_steps": 10, diff --git a/keyboards/aleblazer/zodiark/zodiark.c b/keyboards/aleblazer/zodiark/zodiark.c deleted file mode 100644 index 8829ac8f3c..0000000000 --- a/keyboards/aleblazer/zodiark/zodiark.c +++ /dev/null @@ -1,54 +0,0 @@ -/* -Copyright 2021 Spencer Deven - -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" - -#ifdef RGB_MATRIX_ENABLE -led_config_t g_led_config = { { -// Key Matrix to LED Index - // Left Hand - { 5, 4, 3, 2, 1, 0, 12 }, - { 6, 7, 8, 9, 10, 11, 13 }, - { 19, 18, 17, 16, 15, 14, 26 }, - { 20, 21, 22, 23, 24, 25, NO_LED }, - { 33, 32, 31, 30, 29, 28, 27}, - // Right Hand - { 39, 38, 37, 36, 35, 34, 46 }, - { 40, 41, 42, 43, 44, 45, 47 }, - { 53, 52, 51, 50, 49, 48, 60 }, - { 54, 55, 56, 57, 58, 59, NO_LED }, - { 67, 66, 65, 64, 63, 62, 61 }, - - -}, { - // LED Index to Physical Position - // Left Hand - { 93, 0 }, { 74, 0 }, { 56, 0 }, { 37, 0 }, { 19, 0 }, { 0, 0 }, { 0, 16 }, - { 19, 16 }, { 37, 16 }, { 56, 16 }, { 74, 16 }, { 93, 16 }, { 112, 24 }, { 112, 40 }, - { 93, 32 }, { 74, 32 }, { 56, 32 }, { 37, 32 }, { 19, 32 }, { 0, 32 }, { 0, 48 }, - { 19, 48 }, { 37, 48 }, { 56, 48 }, { 74, 48 }, { 93, 48 }, { 112, 52 }, - { 112, 64 }, { 93, 64 }, { 74, 64 }, { 56, 64 }, { 37, 64 }, { 19, 64 }, { 0, 64 }, - // Right Hand - { 132, 0 }, { 150, 0 }, { 169, 0 }, { 187, 0 }, { 206, 0 }, { 224, 0 }, { 224, 16 }, - { 206, 16 }, { 187, 16 }, { 169, 16 }, { 150, 16 }, { 132, 16 }, { 113, 24 }, { 113, 40 }, - { 132, 32 }, { 150, 32 }, { 169, 32 }, { 187, 32 }, { 206, 32 }, { 224, 32 }, { 224, 48 }, - { 206, 48 }, { 187, 48 }, { 169, 48 }, { 150, 48 }, { 132, 48 }, { 113, 52 }, - { 113, 64 }, { 132, 64 }, { 150, 64 }, { 169, 64 }, { 187, 64 }, { 206, 64 }, { 224, 64 }, -}, { - // LED Index to Flag - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 -} }; -#endif diff --git a/keyboards/axolstudio/yeti/hotswap/hotswap.c b/keyboards/axolstudio/yeti/hotswap/hotswap.c index df64c80953..8cf9d0f0b2 100644 --- a/keyboards/axolstudio/yeti/hotswap/hotswap.c +++ b/keyboards/axolstudio/yeti/hotswap/hotswap.c @@ -87,28 +87,6 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, SW8_CS15, SW7_CS15, SW9_CS15 }, { 0, SW11_CS15, SW10_CS15, SW12_CS15 }, }; - -led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }, - { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, NO_LED, 43 }, - { NO_LED, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, 56 }, - { NO_LED, 57, NO_LED, 58, NO_LED, 59, 60, NO_LED, 61, NO_LED, 62, NO_LED, NO_LED, NO_LED, 63 } - }, { - {0, 0},{16, 0},{32, 0},{48, 0},{64, 0},{80, 0},{96, 0},{112, 0},{128, 0},{144, 0},{160, 0},{176, 0},{192, 0},{208, 0},{224, 0}, - {0, 16},{16,16},{32,16},{48,16},{64,16},{80,16},{96,16},{112,16},{128,16},{144,16},{160,16},{176,16},{192,16},{208,16},{224,16}, - {0,32},{16,32},{32,32},{48,32},{64,32},{80,32},{96,32},{112,32},{128,32},{144,32},{160,32},{176,32},{192,32},{224, 32}, - {16,48},{32,48},{48,48},{64,48},{80,48},{96,48},{112,48},{128,48},{144,48},{160,48},{176,48},{192,48},{224,48}, - {16,64},{48,64},{80,64},{96,64},{128,64},{160,64},{224,64} - }, { - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 4, 1, 4, 1, 1 - } -}; #endif bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { diff --git a/keyboards/axolstudio/yeti/hotswap/keyboard.json b/keyboards/axolstudio/yeti/hotswap/keyboard.json index 5607001287..fb3582e0f1 100644 --- a/keyboards/axolstudio/yeti/hotswap/keyboard.json +++ b/keyboards/axolstudio/yeti/hotswap/keyboard.json @@ -44,6 +44,72 @@ "solid_multisplash": true }, "driver": "is31fl3733", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 1}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 208, "y": 0, "flags": 4}, + {"matrix": [0, 14], "x": 224, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 16, "y": 16, "flags": 1}, + {"matrix": [1, 2], "x": 32, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 48, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 64, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 80, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 96, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 128, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 144, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 160, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 176, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 192, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 208, "y": 16, "flags": 4}, + {"matrix": [1, 14], "x": 224, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 1}, + {"matrix": [2, 1], "x": 16, "y": 32, "flags": 1}, + {"matrix": [2, 2], "x": 32, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 48, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 64, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 80, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 96, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 112, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 128, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 144, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 192, "y": 32, "flags": 4}, + {"matrix": [2, 14], "x": 224, "y": 32, "flags": 1}, + {"matrix": [3, 1], "x": 16, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 32, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 64, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 80, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 96, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 112, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 128, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 144, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 160, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 176, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 192, "y": 48, "flags": 4}, + {"matrix": [3, 14], "x": 224, "y": 48, "flags": 1}, + {"matrix": [4, 1], "x": 16, "y": 64, "flags": 1}, + {"matrix": [4, 3], "x": 48, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 80, "y": 64, "flags": 4}, + {"matrix": [4, 6], "x": 96, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 128, "y": 64, "flags": 4}, + {"matrix": [4, 10], "x": 160, "y": 64, "flags": 1}, + {"matrix": [4, 14], "x": 224, "y": 64, "flags": 1} + ], "sleep": true }, "build": { From fecfc0f7da46dbf6f9d231098bdc51794509cad6 Mon Sep 17 00:00:00 2001 From: James Young <18669334+noroadsleft@users.noreply.github.com> Date: Sat, 4 Oct 2025 17:47:45 -0700 Subject: [PATCH 66/99] `atreus`: restore intended matrix implementations (#24082) * `atreus`: restore intended matrix implementations PR 24010 inadvertently changed the switch matrix for the `atreus/astar_mirrored` keyboard in removing the `PCBDOWN` configuration option, and also made PCB up and down implementations available for all Atreus variants, which is not intended usage. This commit restores the intended behaviour, and makes all the keymaps which are currently present agnostic to hardware variant. --- keyboards/atreus/astar/keyboard.json | 61 +++++++++- keyboards/atreus/astar_mirrored/keyboard.json | 61 +++++++++- keyboards/atreus/f103/keyboard.json | 59 ++++++++++ keyboards/atreus/feather/keyboard.json | 59 ++++++++++ keyboards/atreus/info.json | 111 ------------------ keyboards/atreus/keymaps/default/keymap.c | 6 +- keyboards/atreus/keymaps/workman/keymap.c | 6 +- keyboards/atreus/promicro/keyboard.json | 61 +++++++++- keyboards/atreus/teensy2/keyboard.json | 61 +++++++++- 9 files changed, 364 insertions(+), 121 deletions(-) diff --git a/keyboards/atreus/astar/keyboard.json b/keyboards/atreus/astar/keyboard.json index e201078ffe..b730442a55 100644 --- a/keyboards/atreus/astar/keyboard.json +++ b/keyboards/atreus/astar/keyboard.json @@ -5,5 +5,64 @@ }, "diode_direction": "COL2ROW", "processor": "atmega32u4", - "bootloader": "caterina" + "bootloader": "caterina", + "layout_aliases": { + "LAYOUT_pcb_up": "LAYOUT", + "LAYOUT_pcb_down": "LAYOUT" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0.6}, + {"matrix": [0, 1], "x": 1, "y": 0.35}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0.35}, + {"matrix": [0, 4], "x": 4, "y": 0.7}, + + {"matrix": [0, 6], "x": 8, "y": 0.7}, + {"matrix": [0, 7], "x": 9, "y": 0.35}, + {"matrix": [0, 8], "x": 10, "y": 0}, + {"matrix": [0, 9], "x": 11, "y": 0.35}, + {"matrix": [0, 10], "x": 12, "y": 0.6}, + + {"matrix": [1, 0], "x": 0, "y": 1.6}, + {"matrix": [1, 1], "x": 1, "y": 1.35}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1.35}, + {"matrix": [1, 4], "x": 4, "y": 1.7}, + + {"matrix": [1, 6], "x": 8, "y": 1.7}, + {"matrix": [1, 7], "x": 9, "y": 1.35}, + {"matrix": [1, 8], "x": 10, "y": 1}, + {"matrix": [1, 9], "x": 11, "y": 1.35}, + {"matrix": [1, 10], "x": 12, "y": 1.6}, + + {"matrix": [2, 0], "x": 0, "y": 2.6}, + {"matrix": [2, 1], "x": 1, "y": 2.35}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2.35}, + {"matrix": [2, 4], "x": 4, "y": 2.7}, + + {"matrix": [2, 6], "x": 8, "y": 2.7}, + {"matrix": [2, 7], "x": 9, "y": 2.35}, + {"matrix": [2, 8], "x": 10, "y": 2}, + {"matrix": [2, 9], "x": 11, "y": 2.35}, + {"matrix": [2, 10], "x": 12, "y": 2.6}, + + {"matrix": [3, 0], "x": 0, "y": 3.6}, + {"matrix": [3, 1], "x": 1, "y": 3.35}, + {"matrix": [3, 2], "x": 2, "y": 3}, + {"matrix": [3, 3], "x": 3, "y": 3.35}, + {"matrix": [3, 4], "x": 4, "y": 3.7}, + {"matrix": [2, 5], "x": 5, "y": 2.95, "h": 1.5}, + + {"matrix": [3, 5], "x": 7, "y": 2.95, "h": 1.5}, + {"matrix": [3, 6], "x": 8, "y": 3.7}, + {"matrix": [3, 7], "x": 9, "y": 3.35}, + {"matrix": [3, 8], "x": 10, "y": 3}, + {"matrix": [3, 9], "x": 11, "y": 3.35}, + {"matrix": [3, 10], "x": 12, "y": 3.6} + ] + } + } } diff --git a/keyboards/atreus/astar_mirrored/keyboard.json b/keyboards/atreus/astar_mirrored/keyboard.json index b83be5d29d..ae687c9d2b 100644 --- a/keyboards/atreus/astar_mirrored/keyboard.json +++ b/keyboards/atreus/astar_mirrored/keyboard.json @@ -5,5 +5,64 @@ }, "diode_direction": "COL2ROW", "processor": "atmega32u4", - "bootloader": "caterina" + "bootloader": "caterina", + "layout_aliases": { + "LAYOUT_pcb_up": "LAYOUT", + "LAYOUT_pcb_down": "LAYOUT" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0.6}, + {"matrix": [0, 1], "x": 1, "y": 0.35}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0.35}, + {"matrix": [0, 4], "x": 4, "y": 0.7}, + + {"matrix": [0, 6], "x": 8, "y": 0.7}, + {"matrix": [0, 7], "x": 9, "y": 0.35}, + {"matrix": [0, 8], "x": 10, "y": 0}, + {"matrix": [0, 9], "x": 11, "y": 0.35}, + {"matrix": [0, 10], "x": 12, "y": 0.6}, + + {"matrix": [1, 0], "x": 0, "y": 1.6}, + {"matrix": [1, 1], "x": 1, "y": 1.35}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1.35}, + {"matrix": [1, 4], "x": 4, "y": 1.7}, + + {"matrix": [1, 6], "x": 8, "y": 1.7}, + {"matrix": [1, 7], "x": 9, "y": 1.35}, + {"matrix": [1, 8], "x": 10, "y": 1}, + {"matrix": [1, 9], "x": 11, "y": 1.35}, + {"matrix": [1, 10], "x": 12, "y": 1.6}, + + {"matrix": [2, 0], "x": 0, "y": 2.6}, + {"matrix": [2, 1], "x": 1, "y": 2.35}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2.35}, + {"matrix": [2, 4], "x": 4, "y": 2.7}, + + {"matrix": [2, 6], "x": 8, "y": 2.7}, + {"matrix": [2, 7], "x": 9, "y": 2.35}, + {"matrix": [2, 8], "x": 10, "y": 2}, + {"matrix": [2, 9], "x": 11, "y": 2.35}, + {"matrix": [2, 10], "x": 12, "y": 2.6}, + + {"matrix": [3, 0], "x": 0, "y": 3.6}, + {"matrix": [3, 1], "x": 1, "y": 3.35}, + {"matrix": [3, 2], "x": 2, "y": 3}, + {"matrix": [3, 3], "x": 3, "y": 3.35}, + {"matrix": [3, 4], "x": 4, "y": 3.7}, + {"matrix": [3, 5], "x": 5, "y": 2.95, "h": 1.5}, + + {"matrix": [2, 5], "x": 7, "y": 2.95, "h": 1.5}, + {"matrix": [3, 6], "x": 8, "y": 3.7}, + {"matrix": [3, 7], "x": 9, "y": 3.35}, + {"matrix": [3, 8], "x": 10, "y": 3}, + {"matrix": [3, 9], "x": 11, "y": 3.35}, + {"matrix": [3, 10], "x": 12, "y": 3.6} + ] + } + } } diff --git a/keyboards/atreus/f103/keyboard.json b/keyboards/atreus/f103/keyboard.json index 813ef97e37..fb49c0c1ca 100644 --- a/keyboards/atreus/f103/keyboard.json +++ b/keyboards/atreus/f103/keyboard.json @@ -8,5 +8,64 @@ "bootloader": "stm32duino", "features": { "bootmagic": true + }, + "layout_aliases": { + "LAYOUT_pcb_up": "LAYOUT", + "LAYOUT_pcb_down": "LAYOUT" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0.6}, + {"matrix": [0, 1], "x": 1, "y": 0.35}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0.35}, + {"matrix": [0, 4], "x": 4, "y": 0.7}, + + {"matrix": [0, 6], "x": 8, "y": 0.7}, + {"matrix": [0, 7], "x": 9, "y": 0.35}, + {"matrix": [0, 8], "x": 10, "y": 0}, + {"matrix": [0, 9], "x": 11, "y": 0.35}, + {"matrix": [0, 10], "x": 12, "y": 0.6}, + + {"matrix": [1, 0], "x": 0, "y": 1.6}, + {"matrix": [1, 1], "x": 1, "y": 1.35}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1.35}, + {"matrix": [1, 4], "x": 4, "y": 1.7}, + + {"matrix": [1, 6], "x": 8, "y": 1.7}, + {"matrix": [1, 7], "x": 9, "y": 1.35}, + {"matrix": [1, 8], "x": 10, "y": 1}, + {"matrix": [1, 9], "x": 11, "y": 1.35}, + {"matrix": [1, 10], "x": 12, "y": 1.6}, + + {"matrix": [2, 0], "x": 0, "y": 2.6}, + {"matrix": [2, 1], "x": 1, "y": 2.35}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2.35}, + {"matrix": [2, 4], "x": 4, "y": 2.7}, + + {"matrix": [2, 6], "x": 8, "y": 2.7}, + {"matrix": [2, 7], "x": 9, "y": 2.35}, + {"matrix": [2, 8], "x": 10, "y": 2}, + {"matrix": [2, 9], "x": 11, "y": 2.35}, + {"matrix": [2, 10], "x": 12, "y": 2.6}, + + {"matrix": [3, 0], "x": 0, "y": 3.6}, + {"matrix": [3, 1], "x": 1, "y": 3.35}, + {"matrix": [3, 2], "x": 2, "y": 3}, + {"matrix": [3, 3], "x": 3, "y": 3.35}, + {"matrix": [3, 4], "x": 4, "y": 3.7}, + {"matrix": [2, 5], "x": 5, "y": 2.95, "h": 1.5}, + + {"matrix": [3, 5], "x": 7, "y": 2.95, "h": 1.5}, + {"matrix": [3, 6], "x": 8, "y": 3.7}, + {"matrix": [3, 7], "x": 9, "y": 3.35}, + {"matrix": [3, 8], "x": 10, "y": 3}, + {"matrix": [3, 9], "x": 11, "y": 3.35}, + {"matrix": [3, 10], "x": 12, "y": 3.6} + ] + } } } diff --git a/keyboards/atreus/feather/keyboard.json b/keyboards/atreus/feather/keyboard.json index 1392849fd4..12468218ec 100644 --- a/keyboards/atreus/feather/keyboard.json +++ b/keyboards/atreus/feather/keyboard.json @@ -14,5 +14,64 @@ }, "bluetooth": { "driver": "bluefruit_le" + }, + "layout_aliases": { + "LAYOUT_pcb_up": "LAYOUT", + "LAYOUT_pcb_down": "LAYOUT" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0.6}, + {"matrix": [0, 1], "x": 1, "y": 0.35}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0.35}, + {"matrix": [0, 4], "x": 4, "y": 0.7}, + + {"matrix": [0, 6], "x": 8, "y": 0.7}, + {"matrix": [0, 7], "x": 9, "y": 0.35}, + {"matrix": [0, 8], "x": 10, "y": 0}, + {"matrix": [0, 9], "x": 11, "y": 0.35}, + {"matrix": [0, 10], "x": 12, "y": 0.6}, + + {"matrix": [1, 0], "x": 0, "y": 1.6}, + {"matrix": [1, 1], "x": 1, "y": 1.35}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1.35}, + {"matrix": [1, 4], "x": 4, "y": 1.7}, + + {"matrix": [1, 6], "x": 8, "y": 1.7}, + {"matrix": [1, 7], "x": 9, "y": 1.35}, + {"matrix": [1, 8], "x": 10, "y": 1}, + {"matrix": [1, 9], "x": 11, "y": 1.35}, + {"matrix": [1, 10], "x": 12, "y": 1.6}, + + {"matrix": [2, 0], "x": 0, "y": 2.6}, + {"matrix": [2, 1], "x": 1, "y": 2.35}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2.35}, + {"matrix": [2, 4], "x": 4, "y": 2.7}, + + {"matrix": [2, 6], "x": 8, "y": 2.7}, + {"matrix": [2, 7], "x": 9, "y": 2.35}, + {"matrix": [2, 8], "x": 10, "y": 2}, + {"matrix": [2, 9], "x": 11, "y": 2.35}, + {"matrix": [2, 10], "x": 12, "y": 2.6}, + + {"matrix": [3, 0], "x": 0, "y": 3.6}, + {"matrix": [3, 1], "x": 1, "y": 3.35}, + {"matrix": [3, 2], "x": 2, "y": 3}, + {"matrix": [3, 3], "x": 3, "y": 3.35}, + {"matrix": [3, 4], "x": 4, "y": 3.7}, + {"matrix": [2, 5], "x": 5, "y": 2.95, "h": 1.5}, + + {"matrix": [3, 5], "x": 7, "y": 2.95, "h": 1.5}, + {"matrix": [3, 6], "x": 8, "y": 3.7}, + {"matrix": [3, 7], "x": 9, "y": 3.35}, + {"matrix": [3, 8], "x": 10, "y": 3}, + {"matrix": [3, 9], "x": 11, "y": 3.35}, + {"matrix": [3, 10], "x": 12, "y": 3.6} + ] + } } } diff --git a/keyboards/atreus/info.json b/keyboards/atreus/info.json index cf53b506a0..b479c96542 100644 --- a/keyboards/atreus/info.json +++ b/keyboards/atreus/info.json @@ -21,116 +21,5 @@ "enabled": true, "resync": true } - }, - "layout_aliases": { - "LAYOUT": "LAYOUT_pcb_up" - }, - "layouts": { - "LAYOUT_pcb_up": { - "layout": [ - {"matrix": [0, 0], "x": 0, "y": 0.6}, - {"matrix": [0, 1], "x": 1, "y": 0.35}, - {"matrix": [0, 2], "x": 2, "y": 0}, - {"matrix": [0, 3], "x": 3, "y": 0.35}, - {"matrix": [0, 4], "x": 4, "y": 0.7}, - - {"matrix": [0, 6], "x": 8, "y": 0.7}, - {"matrix": [0, 7], "x": 9, "y": 0.35}, - {"matrix": [0, 8], "x": 10, "y": 0}, - {"matrix": [0, 9], "x": 11, "y": 0.35}, - {"matrix": [0, 10], "x": 12, "y": 0.6}, - - {"matrix": [1, 0], "x": 0, "y": 1.6}, - {"matrix": [1, 1], "x": 1, "y": 1.35}, - {"matrix": [1, 2], "x": 2, "y": 1}, - {"matrix": [1, 3], "x": 3, "y": 1.35}, - {"matrix": [1, 4], "x": 4, "y": 1.7}, - - {"matrix": [1, 6], "x": 8, "y": 1.7}, - {"matrix": [1, 7], "x": 9, "y": 1.35}, - {"matrix": [1, 8], "x": 10, "y": 1}, - {"matrix": [1, 9], "x": 11, "y": 1.35}, - {"matrix": [1, 10], "x": 12, "y": 1.6}, - - {"matrix": [2, 0], "x": 0, "y": 2.6}, - {"matrix": [2, 1], "x": 1, "y": 2.35}, - {"matrix": [2, 2], "x": 2, "y": 2}, - {"matrix": [2, 3], "x": 3, "y": 2.35}, - {"matrix": [2, 4], "x": 4, "y": 2.7}, - - {"matrix": [2, 6], "x": 8, "y": 2.7}, - {"matrix": [2, 7], "x": 9, "y": 2.35}, - {"matrix": [2, 8], "x": 10, "y": 2}, - {"matrix": [2, 9], "x": 11, "y": 2.35}, - {"matrix": [2, 10], "x": 12, "y": 2.6}, - - {"matrix": [3, 0], "x": 0, "y": 3.6}, - {"matrix": [3, 1], "x": 1, "y": 3.35}, - {"matrix": [3, 2], "x": 2, "y": 3}, - {"matrix": [3, 3], "x": 3, "y": 3.35}, - {"matrix": [3, 4], "x": 4, "y": 3.7}, - {"matrix": [2, 5], "x": 5, "y": 2.95, "h": 1.5}, - - {"matrix": [3, 5], "x": 7, "y": 2.95, "h": 1.5}, - {"matrix": [3, 6], "x": 8, "y": 3.7}, - {"matrix": [3, 7], "x": 9, "y": 3.35}, - {"matrix": [3, 8], "x": 10, "y": 3}, - {"matrix": [3, 9], "x": 11, "y": 3.35}, - {"matrix": [3, 10], "x": 12, "y": 3.6} - ] - }, - "LAYOUT_pcb_down": { - "layout": [ - {"matrix": [0, 0], "x": 0, "y": 0.6}, - {"matrix": [0, 1], "x": 1, "y": 0.35}, - {"matrix": [0, 2], "x": 2, "y": 0}, - {"matrix": [0, 3], "x": 3, "y": 0.35}, - {"matrix": [0, 4], "x": 4, "y": 0.7}, - - {"matrix": [0, 6], "x": 8, "y": 0.7}, - {"matrix": [0, 7], "x": 9, "y": 0.35}, - {"matrix": [0, 8], "x": 10, "y": 0}, - {"matrix": [0, 9], "x": 11, "y": 0.35}, - {"matrix": [0, 10], "x": 12, "y": 0.6}, - - {"matrix": [1, 0], "x": 0, "y": 1.6}, - {"matrix": [1, 1], "x": 1, "y": 1.35}, - {"matrix": [1, 2], "x": 2, "y": 1}, - {"matrix": [1, 3], "x": 3, "y": 1.35}, - {"matrix": [1, 4], "x": 4, "y": 1.7}, - - {"matrix": [1, 6], "x": 8, "y": 1.7}, - {"matrix": [1, 7], "x": 9, "y": 1.35}, - {"matrix": [1, 8], "x": 10, "y": 1}, - {"matrix": [1, 9], "x": 11, "y": 1.35}, - {"matrix": [1, 10], "x": 12, "y": 1.6}, - - {"matrix": [2, 0], "x": 0, "y": 2.6}, - {"matrix": [2, 1], "x": 1, "y": 2.35}, - {"matrix": [2, 2], "x": 2, "y": 2}, - {"matrix": [2, 3], "x": 3, "y": 2.35}, - {"matrix": [2, 4], "x": 4, "y": 2.7}, - - {"matrix": [2, 6], "x": 8, "y": 2.7}, - {"matrix": [2, 7], "x": 9, "y": 2.35}, - {"matrix": [2, 8], "x": 10, "y": 2}, - {"matrix": [2, 9], "x": 11, "y": 2.35}, - {"matrix": [2, 10], "x": 12, "y": 2.6}, - - {"matrix": [3, 0], "x": 0, "y": 3.6}, - {"matrix": [3, 1], "x": 1, "y": 3.35}, - {"matrix": [3, 2], "x": 2, "y": 3}, - {"matrix": [3, 3], "x": 3, "y": 3.35}, - {"matrix": [3, 4], "x": 4, "y": 3.7}, - {"matrix": [3, 5], "x": 5, "y": 2.95, "h": 1.5}, - - {"matrix": [2, 5], "x": 7, "y": 2.95, "h": 1.5}, - {"matrix": [3, 6], "x": 8, "y": 3.7}, - {"matrix": [3, 7], "x": 9, "y": 3.35}, - {"matrix": [3, 8], "x": 10, "y": 3}, - {"matrix": [3, 9], "x": 11, "y": 3.35}, - {"matrix": [3, 10], "x": 12, "y": 3.6} - ] - } } } diff --git a/keyboards/atreus/keymaps/default/keymap.c b/keyboards/atreus/keymaps/default/keymap.c index e458810537..ca1333230c 100644 --- a/keyboards/atreus/keymaps/default/keymap.c +++ b/keyboards/atreus/keymaps/default/keymap.c @@ -12,7 +12,7 @@ #define _LW 2 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QW] = LAYOUT_pcb_up( /* Qwerty */ + [_QW] = LAYOUT( /* Qwerty */ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH , @@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * [ ] ( ) & || ` 1 2 3 \ * lower insert super shift bksp ctrl || alt space fn . 0 = */ - [_RS] = LAYOUT_pcb_up( /* [> RAISE <] */ + [_RS] = LAYOUT( /* [> RAISE <] */ KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR , KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS , KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS , @@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * volup reset || F1 F2 F3 F12 * voldn super shift bksp ctrl || alt space L0 prtsc scroll pause */ - [_LW] = LAYOUT_pcb_up( /* [> LOWER <] */ + [_LW] = LAYOUT( /* [> LOWER <] */ KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10 , KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11 , KC_NO, KC_VOLU, KC_NO, KC_NO, QK_BOOT, KC_NO, KC_F1, KC_F2, KC_F3, KC_F12 , diff --git a/keyboards/atreus/keymaps/workman/keymap.c b/keyboards/atreus/keymaps/workman/keymap.c index e8b5b6b4e3..c0633f6362 100644 --- a/keyboards/atreus/keymaps/workman/keymap.c +++ b/keyboards/atreus/keymaps/workman/keymap.c @@ -25,7 +25,7 @@ enum custom_keycodes { */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QW] = LAYOUT_pcb_down( /* Workman */ + [_QW] = LAYOUT( /* Workman */ KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, @@ -39,7 +39,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * menu caps < > del || _ 0 = */ - [_RS] = LAYOUT_pcb_down( /* [> RAISE <] */ + [_RS] = LAYOUT( /* [> RAISE <] */ KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_MINS, KC_7, KC_8, KC_9, KC_ASTR, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_DOT, KC_4, KC_5, KC_6, KC_PLUS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, @@ -52,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * || – ¨ reset */ - [_LW] = LAYOUT_pcb_down( /* [> LOWER <] */ + [_LW] = LAYOUT( /* [> LOWER <] */ KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_VOLU, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_VOLD, KC_F4, KC_F5, KC_F6, KC_F11, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_F1, KC_F2, KC_F3, KC_F12, diff --git a/keyboards/atreus/promicro/keyboard.json b/keyboards/atreus/promicro/keyboard.json index 10c0ca1b22..9f7e50526c 100644 --- a/keyboards/atreus/promicro/keyboard.json +++ b/keyboards/atreus/promicro/keyboard.json @@ -4,5 +4,64 @@ "rows": ["F4", "B2", "B4", "B5"] }, "diode_direction": "COL2ROW", - "development_board": "promicro" + "development_board": "promicro", + "layout_aliases": { + "LAYOUT_pcb_up": "LAYOUT", + "LAYOUT_pcb_down": "LAYOUT" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0.6}, + {"matrix": [0, 1], "x": 1, "y": 0.35}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0.35}, + {"matrix": [0, 4], "x": 4, "y": 0.7}, + + {"matrix": [0, 6], "x": 8, "y": 0.7}, + {"matrix": [0, 7], "x": 9, "y": 0.35}, + {"matrix": [0, 8], "x": 10, "y": 0}, + {"matrix": [0, 9], "x": 11, "y": 0.35}, + {"matrix": [0, 10], "x": 12, "y": 0.6}, + + {"matrix": [1, 0], "x": 0, "y": 1.6}, + {"matrix": [1, 1], "x": 1, "y": 1.35}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1.35}, + {"matrix": [1, 4], "x": 4, "y": 1.7}, + + {"matrix": [1, 6], "x": 8, "y": 1.7}, + {"matrix": [1, 7], "x": 9, "y": 1.35}, + {"matrix": [1, 8], "x": 10, "y": 1}, + {"matrix": [1, 9], "x": 11, "y": 1.35}, + {"matrix": [1, 10], "x": 12, "y": 1.6}, + + {"matrix": [2, 0], "x": 0, "y": 2.6}, + {"matrix": [2, 1], "x": 1, "y": 2.35}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2.35}, + {"matrix": [2, 4], "x": 4, "y": 2.7}, + + {"matrix": [2, 6], "x": 8, "y": 2.7}, + {"matrix": [2, 7], "x": 9, "y": 2.35}, + {"matrix": [2, 8], "x": 10, "y": 2}, + {"matrix": [2, 9], "x": 11, "y": 2.35}, + {"matrix": [2, 10], "x": 12, "y": 2.6}, + + {"matrix": [3, 0], "x": 0, "y": 3.6}, + {"matrix": [3, 1], "x": 1, "y": 3.35}, + {"matrix": [3, 2], "x": 2, "y": 3}, + {"matrix": [3, 3], "x": 3, "y": 3.35}, + {"matrix": [3, 4], "x": 4, "y": 3.7}, + {"matrix": [2, 5], "x": 5, "y": 2.95, "h": 1.5}, + + {"matrix": [3, 5], "x": 7, "y": 2.95, "h": 1.5}, + {"matrix": [3, 6], "x": 8, "y": 3.7}, + {"matrix": [3, 7], "x": 9, "y": 3.35}, + {"matrix": [3, 8], "x": 10, "y": 3}, + {"matrix": [3, 9], "x": 11, "y": 3.35}, + {"matrix": [3, 10], "x": 12, "y": 3.6} + ] + } + } } diff --git a/keyboards/atreus/teensy2/keyboard.json b/keyboards/atreus/teensy2/keyboard.json index 067ea9a01d..bdcc8f394d 100644 --- a/keyboards/atreus/teensy2/keyboard.json +++ b/keyboards/atreus/teensy2/keyboard.json @@ -5,5 +5,64 @@ }, "diode_direction": "COL2ROW", "processor": "atmega32u4", - "bootloader": "halfkay" + "bootloader": "halfkay", + "layout_aliases": { + "LAYOUT_pcb_up": "LAYOUT", + "LAYOUT_pcb_down": "LAYOUT" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0.6}, + {"matrix": [0, 1], "x": 1, "y": 0.35}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0.35}, + {"matrix": [0, 4], "x": 4, "y": 0.7}, + + {"matrix": [0, 6], "x": 8, "y": 0.7}, + {"matrix": [0, 7], "x": 9, "y": 0.35}, + {"matrix": [0, 8], "x": 10, "y": 0}, + {"matrix": [0, 9], "x": 11, "y": 0.35}, + {"matrix": [0, 10], "x": 12, "y": 0.6}, + + {"matrix": [1, 0], "x": 0, "y": 1.6}, + {"matrix": [1, 1], "x": 1, "y": 1.35}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1.35}, + {"matrix": [1, 4], "x": 4, "y": 1.7}, + + {"matrix": [1, 6], "x": 8, "y": 1.7}, + {"matrix": [1, 7], "x": 9, "y": 1.35}, + {"matrix": [1, 8], "x": 10, "y": 1}, + {"matrix": [1, 9], "x": 11, "y": 1.35}, + {"matrix": [1, 10], "x": 12, "y": 1.6}, + + {"matrix": [2, 0], "x": 0, "y": 2.6}, + {"matrix": [2, 1], "x": 1, "y": 2.35}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2.35}, + {"matrix": [2, 4], "x": 4, "y": 2.7}, + + {"matrix": [2, 6], "x": 8, "y": 2.7}, + {"matrix": [2, 7], "x": 9, "y": 2.35}, + {"matrix": [2, 8], "x": 10, "y": 2}, + {"matrix": [2, 9], "x": 11, "y": 2.35}, + {"matrix": [2, 10], "x": 12, "y": 2.6}, + + {"matrix": [3, 0], "x": 0, "y": 3.6}, + {"matrix": [3, 1], "x": 1, "y": 3.35}, + {"matrix": [3, 2], "x": 2, "y": 3}, + {"matrix": [3, 3], "x": 3, "y": 3.35}, + {"matrix": [3, 4], "x": 4, "y": 3.7}, + {"matrix": [2, 5], "x": 5, "y": 2.95, "h": 1.5}, + + {"matrix": [3, 5], "x": 7, "y": 2.95, "h": 1.5}, + {"matrix": [3, 6], "x": 8, "y": 3.7}, + {"matrix": [3, 7], "x": 9, "y": 3.35}, + {"matrix": [3, 8], "x": 10, "y": 3}, + {"matrix": [3, 9], "x": 11, "y": 3.35}, + {"matrix": [3, 10], "x": 12, "y": 3.6} + ] + } + } } From 05355bc49d9e5ff764cb3d2c9272bb941651ddd1 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Sun, 5 Oct 2025 21:06:55 -0600 Subject: [PATCH 67/99] Fixup `rgbkb/pan` (#25678) Tidy up rgbkb/pan - Migrate g_led_config to DD and fix coordinates - Remove RGBLight configuration - Migrate keymaps to JSON - Move keymap OLED code to keyboard level - Remove cutom layout selection logic (post_rules.mk) - Use short SPDX license headers --- keyboards/rgbkb/pan/config.h | 19 +-- keyboards/rgbkb/pan/info.json | 82 ++++++++--- keyboards/rgbkb/pan/keymaps/default/keymap.c | 116 ---------------- .../rgbkb/pan/keymaps/default/keymap.json | 35 +++++ keyboards/rgbkb/pan/keymaps/default/rules.mk | 3 - .../rgbkb/pan/keymaps/default_eee/keymap.c | 116 ---------------- .../rgbkb/pan/keymaps/default_eee/keymap.json | 35 +++++ .../rgbkb/pan/keymaps/default_eee/rules.mk | 3 - .../rgbkb/pan/keymaps/default_sss/keymap.c | 116 ---------------- .../rgbkb/pan/keymaps/default_sss/keymap.json | 35 +++++ .../rgbkb/pan/keymaps/default_sss/rules.mk | 3 - keyboards/rgbkb/pan/pan.c | 130 +++++------------- keyboards/rgbkb/pan/post_rules.mk | 28 ---- 13 files changed, 208 insertions(+), 513 deletions(-) delete mode 100644 keyboards/rgbkb/pan/keymaps/default/keymap.c create mode 100644 keyboards/rgbkb/pan/keymaps/default/keymap.json delete mode 100644 keyboards/rgbkb/pan/keymaps/default/rules.mk delete mode 100644 keyboards/rgbkb/pan/keymaps/default_eee/keymap.c create mode 100644 keyboards/rgbkb/pan/keymaps/default_eee/keymap.json delete mode 100644 keyboards/rgbkb/pan/keymaps/default_eee/rules.mk delete mode 100644 keyboards/rgbkb/pan/keymaps/default_sss/keymap.c create mode 100644 keyboards/rgbkb/pan/keymaps/default_sss/keymap.json delete mode 100644 keyboards/rgbkb/pan/keymaps/default_sss/rules.mk delete mode 100644 keyboards/rgbkb/pan/post_rules.mk diff --git a/keyboards/rgbkb/pan/config.h b/keyboards/rgbkb/pan/config.h index be719c1437..29b60e739c 100644 --- a/keyboards/rgbkb/pan/config.h +++ b/keyboards/rgbkb/pan/config.h @@ -1,20 +1,5 @@ -/*Copyright 2020 RGBKB - -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 2020 RGBKB +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#define RGB_MATRIX_LED_COUNT 64 #define WS2812_LED_COUNT 64 diff --git a/keyboards/rgbkb/pan/info.json b/keyboards/rgbkb/pan/info.json index ad56ba5e4b..4358881075 100644 --- a/keyboards/rgbkb/pan/info.json +++ b/keyboards/rgbkb/pan/info.json @@ -66,23 +66,71 @@ "solid_splash": true, "solid_multisplash": true }, - "driver": "custom" - }, - "rgblight": { - "led_count": 64, - "max_brightness": 120, - "animations": { - "breathing": true, - "rainbow_mood": true, - "rainbow_swirl": true, - "snake": true, - "knight": true, - "christmas": true, - "static_gradient": true, - "rgb_test": true, - "alternating": true, - "twinkle": true - } + "driver": "custom", + "layout": [ + {"x": 0, "y": 0, "flags": 1}, + {"x": 224, "y": 0, "flags": 1}, + {"matrix": [0, 0], "x": 9, "y": 13, "flags": 1}, + {"matrix": [0, 1], "x": 28, "y": 13, "flags": 4}, + {"matrix": [0, 2], "x": 47, "y": 13, "flags": 4}, + {"matrix": [0, 3], "x": 66, "y": 13, "flags": 4}, + {"matrix": [0, 4], "x": 84, "y": 13, "flags": 4}, + {"matrix": [0, 5], "x": 104, "y": 13, "flags": 4}, + {"matrix": [0, 6], "x": 123, "y": 13, "flags": 4}, + {"matrix": [0, 7], "x": 142, "y": 13, "flags": 4}, + {"matrix": [0, 8], "x": 161, "y": 13, "flags": 4}, + {"matrix": [0, 9], "x": 180, "y": 13, "flags": 4}, + {"matrix": [0, 10], "x": 199, "y": 13, "flags": 4}, + {"matrix": [0, 12], "x": 215, "y": 13, "flags": 1}, + {"matrix": [1, 11], "x": 215, "y": 26, "flags": 1}, + {"matrix": [1, 10], "x": 199, "y": 26, "flags": 4}, + {"matrix": [1, 9], "x": 180, "y": 26, "flags": 4}, + {"matrix": [1, 8], "x": 161, "y": 26, "flags": 4}, + {"matrix": [1, 7], "x": 142, "y": 26, "flags": 4}, + {"matrix": [1, 6], "x": 123, "y": 26, "flags": 4}, + {"matrix": [1, 5], "x": 104, "y": 26, "flags": 4}, + {"matrix": [1, 4], "x": 84, "y": 26, "flags": 4}, + {"matrix": [1, 3], "x": 66, "y": 26, "flags": 4}, + {"matrix": [1, 2], "x": 47, "y": 26, "flags": 4}, + {"matrix": [1, 1], "x": 28, "y": 26, "flags": 4}, + {"matrix": [1, 0], "x": 9, "y": 26, "flags": 1}, + {"matrix": [2, 0], "x": 9, "y": 38, "flags": 1}, + {"matrix": [2, 1], "x": 28, "y": 38, "flags": 4}, + {"matrix": [2, 2], "x": 47, "y": 38, "flags": 4}, + {"matrix": [2, 3], "x": 66, "y": 38, "flags": 4}, + {"matrix": [2, 4], "x": 84, "y": 38, "flags": 4}, + {"matrix": [2, 5], "x": 104, "y": 38, "flags": 4}, + {"matrix": [2, 6], "x": 123, "y": 38, "flags": 4}, + {"matrix": [2, 7], "x": 142, "y": 38, "flags": 4}, + {"matrix": [2, 8], "x": 161, "y": 38, "flags": 4}, + {"matrix": [2, 9], "x": 180, "y": 38, "flags": 4}, + {"matrix": [2, 10], "x": 199, "y": 38, "flags": 4}, + {"matrix": [2, 11], "x": 215, "y": 38, "flags": 1}, + {"matrix": [3, 12], "x": 215, "y": 51, "flags": 1}, + {"matrix": [3, 10], "x": 199, "y": 51, "flags": 4}, + {"matrix": [3, 9], "x": 180, "y": 51, "flags": 4}, + {"matrix": [3, 8], "x": 161, "y": 51, "flags": 4}, + {"matrix": [3, 7], "x": 142, "y": 51, "flags": 4}, + {"matrix": [3, 6], "x": 123, "y": 51, "flags": 4}, + {"matrix": [3, 5], "x": 104, "y": 51, "flags": 4}, + {"matrix": [3, 4], "x": 84, "y": 51, "flags": 4}, + {"matrix": [3, 3], "x": 66, "y": 51, "flags": 4}, + {"matrix": [3, 2], "x": 47, "y": 51, "flags": 4}, + {"matrix": [3, 1], "x": 28, "y": 51, "flags": 4}, + {"matrix": [3, 0], "x": 9, "y": 51, "flags": 1}, + {"matrix": [4, 0], "x": 9, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 28, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 47, "y": 64, "flags": 1}, + {"matrix": [4, 3], "x": 66, "y": 64, "flags": 1}, + {"matrix": [4, 4], "x": 84, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 104, "y": 64, "flags": 1}, + {"matrix": [4, 6], "x": 123, "y": 64, "flags": 1}, + {"matrix": [4, 7], "x": 142, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 161, "y": 64, "flags": 1}, + {"matrix": [4, 9], "x": 180, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 199, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 215, "y": 64, "flags": 1} + ] }, "layouts": { "LAYOUT_all": { diff --git a/keyboards/rgbkb/pan/keymaps/default/keymap.c b/keyboards/rgbkb/pan/keymaps/default/keymap.c deleted file mode 100644 index 3647ae2ad6..0000000000 --- a/keyboards/rgbkb/pan/keymaps/default/keymap.c +++ /dev/null @@ -1,116 +0,0 @@ - /* Copyright 2020 RGBKB - * - * 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 . - */ -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -#include QMK_KEYBOARD_H - -enum layer_number { - _QWERTY, - _COLEMAK, - _FN, - _ADJ -}; - -#define FN_ESC LT(_FN, KC_ESC) -#define FN_CAPS LT(_FN, KC_CAPS) -#define QWERTY DF(_QWERTY) -#define COLEMAK DF(_COLEMAK) - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = LAYOUT_all( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_DEL, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, - KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, - KC_LCTL, KC_LGUI, KC_LALT, RM_TOGG, MO(_ADJ),KC_SPC, KC_SPC, MO(_FN), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT - ), - - [_COLEMAK] = LAYOUT_all( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_DEL, - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, - FN_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_RSPC, KC_ENT, - KC_LCTL, KC_LGUI, KC_LALT, RM_TOGG, MO(_ADJ),KC_SPC, KC_SPC, MO(_FN), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT - ), - - [_FN] = LAYOUT_all( - 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_PGDN, KC_UP, KC_PGUP, _______, _______, _______, KC_PGDN, KC_UP, KC_PGUP, KC_PSCR, KC_HOME, - _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_END, - _______, _______, _______, _______, _______, _______, _______, KC_LBRC, _______, KC_RBRC, _______, _______, _______, - _______, _______, _______, RM_NEXT, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - [_ADJ] = LAYOUT_all( - 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, - _______, RM_SATD, RM_VALU, RM_SATU, QK_BOOT, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______, - _______, RM_HUED, RM_VALD, RM_HUEU, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______, - _______, RM_SPDD, _______, RM_SPDU, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, - _______, _______, _______, RM_NEXT, _______, _______, _______, KC_P0, KC_PDOT, KC_NUM, _QWERTY, _COLEMAK - ) -}; - -#ifdef OLED_ENABLE -bool oled_task_user(void) { - // Host Keyboard Layer Status - oled_write_P(PSTR("RGBKB Pan\n"), false); - oled_write_P(PSTR("Layer: "), false); - uint8_t layer = get_highest_layer(layer_state|default_layer_state); - switch (layer) { - case _QWERTY: - oled_write_P(PSTR("Default\n"), false); - break; - case _COLEMAK: - oled_write_P(PSTR("Colemak\n"), false); - break; - case _FN: - oled_write_P(PSTR("Function\n"), false); - break; - case _ADJ: - oled_write_P(PSTR("Adjust\n"), false); - break; - default: - oled_write_P(PSTR("Undefined\n"), false); - // Or use the write_ln shortcut over adding '\n' to the end of your string - //oled_write_ln_P(PSTR("Undefined"), false); - } - led_t led_state = host_keyboard_led_state(); - oled_write_P(led_state.num_lock ? PSTR("Numlock On\n") : PSTR(" \n"), false); - oled_write_P(led_state.caps_lock ? PSTR("Capslock On \n") : PSTR(" \n"), false); - - return false; -} -#endif - -bool encoder_update_user(uint8_t index, bool clockwise) { - if (index == 0) { // First encoder - right - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - } else if (index == 1) { // Second encoder - left - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - } - return true; -} diff --git a/keyboards/rgbkb/pan/keymaps/default/keymap.json b/keyboards/rgbkb/pan/keymaps/default/keymap.json new file mode 100644 index 0000000000..e2f50556f0 --- /dev/null +++ b/keyboards/rgbkb/pan/keymaps/default/keymap.json @@ -0,0 +1,35 @@ +{ + "keyboard": "rgbkb/pan/rev1/32a", + "keymap": "default", + "layout": "LAYOUT_all", + "layers": [ + [ + "QK_GESC", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_BSPC", "KC_DEL", + "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSLS", + "LT(2, KC_CAPS)", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_ENT", + "KC_LSFT", "KC_BSLS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "SC_RSPC", + "KC_LCTL", "KC_LGUI", "KC_LALT", "RM_TOGG", "MO(3)", "KC_SPC", "KC_SPC", "MO(2)", "KC_LEFT", "KC_DOWN", "KC_UP", "KC_RIGHT" + ], + [ + "QK_GESC", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_BSPC", "KC_DEL", + "KC_TAB", "KC_Q", "KC_W", "KC_F", "KC_P", "KC_G", "KC_J", "KC_L", "KC_U", "KC_Y", "KC_SCLN", "KC_BSLS", + "LT(2, KC_CAPS)", "KC_A", "KC_R", "KC_S", "KC_T", "KC_D", "KC_H", "KC_N", "KC_E", "KC_I", "KC_O", "KC_ENT", + "KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "SC_RSPC", "KC_ENT", + "KC_LCTL", "KC_LGUI", "KC_LALT", "RM_TOGG", "MO(3)", "KC_SPC", "KC_SPC", "MO(2)", "KC_LEFT", "KC_DOWN", "KC_UP", "KC_RIGHT" + ], + [ + "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_PGDN", "KC_UP", "KC_PGUP", "_______", "_______", "_______", "KC_PGDN", "KC_UP", "KC_PGUP", "KC_PSCR", "KC_HOME", + "_______", "KC_LEFT", "KC_DOWN", "KC_RGHT", "_______", "_______", "_______", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_INS", "KC_END", + "_______", "_______", "_______", "_______", "_______", "_______", "_______", "KC_LBRC", "_______", "KC_RBRC", "_______", "_______", "_______", + "_______", "_______", "_______", "RM_NEXT", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______" + ], + [ + "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", + "_______", "RM_SATD", "RM_VALU", "RM_SATU", "QK_BOOT", "_______", "_______", "KC_P7", "KC_P8", "KC_P9", "_______", "_______", + "_______", "RM_HUED", "RM_VALD", "RM_HUEU", "_______", "_______", "_______", "KC_P4", "KC_P5", "KC_P6", "_______", "_______", + "_______", "RM_SPDD", "_______", "RM_SPDU", "_______", "_______", "_______", "KC_P1", "KC_P2", "KC_P3", "_______", "_______", "_______", + "_______", "_______", "_______", "RM_NEXT", "_______", "_______", "_______", "KC_P0", "KC_PDOT", "KC_NUM", "DF(0)", "DF(1)" + ] + ] +} diff --git a/keyboards/rgbkb/pan/keymaps/default/rules.mk b/keyboards/rgbkb/pan/keymaps/default/rules.mk deleted file mode 100644 index c4f4ee04da..0000000000 --- a/keyboards/rgbkb/pan/keymaps/default/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -# RGB layout selection -RGB_ENCODERS = yes # For RGB encoders, solder on both WS2811 chips -STAGGERED_LAYOUT = no # If you soldered R1-A12 and R4-A12, enable this. diff --git a/keyboards/rgbkb/pan/keymaps/default_eee/keymap.c b/keyboards/rgbkb/pan/keymaps/default_eee/keymap.c deleted file mode 100644 index 2de45d88e6..0000000000 --- a/keyboards/rgbkb/pan/keymaps/default_eee/keymap.c +++ /dev/null @@ -1,116 +0,0 @@ - /* Copyright 2020 RGBKB - * - * 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 . - */ -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -#include QMK_KEYBOARD_H - -enum layer_number { - _QWERTY, - _COLEMAK, - _FN, - _ADJ -}; - -#define FN_ESC LT(_FN, KC_ESC) -#define FN_CAPS LT(_FN, KC_CAPS) -#define QWERTY DF(_QWERTY) -#define COLEMAK DF(_COLEMAK) - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = LAYOUT_eee( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, - KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SC_RSPC, - KC_LCTL, KC_LGUI, KC_LALT, RM_TOGG, MO(_ADJ),KC_SPC, KC_SPC, MO(_FN), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT - ), - - [_COLEMAK] = LAYOUT_eee( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, - FN_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, - KC_LCTL, KC_LGUI, KC_LALT, RM_TOGG, MO(_ADJ),KC_SPC, KC_SPC, MO(_FN), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT - ), - - [_FN] = LAYOUT_eee( - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_PSCR, - _______, KC_PGDN, KC_UP, KC_PGUP, _______, _______, _______, KC_PGDN, KC_UP, KC_PGUP, KC_PSCR, KC_HOME, - _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_END, - _______, _______, _______, _______, _______, _______, _______, KC_LBRC, _______, KC_RBRC, _______, _______, - _______, _______, _______, RM_NEXT, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - [_ADJ] = LAYOUT_eee( - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_PSCR, - _______, RM_SATD, RM_VALU, RM_SATU, QK_BOOT, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______, - _______, RM_HUED, RM_VALD, RM_HUEU, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______, - _______, RM_SPDD, _______, RM_SPDU, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, _______, - _______, _______, _______, RM_NEXT, _______, _______, _______, KC_P0, KC_PDOT, KC_NUM, QWERTY, COLEMAK - ) -}; - -#ifdef OLED_ENABLE -bool oled_task_user(void) { - // Host Keyboard Layer Status - oled_write_P(PSTR("RGBKB Pan\n"), false); - oled_write_P(PSTR("Layer: "), false); - uint8_t layer = get_highest_layer(layer_state|default_layer_state); - switch (layer) { - case _QWERTY: - oled_write_P(PSTR("Default\n"), false); - break; - case _COLEMAK: - oled_write_P(PSTR("Colemak\n"), false); - break; - case _FN: - oled_write_P(PSTR("Function\n"), false); - break; - case _ADJ: - oled_write_P(PSTR("Adjust\n"), false); - break; - default: - oled_write_P(PSTR("Undefined\n"), false); - // Or use the write_ln shortcut over adding '\n' to the end of your string - //oled_write_ln_P(PSTR("Undefined"), false); - } - led_t led_state = host_keyboard_led_state(); - oled_write_P(led_state.num_lock ? PSTR("Numlock On\n") : PSTR(" \n"), false); - oled_write_P(led_state.caps_lock ? PSTR("Capslock On \n") : PSTR(" \n"), false); - - return false; -} -#endif - -bool encoder_update_user(uint8_t index, bool clockwise) { - if (index == 0) { // First encoder - right - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - } else if (index == 1) { // Second encoder - left - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - } - return true; -} diff --git a/keyboards/rgbkb/pan/keymaps/default_eee/keymap.json b/keyboards/rgbkb/pan/keymaps/default_eee/keymap.json new file mode 100644 index 0000000000..c46fc40a3d --- /dev/null +++ b/keyboards/rgbkb/pan/keymaps/default_eee/keymap.json @@ -0,0 +1,35 @@ +{ + "keyboard": "rgbkb/pan/rev1/32a", + "keymap": "default_eee", + "layout": "LAYOUT_eee", + "layers": [ + [ + "QK_GESC", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_DEL", + "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSLS", + "LT(2, KC_CAPS)", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_ENT", + "KC_LSFT", "KC_BSLS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "SC_RSPC", + "KC_LCTL", "KC_LGUI", "KC_LALT", "RM_TOGG", "MO(3)", "KC_SPC", "KC_SPC", "MO(2)", "KC_LEFT", "KC_DOWN", "KC_UP", "KC_RGHT" + ], + [ + "QK_GESC", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_DEL", + "KC_TAB", "KC_Q", "KC_W", "KC_F", "KC_P", "KC_G", "KC_J", "KC_L", "KC_U", "KC_Y", "KC_SCLN", "KC_BSLS", + "LT(2, KC_CAPS)", "KC_A", "KC_R", "KC_S", "KC_T", "KC_D", "KC_H", "KC_N", "KC_E", "KC_I", "KC_O", "KC_ENT", + "KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_ENT", + "KC_LCTL", "KC_LGUI", "KC_LALT", "RM_TOGG", "MO(3)", "KC_SPC", "KC_SPC", "MO(2)", "KC_LEFT", "KC_DOWN", "KC_UP", "KC_RGHT" + ], + [ + "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_PSCR", + "_______", "KC_PGDN", "KC_UP", "KC_PGUP", "_______", "_______", "_______", "KC_PGDN", "KC_UP", "KC_PGUP", "KC_PSCR", "KC_HOME", + "_______", "KC_LEFT", "KC_DOWN", "KC_RGHT", "_______", "_______", "_______", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_INS", "KC_END", + "_______", "_______", "_______", "_______", "_______", "_______", "_______", "KC_LBRC", "_______", "KC_RBRC", "_______", "_______", + "_______", "_______", "_______", "RM_NEXT", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______" + ], + [ + "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_PSCR", + "_______", "RM_SATD", "RM_VALU", "RM_SATU", "QK_BOOT", "_______", "_______", "KC_P7", "KC_P8", "KC_P9", "_______", "_______", + "_______", "RM_HUED", "RM_VALD", "RM_HUEU", "_______", "_______", "_______", "KC_P4", "KC_P5", "KC_P6", "_______", "_______", + "_______", "RM_SPDD", "_______", "RM_SPDU", "_______", "_______", "_______", "KC_P1", "KC_P2", "KC_P3", "_______", "_______", + "_______", "_______", "_______", "RM_NEXT", "_______", "_______", "_______", "KC_P0", "KC_PDOT", "KC_NUM", "DF(0)", "DF(1)" + ] + ] +} diff --git a/keyboards/rgbkb/pan/keymaps/default_eee/rules.mk b/keyboards/rgbkb/pan/keymaps/default_eee/rules.mk deleted file mode 100644 index c4f4ee04da..0000000000 --- a/keyboards/rgbkb/pan/keymaps/default_eee/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -# RGB layout selection -RGB_ENCODERS = yes # For RGB encoders, solder on both WS2811 chips -STAGGERED_LAYOUT = no # If you soldered R1-A12 and R4-A12, enable this. diff --git a/keyboards/rgbkb/pan/keymaps/default_sss/keymap.c b/keyboards/rgbkb/pan/keymaps/default_sss/keymap.c deleted file mode 100644 index b0b8bd1898..0000000000 --- a/keyboards/rgbkb/pan/keymaps/default_sss/keymap.c +++ /dev/null @@ -1,116 +0,0 @@ - /* Copyright 2020 RGBKB - * - * 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 . - */ -// Each layer gets a name for readability, which is then used in the keymap matrix below. -// The underscores don't mean anything - you can have a layer called STUFF or any other name. -// Layer names don't all need to be of the same length, obviously, and you can also skip them -// entirely and just use numbers. -#include QMK_KEYBOARD_H - -enum layer_number { - _QWERTY, - _COLEMAK, - _FN, - _ADJ -}; - -#define FN_ESC LT(_FN, KC_ESC) -#define FN_CAPS LT(_FN, KC_CAPS) -#define QWERTY DF(_QWERTY) -#define COLEMAK DF(_COLEMAK) - - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = LAYOUT_sss( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_DEL, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, - KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_ADJ),KC_RCTL - ), - - [_COLEMAK] = LAYOUT_sss( - QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_DEL, - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, - FN_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT, - KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_ADJ),KC_RCTL - ), - - [_FN] = LAYOUT_sss( - 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_PGDN, KC_UP, KC_PGUP, _______, _______, _______, KC_PGDN, KC_UP, KC_PGUP, KC_PSCR, KC_HOME, - _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_END, - _______, _______, _______, _______, _______, _______, _______, KC_LBRC, _______, KC_RBRC, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______ - ), - - [_ADJ] = LAYOUT_sss( - 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, - _______, RM_SATD, RM_VALU, RM_SATU, QK_BOOT, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______, - _______, RM_HUED, RM_VALD, RM_HUEU, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______, - _______, RM_SPDD, _______, RM_SPDU, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, - _______, _______, _______, _______, QWERTY, _______, COLEMAK - ) -}; - -#ifdef OLED_ENABLE -bool oled_task_user(void) { - // Host Keyboard Layer Status - oled_write_P(PSTR("RGBKB Pan\n"), false); - oled_write_P(PSTR("Layer: "), false); - uint8_t layer = get_highest_layer(layer_state|default_layer_state); - switch (layer) { - case _QWERTY: - oled_write_P(PSTR("Default\n"), false); - break; - case _COLEMAK: - oled_write_P(PSTR("Colemak\n"), false); - break; - case _FN: - oled_write_P(PSTR("Function\n"), false); - break; - case _ADJ: - oled_write_P(PSTR("Adjust\n"), false); - break; - default: - oled_write_P(PSTR("Undefined\n"), false); - // Or use the write_ln shortcut over adding '\n' to the end of your string - //oled_write_ln_P(PSTR("Undefined"), false); - } - led_t led_state = host_keyboard_led_state(); - oled_write_P(led_state.num_lock ? PSTR("Numlock On\n") : PSTR(" \n"), false); - oled_write_P(led_state.caps_lock ? PSTR("Capslock On \n") : PSTR(" \n"), false); - - return false; -} -#endif - -bool encoder_update_user(uint8_t index, bool clockwise) { - if (index == 0) { // First encoder - right - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - } else if (index == 1) { // Second encoder - left - if (clockwise) { - tap_code(KC_VOLU); - } else { - tap_code(KC_VOLD); - } - } - return true; -} diff --git a/keyboards/rgbkb/pan/keymaps/default_sss/keymap.json b/keyboards/rgbkb/pan/keymaps/default_sss/keymap.json new file mode 100644 index 0000000000..ab216429f0 --- /dev/null +++ b/keyboards/rgbkb/pan/keymaps/default_sss/keymap.json @@ -0,0 +1,35 @@ +{ + "keyboard": "rgbkb/pan/rev1/32a", + "keymap": "default_sss", + "layout": "LAYOUT_sss", + "layers": [ + [ + "QK_GESC", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_BSPC", "KC_DEL", + "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSLS", + "LT(2, KC_CAPS)", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_ENT", + "KC_LSFT", "KC_BSLS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", + "KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT", "MO(3)", "KC_RCTL" + ], + [ + "QK_GESC", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_BSPC", "KC_DEL", + "KC_TAB", "KC_Q", "KC_W", "KC_F", "KC_P", "KC_G", "KC_J", "KC_L", "KC_U", "KC_Y", "KC_SCLN", "KC_BSLS", + "LT(2, KC_CAPS)", "KC_A", "KC_R", "KC_S", "KC_T", "KC_D", "KC_H", "KC_N", "KC_E", "KC_I", "KC_O", "KC_ENT", + "KC_LSFT", "KC_BSLS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", + "KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT", "MO(3)", "KC_RCTL" + ], + [ + "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_PGDN", "KC_UP", "KC_PGUP", "_______", "_______", "_______", "KC_PGDN", "KC_UP", "KC_PGUP", "KC_PSCR", "KC_HOME", + "_______", "KC_LEFT", "KC_DOWN", "KC_RGHT", "_______", "_______", "_______", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_INS", "KC_END", + "_______", "_______", "_______", "_______", "_______", "_______", "_______", "KC_LBRC", "_______", "KC_RBRC", "_______", "_______", "_______", + "_______", "_______", "_______", "_______", "_______", "_______", "_______" + ], + [ + "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", + "_______", "RM_SATD", "RM_VALU", "RM_SATU", "QK_BOOT", "_______", "_______", "KC_P7", "KC_P8", "KC_P9", "_______", "_______", + "_______", "RM_HUED", "RM_VALD", "RM_HUEU", "_______", "_______", "_______", "KC_P4", "KC_P5", "KC_P6", "_______", "_______", + "_______", "RM_SPDD", "_______", "RM_SPDU", "_______", "_______", "_______", "KC_P1", "KC_P2", "KC_P3", "_______", "_______", + "_______", "_______", "_______", "_______", "_______", "DF(0)", "_______", "DF(1)" + ] + ] +} diff --git a/keyboards/rgbkb/pan/keymaps/default_sss/rules.mk b/keyboards/rgbkb/pan/keymaps/default_sss/rules.mk deleted file mode 100644 index c4f4ee04da..0000000000 --- a/keyboards/rgbkb/pan/keymaps/default_sss/rules.mk +++ /dev/null @@ -1,3 +0,0 @@ -# RGB layout selection -RGB_ENCODERS = yes # For RGB encoders, solder on both WS2811 chips -STAGGERED_LAYOUT = no # If you soldered R1-A12 and R4-A12, enable this. diff --git a/keyboards/rgbkb/pan/pan.c b/keyboards/rgbkb/pan/pan.c index 20cc4dd248..ce5c2ae249 100644 --- a/keyboards/rgbkb/pan/pan.c +++ b/keyboards/rgbkb/pan/pan.c @@ -1,34 +1,15 @@ -/* Copyright 2020 RGBKB - * - * 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 2020 RGBKB +// SPDX-License-Identifier: GPL-2.0-or-later #include "quantum.h" -#include "rgb_matrix_types.h" -#if defined RGB_MATRIX_ENABLE -# if defined(KEYBOARD_rgbkb_pan_rev1) -# include "ws2812.h" +#ifdef RGB_MATRIX_ENABLE +# include "ws2812.h" -// Set an led in the buffer to a color static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) { -# if defined(RGB_ENCODERS) || defined(STAGGERED_RGB_ENCODERS) - if (i == 0 || i == 1) { // if encoder LEDs, change LEDs + if (i == 0 || i == 1) { // Encoder LEDs require GBR sequence ws2812_set_color(i, g, b, r); - } else -# endif - { + } else { ws2812_set_color(i, r, g, b); } } @@ -39,74 +20,35 @@ const rgb_matrix_driver_t rgb_matrix_driver = { .set_color = setled, .set_color_all = ws2812_set_color_all, }; -# endif +#endif -// clang-format off - led_config_t g_led_config = { { - { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, - { 0, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15 }, - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 1 }, - { 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40 }, - { 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, NO_LED } - }, { -# ifdef STAGGERED_RGB_ENCODERS - {0, -19},{228, -19}, - {0, 0}, {14, 0}, {33, 0}, {52, 0}, {71, 0}, {90, 0}, {109, 0}, {128, 0}, {147, 0}, {166, 0}, {185, 0}, {204, 0}, {223, 0}, - {209, 19}, {190, 19}, {171, 19}, {152, 19}, {133, 19}, {114, 19}, {95, 19}, {76, 19}, {57, 19}, {38, 19}, {19, 19}, {0, 19}, - {0, 38}, {19, 38}, {38, 38}, {57, 38}, {76, 38}, {95, 38}, {114, 38}, {133, 38}, {152, 38}, {171, 38}, {190, 38}, {209, 38}, - {223, 57}, {204, 57}, {185, 57}, {171, 57}, {147, 57}, {128, 57}, {109, 57}, {90, 57}, {71, 57}, {52, 57}, {33, 57}, {14, 57}, {0, 57}, - {0, 76}, {19, 76}, {38, 76}, {57, 76}, {76, 76}, {95, 76}, {114, 76}, {133, 76}, {152, 76}, {171, 76}, {190, 76}, {209, 76}, -# elif defined RGB_ENCODERS - {0, -19},{228, -19}, - {0, 0}, {19, 0}, {38, 0}, {57, 0}, {76, 0}, {95, 0}, {114, 0}, {133, 0}, {152, 0}, {171, 0}, {190, 0}, {209, 0}, - {209, 19}, {190, 19}, {171, 19}, {152, 19}, {133, 19}, {114, 19}, {95, 19}, {76, 19}, {57, 19}, {38, 19}, {19, 19}, {0, 19}, - {0, 38}, {19, 38}, {38, 38}, {57, 38}, {76, 38}, {95, 38}, {114, 38}, {133, 38}, {152, 38}, {171, 38}, {190, 38}, {209, 38}, - {209, 57}, {190, 57}, {171, 57}, {152, 57}, {133, 57}, {114, 57}, {95, 57}, {76, 57}, {57, 57}, {38, 57}, {19, 57}, {0, 57}, - {0, 76}, {19, 76}, {38, 76}, {57, 76}, {76, 76}, {95, 76}, {114, 76}, {133, 76}, {152, 76}, {171, 76}, {190, 76}, {209, 76}, - {0, 95},{19, 95}, //not used -# elif defined STAGGERED_LAYOUT - {0, 0}, {19, 0}, {38, 0}, {57, 0}, {76, 0}, {95, 0}, {114, 0}, {133, 0}, {152, 0}, {171, 0}, {190, 0}, {209, 0}, {0, 0}, - {209, 19}, {190, 19}, {171, 19}, {152, 19}, {133, 19}, {114, 19}, {95, 19}, {76, 19}, {57, 19}, {38, 19}, {19, 19}, {0, 19}, - {0, 38}, {19, 38}, {38, 38}, {57, 38}, {76, 38}, {95, 38}, {114, 38}, {133, 38}, {152, 38}, {171, 38}, {190, 38}, {209, 38}, - {209, 57}, {190, 57}, {171, 57}, {152, 57}, {133, 57}, {114, 57}, {95, 57}, {76, 57}, {57, 57}, {38, 57}, {19, 57}, {0, 57}, {0, 0}, - {0, 76}, {19, 76}, {38, 76}, {57, 76}, {76, 76}, {95, 76}, {114, 76}, {133, 76}, {152, 76}, {171, 76}, {190, 76}, {209, 76}, - {0, 95},{19, 95},//not used -# else - {0, 0}, {19, 0}, {38, 0}, {57, 0}, {76, 0}, {95, 0}, {114, 0}, {133, 0}, {152, 0}, {171, 0}, {190, 0}, {209, 0}, - {209, 19}, {190, 19}, {171, 19}, {152, 19}, {133, 19}, {114, 19}, {95, 19}, {76, 19}, {57, 19}, {38, 19}, {19, 19}, {0, 19}, - {0, 38}, {19, 38}, {38, 38}, {57, 38}, {76, 38}, {95, 38}, {114, 38}, {133, 38}, {152, 38}, {171, 38}, {190, 38}, {209, 38}, - {209, 57}, {190, 57}, {171, 57}, {152, 57}, {133, 57}, {114, 57}, {95, 57}, {76, 57}, {57, 57}, {38, 57}, {19, 57}, {0, 57}, - {0, 76}, {19, 76}, {38, 76}, {57, 76}, {76, 76}, {95, 76}, {114, 76}, {133, 76}, {152, 76}, {171, 76}, {190, 76}, {209, 76}, - {0, 0},{0, 0}, {0, 0},{0, 0},//not used -# endif - }, { -# ifdef STAGGERED_RGB_ENCODERS - 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 -# elif defined RGB_ENCODERS - 1, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 -# elif defined STAGGERED_LAYOUT - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 -# else - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 -# endif - } }; -// clang-format on +#ifdef OLED_ENABLE +bool oled_task_kb(void) { + if (!oled_task_user()) { + return false; + } + oled_write_P(PSTR("RGBKB Pan\n"), false); + oled_write_P(PSTR("Layer: "), false); + uint8_t layer = get_highest_layer(layer_state | default_layer_state); + switch (layer) { + case 0: + oled_write_P(PSTR("Default\n"), false); + break; + case 1: + oled_write_P(PSTR("Colemak\n"), false); + break; + case 2: + oled_write_P(PSTR("Function\n"), false); + break; + case 3: + oled_write_P(PSTR("Adjust\n"), false); + break; + default: + oled_write_P(PSTR("Undefined\n"), false); + } + led_t led_state = host_keyboard_led_state(); + oled_write_P(led_state.num_lock ? PSTR("Numlock On\n") : PSTR(" \n"), false); + oled_write_P(led_state.caps_lock ? PSTR("Capslock On \n") : PSTR(" \n"), false); + return false; +} #endif diff --git a/keyboards/rgbkb/pan/post_rules.mk b/keyboards/rgbkb/pan/post_rules.mk deleted file mode 100644 index afa3b555b2..0000000000 --- a/keyboards/rgbkb/pan/post_rules.mk +++ /dev/null @@ -1,28 +0,0 @@ -RGB_MATRIX_KEYPRESSES ?= no # Enable reactive per-key effects. -RGB_MATRIX_FRAMEBUFFER_EFFECTS ?= no # Enable frame buffer effects like the typing heatmap. - -# RGB layout selection -STAGGERED_LAYOUT ?= no # If you soldered R1-A12 and R4-A12, enable this. -RGB_ENCODERS ?= yes # For RGB encoders, solder on both WS2811 chips - -ifeq ($(strip $(RGB_MATRIX_KEYPRESSES)), yes) - OPT_DEFS += -DRGB_MATRIX_KEYPRESSES -endif - -ifeq ($(strip $(RGB_MATRIX_FRAMEBUFFER)), yes) - OPT_DEFS += -DRGB_MATRIX_FRAMEBUFFER_EFFECTS -endif - -ifeq ($(strip $(STAGGERED_LAYOUT)), yes) - OPT_DEFS += -DSTAGGERED_LAYOUT -endif - -ifeq ($(strip $(RGB_ENCODERS)), yes) - OPT_DEFS += -DRGB_ENCODERS -endif - -ifeq ($(strip $(RGB_ENCODERS)), yes) - ifeq ($(strip $(STAGGERED_LAYOUT)), yes) - OPT_DEFS += -DSTAGGERED_RGB_ENCODERS=$(strip $(STAGGERED_RGB_ENCODERS)) - endif -endif From 466e0856f553d5fd1e50d990f97b8bb5de899145 Mon Sep 17 00:00:00 2001 From: Pascal Hansjosten <33342805+pascalhansjosten@users.noreply.github.com> Date: Mon, 6 Oct 2025 18:26:16 +0200 Subject: [PATCH 68/99] add durgod venus iso support (#25526) --- data/mappings/keyboard_aliases.hjson | 2 +- keyboards/durgod/dgk6x/readme.md | 3 +- .../dgk6x/{venus => venus_ansi}/config.h | 0 .../dgk6x/{venus => venus_ansi}/keyboard.json | 0 .../keymaps/default/keymap.json | 2 +- .../keymaps/default/readme.md | 0 .../dgk6x/{venus => venus_ansi}/readme.md | 4 +- .../venus.c => venus_ansi/venus_ansi.c} | 0 keyboards/durgod/dgk6x/venus_iso/config.h | 19 +++ .../durgod/dgk6x/venus_iso/keyboard.json | 151 ++++++++++++++++++ .../venus_iso/keymaps/default/keymap.json | 37 +++++ keyboards/durgod/dgk6x/venus_iso/readme.md | 26 +++ keyboards/durgod/dgk6x/venus_iso/venus_iso.c | 97 +++++++++++ keyboards/durgod/venus/readme.md | 2 +- 14 files changed, 337 insertions(+), 6 deletions(-) rename keyboards/durgod/dgk6x/{venus => venus_ansi}/config.h (100%) rename keyboards/durgod/dgk6x/{venus => venus_ansi}/keyboard.json (100%) rename keyboards/durgod/dgk6x/{venus => venus_ansi}/keymaps/default/keymap.json (98%) rename keyboards/durgod/dgk6x/{venus => venus_ansi}/keymaps/default/readme.md (100%) rename keyboards/durgod/dgk6x/{venus => venus_ansi}/readme.md (90%) rename keyboards/durgod/dgk6x/{venus/venus.c => venus_ansi/venus_ansi.c} (100%) create mode 100644 keyboards/durgod/dgk6x/venus_iso/config.h create mode 100644 keyboards/durgod/dgk6x/venus_iso/keyboard.json create mode 100644 keyboards/durgod/dgk6x/venus_iso/keymaps/default/keymap.json create mode 100644 keyboards/durgod/dgk6x/venus_iso/readme.md create mode 100644 keyboards/durgod/dgk6x/venus_iso/venus_iso.c diff --git a/data/mappings/keyboard_aliases.hjson b/data/mappings/keyboard_aliases.hjson index c958cecbc9..71a7e880a3 100644 --- a/data/mappings/keyboard_aliases.hjson +++ b/data/mappings/keyboard_aliases.hjson @@ -1750,7 +1750,7 @@ "target": "durgod/dgk6x/galaxy" }, "durgod/venus": { - "target": "durgod/dgk6x/venus" + "target": "durgod/dgk6x/venus_ansi" }, "dztech/tofu/ii": { "target": "dztech/tofu/ii/v1" diff --git a/keyboards/durgod/dgk6x/readme.md b/keyboards/durgod/dgk6x/readme.md index a14dfcb9f4..58ba599069 100644 --- a/keyboards/durgod/dgk6x/readme.md +++ b/keyboards/durgod/dgk6x/readme.md @@ -11,7 +11,8 @@ This DGK6X code is shared between the ANSI variants of Venus, Hades and Galaxy k ### Build Instructions for building the Venus, Hades and Galaxy firmware can be found here: -* [Venus](venus/readme.md) +* [Venus ANSI](venus_ansi/readme.md) +* [Venus ISO](venus_iso/readme.md) * [Hades ANSI](hades_ansi/readme.md) * [Hades ISO](hades_iso/readme.md) * [Galaxy](galaxy/readme.md) diff --git a/keyboards/durgod/dgk6x/venus/config.h b/keyboards/durgod/dgk6x/venus_ansi/config.h similarity index 100% rename from keyboards/durgod/dgk6x/venus/config.h rename to keyboards/durgod/dgk6x/venus_ansi/config.h diff --git a/keyboards/durgod/dgk6x/venus/keyboard.json b/keyboards/durgod/dgk6x/venus_ansi/keyboard.json similarity index 100% rename from keyboards/durgod/dgk6x/venus/keyboard.json rename to keyboards/durgod/dgk6x/venus_ansi/keyboard.json diff --git a/keyboards/durgod/dgk6x/venus/keymaps/default/keymap.json b/keyboards/durgod/dgk6x/venus_ansi/keymaps/default/keymap.json similarity index 98% rename from keyboards/durgod/dgk6x/venus/keymaps/default/keymap.json rename to keyboards/durgod/dgk6x/venus_ansi/keymaps/default/keymap.json index 8acd302a05..be4d435839 100644 --- a/keyboards/durgod/dgk6x/venus/keymaps/default/keymap.json +++ b/keyboards/durgod/dgk6x/venus_ansi/keymaps/default/keymap.json @@ -1,5 +1,5 @@ { - "keyboard": "durgod/dgk6x/venus", + "keyboard": "durgod/dgk6x/venus_ansi", "keymap": "default", "layout": "LAYOUT_60_ansi", "layers": [ diff --git a/keyboards/durgod/dgk6x/venus/keymaps/default/readme.md b/keyboards/durgod/dgk6x/venus_ansi/keymaps/default/readme.md similarity index 100% rename from keyboards/durgod/dgk6x/venus/keymaps/default/readme.md rename to keyboards/durgod/dgk6x/venus_ansi/keymaps/default/readme.md diff --git a/keyboards/durgod/dgk6x/venus/readme.md b/keyboards/durgod/dgk6x/venus_ansi/readme.md similarity index 90% rename from keyboards/durgod/dgk6x/venus/readme.md rename to keyboards/durgod/dgk6x/venus_ansi/readme.md index 9e37d49633..d8009dcb22 100644 --- a/keyboards/durgod/dgk6x/venus/readme.md +++ b/keyboards/durgod/dgk6x/venus_ansi/readme.md @@ -12,11 +12,11 @@ This is a standard off-the-shelf Durgod Venus 60% ANSI Layout keyboard with RGB Make command example for this keyboard (after setting up your build environment): - make durgod/venus:default + make durgod/dgk6x/venus_ansi:default Flashing example for this keyboard: - make durgod/venus:default:flash + make durgod/dgk6x/venus_ansi: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). diff --git a/keyboards/durgod/dgk6x/venus/venus.c b/keyboards/durgod/dgk6x/venus_ansi/venus_ansi.c similarity index 100% rename from keyboards/durgod/dgk6x/venus/venus.c rename to keyboards/durgod/dgk6x/venus_ansi/venus_ansi.c diff --git a/keyboards/durgod/dgk6x/venus_iso/config.h b/keyboards/durgod/dgk6x/venus_iso/config.h new file mode 100644 index 0000000000..f23b355905 --- /dev/null +++ b/keyboards/durgod/dgk6x/venus_iso/config.h @@ -0,0 +1,19 @@ +/* Copyright 2021 Jessica Sullivan and Don Kjer + * + * 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 . + */ + +#pragma once + +#define CAPS_LED 29 diff --git a/keyboards/durgod/dgk6x/venus_iso/keyboard.json b/keyboards/durgod/dgk6x/venus_iso/keyboard.json new file mode 100644 index 0000000000..46b88427eb --- /dev/null +++ b/keyboards/durgod/dgk6x/venus_iso/keyboard.json @@ -0,0 +1,151 @@ +{ + "manufacturer": "Hoksi Technology", + "keyboard_name": "DURGOD Venus (QMK)", + "maintainer": "pascalhansjosten", + "diode_direction": "ROW2COL", + "matrix_pins": { + "cols": ["B0", "B1", "B2", "B10", "B11", "B12", "B13", "B14", "B15", "C6", "C7", "C8", "C9", "C10"], + "rows": ["A0", "A1", "A2", "A3", "A4"] + }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 80, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 96, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 112, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 128, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 144, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 160, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 176, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 192, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 216, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 4}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 88, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 104, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 120, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 136, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 152, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 168, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 184, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 200, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 92, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 108, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 124, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 140, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 156, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 188, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 204, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 220, "y": 24, "flags": 1}, + {"matrix": [3, 0], "x": 2, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 19, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 68, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 84, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 100, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 116, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 132, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 148, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 164, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 180, "y": 48, "flags": 4}, + {"matrix": [3, 12], "x": 202, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 102, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 162, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 182, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 202, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 222, "y": 64, "flags": 4} + ] + }, + "url": "https://www.amazon.com/dp/B07XFP5MMZ", + "usb": { + "device_version": "0.0.1", + "pid": "0x7EC6", + "vid": "0xD60D" + }, + "community_layouts": ["60_iso"], + "layouts": { + "LAYOUT_60_iso": { + "layout": [ + {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "!", "matrix": [0, 1], "x": 1, "y": 0}, + {"label": "@", "matrix": [0, 2], "x": 2, "y": 0}, + {"label": "#", "matrix": [0, 3], "x": 3, "y": 0}, + {"label": "$", "matrix": [0, 4], "x": 4, "y": 0}, + {"label": "%", "matrix": [0, 5], "x": 5, "y": 0}, + {"label": "^", "matrix": [0, 6], "x": 6, "y": 0}, + {"label": "&", "matrix": [0, 7], "x": 7, "y": 0}, + {"label": "*", "matrix": [0, 8], "x": 8, "y": 0}, + {"label": "(", "matrix": [0, 9], "x": 9, "y": 0}, + {"label": ")", "matrix": [0, 10], "x": 10, "y": 0}, + {"label": "_", "matrix": [0, 11], "x": 11, "y": 0}, + {"label": "+", "matrix": [0, 12], "x": 12, "y": 0}, + {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2}, + {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5}, + {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1}, + {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1}, + {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1}, + {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1}, + {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1}, + {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1}, + {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1}, + {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1}, + {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1}, + {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1}, + {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1}, + {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1}, + {"label": "CapsLock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, + {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2}, + {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2}, + {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2}, + {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2}, + {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2}, + {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2}, + {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2}, + {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2}, + {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2}, + {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2}, + {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2}, + {"label": "#", "matrix": [2, 12], "x": 12.75, "y": 2}, + {"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2}, + {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25}, + {"label": "\\", "matrix": [3, 1], "x": 1.25, "y": 3}, + {"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3}, + {"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3}, + {"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3}, + {"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3}, + {"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3}, + {"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3}, + {"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3}, + {"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3}, + {"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3}, + {"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3}, + {"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75}, + {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25}, + {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25}, + {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25}, + {"label": "K45", "matrix": [4, 5], "x": 3.75, "y": 4, "w": 6.25}, + {"label": "Alt", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.25}, + {"label": "Fn1", "matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25}, + {"label": "Fn2", "matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25}, + {"label": "Ctrl", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25} + ] + } + } +} diff --git a/keyboards/durgod/dgk6x/venus_iso/keymaps/default/keymap.json b/keyboards/durgod/dgk6x/venus_iso/keymaps/default/keymap.json new file mode 100644 index 0000000000..da53f1d9b5 --- /dev/null +++ b/keyboards/durgod/dgk6x/venus_iso/keymaps/default/keymap.json @@ -0,0 +1,37 @@ +{ + "keyboard": "durgod/dgk6x/venus_iso", + "keymap": "default", + "layout": "LAYOUT_60_iso", + "layers": [ + [ + "QK_GESC", "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_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_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_LSFT", "KC_NUBS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "RSFT_T(KC_UP)", + "KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT","LT(1,KC_LEFT)","LT(2,KC_DOWN)","RCTL_T(KC_RIGHT)" + ], + [ + "KC_GRV", "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_TRNS", + "KC_TRNS", "KC_TRNS", "KC_UP", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_PSCR", "KC_INS", "KC_HOME", "KC_END", "KC_DEL", + "KC_TRNS", "KC_LEFT", "KC_DOWN", "KC_RIGHT","KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_PGUP", "KC_PGDN", "KC_TRNS", + "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", + "KC_TRNS", "GU_TOGG", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "MO(3)", "KC_TRNS" + ], + [ + "KC_TRNS", "KC_MPLY", "KC_MSTP", "KC_MPRV", "KC_MNXT", "KC_MUTE", "KC_VOLD", "KC_VOLU", "KC_TRNS", "KC_TRNS", "KC_TRNS", "RM_TOGG", "RM_NEXT", "RM_PREV", + "KC_TRNS", "KC_TRNS", "RM_VALU", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", + "KC_TRNS", "RM_SPDD", "RM_VALD", "RM_SPDU", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", + "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", + "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "MO(3)", "KC_TRNS", "KC_TRNS" + ], + [ + "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", + "XXXXXXX", "XXXXXXX", "RM_SATU", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", + "XXXXXXX", "RM_HUED", "RM_SATD", "RM_HUEU", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", + "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", + "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "KC_TRNS", "KC_TRNS", "XXXXXXX" + ] + ], + "author":"pascalhansjosten", + "version":1 +} diff --git a/keyboards/durgod/dgk6x/venus_iso/readme.md b/keyboards/durgod/dgk6x/venus_iso/readme.md new file mode 100644 index 0000000000..2f40fedd96 --- /dev/null +++ b/keyboards/durgod/dgk6x/venus_iso/readme.md @@ -0,0 +1,26 @@ +# Venus + +This is a standard off-the-shelf Durgod Venus 60% ISO Layout keyboard with RGB matrix. + +* Keyboard Maintainer: [pascalhansjosten](https://github.com/pascalhansjosten), based on the work of [J-Sully](https://github.com/J-Sully) and [dkjer](https://github.com/dkjer) +* Hardware Supported: Durgod Venus ISO board with STM32F070RBT6 +* Hardware Availability: https://www.amazon.de/dp/B08H28DNQV/ + +## Instructions + +### Build + +Make command example for this keyboard (after setting up your build environment): + + make durgod/dgk6x/venus_iso:default + +Flashing example for this keyboard: + + make durgod/dgk6x/venus_iso: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). + +### Initial Flash + +Instructions for Flashing from initial Stock Firmware: +* [Initial Flashing](../readme.md#initial-flash) diff --git a/keyboards/durgod/dgk6x/venus_iso/venus_iso.c b/keyboards/durgod/dgk6x/venus_iso/venus_iso.c new file mode 100644 index 0000000000..4cc9bf3364 --- /dev/null +++ b/keyboards/durgod/dgk6x/venus_iso/venus_iso.c @@ -0,0 +1,97 @@ +/* Copyright 2021 Jessica Sullivan and Don Kjer + * + * 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 "dgk6x.h" + +#ifdef RGB_MATRIX_ENABLE + +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + + {0, SW3_CS1, SW2_CS1, SW1_CS1}, // Esc + {0, SW3_CS2, SW2_CS2, SW1_CS2}, // 1 + {0, SW3_CS3, SW2_CS3, SW1_CS3}, // 2 + {0, SW3_CS4, SW2_CS4, SW1_CS4}, // 3 + {0, SW3_CS5, SW2_CS5, SW1_CS5}, // 4 + {0, SW3_CS6, SW2_CS6, SW1_CS6}, // 5 + {0, SW3_CS7, SW2_CS7, SW1_CS7}, // 6 + {0, SW3_CS8, SW2_CS8, SW1_CS8}, // 7 + {0, SW3_CS9, SW2_CS9, SW1_CS9}, // 8 + {0, SW3_CS10, SW2_CS10, SW1_CS10}, // 9 + {0, SW3_CS11, SW2_CS11, SW1_CS11}, // 0 + {0, SW3_CS12, SW2_CS12, SW1_CS12}, // - + {0, SW3_CS13, SW2_CS13, SW1_CS13}, // = + {0, SW3_CS14, SW2_CS14, SW1_CS14}, // Bksp + + {0, SW6_CS1, SW5_CS1, SW4_CS1}, // Tab + {0, SW6_CS2, SW5_CS2, SW4_CS2}, // Q + {0, SW6_CS3, SW5_CS3, SW4_CS3}, // W + {0, SW6_CS4, SW5_CS4, SW4_CS4}, // E + {0, SW6_CS5, SW5_CS5, SW4_CS5}, // R + {0, SW6_CS6, SW5_CS6, SW4_CS6}, // T + {0, SW6_CS7, SW5_CS7, SW4_CS7}, // Y + {0, SW6_CS8, SW5_CS8, SW4_CS8}, // U + {0, SW6_CS9, SW5_CS9, SW4_CS9}, // I + {0, SW6_CS10, SW5_CS10, SW4_CS10}, // O + {0, SW6_CS11, SW5_CS11, SW4_CS11}, // P + {0, SW6_CS12, SW5_CS12, SW4_CS12}, // [ + {0, SW6_CS13, SW5_CS13, SW4_CS13}, // ] + + {0, SW9_CS1, SW8_CS1, SW7_CS1}, // Caps + {0, SW9_CS2, SW8_CS2, SW7_CS2}, // A + {0, SW9_CS3, SW8_CS3, SW7_CS3}, // S + {0, SW9_CS4, SW8_CS4, SW7_CS4}, // D + {0, SW9_CS5, SW8_CS5, SW7_CS5}, // F + {0, SW9_CS6, SW8_CS6, SW7_CS6}, // G + {0, SW9_CS7, SW8_CS7, SW7_CS7}, // H + {0, SW9_CS8, SW8_CS8, SW7_CS8}, // J + {0, SW9_CS9, SW8_CS9, SW7_CS9}, // K + {0, SW9_CS10, SW8_CS10, SW7_CS10}, // L + {0, SW9_CS11, SW8_CS11, SW7_CS11}, // : + {0, SW9_CS12, SW8_CS12, SW7_CS12}, // ' + {0, SW9_CS13, SW8_CS13, SW7_CS13}, // NUHS + {0, SW9_CS14, SW8_CS14, SW7_CS14}, // Enter + + {0, SW12_CS1, SW11_CS1, SW10_CS1}, // LShift + {0, SW12_CS2, SW11_CS2, SW10_CS2}, // NUBS + {0, SW12_CS3, SW11_CS3, SW10_CS3}, // Z + {0, SW12_CS4, SW11_CS4, SW10_CS4}, // X + {0, SW12_CS5, SW11_CS5, SW10_CS5}, // C + {0, SW12_CS6, SW11_CS6, SW10_CS6}, // V + {0, SW12_CS7, SW11_CS7, SW10_CS7}, // B + {0, SW12_CS8, SW11_CS8, SW10_CS8}, // N + {0, SW12_CS9, SW11_CS9, SW10_CS9}, // M + {0, SW12_CS10, SW11_CS10, SW10_CS10}, // < + {0, SW12_CS11, SW11_CS11, SW10_CS11}, // > + {0, SW12_CS12, SW11_CS12, SW10_CS12}, // ? + {0, SW12_CS13, SW11_CS13, SW10_CS13}, // RShift + + {1, SW3_CS1, SW2_CS1, SW1_CS1}, // LCtrl + {1, SW3_CS2, SW2_CS2, SW1_CS2}, // LAlt + {1, SW3_CS3, SW2_CS3, SW1_CS3}, // Windows + {1, SW3_CS6, SW2_CS6, SW1_CS6}, // Space + {1, SW3_CS10, SW2_CS10, SW1_CS10}, // Fn1/RAlt hades/venus + {1, SW3_CS11, SW2_CS11, SW1_CS11}, // Fn2/Fn1 + {1, SW3_CS12, SW2_CS12, SW1_CS12}, // RCtrl/Fn2 + {1, SW3_CS13, SW2_CS13, SW1_CS13}, // LEFT/RCtrl +}; + +#endif /* RGB_MATRIX_ENABLE */ diff --git a/keyboards/durgod/venus/readme.md b/keyboards/durgod/venus/readme.md index c2228583a9..685a9d2bc0 100644 --- a/keyboards/durgod/venus/readme.md +++ b/keyboards/durgod/venus/readme.md @@ -1,3 +1,3 @@ # Venus -See: [Venus](../dgk6x/venus/readme.md) +See: [Venus ANSI](../dgk6x/venus_ansi/readme.md) and [Venus ISO](../dgk6x/venus_iso/readme.md) From c7ed9038d71275a98b490c3fc1df8217164666fe Mon Sep 17 00:00:00 2001 From: Aidan Smith Date: Mon, 6 Oct 2025 12:38:27 -0400 Subject: [PATCH 69/99] E7-V2 Implementation (#25594) --- keyboards/exclusive/e7v2/keyboard.json | 392 ++++++++++++++++++ .../exclusive/e7v2/keymaps/default/keymap.c | 30 ++ .../e7v2/keymaps/default_iso/keymap.c | 30 ++ keyboards/exclusive/e7v2/readme.md | 27 ++ keyboards/exclusive/readme.md | 1 + 5 files changed, 480 insertions(+) create mode 100644 keyboards/exclusive/e7v2/keyboard.json create mode 100644 keyboards/exclusive/e7v2/keymaps/default/keymap.c create mode 100644 keyboards/exclusive/e7v2/keymaps/default_iso/keymap.c create mode 100644 keyboards/exclusive/e7v2/readme.md diff --git a/keyboards/exclusive/e7v2/keyboard.json b/keyboards/exclusive/e7v2/keyboard.json new file mode 100644 index 0000000000..542237e1bf --- /dev/null +++ b/keyboards/exclusive/e7v2/keyboard.json @@ -0,0 +1,392 @@ +{ + "manufacturer": "Exclusive / E-Team", + "keyboard_name": "E7V2", + "maintainer": "Aidan Smith", + "bootloader": "atmel-dfu", + "diode_direction": "ROW2COL", + "features": { + "backlight": true, + "bootmagic": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true + }, + "ws2812": { + "pin": "E2" + }, + "rgblight": { + "driver": "ws2812", + "saturation_steps": 8, + "brightness_steps": 8, + "led_count": 54, + "animations": { + "breathing": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "snake": true, + "knight": true, + "christmas": true, + "static_gradient": true, + "alternating": true, + "twinkle": true + } + }, + "backlight": { + "pin": "B6", + "levels": 6 + }, + "matrix_pins": { + "cols": ["D0", "D1", "D2", "D3", "D5", "D4", "D6", "D7", "B4", "F7", "F6", "F5", "F4", "F1", "F0"], + "rows": ["C6", "B0", "B1", "B2", "B3", "B7"] + }, + "processor": "atmega32u4", + "url": "https://exclusive.run/collections/e7-v2", + "usb": { + "device_version": "1.0.0", + "pid": "0xE702", + "vid": "0x4558" + }, + "layouts": { + "LAYOUT_75_ansi": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1.25, "y": 0}, + {"matrix": [0, 2], "x": 2.25, "y": 0}, + {"matrix": [0, 3], "x": 3.25, "y": 0}, + {"matrix": [0, 4], "x": 4.25, "y": 0}, + {"matrix": [0, 5], "x": 5.50, "y": 0}, + {"matrix": [0, 6], "x": 6.50, "y": 0}, + {"matrix": [0, 7], "x": 7.50, "y": 0}, + {"matrix": [0, 8], "x": 8.50, "y": 0}, + {"matrix": [0, 9], "x": 9.75, "y": 0}, + {"matrix": [0, 10], "x": 10.75, "y": 0}, + {"matrix": [0, 11], "x": 11.75, "y": 0}, + {"matrix": [0, 12], "x": 12.75, "y": 0}, + {"matrix": [0, 13], "x": 14, "y": 0}, + {"matrix": [0, 14], "x": 15.25, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1.25}, + {"matrix": [1, 1], "x": 1, "y": 1.25}, + {"matrix": [1, 2], "x": 2, "y": 1.25}, + {"matrix": [1, 3], "x": 3, "y": 1.25}, + {"matrix": [1, 4], "x": 4, "y": 1.25}, + {"matrix": [1, 5], "x": 5, "y": 1.25}, + {"matrix": [1, 6], "x": 6, "y": 1.25}, + {"matrix": [1, 7], "x": 7, "y": 1.25}, + {"matrix": [1, 8], "x": 8, "y": 1.25}, + {"matrix": [1, 9], "x": 9, "y": 1.25}, + {"matrix": [1, 10], "x": 10, "y": 1.25}, + {"matrix": [1, 11], "x": 11, "y": 1.25}, + {"matrix": [1, 12], "x": 12, "y": 1.25}, + {"matrix": [1, 14], "x": 13, "y": 1.25, "w": 2}, + {"matrix": [5, 14], "x": 15.25, "y": 1.25}, + {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5}, + {"matrix": [2, 1], "x": 1.5, "y": 2.25}, + {"matrix": [2, 2], "x": 2.5, "y": 2.25}, + {"matrix": [2, 3], "x": 3.5, "y": 2.25}, + {"matrix": [2, 4], "x": 4.5, "y": 2.25}, + {"matrix": [2, 5], "x": 5.5, "y": 2.25}, + {"matrix": [2, 6], "x": 6.5, "y": 2.25}, + {"matrix": [2, 7], "x": 7.5, "y": 2.25}, + {"matrix": [2, 8], "x": 8.5, "y": 2.25}, + {"matrix": [2, 9], "x": 9.5, "y": 2.25}, + {"matrix": [2, 10], "x": 10.5, "y": 2.25}, + {"matrix": [2, 11], "x": 11.5, "y": 2.25}, + {"matrix": [2, 12], "x": 12.5, "y": 2.25}, + {"matrix": [3, 12], "x": 13.5, "y": 2.25, "w": 1.5}, + {"matrix": [2, 14], "x": 15.25, "y": 2.25}, + {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75}, + {"matrix": [3, 1], "x": 1.75, "y": 3.25}, + {"matrix": [3, 2], "x": 2.75, "y": 3.25}, + {"matrix": [3, 3], "x": 3.75, "y": 3.25}, + {"matrix": [3, 4], "x": 4.75, "y": 3.25}, + {"matrix": [3, 5], "x": 5.75, "y": 3.25}, + {"matrix": [3, 6], "x": 6.75, "y": 3.25}, + {"matrix": [3, 7], "x": 7.75, "y": 3.25}, + {"matrix": [3, 8], "x": 8.75, "y": 3.25}, + {"matrix": [3, 9], "x": 9.75, "y": 3.25}, + {"matrix": [3, 10], "x": 10.75, "y": 3.25}, + {"matrix": [3, 11], "x": 11.75, "y": 3.25}, + {"matrix": [2, 13], "x": 12.75, "y": 3.25, "w": 2.25}, + {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25}, + {"matrix": [4, 2], "x": 2.25, "y": 4.25}, + {"matrix": [4, 3], "x": 3.25, "y": 4.25}, + {"matrix": [4, 4], "x": 4.25, "y": 4.25}, + {"matrix": [4, 5], "x": 5.25, "y": 4.25}, + {"matrix": [4, 6], "x": 6.25, "y": 4.25}, + {"matrix": [4, 7], "x": 7.25, "y": 4.25}, + {"matrix": [4, 8], "x": 8.25, "y": 4.25}, + {"matrix": [4, 9], "x": 9.25, "y": 4.25}, + {"matrix": [4, 10], "x": 10.25, "y": 4.25}, + {"matrix": [4, 11], "x": 11.25, "y": 4.25}, + {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75}, + {"matrix": [4, 13], "x": 14.25, "y": 4.5}, + {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25}, + {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25}, + {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25}, + {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25}, + {"matrix": [5, 8], "x": 10, "y": 5.25, "w": 1.50}, + {"matrix": [5, 10], "x": 11.5, "y": 5.25, "w": 1.50}, + {"matrix": [5, 11], "x": 13.25, "y": 5.5}, + {"matrix": [5, 12], "x": 14.25, "y": 5.5}, + {"matrix": [5, 13], "x": 15.25, "y": 5.5} + ] + }, + "LAYOUT_75_iso": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1.25, "y": 0}, + {"matrix": [0, 2], "x": 2.25, "y": 0}, + {"matrix": [0, 3], "x": 3.25, "y": 0}, + {"matrix": [0, 4], "x": 4.25, "y": 0}, + {"matrix": [0, 5], "x": 5.50, "y": 0}, + {"matrix": [0, 6], "x": 6.50, "y": 0}, + {"matrix": [0, 7], "x": 7.50, "y": 0}, + {"matrix": [0, 8], "x": 8.50, "y": 0}, + {"matrix": [0, 9], "x": 9.75, "y": 0}, + {"matrix": [0, 10], "x": 10.75, "y": 0}, + {"matrix": [0, 11], "x": 11.75, "y": 0}, + {"matrix": [0, 12], "x": 12.75, "y": 0}, + {"matrix": [0, 13], "x": 14, "y": 0}, + {"matrix": [0, 14], "x": 15.25, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1.25}, + {"matrix": [1, 1], "x": 1, "y": 1.25}, + {"matrix": [1, 2], "x": 2, "y": 1.25}, + {"matrix": [1, 3], "x": 3, "y": 1.25}, + {"matrix": [1, 4], "x": 4, "y": 1.25}, + {"matrix": [1, 5], "x": 5, "y": 1.25}, + {"matrix": [1, 6], "x": 6, "y": 1.25}, + {"matrix": [1, 7], "x": 7, "y": 1.25}, + {"matrix": [1, 8], "x": 8, "y": 1.25}, + {"matrix": [1, 9], "x": 9, "y": 1.25}, + {"matrix": [1, 10], "x": 10, "y": 1.25}, + {"matrix": [1, 11], "x": 11, "y": 1.25}, + {"matrix": [1, 12], "x": 12, "y": 1.25}, + {"matrix": [1, 14], "x": 13, "y": 1.25, "w": 2}, + {"matrix": [5, 14], "x": 15.25, "y": 1.25}, + {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5}, + {"matrix": [2, 1], "x": 1.5, "y": 2.25}, + {"matrix": [2, 2], "x": 2.5, "y": 2.25}, + {"matrix": [2, 3], "x": 3.5, "y": 2.25}, + {"matrix": [2, 4], "x": 4.5, "y": 2.25}, + {"matrix": [2, 5], "x": 5.5, "y": 2.25}, + {"matrix": [2, 6], "x": 6.5, "y": 2.25}, + {"matrix": [2, 7], "x": 7.5, "y": 2.25}, + {"matrix": [2, 8], "x": 8.5, "y": 2.25}, + {"matrix": [2, 9], "x": 9.5, "y": 2.25}, + {"matrix": [2, 10], "x": 10.5, "y": 2.25}, + {"matrix": [2, 11], "x": 11.5, "y": 2.25}, + {"matrix": [2, 12], "x": 12.5, "y": 2.25}, + {"matrix": [2, 14], "x": 15.25, "y": 2.25}, + {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75}, + {"matrix": [3, 1], "x": 1.75, "y": 3.25}, + {"matrix": [3, 2], "x": 2.75, "y": 3.25}, + {"matrix": [3, 3], "x": 3.75, "y": 3.25}, + {"matrix": [3, 4], "x": 4.75, "y": 3.25}, + {"matrix": [3, 5], "x": 5.75, "y": 3.25}, + {"matrix": [3, 6], "x": 6.75, "y": 3.25}, + {"matrix": [3, 7], "x": 7.75, "y": 3.25}, + {"matrix": [3, 8], "x": 8.75, "y": 3.25}, + {"matrix": [3, 9], "x": 9.75, "y": 3.25}, + {"matrix": [3, 10], "x": 10.75, "y": 3.25}, + {"matrix": [3, 11], "x": 11.75, "y": 3.25}, + {"matrix": [3, 12], "x": 12.75, "y": 3.25}, + {"matrix": [2, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2}, + {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25}, + {"matrix": [4, 1], "x": 1.25, "y": 4.25}, + {"matrix": [4, 2], "x": 2.25, "y": 4.25}, + {"matrix": [4, 3], "x": 3.25, "y": 4.25}, + {"matrix": [4, 4], "x": 4.25, "y": 4.25}, + {"matrix": [4, 5], "x": 5.25, "y": 4.25}, + {"matrix": [4, 6], "x": 6.25, "y": 4.25}, + {"matrix": [4, 7], "x": 7.25, "y": 4.25}, + {"matrix": [4, 8], "x": 8.25, "y": 4.25}, + {"matrix": [4, 9], "x": 9.25, "y": 4.25}, + {"matrix": [4, 10], "x": 10.25, "y": 4.25}, + {"matrix": [4, 11], "x": 11.25, "y": 4.25}, + {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75}, + {"matrix": [4, 13], "x": 14.25, "y": 4.5}, + {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25}, + {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25}, + {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25}, + {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25}, + {"matrix": [5, 8], "x": 10, "y": 5.25, "w": 1.50}, + {"matrix": [5, 10], "x": 11.5, "y": 5.25, "w": 1.50}, + {"matrix": [5, 11], "x": 13.25, "y": 5.5}, + {"matrix": [5, 12], "x": 14.25, "y": 5.5}, + {"matrix": [5, 13], "x": 15.25, "y": 5.5} + ] + }, + "LAYOUT_75_ansi_split_bs": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1.25, "y": 0}, + {"matrix": [0, 2], "x": 2.25, "y": 0}, + {"matrix": [0, 3], "x": 3.25, "y": 0}, + {"matrix": [0, 4], "x": 4.25, "y": 0}, + {"matrix": [0, 5], "x": 5.50, "y": 0}, + {"matrix": [0, 6], "x": 6.50, "y": 0}, + {"matrix": [0, 7], "x": 7.50, "y": 0}, + {"matrix": [0, 8], "x": 8.50, "y": 0}, + {"matrix": [0, 9], "x": 9.75, "y": 0}, + {"matrix": [0, 10], "x": 10.75, "y": 0}, + {"matrix": [0, 11], "x": 11.75, "y": 0}, + {"matrix": [0, 12], "x": 12.75, "y": 0}, + {"matrix": [0, 13], "x": 14, "y": 0}, + {"matrix": [0, 14], "x": 15.25, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1.25}, + {"matrix": [1, 1], "x": 1, "y": 1.25}, + {"matrix": [1, 2], "x": 2, "y": 1.25}, + {"matrix": [1, 3], "x": 3, "y": 1.25}, + {"matrix": [1, 4], "x": 4, "y": 1.25}, + {"matrix": [1, 5], "x": 5, "y": 1.25}, + {"matrix": [1, 6], "x": 6, "y": 1.25}, + {"matrix": [1, 7], "x": 7, "y": 1.25}, + {"matrix": [1, 8], "x": 8, "y": 1.25}, + {"matrix": [1, 9], "x": 9, "y": 1.25}, + {"matrix": [1, 10], "x": 10, "y": 1.25}, + {"matrix": [1, 11], "x": 11, "y": 1.25}, + {"matrix": [1, 12], "x": 12, "y": 1.25}, + {"matrix": [1, 13], "x": 13, "y": 1.25}, + {"matrix": [1, 14], "x": 14, "y": 1.25}, + {"matrix": [5, 14], "x": 15.25, "y": 1.25}, + {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5}, + {"matrix": [2, 1], "x": 1.5, "y": 2.25}, + {"matrix": [2, 2], "x": 2.5, "y": 2.25}, + {"matrix": [2, 3], "x": 3.5, "y": 2.25}, + {"matrix": [2, 4], "x": 4.5, "y": 2.25}, + {"matrix": [2, 5], "x": 5.5, "y": 2.25}, + {"matrix": [2, 6], "x": 6.5, "y": 2.25}, + {"matrix": [2, 7], "x": 7.5, "y": 2.25}, + {"matrix": [2, 8], "x": 8.5, "y": 2.25}, + {"matrix": [2, 9], "x": 9.5, "y": 2.25}, + {"matrix": [2, 10], "x": 10.5, "y": 2.25}, + {"matrix": [2, 11], "x": 11.5, "y": 2.25}, + {"matrix": [2, 12], "x": 12.5, "y": 2.25}, + {"matrix": [3, 12], "x": 13.5, "y": 2.25, "w": 1.5}, + {"matrix": [2, 14], "x": 15.25, "y": 2.25}, + {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75}, + {"matrix": [3, 1], "x": 1.75, "y": 3.25}, + {"matrix": [3, 2], "x": 2.75, "y": 3.25}, + {"matrix": [3, 3], "x": 3.75, "y": 3.25}, + {"matrix": [3, 4], "x": 4.75, "y": 3.25}, + {"matrix": [3, 5], "x": 5.75, "y": 3.25}, + {"matrix": [3, 6], "x": 6.75, "y": 3.25}, + {"matrix": [3, 7], "x": 7.75, "y": 3.25}, + {"matrix": [3, 8], "x": 8.75, "y": 3.25}, + {"matrix": [3, 9], "x": 9.75, "y": 3.25}, + {"matrix": [3, 10], "x": 10.75, "y": 3.25}, + {"matrix": [3, 11], "x": 11.75, "y": 3.25}, + {"matrix": [2, 13], "x": 12.75, "y": 3.25, "w": 2.25}, + {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25}, + {"matrix": [4, 2], "x": 2.25, "y": 4.25}, + {"matrix": [4, 3], "x": 3.25, "y": 4.25}, + {"matrix": [4, 4], "x": 4.25, "y": 4.25}, + {"matrix": [4, 5], "x": 5.25, "y": 4.25}, + {"matrix": [4, 6], "x": 6.25, "y": 4.25}, + {"matrix": [4, 7], "x": 7.25, "y": 4.25}, + {"matrix": [4, 8], "x": 8.25, "y": 4.25}, + {"matrix": [4, 9], "x": 9.25, "y": 4.25}, + {"matrix": [4, 10], "x": 10.25, "y": 4.25}, + {"matrix": [4, 11], "x": 11.25, "y": 4.25}, + {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75}, + {"matrix": [4, 13], "x": 14.25, "y": 4.5}, + {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25}, + {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25}, + {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25}, + {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25}, + {"matrix": [5, 8], "x": 10, "y": 5.25, "w": 1.50}, + {"matrix": [5, 10], "x": 11.5, "y": 5.25, "w": 1.50}, + {"matrix": [5, 11], "x": 13.25, "y": 5.5}, + {"matrix": [5, 12], "x": 14.25, "y": 5.5}, + {"matrix": [5, 13], "x": 15.25, "y": 5.5} + ] + }, + "LAYOUT_75_iso_split_bs": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1.25, "y": 0}, + {"matrix": [0, 2], "x": 2.25, "y": 0}, + {"matrix": [0, 3], "x": 3.25, "y": 0}, + {"matrix": [0, 4], "x": 4.25, "y": 0}, + {"matrix": [0, 5], "x": 5.50, "y": 0}, + {"matrix": [0, 6], "x": 6.50, "y": 0}, + {"matrix": [0, 7], "x": 7.50, "y": 0}, + {"matrix": [0, 8], "x": 8.50, "y": 0}, + {"matrix": [0, 9], "x": 9.75, "y": 0}, + {"matrix": [0, 10], "x": 10.75, "y": 0}, + {"matrix": [0, 11], "x": 11.75, "y": 0}, + {"matrix": [0, 12], "x": 12.75, "y": 0}, + {"matrix": [0, 13], "x": 14, "y": 0}, + {"matrix": [0, 14], "x": 15.25, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1.25}, + {"matrix": [1, 1], "x": 1, "y": 1.25}, + {"matrix": [1, 2], "x": 2, "y": 1.25}, + {"matrix": [1, 3], "x": 3, "y": 1.25}, + {"matrix": [1, 4], "x": 4, "y": 1.25}, + {"matrix": [1, 5], "x": 5, "y": 1.25}, + {"matrix": [1, 6], "x": 6, "y": 1.25}, + {"matrix": [1, 7], "x": 7, "y": 1.25}, + {"matrix": [1, 8], "x": 8, "y": 1.25}, + {"matrix": [1, 9], "x": 9, "y": 1.25}, + {"matrix": [1, 10], "x": 10, "y": 1.25}, + {"matrix": [1, 11], "x": 11, "y": 1.25}, + {"matrix": [1, 12], "x": 12, "y": 1.25}, + {"matrix": [1, 13], "x": 13, "y": 1.25}, + {"matrix": [1, 14], "x": 14, "y": 1.25}, + {"matrix": [5, 14], "x": 15.25, "y": 1.25}, + {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5}, + {"matrix": [2, 1], "x": 1.5, "y": 2.25}, + {"matrix": [2, 2], "x": 2.5, "y": 2.25}, + {"matrix": [2, 3], "x": 3.5, "y": 2.25}, + {"matrix": [2, 4], "x": 4.5, "y": 2.25}, + {"matrix": [2, 5], "x": 5.5, "y": 2.25}, + {"matrix": [2, 6], "x": 6.5, "y": 2.25}, + {"matrix": [2, 7], "x": 7.5, "y": 2.25}, + {"matrix": [2, 8], "x": 8.5, "y": 2.25}, + {"matrix": [2, 9], "x": 9.5, "y": 2.25}, + {"matrix": [2, 10], "x": 10.5, "y": 2.25}, + {"matrix": [2, 11], "x": 11.5, "y": 2.25}, + {"matrix": [2, 12], "x": 12.5, "y": 2.25}, + {"matrix": [2, 14], "x": 15.25, "y": 2.25}, + {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75}, + {"matrix": [3, 1], "x": 1.75, "y": 3.25}, + {"matrix": [3, 2], "x": 2.75, "y": 3.25}, + {"matrix": [3, 3], "x": 3.75, "y": 3.25}, + {"matrix": [3, 4], "x": 4.75, "y": 3.25}, + {"matrix": [3, 5], "x": 5.75, "y": 3.25}, + {"matrix": [3, 6], "x": 6.75, "y": 3.25}, + {"matrix": [3, 7], "x": 7.75, "y": 3.25}, + {"matrix": [3, 8], "x": 8.75, "y": 3.25}, + {"matrix": [3, 9], "x": 9.75, "y": 3.25}, + {"matrix": [3, 10], "x": 10.75, "y": 3.25}, + {"matrix": [3, 11], "x": 11.75, "y": 3.25}, + {"matrix": [3, 12], "x": 12.75, "y": 3.25}, + {"matrix": [2, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2}, + {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25}, + {"matrix": [4, 1], "x": 1.25, "y": 4.25}, + {"matrix": [4, 2], "x": 2.25, "y": 4.25}, + {"matrix": [4, 3], "x": 3.25, "y": 4.25}, + {"matrix": [4, 4], "x": 4.25, "y": 4.25}, + {"matrix": [4, 5], "x": 5.25, "y": 4.25}, + {"matrix": [4, 6], "x": 6.25, "y": 4.25}, + {"matrix": [4, 7], "x": 7.25, "y": 4.25}, + {"matrix": [4, 8], "x": 8.25, "y": 4.25}, + {"matrix": [4, 9], "x": 9.25, "y": 4.25}, + {"matrix": [4, 10], "x": 10.25, "y": 4.25}, + {"matrix": [4, 11], "x": 11.25, "y": 4.25}, + {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75}, + {"matrix": [4, 13], "x": 14.25, "y": 4.5}, + {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25}, + {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25}, + {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25}, + {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25}, + {"matrix": [5, 8], "x": 10, "y": 5.25, "w": 1.50}, + {"matrix": [5, 10], "x": 11.5, "y": 5.25, "w": 1.50}, + {"matrix": [5, 11], "x": 13.25, "y": 5.5}, + {"matrix": [5, 12], "x": 14.25, "y": 5.5}, + {"matrix": [5, 13], "x": 15.25, "y": 5.5} + ] + } + } +} diff --git a/keyboards/exclusive/e7v2/keymaps/default/keymap.c b/keyboards/exclusive/e7v2/keymaps/default/keymap.c new file mode 100644 index 0000000000..f41b387732 --- /dev/null +++ b/keyboards/exclusive/e7v2/keymaps/default/keymap.c @@ -0,0 +1,30 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│PSc│ │Del│ + * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤ + * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│PgU│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ + * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │PgD│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┘ + * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ + * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┐ + * │Ctrl│GUI │Alt │ │ Alt │ GUI │ ← │ ↓ │ → │ + * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘ + */ + [0] = LAYOUT_75_ansi( + 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_DEL, KC_PSCR, + 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_PGUP, + 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_PGDN, + 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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT + ) +}; diff --git a/keyboards/exclusive/e7v2/keymaps/default_iso/keymap.c b/keyboards/exclusive/e7v2/keymaps/default_iso/keymap.c new file mode 100644 index 0000000000..e6cff42f3f --- /dev/null +++ b/keyboards/exclusive/e7v2/keymaps/default_iso/keymap.c @@ -0,0 +1,30 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + * │Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Del│ │PSC│ + * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┤ + * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│PgU│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤ + * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ ENT │PgD│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ├───┘ + * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤ + * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┐ + * │Ctrl│GUI │Alt │ │ Alt │ GUI │ ← │ ↓ │ → │ + * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘ + */ + [0] = LAYOUT_75_iso( + 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_DEL, KC_PSCR, + 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_PGUP, + 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_PGDN, + 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_LSFT, KC_BSLS, 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT + ) +}; diff --git a/keyboards/exclusive/e7v2/readme.md b/keyboards/exclusive/e7v2/readme.md new file mode 100644 index 0000000000..77345ede70 --- /dev/null +++ b/keyboards/exclusive/e7v2/readme.md @@ -0,0 +1,27 @@ +# E7-V2 + +![E7-V2](https://i.imgur.com/p7Gi1fZ.jpeg) + +The second revision of a 75% keyboard made by Exclusive and run in a Geekhack group buy. + +* Keyboard Maintainer: [AidanSmith.dev](https://github.com/Aidan-OS) +* Hardware Supported: E7-V2 QMK Solder PCB +* Hardware Availability: [Exclusive's Website](https://exclusive.run/collections/e7-v2) + +Make example for this keyboard (after setting up your build environment): + + make exclusive/e7v2:default + +Flashing example for this keyboard: + + make exclusive/e7v2: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 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/exclusive/readme.md b/keyboards/exclusive/readme.md index bee613bf45..7bfc559d79 100644 --- a/keyboards/exclusive/readme.md +++ b/keyboards/exclusive/readme.md @@ -7,5 +7,6 @@ All files related to firmware of keyboards designed by Exclusive. * [e6_rgb](./e6_rgb/): maintainer [astro](https://github.com/yulei) * [e6-v2](./e6v2/): maintainers [MechMerlin](https://github.com/mechmerlin), [amnesia0287](https://github.com/amnesia0287) * [e7-v1](./e7v1): maintainer [masterzen](https://github.com/masterzen) +* [e7-v2](./e7v2): [AidanSmith.dev](https://github.com/Aidan-OS) * [e6.5](./e65): maintainer [masterzen](https://github.com/masterzen) * [e8.5](./e85): maintainer [MechMerlin](https://github.com/mechmerlin) From 02cf2b56fdb7ce80de7c4f3e6e5708076f38aee1 Mon Sep 17 00:00:00 2001 From: "Martin W." Date: Mon, 6 Oct 2025 18:46:41 +0200 Subject: [PATCH 70/99] Add Royal Kludge RK61 (#25694) --- keyboards/royal_kludge/rk61/config.h | 11 + keyboards/royal_kludge/rk61/halconf.h | 9 + keyboards/royal_kludge/rk61/keyboard.json | 223 ++++++++++++++++++ .../rk61/keymaps/default/keymap.c | 111 +++++++++ keyboards/royal_kludge/rk61/mcuconf.h | 9 + keyboards/royal_kludge/rk61/readme.md | 25 ++ keyboards/royal_kludge/rk61/rules.mk | 1 + 7 files changed, 389 insertions(+) create mode 100644 keyboards/royal_kludge/rk61/config.h create mode 100644 keyboards/royal_kludge/rk61/halconf.h create mode 100644 keyboards/royal_kludge/rk61/keyboard.json create mode 100644 keyboards/royal_kludge/rk61/keymaps/default/keymap.c create mode 100644 keyboards/royal_kludge/rk61/mcuconf.h create mode 100644 keyboards/royal_kludge/rk61/readme.md create mode 100644 keyboards/royal_kludge/rk61/rules.mk diff --git a/keyboards/royal_kludge/rk61/config.h b/keyboards/royal_kludge/rk61/config.h new file mode 100644 index 0000000000..22c9d1d3e9 --- /dev/null +++ b/keyboards/royal_kludge/rk61/config.h @@ -0,0 +1,11 @@ +// Copyright 2025 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define WS2812_SPI_DRIVER SPID2 +#define WS2812_SPI_MOSI_PAL_MODE 0 +#define WS2812_SPI_SCK_PAL_MODE 0 +#define WS2812_SPI_SCK_PIN B13 + +#define CAPS_LOCK_LED_INDEX 40 diff --git a/keyboards/royal_kludge/rk61/halconf.h b/keyboards/royal_kludge/rk61/halconf.h new file mode 100644 index 0000000000..b7fd8398a2 --- /dev/null +++ b/keyboards/royal_kludge/rk61/halconf.h @@ -0,0 +1,9 @@ +// Copyright 2025 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define HAL_USE_SPI TRUE + +#include_next + diff --git a/keyboards/royal_kludge/rk61/keyboard.json b/keyboards/royal_kludge/rk61/keyboard.json new file mode 100644 index 0000000000..d98ce4765b --- /dev/null +++ b/keyboards/royal_kludge/rk61/keyboard.json @@ -0,0 +1,223 @@ +{ + "manufacturer": "Royal Kludge", + "keyboard_name": "RK61", + "maintainer": "DEREFERENC3D", + "bootloader": "stm32-dfu", + "diode_direction": "COL2ROW", + "dynamic_keymap": { + "layer_count": 16 + }, + "features": { + "bootmagic": true, + "extrakey": true, + "mousekey": false, + "nkro": true, + "rgb_matrix": true + }, + "matrix_pins": { + "cols": ["A10", "A9", "B2", "A15", "B3", "B4", "B5", "B8", "B9", "C13", "C14", "C15", "A0", "A1"], + "rows": ["A6", "A5", "A4", "A3", "A2"] + }, + "processor": "STM32F072", + "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, + "digital_rain": true, + "dual_beacon": true, + "flower_blooming": true, + "gradient_left_right": true, + "gradient_up_down": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": true, + "jellybean_raindrops": true, + "multisplash": true, + "pixel_flow": true, + "pixel_fractal": true, + "pixel_rain": true, + "rainbow_beacon": true, + "rainbow_moving_chevron": true, + "rainbow_pinwheels": true, + "raindrops": true, + "riverflow": true, + "solid_multisplash": true, + "solid_reactive": true, + "solid_reactive_cross": true, + "solid_reactive_multicross": true, + "solid_reactive_multinexus": true, + "solid_reactive_multiwide": true, + "solid_reactive_nexus": true, + "solid_reactive_simple": true, + "solid_reactive_wide": true, + "solid_splash": true, + "splash": true, + "starlight": true, + "starlight_dual_hue": true, + "starlight_dual_sat": true, + "starlight_smooth": true, + "typing_heatmap": true + }, + "default": { + "hue": 170, + "val": 150 + }, + "driver": "ws2812", + "layout": [ + {"matrix": [0, 13], "x": 218, "y": 0, "flags": 1}, + {"matrix": [0, 12], "x": 193, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 177, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 161, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 145, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 129, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 113, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 97, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 81, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 64, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 48, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 32, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 16, "y": 0, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 24, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 40, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 73, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 89, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 105, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 121, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 137, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 153, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 169, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 185, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 202, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 222, "y": 16, "flags": 1}, + {"matrix": [2, 12], "x": 216, "y": 32, "flags": 1}, + {"matrix": [2, 11], "x": 189, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 173, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 157, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 141, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 125, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 109, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 93, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 77, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 60, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 44, "y": 32, "flags": 4}, + {"matrix": [2, 1], "x": 28, "y": 32, "flags": 4}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 10, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 36, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 52, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 69, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 85, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 101, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 117, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 133, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 149, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 165, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 181, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 212, "y": 48, "flags": 1}, + {"matrix": [4, 12], "x": 224, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 204, "y": 64, "flags": 1}, + {"matrix": [4, 9], "x": 184, "y": 64, "flags": 1}, + {"matrix": [4, 8], "x": 164, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 103, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 42, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 1} + ], + "max_brightness": 200, + "sleep": true + }, + "url": "http://en.rkgaming.com/", + "usb": { + "device_version": "1.0.1", + "pid": "0x6461", + "vid": "0x1480" + }, + "ws2812": { + "pin": "B15", + "driver": "spi" + }, + "community_layouts": ["60_ansi"], + "layouts": { + "LAYOUT_60_ansi": { + "layout": [ + {"label": "ESC", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "!", "matrix": [0, 1], "x": 1, "y": 0}, + {"label": "\"", "matrix": [0, 2], "x": 2, "y": 0}, + {"label": "\u00a3", "matrix": [0, 3], "x": 3, "y": 0}, + {"label": "$", "matrix": [0, 4], "x": 4, "y": 0}, + {"label": "%", "matrix": [0, 5], "x": 5, "y": 0}, + {"label": "^", "matrix": [0, 6], "x": 6, "y": 0}, + {"label": "&", "matrix": [0, 7], "x": 7, "y": 0}, + {"label": "*", "matrix": [0, 8], "x": 8, "y": 0}, + {"label": "(", "matrix": [0, 9], "x": 9, "y": 0}, + {"label": ")", "matrix": [0, 10], "x": 10, "y": 0}, + {"label": "_", "matrix": [0, 11], "x": 11, "y": 0}, + {"label": "+", "matrix": [0, 12], "x": 12, "y": 0}, + {"label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0, "w": 2}, + {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5}, + {"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1}, + {"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1}, + {"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1}, + {"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1}, + {"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1}, + {"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1}, + {"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1}, + {"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1}, + {"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1}, + {"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1}, + {"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1}, + {"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1}, + {"label": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5}, + {"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, + {"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2}, + {"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2}, + {"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2}, + {"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2}, + {"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2}, + {"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2}, + {"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2}, + {"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2}, + {"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2}, + {"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2}, + {"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2}, + {"label": "Enter", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25}, + {"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25}, + {"label": "Z", "matrix": [3, 1], "x": 2.25, "y": 3}, + {"label": "X", "matrix": [3, 2], "x": 3.25, "y": 3}, + {"label": "C", "matrix": [3, 3], "x": 4.25, "y": 3}, + {"label": "V", "matrix": [3, 4], "x": 5.25, "y": 3}, + {"label": "B", "matrix": [3, 5], "x": 6.25, "y": 3}, + {"label": "N", "matrix": [3, 6], "x": 7.25, "y": 3}, + {"label": "M", "matrix": [3, 7], "x": 8.25, "y": 3}, + {"label": "<", "matrix": [3, 8], "x": 9.25, "y": 3}, + {"label": ">", "matrix": [3, 9], "x": 10.25, "y": 3}, + {"label": "?", "matrix": [3, 10], "x": 11.25, "y": 3}, + {"label": "Shift", "matrix": [3, 11], "x": 12.25, "y": 3, "w": 2.75}, + {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25}, + {"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25}, + {"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25}, + {"matrix": [4, 5], "x": 3.75, "y": 4, "w": 6.25}, + {"label": "AltGr", "matrix": [4, 8], "x": 10, "y": 4, "w": 1.25}, + {"label": "Menu", "matrix": [4, 9], "x": 11.25, "y": 4, "w": 1.25}, + {"label": "Ctrl", "matrix": [4, 10], "x": 12.5, "y": 4, "w": 1.25}, + {"label": "Fn", "matrix": [4, 12], "x": 13.75, "y": 4, "w": 1.25} + ] + } + } +} diff --git a/keyboards/royal_kludge/rk61/keymaps/default/keymap.c b/keyboards/royal_kludge/rk61/keymaps/default/keymap.c new file mode 100644 index 0000000000..2efc47913b --- /dev/null +++ b/keyboards/royal_kludge/rk61/keymaps/default/keymap.c @@ -0,0 +1,111 @@ +// Copyright 2025 QMK +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H + +enum layers { + WIN_BASE, + WIN_T, + WIN_ALT, + ARROW_FN, + LWIN_DIS, + WIN_FN, + WIN_T_FN, + WIN_ALT_FN, + MAC_BASE, + MAC_FN, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [WIN_BASE] = LAYOUT_60_ansi( + KC_ESC, 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_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_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_LEFT, KC_DOWN, KC_RIGHT, MO(WIN_FN) + ), + [WIN_FN] = LAYOUT_60_ansi( + KC_GRV, 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_DEL, + _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, RM_VALD, RM_VALU, RM_NEXT, + _______, _______, DF(MAC_BASE), _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______, RM_SPDD, RM_SPDU, TG(ARROW_FN), + _______, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, RM_HUEU, _______, _______, + DF(WIN_ALT), TG(LWIN_DIS), _______, _______, _______, _______, _______, _______ + ), + [WIN_T] = LAYOUT_60_ansi( + KC_GRV, 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_DEL, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, MO(WIN_T_FN) + ), + [WIN_T_FN] = LAYOUT_60_ansi( + KC_ESC, KC_MYCM, KC_WHOM, KC_MAIL, KC_CALC, KC_MSEL, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSPC, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, DF(MAC_BASE), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TG(ARROW_FN), + DF(WIN_BASE), TG(LWIN_DIS), _______, _______, _______, _______, _______, _______ + ), + [WIN_ALT] = LAYOUT_60_ansi( + KC_GRV, 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_DEL, + _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, MO(WIN_ALT_FN) + ), + [WIN_ALT_FN] = LAYOUT_60_ansi( + KC_ESC, KC_MYCM, KC_WHOM, KC_MAIL, KC_CALC, KC_MSEL, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_BSPC, + _______, _______, _______, _______, _______, _______, KC_Y, KC_U, KC_I, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, KC_H, KC_J, KC_K, _______, _______, _______, TG(ARROW_FN), + _______, _______, _______, _______, _______, _______, KC_N, KC_M, KC_COMM, _______, _______, _______, + DF(WIN_T), TG(LWIN_DIS), _______, _______, _______, _______, _______, _______ + ), + [MAC_BASE] = LAYOUT_60_ansi( + KC_ESC, 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_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_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LCTL, KC_LOPT, KC_LCMD, KC_SPC, KC_RCMD, KC_APP, KC_RCTL, MO(MAC_FN) + ), + [MAC_FN] = LAYOUT_60_ansi( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, DF(WIN_BASE), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLSH, _______, + _______, _______, _______, _______, _______, KC_F1, KC_RCTL, KC_F2 + ), + [ARROW_FN] = LAYOUT_60_ansi( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLSH, _______, + _______, _______, _______, _______, KC_RALT, KC_APP, KC_RCTL, _______ + ), + [LWIN_DIS] = LAYOUT_60_ansi( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_NO, _______, _______, _______, _______, _______, _______ + ), +}; + +#ifdef CAPS_LOCK_LED_INDEX +bool rgb_matrix_indicators_user(void) { + if (host_keyboard_led_state().caps_lock) { + rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, 255, 255, 255); + } else { + if (!rgb_matrix_get_flags()) { + rgb_matrix_set_color(CAPS_LOCK_LED_INDEX, 0, 0, 0); + } + } + + if (layer_state_is(LWIN_DIS)) { + rgb_matrix_set_color(59, 255, 255, 255); + } else { + if (!rgb_matrix_get_flags()) { + rgb_matrix_set_color(59, 0, 0, 0); + } + } + + return false; +} +#endif diff --git a/keyboards/royal_kludge/rk61/mcuconf.h b/keyboards/royal_kludge/rk61/mcuconf.h new file mode 100644 index 0000000000..f459d17ee9 --- /dev/null +++ b/keyboards/royal_kludge/rk61/mcuconf.h @@ -0,0 +1,9 @@ +// Copyright 2025 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +#undef STM32_SPI_USE_SPI2 +#define STM32_SPI_USE_SPI2 TRUE diff --git a/keyboards/royal_kludge/rk61/readme.md b/keyboards/royal_kludge/rk61/readme.md new file mode 100644 index 0000000000..d8ba3a3a4f --- /dev/null +++ b/keyboards/royal_kludge/rk61/readme.md @@ -0,0 +1,25 @@ +# Royal Kludge RK61 + +![Royal Kludge RK61](https://imgur.com/9YoEEkH.jpg) + +* Keyboard Maintainer: [DEREFERENC3D](https://github.com/DEREFERENC3D) +* Hardware Supported: Royal Kludge RK61 - wired-only QMK version +* Hardware Availability: [RKGaming.com](https://en.rkgaming.com/product/43/), [Amazon.com](https://www.amazon.com/RK-ROYAL-KLUDGE-Mechanical-Ultra-Compact/dp/B0832LSV8N) + +Make example for this keyboard (after setting up your build environment): + + make royal_kludge/rk61:default + +Flashing example for this keyboard: + + make royal_kludge/rk61: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 3 ways: + +* **Bootmagic reset**: Hold down the Escape key and plug in the keyboard (this one might be disabled on the stock firmware) +* **Physical reset button**: Briefly press the button on the PCB, located under the space bar keycap, to the right of the space bar's switch +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available. On the stock firmware, VIA should allow it to be mapped. diff --git a/keyboards/royal_kludge/rk61/rules.mk b/keyboards/royal_kludge/rk61/rules.mk new file mode 100644 index 0000000000..fb3dcdbf7a --- /dev/null +++ b/keyboards/royal_kludge/rk61/rules.mk @@ -0,0 +1 @@ +DFU_SUFFIX_ARGS = -p FFFF -v FFFF From 0550830909e854d2ac0203905c861a868e82b289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Mart=C3=ADnez?= <58857054+elpekenin@users.noreply.github.com> Date: Wed, 8 Oct 2025 04:10:38 +0200 Subject: [PATCH 71/99] [QP] Minor cleanup and support for RGB888 surface (#25706) Co-authored-by: Drashna Jaelre --- docs/quantum_painter.md | 2 + drivers/painter/comms/qp_comms_spi.c | 2 +- drivers/painter/generic/qp_surface.h | 10 ++ drivers/painter/generic/qp_surface_internal.h | 1 + drivers/painter/generic/qp_surface_rgb565.c | 2 +- drivers/painter/generic/qp_surface_rgb888.c | 143 ++++++++++++++++++ drivers/painter/ili9xxx/qp_ili9486.c | 2 +- drivers/painter/tft_panel/qp_tft_panel.c | 7 +- quantum/painter/qff.h | 10 +- quantum/painter/qgf.c | 2 +- quantum/painter/qgf.h | 16 +- quantum/painter/qp_draw_core.c | 22 +-- quantum/painter/qp_draw_ellipse.c | 2 +- quantum/painter/qp_internal.h | 8 +- quantum/painter/qp_internal_formats.h | 15 +- quantum/painter/rules.mk | 3 +- 16 files changed, 194 insertions(+), 53 deletions(-) create mode 100644 drivers/painter/generic/qp_surface_rgb888.c diff --git a/docs/quantum_painter.md b/docs/quantum_painter.md index bbe8944516..fbc72cb053 100644 --- a/docs/quantum_painter.md +++ b/docs/quantum_painter.md @@ -534,6 +534,8 @@ QUANTUM_PAINTER_DRIVERS += surface Creating a surface in firmware can then be done with the following APIs: ```c +// 24bpp RGB888 surface: +painter_device_t qp_make_rgb888_surface(uint16_t panel_width, uint16_t panel_height, void *buffer); // 16bpp RGB565 surface: painter_device_t qp_make_rgb565_surface(uint16_t panel_width, uint16_t panel_height, void *buffer); // 1bpp monochrome surface: diff --git a/drivers/painter/comms/qp_comms_spi.c b/drivers/painter/comms/qp_comms_spi.c index 4e6067394b..8f4fc12a3c 100644 --- a/drivers/painter/comms/qp_comms_spi.c +++ b/drivers/painter/comms/qp_comms_spi.c @@ -36,7 +36,7 @@ uint32_t qp_comms_spi_send_data(painter_device_t device, const void *data, uint3 const uint32_t max_msg_length = 1024; while (bytes_remaining > 0) { - uint32_t bytes_this_loop = QP_MIN(bytes_remaining, max_msg_length); + uint32_t bytes_this_loop = MIN(bytes_remaining, max_msg_length); spi_transmit(p, bytes_this_loop); p += bytes_this_loop; bytes_remaining -= bytes_this_loop; diff --git a/drivers/painter/generic/qp_surface.h b/drivers/painter/generic/qp_surface.h index a291793649..f602a8770b 100644 --- a/drivers/painter/generic/qp_surface.h +++ b/drivers/painter/generic/qp_surface.h @@ -50,6 +50,16 @@ painter_device_t qp_make_rgb565_surface(uint16_t panel_width, uint16_t panel_hei */ painter_device_t qp_make_mono1bpp_surface(uint16_t panel_width, uint16_t panel_height, void *buffer); +/** + * Factory method for an RGB888 surface (aka framebuffer). + * + * @param panel_width[in] the width of the display panel + * @param panel_height[in] the height of the display panel + * @param buffer[in] pointer to a preallocated uint8_t buffer of size `SURFACE_REQUIRED_BUFFER_BYTE_SIZE(panel_width, panel_height, 16)` + * @return the device handle used with all drawing routines in Quantum Painter + */ +painter_device_t qp_make_rgb888_surface(uint16_t panel_width, uint16_t panel_height, void *buffer); + /** * Helper method to draw the contents of the framebuffer to the target device. * diff --git a/drivers/painter/generic/qp_surface_internal.h b/drivers/painter/generic/qp_surface_internal.h index 71f82e924d..e05a58594b 100644 --- a/drivers/painter/generic/qp_surface_internal.h +++ b/drivers/painter/generic/qp_surface_internal.h @@ -45,6 +45,7 @@ typedef struct surface_painter_device_t { void * buffer; uint8_t * u8buffer; uint16_t *u16buffer; + rgb_t * rgbbuffer; }; // Manually manage the viewport for streaming pixel data to the display diff --git a/drivers/painter/generic/qp_surface_rgb565.c b/drivers/painter/generic/qp_surface_rgb565.c index c5b351311a..2426d53c0c 100644 --- a/drivers/painter/generic/qp_surface_rgb565.c +++ b/drivers/painter/generic/qp_surface_rgb565.c @@ -52,7 +52,7 @@ static bool qp_surface_pixdata_rgb565(painter_device_t device, const void *pixel // Pixel colour conversion static bool qp_surface_palette_convert_rgb565_swapped(painter_device_t device, int16_t palette_size, qp_pixel_t *palette) { for (int16_t i = 0; i < palette_size; ++i) { - rgb_t rgb = hsv_to_rgb_nocie((hsv_t){palette[i].hsv888.h, palette[i].hsv888.s, palette[i].hsv888.v}); + rgb_t rgb = hsv_to_rgb_nocie(palette[i].hsv888); uint16_t rgb565 = (((uint16_t)rgb.r) >> 3) << 11 | (((uint16_t)rgb.g) >> 2) << 5 | (((uint16_t)rgb.b) >> 3); palette[i].rgb565 = __builtin_bswap16(rgb565); } diff --git a/drivers/painter/generic/qp_surface_rgb888.c b/drivers/painter/generic/qp_surface_rgb888.c new file mode 100644 index 0000000000..68c824b0e4 --- /dev/null +++ b/drivers/painter/generic/qp_surface_rgb888.c @@ -0,0 +1,143 @@ +// Copyright 2022 Nick Brassel (@tzarc) +// SPDX-License-Identifier: GPL-2.0-or-later + +#ifdef QUANTUM_PAINTER_SURFACE_ENABLE + +# include "color.h" +# include "qp_draw.h" +# include "qp_surface_internal.h" +# include "qp_comms_dummy.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Surface driver impl: rgb888 + +static inline void setpixel_rgb888(surface_painter_device_t *surface, uint16_t x, uint16_t y, rgb_t rgb888) { + uint16_t w = surface->base.panel_width; + uint16_t h = surface->base.panel_height; + + // Drop out if it's off-screen + if (x >= w || y >= h) { + return; + } + + // Skip messing with the dirty info if the original value already matches + if (memcmp(&surface->rgbbuffer[y * w + x], &rgb888, sizeof(rgb_t)) != 0) { + // Update the dirty region + qp_surface_update_dirty(&surface->dirty, x, y); + + // Update the pixel data in the buffer + surface->rgbbuffer[y * w + x] = rgb888; + } +} + +static inline void append_pixel_rgb888(surface_painter_device_t *surface, rgb_t rgb888) { + setpixel_rgb888(surface, surface->viewport.pixdata_x, surface->viewport.pixdata_y, rgb888); + qp_surface_increment_pixdata_location(&surface->viewport); +} + +static inline void stream_pixdata_rgb888(surface_painter_device_t *surface, const rgb_t *data, uint32_t native_pixel_count) { + for (uint32_t pixel_counter = 0; pixel_counter < native_pixel_count; ++pixel_counter) { + append_pixel_rgb888(surface, data[pixel_counter]); + } +} + +// Stream pixel data to the current write position in GRAM +static bool qp_surface_pixdata_rgb888(painter_device_t device, const void *pixel_data, uint32_t native_pixel_count) { + painter_driver_t * driver = (painter_driver_t *)device; + surface_painter_device_t *surface = (surface_painter_device_t *)driver; + stream_pixdata_rgb888(surface, (const rgb_t *)pixel_data, native_pixel_count); + return true; +} + +// Pixel colour conversion +static bool qp_surface_palette_convert_rgb888(painter_device_t device, int16_t palette_size, qp_pixel_t *palette) { + for (int16_t i = 0; i < palette_size; ++i) { + palette[i].rgb888 = hsv_to_rgb_nocie(palette[i].hsv888); + } + return true; +} + +// Append pixels to the target location, keyed by the pixel index +static bool qp_surface_append_pixels_rgb888(painter_device_t device, uint8_t *target_buffer, qp_pixel_t *palette, uint32_t pixel_offset, uint32_t pixel_count, uint8_t *palette_indices) { + rgb_t *buf = (rgb_t *)target_buffer; + for (uint32_t i = 0; i < pixel_count; ++i) { + buf[pixel_offset + i] = palette[palette_indices[i]].rgb888; + } + return true; +} + +static bool rgb888_target_pixdata_transfer(painter_driver_t *surface_driver, painter_driver_t *target_driver, uint16_t x, uint16_t y, bool entire_surface) { + surface_painter_device_t *surface_handle = (surface_painter_device_t *)surface_driver; + + uint16_t l = entire_surface ? 0 : surface_handle->dirty.l; + uint16_t t = entire_surface ? 0 : surface_handle->dirty.t; + uint16_t r = entire_surface ? (surface_handle->base.panel_width - 1) : surface_handle->dirty.r; + uint16_t b = entire_surface ? (surface_handle->base.panel_height - 1) : surface_handle->dirty.b; + + // Set the target drawing area + bool ok = qp_viewport((painter_device_t)target_driver, x + l, y + t, x + r, y + b); + if (!ok) { + qp_dprintf("rgb888_target_pixdata_transfer: fail (could not set target viewport)\n"); + return false; + } + + // Housekeeping of the amount of pixels to transfer + uint32_t total_pixel_count = (8 * QUANTUM_PAINTER_PIXDATA_BUFFER_SIZE) / surface_driver->native_bits_per_pixel; + uint32_t pixel_counter = 0; + rgb_t * target_buffer = (rgb_t *)qp_internal_global_pixdata_buffer; + + // Fill the global pixdata area so that we can start transferring to the panel + for (uint16_t y = t; y <= b; ++y) { + for (uint16_t x = l; x <= r; ++x) { + // Update the target buffer + target_buffer[pixel_counter++] = surface_handle->rgbbuffer[y * surface_handle->base.panel_width + x]; + + // If we've accumulated enough data, send it + if (pixel_counter == total_pixel_count) { + ok = qp_pixdata((painter_device_t)target_driver, qp_internal_global_pixdata_buffer, pixel_counter); + if (!ok) { + qp_dprintf("rgb888_target_pixdata_transfer: fail (could not stream pixdata to target)\n"); + return false; + } + // Reset the counter + pixel_counter = 0; + } + } + } + + // If there's any leftover data, send it + if (pixel_counter > 0) { + ok = qp_pixdata((painter_device_t)target_driver, qp_internal_global_pixdata_buffer, pixel_counter); + if (!ok) { + qp_dprintf("rgb888_target_pixdata_transfer: fail (could not stream pixdata to target)\n"); + return false; + } + } + + return true; +} + +static bool qp_surface_append_pixdata_rgb888(painter_device_t device, uint8_t *target_buffer, uint32_t pixdata_offset, uint8_t pixdata_byte) { + target_buffer[pixdata_offset] = pixdata_byte; + return true; +} + +const surface_painter_driver_vtable_t rgb888_surface_driver_vtable = { + .base = + { + .init = qp_surface_init, + .power = qp_surface_power, + .clear = qp_surface_clear, + .flush = qp_surface_flush, + .pixdata = qp_surface_pixdata_rgb888, + .viewport = qp_surface_viewport, + .palette_convert = qp_surface_palette_convert_rgb888, + .append_pixels = qp_surface_append_pixels_rgb888, + .append_pixdata = qp_surface_append_pixdata_rgb888, + }, + .target_pixdata_transfer = rgb888_target_pixdata_transfer, +}; + +SURFACE_FACTORY_FUNCTION_IMPL(qp_make_rgb888_surface, rgb888_surface_driver_vtable, 24); + +#endif // QUANTUM_PAINTER_SURFACE_ENABLE diff --git a/drivers/painter/ili9xxx/qp_ili9486.c b/drivers/painter/ili9xxx/qp_ili9486.c index 48db779c04..5a2e226668 100644 --- a/drivers/painter/ili9xxx/qp_ili9486.c +++ b/drivers/painter/ili9xxx/qp_ili9486.c @@ -90,7 +90,7 @@ static uint32_t qp_comms_spi_send_data_odd_cs_pulse(painter_device_t device, con gpio_write_pin_high(comms_config->dc_pin); while (bytes_remaining > 0) { - uint32_t bytes_this_loop = QP_MIN(bytes_remaining, max_msg_length); + uint32_t bytes_this_loop = MIN(bytes_remaining, max_msg_length); bool odd_bytes = bytes_this_loop & 1; // send data diff --git a/drivers/painter/tft_panel/qp_tft_panel.c b/drivers/painter/tft_panel/qp_tft_panel.c index c8e33343d4..a6c72b4f6f 100644 --- a/drivers/painter/tft_panel/qp_tft_panel.c +++ b/drivers/painter/tft_panel/qp_tft_panel.c @@ -90,7 +90,7 @@ bool qp_tft_panel_pixdata(painter_device_t device, const void *pixel_data, uint3 bool qp_tft_panel_palette_convert_rgb565_swapped(painter_device_t device, int16_t palette_size, qp_pixel_t *palette) { for (int16_t i = 0; i < palette_size; ++i) { - rgb_t rgb = hsv_to_rgb_nocie((hsv_t){palette[i].hsv888.h, palette[i].hsv888.s, palette[i].hsv888.v}); + rgb_t rgb = hsv_to_rgb_nocie(palette[i].hsv888); uint16_t rgb565 = (((uint16_t)rgb.r) >> 3) << 11 | (((uint16_t)rgb.g) >> 2) << 5 | (((uint16_t)rgb.b) >> 3); palette[i].rgb565 = __builtin_bswap16(rgb565); } @@ -99,10 +99,7 @@ bool qp_tft_panel_palette_convert_rgb565_swapped(painter_device_t device, int16_ bool qp_tft_panel_palette_convert_rgb888(painter_device_t device, int16_t palette_size, qp_pixel_t *palette) { for (int16_t i = 0; i < palette_size; ++i) { - rgb_t rgb = hsv_to_rgb_nocie((hsv_t){palette[i].hsv888.h, palette[i].hsv888.s, palette[i].hsv888.v}); - palette[i].rgb888.r = rgb.r; - palette[i].rgb888.g = rgb.g; - palette[i].rgb888.b = rgb.b; + palette[i].rgb888 = hsv_to_rgb_nocie(palette[i].hsv888); } return true; } diff --git a/quantum/painter/qff.h b/quantum/painter/qff.h index ed88508d73..f5c59b315b 100644 --- a/quantum/painter/qff.h +++ b/quantum/painter/qff.h @@ -22,7 +22,7 @@ #define QFF_FONT_DESCRIPTOR_TYPEID 0x00 -typedef struct QP_PACKED qff_font_descriptor_v1_t { +typedef struct PACKED qff_font_descriptor_v1_t { qgf_block_header_v1_t header; // = { .type_id = 0x00, .neg_type_id = (~0x00), .length = 20 } uint32_t magic : 24; // constant, equal to 0x464651 ("QFF") uint8_t qff_version; // constant, equal to 0x01 @@ -51,13 +51,13 @@ STATIC_ASSERT(sizeof(qff_font_descriptor_v1_t) == (sizeof(qgf_block_header_v1_t) #define QFF_GLYPH_OFFSET_BITS 18 #define QFF_GLYPH_OFFSET_MASK (((1 << QFF_GLYPH_OFFSET_BITS) - 1) << QFF_GLYPH_WIDTH_BITS) -typedef struct QP_PACKED qff_ascii_glyph_v1_t { +typedef struct PACKED qff_ascii_glyph_v1_t { uint32_t value : 24; // Uses QFF_GLYPH_*_(BITS|MASK) as bitfield ordering is compiler-defined } qff_ascii_glyph_v1_t; STATIC_ASSERT(sizeof(qff_ascii_glyph_v1_t) == 3, "qff_ascii_glyph_v1_t must be 3 bytes in v1 of QFF"); -typedef struct QP_PACKED qff_ascii_glyph_table_v1_t { +typedef struct PACKED qff_ascii_glyph_table_v1_t { qgf_block_header_v1_t header; // = { .type_id = 0x01, .neg_type_id = (~0x01), .length = 285 } qff_ascii_glyph_v1_t glyph[95]; // 95 glyphs, 0x20..0x7E } qff_ascii_glyph_table_v1_t; @@ -69,14 +69,14 @@ STATIC_ASSERT(sizeof(qff_ascii_glyph_table_v1_t) == (sizeof(qgf_block_header_v1_ #define QFF_UNICODE_GLYPH_DESCRIPTOR_TYPEID 0x02 -typedef struct QP_PACKED qff_unicode_glyph_v1_t { +typedef struct PACKED qff_unicode_glyph_v1_t { uint32_t code_point : 24; uint32_t value : 24; // Uses QFF_GLYPH_*_(BITS|MASK) as bitfield ordering is compiler-defined } qff_unicode_glyph_v1_t; STATIC_ASSERT(sizeof(qff_unicode_glyph_v1_t) == 6, "qff_unicode_glyph_v1_t must be 6 bytes in v1 of QFF"); -typedef struct QP_PACKED qff_unicode_glyph_table_v1_t { +typedef struct PACKED qff_unicode_glyph_table_v1_t { qgf_block_header_v1_t header; // = { .type_id = 0x02, .neg_type_id = (~0x02), .length = (N * 6) } qff_unicode_glyph_v1_t glyph[0]; // Extent of '0' signifies that this struct is immediately followed by the glyph data } qff_unicode_glyph_table_v1_t; diff --git a/quantum/painter/qgf.c b/quantum/painter/qgf.c index 07c3f80314..e5a1895b74 100644 --- a/quantum/painter/qgf.c +++ b/quantum/painter/qgf.c @@ -26,7 +26,7 @@ bool qgf_validate_block_header(qgf_block_header_v1_t *desc, uint8_t expected_typ bool qgf_parse_format(qp_image_format_t format, uint8_t *bpp, bool *has_palette, bool *is_panel_native) { // clang-format off - static const struct QP_PACKED { + static const struct PACKED { uint8_t bpp; bool has_palette; bool is_panel_native; diff --git a/quantum/painter/qgf.h b/quantum/painter/qgf.h index a1e245f15d..87a9124f27 100644 --- a/quantum/painter/qgf.h +++ b/quantum/painter/qgf.h @@ -19,7 +19,7 @@ ///////////////////////////////////////// // Common block header -typedef struct QP_PACKED qgf_block_header_v1_t { +typedef struct PACKED qgf_block_header_v1_t { uint8_t type_id; // See each respective block type below. uint8_t neg_type_id; // Negated type ID, used for detecting parsing errors. uint32_t length : 24; // 24-bit blob length, allowing for block sizes of a maximum of 16MB. @@ -32,7 +32,7 @@ STATIC_ASSERT(sizeof(qgf_block_header_v1_t) == 5, "qgf_block_header_v1_t must be #define QGF_GRAPHICS_DESCRIPTOR_TYPEID 0x00 -typedef struct QP_PACKED qgf_graphics_descriptor_v1_t { +typedef struct PACKED qgf_graphics_descriptor_v1_t { qgf_block_header_v1_t header; // = { .type_id = 0x00, .neg_type_id = (~0x00), .length = 18 } uint32_t magic : 24; // constant, equal to 0x464751 ("QGF") uint8_t qgf_version; // constant, equal to 0x01 @@ -52,7 +52,7 @@ STATIC_ASSERT(sizeof(qgf_graphics_descriptor_v1_t) == (sizeof(qgf_block_header_v #define QGF_FRAME_OFFSET_DESCRIPTOR_TYPEID 0x01 -typedef struct QP_PACKED qgf_frame_offsets_v1_t { +typedef struct PACKED qgf_frame_offsets_v1_t { qgf_block_header_v1_t header; // = { .type_id = 0x01, .neg_type_id = (~0x01), .length = (N * sizeof(uint32_t)) } uint32_t offset[0]; // '0' signifies that this struct is immediately followed by the frame offsets } qgf_frame_offsets_v1_t; @@ -64,7 +64,7 @@ STATIC_ASSERT(sizeof(qgf_frame_offsets_v1_t) == sizeof(qgf_block_header_v1_t), " #define QGF_FRAME_DESCRIPTOR_TYPEID 0x02 -typedef struct QP_PACKED qgf_frame_v1_t { +typedef struct PACKED qgf_frame_v1_t { qgf_block_header_v1_t header; // = { .type_id = 0x02, .neg_type_id = (~0x02), .length = 6 } qp_image_format_t format : 8; // Frame format, see qp_internal_formats.h. uint8_t flags; // Frame flags, see below. @@ -83,7 +83,7 @@ STATIC_ASSERT(sizeof(qgf_frame_v1_t) == (sizeof(qgf_block_header_v1_t) + 6), "qg #define QGF_FRAME_PALETTE_DESCRIPTOR_TYPEID 0x03 -typedef struct QP_PACKED qgf_palette_entry_v1_t { +typedef struct PACKED qgf_palette_entry_v1_t { uint8_t h; // hue component: `[0,360)` degrees is mapped to `[0,255]` uint8_t. uint8_t s; // saturation component: `[0,1]` is mapped to `[0,255]` uint8_t. uint8_t v; // value component: `[0,1]` is mapped to `[0,255]` uint8_t. @@ -91,7 +91,7 @@ typedef struct QP_PACKED qgf_palette_entry_v1_t { STATIC_ASSERT(sizeof(qgf_palette_entry_v1_t) == 3, "Palette entry is not 3 bytes in size"); -typedef struct QP_PACKED qgf_palette_v1_t { +typedef struct PACKED qgf_palette_v1_t { qgf_block_header_v1_t header; // = { .type_id = 0x03, .neg_type_id = (~0x03), .length = (N * 3 * sizeof(uint8_t)) } qgf_palette_entry_v1_t hsv[0]; // N * hsv, where N is the number of palette entries depending on the frame format in the descriptor } qgf_palette_v1_t; @@ -103,7 +103,7 @@ STATIC_ASSERT(sizeof(qgf_palette_v1_t) == sizeof(qgf_block_header_v1_t), "qgf_pa #define QGF_FRAME_DELTA_DESCRIPTOR_TYPEID 0x04 -typedef struct QP_PACKED qgf_delta_v1_t { +typedef struct PACKED qgf_delta_v1_t { qgf_block_header_v1_t header; // = { .type_id = 0x04, .neg_type_id = (~0x04), .length = 8 } uint16_t left; // The left pixel location to draw the delta image uint16_t top; // The top pixel location to draw the delta image @@ -118,7 +118,7 @@ STATIC_ASSERT(sizeof(qgf_delta_v1_t) == (sizeof(qgf_block_header_v1_t) + 8), "qg #define QGF_FRAME_DATA_DESCRIPTOR_TYPEID 0x05 -typedef struct QP_PACKED qgf_data_v1_t { +typedef struct PACKED qgf_data_v1_t { qgf_block_header_v1_t header; // = { .type_id = 0x05, .neg_type_id = (~0x05), .length = N } uint8_t data[0]; // 0 signifies that this struct is immediately followed by the length of data specified in the header } qgf_data_v1_t; diff --git a/quantum/painter/qp_draw_core.c b/quantum/painter/qp_draw_core.c index 852abb19e8..3958045943 100644 --- a/quantum/painter/qp_draw_core.c +++ b/quantum/painter/qp_draw_core.c @@ -52,7 +52,7 @@ bool qp_internal_setpixel_impl(painter_device_t device, uint16_t x, uint16_t y) void qp_internal_fill_pixdata(painter_device_t device, uint32_t num_pixels, uint8_t hue, uint8_t sat, uint8_t val) { painter_driver_t *driver = (painter_driver_t *)device; uint32_t pixels_in_pixdata = qp_internal_num_pixels_in_buffer(device); - num_pixels = QP_MIN(pixels_in_pixdata, num_pixels); + num_pixels = MIN(pixels_in_pixdata, num_pixels); // Convert the color to native pixel format qp_pixel_t color = {.hsv888 = {.h = hue, .s = sat, .v = val}}; @@ -232,17 +232,17 @@ bool qp_internal_fillrect_helper_impl(painter_device_t device, uint16_t left, ui uint32_t pixels_in_pixdata = qp_internal_num_pixels_in_buffer(device); painter_driver_t *driver = (painter_driver_t *)device; - uint16_t l = QP_MIN(left, right); - uint16_t r = QP_MAX(left, right); - uint16_t t = QP_MIN(top, bottom); - uint16_t b = QP_MAX(top, bottom); + uint16_t l = MIN(left, right); + uint16_t r = MAX(left, right); + uint16_t t = MIN(top, bottom); + uint16_t b = MAX(top, bottom); uint16_t w = r - l + 1; uint16_t h = b - t + 1; uint32_t remaining = w * h; driver->driver_vtable->viewport(device, l, t, r, b); while (remaining > 0) { - uint32_t transmit = QP_MIN(remaining, pixels_in_pixdata); + uint32_t transmit = MIN(remaining, pixels_in_pixdata); if (!driver->driver_vtable->pixdata(device, qp_internal_global_pixdata_buffer, transmit)) { return false; } @@ -260,10 +260,10 @@ bool qp_rect(painter_device_t device, uint16_t left, uint16_t top, uint16_t righ } // Cater for cases where people have submitted the coordinates backwards - uint16_t l = QP_MIN(left, right); - uint16_t r = QP_MAX(left, right); - uint16_t t = QP_MIN(top, bottom); - uint16_t b = QP_MAX(top, bottom); + uint16_t l = MIN(left, right); + uint16_t r = MAX(left, right); + uint16_t t = MIN(top, bottom); + uint16_t b = MAX(top, bottom); uint16_t w = r - l + 1; uint16_t h = b - t + 1; @@ -281,7 +281,7 @@ bool qp_rect(painter_device_t device, uint16_t left, uint16_t top, uint16_t righ ret = qp_internal_fillrect_helper_impl(device, l, t, r, b); } else { // Fill up the pixdata buffer with the required number of native pixels - qp_internal_fill_pixdata(device, QP_MAX(w, h), hue, sat, val); + qp_internal_fill_pixdata(device, MAX(w, h), hue, sat, val); // Draw 4x filled single-width rects to create an outline if (!qp_internal_fillrect_helper_impl(device, l, t, r, t) || !qp_internal_fillrect_helper_impl(device, l, b, r, b) || !qp_internal_fillrect_helper_impl(device, l, t + 1, l, b - 1) || !qp_internal_fillrect_helper_impl(device, r, t + 1, r, b - 1)) { diff --git a/quantum/painter/qp_draw_ellipse.c b/quantum/painter/qp_draw_ellipse.c index 9e77bca8b0..22f019d179 100644 --- a/quantum/painter/qp_draw_ellipse.c +++ b/quantum/painter/qp_draw_ellipse.c @@ -75,7 +75,7 @@ bool qp_ellipse(painter_device_t device, uint16_t x, uint16_t y, uint16_t sizex, int16_t dx = 0; int16_t dy = ((int16_t)sizey); - qp_internal_fill_pixdata(device, QP_MAX(sizex, sizey), hue, sat, val); + qp_internal_fill_pixdata(device, MAX(sizex, sizey), hue, sat, val); if (!qp_comms_start(device)) { qp_dprintf("qp_ellipse: fail (could not start comms)\n"); diff --git a/quantum/painter/qp_internal.h b/quantum/painter/qp_internal.h index e7a6d113c5..52b1b5c69d 100644 --- a/quantum/painter/qp_internal.h +++ b/quantum/painter/qp_internal.h @@ -5,17 +5,11 @@ #include "quantum.h" #include "qp.h" +#include "util.h" // PACKED/MIN/MAX //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Helpers -// Mark certain types that there should be no padding bytes between members. -#define QP_PACKED __attribute__((packed)) - -// Min/max defines -#define QP_MIN(X, Y) (((X) < (Y)) ? (X) : (Y)) -#define QP_MAX(X, Y) (((X) > (Y)) ? (X) : (Y)) - #ifdef QUANTUM_PAINTER_DEBUG # include # include diff --git a/quantum/painter/qp_internal_formats.h b/quantum/painter/qp_internal_formats.h index bd7105cab2..28cff0cd61 100644 --- a/quantum/painter/qp_internal_formats.h +++ b/quantum/painter/qp_internal_formats.h @@ -3,6 +3,7 @@ #pragma once +#include "color.h" #include "compiler_support.h" #include "qp_internal.h" @@ -10,21 +11,13 @@ // Quantum Painter pixel formats // Datatype containing a pixel's color. The internal member used is dependent on the external context. -typedef union QP_PACKED qp_pixel_t { +typedef union PACKED qp_pixel_t { uint8_t mono; uint8_t palette_idx; - struct QP_PACKED { - uint8_t h; - uint8_t s; - uint8_t v; - } hsv888; + hsv_t hsv888; - struct QP_PACKED { - uint8_t r; - uint8_t g; - uint8_t b; - } rgb888; + rgb_t rgb888; uint16_t rgb565; diff --git a/quantum/painter/rules.mk b/quantum/painter/rules.mk index 10c2698092..2c5bc17eed 100644 --- a/quantum/painter/rules.mk +++ b/quantum/painter/rules.mk @@ -247,7 +247,8 @@ ifeq ($(strip $(QUANTUM_PAINTER_NEEDS_SURFACE)), yes) SRC += \ $(DRIVER_PATH)/painter/generic/qp_surface_common.c \ $(DRIVER_PATH)/painter/generic/qp_surface_mono1bpp.c \ - $(DRIVER_PATH)/painter/generic/qp_surface_rgb565.c + $(DRIVER_PATH)/painter/generic/qp_surface_rgb565.c \ + $(DRIVER_PATH)/painter/generic/qp_surface_rgb888.c endif # If dummy comms is needed, set up the required files From 0aae222ab6fd15355e5bc3b113b05484373cc8b1 Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Wed, 8 Oct 2025 08:00:50 -0600 Subject: [PATCH 72/99] Fixup `kprepublic/bm60hsrgb_poker/rev2` (#25649) Fixup kprepublic/bm60hsrgb/rev2 - Remove RGBLight configuration and throw error if RGBLight & RGB Matrix are enabled together - the WS2812 driver cannot be used for RGBLight as it is being used by this keyboard's custom RGB Matrix driver - Migrate RGB Matrix configuration to DD - Migrate default keymap to JSON - Use short SPDX license headers --- .../kprepublic/bm60hsrgb_poker/rev2/config.h | 28 +----- .../bm60hsrgb_poker/rev2/keyboard.json | 93 ++++++++++++++----- .../rev2/keymaps/default/keymap.c | 35 ------- .../rev2/keymaps/default/keymap.json | 21 +++++ .../kprepublic/bm60hsrgb_poker/rev2/rev2.c | 69 ++------------ .../kprepublic/bm60hsrgb_poker/rev2/rules.mk | 6 +- 6 files changed, 103 insertions(+), 149 deletions(-) delete mode 100644 keyboards/kprepublic/bm60hsrgb_poker/rev2/keymaps/default/keymap.c create mode 100644 keyboards/kprepublic/bm60hsrgb_poker/rev2/keymaps/default/keymap.json diff --git a/keyboards/kprepublic/bm60hsrgb_poker/rev2/config.h b/keyboards/kprepublic/bm60hsrgb_poker/rev2/config.h index 843c5b2625..52d273230f 100644 --- a/keyboards/kprepublic/bm60hsrgb_poker/rev2/config.h +++ b/keyboards/kprepublic/bm60hsrgb_poker/rev2/config.h @@ -1,29 +1,7 @@ -/* Copyright 2021 bdtc123 - * - * 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 2021 bdtc123 +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once #define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND #define IS31FL3733_LED_COUNT 61 - -// Underglow LEDs are WS2812, but someone might want to use RGBLIGHT for them; -// don't use those LEDs in RGB Matrix in that case. -#ifdef RGBLIGHT_ENABLE -# define WS2812_LED_COUNT 0 -#else -# define WS2812_LED_COUNT 6 -#endif - -#define RGB_MATRIX_LED_COUNT (IS31FL3733_LED_COUNT + WS2812_LED_COUNT) +#define WS2812_LED_COUNT 6 diff --git a/keyboards/kprepublic/bm60hsrgb_poker/rev2/keyboard.json b/keyboards/kprepublic/bm60hsrgb_poker/rev2/keyboard.json index f3edf59fec..e5bb84c8ff 100644 --- a/keyboards/kprepublic/bm60hsrgb_poker/rev2/keyboard.json +++ b/keyboards/kprepublic/bm60hsrgb_poker/rev2/keyboard.json @@ -56,29 +56,78 @@ "solid_multisplash": true }, "driver": "custom", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 11, "y": 32, "flags": 9}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 198, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 18, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 30, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 45, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 60, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 75, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 90, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 105, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 120, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 135, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 150, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 165, "y": 48, "flags": 4}, + {"matrix": [3, 13], "x": 191, "y": 48, "flags": 1}, + {"matrix": [4, 0], "x": 3, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 33, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 101, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 135, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 153, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1}, + {"x": 28, "y": 40, "flags": 2}, + {"x": 62, "y": 40, "flags": 2}, + {"x": 96, "y": 40, "flags": 2}, + {"x": 130, "y": 40, "flags": 2}, + {"x": 164, "y": 40, "flags": 2}, + {"x": 198, "y": 40, "flags": 2} + ], "max_brightness": 120, "sleep": true }, - "rgblight": { - "saturation_steps": 8, - "brightness_steps": 8, - "led_count": 6, - "max_brightness": 150, - "animations": { - "breathing": true, - "rainbow_mood": true, - "rainbow_swirl": true, - "snake": true, - "knight": true, - "christmas": true, - "static_gradient": true, - "rgb_test": true, - "alternating": true - }, - "default": { - "animation": "rainbow_mood" - } - }, "matrix_pins": { "cols": ["B2", "B3", "B7", "B0", "B1", "F7", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7"], "rows": ["E6", "D2", "D3", "D5", "F6"] @@ -114,7 +163,6 @@ {"matrix": [0, 11], "x": 11, "y": 0}, {"matrix": [0, 12], "x": 12, "y": 0}, {"matrix": [0, 13], "x": 13, "y": 0, "w": 2}, - {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5}, {"matrix": [1, 1], "x": 1.5, "y": 1}, {"matrix": [1, 2], "x": 2.5, "y": 1}, @@ -129,7 +177,6 @@ {"matrix": [1, 11], "x": 11.5, "y": 1}, {"matrix": [1, 12], "x": 12.5, "y": 1}, {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5}, - {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, {"matrix": [2, 1], "x": 1.75, "y": 2}, {"matrix": [2, 2], "x": 2.75, "y": 2}, @@ -143,7 +190,6 @@ {"matrix": [2, 10], "x": 10.75, "y": 2}, {"matrix": [2, 11], "x": 11.75, "y": 2}, {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25}, - {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25}, {"matrix": [3, 1], "x": 2.25, "y": 3}, {"matrix": [3, 2], "x": 3.25, "y": 3}, @@ -156,7 +202,6 @@ {"matrix": [3, 9], "x": 10.25, "y": 3}, {"matrix": [3, 10], "x": 11.25, "y": 3}, {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 2.75}, - {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25}, {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25}, {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25}, diff --git a/keyboards/kprepublic/bm60hsrgb_poker/rev2/keymaps/default/keymap.c b/keyboards/kprepublic/bm60hsrgb_poker/rev2/keymaps/default/keymap.c deleted file mode 100644 index 637d49d467..0000000000 --- a/keyboards/kprepublic/bm60hsrgb_poker/rev2/keymaps/default/keymap.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright 2021 bdtc123 - * - * 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_60_ansi( - QK_GESC, 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_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_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL - ), - [1] = LAYOUT_60_ansi( - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QK_BOOT, - _______, RM_TOGG, RM_NEXT, RM_HUEU, RM_HUED, RM_SATU, RM_SATD, RM_VALU, RM_VALD, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______ - ), - -}; diff --git a/keyboards/kprepublic/bm60hsrgb_poker/rev2/keymaps/default/keymap.json b/keyboards/kprepublic/bm60hsrgb_poker/rev2/keymaps/default/keymap.json new file mode 100644 index 0000000000..98e6b5a609 --- /dev/null +++ b/keyboards/kprepublic/bm60hsrgb_poker/rev2/keymaps/default/keymap.json @@ -0,0 +1,21 @@ +{ + "keyboard": "kprepublic/bm60hsrgb_poker/rev2", + "keymap": "default", + "layout": "LAYOUT_60_ansi", + "layers": [ + [ + "QK_GESC", "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_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_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_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", + "KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT", "MO(1)", "KC_RGUI", "KC_RCTL" + ], + [ + "_______", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "QK_BOOT", + "_______", "RM_TOGG", "RM_NEXT", "RM_HUEU", "RM_HUED", "RM_SATU", "RM_SATD", "RM_VALU", "RM_VALD", "_______", "_______", "_______", "_______", "_______", + "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", + "_______", "_______", "_______", "_______", "_______", "_______", "NK_TOGG", "_______", "_______", "_______", "_______", "_______", "_______", + "_______", "_______", "_______", "_______", "_______", "_______", "_______" + ] + ] +} diff --git a/keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c b/keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c index 5766942b34..865754b423 100644 --- a/keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c +++ b/keyboards/kprepublic/bm60hsrgb_poker/rev2/rev2.c @@ -1,26 +1,18 @@ -/* Copyright 2021 bdtc123 - * - * 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 2021 bdtc123 +// SPDX-License-Identifier: GPL-2.0-or-later #include "quantum.h" +#if defined(RGB_MATRIX_ENABLE) && defined(RGBLIGHT_ENABLE) +# error "RGBLight must not be enabled due to this keyboard's custom RGB Matrix driver" +#endif + #ifdef RGB_MATRIX_ENABLE # include "i2c_master.h" # include "is31fl3733.h" # include "ws2812.h" +// clang-format off const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, SW2_CS1, SW1_CS1, SW3_CS1 }, { 0, SW2_CS2, SW1_CS2, SW3_CS2 }, @@ -88,44 +80,7 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, SW11_CS12, SW10_CS12, SW12_CS12 }, { 0, SW5_CS16, SW4_CS16, SW6_CS16 } }; - -led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, NO_LED, 40 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, NO_LED, NO_LED, 52 }, - { 53, 54, 55, NO_LED, NO_LED, 56, NO_LED, NO_LED, NO_LED, 57, 58, 59, NO_LED, 60 } - }, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 202, 0 }, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , - { 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 }, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter - { 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 }, - // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, - { 18, 48 }, { 30, 48 }, { 45, 48 }, { 60, 48 }, { 75, 48 }, { 90, 48 }, { 105, 48 }, { 120, 48 }, { 135, 48 }, { 150, 48 }, { 165, 48 }, { 191, 48 }, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 210, 64 }, { 225, 64 } -# if WS2812_LED_COUNT > 0 - ,{ 28, 40}, { 62, 40}, { 96, 40}, {130, 40}, {164, 40}, {198, 40} -# endif -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], backslash - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter - 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - 1, 1, 1, 4, 1, 1, 1, 1 -# if WS2812_LED_COUNT > 0 - ,2, 2, 2, 2, 2, 2 -# endif - } -}; +// clang-format on bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { @@ -137,8 +92,6 @@ bool rgb_matrix_indicators_kb(void) { return true; } -// clang-format on - // ========================================================================== // Custom RGB Matrix driver that combines IS31FL3733 and WS2812 // ========================================================================== @@ -156,26 +109,20 @@ static void rgb_matrix_driver_init(void) { static void rgb_matrix_driver_flush(void) { is31fl3733_update_pwm_buffers(0); -# if WS2812_LED_COUNT > 0 ws2812_flush(); -# endif } static void rgb_matrix_driver_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { if (index < IS31FL3733_LED_COUNT) { is31fl3733_set_color(index, red, green, blue); -# if WS2812_LED_COUNT > 0 } else { ws2812_set_color(index - IS31FL3733_LED_COUNT, red, green, blue); -# endif } } static void rgb_matrix_driver_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { is31fl3733_set_color_all(red, green, blue); -# if WS2812_LED_COUNT > 0 ws2812_set_color_all(red, green, blue); -# endif } // clang-format off diff --git a/keyboards/kprepublic/bm60hsrgb_poker/rev2/rules.mk b/keyboards/kprepublic/bm60hsrgb_poker/rev2/rules.mk index 7012deda8c..bb6c11ea53 100644 --- a/keyboards/kprepublic/bm60hsrgb_poker/rev2/rules.mk +++ b/keyboards/kprepublic/bm60hsrgb_poker/rev2/rules.mk @@ -1,7 +1,5 @@ -# The custom RGB Matrix driver combines IS31FL3733 and WS2812; things that are -# normally done by common_features.mk for both of these drivers need to be done -# here manually. +WS2812_DRIVER_REQUIRED = yes + COMMON_VPATH += $(DRIVER_PATH)/led/issi SRC += is31fl3733.c I2C_DRIVER_REQUIRED = yes -WS2812_DRIVER_REQUIRED = yes From 7dca4e8bda2031c7fa2c85fc9c7a5557e24256df Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Wed, 8 Oct 2025 08:01:08 -0600 Subject: [PATCH 73/99] Fixup `kprepublic/bm60hsrgb_iso/rev2` (#25648) Fixup kprepublic/bm60hsrgb_iso/rev2 - Remove RGBLight configuration and throw error if RGBLight & RGB Matrix are enabled together - the WS2812 driver cannot be used for RGBLight as it is being used by this keyboard's custom RGB Matrix driver - Migrate RGB Matrix configuration to DD - Migrate default keymap to JSON - Use short SPDX license headers --- .../kprepublic/bm60hsrgb_iso/rev2/config.h | 32 +----- .../bm60hsrgb_iso/rev2/keyboard.json | 97 ++++++++++++++----- .../rev2/keymaps/default/keymap.c | 34 ------- .../rev2/keymaps/default/keymap.json | 21 ++++ .../kprepublic/bm60hsrgb_iso/rev2/rev2.c | 72 ++------------ .../kprepublic/bm60hsrgb_iso/rev2/rules.mk | 6 +- 6 files changed, 110 insertions(+), 152 deletions(-) delete mode 100644 keyboards/kprepublic/bm60hsrgb_iso/rev2/keymaps/default/keymap.c create mode 100644 keyboards/kprepublic/bm60hsrgb_iso/rev2/keymaps/default/keymap.json diff --git a/keyboards/kprepublic/bm60hsrgb_iso/rev2/config.h b/keyboards/kprepublic/bm60hsrgb_iso/rev2/config.h index 710e240aa4..1567ce3eb1 100644 --- a/keyboards/kprepublic/bm60hsrgb_iso/rev2/config.h +++ b/keyboards/kprepublic/bm60hsrgb_iso/rev2/config.h @@ -1,31 +1,9 @@ -/* Copyright 2021 bdtc123 - * Copyright 2021 sigprof - * Copyright 2021 peepeetee - * - * 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 2021 bdtc123 +// Copyright 2021 sigprof +// Copyright 2021 peepeetee +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once #define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND #define IS31FL3733_LED_COUNT 64 - -// Underglow LEDs are WS2812, but someone might want to use RGBLIGHT for them; -// don't use those LEDs in RGB Matrix in that case. -#ifdef RGBLIGHT_ENABLE -# define WS2812_LED_COUNT 0 -#else -# define WS2812_LED_COUNT 6 -#endif - -#define RGB_MATRIX_LED_COUNT (IS31FL3733_LED_COUNT + WS2812_LED_COUNT) +#define WS2812_LED_COUNT 6 diff --git a/keyboards/kprepublic/bm60hsrgb_iso/rev2/keyboard.json b/keyboards/kprepublic/bm60hsrgb_iso/rev2/keyboard.json index 3a0df3e414..fec641b886 100644 --- a/keyboards/kprepublic/bm60hsrgb_iso/rev2/keyboard.json +++ b/keyboards/kprepublic/bm60hsrgb_iso/rev2/keyboard.json @@ -59,30 +59,81 @@ "animation": "cycle_all" }, "driver": "custom", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 1}, + {"matrix": [2, 0], "x": 11, "y": 32, "flags": 9}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 12], "x": 198, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 3, "y": 48, "flags": 1}, + {"matrix": [3, 2], "x": 22, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 33, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 48, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 63, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 78, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 93, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 108, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 123, "y": 48, "flags": 4}, + {"x": 138, "y": 48, "flags": 4}, + {"matrix": [3, 10], "x": 153, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 168, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 194, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 213, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 3, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 33, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 101, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 135, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 153, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1}, + {"x": 28, "y": 40, "flags": 2}, + {"x": 62, "y": 40, "flags": 2}, + {"x": 96, "y": 40, "flags": 2}, + {"x": 130, "y": 40, "flags": 2}, + {"x": 164, "y": 40, "flags": 2}, + {"x": 198, "y": 40, "flags": 2} + ], "max_brightness": 180, "sleep": true }, - "rgblight": { - "saturation_steps": 8, - "brightness_steps": 8, - "led_count": 6, - "max_brightness": 150, - "animations": { - "breathing": true, - "rainbow_mood": true, - "rainbow_swirl": true, - "snake": true, - "knight": true, - "christmas": true, - "static_gradient": true, - "rgb_test": true, - "alternating": true, - "twinkle": true - }, - "default": { - "animation": "rainbow_mood" - } - }, "matrix_pins": { "cols": ["B2", "B3", "B7", "B0", "B1", "F7", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7"], "rows": ["E6", "D2", "D3", "D5", "F6"] @@ -118,7 +169,6 @@ {"matrix": [0, 11], "x": 11, "y": 0}, {"matrix": [0, 12], "x": 12, "y": 0}, {"matrix": [0, 13], "x": 13, "y": 0, "w": 2}, - {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5}, {"matrix": [1, 1], "x": 1.5, "y": 1}, {"matrix": [1, 2], "x": 2.5, "y": 1}, @@ -132,7 +182,6 @@ {"matrix": [1, 10], "x": 10.5, "y": 1}, {"matrix": [1, 11], "x": 11.5, "y": 1}, {"matrix": [1, 12], "x": 12.5, "y": 1}, - {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, {"matrix": [2, 1], "x": 1.75, "y": 2}, {"matrix": [2, 2], "x": 2.75, "y": 2}, @@ -147,7 +196,6 @@ {"matrix": [2, 11], "x": 11.75, "y": 2}, {"matrix": [2, 12], "x": 12.75, "y": 2}, {"matrix": [1, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2}, - {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25}, {"matrix": [4, 3], "x": 1.25, "y": 3}, {"matrix": [3, 1], "x": 2.25, "y": 3}, @@ -162,7 +210,6 @@ {"matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.75}, {"matrix": [3, 12], "x": 13, "y": 3}, {"matrix": [3, 13], "x": 14, "y": 3}, - {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25}, {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25}, {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25}, diff --git a/keyboards/kprepublic/bm60hsrgb_iso/rev2/keymaps/default/keymap.c b/keyboards/kprepublic/bm60hsrgb_iso/rev2/keymaps/default/keymap.c deleted file mode 100644 index f3aa8083f1..0000000000 --- a/keyboards/kprepublic/bm60hsrgb_iso/rev2/keymaps/default/keymap.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright 2020 markva - * Copyright 2021 bdtc123 - * - * 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_60_iso_arrow( - QK_GESC, 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_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_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_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_SLSH, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT - ), - [1] = LAYOUT_60_iso_arrow( - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QK_BOOT, - _______, RM_TOGG, RM_NEXT, RM_HUEU, RM_HUED, RM_SATU, RM_SATD, RM_VALU, RM_VALD, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, KC_PGUP, _______, - _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END - ) -}; diff --git a/keyboards/kprepublic/bm60hsrgb_iso/rev2/keymaps/default/keymap.json b/keyboards/kprepublic/bm60hsrgb_iso/rev2/keymaps/default/keymap.json new file mode 100644 index 0000000000..ea074ba006 --- /dev/null +++ b/keyboards/kprepublic/bm60hsrgb_iso/rev2/keymaps/default/keymap.json @@ -0,0 +1,21 @@ +{ + "keyboard": "kprepublic/bm60hsrgb_iso/rev2", + "keymap": "default", + "layout": "LAYOUT_60_iso_arrow", + "layers": [ + [ + "QK_GESC", "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_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_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_LSFT", "KC_NUBS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_RSFT", "KC_UP", "KC_SLSH", + "KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT", "MO(1)", "KC_LEFT", "KC_DOWN", "KC_RGHT" + ], + [ + "_______", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "QK_BOOT", + "_______", "RM_TOGG", "RM_NEXT", "RM_HUEU", "RM_HUED", "RM_SATU", "RM_SATD", "RM_VALU", "RM_VALD", "_______", "_______", "_______", "_______", + "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", + "_______", "_______", "_______", "_______", "_______", "_______", "NK_TOGG", "_______", "_______", "_______", "_______", "KC_PGUP", "_______", + "_______", "_______", "_______", "_______", "_______", "_______", "KC_HOME", "KC_PGDN", "KC_END" + ] + ] +} diff --git a/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c b/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c index 0d52d1bacb..9e617bb8ef 100644 --- a/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c +++ b/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c @@ -1,29 +1,20 @@ -/* Copyright 2021 bdtc123 - * Copyright 2021 sigprof - * Copyright 2021 peepeetee - * - * 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 2021 bdtc123 +// Copyright 2021 sigprof +// Copyright 2021 peepeetee +// SPDX-License-Identifier: GPL-2.0-or-later #include "quantum.h" +#if defined(RGB_MATRIX_ENABLE) && defined(RGBLIGHT_ENABLE) +# error "RGBLight must not be enabled due to this keyboard's custom RGB Matrix driver" +#endif + #ifdef RGB_MATRIX_ENABLE # include "i2c_master.h" # include "is31fl3733.h" # include "ws2812.h" - +// clang-format off const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, SW2_CS1, SW1_CS1, SW3_CS1 }, { 0, SW2_CS2, SW1_CS2, SW3_CS2 }, @@ -94,42 +85,7 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, SW2_CS15, SW1_CS15, SW3_CS15 }, { 0, SW5_CS16, SW4_CS16, SW6_CS16 } }; - -led_config_t g_led_config = { { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,NO_LED}, - { 41, 58, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54 }, - { 55, 56, 57,NO_LED,NO_LED, 58,NO_LED,NO_LED,NO_LED, 59, 60, 61, 62, 63 } -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 202, 0 }, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , - { 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 }, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ', Enter - { 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 }, - // LShift, <, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, - { 3, 48 }, { 22, 48 }, { 33, 48 }, { 48, 48 }, { 63, 48 }, { 78, 48 }, { 93, 48 }, { 108, 48 }, { 123, 48 }, { 138, 48 }, { 153, 48 }, { 168, 48 }, { 194, 48 }, { 213, 48 }, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 195, 64 }, { 210, 64 }, { 225, 64 } -# if WS2812_LED_COUNT > 0 - ,{ 28, 40}, { 62, 40}, { 96, 40}, {130, 40}, {164, 40}, {198, 40} -# endif -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], Enter - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Capslock, A, S, D, F, G, H, J, K, L, ;, ',# - 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - // LShift,backslash, Z, X, C, V, B, N, M, ,, ., Shift, Up, / - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - 1, 1, 1, 4, 1, 1, 1, 1, 1 -# if WS2812_LED_COUNT > 0 - ,2, 2, 2, 2, 2, 2 -# endif -} }; +// clang-format on bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { @@ -141,8 +97,6 @@ bool rgb_matrix_indicators_kb(void) { return true; } -// clang-format on - // ========================================================================== // Custom RGB Matrix driver that combines IS31FL3733 and WS2812 // ========================================================================== @@ -160,26 +114,20 @@ static void rgb_matrix_driver_init(void) { static void rgb_matrix_driver_flush(void) { is31fl3733_update_pwm_buffers(0); -# if WS2812_LED_COUNT > 0 ws2812_flush(); -# endif } static void rgb_matrix_driver_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { if (index < IS31FL3733_LED_COUNT) { is31fl3733_set_color(index, red, green, blue); -# if WS2812_LED_COUNT > 0 } else { ws2812_set_color(index - IS31FL3733_LED_COUNT, red, green, blue); -# endif } } static void rgb_matrix_driver_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { is31fl3733_set_color_all(red, green, blue); -# if WS2812_LED_COUNT > 0 ws2812_set_color_all(red, green, blue); -# endif } // clang-format off diff --git a/keyboards/kprepublic/bm60hsrgb_iso/rev2/rules.mk b/keyboards/kprepublic/bm60hsrgb_iso/rev2/rules.mk index 7012deda8c..bb6c11ea53 100644 --- a/keyboards/kprepublic/bm60hsrgb_iso/rev2/rules.mk +++ b/keyboards/kprepublic/bm60hsrgb_iso/rev2/rules.mk @@ -1,7 +1,5 @@ -# The custom RGB Matrix driver combines IS31FL3733 and WS2812; things that are -# normally done by common_features.mk for both of these drivers need to be done -# here manually. +WS2812_DRIVER_REQUIRED = yes + COMMON_VPATH += $(DRIVER_PATH)/led/issi SRC += is31fl3733.c I2C_DRIVER_REQUIRED = yes -WS2812_DRIVER_REQUIRED = yes From 9f1a7380ab37d7887e33d726eb6f6f678cba3c6f Mon Sep 17 00:00:00 2001 From: Jack Sangdahl Date: Wed, 8 Oct 2025 08:01:26 -0600 Subject: [PATCH 74/99] Fixup `kprepublic/bm60hsrgb/rev2` (#25644) * Fixup kprepublic/bm60hsrgb/rev2 - Remove RGBLight configuration and throw error if RGBLight & RGB Matrix are enabled together - the WS2812 driver cannot be used for RGBLight as it is being used by this keyboard's custom RGB Matrix driver - Migrate RGB Matrix configuration to DD - Migrate default keymap to JSON - Use short SPDX license headers * Fix OOB coordinate --- keyboards/kprepublic/bm60hsrgb/rev2/config.h | 28 +----- .../kprepublic/bm60hsrgb/rev2/keyboard.json | 96 ++++++++++++++----- .../bm60hsrgb/rev2/keymaps/default/keymap.c | 35 ------- .../rev2/keymaps/default/keymap.json | 21 ++++ keyboards/kprepublic/bm60hsrgb/rev2/rev2.c | 74 ++------------ 5 files changed, 105 insertions(+), 149 deletions(-) delete mode 100644 keyboards/kprepublic/bm60hsrgb/rev2/keymaps/default/keymap.c create mode 100644 keyboards/kprepublic/bm60hsrgb/rev2/keymaps/default/keymap.json diff --git a/keyboards/kprepublic/bm60hsrgb/rev2/config.h b/keyboards/kprepublic/bm60hsrgb/rev2/config.h index 98858cd164..c3fca3563e 100644 --- a/keyboards/kprepublic/bm60hsrgb/rev2/config.h +++ b/keyboards/kprepublic/bm60hsrgb/rev2/config.h @@ -1,29 +1,7 @@ -/* Copyright 2021 bdtc123 - * - * 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 2021 bdtc123 +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once #define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND #define IS31FL3733_LED_COUNT 63 - -// Underglow LEDs are WS2812, but someone might want to use RGBLIGHT for them; -// don't use those LEDs in RGB Matrix in that case. -#ifdef RGBLIGHT_ENABLE -# define WS2812_LED_COUNT 0 -#else -# define WS2812_LED_COUNT 6 -#endif - -#define RGB_MATRIX_LED_COUNT (IS31FL3733_LED_COUNT + WS2812_LED_COUNT) +#define WS2812_LED_COUNT 6 diff --git a/keyboards/kprepublic/bm60hsrgb/rev2/keyboard.json b/keyboards/kprepublic/bm60hsrgb/rev2/keyboard.json index 3783ebb8b2..88d4c5d9ce 100644 --- a/keyboards/kprepublic/bm60hsrgb/rev2/keyboard.json +++ b/keyboards/kprepublic/bm60hsrgb/rev2/keyboard.json @@ -51,30 +51,80 @@ "solid_multisplash": true }, "driver": "custom", + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 90, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 105, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 120, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 135, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 150, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 165, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 180, "y": 0, "flags": 4}, + {"matrix": [0, 13], "x": 202, "y": 0, "flags": 1}, + {"matrix": [1, 0], "x": 7, "y": 16, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 4}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 4}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 4}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 4}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 4}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 4}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 4}, + {"matrix": [1, 13], "x": 206, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 11, "y": 32, "flags": 9}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 4}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 4}, + {"matrix": [2, 9], "x": 146, "y": 32, "flags": 4}, + {"matrix": [2, 10], "x": 161, "y": 32, "flags": 4}, + {"matrix": [2, 11], "x": 176, "y": 32, "flags": 4}, + {"matrix": [2, 13], "x": 198, "y": 32, "flags": 1}, + {"matrix": [3, 0], "x": 18, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 30, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 45, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 60, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 75, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 90, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 105, "y": 48, "flags": 4}, + {"matrix": [3, 7], "x": 120, "y": 48, "flags": 4}, + {"matrix": [3, 8], "x": 135, "y": 48, "flags": 4}, + {"matrix": [3, 9], "x": 150, "y": 48, "flags": 4}, + {"matrix": [3, 11], "x": 165, "y": 48, "flags": 1}, + {"matrix": [3, 12], "x": 191, "y": 48, "flags": 1}, + {"matrix": [3, 13], "x": 210, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 3, "y": 64, "flags": 1}, + {"matrix": [4, 1], "x": 22, "y": 64, "flags": 1}, + {"matrix": [4, 2], "x": 33, "y": 64, "flags": 1}, + {"matrix": [4, 5], "x": 101, "y": 64, "flags": 4}, + {"matrix": [4, 9], "x": 135, "y": 64, "flags": 1}, + {"matrix": [4, 10], "x": 153, "y": 64, "flags": 1}, + {"matrix": [4, 11], "x": 195, "y": 64, "flags": 1}, + {"matrix": [4, 12], "x": 210, "y": 64, "flags": 1}, + {"matrix": [4, 13], "x": 224, "y": 64, "flags": 1}, + {"x": 28, "y": 40, "flags": 2}, + {"x": 62, "y": 40, "flags": 2}, + {"x": 96, "y": 40, "flags": 2}, + {"x": 130, "y": 40, "flags": 2}, + {"x": 164, "y": 40, "flags": 2}, + {"x": 198, "y": 40, "flags": 2} + ], "max_brightness": 120, "sleep": true }, - "rgblight": { - "saturation_steps": 8, - "brightness_steps": 8, - "led_count": 6, - "max_brightness": 150, - "animations": { - "breathing": true, - "rainbow_mood": true, - "rainbow_swirl": true, - "snake": true, - "knight": true, - "christmas": true, - "static_gradient": true, - "rgb_test": true, - "alternating": true, - "twinkle": true - }, - "default": { - "animation": "rainbow_mood" - } - }, "matrix_pins": { "cols": ["B2", "B3", "B7", "B0", "B1", "F7", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7"], "rows": ["E6", "D2", "D3", "D5", "F6"] @@ -110,7 +160,6 @@ {"matrix": [0, 11], "x": 11, "y": 0}, {"matrix": [0, 12], "x": 12, "y": 0}, {"matrix": [0, 13], "x": 13, "y": 0, "w": 2}, - {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5}, {"matrix": [1, 1], "x": 1.5, "y": 1}, {"matrix": [1, 2], "x": 2.5, "y": 1}, @@ -125,7 +174,6 @@ {"matrix": [1, 11], "x": 11.5, "y": 1}, {"matrix": [1, 12], "x": 12.5, "y": 1}, {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5}, - {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, {"matrix": [2, 1], "x": 1.75, "y": 2}, {"matrix": [2, 2], "x": 2.75, "y": 2}, @@ -139,7 +187,6 @@ {"matrix": [2, 10], "x": 10.75, "y": 2}, {"matrix": [2, 11], "x": 11.75, "y": 2}, {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25}, - {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25}, {"matrix": [3, 1], "x": 2.25, "y": 3}, {"matrix": [3, 2], "x": 3.25, "y": 3}, @@ -153,7 +200,6 @@ {"matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.75}, {"matrix": [3, 12], "x": 13, "y": 3}, {"matrix": [3, 13], "x": 14, "y": 3}, - {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25}, {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25}, {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25}, diff --git a/keyboards/kprepublic/bm60hsrgb/rev2/keymaps/default/keymap.c b/keyboards/kprepublic/bm60hsrgb/rev2/keymaps/default/keymap.c deleted file mode 100644 index 7b6d1ae693..0000000000 --- a/keyboards/kprepublic/bm60hsrgb/rev2/keymaps/default/keymap.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright 2021 bdtc123 - * Copyright 2022 peepeetee - * - * 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_60_ansi_arrow( - KC_ESC, 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_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_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_SLSH, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT - ), - [1] = LAYOUT_60_ansi_arrow( - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QK_BOOT, - _______, RM_TOGG, RM_NEXT, RM_HUEU, RM_HUED, RM_SATU, RM_SATD, RM_VALU, RM_VALD, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______ - ) - -}; diff --git a/keyboards/kprepublic/bm60hsrgb/rev2/keymaps/default/keymap.json b/keyboards/kprepublic/bm60hsrgb/rev2/keymaps/default/keymap.json new file mode 100644 index 0000000000..caf08550a0 --- /dev/null +++ b/keyboards/kprepublic/bm60hsrgb/rev2/keymaps/default/keymap.json @@ -0,0 +1,21 @@ +{ + "keyboard": "kprepublic/bm60hsrgb/rev2", + "keymap": "default", + "layout": "LAYOUT_60_ansi_arrow", + "layers": [ + [ + "KC_ESC", "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_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_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_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_RSFT", "KC_UP", "KC_SLSH", + "KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "KC_RALT", "MO(1)", "KC_LEFT", "KC_DOWN", "KC_RGHT" + ], + [ + "_______", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "QK_BOOT", + "_______", "RM_TOGG", "RM_NEXT", "RM_HUEU", "RM_HUED", "RM_SATU", "RM_SATD", "RM_VALU", "RM_VALD", "_______", "_______", "_______", "_______", "_______", + "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", + "_______", "_______", "_______", "_______", "_______", "_______", "NK_TOGG", "_______", "_______", "_______", "_______", "_______", "_______", + "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______" + ] + ] +} diff --git a/keyboards/kprepublic/bm60hsrgb/rev2/rev2.c b/keyboards/kprepublic/bm60hsrgb/rev2/rev2.c index e7ff5a9ddc..b0e68a8cd6 100644 --- a/keyboards/kprepublic/bm60hsrgb/rev2/rev2.c +++ b/keyboards/kprepublic/bm60hsrgb/rev2/rev2.c @@ -1,27 +1,19 @@ -/* Copyright 2021 bdtc123 - * Copyright 2021 sigprof - * - * 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 2021 bdtc123 +// Copyright 2021 sigprof +// SPDX-License-Identifier: GPL-2.0-or-later #include "quantum.h" +#if defined(RGB_MATRIX_ENABLE) && defined(RGBLIGHT_ENABLE) +# error "RGBLight must not be enabled due to this keyboard's custom RGB Matrix driver" +#endif + #ifdef RGB_MATRIX_ENABLE # include "i2c_master.h" # include "is31fl3733.h" # include "ws2812.h" +// clang-format off const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, SW2_CS1, SW1_CS1, SW3_CS1 }, { 0, SW2_CS2, SW1_CS2, SW3_CS2 }, @@ -91,44 +83,7 @@ const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, SW2_CS16, SW1_CS16, SW3_CS16 }, { 0, SW5_CS16, SW4_CS16, SW6_CS16 } }; - -led_config_t g_led_config = { - { - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }, - { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 }, - { 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, NO_LED, 40 }, - { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, NO_LED, 51, 52, 53 }, - { 54, 55, 56, NO_LED, NO_LED, 57, NO_LED, NO_LED, NO_LED, 58, 59, 60, 61, 62 } - }, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - { 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 202, 0 }, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], , - { 7, 16 }, { 22, 16 }, { 37, 16 }, { 52, 16 }, { 67, 16 }, { 82, 16 }, { 97, 16 }, { 112, 16 }, { 127, 16 }, { 142, 16 }, { 157, 16 }, { 172, 16 }, { 187, 16 }, { 206, 16 }, - // Capslock, A, S, D, F, G, H, A, K, L, ;, ', Enter - { 11, 32 }, { 26, 32 }, { 41, 32 }, { 56, 32 }, { 71, 32 }, { 86, 32 }, { 101, 32 }, { 116, 32 }, { 131, 32 }, { 146, 32 }, { 161, 32 }, { 176, 32 }, { 198, 32 }, - // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, - { 18, 48 }, { 30, 48 }, { 45, 48 }, { 60, 48 }, { 75, 48 }, { 90, 48 }, { 105, 48 }, { 120, 48 }, { 135, 48 }, { 150, 48 }, { 165, 48 }, { 191, 48 }, { 210, 48 }, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - { 3, 64 }, { 22, 64 }, { 33, 64 }, { 101, 64 }, { 135, 64 }, { 153, 64 }, { 195, 64 }, { 210, 64 }, { 225, 64 } -# if WS2812_LED_COUNT > 0 - ,{ 28, 40}, { 62, 40}, { 96, 40}, {130, 40}, {164, 40}, {198, 40} -# endif -}, { - // Esc, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, Backspace - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // Tab, Q, W, E, R, T, Y, U, I, O, P, [, ], - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - // Capslock, A, S, D, F, G, H, A, K, L, ;, ', Enter - 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, - // LShift, Z, X, C, V, B, N, M, ,, ., /, Shift, Up, ? - 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 4, - // Ctrl, GUI, Alt, Space, RAlt, FN, Left, Down, Right - 1, 1, 1, 4, 1, 1, 1, 1, 1 -# if WS2812_LED_COUNT > 0 - ,2, 2, 2, 2, 2, 2 -# endif - } -}; +// clang-format on bool rgb_matrix_indicators_kb(void) { if (!rgb_matrix_indicators_user()) { @@ -140,9 +95,6 @@ bool rgb_matrix_indicators_kb(void) { return true; } - -// clang-format on - // ========================================================================== // Custom RGB Matrix driver that combines IS31FL3733 and WS2812 // ========================================================================== @@ -160,26 +112,20 @@ static void rgb_matrix_driver_init(void) { static void rgb_matrix_driver_flush(void) { is31fl3733_update_pwm_buffers(0); -# if WS2812_LED_COUNT > 0 ws2812_flush(); -# endif } static void rgb_matrix_driver_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { if (index < IS31FL3733_LED_COUNT) { is31fl3733_set_color(index, red, green, blue); -# if WS2812_LED_COUNT > 0 } else { ws2812_set_color(index - IS31FL3733_LED_COUNT, red, green, blue); -# endif } } static void rgb_matrix_driver_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { is31fl3733_set_color_all(red, green, blue); -# if WS2812_LED_COUNT > 0 - ws2812_set_color_all(red, green, blue); -# endif + ws2812_set_color_all(red, green, blue); } // clang-format off From 08405df1505293acb9a4e89bcf98935d78902094 Mon Sep 17 00:00:00 2001 From: Marek Schmitt <62243375+mawaeg@users.noreply.github.com> Date: Sat, 11 Oct 2025 06:45:17 +0200 Subject: [PATCH 75/99] Add new macropad Sharkropad (#24961) --- keyboards/mawaeg/sharkropad/chconf.h | 22 +++ keyboards/mawaeg/sharkropad/config.h | 30 ++++ keyboards/mawaeg/sharkropad/halconf.h | 22 +++ keyboards/mawaeg/sharkropad/keyboard.json | 136 ++++++++++++++++++ .../sharkropad/keymaps/default/keymap.c | 45 ++++++ .../sharkropad/keymaps/default/rules.mk | 1 + keyboards/mawaeg/sharkropad/mcuconf.h | 28 ++++ keyboards/mawaeg/sharkropad/readme.md | 24 ++++ keyboards/mawaeg/sharkropad/sharkropad.c | 90 ++++++++++++ 9 files changed, 398 insertions(+) create mode 100644 keyboards/mawaeg/sharkropad/chconf.h create mode 100644 keyboards/mawaeg/sharkropad/config.h create mode 100644 keyboards/mawaeg/sharkropad/halconf.h create mode 100644 keyboards/mawaeg/sharkropad/keyboard.json create mode 100644 keyboards/mawaeg/sharkropad/keymaps/default/keymap.c create mode 100644 keyboards/mawaeg/sharkropad/keymaps/default/rules.mk create mode 100644 keyboards/mawaeg/sharkropad/mcuconf.h create mode 100644 keyboards/mawaeg/sharkropad/readme.md create mode 100644 keyboards/mawaeg/sharkropad/sharkropad.c diff --git a/keyboards/mawaeg/sharkropad/chconf.h b/keyboards/mawaeg/sharkropad/chconf.h new file mode 100644 index 0000000000..c0a2323234 --- /dev/null +++ b/keyboards/mawaeg/sharkropad/chconf.h @@ -0,0 +1,22 @@ +/* Copyright 2025 @mawaeg + * + * 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 CH_CFG_ST_RESOLUTION 16 +#define CH_CFG_ST_FREQUENCY 10000 + +#include_next diff --git a/keyboards/mawaeg/sharkropad/config.h b/keyboards/mawaeg/sharkropad/config.h new file mode 100644 index 0000000000..2e57c56f0f --- /dev/null +++ b/keyboards/mawaeg/sharkropad/config.h @@ -0,0 +1,30 @@ +/* Copyright 2025 @mawaeg + * + * 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 STM32_FLASH_SECTORS_PER_BANK 128 + +#define I2C1_SCL_PIN A9 +#define I2C1_SDA_PIN A10 + +#define WS2812_PWM_DRIVER PWMD2 +#define WS2812_PWM_CHANNEL 2 +#define WS2812_PWM_PAL_MODE 1 +#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM2 +#define WS2812_PWM_DMA_CHANNEL 4 + +#define RGB_MATRIX_MODE_NAME_ENABLE diff --git a/keyboards/mawaeg/sharkropad/halconf.h b/keyboards/mawaeg/sharkropad/halconf.h new file mode 100644 index 0000000000..9f0b573732 --- /dev/null +++ b/keyboards/mawaeg/sharkropad/halconf.h @@ -0,0 +1,22 @@ +/* Copyright 2025 @mawaeg + * + * 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_I2C TRUE +#define HAL_USE_PWM TRUE + +#include_next diff --git a/keyboards/mawaeg/sharkropad/keyboard.json b/keyboards/mawaeg/sharkropad/keyboard.json new file mode 100644 index 0000000000..c262d3e3cc --- /dev/null +++ b/keyboards/mawaeg/sharkropad/keyboard.json @@ -0,0 +1,136 @@ +{ + "manufacturer": "mawaeg", + "keyboard_name": "Sharkropad", + "maintainer": "mawaeg", + "bootloader": "stm32-dfu", + "bootmagic": { + "matrix": [0, 3] + }, + "diode_direction": "COL2ROW", + "encoder": { + "rotary": [ + {"pin_a": "A0", "pin_b": "A1"} + ] + }, + "features": { + "bootmagic": true, + "encoder": true, + "extrakey": true, + "nkro": true, + "oled": true, + "rgb_matrix": true + }, + "matrix_pins": { + "cols": ["B1", "B0", "A4", "A2"], + "rows": ["A3", "A7", "A6", "A5"] + }, + "processor": "STM32L432", + "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, + "digital_rain": true, + "dual_beacon": true, + "flower_blooming": true, + "gradient_left_right": true, + "gradient_up_down": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": true, + "jellybean_raindrops": true, + "multisplash": true, + "pixel_flow": true, + "pixel_fractal": true, + "pixel_rain": true, + "rainbow_beacon": true, + "rainbow_moving_chevron": true, + "rainbow_pinwheels": true, + "raindrops": true, + "riverflow": true, + "solid_multisplash": true, + "solid_reactive": true, + "solid_reactive_cross": true, + "solid_reactive_multicross": true, + "solid_reactive_multinexus": true, + "solid_reactive_multiwide": true, + "solid_reactive_nexus": true, + "solid_reactive_simple": true, + "solid_reactive_wide": true, + "solid_splash": true, + "splash": true, + "starlight": true, + "starlight_dual_hue": true, + "starlight_dual_sat": true, + "typing_heatmap": true + }, + "default": { + "animation": "cycle_up_down" + }, + "driver": "ws2812", + "layout": [ + {"matrix": [1, 0], "x": 189, "y": 27, "flags": 4}, + {"matrix": [1, 1], "x": 137, "y": 27, "flags": 4}, + {"matrix": [1, 2], "x": 86, "y": 27, "flags": 4}, + {"matrix": [1, 3], "x": 35, "y": 27, "flags": 4}, + {"matrix": [2, 0], "x": 189, "y": 41, "flags": 4}, + {"matrix": [2, 1], "x": 137, "y": 41, "flags": 4}, + {"matrix": [2, 2], "x": 86, "y": 41, "flags": 4}, + {"matrix": [2, 3], "x": 35, "y": 41, "flags": 4}, + {"matrix": [3, 0], "x": 189, "y": 55, "flags": 4}, + {"matrix": [3, 1], "x": 137, "y": 55, "flags": 4}, + {"matrix": [3, 2], "x": 86, "y": 55, "flags": 4}, + {"matrix": [3, 3], "x": 35, "y": 55, "flags": 4}, + {"x": 76, "y": 3, "flags": 2}, + {"x": 148, "y": 3, "flags": 2}, + {"x": 216, "y": 17, "flags": 2}, + {"x": 216, "y": 45, "flags": 2}, + {"x": 224, "y": 61, "flags": 2}, + {"x": 60, "y": 61, "flags": 2}, + {"x": 8, "y": 45, "flags": 2}, + {"x": 8, "y": 17, "flags": 2} + ], + "max_brightness": 180 + }, + "url": "https://github.com/mawaeg/sharkropad", + "usb": { + "device_version": "1.0.0", + "pid": "0xAFFE", + "vid": "0x6D73" + }, + "ws2812": { + "driver": "pwm", + "pin": "B3" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 1], "x": 1, "y": 1}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1}, + {"matrix": [2, 0], "x": 0, "y": 2}, + {"matrix": [2, 1], "x": 1, "y": 2}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2}, + {"matrix": [3, 0], "x": 0, "y": 3}, + {"matrix": [3, 1], "x": 1, "y": 3}, + {"matrix": [3, 2], "x": 2, "y": 3}, + {"matrix": [3, 3], "x": 3, "y": 3} + ] + } + } +} diff --git a/keyboards/mawaeg/sharkropad/keymaps/default/keymap.c b/keyboards/mawaeg/sharkropad/keymaps/default/keymap.c new file mode 100644 index 0000000000..6a95257a1c --- /dev/null +++ b/keyboards/mawaeg/sharkropad/keymaps/default/keymap.c @@ -0,0 +1,45 @@ +/* Copyright 2025 @mawaeg + * + * 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 QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + /* + * ┌────────────┐ + * │ RGB_MOD │ + * ┌───┬───┬───┼────────────┤ + * │ 7 │ 8 │ 9 │ RGB_TOGGLE │ + * ├───┼───┼───┼────────────┤ + * │ 4 │ 5 │ 6 │ NUM │ + * ├───┼───┼───┼────────────┤ + * │ 1 │ 2 │ 3 │ 0 │ + * └───┴───┴───┴────────────┘ + */ + [0] = LAYOUT( + RM_NEXT, + KC_P7, KC_P8, KC_P9, RM_TOGG, + KC_P4, KC_P5, KC_P6, KC_NUM, + KC_P1, KC_P2, KC_P3, KC_P0 + ) + // clang-format on +}; + +#ifdef ENCODER_MAP_ENABLE +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = { ENCODER_CCW_CW(RM_SPDD, RM_SPDU)}, +}; +#endif diff --git a/keyboards/mawaeg/sharkropad/keymaps/default/rules.mk b/keyboards/mawaeg/sharkropad/keymaps/default/rules.mk new file mode 100644 index 0000000000..ee32568148 --- /dev/null +++ b/keyboards/mawaeg/sharkropad/keymaps/default/rules.mk @@ -0,0 +1 @@ +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/mawaeg/sharkropad/mcuconf.h b/keyboards/mawaeg/sharkropad/mcuconf.h new file mode 100644 index 0000000000..2a66cc8d7b --- /dev/null +++ b/keyboards/mawaeg/sharkropad/mcuconf.h @@ -0,0 +1,28 @@ +/* Copyright 2025 @mawaeg + * + * 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_I2C_USE_I2C1 +#define STM32_I2C_USE_I2C1 TRUE + +#undef STM32_PWM_USE_TIM2 +#define STM32_PWM_USE_TIM2 TRUE + +#undef STM32_ST_USE_TIMER +#define STM32_ST_USE_TIMER 15 diff --git a/keyboards/mawaeg/sharkropad/readme.md b/keyboards/mawaeg/sharkropad/readme.md new file mode 100644 index 0000000000..d6faf506c5 --- /dev/null +++ b/keyboards/mawaeg/sharkropad/readme.md @@ -0,0 +1,24 @@ +# sharkropad + +![sharkropad](https://i.imgur.com/qatvstX.jpeg) + +**Sharkropad** is an open-source hotswappable macropad. + +* Keyboard Maintainer: [Marek Schmitt](https://github.com/mawaeg) +* Hardware Supported: PCB included in the [Sharkropad repository](https://github.com/mawaeg/sharkropad). +* Hardware Availability: PCB has to be sourced yourserlf + +Make example for this keyboard (after setting up your build environment): + + make mawaeg/sharkropad:default + +Flashing example for this keyboard: + + make mawaeg/sharkropad: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: +* **Bootmagic reset**: Hold down the rotary encoder knob and plug in the keyboard diff --git a/keyboards/mawaeg/sharkropad/sharkropad.c b/keyboards/mawaeg/sharkropad/sharkropad.c new file mode 100644 index 0000000000..391f59800b --- /dev/null +++ b/keyboards/mawaeg/sharkropad/sharkropad.c @@ -0,0 +1,90 @@ +/* Copyright 2025 @mawaeg + * + * 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 +#include +#include + +static uint8_t effect_name_len = 0; + +const char *rgb_matrix_get_effect_name(void) { + static char buf[32] = {0}; + + snprintf(buf, sizeof(buf), "%s", rgb_matrix_get_mode_name(rgb_matrix_get_mode())); + for (uint8_t i = 1; i < sizeof(buf); ++i) { + if (buf[i] == 0) { + effect_name_len = i; + break; + } else if (buf[i] == '_') + buf[i] = ' '; + else if (buf[i - 1] == ' ') + buf[i] = toupper(buf[i]); + else if (buf[i - 1] != ' ') + buf[i] = tolower(buf[i]); + } + return buf; +} + +bool oled_task_kb(void) { + if (!oled_task_user()) { + return false; + } + + static uint8_t last_effect = 0; + static uint8_t last_speed = 0; + static uint16_t key_timer = 0; + static uint8_t start_index = 0; + + uint8_t speedPercentage = scale8(rgb_matrix_get_speed(), 100); + bool is_timer_elapsed = timer_elapsed(key_timer) > 200; + + if (last_effect != rgb_matrix_get_mode() || last_speed != speedPercentage || is_timer_elapsed) { + last_effect = rgb_matrix_get_mode(); + last_speed = speedPercentage; + + oled_write_ln_P(PSTR("Mode: "), false); + const char *name = rgb_matrix_get_effect_name(); + if (effect_name_len > 21) { + if (!is_timer_elapsed && start_index != 0) { + start_index -= 1; + } else { + key_timer = timer_read(); + } + if (start_index > effect_name_len) { + start_index = 0; + } + for (uint8_t char_index = 0; char_index < 21; char_index++) { + if ((start_index + char_index) % effect_name_len == 0 && char_index != 0) { + oled_write_char(' ', false); + } else { + oled_write_char(name[(start_index + char_index) % (effect_name_len + 1)], false); + } + } + start_index += 1; + } else { + oled_write_ln(name, false); + start_index = 0; + } + + oled_set_cursor(0, 2); + oled_write_ln_P(PSTR("RGB Speed: "), false); + oled_write(get_u8_str(speedPercentage, ' '), false); + oled_write("%", false); + } + + return true; +} From f4068dbfb0a5bc8ba0daf4e714ff3cbe89ef92c2 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Mon, 13 Oct 2025 06:40:45 +0100 Subject: [PATCH 76/99] Update STM32F446 default HSE to 8MHz (#25717) --- keyboards/handwired/onekey/nucleo_f446re/board.h | 3 +-- keyboards/handwired/onekey/nucleo_f446re/mcuconf.h | 6 ------ keyboards/handwired/onekey/nucleo_f446re/readme.md | 2 +- .../ibm/model_m_4th_gen/overnumpad_1xb/mcuconf.h | 11 +++++++++++ .../overnumpad_1xb/mcuconf.h | 11 +++++++++++ .../classic_ultracl_pre_2013/overnumpad_1xb/mcuconf.h | 11 +++++++++++ keyboards/unicomp/pc122/overnumpad_1xb/mcuconf.h | 11 +++++++++++ .../spacesaver_m_post_2013/overnumpad_1xb/mcuconf.h | 11 +++++++++++ .../spacesaver_m_pre_2013/overnumpad_1xb/mcuconf.h | 11 +++++++++++ .../boards/GENERIC_STM32_F446XE/configs/board.h | 1 - .../boards/GENERIC_STM32_F446XE/configs/config.h | 1 + .../boards/GENERIC_STM32_F446XE/configs/mcuconf.h | 4 ++-- 12 files changed, 71 insertions(+), 12 deletions(-) create mode 100644 keyboards/ibm/model_m_4th_gen/overnumpad_1xb/mcuconf.h create mode 100644 keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/mcuconf.h create mode 100644 keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/mcuconf.h create mode 100644 keyboards/unicomp/pc122/overnumpad_1xb/mcuconf.h create mode 100644 keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/mcuconf.h create mode 100644 keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/mcuconf.h diff --git a/keyboards/handwired/onekey/nucleo_f446re/board.h b/keyboards/handwired/onekey/nucleo_f446re/board.h index 0c5f4dde79..54c93c551a 100644 --- a/keyboards/handwired/onekey/nucleo_f446re/board.h +++ b/keyboards/handwired/onekey/nucleo_f446re/board.h @@ -4,6 +4,5 @@ #include_next -#undef STM32_HSECLK -#define STM32_HSECLK 8000000U +// Configure clocks to use onboard STLINKs MCO as HSE is not populated by default #define STM32_HSE_BYPASS diff --git a/keyboards/handwired/onekey/nucleo_f446re/mcuconf.h b/keyboards/handwired/onekey/nucleo_f446re/mcuconf.h index 701d61d31d..ba463bf4f7 100644 --- a/keyboards/handwired/onekey/nucleo_f446re/mcuconf.h +++ b/keyboards/handwired/onekey/nucleo_f446re/mcuconf.h @@ -4,12 +4,6 @@ #include_next -#undef STM32_PLLM_VALUE -#define STM32_PLLM_VALUE 4 - -#undef STM32_PLLSAIM_VALUE -#define STM32_PLLSAIM_VALUE 4 - #undef STM32_ADC_USE_ADC1 #define STM32_ADC_USE_ADC1 TRUE diff --git a/keyboards/handwired/onekey/nucleo_f446re/readme.md b/keyboards/handwired/onekey/nucleo_f446re/readme.md index b0645b65fe..71a5e48184 100644 --- a/keyboards/handwired/onekey/nucleo_f446re/readme.md +++ b/keyboards/handwired/onekey/nucleo_f446re/readme.md @@ -1,4 +1,4 @@ -# STM32 Nucleo-L432 onekey +# STM32 Nucleo-F446 onekey To trigger keypress, short together pins *A0* and *A1*. Note that the pin numbering is relative to the MCU, so that A0 and A1 refer to PA0 and PA1 on the MCU (which are also labelled A0 and A1 on the board, but this isn't true for the other PAx pins). diff --git a/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/mcuconf.h b/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/mcuconf.h new file mode 100644 index 0000000000..0e89bead66 --- /dev/null +++ b/keyboards/ibm/model_m_4th_gen/overnumpad_1xb/mcuconf.h @@ -0,0 +1,11 @@ +// Copyright 2025 QMK +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#include_next + +#undef STM32_PLLM_VALUE +#define STM32_PLLM_VALUE 8 + +#undef STM32_PLLSAIM_VALUE +#define STM32_PLLSAIM_VALUE 8 diff --git a/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/mcuconf.h b/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/mcuconf.h new file mode 100644 index 0000000000..0e89bead66 --- /dev/null +++ b/keyboards/unicomp/classic_ultracl_post_2013/overnumpad_1xb/mcuconf.h @@ -0,0 +1,11 @@ +// Copyright 2025 QMK +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#include_next + +#undef STM32_PLLM_VALUE +#define STM32_PLLM_VALUE 8 + +#undef STM32_PLLSAIM_VALUE +#define STM32_PLLSAIM_VALUE 8 diff --git a/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/mcuconf.h b/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/mcuconf.h new file mode 100644 index 0000000000..0e89bead66 --- /dev/null +++ b/keyboards/unicomp/classic_ultracl_pre_2013/overnumpad_1xb/mcuconf.h @@ -0,0 +1,11 @@ +// Copyright 2025 QMK +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#include_next + +#undef STM32_PLLM_VALUE +#define STM32_PLLM_VALUE 8 + +#undef STM32_PLLSAIM_VALUE +#define STM32_PLLSAIM_VALUE 8 diff --git a/keyboards/unicomp/pc122/overnumpad_1xb/mcuconf.h b/keyboards/unicomp/pc122/overnumpad_1xb/mcuconf.h new file mode 100644 index 0000000000..0e89bead66 --- /dev/null +++ b/keyboards/unicomp/pc122/overnumpad_1xb/mcuconf.h @@ -0,0 +1,11 @@ +// Copyright 2025 QMK +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#include_next + +#undef STM32_PLLM_VALUE +#define STM32_PLLM_VALUE 8 + +#undef STM32_PLLSAIM_VALUE +#define STM32_PLLSAIM_VALUE 8 diff --git a/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/mcuconf.h b/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/mcuconf.h new file mode 100644 index 0000000000..0e89bead66 --- /dev/null +++ b/keyboards/unicomp/spacesaver_m_post_2013/overnumpad_1xb/mcuconf.h @@ -0,0 +1,11 @@ +// Copyright 2025 QMK +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#include_next + +#undef STM32_PLLM_VALUE +#define STM32_PLLM_VALUE 8 + +#undef STM32_PLLSAIM_VALUE +#define STM32_PLLSAIM_VALUE 8 diff --git a/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/mcuconf.h b/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/mcuconf.h new file mode 100644 index 0000000000..0e89bead66 --- /dev/null +++ b/keyboards/unicomp/spacesaver_m_pre_2013/overnumpad_1xb/mcuconf.h @@ -0,0 +1,11 @@ +// Copyright 2025 QMK +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#include_next + +#undef STM32_PLLM_VALUE +#define STM32_PLLM_VALUE 8 + +#undef STM32_PLLSAIM_VALUE +#define STM32_PLLSAIM_VALUE 8 diff --git a/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/board.h b/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/board.h index f05762c9b4..b06d96b5d7 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/board.h +++ b/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/board.h @@ -15,7 +15,6 @@ */ #pragma once -#define STM32_HSECLK 16000000 // The following is required to disable the pull-down on PA9, when PA9 is used for the keyboard matrix: #define BOARD_OTG_NOVBUSSENS diff --git a/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/config.h b/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/config.h index 362327efde..9af5c14d52 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/config.h +++ b/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/config.h @@ -13,6 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ +#pragma once #ifndef EARLY_INIT_PERFORM_BOOTLOADER_JUMP # define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE diff --git a/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h b/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h index 566c146c25..9c5cb82436 100644 --- a/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h +++ b/platforms/chibios/boards/GENERIC_STM32_F446XE/configs/mcuconf.h @@ -48,7 +48,7 @@ #define STM32_CLOCK48_REQUIRED TRUE #define STM32_SW STM32_SW_PLL #define STM32_PLLSRC STM32_PLLSRC_HSE -#define STM32_PLLM_VALUE 8 +#define STM32_PLLM_VALUE 4 #define STM32_PLLN_VALUE 180 #define STM32_PLLP_VALUE 2 #define STM32_PLLQ_VALUE 7 @@ -58,7 +58,7 @@ #define STM32_PLLI2SP_VALUE 4 #define STM32_PLLI2SQ_VALUE 4 #define STM32_PLLSAIN_VALUE 192 -#define STM32_PLLSAIM_VALUE 8 +#define STM32_PLLSAIM_VALUE 4 #define STM32_PLLSAIP_VALUE 8 #define STM32_PLLSAIQ_VALUE 4 #define STM32_HPRE STM32_HPRE_DIV1 From e8e19ed234ddc3bf90ac3e6425ed89f6af999446 Mon Sep 17 00:00:00 2001 From: Nick Brassel Date: Thu, 16 Oct 2025 22:50:17 +1100 Subject: [PATCH 77/99] Update ChibiOS, ChibiOS-Contrib. --- lib/chibios | 2 +- lib/chibios-contrib | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/chibios b/lib/chibios index 8bd61b8043..c78acaab38 160000 --- a/lib/chibios +++ b/lib/chibios @@ -1 +1 @@ -Subproject commit 8bd61b804303f1614d574546c2dd735eeabb09f5 +Subproject commit c78acaab385af4ef398fd140df0621bbaef3faf7 diff --git a/lib/chibios-contrib b/lib/chibios-contrib index 3ac181e4ca..8d863d9ee4 160000 --- a/lib/chibios-contrib +++ b/lib/chibios-contrib @@ -1 +1 @@ -Subproject commit 3ac181e4ca5cafddaf8b472baa1d09c2b24c77b6 +Subproject commit 8d863d9ee4eecea68ad8d15f7e7c2b451aea79d9 From 969f324de4b029574e48bfb85c3b030a41bd4d06 Mon Sep 17 00:00:00 2001 From: Rin Jun Kit Liu <30439030+DesyncTheThird@users.noreply.github.com> Date: Sat, 18 Oct 2025 11:17:57 +0100 Subject: [PATCH 78/99] [Docs] Tap-Hold examples (#24391) * Update tap_hold.md Minor grammar/punctuation changes; Added some more tap-hold examples; Added a link about home row mods to the reference near the end; Replaced directional quotation marks with symmetric variant, as this seem to be the only page using them; Standardised formatting of "tap-hold" (hyphenated is slightly more frequent in existing documentation, so I went with that), as well as "Mod-Tap"/"Layer-Tap". * Update docs/tap_hold.md Co-authored-by: Ryan * Update docs/tap_hold.md Co-authored-by: Ryan --------- Co-authored-by: Ryan --- docs/tap_hold.md | 110 +++++++++++++++++++++++++++++++---------------- 1 file changed, 72 insertions(+), 38 deletions(-) diff --git a/docs/tap_hold.md b/docs/tap_hold.md index 164be229f6..bc2c505040 100644 --- a/docs/tap_hold.md +++ b/docs/tap_hold.md @@ -1,15 +1,15 @@ # Tap-Hold Configuration Options -While Tap-Hold options are fantastic, they are not without their issues. We have tried to configure them with reasonable defaults, but that may still cause issues for some people. +While Tap-Hold options are fantastic, they are not without their issues. We have tried to configure them with reasonable defaults, but that may still cause issues for some people. -These options let you modify the behavior of the Tap-Hold keys. +These options let you modify the behavior of the tap-hold keys. ## Tapping Term -The crux of all of the following features is the tapping term setting. This determines what is a tap and what is a hold. The exact timing for this to feel natural can vary from keyboard to keyboard, from switch to switch, and from key to key. +The crux of all of the following features is the tapping term setting. This determines what is a tap and what is a hold. The exact timing for this to feel natural can vary from keyboard to keyboard, from switch to switch, and from key to key. ::: tip -`DYNAMIC_TAPPING_TERM_ENABLE` enables three special keys that can help you quickly find a comfortable tapping term for you. See "Dynamic Tapping Term" for more details. +`DYNAMIC_TAPPING_TERM_ENABLE` enables three special keys that can help you quickly find a comfortable tapping term for you. See [Dynamic Tapping Term](#dynamic-tapping-term) for more details. ::: You can set the global time for this by adding the following setting to your `config.h`: @@ -18,14 +18,14 @@ You can set the global time for this by adding the following setting to your `co #define TAPPING_TERM 200 ``` -This setting is defined in milliseconds and defaults to 200ms. This is a good average for the majority of people. +This setting is defined in milliseconds and defaults to 200ms. This is a good average for the majority of people. For more granular control of this feature, you can add the following to your `config.h`: ```c #define TAPPING_TERM_PER_KEY ``` -You can then add the following function to your keymap: +You can then add the following function to your `keymap.c` to customise the tapping term for each key: ```c uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { @@ -40,9 +40,41 @@ uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { } ``` +### Example + +You can compare keycodes to `QK_MOD_TAP`/`QK_MOD_TAP_MAX` and `QK_LAYER_TAP`/`QK_LAYER_TAP_MAX` to filter out Mod-Tap/Layer-Tap keys, rather than checking such keys manually in a switch-case. For instance, this example sets all Mod-Tap keys to have a higher tapping term, while leaving all other tap-hold keys unchanged: + +```c +uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QK_MOD_TAP ... QK_MOD_TAP_MAX: + return TAPPING_TERM + 100; + default: + return TAPPING_TERM; + } +} +``` + +You can also use functions like `QK_MOD_TAP_GET_MODS`, `QK_LAYER_MOD_GET_MODS`, and `QK_ONE_SHOT_MOD_GET_MODS` to filter Mod-Tap/Layer-Mod/One Shot keys by their mods. + +For instance, this example sets a higher tapping term for `AltGr` Mod-Taps and lower tapping terms for `Shift` Mod-Taps: + +```c +uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { + uint8_t mod = mod_config(QK_MOD_TAP_GET_MODS(keycode)); + if (mod & MOD_LSFT != 0 || mod & MOD_RSFT != 0) { + return 100; + } + if (mod & MOD_RALT != 0) { + return TAPPING_TERM + 50; + } + return TAPPING_TERM; +} +``` + ### Dynamic Tapping Term {#dynamic-tapping-term} -`DYNAMIC_TAPPING_TERM_ENABLE` is a feature you can enable in `rules.mk` that lets you use three special keys in your keymap to configure the tapping term on the fly. +`DYNAMIC_TAPPING_TERM_ENABLE` is a feature you can enable in `rules.mk` that lets you use three special keys in your keymap to configure the tapping term on the fly: | Key | Aliases | Description | |-------------------------------|---------|-------------------------------------------------------------------------------------------| @@ -52,13 +84,13 @@ uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { Set the tapping term as usual with `#define TAPPING_TERM ` in `config.h` and add `DYNAMIC_TAPPING_TERM_ENABLE = yes` in `rules.mk`. Then, place the above three keys somewhere in your keymap and flash the new firmware onto your board. -Now, you can try using your dual-role keys, such as layer-taps and mod-taps, and use `DT_DOWN` and `DT_UP` to adjust the tapping term immediately. If you find that you frequently trigger the modifier of your mod-tap(s) by accident, for example, that's a sign that your tapping term may be too low so tap `DT_UP` a few times to increase the tapping term until that no longer happens. On the flip side, if you get superfluous characters when you actually intended to momentarily activate a layer, tap `DT_DOWN` to lower the tapping term. Do note that these keys affect the *global* tapping term, you cannot change the tapping term of a specific key on the fly. +Now, you can try using your dual-role keys such as Layer-Taps and Mod-Taps and use `DT_DOWN` and `DT_UP` to adjust the tapping term immediately. If you find that you frequently trigger the modifier of your Mod-Tap(s) by accident, for example, that's a sign that your tapping term may be too low, so tap `DT_UP` a few times to increase the tapping term until that no longer happens. Conversely, if you get superfluous characters when you actually intended to momentarily activate a layer, tap `DT_DOWN` to lower the tapping term. Do note that these keys affect the *global* tapping term, you cannot change the tapping term of a specific key on the fly. -Once you're satisfied with the current tapping term value, open `config.h` and replace whatever value you first wrote for the tapping term by the output of the `DT_PRNT` key. +Once you're satisfied with the current tapping term value, you can tap the `DT_PRNT` key to see your new tapping term, and you can replace the tapping term in `config.h` with this new value. -It's important to update `TAPPING_TERM` with the new value because the adjustments made using `DT_UP` and `DT_DOWN` are not persistent. +It's important to update `TAPPING_TERM` with the new value because the adjustments made using `DT_UP` and `DT_DOWN` are *not* persistent. -The value by which the tapping term increases or decreases when you tap `DT_UP` and `DT_DOWN` can be configured in `config.h` with `#define DYNAMIC_TAPPING_TERM_INCREMENT `. Note that the tapping term is *not* modified when holding down the tap term keys so if you need to, for example, decrease the current tapping term by 50ms, you cannot just press down and hold `DT_DOWN`; you will have to tap it 10 times in a row with the default increment of 5ms. +The value by which the tapping term increases or decreases when you tap `DT_UP` and `DT_DOWN` can be configured in `config.h` with `#define DYNAMIC_TAPPING_TERM_INCREMENT `. Note that the tapping term is *not* modified when *holding* down the tap term keys, so if you need to, for example, decrease the current tapping term by 50ms, you cannot just press down and hold `DT_DOWN`; you will have to tap it 10 times in a row with the default increment of 5ms. If you need more flexibility, nothing prevents you from defining your own custom keys to dynamically change the tapping term. @@ -97,7 +129,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { }; ``` -In order for this feature to be effective if you use per-key tapping terms, you need to make a few changes to the syntax of the `get_tapping_term` function. All you need to do is replace every occurrence of `TAPPING_TERM` in the `get_tapping_term` function by lowercase `g_tapping_term`. If you don't do that, you will still see the value typed by `DT_PRNT` go up and down as you configure the tapping term on the fly but you won't feel those changes as they don't get applied. If you can go as low as 10ms and still easily trigger the tap function of a dual-role key, that's a sign that you forgot to make the necessary changes to your `get_tapping_term` function. +In order for this feature to be effective, if you use per-key tapping terms, then you need to make a few changes to the syntax of the `get_tapping_term` function. All you need to do is replace every occurrence of `TAPPING_TERM` in the `get_tapping_term` function by lowercase `g_tapping_term`. If you don't do this, you will still see the value typed by `DT_PRNT` go up and down as you configure the tapping term on the fly, but you won't feel those changes as they don't get applied. If you can go as low as 10ms and still easily trigger the tap function of a dual-role key, that's a sign that you forgot to make the necessary changes to your `get_tapping_term` function. For instance, here's how the example `get_tapping_term` shown earlier should look after the transformation: @@ -114,23 +146,23 @@ uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { } ``` -The reason is that `TAPPING_TERM` is a macro that expands to a constant integer and thus cannot be changed at runtime whereas `g_tapping_term` is a variable whose value can be changed at runtime. If you want, you can temporarily enable `DYNAMIC_TAPPING_TERM_ENABLE` to find a suitable tapping term value and then disable that feature and revert back to using the classic syntax for per-key tapping term settings. In case you need to access the tapping term from elsewhere in your code, you can use the `GET_TAPPING_TERM(keycode, record)` macro. This macro will expand to whatever is the appropriate access pattern given the current configuration. +The reason is that `TAPPING_TERM` is a macro that expands to a constant integer and thus cannot be changed at runtime, whereas `g_tapping_term` is a variable whose value can be changed at runtime. If you want, you can temporarily enable `DYNAMIC_TAPPING_TERM_ENABLE` to find a suitable tapping term value and then disable that feature and revert back to using the classic syntax for per-key tapping term settings. In case you need to access the tapping term from elsewhere in your code, you can use the `GET_TAPPING_TERM(keycode, record)` macro. This macro will expand to whatever is the appropriate access pattern given the current configuration. ## Tap-Or-Hold Decision Modes The code which decides between the tap and hold actions of dual-role keys supports three different modes, in increasing order of preference for the hold action: -1. The default mode selects the hold action only if the dual-role key is held down longer than the tapping term. In this mode pressing other keys while the dual-role key is held down does not influence the tap-or-hold decision. In other words, this mode ignores interrupts. +1. The default mode selects the hold action only if the dual-role key is held down longer than the tapping term. In this mode, pressing other keys while the dual-role key is held down does not influence the tap-or-hold decision. In other words, this mode ignores interrupts. -2. The “permissive hold” mode, in addition to the default behavior, immediately selects the hold action when another key is tapped (pressed and then released) while the dual-role key is held down, even if this happens earlier than the tapping term. If another key is just pressed, but then the dual-role key is released before that other key (and earlier than the tapping term), this mode will still select the tap action. +2. The "permissive hold" mode, in addition to the default behavior, immediately selects the hold action when another key is tapped (pressed and then released) while the dual-role key is held down, even if this happens earlier than the tapping term. If another key is just pressed, but then the dual-role key is released before that other key (and earlier than the tapping term), this mode will still select the tap action. That is, this mode converts "nested" sequences, but not "rolls". -3. The “hold on other key press” mode, in addition to the default behavior, immediately selects the hold action when another key is pressed while the dual-role key is held down, even if this happens earlier than the tapping term. +3. The "hold on other key press" mode, in addition to the default behavior, immediately selects the hold action when another key is pressed while the dual-role key is held down, even if this happens earlier than the tapping term. Note that until the tap-or-hold decision completes (which happens when either the dual-role key is released, or the tapping term has expired, or the extra condition for the selected decision mode is satisfied), key events are delayed and not transmitted to the host immediately. The default mode gives the most delay (if the dual-role key is held down, this mode always waits for the whole tapping term), and the other modes may give less delay when other keys are pressed, because the hold action may be selected earlier. ### Comparison {#comparison} -To better illustrate the tap-or-hold decision modes, let us compare the expected output of each decision mode in a handful of tapping scenarios involving a mod-tap key (`LSFT_T(KC_A)`) and a regular key (`KC_B`) with the `TAPPING_TERM` set to 200ms. +To better illustrate the tap-or-hold decision modes, let us compare the expected output of each decision mode in a handful of tapping scenarios involving a Mod-Tap key (`LSFT_T(KC_A)`) and a regular key (`KC_B`) with the `TAPPING_TERM` set to 200ms. Note: "`kc` held" in the "Physical key event" column means that the key wasn't physically released yet at this point in time. @@ -228,7 +260,7 @@ The above sequence will not send `KC_RGHT` but `KC_A` `KC_L` instead, since `LT( --- -Example sequence 3 (Mod Tap): +Example sequence 3 (Mod-Tap): ``` TAPPING_TERM @@ -246,17 +278,17 @@ followed by any key event that happened after the initial press of `SFT_T(KC_A)` ### Permissive Hold -The “permissive hold” mode can be enabled for all dual-role keys by adding the corresponding option to `config.h`: +The "permissive hold" mode can be enabled for all dual-role keys by adding the corresponding option to `config.h`: ```c #define PERMISSIVE_HOLD ``` -This makes tap and hold keys (like Layer Tap) work better for fast typists, or for high `TAPPING_TERM` settings. +This makes tap and hold keys (like Layer-Tap) work better for fast typists, or for high `TAPPING_TERM` settings. -If you press a dual-role key, tap another key (press and release) and then release the dual-role key, all within the tapping term, by default the dual-role key will perform its tap action. If the `PERMISSIVE_HOLD` option is enabled, the dual-role key will perform its hold action instead. +If you press a dual-role key, tap another key (press and release) and then release the dual-role key, all within the tapping term, by default the dual-role key will perform its tap action. If the `PERMISSIVE_HOLD` option is enabled, the dual-role key will perform its hold action instead. -An example of a sequence that is affected by the “permissive hold” mode: +An example of a sequence that is affected by the "permissive hold" mode: - `LT(2, KC_A)` Down - `KC_L` Down (the `L` key is also mapped to `KC_RGHT` on layer 2) @@ -275,9 +307,9 @@ An example of a sequence that is affected by the “permissive hold” mode: +---------------------------|--------+ ``` -Normally, if you do all this within the `TAPPING_TERM` (default: 200ms), this will be registered as `al` by the firmware and host system. With the `PERMISSIVE_HOLD` option enabled, the Layer Tap key is considered as a layer switch if another key is tapped, and the above sequence would be registered as `KC_RGHT` (the mapping of `L` on layer 2). We could describe this sequence as a “nested tap” (the modified key's key down and key up events are “nested” between the dual-role key's key down and key up events). +Normally, if you do all this within the `TAPPING_TERM` (default: 200ms), this will be registered as `al` by the firmware and host system. With the `PERMISSIVE_HOLD` option enabled, the Layer-Tap key is considered as a layer switch if another key is tapped, and the above sequence would be registered as `KC_RGHT` (the mapping of `L` on layer 2). We could describe this sequence as a "nested tap" (the modified key's key down and key up events are "nested" between the dual-role key's key down and key up events). -However, this slightly different sequence will not be affected by the “permissive hold” mode: +However, this slightly different sequence will not be affected by the "permissive hold" mode: - `LT(2, KC_A)` Down - `KC_L` Down (the `L` key is also mapped to `KC_RGHT` on layer 2) @@ -296,10 +328,10 @@ However, this slightly different sequence will not be affected by the “permiss +---------------------------|--------+ ``` -In the sequence above the dual-role key is released before the other key is released, and if that happens within the tapping term, the “permissive hold” mode will still choose the tap action for the dual-role key, and the sequence will be registered as `al` by the host. We could describe this as a “rolling press” (the two keys' key down and key up events behave as if you were rolling a ball across the two keys, first pressing each key down in sequence and then releasing them in the same order). +In the sequence above the dual-role key is released before the other key is released, and if that happens within the tapping term, the "permissive hold" mode will still choose the tap action for the dual-role key, and the sequence will be registered as `al` by the host. We could describe this as a "rolling press" (the two keys' key down and key up events behave as if you were rolling a ball across the two keys, first pressing each key down in sequence and then releasing them in the same order). ::: tip -The `PERMISSIVE_HOLD` option is not noticeable if you also enable `HOLD_ON_OTHER_KEY_PRESS` because the latter option considers both the “nested tap” and “rolling press” sequences like shown above as a hold action, not the tap action. `HOLD_ON_OTHER_KEY_PRESS` makes the Tap-Or-Hold decision earlier in the chain of key events, thus taking a precedence over `PERMISSIVE_HOLD`. +The `PERMISSIVE_HOLD` option is not noticeable if you also enable `HOLD_ON_OTHER_KEY_PRESS` because the latter option considers both the "nested tap" and "rolling press" sequences like shown above as a hold action, not the tap action. `HOLD_ON_OTHER_KEY_PRESS` makes the tap-or-hold decision earlier in the chain of key events, thus taking a precedence over `PERMISSIVE_HOLD`. ::: For more granular control of this feature, you can add the following to your `config.h`: @@ -323,19 +355,21 @@ bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) { } ``` +As in the earlier example, you can filter Mod-Tap/Layer-Mod/One Shot keys by their mods rather than checking such keys manually in a switch-case. (Also applicable to the other following `PER_KEY` functions.) + ### Hold On Other Key Press -The “hold on other key press” mode can be enabled for all dual-role keys by adding the corresponding option to `config.h`: +The "hold on other key press" mode can be enabled for all dual-role keys by adding the corresponding option to `config.h`: ```c #define HOLD_ON_OTHER_KEY_PRESS ``` -This mode makes tap and hold keys (like Layer Tap) work better for fast typists, or for high `TAPPING_TERM` settings. Compared to the “permissive hold” mode, this mode selects the hold action in more cases. +This mode makes tap and hold keys (like Layer-Tap) work better for fast typists, or for high `TAPPING_TERM` settings. Compared to the "permissive hold" mode, this mode selects the hold action in more cases. -If you press a dual-role key, press another key, and then release the dual-role key, all within the tapping term, by default the dual-role key will perform its tap action. If the `HOLD_ON_OTHER_KEY_PRESS` option is enabled, the dual-role key will perform its hold action instead. +If you press a dual-role key, press another key, and then release the dual-role key, all within the tapping term, by default the dual-role key will perform its tap action. If the `HOLD_ON_OTHER_KEY_PRESS` option is enabled, the dual-role key will perform its hold action instead. -An example of a sequence that is affected by the “hold on other key press” mode, but not by the “permissive hold” mode: +An example of a sequence that is affected by the "hold on other key press" mode, but not by the "permissive hold" mode: - `LT(2, KC_A)` Down - `KC_L` Down (the `L` key is also mapped to `KC_RGHT` on layer 2) @@ -354,7 +388,7 @@ An example of a sequence that is affected by the “hold on other key press” m +---------------------------|--------+ ``` -Normally, if you do all this within the `TAPPING_TERM` (default: 200ms), this will be registered as `al` by the firmware and host system. With the `HOLD_ON_OTHER_KEY_PRESS` option enabled, the Layer Tap key is considered as a layer switch if another key is pressed, and the above sequence would be registered as `KC_RGHT` (the mapping of `L` on layer 2). +Normally, if you do all this within the `TAPPING_TERM` (default: 200ms), this will be registered as `al` by the firmware and host system. With the `HOLD_ON_OTHER_KEY_PRESS` option enabled, the Layer-Tap key is considered as a layer switch if another key is pressed, and the above sequence would be registered as `KC_RGHT` (the mapping of `L` on layer 2). For more granular control of this feature, you can add the following to your `config.h`: @@ -394,9 +428,9 @@ Example: - `SFT_T(KC_A)` Down - (wait until tapping term expires...) -With default settings, `a` will be sent on the first release, then `a` will be sent on the second press allowing the computer to trigger its auto repeat function until the key is released. +With default settings, `a` will be sent on the first release, then `a` will be sent on the second press, allowing the computer to trigger its auto repeat function until the key is released. -With `QUICK_TAP_TERM` configured, the timing between `SFT_T(KC_A)` up and `SFT_T(KC_A)` down must be within `QUICK_TAP_TERM` to trigger auto repeat. Otherwise the second press will be sent as a Shift. If `QUICK_TAP_TERM` is set to `0`, the second press will always be sent as a Shift, effectively disabling auto-repeat. +With `QUICK_TAP_TERM` configured, the timing between `SFT_T(KC_A)` up and `SFT_T(KC_A)` down must be within `QUICK_TAP_TERM` to trigger auto-repeat. Otherwise, the second press will be sent as a Shift. If `QUICK_TAP_TERM` is set to `0`, the second press will always be sent as a Shift, effectively disabling auto-repeat. ::: warning `QUICK_TAP_TERM` timing will also impact anything that uses tapping toggles (Such as the `TT` layer keycode, and the One Shot Tap Toggle). @@ -714,10 +748,10 @@ bool get_retro_tapping(uint16_t keycode, keyrecord_t *record) { } ``` -If the programs you use bind an action to taps of modifier keys (e.g. tapping left GUI to bring up the applications menu or tapping left Alt to focus the menu bar), you may find that using retro-tapping falsely triggers those actions. To counteract this, you can define a `DUMMY_MOD_NEUTRALIZER_KEYCODE` in `config.h` that will get sent in between the register and unregister events of a held mod-tap key. That way, the programs on your computer will no longer interpret the mod suppression induced by retro-tapping as a lone tap of a modifier key and will thus not falsely trigger the undesired action. +If the programs you use bind an action to taps of modifier keys (e.g. tapping left GUI to bring up the applications menu or tapping left Alt to focus the menu bar), you may find that using retro-tapping falsely triggers those actions. To counteract this, you can define a `DUMMY_MOD_NEUTRALIZER_KEYCODE` in `config.h` that will get sent in between the register and unregister events of a held Mod-Tap key. That way, the programs on your computer will no longer interpret the mod suppression induced by retro-tapping as a lone tap of a modifier key and will thus not falsely trigger the undesired action. Naturally, for this technique to be effective, you must choose a `DUMMY_MOD_NEUTRALIZER_KEYCODE` for which no keyboard shortcuts are bound to. Recommended values are: `KC_RIGHT_CTRL` or `KC_F18`. -Please note that `DUMMY_MOD_NEUTRALIZER_KEYCODE` must be a basic, unmodified, HID keycode so values like `KC_NO`, `KC_TRANSPARENT` or `KC_PIPE` aka `S(KC_BACKSLASH)` are not permitted. +Please note that `DUMMY_MOD_NEUTRALIZER_KEYCODE` must be a basic, unmodified, HID keycode, so values like `KC_NO`, `KC_TRANSPARENT`, or `KC_PIPE` (aka `S(KC_BACKSLASH)`) are not permitted. By default, only left Alt and left GUI are neutralized. If you want to change the list of applicable modifier masks, use the following in your `config.h`: @@ -743,14 +777,14 @@ Do not use `MOD_xxx` constants like `MOD_LSFT` or `MOD_RALT`, since they're 5-bi ### Retro Shift -[Auto Shift,](features/auto_shift) has its own version of `retro tapping` called `retro shift`. It is extremely similar to `retro tapping`, but holding the key past `AUTO_SHIFT_TIMEOUT` results in the value it sends being shifted. Other configurations also affect it differently; see [here](features/auto_shift#retro-shift) for more information. +[Auto Shift](features/auto_shift) has its own version of `retro tapping` called `retro shift`. It is extremely similar to `retro tapping`, but holding the key past `AUTO_SHIFT_TIMEOUT` results in the value it sends being shifted. Other configurations also affect it differently; see [here](features/auto_shift#retro-shift) for more information. ## Why do we include the key record for the per key functions? One thing that you may notice is that we include the key record for all of the "per key" functions, and may be wondering why we do that. -Well, it's simple really: customization. But specifically, it depends on how your keyboard is wired up. For instance, if each row is actually using a row in the keyboard's matrix, then it may be simpler to use `if (record->event.key.row == 3)` instead of checking a whole bunch of keycodes. Which is especially good for those people using the Tap Hold type keys on the home row. So you could fine-tune those to not interfere with your normal typing. +Well, it's simple really: customization. But specifically, it depends on how your keyboard is wired up. For instance, if each row is actually using a row in the keyboard's matrix, then it may be simpler to use `if (record->event.key.row == 3)` instead of checking a whole bunch of keycodes, which is especially good for those people using the tap-hold keys on the home row (see about *home row mods* [here](https://precondition.github.io/home-row-mods)). So, you could fine-tune those to not interfere with your normal typing. ## Why are there no `*_kb` or `*_user` functions?! -Unlike many of the other functions here, there isn't a need (or even reason) to have a quantum or keyboard-level function. Only user-level functions are useful here, so no need to mark them as such. +Unlike many of the other functions here, there isn't a need (or even reason) to have a quantum- or keyboard-level function. Only user-level functions are useful here, so there is no need to mark them as such. \ No newline at end of file From 1a32aa12e039ccec0c8e73d7039caf0f0e78e9b9 Mon Sep 17 00:00:00 2001 From: xenogear74 <51131374+xenogear74@users.noreply.github.com> Date: Sun, 19 Oct 2025 21:50:45 -0400 Subject: [PATCH 79/99] Fix `vertex/t75` layout coordinates (#25736) Updated the Y value for row 5. Before they were set to row 4 as well, which caused qmk configurator to overlap rows 4 and 5. --- keyboards/vertex/t75/keyboard.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboards/vertex/t75/keyboard.json b/keyboards/vertex/t75/keyboard.json index f67326afb8..824659e827 100644 --- a/keyboards/vertex/t75/keyboard.json +++ b/keyboards/vertex/t75/keyboard.json @@ -103,15 +103,15 @@ {"matrix": [4, 11], "x": 12.25, "y": 4, "w": 1.75}, {"matrix": [4, 12], "x": 14, "y": 4}, {"matrix": [4, 13], "x": 15, "y": 4}, - {"matrix": [5, 0], "x": 0, "y": 4, "w": 1.25}, - {"matrix": [5, 1], "x": 1.25, "y": 4, "w": 1.25}, - {"matrix": [5, 2], "x": 2.5, "y": 4, "w": 1.25}, - {"matrix": [5, 5], "x": 3.75, "y": 4, "w": 6.25}, - {"matrix": [5, 9], "x": 10, "y": 4, "w": 1.25}, - {"matrix": [5, 10], "x": 11.25, "y": 4, "w": 1.25}, - {"matrix": [5, 11], "x": 13, "y": 4}, - {"matrix": [5, 12], "x": 14, "y": 4}, - {"matrix": [5, 13], "x": 15, "y": 4} + {"matrix": [5, 0], "x": 0, "y": 5, "w": 1.25}, + {"matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25}, + {"matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25}, + {"matrix": [5, 5], "x": 3.75, "y": 5, "w": 6.25}, + {"matrix": [5, 9], "x": 10, "y": 5, "w": 1.25}, + {"matrix": [5, 10], "x": 11.25, "y": 5, "w": 1.25}, + {"matrix": [5, 11], "x": 13, "y": 5}, + {"matrix": [5, 12], "x": 14, "y": 5}, + {"matrix": [5, 13], "x": 15, "y": 5} ] } } From d0db38cbdc9410dd58e6c83d18bca2232b823d24 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 10:57:34 +0100 Subject: [PATCH 80/99] Bump vite from 5.4.20 to 5.4.21 in /builddefs/docsgen (#25740) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.20 to 5.4.21. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v5.4.21/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v5.4.21/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 5.4.21 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- builddefs/docsgen/package.json | 2 +- builddefs/docsgen/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/builddefs/docsgen/package.json b/builddefs/docsgen/package.json index 19c80580d6..b6c56f3448 100644 --- a/builddefs/docsgen/package.json +++ b/builddefs/docsgen/package.json @@ -1,7 +1,7 @@ { "license": "GPL-2.0-or-later", "devDependencies": { - "vite": "^5.4.20", + "vite": "^5.4.21", "vitepress": "^1.1.0", "vitepress-plugin-tabs": "^0.5.0", "vue": "^3.4.24" diff --git a/builddefs/docsgen/yarn.lock b/builddefs/docsgen/yarn.lock index bc2edf6024..e5eaaa2c8f 100644 --- a/builddefs/docsgen/yarn.lock +++ b/builddefs/docsgen/yarn.lock @@ -766,10 +766,10 @@ tabbable@^6.2.0: resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== -vite@^5.2.9, vite@^5.4.20: - version "5.4.20" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.20.tgz#3267a5e03f21212f44edfd72758138e8fcecd76a" - integrity sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g== +vite@^5.2.9, vite@^5.4.21: + version "5.4.21" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.21.tgz#84a4f7c5d860b071676d39ba513c0d598fdc7027" + integrity sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw== dependencies: esbuild "^0.21.3" postcss "^8.4.43" From 1c1e8d7f7af36ae668a9a690f22e6535a48fde57 Mon Sep 17 00:00:00 2001 From: kay <106367116+kaybarkbark@users.noreply.github.com> Date: Wed, 22 Oct 2025 08:19:48 -0700 Subject: [PATCH 81/99] Fix Broken Numpad 0 on `yacobo` IBM Model M (#25742) I built three of these and was confused as to why my numpad 0 wasn't working. Eventually, I consulted this website to see the key matrix for the Model M https://sharktastica.co.uk/sims/matrix?kb=enhanced `kp_0` is in the matrix at [0, 12], not [0, 11]. Simple off by one error. I fixed this, flashed to all my keyboards, and it worked. Co-authored-by: Kay Barkbark --- keyboards/ibm/model_m/yacobo/keyboard.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ibm/model_m/yacobo/keyboard.json b/keyboards/ibm/model_m/yacobo/keyboard.json index 7ea9c6a621..dd88ac5cd4 100644 --- a/keyboards/ibm/model_m/yacobo/keyboard.json +++ b/keyboards/ibm/model_m/yacobo/keyboard.json @@ -153,7 +153,7 @@ {"label": "\u2193", "matrix": [7, 11], "x": 16.5, "y": 5.5}, {"label": "\u2192", "matrix": [7, 12], "x": 17.5, "y": 5.5}, - {"label": "0", "matrix": [0, 11], "x": 19, "y": 5.5, "w": 2}, + {"label": "0", "matrix": [0, 12], "x": 19, "y": 5.5, "w": 2}, {"label": ".", "matrix": [0, 13], "x": 21, "y": 5.5} ] }, @@ -277,7 +277,7 @@ {"label": "\u2193", "matrix": [7, 11], "x": 16.5, "y": 5.5}, {"label": "\u2192", "matrix": [7, 12], "x": 17.5, "y": 5.5}, - {"label": "0", "matrix": [0, 11], "x": 19, "y": 5.5, "w": 2}, + {"label": "0", "matrix": [0, 12], "x": 19, "y": 5.5, "w": 2}, {"label": ".", "matrix": [0, 13], "x": 21, "y": 5.5} ] } From 7d0fc5d486f701c527ed0c3cb1d5d759a0440240 Mon Sep 17 00:00:00 2001 From: Thanh Son Tran <62438883+trnthsn@users.noreply.github.com> Date: Thu, 23 Oct 2025 07:55:33 +0700 Subject: [PATCH 82/99] [Keyboard] Add support Tyson60 (#25702) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Duncan Sutherland Co-authored-by: Joel Challis Co-authored-by: Trần Thanh Sơn --- keyboards/trnthsn/tyson60/config.h | 9 ++ keyboards/trnthsn/tyson60/halconf.h | 7 ++ keyboards/trnthsn/tyson60/info.json | 114 ++++++++++++++++++ .../trnthsn/tyson60/keymaps/default/keymap.c | 40 ++++++ keyboards/trnthsn/tyson60/mcuconf.h | 9 ++ keyboards/trnthsn/tyson60/readme.md | 27 +++++ .../trnthsn/tyson60/stm32f072/keyboard.json | 4 + .../trnthsn/tyson60/stm32f103/keyboard.json | 4 + 8 files changed, 214 insertions(+) create mode 100644 keyboards/trnthsn/tyson60/config.h create mode 100644 keyboards/trnthsn/tyson60/halconf.h create mode 100644 keyboards/trnthsn/tyson60/info.json create mode 100644 keyboards/trnthsn/tyson60/keymaps/default/keymap.c create mode 100644 keyboards/trnthsn/tyson60/mcuconf.h create mode 100644 keyboards/trnthsn/tyson60/readme.md create mode 100644 keyboards/trnthsn/tyson60/stm32f072/keyboard.json create mode 100644 keyboards/trnthsn/tyson60/stm32f103/keyboard.json diff --git a/keyboards/trnthsn/tyson60/config.h b/keyboards/trnthsn/tyson60/config.h new file mode 100644 index 0000000000..8ab8c1a85f --- /dev/null +++ b/keyboards/trnthsn/tyson60/config.h @@ -0,0 +1,9 @@ +// Copyright 2025 Tyson.Keebs +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define WS2812_SPI_DRIVER SPID2 +#define WS2812_SPI_MOSI_PAL_MODE 0 +#define WS2812_SPI_SCK_PAL_MODE 0 +#define WS2812_SPI_SCK_PIN B13 diff --git a/keyboards/trnthsn/tyson60/halconf.h b/keyboards/trnthsn/tyson60/halconf.h new file mode 100644 index 0000000000..7056539285 --- /dev/null +++ b/keyboards/trnthsn/tyson60/halconf.h @@ -0,0 +1,7 @@ +// Copyright 2025 Tyson.Keebs +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define HAL_USE_SPI TRUE +#include_next diff --git a/keyboards/trnthsn/tyson60/info.json b/keyboards/trnthsn/tyson60/info.json new file mode 100644 index 0000000000..6f4df15d99 --- /dev/null +++ b/keyboards/trnthsn/tyson60/info.json @@ -0,0 +1,114 @@ +{ + "manufacturer": "Tyson.Keebs", + "keyboard_name": "Tyson60", + "maintainer": "trnthsn", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true + }, + "indicators": { + "caps_lock": "B4" + }, + "matrix_pins": { + "cols": ["A10", "A9", "A8", "B14", "B12", "B10", "B1", "B0", "A15", "B5", "C15", "C14", "C13", "B9"], + "rows": ["B8", "B7", "B6", "B11", "A6"] + }, + "rgblight": { + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "snake": true, + "static_gradient": true, + "twinkle": true + }, + "led_count": 30, + "sleep": true + }, + "usb": { + "device_version": "0.0.1", + "pid": "0x5336", + "vid": "0x5453" + }, + "ws2812": { + "driver": "spi", + "pin": "B15" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + {"matrix": [0, 5], "x": 5, "y": 0}, + {"matrix": [0, 6], "x": 6, "y": 0}, + {"matrix": [0, 7], "x": 7, "y": 0}, + {"matrix": [0, 8], "x": 8, "y": 0}, + {"matrix": [0, 9], "x": 9, "y": 0}, + {"matrix": [0, 10], "x": 10, "y": 0}, + {"matrix": [0, 11], "x": 11, "y": 0}, + {"matrix": [0, 12], "x": 12, "y": 0}, + {"matrix": [2, 12], "x": 13, "y": 0}, + {"matrix": [0, 13], "x": 14, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [1, 1], "x": 1.5, "y": 1}, + {"matrix": [1, 2], "x": 2.5, "y": 1}, + {"matrix": [1, 3], "x": 3.5, "y": 1}, + {"matrix": [1, 4], "x": 4.5, "y": 1}, + {"matrix": [1, 5], "x": 5.5, "y": 1}, + {"matrix": [1, 6], "x": 6.5, "y": 1}, + {"matrix": [1, 7], "x": 7.5, "y": 1}, + {"matrix": [1, 8], "x": 8.5, "y": 1}, + {"matrix": [1, 9], "x": 9.5, "y": 1}, + {"matrix": [1, 10], "x": 10.5, "y": 1}, + {"matrix": [1, 11], "x": 11.5, "y": 1}, + {"matrix": [1, 12], "x": 12.5, "y": 1}, + {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5}, + {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [2, 1], "x": 1.75, "y": 2}, + {"matrix": [2, 2], "x": 2.75, "y": 2}, + {"matrix": [2, 3], "x": 3.75, "y": 2}, + {"matrix": [2, 4], "x": 4.75, "y": 2}, + {"matrix": [2, 5], "x": 5.75, "y": 2}, + {"matrix": [2, 6], "x": 6.75, "y": 2}, + {"matrix": [2, 7], "x": 7.75, "y": 2}, + {"matrix": [2, 8], "x": 8.75, "y": 2}, + {"matrix": [2, 9], "x": 9.75, "y": 2}, + {"matrix": [2, 10], "x": 10.75, "y": 2}, + {"matrix": [2, 11], "x": 11.75, "y": 2}, + {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25}, + {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25}, + {"matrix": [3, 1], "x": 1.25, "y": 3}, + {"matrix": [3, 2], "x": 2.25, "y": 3}, + {"matrix": [3, 3], "x": 3.25, "y": 3}, + {"matrix": [3, 4], "x": 4.25, "y": 3}, + {"matrix": [3, 5], "x": 5.25, "y": 3}, + {"matrix": [3, 6], "x": 6.25, "y": 3}, + {"matrix": [3, 7], "x": 7.25, "y": 3}, + {"matrix": [3, 8], "x": 8.25, "y": 3}, + {"matrix": [3, 9], "x": 9.25, "y": 3}, + {"matrix": [3, 10], "x": 10.25, "y": 3}, + {"matrix": [3, 11], "x": 11.25, "y": 3, "w": 1.75}, + {"matrix": [3, 12], "x": 13, "y": 3}, + {"matrix": [3, 13], "x": 14, "y": 3}, + {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5}, + {"matrix": [4, 1], "x": 1.5, "y": 4, "w": 1}, + {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5}, + {"matrix": [4, 7], "x": 4, "y": 4, "w": 7}, + {"matrix": [4, 10], "x": 11, "y": 4}, + {"matrix": [4, 11], "x": 12, "y": 4}, + {"matrix": [4, 12], "x": 13, "y": 4}, + {"matrix": [4, 13], "x": 14, "y": 4} + ] + } + } +} diff --git a/keyboards/trnthsn/tyson60/keymaps/default/keymap.c b/keyboards/trnthsn/tyson60/keymaps/default/keymap.c new file mode 100644 index 0000000000..30786c4b60 --- /dev/null +++ b/keyboards/trnthsn/tyson60/keymaps/default/keymap.c @@ -0,0 +1,40 @@ +// Copyright 2025 Tyson.Keebs +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ + // │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│ + // ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ + // │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ + // ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ + // │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ + // ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤ + // │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │Shift │↑ │/ │ + // ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴──┬───┼───┼───┤ + // │Ctrl │GUI│ Alt │ │Fn │← │↓ │→ │ + // └─────┴───┴─────┴───────────────────────────┴───┴───┴───┴───┘ + + [0] = LAYOUT( + KC_ESC, 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_BSPC, + 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_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_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_SLSH, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT( + KC_GRV, 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_INS, KC_DEL, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + MO(2) , _______, _______, _______, _______, _______, _______, UG_TOGG, UG_NEXT, UG_VALD, UG_VALU, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + [2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/trnthsn/tyson60/mcuconf.h b/keyboards/trnthsn/tyson60/mcuconf.h new file mode 100644 index 0000000000..d131af9fdf --- /dev/null +++ b/keyboards/trnthsn/tyson60/mcuconf.h @@ -0,0 +1,9 @@ +// Copyright 2025 Tyson.Keebs +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +#undef STM32_SPI_USE_SPI2 +#define STM32_SPI_USE_SPI2 TRUE diff --git a/keyboards/trnthsn/tyson60/readme.md b/keyboards/trnthsn/tyson60/readme.md new file mode 100644 index 0000000000..d38c012aad --- /dev/null +++ b/keyboards/trnthsn/tyson60/readme.md @@ -0,0 +1,27 @@ +# Tyson60 + +![trnthsn/tyson60](https://live.staticflickr.com/65535/54831948531_6b41780afe_b.jpg) + +Tyson60 PCB, 60% keyboard PCB. + +* Keyboard Maintainer: [Trnthsn](https://github.com/trnthsn) +* Hardware Supported: STM32, Tyson60 +* Hardware Availability: [ThanhSon.Mech](https://www.facebook.com/ThanhSon.mech) + +Make example for this keyboard (after setting up your build environment): + + make trnthsn/tyson60/stm32f103:default + +Flashing example for this keyboard: + + make trnthsn/tyson60/stm32f103: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 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/trnthsn/tyson60/stm32f072/keyboard.json b/keyboards/trnthsn/tyson60/stm32f072/keyboard.json new file mode 100644 index 0000000000..b5d728b1cd --- /dev/null +++ b/keyboards/trnthsn/tyson60/stm32f072/keyboard.json @@ -0,0 +1,4 @@ +{ + "processor": "STM32F072", + "bootloader": "stm32-dfu", +} diff --git a/keyboards/trnthsn/tyson60/stm32f103/keyboard.json b/keyboards/trnthsn/tyson60/stm32f103/keyboard.json new file mode 100644 index 0000000000..5b2b6bc7d9 --- /dev/null +++ b/keyboards/trnthsn/tyson60/stm32f103/keyboard.json @@ -0,0 +1,4 @@ +{ + "processor": "STM32F103", + "bootloader": "uf2boot", +} From 98e65cf3e1fb4bf61367d469a62d3cce0a9fac20 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Thu, 23 Oct 2025 11:44:29 +0100 Subject: [PATCH 83/99] Fix hhkb/jp - Restore previous matrix locations (#25724) --- keyboards/hhkb/jp/keyboard.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/keyboards/hhkb/jp/keyboard.json b/keyboards/hhkb/jp/keyboard.json index 69bb681edf..b776b416ec 100644 --- a/keyboards/hhkb/jp/keyboard.json +++ b/keyboards/hhkb/jp/keyboard.json @@ -49,20 +49,20 @@ {"matrix": [15, 3], "x": 11.5, "y": 1}, {"matrix": [13, 3], "x": 12.5, "y": 1}, - {"matrix": [6, 6], "x": 0, "y": 2, "w": 1.75}, - {"matrix": [2, 6], "x": 1.75, "y": 2}, - {"matrix": [1, 6], "x": 2.75, "y": 2}, - {"matrix": [5, 6], "x": 3.75, "y": 2}, - {"matrix": [7, 6], "x": 4.75, "y": 2}, - {"matrix": [10, 6], "x": 5.75, "y": 2}, - {"matrix": [9, 6], "x": 6.75, "y": 2}, - {"matrix": [8, 6], "x": 7.75, "y": 2}, - {"matrix": [11, 6], "x": 8.75, "y": 2}, - {"matrix": [14, 6], "x": 9.75, "y": 2}, - {"matrix": [15, 6], "x": 10.75, "y": 2}, - {"matrix": [13, 6], "x": 11.75, "y": 2}, - {"matrix": [12, 6], "x": 12.75, "y": 2}, - {"matrix": [0, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2}, + {"matrix": [0, 6], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [6, 6], "x": 1.75, "y": 2}, + {"matrix": [2, 6], "x": 2.75, "y": 2}, + {"matrix": [1, 6], "x": 3.75, "y": 2}, + {"matrix": [5, 6], "x": 4.75, "y": 2}, + {"matrix": [7, 6], "x": 5.75, "y": 2}, + {"matrix": [10, 6], "x": 6.75, "y": 2}, + {"matrix": [9, 6], "x": 7.75, "y": 2}, + {"matrix": [8, 6], "x": 8.75, "y": 2}, + {"matrix": [11, 6], "x": 9.75, "y": 2}, + {"matrix": [14, 6], "x": 10.75, "y": 2}, + {"matrix": [15, 6], "x": 11.75, "y": 2}, + {"matrix": [13, 6], "x": 12.75, "y": 2}, + {"matrix": [12, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2}, {"matrix": [0, 5], "x": 0, "y": 3, "w": 2}, {"matrix": [6, 5], "x": 2, "y": 3}, From f4123acc725346caadeb49eb873a3ca93c263a25 Mon Sep 17 00:00:00 2001 From: aedanmills <40202903+aedanmills@users.noreply.github.com> Date: Sun, 26 Oct 2025 21:19:06 -0400 Subject: [PATCH 84/99] [Keyboard] Add WhirlwindFX ElementV2 (#25356) Co-authored-by: Joel Challis Co-authored-by: Duncan Sutherland --- keyboards/whirlwind_fx_element/config.h | 7 + keyboards/whirlwind_fx_element/halconf.h | 9 + keyboards/whirlwind_fx_element/keyboard.json | 302 ++++++++++++++++++ .../keymaps/default/keymap.c | 42 +++ keyboards/whirlwind_fx_element/mcuconf.h | 10 + keyboards/whirlwind_fx_element/readme.md | 31 ++ .../whirlwind_fx_element.c | 119 +++++++ 7 files changed, 520 insertions(+) create mode 100644 keyboards/whirlwind_fx_element/config.h create mode 100644 keyboards/whirlwind_fx_element/halconf.h create mode 100644 keyboards/whirlwind_fx_element/keyboard.json create mode 100644 keyboards/whirlwind_fx_element/keymaps/default/keymap.c create mode 100644 keyboards/whirlwind_fx_element/mcuconf.h create mode 100644 keyboards/whirlwind_fx_element/readme.md create mode 100644 keyboards/whirlwind_fx_element/whirlwind_fx_element.c diff --git a/keyboards/whirlwind_fx_element/config.h b/keyboards/whirlwind_fx_element/config.h new file mode 100644 index 0000000000..606163cf10 --- /dev/null +++ b/keyboards/whirlwind_fx_element/config.h @@ -0,0 +1,7 @@ +// Copyright 2023 WhirlwindFX +// Copyright 2023 aedanmills +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define IS31FL3741_I2C_ADDRESS_1 IS31FL3741_I2C_ADDRESS_GND diff --git a/keyboards/whirlwind_fx_element/halconf.h b/keyboards/whirlwind_fx_element/halconf.h new file mode 100644 index 0000000000..75e92dea90 --- /dev/null +++ b/keyboards/whirlwind_fx_element/halconf.h @@ -0,0 +1,9 @@ +// Copyright 2023 WhirlwindFX +// Copyright 2023 aedanmills +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define HAL_USE_I2C TRUE + +#include_next diff --git a/keyboards/whirlwind_fx_element/keyboard.json b/keyboards/whirlwind_fx_element/keyboard.json new file mode 100644 index 0000000000..f01c5859da --- /dev/null +++ b/keyboards/whirlwind_fx_element/keyboard.json @@ -0,0 +1,302 @@ +{ + "manufacturer": "WhirlwindFX", + "keyboard_name": "Element", + "maintainer": "aedanmills", + "bootloader": "stm32-dfu", + "diode_direction": "ROW2COL", + "features": { + "bootmagic": true, + "extrakey": true, + "nkro": true, + "rgb_matrix": true + }, + "matrix_pins": { + "rows": [ "B0", "B1", "B2", "B3", "B12", "B13", "B14", "B15" ], + "cols": [ "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A13", "A14" ] + }, + "processor": "STM32F303", + "url": "https://www.whirlwindfx.com/products/element", + "usb": { + "vid": "0x0483", + "pid": "0xA33E", + "device_version": "1.0.6" + }, + "indicators": { + "caps_lock": "B9", + "num_lock": "B8", + "scroll_lock": "B10", + "on_state": 0 + }, + "community_layouts": ["fullsize_ansi"], + "layouts": { + "LAYOUT_fullsize_ansi": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 2, "y": 0}, + {"matrix": [0, 2], "x": 3, "y": 0}, + {"matrix": [0, 3], "x": 4, "y": 0}, + {"matrix": [0, 4], "x": 5, "y": 0}, + {"matrix": [0, 5], "x": 6.5, "y": 0}, + {"matrix": [0, 6], "x": 7.5, "y": 0}, + {"matrix": [0, 7], "x": 8.5, "y": 0}, + {"matrix": [0, 8], "x": 9.5, "y": 0}, + {"matrix": [0, 9], "x": 11, "y": 0}, + {"matrix": [0, 10], "x": 12, "y": 0}, + {"matrix": [0, 11], "x": 13, "y": 0}, + {"matrix": [0, 12], "x": 14, "y": 0}, + {"matrix": [1, 0], "x": 15.25, "y": 0}, + {"matrix": [1, 1], "x": 16.25, "y": 0}, + {"matrix": [1, 2], "x": 17.25, "y": 0}, + {"matrix": [1, 3], "x": 0, "y": 1.25}, + {"matrix": [1, 4], "x": 1, "y": 1.25}, + {"matrix": [1, 5], "x": 2, "y": 1.25}, + {"matrix": [1, 6], "x": 3, "y": 1.25}, + {"matrix": [1, 7], "x": 4, "y": 1.25}, + {"matrix": [1, 8], "x": 5, "y": 1.25}, + {"matrix": [1, 9], "x": 6, "y": 1.25}, + {"matrix": [1, 10], "x": 7, "y": 1.25}, + {"matrix": [1, 11], "x": 8, "y": 1.25}, + {"matrix": [1, 12], "x": 9, "y": 1.25}, + {"matrix": [2, 0], "x": 10, "y": 1.25}, + {"matrix": [2, 1], "x": 11, "y": 1.25}, + {"matrix": [2, 2], "x": 12, "y": 1.25}, + {"matrix": [2, 3], "x": 13, "y": 1.25, "w": 2}, + {"matrix": [2, 4], "x": 15.25, "y": 1.25}, + {"matrix": [2, 5], "x": 16.25, "y": 1.25}, + {"matrix": [2, 6], "x": 17.25, "y": 1.25}, + {"matrix": [2, 7], "x": 18.5, "y": 1.25}, + {"matrix": [2, 8], "x": 19.5, "y": 1.25}, + {"matrix": [2, 9], "x": 20.5, "y": 1.25}, + {"matrix": [2, 10], "x": 21.5, "y": 1.25}, + {"matrix": [2, 11], "x": 0, "y": 2.25, "w": 1.5}, + {"matrix": [2, 12], "x": 1.5, "y": 2.25}, + {"matrix": [3, 0], "x": 2.5, "y": 2.25}, + {"matrix": [3, 1], "x": 3.5, "y": 2.25}, + {"matrix": [3, 2], "x": 4.5, "y": 2.25}, + {"matrix": [3, 3], "x": 5.5, "y": 2.25}, + {"matrix": [3, 4], "x": 6.5, "y": 2.25}, + {"matrix": [3, 5], "x": 7.5, "y": 2.25}, + {"matrix": [3, 6], "x": 8.5, "y": 2.25}, + {"matrix": [3, 7], "x": 9.5, "y": 2.25}, + {"matrix": [3, 8], "x": 10.5, "y": 2.25}, + {"matrix": [3, 9], "x": 11.5, "y": 2.25}, + {"matrix": [3, 10], "x": 12.5, "y": 2.25}, + {"matrix": [3, 11], "x": 13.5, "y": 2.25, "w": 1.5}, + {"matrix": [3, 12], "x": 15.25, "y": 2.25}, + {"matrix": [4, 0], "x": 16.25, "y": 2.25}, + {"matrix": [4, 1], "x": 17.25, "y": 2.25}, + {"matrix": [4, 2], "x": 18.5, "y": 2.25}, + {"matrix": [4, 3], "x": 19.5, "y": 2.25}, + {"matrix": [4, 4], "x": 20.5, "y": 2.25}, + {"matrix": [5, 8], "x": 21.5, "y": 2.25, "h": 2}, + {"matrix": [4, 5], "x": 0, "y": 3.25, "w": 1.75}, + {"matrix": [4, 6], "x": 1.75, "y": 3.25}, + {"matrix": [4, 7], "x": 2.75, "y": 3.25}, + {"matrix": [4, 8], "x": 3.75, "y": 3.25}, + {"matrix": [4, 9], "x": 4.75, "y": 3.25}, + {"matrix": [4, 10], "x": 5.75, "y": 3.25}, + {"matrix": [4, 11], "x": 6.75, "y": 3.25}, + {"matrix": [4, 12], "x": 7.75, "y": 3.25}, + {"matrix": [5, 0], "x": 8.75, "y": 3.25}, + {"matrix": [5, 1], "x": 9.75, "y": 3.25}, + {"matrix": [5, 2], "x": 10.75, "y": 3.25}, + {"matrix": [5, 3], "x": 11.75, "y": 3.25}, + {"matrix": [5, 4], "x": 12.75, "y": 3.25, "w": 2.25}, + {"matrix": [5, 5], "x": 18.5, "y": 3.25}, + {"matrix": [5, 6], "x": 19.5, "y": 3.25}, + {"matrix": [5, 7], "x": 20.5, "y": 3.25}, + {"matrix": [5, 9], "x": 0, "y": 4.25, "w": 2.25}, + {"matrix": [5, 10], "x": 2.25, "y": 4.25}, + {"matrix": [5, 11], "x": 3.25, "y": 4.25}, + {"matrix": [5, 12], "x": 4.25, "y": 4.25}, + {"matrix": [6, 0], "x": 5.25, "y": 4.25}, + {"matrix": [6, 1], "x": 6.25, "y": 4.25}, + {"matrix": [6, 2], "x": 7.25, "y": 4.25}, + {"matrix": [6, 3], "x": 8.25, "y": 4.25}, + {"matrix": [6, 4], "x": 9.25, "y": 4.25}, + {"matrix": [6, 5], "x": 10.25, "y": 4.25}, + {"matrix": [6, 6], "x": 11.25, "y": 4.25}, + {"matrix": [6, 7], "x": 12.25, "y": 4.25, "w": 2.75}, + {"matrix": [6, 8], "x": 16.25, "y": 4.25}, + {"matrix": [6, 9], "x": 18.5, "y": 4.25}, + {"matrix": [6, 10], "x": 19.5, "y": 4.25}, + {"matrix": [6, 11], "x": 20.5, "y": 4.25}, + {"matrix": [6, 12], "x": 21.5, "y": 4.25, "h": 2}, + {"matrix": [7, 0], "x": 0, "y": 5.25, "w": 1.25}, + {"matrix": [7, 1], "x": 1.25, "y": 5.25, "w": 1.25}, + {"matrix": [7, 2], "x": 2.5, "y": 5.25, "w": 1.25}, + {"matrix": [7, 3], "x": 3.75, "y": 5.25, "w": 6.25}, + {"matrix": [7, 4], "x": 10, "y": 5.25, "w": 1.25}, + {"matrix": [7, 5], "x": 11.25, "y": 5.25, "w": 1.25}, + {"matrix": [7, 6], "x": 12.5, "y": 5.25, "w": 1.25}, + {"matrix": [7, 7], "x": 13.75, "y": 5.25, "w": 1.25}, + {"matrix": [7, 8], "x": 15.25, "y": 5.25}, + {"matrix": [7, 9], "x": 16.25, "y": 5.25}, + {"matrix": [7, 10], "x": 17.25, "y": 5.25}, + {"matrix": [7, 11], "x": 18.5, "y": 5.25, "w": 2}, + {"matrix": [7, 12], "x": 20.5, "y": 5.25} + ] + } + }, + "rgb_matrix": { + "driver": "is31fl3741", + "max_brightness": 200, + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [0, 1], "x": 21, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 31, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 42, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 52, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 68, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 78, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 89, "y": 0, "flags": 4}, + {"matrix": [0, 8], "x": 99, "y": 0, "flags": 4}, + {"matrix": [0, 9], "x": 115, "y": 0, "flags": 4}, + {"matrix": [0, 10], "x": 125, "y": 0, "flags": 4}, + {"matrix": [0, 11], "x": 136, "y": 0, "flags": 4}, + {"matrix": [0, 12], "x": 146, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 159, "y": 0, "flags": 4}, + {"matrix": [1, 1], "x": 169, "y": 0, "flags": 4}, + {"matrix": [1, 2], "x": 180, "y": 0, "flags": 4}, + + {"matrix": [1, 3], "x": 0, "y": 15, "flags": 4}, + {"matrix": [1, 4], "x": 10, "y": 15, "flags": 4}, + {"matrix": [1, 5], "x": 21, "y": 15, "flags": 4}, + {"matrix": [1, 6], "x": 31, "y": 15, "flags": 4}, + {"matrix": [1, 7], "x": 42, "y": 15, "flags": 4}, + {"matrix": [1, 8], "x": 52, "y": 15, "flags": 4}, + {"matrix": [1, 9], "x": 63, "y": 15, "flags": 4}, + {"matrix": [1, 10], "x": 73, "y": 15, "flags": 4}, + {"matrix": [1, 11], "x": 83, "y": 15, "flags": 4}, + {"matrix": [1, 12], "x": 94, "y": 15, "flags": 4}, + {"matrix": [2, 0], "x": 104, "y": 15, "flags": 4}, + {"matrix": [2, 1], "x": 115, "y": 15, "flags": 4}, + {"matrix": [2, 2], "x": 125, "y": 15, "flags": 4}, + {"matrix": [2, 3], "x": 141, "y": 15, "flags": 4}, + {"matrix": [2, 4], "x": 159, "y": 15, "flags": 4}, + {"matrix": [2, 5], "x": 169, "y": 15, "flags": 4}, + {"matrix": [2, 6], "x": 180, "y": 15, "flags": 4}, + {"matrix": [2, 7], "x": 193, "y": 15, "flags": 4}, + {"matrix": [2, 8], "x": 203, "y": 15, "flags": 4}, + {"matrix": [2, 9], "x": 214, "y": 15, "flags": 4}, + {"matrix": [2, 10], "x": 224, "y": 15, "flags": 4}, + + {"matrix": [2, 11], "x": 3, "y": 27, "flags": 4}, + {"matrix": [2, 12], "x": 16, "y": 27, "flags": 4}, + {"matrix": [3, 0], "x": 26, "y": 27, "flags": 4}, + {"matrix": [3, 1], "x": 36, "y": 27, "flags": 4}, + {"matrix": [3, 2], "x": 47, "y": 27, "flags": 4}, + {"matrix": [3, 3], "x": 57, "y": 27, "flags": 4}, + {"matrix": [3, 4], "x": 68, "y": 27, "flags": 4}, + {"matrix": [3, 5], "x": 78, "y": 27, "flags": 4}, + {"matrix": [3, 6], "x": 89, "y": 27, "flags": 4}, + {"matrix": [3, 7], "x": 99, "y": 27, "flags": 4}, + {"matrix": [3, 8], "x": 109, "y": 27, "flags": 4}, + {"matrix": [3, 9], "x": 120, "y": 27, "flags": 4}, + {"matrix": [3, 10], "x": 130, "y": 27, "flags": 4}, + {"matrix": [3, 11], "x": 143, "y": 27, "flags": 4}, + {"matrix": [3, 12], "x": 159, "y": 27, "flags": 4}, + {"matrix": [4, 0], "x": 169, "y": 27, "flags": 4}, + {"matrix": [4, 1], "x": 180, "y": 27, "flags": 4}, + {"matrix": [4, 2], "x": 193, "y": 27, "flags": 4}, + {"matrix": [4, 3], "x": 203, "y": 27, "flags": 4}, + {"matrix": [4, 4], "x": 214, "y": 27, "flags": 4}, + + {"matrix": [4, 5], "x": 4, "y": 40, "flags": 4}, + {"matrix": [4, 6], "x": 18, "y": 40, "flags": 4}, + {"matrix": [4, 7], "x": 29, "y": 40, "flags": 4}, + {"matrix": [4, 8], "x": 39, "y": 40, "flags": 4}, + {"matrix": [4, 9], "x": 50, "y": 40, "flags": 4}, + {"matrix": [4, 10], "x": 60, "y": 40, "flags": 4}, + {"matrix": [4, 11], "x": 70, "y": 40, "flags": 4}, + {"matrix": [4, 12], "x": 81, "y": 40, "flags": 4}, + {"matrix": [5, 0], "x": 91, "y": 40, "flags": 4}, + {"matrix": [5, 1], "x": 102, "y": 40, "flags": 4}, + {"matrix": [5, 2], "x": 112, "y": 40, "flags": 4}, + {"matrix": [5, 3], "x": 123, "y": 40, "flags": 4}, + {"matrix": [5, 4], "x": 139, "y": 40, "flags": 4}, + {"matrix": [5, 5], "x": 193, "y": 40, "flags": 4}, + {"matrix": [5, 6], "x": 203, "y": 40, "flags": 4}, + {"matrix": [5, 7], "x": 214, "y": 40, "flags": 4}, + {"matrix": [5, 8], "x": 224, "y": 34, "flags": 4}, + + {"matrix": [5, 9], "x": 7, "y": 52, "flags": 4}, + {"matrix": [5, 10], "x": 23, "y": 52, "flags": 4}, + {"matrix": [5, 11], "x": 34, "y": 52, "flags": 4}, + {"matrix": [5, 12], "x": 44, "y": 52, "flags": 4}, + {"matrix": [6, 0], "x": 55, "y": 52, "flags": 4}, + {"matrix": [6, 1], "x": 65, "y": 52, "flags": 4}, + {"matrix": [6, 2], "x": 76, "y": 52, "flags": 4}, + {"matrix": [6, 3], "x": 86, "y": 52, "flags": 4}, + {"matrix": [6, 4], "x": 96, "y": 52, "flags": 4}, + {"matrix": [6, 5], "x": 107, "y": 52, "flags": 4}, + {"matrix": [6, 6], "x": 117, "y": 52, "flags": 4}, + {"matrix": [6, 7], "x": 137, "y": 52, "flags": 4}, + {"matrix": [6, 8], "x": 169, "y": 52, "flags": 4}, + {"matrix": [6, 9], "x": 193, "y": 52, "flags": 4}, + {"matrix": [6, 10], "x": 203, "y": 52, "flags": 4}, + {"matrix": [6, 11], "x": 214, "y": 52, "flags": 4}, + {"matrix": [6, 12], "x": 224, "y": 58, "flags": 4}, + + {"matrix": [7, 0], "x": 1, "y": 64, "flags": 4}, + {"matrix": [7, 1], "x": 14, "y": 64, "flags": 4}, + {"matrix": [7, 2], "x": 27, "y": 64, "flags": 4}, + {"matrix": [7, 3], "x": 66, "y": 64, "flags": 4}, + {"matrix": [7, 4], "x": 105, "y": 64, "flags": 4}, + {"matrix": [7, 5], "x": 118, "y": 64, "flags": 4}, + {"matrix": [7, 6], "x": 131, "y": 64, "flags": 4}, + {"matrix": [7, 7], "x": 145, "y": 64, "flags": 4}, + {"matrix": [7, 8], "x": 159, "y": 64, "flags": 4}, + {"matrix": [7, 9], "x": 169, "y": 64, "flags": 4}, + {"matrix": [7, 10], "x": 180, "y": 64, "flags": 4}, + {"matrix": [7, 11], "x": 198, "y": 64, "flags": 4}, + {"matrix": [7, 12], "x": 214, "y": 64, "flags": 4} + ], + "animations": { + "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_flow": true, + "pixel_rain": true, + "typing_heatmap": true, + "digital_rain": true, + "solid_reactive_simple": true, + "solid_reactive": true, + "solid_reactive_wide": true, + "solid_reactive_cross": true, + "solid_reactive_nexus": true, + "splash": true, + "multisplash": true, + "solid_splash": true + }, + "default": { + "val": 128 + }, + "led_process_limit": 4, + "led_flush_limit": 26, + "sleep": true + } +} diff --git a/keyboards/whirlwind_fx_element/keymaps/default/keymap.c b/keyboards/whirlwind_fx_element/keymaps/default/keymap.c new file mode 100644 index 0000000000..36690aca28 --- /dev/null +++ b/keyboards/whirlwind_fx_element/keymaps/default/keymap.c @@ -0,0 +1,42 @@ +// Copyright 2023 WhirlwindFX +// Copyright 2023 aedanmills +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ + * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│ + * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐ + * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│ │Num│ / │ * │ - │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤ + * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│ │ 7 │ 8 │ 9 │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ + │ + * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ │ 4 │ 5 │ 6 │ │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ ├───┼───┼───┼───┤ + * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │ │ 1 │ 2 │ 3 │ │ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤Ent│ + * │Ctrl│GUI │Alt │ │ Alt│ FN │Menu│Ctrl│ │ ← │ ↓ │ → │ │ 0 │ . │ │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘ + */ + [0] = LAYOUT_fullsize_ansi( + 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_SCRL, KC_PAUS, + + 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_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, + 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, + 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_P4, KC_P5, KC_P6, + 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_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT + ), + [1] = LAYOUT_fullsize_ansi( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BRID, KC_BRIU, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_CALC, + + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RM_VALD, RM_VALU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RM_SPDU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RM_PREV, RM_SPDD, RM_NEXT, KC_TRNS, KC_TRNS + ) +}; diff --git a/keyboards/whirlwind_fx_element/mcuconf.h b/keyboards/whirlwind_fx_element/mcuconf.h new file mode 100644 index 0000000000..c89f7275d4 --- /dev/null +++ b/keyboards/whirlwind_fx_element/mcuconf.h @@ -0,0 +1,10 @@ +// Copyright 2023 WhirlwindFX +// Copyright 2023 aedanmills +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +#undef STM32_I2C_USE_I2C1 +#define STM32_I2C_USE_I2C1 TRUE diff --git a/keyboards/whirlwind_fx_element/readme.md b/keyboards/whirlwind_fx_element/readme.md new file mode 100644 index 0000000000..362b984772 --- /dev/null +++ b/keyboards/whirlwind_fx_element/readme.md @@ -0,0 +1,31 @@ +# WhirlwindFX ElementV2 + +![WhirlwindFX ElementV2](https://i.imgur.com/Etso6Ni.png) + +A full-size (100%) mechanical keyboard with RGB lighting. + +* Keyboard Maintainer: [Aedan Mills](https://github.com/aedanmills) +* Hardware Supported: WhirlwindFX ElementV2 +* Hardware Availability: [WhirlwindFX](https://www.whirlwindfx.com/products/element) + +Make example for this keyboard (after setting up your build environment): + + make whirlwind_fx_element:default + +Flashing example for this keyboard: + + make whirlwind_fx_element:default:flash + +## Bootloader + +Enter the bootloader by pressing and holding the reset button on the back of the PCB while plugging in the keyboard. You will have to remove the key caps to access the screws to disassemble the keyboard and access the button. + +Don't forget to backup the original firmware before proceeding by using the following dfu-util command with the keyboard in bootloader mode: + + dfu-util --list # Check that the keyboard is listed in DFU mode + dfu-util -a 0 -U backup.bin -s 0x08000000 # Save backup as backup.bin + +After flashing with QMK, BootMagic can be used to enter the bootloader by holding ESC while plugging in the keyboard. + + +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). diff --git a/keyboards/whirlwind_fx_element/whirlwind_fx_element.c b/keyboards/whirlwind_fx_element/whirlwind_fx_element.c new file mode 100644 index 0000000000..6f17dbda2f --- /dev/null +++ b/keyboards/whirlwind_fx_element/whirlwind_fx_element.c @@ -0,0 +1,119 @@ +// Copyright 2023 WhirlwindFX +// Copyright 2023 aedanmills +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +#ifdef RGB_MATRIX_ENABLE +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { + {0, SW1_CS2, SW1_CS3, SW1_CS1}, + {0, SW1_CS5, SW1_CS6, SW1_CS4}, + {0, SW1_CS8, SW1_CS9, SW1_CS7}, + {0, SW1_CS11, SW1_CS12, SW1_CS10}, + {0, SW1_CS14, SW1_CS15, SW1_CS13}, + {0, SW1_CS17, SW1_CS18, SW1_CS16}, + {0, SW1_CS20, SW1_CS21, SW1_CS19}, + {0, SW1_CS23, SW1_CS24, SW1_CS22}, + {0, SW1_CS26, SW1_CS27, SW1_CS25}, + {0, SW1_CS29, SW1_CS30, SW1_CS28}, + {0, SW1_CS32, SW1_CS33, SW1_CS31}, + {0, SW1_CS35, SW1_CS36, SW1_CS34}, + {0, SW1_CS38, SW1_CS39, SW1_CS37}, + {0, SW2_CS2, SW2_CS3, SW2_CS1}, + {0, SW2_CS5, SW2_CS6, SW2_CS4}, + {0, SW2_CS8, SW2_CS9, SW2_CS7}, + {0, SW2_CS11, SW2_CS12, SW2_CS10}, + {0, SW2_CS14, SW2_CS15, SW2_CS13}, + {0, SW2_CS17, SW2_CS18, SW2_CS16}, + {0, SW2_CS20, SW2_CS21, SW2_CS19}, + {0, SW2_CS23, SW2_CS24, SW2_CS22}, + {0, SW2_CS26, SW2_CS27, SW2_CS25}, + {0, SW2_CS29, SW2_CS30, SW2_CS28}, + {0, SW2_CS32, SW2_CS33, SW2_CS31}, + {0, SW2_CS35, SW2_CS36, SW2_CS34}, + {0, SW2_CS38, SW2_CS39, SW2_CS37}, + {0, SW3_CS2, SW3_CS3, SW3_CS1}, + {0, SW3_CS5, SW3_CS6, SW3_CS4}, + {0, SW3_CS8, SW3_CS9, SW3_CS7}, + {0, SW3_CS11, SW3_CS12, SW3_CS10}, + {0, SW3_CS14, SW3_CS15, SW3_CS13}, + {0, SW3_CS17, SW3_CS18, SW3_CS16}, + {0, SW3_CS20, SW3_CS21, SW3_CS19}, + {0, SW3_CS23, SW3_CS24, SW3_CS22}, + {0, SW3_CS26, SW3_CS27, SW3_CS25}, + {0, SW3_CS29, SW3_CS30, SW3_CS28}, + {0, SW3_CS32, SW3_CS33, SW3_CS31}, + {0, SW3_CS35, SW3_CS36, SW3_CS34}, + {0, SW3_CS38, SW3_CS39, SW3_CS37}, + {0, SW4_CS2, SW4_CS3, SW4_CS1}, + {0, SW4_CS5, SW4_CS6, SW4_CS4}, + {0, SW4_CS8, SW4_CS9, SW4_CS7}, + {0, SW4_CS11, SW4_CS12, SW4_CS10}, + {0, SW4_CS14, SW4_CS15, SW4_CS13}, + {0, SW4_CS17, SW4_CS18, SW4_CS16}, + {0, SW4_CS20, SW4_CS21, SW4_CS19}, + {0, SW4_CS23, SW4_CS24, SW4_CS22}, + {0, SW4_CS26, SW4_CS27, SW4_CS25}, + {0, SW4_CS29, SW4_CS30, SW4_CS28}, + {0, SW4_CS32, SW4_CS33, SW4_CS31}, + {0, SW4_CS35, SW4_CS36, SW4_CS34}, + {0, SW4_CS38, SW4_CS39, SW4_CS37}, + {0, SW5_CS2, SW5_CS3, SW5_CS1}, + {0, SW5_CS5, SW5_CS6, SW5_CS4}, + {0, SW5_CS8, SW5_CS9, SW5_CS7}, + {0, SW5_CS11, SW5_CS12, SW5_CS10}, + {0, SW5_CS14, SW5_CS15, SW5_CS13}, + {0, SW5_CS17, SW5_CS18, SW5_CS16}, + {0, SW5_CS20, SW5_CS21, SW5_CS19}, + {0, SW5_CS23, SW5_CS24, SW5_CS22}, + {0, SW5_CS26, SW5_CS27, SW5_CS25}, + {0, SW5_CS29, SW5_CS30, SW5_CS28}, + {0, SW5_CS32, SW5_CS33, SW5_CS31}, + {0, SW5_CS35, SW5_CS36, SW5_CS34}, + {0, SW5_CS38, SW5_CS39, SW5_CS37}, + {0, SW6_CS2, SW6_CS3, SW6_CS1}, + {0, SW6_CS5, SW6_CS6, SW6_CS4}, + {0, SW6_CS8, SW6_CS9, SW6_CS7}, + {0, SW6_CS11, SW6_CS12, SW6_CS10}, + {0, SW6_CS14, SW6_CS15, SW6_CS13}, + {0, SW6_CS17, SW6_CS18, SW6_CS16}, + {0, SW6_CS20, SW6_CS21, SW6_CS19}, + {0, SW6_CS23, SW6_CS24, SW6_CS22}, + {0, SW6_CS26, SW6_CS27, SW6_CS25}, + {0, SW6_CS29, SW6_CS30, SW6_CS28}, + {0, SW6_CS32, SW6_CS33, SW6_CS31}, + {0, SW6_CS35, SW6_CS36, SW6_CS34}, + {0, SW6_CS38, SW6_CS39, SW6_CS37}, + {0, SW7_CS2, SW7_CS3, SW7_CS1}, + {0, SW7_CS5, SW7_CS6, SW7_CS4}, + {0, SW7_CS8, SW7_CS9, SW7_CS7}, + {0, SW7_CS11, SW7_CS12, SW7_CS10}, + {0, SW7_CS14, SW7_CS15, SW7_CS13}, + {0, SW7_CS17, SW7_CS18, SW7_CS16}, + {0, SW7_CS20, SW7_CS21, SW7_CS19}, + {0, SW7_CS23, SW7_CS24, SW7_CS22}, + {0, SW7_CS26, SW7_CS27, SW7_CS25}, + {0, SW7_CS29, SW7_CS30, SW7_CS28}, + {0, SW7_CS32, SW7_CS33, SW7_CS31}, + {0, SW7_CS35, SW7_CS36, SW7_CS34}, + {0, SW7_CS38, SW7_CS39, SW7_CS37}, + {0, SW8_CS2, SW8_CS3, SW8_CS1}, + {0, SW8_CS5, SW8_CS6, SW8_CS4}, + {0, SW8_CS8, SW8_CS9, SW8_CS7}, + {0, SW8_CS11, SW8_CS12, SW8_CS10}, + {0, SW8_CS14, SW8_CS15, SW8_CS13}, + {0, SW8_CS17, SW8_CS18, SW8_CS16}, + {0, SW8_CS20, SW8_CS21, SW8_CS19}, + {0, SW8_CS23, SW8_CS24, SW8_CS22}, + {0, SW8_CS26, SW8_CS27, SW8_CS25}, + {0, SW8_CS29, SW8_CS30, SW8_CS28}, + {0, SW8_CS32, SW8_CS33, SW8_CS31}, + {0, SW8_CS35, SW8_CS36, SW8_CS34}, + {0, SW8_CS38, SW8_CS39, SW8_CS37} +}; +#endif +void keyboard_pre_init_kb(void) { + gpio_set_pin_output(B11); // Required for indicators to work correctly + + keyboard_pre_init_user(); +} From 8e5550dbb219591eee97f533568ba9a6271f5d84 Mon Sep 17 00:00:00 2001 From: SneakboxKB <67670271+SneakboxKB@users.noreply.github.com> Date: Thu, 30 Oct 2025 15:05:52 -0500 Subject: [PATCH 85/99] Add M4m5 support (#25499) --- keyboards/sneakbox/m4m5/keyboard.json | 203 ++++++++++++++++++ .../sneakbox/m4m5/keymaps/alice/keymap.c | 32 +++ .../sneakbox/m4m5/keymaps/default/keymap.c | 32 +++ keyboards/sneakbox/m4m5/readme.md | 27 +++ 4 files changed, 294 insertions(+) create mode 100644 keyboards/sneakbox/m4m5/keyboard.json create mode 100644 keyboards/sneakbox/m4m5/keymaps/alice/keymap.c create mode 100644 keyboards/sneakbox/m4m5/keymaps/default/keymap.c create mode 100644 keyboards/sneakbox/m4m5/readme.md diff --git a/keyboards/sneakbox/m4m5/keyboard.json b/keyboards/sneakbox/m4m5/keyboard.json new file mode 100644 index 0000000000..ba56a6c85d --- /dev/null +++ b/keyboards/sneakbox/m4m5/keyboard.json @@ -0,0 +1,203 @@ +{ + "manufacturer": "Sneakbox", + "keyboard_name": "M4 & M5", + "maintainer": "mujimanic", + "bootloader": "atmel-dfu", + "bootmagic": { + "matrix": [2, 0] + }, + "build": { + "lto": true + }, + "diode_direction": "COL2ROW", + "encoder": { + "rotary": [ + {"pin_a": "D3", "pin_b": "D2"} + ] + }, + "features": { + "bootmagic": true, + "encoder": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true + }, + "indicators": { + "caps_lock": "D6", + "num_lock": "D4", + "scroll_lock": "D7" + }, + "matrix_pins": { + "cols": ["F0", "D0", "C7", "C6", "B6", "B5", "B4", "D1"], + "rows": ["F1", "E6", "F4", "B1", "F5", "B2", "F6", "B3", "F7", "B7"] + }, + "processor": "atmega32u4", + "rgblight": { + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "rgb_test": true, + "snake": true, + "static_gradient": true, + "twinkle": true + }, + "led_count": 16 + }, + "url": "https://sneakbox.design", + "usb": { + "device_version": "0.0.1", + "pid": "0x0005", + "vid": "0x5342" + }, + "ws2812": { + "pin": "D5" + }, + "layouts": { + "LAYOUT_alice": { + "layout": [ + {"matrix": [2, 0], "x": 0, "y": 0}, + {"matrix": [0, 0], "x": 1.25, "y": 0}, + {"matrix": [0, 1], "x": 2.25, "y": 0}, + {"matrix": [0, 2], "x": 3.25, "y": 0}, + {"matrix": [0, 3], "x": 4.25, "y": 0}, + {"matrix": [0, 4], "x": 5.25, "y": 0}, + {"matrix": [0, 5], "x": 6.25, "y": 0}, + {"matrix": [0, 6], "x": 7.25, "y": 0}, + {"matrix": [1, 0], "x": 10.25, "y": 0}, + {"matrix": [1, 1], "x": 11.25, "y": 0}, + {"matrix": [1, 2], "x": 12.25, "y": 0}, + {"matrix": [1, 3], "x": 13.25, "y": 0}, + {"matrix": [1, 4], "x": 14.25, "y": 0}, + {"matrix": [1, 5], "x": 15.25, "y": 0}, + {"matrix": [1, 6], "x": 16.25, "y": 0, "w": 2}, + {"matrix": [4, 0], "x": 0, "y": 1}, + {"matrix": [2, 1], "x": 1.25, "y": 1, "w": 1.5}, + {"matrix": [2, 2], "x": 2.75, "y": 1}, + {"matrix": [2, 3], "x": 3.75, "y": 1}, + {"matrix": [2, 4], "x": 4.75, "y": 1}, + {"matrix": [2, 5], "x": 5.75, "y": 1}, + {"matrix": [2, 6], "x": 6.75, "y": 1}, + {"matrix": [3, 0], "x": 9.75, "y": 1}, + {"matrix": [3, 1], "x": 10.75, "y": 1}, + {"matrix": [3, 2], "x": 11.75, "y": 1}, + {"matrix": [3, 3], "x": 12.75, "y": 1}, + {"matrix": [3, 4], "x": 13.75, "y": 1}, + {"matrix": [3, 5], "x": 14.75, "y": 1}, + {"matrix": [3, 6], "x": 15.75, "y": 1}, + {"matrix": [3, 7], "x": 16.75, "y": 1, "w": 1.5}, + {"matrix": [6, 0], "x": 0, "y": 2}, + {"matrix": [4, 1], "x": 1.25, "y": 2, "w": 1.75}, + {"matrix": [4, 2], "x": 3, "y": 2}, + {"matrix": [4, 3], "x": 4, "y": 2}, + {"matrix": [4, 4], "x": 5, "y": 2}, + {"matrix": [4, 5], "x": 6, "y": 2}, + {"matrix": [4, 6], "x": 7, "y": 2}, + {"matrix": [5, 0], "x": 10, "y": 2}, + {"matrix": [5, 1], "x": 11, "y": 2}, + {"matrix": [5, 2], "x": 12, "y": 2}, + {"matrix": [5, 3], "x": 13, "y": 2}, + {"matrix": [5, 4], "x": 14, "y": 2}, + {"matrix": [5, 5], "x": 15, "y": 2}, + {"matrix": [5, 6], "x": 16, "y": 2, "w": 2.25}, + {"matrix": [6, 1], "x": 1.25, "y": 3, "w": 2.25}, + {"matrix": [6, 2], "x": 3.5, "y": 3}, + {"matrix": [6, 3], "x": 4.5, "y": 3}, + {"matrix": [6, 4], "x": 5.5, "y": 3}, + {"matrix": [6, 5], "x": 6.5, "y": 3}, + {"matrix": [6, 6], "x": 7.5, "y": 3}, + {"matrix": [7, 0], "x": 9.5, "y": 3}, + {"matrix": [7, 1], "x": 10.5, "y": 3}, + {"matrix": [7, 2], "x": 11.5, "y": 3}, + {"matrix": [7, 3], "x": 12.5, "y": 3}, + {"matrix": [7, 4], "x": 13.5, "y": 3}, + {"matrix": [7, 5], "x": 14.5, "y": 3}, + {"matrix": [7, 6], "x": 15.5, "y": 3, "w": 1.75}, + {"matrix": [7, 7], "x": 17.25, "y": 3}, + {"matrix": [8, 1], "x": 1.25, "y": 4, "w": 1.5}, + {"matrix": [8, 3], "x": 4, "y": 4, "w": 1.5}, + {"matrix": [8, 5], "x": 5.5, "y": 4, "w": 2.25}, + {"matrix": [8, 6], "x": 7.75, "y": 4}, + {"matrix": [9, 1], "x": 9.75, "y": 4, "w": 1.25}, + {"matrix": [9, 2], "x": 11, "y": 4, "w": 1.5}, + {"matrix": [9, 3], "x": 12.5, "y": 4, "w": 1.5}, + {"matrix": [9, 7], "x": 16.75, "y": 4, "w": 1.5} + ] + }, + "LAYOUT_alice_split_bs": { + "layout": [ + {"matrix": [2, 0], "x": 0, "y": 0}, + {"matrix": [0, 0], "x": 1.25, "y": 0}, + {"matrix": [0, 1], "x": 2.25, "y": 0}, + {"matrix": [0, 2], "x": 3.25, "y": 0}, + {"matrix": [0, 3], "x": 4.25, "y": 0}, + {"matrix": [0, 4], "x": 5.25, "y": 0}, + {"matrix": [0, 5], "x": 6.25, "y": 0}, + {"matrix": [0, 6], "x": 7.25, "y": 0}, + {"matrix": [1, 0], "x": 10.25, "y": 0}, + {"matrix": [1, 1], "x": 11.25, "y": 0}, + {"matrix": [1, 2], "x": 12.25, "y": 0}, + {"matrix": [1, 3], "x": 13.25, "y": 0}, + {"matrix": [1, 4], "x": 14.25, "y": 0}, + {"matrix": [1, 5], "x": 15.25, "y": 0}, + {"matrix": [1, 6], "x": 16.25, "y": 0}, + {"matrix": [1, 7], "x": 17.25, "y": 0}, + {"matrix": [4, 0], "x": 0, "y": 1}, + {"matrix": [2, 1], "x": 1.25, "y": 1, "w": 1.5}, + {"matrix": [2, 2], "x": 2.75, "y": 1}, + {"matrix": [2, 3], "x": 3.75, "y": 1}, + {"matrix": [2, 4], "x": 4.75, "y": 1}, + {"matrix": [2, 5], "x": 5.75, "y": 1}, + {"matrix": [2, 6], "x": 6.75, "y": 1}, + {"matrix": [3, 0], "x": 9.75, "y": 1}, + {"matrix": [3, 1], "x": 10.75, "y": 1}, + {"matrix": [3, 2], "x": 11.75, "y": 1}, + {"matrix": [3, 3], "x": 12.75, "y": 1}, + {"matrix": [3, 4], "x": 13.75, "y": 1}, + {"matrix": [3, 5], "x": 14.75, "y": 1}, + {"matrix": [3, 6], "x": 15.75, "y": 1}, + {"matrix": [3, 7], "x": 16.75, "y": 1, "w": 1.5}, + {"matrix": [6, 0], "x": 0, "y": 2}, + {"matrix": [4, 1], "x": 1.25, "y": 2, "w": 1.75}, + {"matrix": [4, 2], "x": 3, "y": 2}, + {"matrix": [4, 3], "x": 4, "y": 2}, + {"matrix": [4, 4], "x": 5, "y": 2}, + {"matrix": [4, 5], "x": 6, "y": 2}, + {"matrix": [4, 6], "x": 7, "y": 2}, + {"matrix": [5, 0], "x": 10, "y": 2}, + {"matrix": [5, 1], "x": 11, "y": 2}, + {"matrix": [5, 2], "x": 12, "y": 2}, + {"matrix": [5, 3], "x": 13, "y": 2}, + {"matrix": [5, 4], "x": 14, "y": 2}, + {"matrix": [5, 5], "x": 15, "y": 2}, + {"matrix": [5, 6], "x": 16, "y": 2, "w": 2.25}, + {"matrix": [6, 1], "x": 1.25, "y": 3, "w": 2.25}, + {"matrix": [6, 2], "x": 3.5, "y": 3}, + {"matrix": [6, 3], "x": 4.5, "y": 3}, + {"matrix": [6, 4], "x": 5.5, "y": 3}, + {"matrix": [6, 5], "x": 6.5, "y": 3}, + {"matrix": [6, 6], "x": 7.5, "y": 3}, + {"matrix": [7, 0], "x": 9.5, "y": 3}, + {"matrix": [7, 1], "x": 10.5, "y": 3}, + {"matrix": [7, 2], "x": 11.5, "y": 3}, + {"matrix": [7, 3], "x": 12.5, "y": 3}, + {"matrix": [7, 4], "x": 13.5, "y": 3}, + {"matrix": [7, 5], "x": 14.5, "y": 3}, + {"matrix": [7, 6], "x": 15.5, "y": 3, "w": 1.75}, + {"matrix": [7, 7], "x": 17.25, "y": 3}, + {"matrix": [8, 1], "x": 1.25, "y": 4, "w": 1.5}, + {"matrix": [8, 3], "x": 4, "y": 4, "w": 1.5}, + {"matrix": [8, 5], "x": 5.5, "y": 4, "w": 2.25}, + {"matrix": [8, 6], "x": 7.75, "y": 4}, + {"matrix": [9, 1], "x": 9.75, "y": 4, "w": 1.25}, + {"matrix": [9, 2], "x": 11, "y": 4, "w": 1.5}, + {"matrix": [9, 3], "x": 12.5, "y": 4, "w": 1.5}, + {"matrix": [9, 7], "x": 16.75, "y": 4, "w": 1.5} + ] + } + } +} diff --git a/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c b/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c new file mode 100644 index 0000000000..113ebfd8b6 --- /dev/null +++ b/keyboards/sneakbox/m4m5/keymaps/alice/keymap.c @@ -0,0 +1,32 @@ +// Copyright 2023 Bryan Ong +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _BASE, + _FN +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_alice( + KC_ESC, 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_PGUP, 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_PGDN, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LGUI, + KC_LCTL, KC_LALT, KC_SPC, LT(_FN, KC_SPC), KC_SPC, KC_SPC, KC_RALT, KC_RCTL), + [_FN] = LAYOUT_alice( + KC_TRNS, KC_TRNS, 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_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, UG_PREV, UG_NEXT, UG_TOGG, + QK_BOOT, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, UG_VALD, UG_VALU, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, UG_SATD, UG_SATU, KC_TRNS, UG_HUEU, + 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] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, + [_FN] = { ENCODER_CCW_CW(_______, _______)} +}; +#endif diff --git a/keyboards/sneakbox/m4m5/keymaps/default/keymap.c b/keyboards/sneakbox/m4m5/keymaps/default/keymap.c new file mode 100644 index 0000000000..938f073837 --- /dev/null +++ b/keyboards/sneakbox/m4m5/keymaps/default/keymap.c @@ -0,0 +1,32 @@ +// Copyright 2023 Bryan Ong +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _BASE, + _FN +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_alice_split_bs( + KC_ESC, 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_BSPC, + KC_PGUP, 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_PGDN, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LGUI, + KC_LCTL, KC_LALT, KC_SPC, LT(_FN, KC_SPC), KC_SPC, KC_SPC, KC_RALT, KC_RCTL), + [_FN] = LAYOUT_alice_split_bs( + KC_TRNS, KC_TRNS, 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_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, UG_PREV, UG_NEXT, UG_TOGG, + QK_BOOT, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, UG_VALD, UG_VALU, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, UG_SATD, UG_SATU, KC_TRNS, UG_HUEU, + 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] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, + [_FN] = { ENCODER_CCW_CW(_______, _______)} +}; +#endif diff --git a/keyboards/sneakbox/m4m5/readme.md b/keyboards/sneakbox/m4m5/readme.md new file mode 100644 index 0000000000..4be06dbf98 --- /dev/null +++ b/keyboards/sneakbox/m4m5/readme.md @@ -0,0 +1,27 @@ +# Sneakbox M4 & M5 PCB + +![Sneakbox M4 & M5 PCB](https://i.imgur.com/hVLal1m.jpeg) + +An Alice-compatible PCB with hotswap with pushbutton rotary encoder socket placed at the top left key position. This PCB is the successor to the AliceCloneRGB PCB and features RGB underglow lighting along with revised hardware components such as an additional spacebar key in the right spacebar cluster. M4M5 firmware covers two physical PCBs for the MGA project (M4 PCB and M5 PCB) namely for the MGA V3 keyboard (which uses either PCB). + +* Keyboard Maintainer: [mujimanic](https://github.com/mujimanic) +* Hardware Supported: Any Alice-layout case. +* Hardware Availability: [sneakbox.design](https://sneakbox.com/products/m4-alice-pcbs-for-mga-cases) + +Make example for this keyboard (after setting up your build environment): + + make sneakbox/m4m5:default + +Flashing example for this keyboard: + + make sneakbox/m4m5: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 3 ways: + +* **Bootmagic reset**: Hold down the top left key in the nevigation cluster (Escape key) and plug in the keyboard +* **Physical reset button**: Briefly press the small metal button on the back of the PCB +* **Keycode in layout**: Press and hold the key next to the right split spacebar (to the right of the spacebar) and then press the End key (located on the bottom of the three-key navigation cluster) From 62d87fa4464d601746343ca750de2ffa8cf4650e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix?= <59839401+v3lmx@users.noreply.github.com> Date: Thu, 30 Oct 2025 21:11:40 +0100 Subject: [PATCH 86/99] [Keyboard] Add Cornifi keyboard (#25753) --- keyboards/cornifi/config.h | 14 ++++ keyboards/cornifi/keyboard.json | 96 ++++++++++++++++++++++ keyboards/cornifi/keymaps/default/keymap.c | 27 ++++++ keyboards/cornifi/readme.md | 32 ++++++++ 4 files changed, 169 insertions(+) create mode 100644 keyboards/cornifi/config.h create mode 100644 keyboards/cornifi/keyboard.json create mode 100644 keyboards/cornifi/keymaps/default/keymap.c create mode 100644 keyboards/cornifi/readme.md diff --git a/keyboards/cornifi/config.h b/keyboards/cornifi/config.h new file mode 100644 index 0000000000..36750714de --- /dev/null +++ b/keyboards/cornifi/config.h @@ -0,0 +1,14 @@ +// Copyright 2024-2025 QMK +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#define SERIAL_USART_FULL_DUPLEX +#define SERIAL_USART_TX_PIN GP12 +#define SERIAL_USART_RX_PIN GP13 +#define USB_VBUS_PIN GP24 + +/* RP2040- and hardware-specific config */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U +#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64 diff --git a/keyboards/cornifi/keyboard.json b/keyboards/cornifi/keyboard.json new file mode 100644 index 0000000000..68e062ad33 --- /dev/null +++ b/keyboards/cornifi/keyboard.json @@ -0,0 +1,96 @@ +{ + "manufacturer": "v3lmx", + "keyboard_name": "cornifi", + "maintainer": "v3lmx", + "bootloader": "rp2040", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "extrakey": true, + "mousekey": true, + "nkro": true + }, + "matrix_pins": { + "direct": [ + ["GP21", "GP25", "GP26", "GP28", "GP29", "GP5"], + ["GP20", "GP22", "GP27", "GP2", "GP3", "GP8"], + ["GP19", "GP23", "GP1", "GP0", "GP4", null], + [null, null, "GP16", "GP17", "GP18", null] + ] + }, + "processor": "RP2040", + "split": { + "bootmagic": { + "matrix": [4, 0] + }, + "enabled": true, + "matrix_pins": { + "right": { + "direct": [ + ["GP9", "GP8", "GP4", "GP3", "GP2", "GP25"], + ["GP10", "GP6", "GP1", "GP28", "GP27", "GP21"], + ["GP11", "GP5", "GP0", "GP29", "GP26", null], + [null, null, "GP16", "GP17", "GP18", null] + ] + } + }, + "serial": { + "driver": "vendor" + } + }, + "url": "https://github.com/v3lmx/cornifi", + "usb": { + "device_version": "1.0.0", + "pid": "0x0000", + "vid": "0xFEED" + }, + "layout_aliases": { + "LAYOUT": "LAYOUT_split_3x5_3_ex2" + }, + "layouts": { + "LAYOUT_split_3x5_3_ex2": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0.9}, + {"matrix": [0, 1], "x": 1, "y": 0.3}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0.35}, + {"matrix": [0, 4], "x": 4, "y": 0.45}, + {"matrix": [0, 5], "x": 5, "y": 0.7}, + {"matrix": [4, 5], "x": 8, "y": 0.7}, + {"matrix": [4, 4], "x": 9, "y": 0.45}, + {"matrix": [4, 3], "x": 10, "y": 0.35}, + {"matrix": [4, 2], "x": 11, "y": 0}, + {"matrix": [4, 1], "x": 12, "y": 0.3}, + {"matrix": [4, 0], "x": 13, "y": 0.9}, + {"matrix": [1, 0], "x": 0, "y": 1.9}, + {"matrix": [1, 1], "x": 1, "y": 1.3}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1.35}, + {"matrix": [1, 4], "x": 4, "y": 1.45}, + {"matrix": [1, 5], "x": 5, "y": 1.7}, + {"matrix": [5, 5], "x": 8, "y": 1.7}, + {"matrix": [5, 4], "x": 9, "y": 1.45}, + {"matrix": [5, 3], "x": 10, "y": 1.35}, + {"matrix": [5, 2], "x": 11, "y": 1}, + {"matrix": [5, 1], "x": 12, "y": 1.3}, + {"matrix": [5, 0], "x": 13, "y": 1.9}, + {"matrix": [2, 0], "x": 0, "y": 2.9}, + {"matrix": [2, 1], "x": 1, "y": 2.3}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2.35}, + {"matrix": [2, 4], "x": 4, "y": 2.45}, + {"matrix": [6, 4], "x": 9, "y": 2.45}, + {"matrix": [6, 3], "x": 10, "y": 2.35}, + {"matrix": [6, 2], "x": 11, "y": 2}, + {"matrix": [6, 1], "x": 12, "y": 2.3}, + {"matrix": [6, 0], "x": 13, "y": 2.9}, + {"matrix": [3, 2], "x": 3, "y": 3.7}, + {"matrix": [3, 3], "x": 4, "y": 3.7}, + {"matrix": [3, 4], "x": 5, "y": 3.2, "h": 1.5}, + {"matrix": [7, 4], "x": 8, "y": 3.2, "h": 1.5}, + {"matrix": [7, 3], "x": 9, "y": 3.7}, + {"matrix": [7, 2], "x": 10, "y": 3.7} + ] + } + } +} diff --git a/keyboards/cornifi/keymaps/default/keymap.c b/keyboards/cornifi/keymaps/default/keymap.c new file mode 100644 index 0000000000..207db11738 --- /dev/null +++ b/keyboards/cornifi/keymaps/default/keymap.c @@ -0,0 +1,27 @@ +// Copyright 2025 @v3lmx +// SPDX-License-Identifier: GPL-3.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [0] = LAYOUT_split_3x5_3_ex2( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX, XXXXXXX, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, + KC_ESC, MO(1), KC_TAB, KC_ENT, MO(2), KC_BSPC + ), + [1] = LAYOUT_split_3x5_3_ex2( + KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, + XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,_______, _______, KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT,XXXXXXX, + XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, + KC_LGUI,_______,KC_SPC, KC_ENT, XXXXXXX, KC_RALT + ), + [2] = LAYOUT_split_3x5_3_ex2( + KC_EXLM, KC_AT,KC_HASH, KC_DLR, KC_PERC,_______, _______, KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN, + XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,_______, _______, KC_MINS,KC_EQL, KC_LBRC,KC_RBRC,KC_BSLS, + XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_UNDS,KC_PLUS,KC_LCBR,KC_RCBR,KC_PIPE, + KC_LGUI,XXXXXXX, KC_SPC, KC_ENT, _______,KC_RALT + ) + // clang-format on +}; diff --git a/keyboards/cornifi/readme.md b/keyboards/cornifi/readme.md new file mode 100644 index 0000000000..3c4022e5ac --- /dev/null +++ b/keyboards/cornifi/readme.md @@ -0,0 +1,32 @@ +# cornifi + +![cornifi keyboard](https://i.imgur.com/Q7B3VX8.jpeg) + +The cornifi keyboard is a split keyboard based on the [corne](https://github.com/foostan/crkbd) with the physical layout of the [fifi](https://github.com/raychengy/fifi_split_keeb). + +* Keyboard Maintainer: [v3lmx (github)](https://github.com/v3lmx) +* Hardware Availability: [v3lmx/cornifi (github)](https://github.com/v3lmx/cornifi) + +Make example for this keyboard (after setting up your build environment): + + make cornifi:default + +Flashing example for this keyboard: + + make cornifi: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 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Hold down the `boot` button and press the `reset` button +* **Keycode in layout**: Press the key mapped to `TD_BOOT` twice if it is available + +## Keymap + +It is recommended to make your own keymap using the [external userspace feature(https://docs.qmk.fm/newbs_external_userspace). + +You can find an example here: [v3lmx qmk userspace](https://github.com/v3lmx/qmk_userspace) From a5fb7cfbc9f8e2eee6dcd46f3d47ec58fd539336 Mon Sep 17 00:00:00 2001 From: "Nes (Jordan)" Date: Sat, 1 Nov 2025 17:06:47 -0700 Subject: [PATCH 87/99] Sofle pico (#25750) --- keyboards/sofle_pico/config.h | 23 ++ keyboards/sofle_pico/halconf.h | 7 + keyboards/sofle_pico/keyboard.json | 239 ++++++++++++++++++ keyboards/sofle_pico/keymaps/default/keymap.c | 53 ++++ .../sofle_pico/keymaps/default/readme.md | 10 + keyboards/sofle_pico/keymaps/default/rules.mk | 1 + keyboards/sofle_pico/readme.md | 31 +++ keyboards/sofle_pico/sofle_pico.c | 32 +++ 8 files changed, 396 insertions(+) create mode 100644 keyboards/sofle_pico/config.h create mode 100644 keyboards/sofle_pico/halconf.h create mode 100644 keyboards/sofle_pico/keyboard.json create mode 100644 keyboards/sofle_pico/keymaps/default/keymap.c create mode 100644 keyboards/sofle_pico/keymaps/default/readme.md create mode 100644 keyboards/sofle_pico/keymaps/default/rules.mk create mode 100644 keyboards/sofle_pico/readme.md create mode 100644 keyboards/sofle_pico/sofle_pico.c diff --git a/keyboards/sofle_pico/config.h b/keyboards/sofle_pico/config.h new file mode 100644 index 0000000000..f4f34171fa --- /dev/null +++ b/keyboards/sofle_pico/config.h @@ -0,0 +1,23 @@ +// Copyright 2024 Ryan Neff (@JellyTitan) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +/* Use full duplex communication (TRRS) */ +#define SERIAL_USART_FULL_DUPLEX +#define SERIAL_USART_TX_PIN GP16 +#define SERIAL_USART_RX_PIN GP17 +/* Swap TX and RX pins if keyboard is master half. Only available on some MCU's. This _is_ available on the RP2040 */ +#define SERIAL_USART_PIN_SWAP + +/* I2C for OLEDs */ +#define I2C_DRIVER I2CD1 +#define I2C1_SDA_PIN GP6 +#define I2C1_SCL_PIN GP7 + +#define OLED_DISPLAY_128X64 +#define OLED_TIMEOUT 30000 + +#define ENCODER_MAP_KEY_DELAY 10 + +#define RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS 50 diff --git a/keyboards/sofle_pico/halconf.h b/keyboards/sofle_pico/halconf.h new file mode 100644 index 0000000000..ed969d9afc --- /dev/null +++ b/keyboards/sofle_pico/halconf.h @@ -0,0 +1,7 @@ +// Copyright 2024 Ryan Neff (@JellyTitan) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define HAL_USE_I2C TRUE +#include_next diff --git a/keyboards/sofle_pico/keyboard.json b/keyboards/sofle_pico/keyboard.json new file mode 100644 index 0000000000..c57c4e8f9e --- /dev/null +++ b/keyboards/sofle_pico/keyboard.json @@ -0,0 +1,239 @@ +{ + "manufacturer": "Ryan Neff", + "keyboard_name": "Sofle Pico", + "maintainer": "Ryan Neff ", + "bootloader": "rp2040", + "bootloader_instructions": "Hold the BOOT button while plugging in the usb cable", + "diode_direction": "COL2ROW", + "encoder": { + "rotary": [ + {"pin_a": "GP14", "pin_b": "GP15"} + ] + }, + "features": { + "bootmagic": true, + "encoder": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "oled": true, + "rgb_matrix": true + }, + "matrix_pins": { + "cols": ["GP1", "GP2", "GP3", "GP4", "GP5", "GP8"], + "rows": ["GP9", "GP10", "GP11", "GP12", "GP13"] + }, + "processor": "RP2040", + "rgb_matrix": { + "animations": { + "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, + "digital_rain": true, + "dual_beacon": true, + "gradient_left_right": true, + "gradient_up_down": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": true, + "jellybean_raindrops": true, + "multisplash": true, + "pixel_flow": true, + "pixel_rain": true, + "rainbow_beacon": true, + "rainbow_moving_chevron": true, + "rainbow_pinwheels": true, + "raindrops": true, + "solid_multisplash": true, + "solid_reactive": true, + "solid_reactive_cross": true, + "solid_reactive_multicross": true, + "solid_reactive_multinexus": true, + "solid_reactive_multiwide": true, + "solid_reactive_nexus": true, + "solid_reactive_simple": true, + "solid_reactive_wide": true, + "solid_splash": true, + "splash": true, + "typing_heatmap": true + }, + "default": { + "animation": "cycle_out_in_dual", + "speed": 16 + }, + "driver": "ws2812", + "layout": [ + {"matrix": [0, 5], "x": 95, "y": 7, "flags": 4}, + {"matrix": [1, 5], "x": 95, "y": 21, "flags": 4}, + {"matrix": [2, 5], "x": 95, "y": 36, "flags": 4}, + {"matrix": [3, 5], "x": 95, "y": 50, "flags": 4}, + {"matrix": [4, 4], "x": 115, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 95, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 76, "y": 62, "flags": 4}, + {"matrix": [3, 4], "x": 76, "y": 48, "flags": 4}, + {"matrix": [2, 4], "x": 76, "y": 33, "flags": 4}, + {"matrix": [1, 4], "x": 76, "y": 19, "flags": 4}, + {"matrix": [0, 4], "x": 76, "y": 5, "flags": 4}, + {"matrix": [0, 3], "x": 57, "y": 3, "flags": 4}, + {"matrix": [1, 3], "x": 57, "y": 17, "flags": 4}, + {"matrix": [2, 3], "x": 57, "y": 31, "flags": 4}, + {"matrix": [3, 3], "x": 57, "y": 46, "flags": 4}, + {"matrix": [4, 1], "x": 57, "y": 62, "flags": 4}, + {"matrix": [4, 0], "x": 38, "y": 64, "flags": 4}, + {"matrix": [3, 2], "x": 38, "y": 48, "flags": 4}, + {"matrix": [2, 2], "x": 38, "y": 33, "flags": 4}, + {"matrix": [1, 2], "x": 38, "y": 19, "flags": 4}, + {"matrix": [0, 2], "x": 38, "y": 5, "flags": 4}, + {"matrix": [0, 1], "x": 19, "y": 7, "flags": 4}, + {"matrix": [1, 1], "x": 19, "y": 21, "flags": 4}, + {"matrix": [2, 1], "x": 19, "y": 36, "flags": 4}, + {"matrix": [3, 1], "x": 19, "y": 50, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 50, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 36, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 21, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 7, "flags": 4}, + {"matrix": [5, 5], "x": 129, "y": 7, "flags": 4}, + {"matrix": [6, 5], "x": 129, "y": 21, "flags": 4}, + {"matrix": [7, 5], "x": 129, "y": 36, "flags": 4}, + {"matrix": [8, 5], "x": 129, "y": 50, "flags": 4}, + {"matrix": [9, 4], "x": 119, "y": 64, "flags": 4}, + {"matrix": [9, 3], "x": 129, "y": 64, "flags": 4}, + {"matrix": [9, 2], "x": 148, "y": 62, "flags": 4}, + {"matrix": [8, 4], "x": 148, "y": 48, "flags": 4}, + {"matrix": [7, 4], "x": 148, "y": 33, "flags": 4}, + {"matrix": [6, 4], "x": 148, "y": 19, "flags": 4}, + {"matrix": [5, 4], "x": 148, "y": 5, "flags": 4}, + {"matrix": [5, 3], "x": 167, "y": 3, "flags": 4}, + {"matrix": [6, 3], "x": 167, "y": 17, "flags": 4}, + {"matrix": [7, 3], "x": 167, "y": 31, "flags": 4}, + {"matrix": [8, 3], "x": 167, "y": 46, "flags": 4}, + {"matrix": [9, 1], "x": 167, "y": 62, "flags": 4}, + {"matrix": [9, 0], "x": 186, "y": 64, "flags": 4}, + {"matrix": [8, 2], "x": 186, "y": 48, "flags": 4}, + {"matrix": [7, 2], "x": 186, "y": 33, "flags": 4}, + {"matrix": [6, 2], "x": 186, "y": 19, "flags": 4}, + {"matrix": [5, 2], "x": 186, "y": 5, "flags": 4}, + {"matrix": [5, 1], "x": 209, "y": 7, "flags": 4}, + {"matrix": [6, 1], "x": 209, "y": 21, "flags": 4}, + {"matrix": [7, 1], "x": 209, "y": 36, "flags": 4}, + {"matrix": [8, 1], "x": 209, "y": 50, "flags": 4}, + {"matrix": [8, 0], "x": 224, "y": 50, "flags": 4}, + {"matrix": [7, 0], "x": 224, "y": 36, "flags": 4}, + {"matrix": [6, 0], "x": 224, "y": 21, "flags": 4}, + {"matrix": [5, 0], "x": 224, "y": 7, "flags": 4} + ], + "max_brightness": 127, + "sleep": true, + "split_count": [29, 29] + }, + "split": { + "bootmagic": { + "matrix": [5, 0] + }, + "enabled": true, + "encoder": { + "right": { + "rotary": [ + {"pin_a": "GP14", "pin_b": "GP15"} + ] + } + }, + "serial": { + "driver": "vendor" + }, + "transport": { + "sync": { + "layer_state": true, + "matrix_state": true + } + } + }, + "tags": ["ortho", "split", "rgb", "encoder", "OLED", "128x64", "tenting_puck"], + "url": "https://github.com/JellyTitan/Sofle-Pico", + "usb": { + "device_version": "3.5.4", + "pid": "0x5350", + "vid": "0x4A54" + }, + "ws2812": { + "driver": "vendor", + "pin": "GP0" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"label": "`", "matrix": [0, 0], "x": 0, "y": 0.7}, + {"label": "1", "matrix": [0, 1], "x": 1, "y": 0.7}, + {"label": "2", "matrix": [0, 2], "x": 2, "y": 0.3}, + {"label": "3", "matrix": [0, 3], "x": 3, "y": 0}, + {"label": "4", "matrix": [0, 4], "x": 4, "y": 0.3}, + {"label": "5", "matrix": [0, 5], "x": 5, "y": 0.45}, + {"label": "6", "matrix": [5, 5], "x": 9, "y": 0.45}, + {"label": "7", "matrix": [5, 4], "x": 10, "y": 0.3}, + {"label": "8", "matrix": [5, 3], "x": 11, "y": 0}, + {"label": "9", "matrix": [5, 2], "x": 12, "y": 0.3}, + {"label": "0", "matrix": [5, 1], "x": 13, "y": 0.7}, + {"label": "`", "matrix": [5, 0], "x": 14, "y": 0.7}, + {"label": "Esc", "matrix": [1, 0], "x": 0, "y": 1.7}, + {"label": "Q", "matrix": [1, 1], "x": 1, "y": 1.7}, + {"label": "W", "matrix": [1, 2], "x": 2, "y": 1.3}, + {"label": "E", "matrix": [1, 3], "x": 3, "y": 1}, + {"label": "R", "matrix": [1, 4], "x": 4, "y": 1.3}, + {"label": "T", "matrix": [1, 5], "x": 5, "y": 1.45}, + {"label": "Y", "matrix": [6, 5], "x": 9, "y": 1.45}, + {"label": "U", "matrix": [6, 4], "x": 10, "y": 1.3}, + {"label": "I", "matrix": [6, 3], "x": 11, "y": 1}, + {"label": "O", "matrix": [6, 2], "x": 12, "y": 1.3}, + {"label": "P", "matrix": [6, 1], "x": 13, "y": 1.7}, + {"label": "Bspc", "matrix": [6, 0], "x": 14, "y": 1.7}, + {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.7}, + {"label": "A", "matrix": [2, 1], "x": 1, "y": 2.7}, + {"label": "S", "matrix": [2, 2], "x": 2, "y": 2.3}, + {"label": "D", "matrix": [2, 3], "x": 3, "y": 2}, + {"label": "F", "matrix": [2, 4], "x": 4, "y": 2.3}, + {"label": "G", "matrix": [2, 5], "x": 5, "y": 2.45}, + {"label": "H", "matrix": [7, 5], "x": 9, "y": 2.45}, + {"label": "J", "matrix": [7, 4], "x": 10, "y": 2.3}, + {"label": "K", "matrix": [7, 3], "x": 11, "y": 2}, + {"label": "L", "matrix": [7, 2], "x": 12, "y": 2.3}, + {"label": ";", "matrix": [7, 1], "x": 13, "y": 2.7}, + {"label": "'", "matrix": [7, 0], "x": 14, "y": 2.7}, + {"label": "LShift", "matrix": [3, 0], "x": 0, "y": 3.7}, + {"label": "Z", "matrix": [3, 1], "x": 1, "y": 3.7}, + {"label": "X", "matrix": [3, 2], "x": 2, "y": 3.3}, + {"label": "C", "matrix": [3, 3], "x": 3, "y": 3}, + {"label": "V", "matrix": [3, 4], "x": 4, "y": 3.3}, + {"label": "B", "matrix": [3, 5], "x": 5, "y": 3.45}, + {"label": "Mute", "matrix": [4, 5], "x": 6.2, "y": 3.45}, + {"label": "Pause", "matrix": [9, 5], "x": 7.8, "y": 3.45}, + {"label": "N", "matrix": [8, 5], "x": 9, "y": 3.45}, + {"label": "M", "matrix": [8, 4], "x": 10, "y": 3.3}, + {"label": ",", "matrix": [8, 3], "x": 11, "y": 3}, + {"label": ".", "matrix": [8, 2], "x": 12, "y": 3.3}, + {"label": "/", "matrix": [8, 1], "x": 13, "y": 3.7}, + {"label": "RShift", "matrix": [8, 0], "x": 14, "y": 3.7}, + {"label": "LCtrl", "matrix": [4, 0], "x": 2, "y": 4.3}, + {"label": "LGUI", "matrix": [4, 1], "x": 3, "y": 4}, + {"label": "LCmnd", "matrix": [4, 2], "x": 4, "y": 4.3}, + {"label": "LAlt", "matrix": [4, 3], "x": 5.1, "y": 4.5, "h": 1.5}, + {"label": "Enter", "matrix": [4, 4], "x": 6.1, "y": 4.5, "h": 1.5}, + {"label": "Space", "matrix": [9, 4], "x": 7.9, "y": 4.5, "h": 1.5}, + {"label": "RAlt", "matrix": [9, 3], "x": 8.9, "y": 4.5, "h": 1.5}, + {"label": "RCmnd", "matrix": [9, 2], "x": 10, "y": 4.3}, + {"label": "RGui", "matrix": [9, 1], "x": 11, "y": 4}, + {"label": "RCtrl", "matrix": [9, 0], "x": 12, "y": 4.3} + ] + } + } +} diff --git a/keyboards/sofle_pico/keymaps/default/keymap.c b/keyboards/sofle_pico/keymaps/default/keymap.c new file mode 100644 index 0000000000..a09f32fc37 --- /dev/null +++ b/keyboards/sofle_pico/keymaps/default/keymap.c @@ -0,0 +1,53 @@ +// Copyright 2024 Ryan Neff (@JellyTitan) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +enum sofle_layers { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // clang-format off + [_QWERTY] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LGUI, KC_LALT, KC_LCTL, TL_LOWR, KC_ENT, KC_SPC , TL_UPPR, KC_RCTL, KC_RALT, KC_RGUI + ), + [_LOWER] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12, + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, + _______, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + [_RAISE] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_PGUP, XXXXXXX, KC_UP , XXXXXXX, XXXXXXX, KC_BSPC, + _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL , KC_BSPC, + _______, C(KC_Z), C(KC_X), C(KC_C), C(KC_V), XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + [_ADJUST] = LAYOUT( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RM_TOGG, RM_VALU, RM_VALD, XXXXXXX, XXXXXXX, XXXXXXX, + QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, CG_TOGG, XXXXXXX, RM_NEXT, RM_PREV, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, CG_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) + // clang-format on +}; + +#ifdef ENCODER_MAP_ENABLE +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)}, + [1] = {ENCODER_CCW_CW(KC_PGUP, KC_PGDN)}, + [2] = {ENCODER_CCW_CW(_______, _______)}, + [3] = {ENCODER_CCW_CW(_______, _______)}, +}; +#endif diff --git a/keyboards/sofle_pico/keymaps/default/readme.md b/keyboards/sofle_pico/keymaps/default/readme.md new file mode 100644 index 0000000000..a15159d07c --- /dev/null +++ b/keyboards/sofle_pico/keymaps/default/readme.md @@ -0,0 +1,10 @@ +![SofleKeyboard default keymap](https://i.imgur.com/MZxVvm9.png) +![SofleKeyboard adjust layer](https://i.imgur.com/f5sKy0I.png) + + +# Default keymap for Sofle Pico Keyboard + +Adapted from the classic Sofle Keyboard by Josef Adamcik. +Simplified to serve as a starting point for further customizations. +Layout in [Keyboard Layout Editor](http://www.keyboard-layout-editor.com/#/gists/76efb423a46cbbea75465cb468eef7ff) +Left encoder controls volume up/down/mute. Right encoder PGUP/PGDOWN. diff --git a/keyboards/sofle_pico/keymaps/default/rules.mk b/keyboards/sofle_pico/keymaps/default/rules.mk new file mode 100644 index 0000000000..7c9bf212a6 --- /dev/null +++ b/keyboards/sofle_pico/keymaps/default/rules.mk @@ -0,0 +1 @@ +TRI_LAYER_ENABLE = yes diff --git a/keyboards/sofle_pico/readme.md b/keyboards/sofle_pico/readme.md new file mode 100644 index 0000000000..34498d0c1b --- /dev/null +++ b/keyboards/sofle_pico/readme.md @@ -0,0 +1,31 @@ +# Sofle Pico Keyboard + +![Sofle Pico](https://i.imgur.com/9VBj3T5.jpeg) +![Sofle Pico PCB](https://i.imgur.com/8SDTm4h.jpeg) +Sofle Pico is a 60% Raspberry Pi Pico powered split keyboard boasting a 4x6 layout with an aggressive columnar stagger. It has 5 "thumb" keys on either side, support for 2-4 rotary encoders, per-key RGB lighting, 128x64 OLEDs and a tenting puck mount. + +- Keyboard Maintainer: [Ryan Neff](https://github.com/JellyTitan) +- Hardware Supported: Sofle Pico PCB v3.5.x, Raspberry Pi Pico +- Hardware Availability: [PCB, Case, Parts List](https://github.com/JellyTitan/Sofle-Pico) + +Remember you have to flash both halves of the keyboard for it to work! + +Make example for this keyboard (after setting up your build environment): + + make sofle_pico:default + +Flashing example for this keyboard: + + make sofle_pico: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 3 ways: + +- **Bootmagic reset** (works after you have flashed once): Hold down the top far corner key while plugging in the keyboard (`~` left half, `-` right half). This will also clear the EEPROM. +- **Physical reset button**: Hold the `BOOT` button on the Pico and press the `RST` button on the Pico, release the the `RST` button before the `BOOT` button. +- **Keycode in layout**: In the default layout, the `Bootloader` keycode is above home row pinky on the right side's adjust layer. + +Once you enter the bootloader, the keyboard will show up as a USB device on your computer, you could drag and drop a `.uf2` firmware file to flash it. diff --git a/keyboards/sofle_pico/sofle_pico.c b/keyboards/sofle_pico/sofle_pico.c new file mode 100644 index 0000000000..b237dfc599 --- /dev/null +++ b/keyboards/sofle_pico/sofle_pico.c @@ -0,0 +1,32 @@ +// Copyright 2024 Ryan Neff (@JellyTitan) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "quantum.h" + +#ifdef OLED_ENABLE + +oled_rotation_t oled_init_kb(oled_rotation_t rotation) { + return OLED_ROTATION_90; +} + +static void render_logo(void) { + static const char PROGMEM sofle_pico_logo[] = { + 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0x70, 0xf0, 0xf0, 0xe0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf8, 0xfc, 0x3c, 0x3c, 0x3c, 0x7c, 0xf8, 0xf8, 0xf0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x1f, 0x3f, 0x3f, 0x3f, 0x7c, 0x78, 0xf8, 0xf8, 0xf0, 0xe0, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xfc, 0x3c, 0x1c, 0x1e, 0x1e, 0x3c, 0xfc, 0xf8, 0xf0, 0xc0, 0x00, 0x1c, 0x1c, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x1c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xfc, 0xfc, 0xce, 0xce, 0xce, 0xdc, 0xfc, 0xfc, 0xf8, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1e, 0x1e, 0x1e, 0x3c, 0x3c, 0x3c, 0x3e, 0x1f, 0x1f, 0x0f, 0x07, 0x01, 0x00, 0x01, 0x07, + 0x0f, 0x1f, 0x1e, 0x3c, 0x3c, 0x3c, 0x1e, 0x1f, 0x0f, 0x07, 0x03, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x01, 0x07, 0x0f, 0x1f, 0x1f, 0x3c, 0x38, 0x38, 0x3c, 0x1c, 0x1c, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x06, 0x06, 0x06, 0x0e, 0x9e, 0xfc, 0xf8, 0x00, 0x00, 0x8e, 0x8e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7c, 0xfe, 0xff, 0x83, 0x01, 0x01, 0x01, 0x83, 0x83, 0x00, 0x00, 0x7e, 0xff, 0xc7, 0x83, 0x01, 0x01, 0x01, + 0x83, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc3, 0xe3, 0xe0, 0xe0, 0xe0, 0xf0, 0x70, 0x70, 0x70, 0x70, 0x30, 0x33, 0x73, 0xe0, 0x60, 0xe0, 0xe0, 0xc0, 0xc1, 0x83, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x70, 0x30, 0x70, 0x70, 0x70, 0x70, 0x70, 0xf0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1f, 0xff, 0xf8, 0xd0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x20, 0x40, 0xc0, 0x80, 0x00, 0x01, 0x87, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xff, 0xff, 0x03, 0x01, 0x00, 0x80, 0xc0, 0x40, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xf0, 0xf8, 0x7f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0f, 0x1c, 0x1c, 0x38, 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, 0x38, 0x39, 0xdf, 0xef, 0xf7, 0x7b, 0x39, 0x1c, 0x1c, 0x0e, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0e, 0x0e, 0x1e, 0x1c, 0x3c, 0x79, 0xfb, 0xf7, 0xef, 0x9f, 0x38, 0x30, 0x70, 0x60, 0x60, 0x60, 0x60, 0x70, 0x38, 0x3c, 0x1c, 0x0f, 0x0f, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xfc, 0x7e, 0x7f, 0xff, 0xff, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xff, 0x7f, 0x7f, 0x3f, 0x7c, 0xf8, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0x81, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0xff, 0xfe, 0x7c, 0x78, 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x78, 0x78, 0x7c, 0xfe, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x0e, 0x1e, 0x3f, 0x7f, 0xf1, 0xe0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xe1, 0xf3, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + oled_write_raw_P(sofle_pico_logo, sizeof(sofle_pico_logo)); +} + +bool oled_task_kb(void) { + if (!oled_task_user()) { + return false; + } + render_logo(); + return false; +} + +#endif From a9739f78681dee290ede955c02b360f5c133f783 Mon Sep 17 00:00:00 2001 From: James Young <18669334+noroadsleft@users.noreply.github.com> Date: Mon, 3 Nov 2025 16:05:39 -0800 Subject: [PATCH 88/99] [docs] Replace Imgur-hosted images (#25690) --- .gitignore | 5 ++++ docs/driver_installation_zadig.md | 12 ++++---- docs/easy_maker.md | 2 +- docs/faq_keymap.md | 2 +- docs/features/autocorrect.md | 4 +-- docs/features/backlight.md | 2 +- docs/features/layer_lock.md | 4 +-- docs/features/rgblight.md | 2 +- docs/features/split_keyboard.md | 6 ++-- docs/getting_started_github.md | 10 +++---- docs/hand_wire.md | 28 +++++++++---------- docs/newbs_building_firmware_configurator.md | 2 +- docs/newbs_external_userspace.md | 8 +++--- docs/other_eclipse.md | 2 +- docs/other_vscode.md | 2 +- docs/platformdev_blackpill_f4x1.md | 2 +- docs/platformdev_proton_c.md | 2 +- docs/platformdev_rp2040.md | 4 +-- docs/public/0GNIYY0.jpg | Bin 0 -> 97616 bytes docs/public/1TPAhrs.jpg | Bin 0 -> 117667 bytes docs/public/2wUZNWk.png | Bin 0 -> 7734 bytes docs/public/3RrSjzW.png | Bin 0 -> 10544 bytes docs/public/4wjJzBU.png | Bin 0 -> 4051 bytes docs/public/5wsh5wM.png | Bin 0 -> 47259 bytes docs/public/8Toomz4.jpg | Bin 0 -> 27480 bytes docs/public/AvXZShD.jpg | Bin 0 -> 94653 bytes docs/public/BPEC5n5.jpg | Bin 0 -> 38514 bytes docs/public/BmAvoUC.png | Bin 0 -> 17960 bytes docs/public/Bu4mk9m.png | Bin 0 -> 3447 bytes docs/public/CWYmsk8.png | Bin 0 -> 31676 bytes docs/public/CnASmPo.jpg | Bin 0 -> 289270 bytes docs/public/DkEhj9x.png | Bin 0 -> 8998 bytes docs/public/DxMHpJ8.jpg | Bin 0 -> 32520 bytes docs/public/EGrPM1L.png | Bin 0 -> 28464 bytes docs/public/EVkxOt1.png | Bin 0 -> 65661 bytes docs/public/FRShcLD.png | Bin 0 -> 41983 bytes docs/public/HL5DP8H.png | Bin 0 -> 11250 bytes docs/public/Hx0E5kC.png | Bin 0 -> 9873 bytes docs/public/JKngtTw.png | Bin 0 -> 5700 bytes docs/public/JcDhZll.png | Bin 0 -> 13471 bytes docs/public/N1NYcSz.jpg | Bin 0 -> 32344 bytes docs/public/Ojydlaj.jpg | Bin 0 -> 40688 bytes docs/public/QeY6kMQ.png | Bin 0 -> 3572 bytes docs/public/QiA3ta6.jpg | Bin 0 -> 164162 bytes docs/public/RFyNMlL.jpg | Bin 0 -> 166582 bytes docs/public/UlJ4ZDP.png | Bin 0 -> 26297 bytes docs/public/aEs2RuA.png | Bin 0 -> 3784 bytes docs/public/aTnG8TV.jpg | Bin 0 -> 46839 bytes docs/public/anw9cOL.png | Bin 0 -> 82094 bytes docs/public/b4b7KDb.jpg | Bin 0 -> 288162 bytes docs/public/b8VgXzx.png | Bin 0 -> 9653 bytes docs/public/eGO0ohO.jpg | Bin 0 -> 11793 bytes docs/public/eHJjmnU.jpg | Bin 0 -> 123338 bytes docs/public/fmDvDzR.png | Bin 0 -> 12205 bytes docs/public/hcegguh.png | Bin 0 -> 19408 bytes docs/public/mBe5vkL.jpg | Bin 0 -> 78381 bytes docs/public/nCgeolTh.png | Bin 0 -> 201338 bytes docs/public/nLaiYDE.jpg | Bin 0 -> 222428 bytes docs/public/o7WLvBl.png | Bin 0 -> 3524 bytes docs/public/oHYR1yW.png | Bin 0 -> 18766 bytes docs/public/oITudbX.jpg | Bin 0 -> 444216 bytes docs/public/vkYVo66.jpg | Bin 0 -> 44280 bytes docs/public/z2QlKfB.jpg | Bin 0 -> 260874 bytes docs/public/zmwOL5P.png | Bin 0 -> 35246 bytes docs/reference_configurator_support.md | 18 +++++++++--- 65 files changed, 66 insertions(+), 51 deletions(-) create mode 100644 docs/public/0GNIYY0.jpg create mode 100644 docs/public/1TPAhrs.jpg create mode 100644 docs/public/2wUZNWk.png create mode 100644 docs/public/3RrSjzW.png create mode 100644 docs/public/4wjJzBU.png create mode 100644 docs/public/5wsh5wM.png create mode 100644 docs/public/8Toomz4.jpg create mode 100644 docs/public/AvXZShD.jpg create mode 100644 docs/public/BPEC5n5.jpg create mode 100644 docs/public/BmAvoUC.png create mode 100644 docs/public/Bu4mk9m.png create mode 100644 docs/public/CWYmsk8.png create mode 100644 docs/public/CnASmPo.jpg create mode 100644 docs/public/DkEhj9x.png create mode 100644 docs/public/DxMHpJ8.jpg create mode 100644 docs/public/EGrPM1L.png create mode 100644 docs/public/EVkxOt1.png create mode 100644 docs/public/FRShcLD.png create mode 100644 docs/public/HL5DP8H.png create mode 100644 docs/public/Hx0E5kC.png create mode 100644 docs/public/JKngtTw.png create mode 100644 docs/public/JcDhZll.png create mode 100644 docs/public/N1NYcSz.jpg create mode 100644 docs/public/Ojydlaj.jpg create mode 100644 docs/public/QeY6kMQ.png create mode 100644 docs/public/QiA3ta6.jpg create mode 100644 docs/public/RFyNMlL.jpg create mode 100644 docs/public/UlJ4ZDP.png create mode 100644 docs/public/aEs2RuA.png create mode 100644 docs/public/aTnG8TV.jpg create mode 100644 docs/public/anw9cOL.png create mode 100644 docs/public/b4b7KDb.jpg create mode 100644 docs/public/b8VgXzx.png create mode 100644 docs/public/eGO0ohO.jpg create mode 100644 docs/public/eHJjmnU.jpg create mode 100644 docs/public/fmDvDzR.png create mode 100644 docs/public/hcegguh.png create mode 100644 docs/public/mBe5vkL.jpg create mode 100644 docs/public/nCgeolTh.png create mode 100644 docs/public/nLaiYDE.jpg create mode 100644 docs/public/o7WLvBl.png create mode 100644 docs/public/oHYR1yW.png create mode 100644 docs/public/oITudbX.jpg create mode 100644 docs/public/vkYVo66.jpg create mode 100644 docs/public/z2QlKfB.jpg create mode 100644 docs/public/zmwOL5P.png diff --git a/.gitignore b/.gitignore index 5886640d68..6ec26d3876 100644 --- a/.gitignore +++ b/.gitignore @@ -95,6 +95,11 @@ tags *.mpeg *.ttf *.otf +# Un-ignore limited image file formats in docs +!docs/public/**.gif +!docs/public/**.jpg +!docs/public/**.jpeg +!docs/public/**.png # Things Travis sees /.vs diff --git a/docs/driver_installation_zadig.md b/docs/driver_installation_zadig.md index 1a5bd1cc34..6fbcfa3bff 100644 --- a/docs/driver_installation_zadig.md +++ b/docs/driver_installation_zadig.md @@ -22,7 +22,7 @@ If Zadig lists one or more devices with the `HidUsb` driver, your keyboard is pr If the arrow appears green, select the driver, and click **Install Driver**. See the [list of known bootloaders](#list-of-known-bootloaders) for the correct driver to install. -![Zadig with a bootloader driver correctly installed](https://i.imgur.com/b8VgXzx.png) +![Zadig with a bootloader driver correctly installed](/b8VgXzx.png) Finally, unplug and replug the keyboard to make sure the new driver has been loaded. If you are using the QMK Toolbox to flash, exit and restart it too, as it can sometimes fail to recognize the driver change. @@ -30,15 +30,15 @@ Finally, unplug and replug the keyboard to make sure the new driver has been loa If you find that you can no longer type with the keyboard, you may have accidentally replaced the driver for the keyboard itself instead of for the bootloader. This can happen when the keyboard is not in the bootloader mode. You can easily confirm this in Zadig - a healthy keyboard has the `HidUsb` driver installed on all of its interfaces: -![A healthy keyboard as seen by Zadig](https://i.imgur.com/Hx0E5kC.png) +![A healthy keyboard as seen by Zadig](/Hx0E5kC.png) Open the Device Manager, select **View → Devices by container**, and look for an entry with your keyboard's name. -![The board with the wrong driver installed, in Device Manager](https://i.imgur.com/o7WLvBl.png) +![The board with the wrong driver installed, in Device Manager](/o7WLvBl.png) Right-click each entry and hit **Uninstall device**. Make sure to tick **Delete the driver software for this device** first if it appears. -![The Device Uninstall dialog, with the "delete driver" checkbox ticked](https://i.imgur.com/aEs2RuA.png) +![The Device Uninstall dialog, with the "delete driver" checkbox ticked](/aEs2RuA.png) Click **Action → Scan for hardware changes**. At this point, you should be able to type again. Double check in Zadig that the keyboard device(s) are using the `HidUsb` driver. If so, you're all done, and your board should be functional again! Otherwise, repeat this process until Zadig reports the correct driver. @@ -54,11 +54,11 @@ Open the Device Manager, select **View → Devices by container**, and look for Find the `Inf name` value in the Details tab of the device properties. This should generally be something like `oemXX.inf`: -![Device properties showing the Inf name value](https://i.imgur.com/Bu4mk9m.png) +![Device properties showing the Inf name value](/Bu4mk9m.png) Then, open a new Command Prompt window as an Administrator (type in `cmd` into the Start menu and press Ctrl+Shift+Enter). Run `pnputil /enum-drivers` to verify the `Inf name` matches the `Published Name` field of one of the entries: -![pnputil output with matching driver highlighted](https://i.imgur.com/3RrSjzW.png) +![pnputil output with matching driver highlighted](/3RrSjzW.png) Run `pnputil /delete-driver oemXX.inf /uninstall`. This will delete the driver and remove it from any devices using it. Note that this will not uninstall the device itself. diff --git a/docs/easy_maker.md b/docs/easy_maker.md index e94477322b..4a6aa1cb61 100644 --- a/docs/easy_maker.md +++ b/docs/easy_maker.md @@ -24,7 +24,7 @@ As its name implies Direct Pin works by connecting one switch per pin. The other Here is a schematic showing how we connect a single button to pin A3 on a ProMicro: -![Schematic diagram showing a ProMicro with a wire coming out of A3, connecting to the left side of a switch. Another wire comes out of the right side of the switch to connect to the Ground Plane.](https://i.imgur.com/JcDhZll.png) +![Schematic diagram showing a ProMicro with a wire coming out of A3, connecting to the left side of a switch. Another wire comes out of the right side of the switch to connect to the Ground Plane.](/JcDhZll.png) Once you have wired your switches you can assign keycodes to each pin and build a firmware by selecting the MCU you are using from the Keyboard dropdown. Use this link to show only Easy Maker Direct Pin: diff --git a/docs/faq_keymap.md b/docs/faq_keymap.md index 05bd4fed3e..dbaf7de991 100644 --- a/docs/faq_keymap.md +++ b/docs/faq_keymap.md @@ -13,7 +13,7 @@ Keycodes are actually defined in [quantum/keycode.h](https://github.com/qmk/qmk_ There are 3 standard keyboard layouts in use around the world- ANSI, ISO, and JIS. North America primarily uses ANSI, Europe and Africa primarily use ISO, and Japan uses JIS. Regions not mentioned typically use either ANSI or ISO. The keycodes corresponding to these layouts are shown here: -![Keyboard Layout Image](https://i.imgur.com/5wsh5wM.png) +![Keyboard Layout Image](/5wsh5wM.png) ## How Can I Make Custom Names For Complex Keycodes? diff --git a/docs/features/autocorrect.md b/docs/features/autocorrect.md index df3f2e0fd8..57024f2cd2 100644 --- a/docs/features/autocorrect.md +++ b/docs/features/autocorrect.md @@ -8,7 +8,7 @@ The feature maintains a small buffer of recent key presses. On each key press, i The tricky part is how to efficiently check the buffer for typos. We don’t want to spend too much memory or time on storing or searching the typos. A good solution is to represent the typos with a trie data structure. A trie is a tree data structure where each node is a letter, and words are formed by following a path to one of the leaves. -![An example trie](https://i.imgur.com/HL5DP8H.png) +![An example trie](/HL5DP8H.png) Since we search whether the buffer ends in a typo, we store the trie writing in reverse. The trie is queried starting from the last letter, then second to last letter, and so on, until either a letter doesn’t match or we reach a leaf, meaning a typo was found. @@ -279,7 +279,7 @@ All autocorrection data is stored in a single flat array autocorrect_data. Each * 01 ⇒ branching node: a trie node with multiple children. * 10 ⇒ leaf node: a leaf, corresponding to a typo and storing its correction. -![An example trie](https://i.imgur.com/HL5DP8H.png) +![An example trie](/HL5DP8H.png) **Branching node**. Each branch is encoded with one byte for the keycode (KC_A–KC_Z) followed by a link to the child node. Links between nodes are 16-bit byte offsets relative to the beginning of the array, serialized in little endian order. diff --git a/docs/features/backlight.md b/docs/features/backlight.md index 20f84ac6b5..87d5a36c00 100644 --- a/docs/features/backlight.md +++ b/docs/features/backlight.md @@ -227,7 +227,7 @@ In this typical example, the backlight LEDs are all connected in parallel toward A pulldown resistor is also placed between the gate pin and ground to keep it at a defined state when it is not otherwise being driven by the MCU. The values of these resistors are not critical - see [this Electronics StackExchange question](https://electronics.stackexchange.com/q/68748) for more information. -![Backlight example circuit](https://i.imgur.com/BmAvoUC.png) +![Backlight example circuit](/BmAvoUC.png) ## API {#api} diff --git a/docs/features/layer_lock.md b/docs/features/layer_lock.md index aaf323accc..27856ada26 100644 --- a/docs/features/layer_lock.md +++ b/docs/features/layer_lock.md @@ -35,12 +35,12 @@ layer. Consider a keymap with the following base layer. -![Base layer with a MO(NAV) key.](https://i.imgur.com/DkEhj9x.png) +![Base layer with a MO(NAV) key.](/DkEhj9x.png) The highlighted key is a momentary layer switch `MO(NAV)`. Holding it accesses a navigation layer. -![Nav layer with a Layer Lock key.](https://i.imgur.com/2wUZNWk.png) +![Nav layer with a Layer Lock key.](/2wUZNWk.png) Holding the NAV key is fine for brief use, but awkward to continue holding when diff --git a/docs/features/rgblight.md b/docs/features/rgblight.md index 43e3781f8d..20d32c4f5a 100644 --- a/docs/features/rgblight.md +++ b/docs/features/rgblight.md @@ -55,7 +55,7 @@ Changing the **Hue** cycles around the circle.
Changing the **Saturation** moves between the inner and outer sections of the wheel, affecting the intensity of the color.
Changing the **Value** sets the overall brightness.
-![QMK Color Wheel with HSV Values](https://i.imgur.com/vkYVo66.jpg) +![QMK Color Wheel with HSV Values](/vkYVo66.jpg) ## Keycodes diff --git a/docs/features/split_keyboard.md b/docs/features/split_keyboard.md index 4b299b14f8..a6fbad1c8f 100644 --- a/docs/features/split_keyboard.md +++ b/docs/features/split_keyboard.md @@ -91,11 +91,11 @@ SPLIT_TRANSPORT = custom Configuring your layout in a split keyboard works slightly differently to a non-split keyboard. Take for example the following layout. The top left numbers refer to the matrix row and column, and the bottom right are the order of the keys in the layout: -![Physical layout](https://i.imgur.com/QeY6kMQ.png) +![Physical layout](/QeY6kMQ.png) Since the matrix scanning procedure operates on entire rows, it first populates the left half's rows, then the right half's. Thus, the matrix as QMK views it has double the rows instead of double the columns: -![Matrix](https://i.imgur.com/4wjJzBU.png) +![Matrix](/4wjJzBU.png) ### Setting Handedness @@ -497,7 +497,7 @@ Once you have done that, you will want to solder the diode from the 5V pad to th You may need to use the 5V pad from the regulator block above as the pads were too small and placed too closely together to place the Schottky diode properly. -![Teensy++ 2.0](https://i.imgur.com/BPEC5n5.png) +![Teensy++ 2.0](/BPEC5n5.jpg) ## Additional Resources diff --git a/docs/getting_started_github.md b/docs/getting_started_github.md index b8587dbb13..4cc9978d3d 100644 --- a/docs/getting_started_github.md +++ b/docs/getting_started_github.md @@ -8,15 +8,15 @@ This guide assumes you're somewhat comfortable with running things at the comman Start on the [QMK GitHub page](https://github.com/qmk/qmk_firmware), and you'll see a button in the upper right that says "Fork": -![Fork on GitHub](https://i.imgur.com/8Toomz4.jpg) +![Fork on GitHub](/8Toomz4.jpg) If you're a part of an organization, you'll need to choose which account to fork it to. In most circumstances, you'll want to fork it to your personal account. Once your fork is completed (sometimes this takes a little while), click the "Clone or Download" button: -![Download from GitHub](https://i.imgur.com/N1NYcSz.jpg) +![Download from GitHub](/N1NYcSz.jpg) And be sure to select "HTTPS", and select the link and copy it: -![HTTPS link](https://i.imgur.com/eGO0ohO.jpg) +![HTTPS link](/eGO0ohO.jpg) From here, enter `git clone --recurse-submodules ` into the command line, and then paste your link: @@ -57,10 +57,10 @@ To https://github.com/whoeveryouare/qmk_firmware.git Your changes now exist on your fork on GitHub - if you go back there (`https://github.com//qmk_firmware`), you can create a "New Pull Request" by clicking this button: -![New Pull Request](https://i.imgur.com/DxMHpJ8.jpg) +![New Pull Request](/DxMHpJ8.jpg) Here you'll be able to see exactly what you've committed - if it all looks good, you can finalize it by clicking "Create Pull Request": -![Create Pull Request](https://i.imgur.com/Ojydlaj.jpg) +![Create Pull Request](/Ojydlaj.jpg) After submitting, we may talk to you about your changes, ask that you make changes, and eventually accept it! Thanks for contributing to QMK :) diff --git a/docs/hand_wire.md b/docs/hand_wire.md index 492ca384b1..25be46fdb7 100644 --- a/docs/hand_wire.md +++ b/docs/hand_wire.md @@ -36,12 +36,12 @@ What you want to achieve is one leg from each switch being attached to the corre It is fairly simple to plan for an ortholinear keyboard (like a Planck). -![Example Planck matrix](https://i.imgur.com/FRShcLD.png) +![Example Planck matrix](/FRShcLD.png) Image from [RoastPotatoes' "How to hand wire a Planck"](https://blog.roastpotatoes.co/guide/2015/11/04/how-to-handwire-a-planck/) But the larger and more complicated your keyboard, the more complex the matrix. [Keyboard Firmware Builder](https://kbfirmware.com/) can help you plan your matrix layout (shown here with a basic fullsize ISO keyboard imported from [Keyboard Layout Editor](https://www.keyboard-layout-editor.com). -![Example ISO matrix](https://i.imgur.com/UlJ4ZDP.png) +![Example ISO matrix](/UlJ4ZDP.png) Bear in mind that the number of rows plus the number of columns can not exceed the number of I/O pins on your controller. So the fullsize matrix shown above would be possible on a Proton C or Teensy++, but not on a regular Teensy or Pro Micro. @@ -51,14 +51,14 @@ Bear in mind that the number of rows plus the number of columns can not exceed t | :------------ |:-------------:| ------:| ------ | | Pro Micro* | ATmega32u4 | 20 | [link](https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/hardware-overview-pro-micro#Teensy++_2.0) | | Teensy 2.0 | ATmega32u4 | 25 | [link](https://www.pjrc.com/teensy/pinout.html) | -| [QMK Proton C](https://qmk.fm/proton-c/) | STM32F303xC | 36 | [link 1](https://i.imgur.com/RhtrAlc.png), [2](https://deskthority.net/wiki/QMK_Proton_C) | +| [QMK Proton C](https://qmk.fm/proton-c/) | STM32F303xC | 36 | [link 1](https://qmk.fm/proton-c-pinout.jpg), [2](https://deskthority.net/wiki/QMK_Proton_C) | | Teensy++ 2.0 | AT90USB1286 | 46 | [link](https://www.pjrc.com/teensy/pinout.html#Teensy_2.0) | *Elite C is essentially the same as a Pro Micro with a USB-C instead of Micro-USB There are also a number of boards designed specifically for handwiring that mount directly to a small number of switches and offer pinouts for the rest. Though these are generally more expensive and may be more difficult to get hold of. -Postage board mini mounted in place +Postage board mini mounted in place | Board | Controller | # I/O | | :------------ |:-------------:| ------:| @@ -74,13 +74,13 @@ Established materials and techniques include: | Technique | Examples | Pros | Cons | Image | :-----------| :------- | :------ | :--- | :--- -| Lengths of wire with stripped segments | [Sasha Solomon's Dactyl](https://medium.com/@sachee/building-my-first-keyboard-and-you-can-too-512c0f8a4c5f) and [Cribbit's modern hand wire](https://geekhack.org/index.php?topic=87689.0) | Neat and tidy | Some effort in stripping the wire | ![Stripped wire](https://i.imgur.com/0GNIYY0.jpg) -| Short lengths of wire | [u/xicolinguada's ortho build](https://www.reddit.com/r/MechanicalKeyboards/comments/c39k4f/my_first_hand_wired_keyboard_its_not_perfect_but/) | Easier to strip the wire | More difficult to place | ![individual wire lengths](https://i.imgur.com/mBe5vkL.jpg) -| Magnet/Enamelled wire | [fknraiden's custom board](https://geekhack.org/index.php?topic=74223.0) | Can be directly soldered onto (insulation burns off with heat) | Appearance? | ![Magnet wire](https://i.imgur.com/b4b7KDb.jpg) -| Bending the legs of the diodes for the rows | [Matt3o's Brownfox](https://deskthority.net/viewtopic.php?f=7&t=6050) | Fewer solder joints required | Uninsulated | ![Bent diode legs](https://i.imgur.com/aTnG8TV.jpg) -| Using rigid wiring (e.g. brass tube) | [u/d_stilgar's invisible hardline](https://www.reddit.com/r/MechanicalKeyboards/comments/8aw5j2/invisible_hardline_keyboard_progress_update_april/) and [u/jonasfasler's first attempt](https://www.reddit.com/r/MechanicalKeyboards/comments/de1jyv/my_first_attempt_at_handwiring_a_keyboard/) | Very pretty | More difficult. No physical insulation | ![Hardline hand wire](https://i.imgur.com/CnASmPo.jpg) -| Bare wire with insulation added after (e.g. kapton tape) | [Matt3o's 65% on his website](https://matt3o.com/hand-wiring-a-custom-keyboard/) | Easier (no wire stripping required) | Not as attractive | ![Bare wire](https://i.imgur.com/AvXZShD.jpg) -| Copper tape | [ManuForm Dactyl](https://github.com/tshort/dactyl-keyboard) | Very easy | Only really works when your plate/case aligns with the bottom of your switches | ![Copper tape](https://i.imgur.com/RFyNMlL.jpg) +| Lengths of wire with stripped segments | [Sasha Solomon's Dactyl](https://medium.com/@sachee/building-my-first-keyboard-and-you-can-too-512c0f8a4c5f) and [Cribbit's modern hand wire](https://geekhack.org/index.php?topic=87689.0) | Neat and tidy | Some effort in stripping the wire | ![Stripped wire](/0GNIYY0.jpg) +| Short lengths of wire | [u/xicolinguada's ortho build](https://www.reddit.com/r/MechanicalKeyboards/comments/c39k4f/my_first_hand_wired_keyboard_its_not_perfect_but/) | Easier to strip the wire | More difficult to place | ![individual wire lengths](/mBe5vkL.jpg) +| Magnet/Enamelled wire | [fknraiden's custom board](https://geekhack.org/index.php?topic=74223.0) | Can be directly soldered onto (insulation burns off with heat) | Appearance? | ![Magnet wire](/b4b7KDb.jpg) +| Bending the legs of the diodes for the rows | [Matt3o's Brownfox](https://deskthority.net/viewtopic.php?f=7&t=6050) | Fewer solder joints required | Uninsulated | ![Bent diode legs](/aTnG8TV.jpg) +| Using rigid wiring (e.g. brass tube) | [u/d_stilgar's invisible hardline](https://www.reddit.com/r/MechanicalKeyboards/comments/8aw5j2/invisible_hardline_keyboard_progress_update_april/) and [u/jonasfasler's first attempt](https://www.reddit.com/r/MechanicalKeyboards/comments/de1jyv/my_first_attempt_at_handwiring_a_keyboard/) | Very pretty | More difficult. No physical insulation | ![Hardline hand wire](/CnASmPo.jpg) +| Bare wire with insulation added after (e.g. kapton tape) | [Matt3o's 65% on his website](https://matt3o.com/hand-wiring-a-custom-keyboard/) | Easier (no wire stripping required) | Not as attractive | ![Bare wire](/AvXZShD.jpg) +| Copper tape | [ManuForm Dactyl](https://github.com/tshort/dactyl-keyboard) | Very easy | Only really works when your plate/case aligns with the bottom of your switches | ![Copper tape](/RFyNMlL.jpg) Note that these methods can be combined. Prepare your lengths of wire before moving on to soldering. @@ -97,11 +97,11 @@ There are a lot of soldering guides and tips available elsewhere but here are so To ensure a strong solder joint you want a good amount of contact between the solder and the two pieces of metal you are connecting. A good way of doing this (though not required) is looping around pins or twisting wires together before applying solder. -Looped around rod Looped diode leg +Looped around rod If your diodes are on a packaging strip and need a bend in them (either the start of a loop or for connecting to its neighbour) this can easily done by bending it over something straight like the edge of a box, table, or ruler. This also helps keep track of the direction of the diode as all the bends will be on the same side. -Bent diode legs +Bent diode legs If your iron has temperature control, set it to 315ºC (600ºF). @@ -164,7 +164,7 @@ Cut wires to the length of the distance from the a point on each column/row to t Ribbon cable can be used to keep this extra tidy. You may also want to consider routing the wires beneath the existing columns/rows. -Ribbon Cable +Ribbon Cable As you solder the wires to the controller make a note of which row/column is going to which pin on the controller as we'll use this data to setup the matrix when we create the firmware. diff --git a/docs/newbs_building_firmware_configurator.md b/docs/newbs_building_firmware_configurator.md index 85522e405c..6d441311dc 100644 --- a/docs/newbs_building_firmware_configurator.md +++ b/docs/newbs_building_firmware_configurator.md @@ -1,6 +1,6 @@ # QMK Configurator -[![QMK Configurator Screenshot](https://i.imgur.com/anw9cOL.png)](https://config.qmk.fm/) +[![QMK Configurator Screenshot](/anw9cOL.png)](https://config.qmk.fm/) The [QMK Configurator](https://config.qmk.fm) is an online graphical user interface that generates QMK Firmware `.hex` or `.bin` files. diff --git a/docs/newbs_external_userspace.md b/docs/newbs_external_userspace.md index fdc998c37a..9f818f46f9 100644 --- a/docs/newbs_external_userspace.md +++ b/docs/newbs_external_userspace.md @@ -32,11 +32,11 @@ Building locally has a much shorter turnaround time than waiting for GitHub Acti A basic skeleton External Userspace repository can be found [here](https://github.com/qmk/qmk_userspace). If you wish to keep your keymaps on GitHub (strongly recommended!), you can fork the repository and use it as a base: -![Userspace Fork](https://i.imgur.com/hcegguh.png) +![Userspace Fork](/hcegguh.png) Going ahead with your fork will copy it to your account, at which point you can clone it to your local machine and begin adding your keymaps: -![Userspace Clone](https://i.imgur.com/CWYmsk8.png) +![Userspace Clone](/CWYmsk8.png) ```sh cd $HOME @@ -99,8 +99,8 @@ All firmware builds you've added to the External Userspace build targets will be GitHub Actions can be used to automatically build your keymaps whenever you push changes to your External Userspace repository. If you have set up your list of build targets, this is as simple as enabling workflows in the GitHub repository settings: -![Repo Settings](https://i.imgur.com/EVkxOt1.png) +![Repo Settings](/EVkxOt1.png) Any push will result in compilation of all configured builds, and once completed a new release containing the newly-minted firmware files will be created on GitHub, which you can subsequently download and flash to your keyboard: -![Releases](https://i.imgur.com/zmwOL5P.png) +![Releases](/zmwOL5P.png) diff --git a/docs/other_eclipse.md b/docs/other_eclipse.md index 5a0228efce..1745f08932 100644 --- a/docs/other_eclipse.md +++ b/docs/other_eclipse.md @@ -66,7 +66,7 @@ Once both plugins are installed, restart Eclipse as prompted. * Select the _AVR-GCC Toolchain_; * Keep the rest as-is and click Finish - ![Importing QMK in Eclipse](https://i.imgur.com/oHYR1yW.png) + ![Importing QMK in Eclipse](/oHYR1yW.png) 3. The project will now be loaded and indexed. Its files can be browsed easily through the _Project Explorer_ on the left. diff --git a/docs/other_vscode.md b/docs/other_vscode.md index 0b39746a6e..3bd7e3f44f 100644 --- a/docs/other_vscode.md +++ b/docs/other_vscode.md @@ -174,7 +174,7 @@ You'll need to perform some modifications to the file above in order to target y * `"armToolchainPath"`: _[Optional]_ The path to the ARM toolchain installation location on Windows -- under normal circumstances Linux/macOS will auto-detect this correctly and will not need to be specified. ::: warning -Windows builds of QMK Firmware are generally compiled using QMK MSYS, and the path to gdb's location (`C:\\QMK_MSYS\\mingw64\\bin`) needs to be specified under `armToolchainPath` for it to be detected. You may also need to change the GDB path to point at `C:\\QMK_MSYS\\mingw64\\bin\\gdb-multiarch.exe` in the VSCode Cortex-Debug user settings: ![VSCode Settings](https://i.imgur.com/EGrPM1L.png) +Windows builds of QMK Firmware are generally compiled using QMK MSYS, and the path to gdb's location (`C:\\QMK_MSYS\\mingw64\\bin`) needs to be specified under `armToolchainPath` for it to be detected. You may also need to change the GDB path to point at `C:\\QMK_MSYS\\mingw64\\bin\\gdb-multiarch.exe` in the VSCode Cortex-Debug user settings: ![VSCode Settings](/EGrPM1L.png) ::: The following modifications must be made to the keyboard's `rules.mk` file to enable debug information and disable optimisations -- this will ensure breakpoints and variable viewing works correctly: diff --git a/docs/platformdev_blackpill_f4x1.md b/docs/platformdev_blackpill_f4x1.md index a8d21c255c..e9af534e58 100644 --- a/docs/platformdev_blackpill_f4x1.md +++ b/docs/platformdev_blackpill_f4x1.md @@ -7,7 +7,7 @@ The WeAct Blackpill is a popular choice for handwired boards, as it offers a pow * [WeAct GitHub for F4x1 Blackpill](https://github.com/WeActStudio/WeActStudio.MiniSTM32F4x1) * Unfortunately, due to supply issues official WeAct F411 based blackpills may not be available. -![Blackpill F411](https://i.imgur.com/nCgeolTh.png) +![Blackpill F411](/nCgeolTh.png) ## Pin Usage Limitations diff --git a/docs/platformdev_proton_c.md b/docs/platformdev_proton_c.md index 3afec893fa..16eeb7b28a 100644 --- a/docs/platformdev_proton_c.md +++ b/docs/platformdev_proton_c.md @@ -2,7 +2,7 @@ The Proton C is an Arm STM32F303xC based drop-in replacement for the Pro Micro. -Proton C +Proton C #### Features diff --git a/docs/platformdev_rp2040.md b/docs/platformdev_rp2040.md index 1269ffeeb5..346cae58dc 100644 --- a/docs/platformdev_rp2040.md +++ b/docs/platformdev_rp2040.md @@ -17,8 +17,8 @@ The following table shows the current driver status for peripherals on RP2040 MC ## GPIO -Raspberry Pi Pico pinout -Sparkfun RP2040 Pro Micro pinout +Raspberry Pi Pico pinout +Sparkfun RP2040 Pro Micro pinout ::: warning The GPIO pins of the RP2040 are not 5V tolerant! diff --git a/docs/public/0GNIYY0.jpg b/docs/public/0GNIYY0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ccf2f5dcbedf4853d34ed86762c0863342f981ef GIT binary patch literal 97616 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 literal 0 HcmV?d00001 diff --git a/docs/public/1TPAhrs.jpg b/docs/public/1TPAhrs.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1629c8f3a5c6f4f635145213bf808d0e33b6a7a6 GIT binary patch literal 117667 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 w$;`8Co75Pr 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%0DW#kDWQXy3cIuT!!%8 zx%(&WvF5U2y9&UYMtM)y?eRr@`WS(O8#leHT+}we}q9-fRTZTk(rT$ ziJ1`u7#J8C1QiV(0}}-b8z(N@_~E0$MTLV89TEZx8vcWBCS+t_v{(Gk@Wo|~!=v0z z??ZQ@PMa6(F+LL}xmqeZqSWKaL7$(#!QKm`zqAIVc1L6gTv>BmwzJss`IdlkpLv`O zUmJg3%eYcI@jt`eKl;MYch0w7qnn}bW+2Sa7`EoQo)EW)yrf63)|N*xy3)Qs5`?#Y zFnYXCa>qS}?|u*KxwHQ>R8?^VGqPM#-@{-2?;j5$y*y!FM3v*N$>!a7Rq=fBa^ z{?G70Mf%8B7Vp51^K0#H)qeT?^84lY%WwMcn4il3W%&(fU(pPOTk8MreOr;E-ILQL zbwr0@X2cP$M~tCbcFGzpxl?18UA%MV&Z^95)*gu_TNG9q3OC*Vcj@WTTiJreyi;FF zK6g87l`nc|%MzX&vWrhgbi2rGx}$$xamk^HvC_W&S+bv=o}T`nVZ+X1|7^*wdy3s5 z1}_Z07;^0FjVSL}ePJf&5xx5^mR2s3T#KGHZ|iuwcYn>7*w)k2^*7XiwKaF~<2Y!$ z@xi(HQ>FWY*M6FLb?vu}!O?ek4P??I%&tbR2sFPpRqe&8H+@>FUp8>uc6v9#BoRYB% z5>|(H#~wPnPWkd0iz$zkCNpl2yU26Lt0OTsx1YoN)wE58HxzY_C`TK6E}HFqswZ;G zF>erw8;EQ^5Ub;(8MMmm!kpJPFYP_{N9w3t=xVX}U!gB29NIhS{k6Nw zLRY!3E&KK8(kast&b(RX)-sK^5`5<-PcJUxxpT>E%C?C)x|YfZvIU(PJGOXrHt!2@ zX4`b?#cqjJwkBTd#7YKpZ$%1$xIR26Bo7yJPA~A>($)L$L?Q2)%mgi+y%)EN zOf8)EgX3A1-?>hmhUbE{&W%T2s4h!#vXXnr9HJw5?_)}~oL!pz-@mof|1%t!x9?!@ z$44{T&amzci&*E*v+8L?#-?58CT$LhJfF{@_*>*sR+(Co*;jQdDA;eH}l4Q7Pjvy?@2k_rC9aUw!ZUR?|DDotfAC!UNaZH?sdp>}#7Edww?>-02U8j_NY` zg_tKX7>#1ieeHMGIp7x(1GXEb>zMf^bWP$GpR60&n_it+?zV0r%hkxk5qG1l{Qfi4TV6V| z?R{@VUg6q;4Axt*zL{35n(7>PF8lUsWns>xxG8Iw8S9rGIkqe3S*)tVRbhi&8w5-@ z9Et9AG=HbpXwth*E%EGrn@OH3lRU1O_AN2AIQdlj!}LE9f2qP8cXdyW}&d<=$$?foj|ew3_)AkJj|pIytrR0Iy*UF;q{fbUkG1L<8XDF zJ3%OPldJ-(gUs3HxZ{t${rh}rL4bm`sHuLi(9F1^v8T*X{3OvzxnY#C#C zUw($PS&P^cPT5UI61mw~%)d0IoP6H@^hN#0SKrlF{q~RTOf`5F6nNiw$Fezef`RLQasb{g*-P|v9t4P7W3Q0L#8uy5ZbE()ex&a}Sa?&


9_Qgo_lU%q;zFzQOS&GfW#qb)FB~8*S;pHJ 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 N_$xpApYi{10sv>IqMQH# literal 0 HcmV?d00001 diff --git a/docs/public/2wUZNWk.png b/docs/public/2wUZNWk.png new file mode 100644 index 0000000000000000000000000000000000000000..a1e5355a4c33fff6f6a6012b814a4901e2f0fa8c GIT binary patch literal 7734 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 literal 0 HcmV?d00001 diff --git a/docs/public/3RrSjzW.png b/docs/public/3RrSjzW.png new file mode 100644 index 0000000000000000000000000000000000000000..af17f0c759103f2318105529d396976867ded790 GIT binary patch literal 10544 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 M)78&qol`;+0I8P>TmS$7 literal 0 HcmV?d00001 diff --git a/docs/public/4wjJzBU.png b/docs/public/4wjJzBU.png new file mode 100644 index 0000000000000000000000000000000000000000..c152bc0a236fbadaa239027cf9cdc94269110ca3 GIT binary patch literal 4051 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≦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

#^{@(=Ur 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

?5^YlKDg|4j*=68P^t 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 B5iS4# literal 0 HcmV?d00001 diff --git a/docs/public/AvXZShD.jpg b/docs/public/AvXZShD.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc7272e1d6703715d27c765771fb306c29d4ab59 GIT binary patch literal 94653 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

e+6Hn1(oqOJMZ6V9z@~$cI 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 literal 0 HcmV?d00001 diff --git a/docs/public/BmAvoUC.png b/docs/public/BmAvoUC.png new file mode 100644 index 0000000000000000000000000000000000000000..f44fd1ce5c3d903fffcbb5915ac382fff20de249 GIT binary patch literal 17960 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 z z9Wl}E2Y6>QCOnnY)#5vEn7TPcy#0Bl&1^>WL}LV6xGB7?$=ibK2)kpA0J=O5eu@l- od*cs<%yMS|dGx~@8hD=kXKrYJ5UQr4wh5%))78&qol`;+0H9!WPyhe` literal 0 HcmV?d00001 diff --git a/docs/public/Bu4mk9m.png b/docs/public/Bu4mk9m.png new file mode 100644 index 0000000000000000000000000000000000000000..e80e6b751ea1113e0b641c96500dc00745d2a36d GIT binary patch literal 3447 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 literal 0 HcmV?d00001 diff --git a/docs/public/CWYmsk8.png b/docs/public/CWYmsk8.png new file mode 100644 index 0000000000000000000000000000000000000000..2d1f186cef8bd9aff408e1b3dd9cb833c0763fb2 GIT binary patch literal 31676 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 literal 0 HcmV?d00001 diff --git a/docs/public/CnASmPo.jpg b/docs/public/CnASmPo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..128cc806a1821379906c9f165d41fe14d0b25bd5 GIT binary patch literal 289270 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 ZeM>v!7A`H{d$8n&&Ka)oNA>@20s!0Smcjr4 literal 0 HcmV?d00001 diff --git a/docs/public/DkEhj9x.png b/docs/public/DkEhj9x.png new file mode 100644 index 0000000000000000000000000000000000000000..6a31d1f1d20be30848620a97884a827e54d3c504 GIT binary patch literal 8998 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 Jmvv4FO#nAIJBR=P literal 0 HcmV?d00001 diff --git a/docs/public/DxMHpJ8.jpg b/docs/public/DxMHpJ8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..179c2b6b69d68aaa5914b839d7dd0977324aa5b4 GIT binary patch literal 32520 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

0}nm~lhL?{xd*%*;C5tp@yDVdCcH!tu6C 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 L)z4*}Q$iB}{|7a! literal 0 HcmV?d00001 diff --git a/docs/public/EVkxOt1.png b/docs/public/EVkxOt1.png new file mode 100644 index 0000000000000000000000000000000000000000..56f862ccb7f578c9db8be3f9a7c085d5aaa0f622 GIT binary patch literal 65661 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

e|oF0 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 VdGBslW?*1o@O1TaS?83{1ORr5U047B literal 0 HcmV?d00001 diff --git a/docs/public/HL5DP8H.png b/docs/public/HL5DP8H.png new file mode 100644 index 0000000000000000000000000000000000000000..523d59f98d436b42465469a3cf0c2133a25fe3b8 GIT binary patch literal 11250 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 P3=9mOu6{1-oD!M_Jz-#Ac=P7{ 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 ZXVavnL&E+Z8Zr-Dxx~}=q#XIUK6FR@ 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 literal 0 HcmV?d00001 diff --git a/docs/public/QeY6kMQ.png b/docs/public/QeY6kMQ.png new file mode 100644 index 0000000000000000000000000000000000000000..b990847c1c50630ba22993cc84782222ed04ef40 GIT binary patch literal 3572 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 literal 0 HcmV?d00001 diff --git a/docs/public/QiA3ta6.jpg b/docs/public/QiA3ta6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a10b4165c4c30c9d550ed8c2e67c34776ef15487 GIT binary patch literal 164162 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

HiG=(tO*F=QAI^ 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´OOT;!`HJm@bz&|Kai@>uuw6X%i04Ayy95of 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 literal 0 HcmV?d00001 diff --git a/docs/public/RFyNMlL.jpg b/docs/public/RFyNMlL.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1cfd86f6ef2e39eda9f2a2759e8a54860c0007b6 GIT binary patch literal 166582 zcmex=uvj7-cdZ0!G!Fi0^nGB7iu$b#fp+5X>R;9+KD zU=m;!U|?W;T$Wrlu_xt;eRPXia*C$eX4x-_XPe#q&wQ0QaKX>*)jCDa15;u;tXCdi za?YMh){p7tq(fUKOx@b@In9dElQZ72bmlxkza`TSxj8d_b2eBlWwJ8sbe5suMQ7JA z&zYBgv47o>dG>U`+s#@g%VgHi`y-Wiv;FLvx)QO4KsTx>7Hp=vgk z_GBjo+p|0Rn#>bRS*FcQiz=2bT%!DdvpG60IL_SJlJ~*i9|kOKOOzY7U5^bcJ^1BY z&zgJeC6*Wv+FS~KG+S*+SQg=(v-I^1vo0HJ_ z;@HE3)|%Q=g{Gd5nW(#?WXc{DPZjH<=cdoL6Ip2`>2rZ++d{>}9RVj5b!QyC^x1{+ z#g4|gK1~W1#flToO_;P{t*D4z_uL&V{0)+pBE9=J*z~LCTK3)u;_jKq;P*!(-NU;~ zxQ^wK1^)`mrmCZJ4gS?kFqJ#Pr(}6NrTIWtim{-~f=NMs&J0J|cAT4I#lGfH>NS1E z%~Am#4L_BVg(CW#Z0@b{yL0chRm#2|6}72tdg}4AQ#^d0tT?p1Y=is4b`9GKgRf8O zZ1(#~*%gHyx0mJH&hI|={ELfi*VfKl>$_Qg9nZCA6JttF?0i*pGFPtKn{A?bOSga9 z>xai?Iy@=S^+@+opXlJ^al7+|=fz8(RqlvQ(p{;j(s`uMY0892&f2?-ZLDRUrlw3f z^GeR;+Ev3v%Nu%|%~+?z?6-Mfy^{IDhor7PMMs3>G;$%PtMzgEgM!&T5+0*J4QuE zt3_q4cJ7YD3%dI?%2arFEy>hkWp$mbRrJg`!fSHUsa#{m3stAHJW5xwvNud(TRY>( z7M~LVal3Mt9obR0)LQGsq(mMCVZV%<1@Gq1+V3lE{7rY~e7)mkQ{sYFT`5t_-#vT! z+$pPGy}YWGzphhN=u+3^^N}T)bAG&4HF_!4Hs#2=oY=I?iMigM_y=wM?ks{J`XO!)2|MrR}f0)2rn@Ck2-GEa*uxF%NG{ z;}x87aoOIP-wzecwNg(FbBy$zG~J0i%<|#k8^y&rvo>e#JGpGphoHo%zS}#?m?U4m z44q!_w&GOO_ve?R-_9+QZh2R^+{}92<@MrB&mHog`ITxvUa-Sjz-bZF>3h>%S8dn5 zVVxP&-S_5E=3Iu-Wm}lehcDup%QH!g_v4gF0Y0yMCNHxzT`afJHSmd=ii(cf64lKT z!K!QxoiRacSKM#C;TaQDB6irsi(6L7;qH?H=}+8=m)zYW_zpbL)#E7h@H@izt9YSG zlfj`H=G~k!zrOI_vF?A-v3skTr^cp57q1_2d-3$m&&sH2ao6@%Y)juY=iXd_$vef% zopw!G?q_Xy#?ta;e7N5&!&g_O*g6-6UI_c>`t8x#^?I*9Z;)%Azi-y}{>!na&&EeT zIumwc!>m(Bm6~UESzLR$^WS;4PRGns@hW9uKjoHf<$iEhC39Xj_j9|sGVi@Fy*7T= z(=v%g>}ZXi-x7mK&gzM3Qo^1pnIeZbTh8k})NdM;51h&)l1TD zPUQ61S(p50ML?N|%7lrA3kAwhty8Z|-pKI8DgSBgyuG(RZh5`i-tG0}=U1!J*R51hPifz_I^Ft2@ll!SmqKcd zj``F|-*`}~^w?p^G0EA{p*QE0w@l=YjSuuH&8~X4=G^mjSJvH@Wj^{PF?*fIy^qUe zmKsOTo0;@#{j;Ped)51=n|yom>hpt&vLhw8e@^PKT@v;scdq0TPj!JwH+)ykUa;s# z?^?;8bCbnOjLNh&^L<>s(fj1el$LD);rp2c8QQjVF%Lg=FIy_?gS6dawnaC4jh>%)dNbkgo$va)vQyIi+Wf9w zbPHV&ksDH0QTA?K$cx2!OorR81)W}d*(O%adAEw~l_l8|i>j!i z*ALRphHWpc?7HapFysrvFPr5$>~;4lKR@VEnAbCFV)ikit#cbw4KrFhFGXqv7L`og z{ba&PO{0<-du=XR_Hc6E=yK0LG%-c;@Pb_;Y=#aE7pm@f-Rg~eyTrX=4&%xrn-)oM zo?4Qd@a+L zOV5s-@v85!)y}-PJes5Ew*wVP|vX15uyuFunt)$IBnAIQG((a#palXZzz zo9^EHyjSsDdCB!9x0^Fl^rjr%yy218gGSbQACqpi`Au4^bv))jgR$Yw&oPh1Lf(XL zmTe76QE_Q7m?wDLu_f^V&+N#Fv7Xz7oR@e=FE`@uv}5oTW)qS*GE-6e45QV<028)( zj@CCqcMInHDsQ)*JpbZpX}6~@+g~1$+A8ENcf4n@;r#h(%F9odr7jD5b#~iau~_a+ zueSwey;KZmx_{<=M(KLS-3}VtBQu!q{M(du)x6^Aem~C@3E^RLO5$6()_(f()F;~C z&^T1~8QTSQKjyOLeeT~2o@HLX`kpx~_OI4Dp5@aDdeyxz?6!8(wOX^#Y>QHt_N-Z- zzdQck7jyGp%9ji89$HUus$8dWeYVSzGY=*`{&FO4LduMjN1JB6`nl(fwTjAwZOIB; zMZ0`vyQY{w@bIcSquwxwN%Mfmj6<(KE>wA}yW{W!uXIBzCztO{UCCmSd}q|t`5RtX zemcEr=epM$3ae}D^3vDOH}0P-uzaiQyPs7#FIB^BiXCn)=R41-d7?H_e|gyLPxq(C ztgQ4?y!Eg)&gNFMZXetA+!8~>tHr;L+%}7tJFRbV9%qD6R8dLHy-wefiMQKl?~7c& zZf;2Ue$`F#o`Q4Z{3biT^i69nE4jBzXZ7S4Cnr2VdDir~fAGnG-{k_kN6oT7oSZin=$DD>Emb&i z>uf`LV!>u!-IH%Gq>EOZk#{xyD&)0$$s{F}3BDB{v(D%J3l!S(rf|QjUY*J1HAjSF z^ZWW{txjRPv-ak3r>i^poJDus{rvjALZzSIUYl0iT&s_tieF}JOW1P1*!Sk^Hre0l zi{`wZEqF%iWB;_Ms-0%3-Djp5&#Q@dm9R;!e7TtAS;lemZFdZ|yLshZ;$BvEZ{@bR z`kXPaiOde}1sb6L@)-OCViNDdnWXXi5+pb+2mkQ>}%y&#l)SRna8gB8nMrh8K;_L49=8|69ZX2@i zylnDP*ZKJL+Z*S5Ec8CQrfXuHli-|#Nw1Q(i>vI4vHH+?X>;cB(jD(+<-D>~?l|z< zuz$T;EZJW8r3(J2E z4CjtI7B`tEdU&22Ske^;}zG}L8UagAp%bgMu zr_U)1+874tIGo$rw(hs_eX*r3H*d3@F1{T-so~A9^7UtqFP*x0qC%eNz5?0h!l@CF zr9ZFVpZ4n3x}MmbRo1#kH_HddUg)cKRTa;;v24REkKnb(eI_(Zuln<+=FRHe&%WHB z?6fz7_gs&rqUxRlll1SYvb0$$I2x|-yl{TO364uV&D%b!25DxUQVEFE-61enQK{*W z;h_qqNkZ2r-1N;cUZR@W6q>V4O(3i0Kf_wyi;dQ%DQ~AIc`7k-a9uyQY4mc=z6&EH(FnX;)}?~u(+uV1dO%btDXF1%}Tt8!ZE)$Zl9{?7cC{%T+K zW8X)oZMF+Pd$)d0{nWdY{p|WCu&(vEe(AFDndpnbH5>f4pN_cid(k8>p=`N>hNfmy zSNqcE&Az|Vl=l95ALkq&dg^$t^@fS-7r2{s8NKqH5_wP0%FoJg+LV;lUOUe+Grh5l zTQ9U%vLydm_UlSvj{{HIy6aesN{pg>+#O{Zm1a9G`N+e=(Iw={IH`-D$%e%<-yrwM z)2S*dOAJ4-9q4-1D>=ERQ;1pojEa@i6noz@lh3dEn95REt0}!)>eZX6c_&}a>XBZo z?myvjTlb|$lBLNT8CBWSw^koKT^IAStKg9=FPHg)ZbI$hI=170@4J)R_?#W(zGUu_N%hCL^#aFqxWgh>k%a6EwKw9qH zq<=xz?H#ln)BBem%rr|{cegcbqPIkSG+v8tLDait%(aN9g~tG zI3`OxR(A>yk!9cJ@H@-Nlk*g}>YgIetudm!x41N}h#NRFD{5z{*Hxc+>N@k;*K4+6 zpR03DzFe(x()oMa<=MPqS1&*H_O)8QZf@oFr%OxD?K%-Fx%}eEEryEL1rgpV$~~Ql z<)8kV-MMz(JD=^5$;VgMTl(WQcI=MY`c;VxgFU>)?8){}tCbgRf37|0yXB&(R6on@ zu7%H)m#Zd+olYv-eVzZx!&jBfrk{@Vg_IX2nJB02S^QMgpt`KO!fu+#i{o{E>o!c- zKmTIozcsgu@ArpgJHI-)%hWpb%7B zwmZf0g*pFh(~VOfSIuphDRlE}=*7pgq(j7B{FOfW*LeQEg|SOF&Y$kR{?X>I!CPi~ z9hKPPCVX-Kl)q_CcjfH5ALmTAX7UQ1a9?GDedw9_@?9Pl;-Lo~B@4WqEBvOk@R{>lY=1#t_A zW%u9Q>~6cQV7p0ryi-u-_3W(4uB(mo7ryzqiRDxNe%lGVS+;N9B;i?g(&CV2DL22K z)Fhb~!Vjbsp3T`7=B4ElxK`njvisb6mFoFIu8ieDy+4A4f+S94b6&_%Tx{jMX~(MS z7we9sa@X8nyLRp@l^KaH&Y34?F4f&}Kc(b)*si&eUwnf;o(!3i|NPyCvaa&S+Y4TO z%h*tN^P=m^&ON2g-#(sva^gVoTfKnqRkGSN>H{745p~XY*P7?xf%D zPTbKuH>ar>KD=`TW*&9BE44ng3PDO7w2p|ce{XZU4yPwLR+%IpS(i?W!=-T=jizK+!OT|KuzdvVUNoUnU** z+f|Tq-(#+(UBxxOd4W;JW_PB4+4J#UeQ-_Y_USh-E_lZMliA|Zp8pK-b1QAu*K8JC z`+DOx-@{+3s`lmc%?n>tICFFKjJPV3(hqyyoSN|^;rzo_;Vggl-S&O9KKc1Ev(i8J z?O)k^2+fpT)|X%UjoC2M$?tK)U5T%^^rx0x&Sj}MySwsM-s!y9HA|-)j$SvP%WrLW zbZwR4x6rTAzPHsj-ufW-!d2$ghi|W!eT}{Ol&AWYj^80qF1HXvZgpc;BQh|;>+~4td^^iZ+@0jS)p5q+T1zce0KX3`-a=EELt_^ zS4qlp+g0|4p7DmV5nHFSU%uQl^DuAaw=fB*!H)|=c%)jM%$=+Z7+-E!>!VIRb}_v?{2*nez;CL zYB%qNsjG`7EHyr~^V^?i7r$@G%-d79ciz5S{rp4A`;OoIbJ%Xfwqs}ZR$6Z@T`YZg z{lPcBP4?^OIkWv=iW3Q<;;x zc^RYl>x49|7oIoy76z51T(6w*!aB!3)UT>M$B1FRe*UVSC*7A%KVT6TeDPHG$F9AVn~Fc37Jv1s>A|mMr51at z9Bkk1bI{XX_w4KEuTR?E8VhfBxb;PN4cndF@3-xEe(mM5t&ez`FHf45{`x~=Os?O( z)e~QCy1)GDfyl@=JJx)E`0CJY?e#H>zOE5Zcocizq+N_4C@EH3i2G~FfS;c56h zx705G`seh@*H$&}-tye^_I;?aDZP`2#qHQs+bv;dLQ+0G-EFxs@@v9sS6k^2msqPG z&)S8~ZdWx6EtA{3dEJ@4th>cdoO_nOe{$9;kSNLH}g+_Hyx z8R7nNJwKZx4Zd864?LT9t@UAQjJ?PA;3^Nf&1Lu4b=1@CCTUNyzy5sEjBjmz-CZw? z-fxJEne%UtX}1E;@kR6Yb1wUMdAiBhi^7$Yyysugz5DZLuVv-NV=Nzk|Ja;)asBj$ z`H8)80=pD1pYuCVrGKu1K`O9RlT*dW!+YWLmYJ-FcWEk_Ijgk1i`Y}|er?Wn&xL$5 zkNo_?)yrdRu9AMSJ1bVF?aZu+;uUk4ZR_%{f0isse*LL;&XfL2$DU6rz4mmrY01sm zs-dT@hh6qoIxl;54!6$d^@8{6{+I@ReEpzzs_p9KdA=6a!TW8myqG$5YyQk_cbAL0 z8hA~=I-euA=G}acqQF?=(^i+`$~R4yTwdg(Ja6UNMQb%LpPkj$`sx0Z)eBF&67rWl z{p*(W=G6y3HSTf=Uc2HZ?@rH~Ne;@Q>--nY&HVg&xu&i7vnSJLRojTXTRXM-(>KXC zf&m-eY1T<=Ze&~f^6vIodS?F;6{lqE3whG}*QV%l%-Vj>vtJUrgctNlYbwlbnIvh= zIX}Si+hnHc2@fw;Tr6MxQ+`S7V~yU_un8OIlx&{9w@jk^;T`o9YZcej^Wsk)ef+#{ z`{d)x_0zkzEZA#uV{T(n*j-+x0)KYb?ekw2e|gg!JH7glQD@cNWei_zChGOiH9tRH zv!zI~gYC_tTlTTb7w*zM`Xx&8UF&P!(!IN#h2|7@D4F}L>ppc-Kyulnst4AVKe{hh zKW{Cl%oRAhsAHp-7taOl(#l;wtz{z1lb6{n4J&)>@?ECht#H9TS>qe_e5V}+4Y%`0 z`JJ7=aCe$_wn>W8w=>2f>;BB#>)rld|9Npt`t}cEeP(}t6?~JrmAl@pOO<1r;Lf*i zf8LeKeEH=G+sliI|B9DdPEAcpPgGA-X=>W~L{cSB;zY?C�%e^Cb$tn9T9kTlhKC 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

8M_sqRbO>JlE?H-SvVGx89|O*` z&A%j9#_}FsZE^NYFyqe4or%%sjHR}%Q(2c@!Sr&Kc=+`u+b3db_gWtwd~LAs!l`+C zldPM&6TTS!sV(GPbNXm&sd)G2&hvurW0XZ^9$%x7!m8CTZ+OON;d_mXS*yR_GhMrI z)$`@28EV`%@2`$v?)TWabKkG$M%zTLoMYC>id?qY>#b<{)Nn?jqqpww;jZjtQ8?W! zAkZ3qYX9vXxlioN?4D)>9s1yuSouS&cIDaMr%l9qfA+Dq=`VDDqExH5F;G|Ug-rD$ z<`~_w&&;p$XW1qkcHoM&sNDKdr{S7pM(kdmUtR(a z7JbdD-q3x8y`=Vw(2H-$*OFF5|Gg5JVYW+tS^?j@IY$gN7QVQDZsE$L);oqqQo21% z*P^thFNs{s>LGosW&@wWBaOG`H5}J`uIqKUC|85W0x?sxuYNMqJ`aiBI@&dt!=Y5JEdYBL)r`et#&35j-mJLJgr zdsox@v@PC?T%?ZnTwhv!N~b`cOaHUXibW6gew99Zyo~X*tnYz^ea)*cNy-%*iwj|%y3pQ}qNuWb5N)*fD~aC-sElS;n1iAy(#MxU#8>M7XFe7WUJLT>Z43cl-s zQF}XGWvjkUbC5dSc>eb-j)kc!lS-?-^jK17m(H8n^|fld(2u=o@m0qo9i)qXbh1vI z=*Oqs)x*}5J3Eh|Iqz}N*B@Jw#}9J}vj^VZ{-@PT ztM68Cs7P^}-?0kSG)6^j?@f++gX#)n9g=U*jdDoSv~*Z_D3Z zn+2EXN_HH+4){cHH)tL%^U zCz(u?OYTQ@Pk%C(^+0jTqs~~Jiv}B4zf9S8VXn@U<e!FdPU%y9N%G``zS>%`&j$_oltk8?jGhJ(=Hj@YT7t|_bdnV8{#EuR@FzAZ+yKnc#hh)9ommC zMNau%QGeqA)1rpw+h@9Dh+Z!Vzh-kNF>8 z({FvU%OauNL(@D%wM9!e<1t&7Lk?Fcb~4Gd1d#WpN)>md_Sgb zSj=#F{W?`oPW2;8`BpBuqI}Cp@#5#`{(AjKX|)r+yw?x;=(XU>A0KBUtrxy^YIO_> z*R<|@U40}VQYRyv>7$N^XXwS^ge0c3I@5aO1wV)W5S_T3Z@u8koN2r|Zr^8y1<%lG zEz~iZeo(PL=%c_-C*1>lbJl0ZT=czq>9Br5i-&K2VXmE`*|ip)HybC5T+@2W;TQJz zoz`5(1q$iglBfSI=@B@txaIKD$pHt}q#ISo*(D0jUs|wl`UglDflV?4)+mPd>%YD+~anS~0X+1%iF!$>0J&HS|u4>);F{e@Dn5BG1fqF(Gqtf1l zKb!sMKiZgkZGl^N@0WXjta=n2O~h`VGv#<_ zK0p7R=K$k@s4dm!l%G|!sOaV&+4Ztwh0>O}yO+&+p0Yf9b4|ti{?5KFQQs8Ht~`4k zw43$w<0UWG+&^MG;ZY2;$mgncm-D84-E)9v3S+q17`U`p_5bL<<6&}+Z9X2B z%Odl-H$F--k-72J{5Kxb;$qjE_fFJ}5&QJ#^Gl=RkgVhD<)1_!-?PW??=f{2iL)_G ziSbIW{`em1+VMw0!GzIQdwu4#V^*cjWfKm>B(Li~;5QM-XMEtjBYtmjmVj+$ zykKV7F7c)imq%s6$1>An&g52X(~Vhs?Qin7JH4i^7hi{(SQxl^v0SVPOMSV1@~-`_ znJzRJZP~j?v~tzDkLQIl&&w^_vF6y;oW*OUe>L3kVaqZ8YC8W&+79b@&#+UehClx^ zsJdi+zg~K|v#(+2chUQ9554D}t2xvhyXx!jGi6E|tT$r!b8{~5D4V-^c~o1FNZ6OE zr#n1E+F4exPkb-HEb<`aSLi9#X>X1k)8?6D_4&*qe$~=l`u5>LZ&;^Km2@nyapuU= z+dSKL#=;BiCZV6|l+AdGTW=M8f2&z_C2H>EXP1d#T_dt>mS||C@SH~$*EG1xeJWQlFX2s?T^M-c>s8{*ewUkv@0C%WMHq)^A{(lc0| z&2->Z^EtdAQ6f6KB0^;C(VQ~%>SaoO**BNo^ZB{c(Sc{bb&}FGVZj5@bIv@K`aM;$ zdUMfcLz@(dnoGxdLiht$uK$)`Gke#*nY%pqefZ~FIqTJbhO|W=+b$fMkvz>*eN%Jj z%Yv3=(^IE@ICnv4dFcCqlPfE`?fPeiB(9kgH{JT9c=VSJz9U6>qV6BNpINa@+__u- zOn=6+g5#Y>xKC~FoXIO2Sa);kC5ghKZn2|P-UniX9v!w1W?Py2?LWh2$KAy*&HeQG znq}5z30-TmNegE%zigyMaV_3z|9EwCh3e$A&MJ-X(>~9y5WDK!{huLIf9;m?imop@ z9X<_PS8>NDsf17XczlDC#IuRf2CwTS&ag|0h~&oHc&N?!TJ*J6hG}|aiFDMP3*H56 z%@-ca99dm1u{9uJx!LP&{}kdDz2JGk^Y_@kpvbxZ9wl<^P+ZWfeD(ZS2?d`3jg4JW z_hcqbQccW}K6u<}#*y?Grvr{*h8?oc=B$aiuePW`a_YM6-B0XH&9>*MS(nY&vSE$B zPHgqY*5}u^J?_d_d-fai(bz{J`+UVH?w;E^b%3mJq6=Jq z*T3V?u?+W!6uYnfyvN;2?&e#$#ezXexvwME8(i>{Y?{5l$L7oQrYldD9h?^RvGQlr zy4Bl1z7JLp=x5h&ogy*6Twdo-J^TCz-5%3ky8U|2Vv{9NzGBU)mD_Ibf4E*Fz3KVG z#ORA$46oPT*^rn0?qkXB=UcK@=ja~&`F%QX)!B+iCI1X%@1F7T64|ybOzg4KqSBQK zAJ_ewzxYn2Lc<)szphec`_%M;4J{Vf?O*e7)t$_@g}zJ-ayfs} zEF%&-4qd5c{B*E|HVG+8E-u#Xx9?i*b>n)b!!OLwxPo4&1f+u~@0kY!iyC#mV|x$DHr=uo+6|4lE(hT{8uJsc|< zlo!3fw)v~b+P5sa>+B@t`Mh7ro%r6kGJ{3+`un%XxjZUO-p5)#(`0)zrM+?Ut>|#J zntxZ4b)D{U9k#6wN#wY-!_!GNcg}^1rr2PcikCAtKNAcMzg>C3cfLWUt%8eL&P&$G z0+xCcKF7o?voN!8SC_jt;iK?u{-36oZ8q8bJAC!yjrx*_j$|rED?5^9wxr)Y~eMVliecv-FK%(F8dwgn$}V^ zzdTGJXVFu~vp&)rcni;Y#NM-e@MGGBiya5O?6xx}thn*}uUqys!$qPJXT#^#Z(v() zQap3Qp$GStzF3>3;J2tPA~>w>qu!DHv!6v`r44?a6=4Y3xnSBh^=Af8dW)X?EJ)wU zu&}Y=b)Y4y@a*MB!`CoJRDbV{th`}(u9^41x`|5tMqgX~f=gq6Z?^e+V8;6LaLK;N z)Y*b(?$2Nm+4^DEuB+eYoaeEQ(GgBP!oGQ0h=%v0g_lF$3vYGd?Owc%O`-Uf?yt=q z^{m#51U)YMaPw-e@jqjKGjdM8;K6J;QJwukoGUtOxtHH6U7x}Cu6>^Ew-~*5)#oH8ES1~HF5ANQ5ewZUfUEy@}i+F*JiwnXe zbD!R1OIs}Q;a+~f(e{a6Pu&?$GYQ_id-c|_ZI@Xio^6x79(S`b%7m}h&t7Q3E4H_d z=W`anlu=gwy31`(LKoZ9t3j)7S-T`?1-NL+Y;&pGzZ`UMUW(sy{A}T%PN^ZQj>Qid!^~H6E9F#?bqQclEKn&o7xw^ML;&YFHn>^#pA)631XPVYE&+Dz=k`-w7rA7?n72xSPjUgI)(>R~Fa z=D1AbdlDR1)0Eqt`+hh6y0Gxne}+6a4If;d%a+_ zklxn+45~+*wI})|UU($c%bjueInVMo8^aCx>+gFyChnDZzte5)CCBB}&-N;^?m2o@ zH(NaP*5j1coAq}Lj=uWkoxfB4$!FK^3Mw9h!Ueqxu;-2-~8&n^m|vFw_zv8RT`Cv8)^-TgZm zt68qkn)`v>nm1*Dn-d6V5L%m$B=WV|}KgwMB$o%}Bk9G@Ojd+>9 z$m)N!_|YGQ8&HBgRF-<}2&|RmS5v@LRd3&L5XW z8>bYPnf^@W;^i}ZZ6dA0`tttQYYaEfar6njRJvqm`=8;&%PMsqH^zq3OWFQ7NSUoH z2t3w5!`)@VvOne189H^Y2YkLK&AT~2@%|b1;G+C>#~8B@1^F>WRnM;+f~i*63`-ZVMlx!i|KEHUa9yQ;4kix|bml|7&N zYORydpY%r=3@7K!Xid<&tV2is)mMF&a-9xryY290 z2G7hLYgb)*y*1&r(2Ipv7wY}dS)ukR;%?in8FHVlN+@lOjM$gJ$+Rf4G&g*&7ZWqP zc4DMW%>k$7UYo9dZ^(PGcD=x@2|k=fEy8?{)3-FUOtl&R<*>Xmx7UFge`W6ftZ{4^r|I!`R$Y_MnBa~+Li zD>v4!IKD#Q&@S7&=QdxbZC$W#`|K|riQ7bZl{g-R8QB{?du_RJD__3;OsA95%T^s0 zbA86)us^Edl30I#W@KaOt-^l}(srxXec-)NaQ~SS>%?bEoi{8fS^sG5^t{Er?Wj*8hAf9L;D|`dWkKz;=V9vHR~VIpTU%b?LS80KTiuzW*$z2=MB0 ze2(_JctC608_VaN9U;4{J05R)nC5e1!^5wKyrUR)ue+NaD!6yo=8A$ZSC+nR49Hwm zJl`YZY}U@*tFx~uRdh+&O|-iabn)Qro&zPP8P>_@cNf3CWOsSXYSH_a_B$9Z9hJH! zpA^8E-c7mo{;$IGoymU z{;##mvb!#uge8 zTiA4j4Zaq>Ei~McBdP7SeqWV)$I=E>o`lTz%LCVL=}6sIeC9xrM*ET(*8dhv=V-68 z7btznTsXy2O7YB!FAQ?p)BDsSkGZ9NzAkw36Tfm{*Fx9llfQTNo)*~}vRghvXzc~> zef1u@6mRj|emPG`%OTTR?&Ipfwf`PP`^KB{EuK(Y`JX`{AlmHm^%+MF&aV8=kd}AQ zW&I}x>ot03)32Q{EV*)S64SBFweCvWE8n}A9%r*&6*BzLmC?C(_{Z^ z+L-8BFlDV}p5wcZCQ4~An+aJ+j*esLZw_e}WsN8y=*}tS+{&|;6BY&=7 z+`g#5eZt+!grmF*8qZ0lnWT3dIUy}CzeKB3B$Tc6Ge@YBjE(&4MyDj+1bOu>5dl}H zuh9R^7|Q(V;HdNOo z0;a7IMYF=pKFycxKdYg?>h*1*O9s-@G(R6%!FbZ>uhy0S47N+BUD>nx@#}l6ix?|k z6kbz`^Ya&Yo3GCA`gwiE#TS<&WK+*gYw3;4+Ph)eDj+fg1mS2+LG_D?(BWIYn@rau8u;rXy3H^qgRJeqzeyvGkV3M^5cEDScrx zo_drta-E)i;C-aeE2YSjm15si!>?R$Sm?4%@%1AWo$#X7_f#Ejo#2ysF5~JLwes8g zT$_@n()X(W87Anly0tyxaCrAVMWIqwYyY;VI~K47-jS~3jDAqCs)I?#f~T!^W1zb* z)4dkmb;gV*OM>`(9=`1TEbY|RA11+?cJBKbrKZKXE$8H2=ghQhG!9x>{UkNJR`tWj zz+;gwFz3dC46lQy_kEnMRZ_W{M~&l*F*Bd``k&gK`z%iXoVJN|`;N8W&uz6h zT3G0;pWh)fM_Gt(a)8pfu>YB+6YP0X3S?PZHS*QTp#%h;iw*QoSTGwqnvMR&ic!u7jc^5Y5 z*ZiD$cJchq$=TI*sYPAVg*y{oFwfc1rPQ!`n}y9ve_^rPD`V>$Q+XLr-+0<#+jQ0> z?R9;?GVzHE^q2lq?9^IxSyoK-RPU<0XW#tevgy8|v^P^?N%|6(v$@B!U(S$fd%rx> zFPd2i&CZbv_^4lV0Q-%}s99en-k)TGUVW{vvd!KRMzEtN_-Fz;eW z=yQo3j-C^vqkf+<6m+<%qs@JD;$G{XPmh*|Z|{-&XuEdHEN$&u?KWNu_eoyPll#5m z@8%QMU#_U>Ys5@@l5joeSog(~_p(0iS|#yp-}GC$Rc-<=o1N}e@vC@LosiOcf0}uw zMwN*9EL#PqT{kvbzyBC0miFNNJoCkN)u-20+?{M<$M!HRI_vDdBm258X)kk*b+?$Q zFlFm`ZgKaB0B`n5rE!e%mzTAY zB_Yb?ncpYbwMH5@v9E64vckkX?f%O@Zaab$U!}i`j-T!`dA8na1HJ_(!#1R^3p3oN zvf;RQ&fY)YW-jg6)Ae}L&zmCef4?qyU!L0Ian(yI184F7`w%bZyS7K_icKUc- zaO#S@ugQ1L8ym1~dAEP(x=Gx}9-LqayS*#F*F8Y9qI=@(%7%(#bJb*f4mL!%22N(% zYj9JzLqYF_^^phf)zyq6UUM~wYoAXNy|dLU(f?Y?#yxAIE`0o~>pSV{vHM3#Sl8>a ze%d2gZFjiZF=W@@D?)*hcAGBktq+(Y+FJGAJ|NkYG1qWMtY+8d#YalBc82aV7tB8G zZh9oBc5Btv?;XrG`%dNCO!bc*23zA_E}{!wUt4sv{qM}BuQnTLu6cfBvFh_4 z=cebnAN}{3`pUeM-fVumLo~(k6tnG_11et0o*(YXeMmZ{srhVy!0Dx8nXuQ)AVll!knq@?8h${7bs4%zNinxawlboZRY#joU2+cxD? z*g7=q@oN9r^;u?3xZwJ@gwmT56Pc5e?YHv#3EpKfz7*jm*jlf%XKL+-1E+em0-s*w zl$Sp9Gx6d%#n@k8XB-vu+t3i=J?7|}(=4X!t z-V1DQS8Q)`y{>rs*Fy{{Sv z%g?H;JK0rzk?~?AmwDy;Y22+xyZN$T$!uiWvHHYkZ;6#f(x>Y*TiaaO?ri%f8JRu( zmZ@lTW`m~Y-P><(J&@wNzStx|KGgH`F|ex+A4i&~f4Q+G?MV**Kc?jD|!((#OnOT!c zlTz+z-(r{8U6nj5&nhzaM*h*RHr(IDIs0Pi`_uO)1+hFVZd>fIS|@$|-)W&6 zR~P?vWk_`S_fJWT>A_(ht#=!mj?F$Bp*U-0Nyzps%3Blb3mb3!a$NOND@uIA5;MLg zY5T0?S~jcy4AaFG6y;>MJn{4U7&__Dd#!abcb^%sOICKCFcGi&&v50$r3I^2HZ%9s zxNfLhrklV1yFqUBk)_JJ)~;TC^i^=`)nsSy549z88jnY;Ugh|sLn)~1`w@|+4@<;W zKASUl*)oYU``=f0URxlvU9)bh*6x?(S0vvv@mM7WUAX$oc-k}L;QE7m9agj6N%)(v zXrun^d$mU$mTnHc`buDu7r(T8){Jh371D7xIw~^+t%I2jBsDbiD&(DS$^LuZAzpb= zCuHa14NFU3ovPw{HJi04X~Chb3_KEzk?O)c@}B~oJ~KU#Z;bgiJzDH`Ugh<7svWcP zk7V5{-ob0i@Z)gSF5$)PcepOrDqVUf9eG7@2e;RG(@PJ+8LzgtKY1;zFYU8g{Q8vh zNjHk8Ri#fd{IHGfr9|~XF3B}_f5v#-D%@PLy-q1Ay7@#}_tPt~qI(`5k8BVLEWRJK zbkl7c`|ci{r^_odYbDrqxP>cp*Y7OJXr6Uq>y8!MSAP8ESFzBS)$p8unxLaYW;$<3 zMfo+u4?lTcoqe#Fb?#E8hi!lLS2H?2nfbCa>B+b5hDV)wJo+Yn^}D7x*JVFxoKX6< z_4Zc@(YO_5&r`G~xL)Qy?zQX1Q77)E^)Z*fcLx4vIFM#7XRBuOOtDmM*}ZD-IdyGM zJ~>$KnYrUy6|;=v1;ft**UNT(X}jR_xNgD<74u1rxBfHKNG~}%OD9uYwCCIOy2gv{ zvkY4{-@kQa@$RiRZ~Zh#%M{((`!Q(7)#QIMDjWP57pLauS7^Oky}QKe``PEkLQ~f< z9(Z=3c#fvn<3KJ2qm+y#aSU! z_+B*S)zOa4YR4ZfTF@fy*fUo*PjH<=Y~wD);zSFXM*>`}D>&P?NA$35JH1QX)Y#iI zH~DhWP2IMMzuul(m}7QjJ@f3K`}H1N3MW3Dm$~92F@>k`=DjubCwoLHv+sU2*E>1) z-!tW@tcz=)ed-JSL{QJ+axoq*-g|kZBmUniY*1TbAF|A2%BBzz=iYGVY zI{*A!`CX&1nCCjb`5gD^nMbPc=o$O6pVTwudCfGxYi4rlb3W!HDxvO;{TBJ*pP|DEP8d0P3avavEVz##L9-M$OCKC2g4ZeA1L<6(Mh zvC}F>!MoPhDv}=#E@^)3yf`>9R{vVs`FCcsSiY>;?^8N^-D8{hyv+=;1vcWf)f+?_ zxr287XPBtC<5=9S+{f1EY?mHTkTS|V>HPJ~<{)Lq&=1kummXQua(m*FSFS2oeOf18 z4ma`A-O0A*{rN4bMjkW68Y-(`&=2<-T5=+z2kauuG6nY%QhWk`+Q%(JH#lrYrEWz zp4B@Kemj!6M>cJVsz9`u$%Dd;Osg3iw}!tnoX?W7nElYkaMzi+D}>K$8-+~O$vU5T zrE~Sht40%lHZP2Ryz>6N6vas2Yg;c{y?)DecaO}}pRHwyiP0rLcUE<1dj-smn5!UZ zawG5OdyO4_ey9H}KK#sjvGeLnHm3I!zjj0x1zy~|Mt60wm*|`jr}M0Z&n&gH7Thdn zRo8mDX=_~K%oyJ_;V}i?3K=@rli&7;7`0z9T-_~lwdVAuix!`*D7`wUGwTn7T-BLh zfiGn=rpy=r&ybw^Zu$Dm37*x)pQ<)6vn=j^C+U5T-y?&`PR6kFlO*@-ER#R#A@}|~ z{@b0fS84CM^S>EPyZ59e7J8Na?g)&&-ccivd+vpd&*$}z{w`nrZ(Y$J_glR;yv`p{ zcPT1m`dj22v^oEU{!B-w5{|a&yyaaD4tIF@=WUuBzGO{dvfQoq2ur(EhOM|yrBeE#qjBmbj-Bsb2q2?bF*)_BS^>{C>>D#sE zXNP3qyLkONL+!YgZvN75r(aWD@Zywt*To&DnpPLHJo=TyJ5|(U_NxPluSFBi9yjzo zC8{VIw&+Drb&bNU-a5AkrSf^*uZmY3-5^@~NU{0DT#L4@dCarcy_#EU?LJ{{v&7@i zT&=ws79SaBXk^>Y|I)TH=7Hu@{yk^j-rb&DdSe>1c0z4Zh@?Q3jymuBkg01wue&+B zi}mWOeZ?|wc`6&GH?AwL{JO$wTZa@|_8fgr&t8R4Rj2F{`#TyTeYMd)yB5gIIkTcD zIyi7q(u>L33AeP%G-UhLj?c~0O|se>~_Zk#e; zjjjH9->5BEfve_}wFlR^>9uyp6dezm&pN(1`C5>gLePrLqs7th-!qq_PRUrFzNNr> zGeZG8yVv0~!ztp8eo}vr<-bbLdU}1<*9gC@TwD=1AFi@{yn=OAU!0A@p|2du^YNN_vqf6t^QBjmRxjNZ zT|d+LkV`DL>4Dp?wM7=@EPuuqy!3P6qK#)8cJG^WUs?Y`gKB5!y^Rt}#ho_pP}<3L zg)7r^M{$L@xKnBzTh>m)P#I1QhHV;3$4;i1{yoaOWBSRn@A`N8O9gL@$DSL~j^na^_)1LHRP zPAPT1eJnv9EtPyYq_KngO%*A8kJp&cGa&XuFZ; zwxF$i$Qkyqz9WIvF1-VC71wL0lw6mFG%cs?L1wIpRY3$OCU8VIv zJlV}+?K10AJWH2)oDKH#opeZz#V2d;&c?7*nZDNRHZfjh_w+5(k}cgAe_C3r+IFhl zdG))j1e1W^?&T$g8uzlqE9y+y1ej(W>r;#Q%-tWlZ~mHNjHj>rnXXuLWc${GmN@CY)I9z@#gl$zg$ic}yx(8(O!k1zy}MGMMfOdtpL_7Fn9yzE_p*|G zpI3a;E7o>kE}g!Ib8Ft*4vQM21$%V=ZF#@qT}PorviLNnQ<`VCud&g(|9;Q9$(Mid z%zeZdaeBd;>ykS&6f7r(%g7r{2rZKEWw2P3d2S)+xrKYOST--HGL92c*Z!euIAx>L z?rrl0UZgUbpFHsX^G9Lx)KAC0_TO&x+QHheZMn!f@`%=kc8=BWpWi5F-kr5@ zdlBEgTiZFGSN}a?a4d(b)T3~UPiLEy220gDhJt0qwXG3`UAP^8ae>pvqie1#H)_0UzRLZal^3r-;@Nw1X15tf z-7$9+@4dp~IDP%BPfojYukMr)nNhrR#(Nf_(>a2#u%nI>#zL^;|W|d6S=+iuD<=Z zo1r@VyMBn1NI7J^$NyZGY9~SrtE~haC3e z+Pm$2LD7zO)*FSF^sc;1Qx`garusG8h6gjw?Bg@MrM7ZQbT;Ed{>p4Af$j5WPP=wr zVpeRqV%FY&royU4b$?H@npArmZ*91BpDphlQ=IOcdxw8dH-5n@9wG7cz3$^P!F&AY zKc1U1MY>CP#g0FpwPyF^ttyzQTq7EI`Nv}Y(x!cflpfe7Y<{SGEhklWS$3b^>%!Hw zPfPyEU5IRAvw1tkHp08Cbp!kE{VO9HPo%!vJ~tok|ytrDPEAuzM%fhnyuw&uZJzlq;@Z-=%~`7^Pj8k>y~nVt@!|UlbH39i ztDV#)Jk${C_$ne-7Vm%jr_Qop31z*Be^+#fTUY56Of9eI%s8?$>%7g+xfP~7zxUf$ zOyk&Mrp55C^z{*j<4LEEt9}VPZ@6YDm;cLYkM&j;II6}3UE5>vHSKS2(gUspk@Siq z`h08~mUfv1md|jlR+uK6z2pYJ&9Mn*;?C=@QxeK_OYA=TJaqnVfvxIh>Y?hh`&j&W zu7^HdnY~8yL)?Br0dYP({gtyiUmgk#_R%a2{l4SUtT{5_FNGXTmfp)&`+j@Ra+ysx z*q^O*dMO^vnzBf1&8`J;`i6ay3zJtKv#(4Lk$aMJLt^(Um9Xw89;S!a{U#lV5!qmJ zE5hQO*R&|bX{|B^m+OtW)pjS`3R@jJGcAW{hfe3zkDRY!7#DrL{G7crc2(2&E!vMb zeN!p}8n+j3KP(dJls12-r`i$kyPN+W{=2&5ruMZk))!JQ(zidezVU9?k?$=tc5F<& zroUx>p*2ygm}i;Wa&qoJu}%C@VULbH@jtl zLie=R_4_5e)g42&P5rt}t3cZ%HzsGrP2o^i$LyA6K?YtXK1`L*mqdrJHHud_$nfps zt;o2nbkY79;bIwIAN)v;-Y8tg_bM{}U6S!R-EaMc-q{;}woO+$TmCmuR8)6j^2y5v zUwoJ39S@%*9?0I9!Vq)?xufxw4=TD>N|$r z-qlz3G^y>64AEV_w!W0@?U}`VMaeUGr}oB6e3<@YiqHOdOZ%)Oy>nK7jy=`MwRjv| zd1Xaz+0~3|e?Nz6Eam1-T%&FMQD}p1XxPu>Tg$D}*St)wKcww?UoN>PODpwk*zwJQ z@0mic9bMl3<7M#jk1d<`x&3Dl-1YbKtmQA}>^0@SxWe+t*+U*Otak#!cb7l7eD&p?A>-1mEqvs=LZ+6Z}uzi>lnfBYcO?1YY;01rZ6*TqUeg1ch ztJ{Dp@Ug6#gZ?(7BMdi~GS)n}`d)s;ER99^%-gGEGCKJJ9?4JNw%~$R5L3IHf>yKs z0joFL-iaN|-63i7cy<#9!(xZP>HD~EGYaf3?cQ?X<>#3b8@*UJ#@Ojj*&>$LYx(f& zv_!o|*UeQoSsD^7gFZGduL!=i>Qwp5nnyG4h!k1w?)y{O5`Bv2hQ9Zb;-V)N#k2Oj zpJ!}PsTejp=e*_1c?oTnCHtN0<~$DNWpWZdvpGvv@8wILw$(SaxywW<_H`z+CLL^N zOwT^E`Zk00zbj0e4sUNbT5-jJftzjavo-hC5*^cAD_Rpz-e6_5-EdTOH}}$>=Sz6k zs|ScSKS&K-9Y6UpbKtFDH?E~0%{&S`a^v~Do*eN=+_|99c{aN`$CaCRw#jb)d{2hO zTzm!VwvJ}p~A?U|&@V0-x zy-FopF~L?Y@*KW+Wx%0!{hA|v!K`OxF7CvHkaX-U#HslUjDklIvLHjb#tC`TbFr0 zY}5R^N8!io7RVwHw`OhoqVY!v8wd&>Tina9c6cv>$1bA2ONm* zdwI8@=0KFFwcQ$q1#6RpKN|-;OLV()Y_o1#($1e#;wopnNMg{wR@qy;!#?PTrDXXI z=I0l>uI!B|xaMzh<-ilxeQKEw=~q@bgmWmZF8gx2V?s}nv>(p_r(}jzmv<#?ln|NL za5FS;-L3m~f_G@m)p>7aykn78Z)e%s=Xq79jrEih!qepP08df`KEd0o;dGpzX^`_H>7R<3| z$<+y%RuZw+e9B`f{hp)JitQVZY^ZyC^uAj8FQ*eMn;S(=KHGJ00aw&Hb{UJ$QhQae zZ4}Y#mvLKiCE()Z*Zr|cg2!jia=UKU{--H6O66i2>tz9@b?dpSO0HC_o|u09t5k(o z?3$NXx@UESF3j6?rObx$#><|*hn!waQExvpNu<4;v{Ux9gtX$WIsH3j4(L=!$tN*p zdq}Pjyn5+vM2mb+jy`Mna*H0O=%nu^8E1V2+!eNId^6s)B4EzewkiJ^IBHL2eHJd7 zAlkL>*Q%J}xB0pfCgM%M{xcNJGxj}ju*SivC++#<`vI-WAriS6#dXtXJP?cakLmYy z*vL06>(s$x#kVDA{748)U3;Y_CFH20e1Z3@#;mI=)^%FS0Rn69HJ`ek|by=P?;rmi^odPkW+@zhJz2TycFWpn>$ zP@Nmscka;dYmd5@oldy?GRG-z9m_qZj~}mDSeYzpoA%kETrT_Q38hP=)s(=eWWhElUwxSVTGou8B^WfR)2o@;zzg-u*y^Q^vq%GVMWndW=6Os$<2 zxgoo)G;ZUwIrZ{)URck#!!Do^eYfS{o~cv+rmT;DsN5(nF)Jd5V5sw$Nd3N86lmaki~I6TAOC(7mA1 zxKDr98~dUgELUrOv3~A2a7Ns<`Nq}jJ!jSgJajj0`}NU%OP0RV)mtCFy*v{tnR?7+ z>#ILLYn!CGZe8zQx2ZMplpFEn{!&9^sy4=>qdw)_3F&w8qsu2cH? zpRcJFxsfn;*SGsBPDjJ|uGiWbR!s3wurRq^dn(Ft^UQ*4bIKbx=g2Nq)Rrm#&ybha zW|I8++Om0@%wBBWU!T#&vf`fRi^I%**UPwz4ZJ#j+k4JzHMlzcS9-yd7DfTji8nKz zJe>BOwS{rj)97_s;bPmQUACC*U+L)OyQsvXa87v>&)$NEx$kbdvx{2QO^{w~oNAgs znfuToF^6mVHOaLLST5{}wU(6dn50-4kttViFm=|uwX3UQmIYnN4*2uuP|EWx?|c7} zt{zOfy)5jwm}QrK?;Wnwm;N|rotUg`6z+2>TXmjm*n=%jIZHF|wo6v(aj$b_THW;H z^)`_}X0C-XVW!s%l=iItZZYdZHtBtL33JWdjt-D?<%lrB9QhJ!|1Cgf_pH!W? zcYDiA2?@_+pXZA`+)Z=yrS@~{O;K&rk6oA}E^n}OQ6-!pBjk3?65f8Dz`O(9H+ z_2{*#x;sg1R@WRY4}exZ&vcTOX=+ zXT7|q_|MN!bjhk?VIRWVzqV~iU2X7Z&VPnr(YYVxK1Y8veQV<{c)5PYv0XnKnuA%l z$1WFWzqEmA{gxn!=uLa-PZ$+WJK$Tg#<{6tK})rt>5RO1!wajoG?(n|KVqsYnz4G{ z{=-=-FKn58;a|9=>U1B&XB>LIB|EAPuNOR>_V`}bkMF%~%ni4vOFUX0`Dub<{M62 zDe~$4tH&i;vx>IO+nQ6Qc`@S4!|AKHq-C9*`pT-h_Ec`rrQqD3y`~$khSi*NmEQE9 zVMh{|+^5E>waeGPlyzTqZ}w4Hqcu!Z7jhqpufKD|wa?i1dcH;L64Oanr^b9c_v6m8 zR<--~-$DYcs+#BRw|?NZz^Ab0+rNofi$%_E|9ewD&*6#C`UegX;!oCus-OMk?R{WN z|19gMjn*nJX6`dQqp6#ga4uW1cFOx5Q929v6enI%G4>X=-cx@`W6RY43_dldy1cmd zyM`5NDSUBTaDSzpU-trsWv^eQua9&&!Lx1W{$r}ilTJ6ROl)7DoiObzqZE_caM?7Csc0_DqVx{kF{k7g|W)mbg`aZFJ{KwZJOLc1K%qjmF6eqtd`RygW z?OR0I(eFo296Rt-v@Gdm;l88?Gb^q?{F~4)S?`1j>r4;vo}$SjLB*m?n`b|=KeIw+ z2JdSBtzR}OFu0pOV=gLqzBT2~F9)G_8-uE!|MgzL#gZ6RetCbyl+}yG+xH6^Pu;5i zJZKej)LWrf4X>|X3o-~woH?Jb{8<8b@cry7cfyLcu6<`U=WA1hXGwJJuEUD(>pNGwU|r+uz4$T3%+*JM-s2B&%taUZ8Hr>`#A>J1jB3wE6vaodeRmY?qHn zrRC_}R(>`~eUb^cZ%IXupTgNq*R&S(MZLUct+n=}>5Rssd<&mxb+0ddxBI1aPk^s@ z;r*^3U0)&ZPBmKj(hdZVQ*#ryP~0qgd#BIC{?aX9}%+jTOt* z7)=l7eJ37y-+;S0BK!1;2w|OvmqePA=Ir~~C+sKGcxjQ$&7CjqUpaRpJ}7^Q2V>M1 zj(oSnvzMh`i+yu#b6$^Wz`ar?nNs!4s%@9w$%|XO{UbNA@*iJ_n97!qlHQ>~KdY9$ z{@KjTRm{itW5%mJ7KMxQcN}`dK40ie`<{YusWpz$vqR_GZvEY1AE0~a#kJQ)A564* z*Jr#q3PoS#1vQ;eN9h!=fz5Zm;zKx@g(NZHWxovj?DxnDMSHZ8imSwHqbM^IPX!Rze; z7m{w4%-9pN*6W?h$9x%~mr1?oOzA+KbC83xwL0OlID^Bvkcs zGb`ukQXR%cuNKddBTRg+dM&wr8>ZNZ_9(8%-tEG2Z+rP?~yEkRiJja%= z{ok5%GZ(JXNuBt3$-=DbG2go$%Bplf`g)o7zz$>W6NeuKIk~i|r(Cs~F83jzDr)&w z^^Qe}*Uvux%3D2Y!GRA#-RlltQ`>P&ueI~=rszr5LGupV8y)rKWKXqR^?7FCs@6?G zTb|aMuIvztFo>S6++{lbn(ib?ft*S_4a-P@t$+X)nuQu zM@^rwS2@*LG2>jVvG~Sq`gW4D*d{DnS@NG@((&AP2^9|(Z7hA(e)~=va@UFl3!bJY^p?n6 zlAj#Av}|F}t;#oV{xcj|S>dwgjMR>zA2YMoYCf-DldN+@-6**7{_-P%Ob-u5$Md?* zVf@da;KlaZ>DT^_+JXxb3U9u(FZkmS)-}&md)nKI!^^kkZ_(b+w?j;y`S3iYynpHQ zcg(H4a?z!7PEwrrx{J-G%v1j}Bu^E3oTF=g%=Yo)J@v(QOU+I^ur8f(!qTwT>Q3z9 zh7{L@x3}#6r!Co3ZEV4`KD5^Ha^w}+BP-VS3-F0Ggx0ggSlv0d@mg_qNB{9ekvlAR zC;u?*wtZV-JB?8(i1(02P{U{T=oQN{TR&)sNWaxt&-*ZM-ClEcp-AZk`}}V7EDO-6 zzn9T6NnqhU1BaE*4a*EtHXRNZexllQ_jloI)+T+4H(%FXY@4>~Z_HLsqqX{*&lKk5 zUG8hooZ0_Kz%{*QW#KXH?;(3KX1y2BW^^$s;@rF^#798a@a^iAwQB2&muCntu%zzU z`La+}tT}(l^LIr1iBY@M(F8I;!>t?y1auY5!yI(zG-y)hfTC$!$^KKnVUk>Og< zytrdWtR<#qx80xpamP}9|JZ-ea+A_^Ro~CQ?^ZHtvDAMCrNC8dcP~Fa$7!vp9q*qz zTbDjfj;zz#F-=;v`1tI5meZ~qvb!Z@pS^yBBWa7D-kNmXKeMH1|~You@NT=%7PmSw$+nDCq#cTVudiAmF7Z%-({ouv%x1sgcOqtvu#9&zBy%S#-!gdRld|;v<#4vsoXL92KHXOr=1~YNpI3dWL3Y>Ft1{g$ z)4kM!Lc9VDj(*KBu6jSS-|3$5&9i}%Z`rDHwNA5qdp+bRi_*qh4{l0Y#hV&WP}Z;r zZN65Y}P(DIS(&ZY&ieP4Y(NX+iqee3&atJem(?WSU!rwkq$x%!3vv$gE-*dVq( z&bcZAUaGTdRV(VUs?OZ~<;!k-Zn8+|mGyF~+jc5kOZ-yyT0$d-&E5XmvpZXVpPrM^ z#XY@!!}G;@I@=|m1)MUN=Oqf~+`V$~gX)jHj|JI+uUZ>VH>-M=U@BhLJ6CVd zp%j72ZJL*_@6_;Rd$F;h;8yh&h9d=wX7goQ8?9m$cPM@Q;AdC<`b7ILsuzrMDqkF} zcF$b0;B4XJ87myc%!>8$71O<@&3-F(maV4tK$C@4n`VqH+x?2K1`I2v7>4%u)f`ma zvt2OnRPFVeuTy+qdaHh~*thPxu}@rh$2x)4C-TonoZ#c!wK?vw_M$_K6+XXmQ-8e5 zJskFE-QVSTyL+}?e7>gY+Z@Y3hk7Td+paH|9;nrL@x9cNsC3;$MN@9%?A`fXZpRhn zdEJ7>ua|GBSUY`Pj^r+%_h%T?F0GhaQrztLvyHo`pJ^~>R_R;WJ8TCNTc>y2S1J~b z)jFSL*%Eg@WVMm$!OA_2W^H^M&)&UP+QhTt*aSJBI|{0f7hXr(b}W%%h^yaZu+DL# z-vx%egNFSqhfjShY%bU2U44-~Uzk_vLKLU#tCt@;q+D-2b(?yvb(xfa)zpo?KiD5J z$``E2mr44Ve0zz@iY6tK<0ALGYRxt4lx8G7(__=P?a9C-ek4b$xFYt`p;x@z_a8+I z&ed8WlOHwJD00!MsDje_qGss@7xJPGdR&%t^HxngX8X8l!DVhS*>w>kI&!cx=wmx2ZPIbrCEjep`pVl^-6Dr>%r`o_1d-w0;lt(9zW~FUDeM>2-usCU^ z+X1-^j}7KH_6Fst?ppBU{Fmgu^g2a(+wV2y)9l!eCoF&YUD|@d@L1O0VVR z!W>>pzYcmQkavVl`}@C$#_V?Mne#V2T5bO+e36I-*GHMjOI_#hn-KLiCeX2;>vjjz zO?T$$l5aUD=$N(ke~~rjVe45d!fp9Pd6$;1pjg;76Y;5`<>&v*P3PKR;c)QgjMdW9 zC&iULwNq6H2y=e8vyx4t(@SdE{Ug;HN7k-8)|h>+Fu5tfEks+azv1X7IVE*Box3g$ zl`eMW9M`8bgfBIJT_~o*@F6&&{AA&2jks%H_FVG`$+mHKbt~H!XV_!3tk1fnEPP&V zA@|g;>6xn@v9Omhus>U>@ILa-eaX%?(U8EG9dRn#c&}N!=dg9+mD;e*w$Naf?|Oz^ z`vREx%((W&J1Kf@F6PT#zU<>AQ{8|K=cXG(&DPw;*81g$wsRQIhdBMY4r~pHKYE&$ z^4&9i$#1eE^_uyG1>ZhgZFWET*R8eP^|c0vTcfLyX;f*j<{e%Mljx;2K93g7G!Wl# z&0S7$(j{A${LS1V7hbx4`0}1#J6A_~+v~?OOMg9MW%skb%p6j9W-jm7UB``<=}eGW zw|+q(ufdzkilSbM#qIz}doJH=~);BZ?*@FFcz6EK6 ziBF~6PDNinYj9eHjaB>n>9E6b6Xv$RmNh%b9~nEP^+~X#ur0@>wK>`g=l$BY>k5ws zZ#H9Y8P9_~$MakT-5m>^f6a9J>7X~8b^CPIZQu58*RJr1rnYh3RG2E}pV| zQ>(bKkU{%*(yd7^i{5pApSjK3>hmp)#`HcO-=5`q&lryi8;5hd9QW_+OShLvt8~rS z_P`}w?)Z+4?{yw)WZP}jp8RKq?z80Cz0WP?**Db}ehR;6JlB1RD?{hz_+yJgKCj+e zx+8wg?^)Be&Av}m2Zg{}Dx=GnH>CMyI_n&bciVdFo^NP&E&>Xg?w~}h2?Mk~c{yol^lq9>+dHVg2 z40HP=tJg;RtYRp;zEQQRLx^ZzZGxnAbYC zhrQCs4Kns^Xm@+@xU1F4>E!11ZtPo*pLh{mUL&<`&)4p*!y+2oKkKb_?OOV@h<~GG z+IOymS1&v6Z?O9HdQq6wE4@XxS{!l=?(-ITpNqWdqGK6QJV)n<9`mZMABCK(?ST^~ zKI>K8Y82+$z14AZh?Uzfb` zdEM{vvBbQaIW4=w(KwlFPh;eICn3#)(XQR+v)e)ywuK#Y_+rq1`B%=CqD5PhrSDe; zY_N`vOnk>aTXoar^)F`XCp`{d_95Nw;^K*UGkmL$Y&gX4^LNv#R@bW=n7wushIdR8 zXkIF|>czq^hT4Y-7u!$TKCaah*>UB?ldmG}N#e}vrakkOEBjvA+^O~z+FULlRCdJQ zTTN!lwON@fVqP%Y?|k|EQT2g{jVq(p{G7RJMdJC7*91T9esZxy-r%@O$kb~_8gF7A z{^(y5XZ(>j++gjsM~c&?ZriG%{>%4#MNEE^tfJ<@KdgUZ3SN8j?45Abo0;Ex-t_+r zs^(@l{ruKTTeeMMU_30VUl0)*xxjb&X^kmOTB?g1?`Ea7N32`-I)BC?>mP+iD`X>{ z-wLedm9g}`JCf0~? z>20t2C~;qP+Z~6stbLKMkJ+!#&THn#x$bBFk3Vyy@eRm4$X%nw1zKdmc za{BKB)@dy|%P)C(_H@NbYu8*WWzJl%*mwRtbMCW7_m>(UUa8yow6Qu^{6$Rqp2onr zRa+;;PuV$%b=T6&)gsrcy9FBE-aP$y;@(Hb)|uX`uT7rgn36wVWAnAGuigBfE5_>E zH$^t)Ot#z{^XTD(j8{g_Cmg+4@U=%?teI`ieaqE}_f{kY=ATUuW>}!Rp1aX!_L;qBuP~gwtip80OkIt=Q|1brOzf_h#PewT?y|GHe*AND zxSq%KbUL zB3{jI`IX<+PPwVFVHvGq?~X5iad@pm+ZU_8@*T0AdMQg{8UHgR`-b|nrOLkConG+S zcIkW3j>c5AlYaRfTFTj}1^4*unM^BLr}}Sv%XDC2=;hTCSD(L&<>&a!`zwCG$Ik@; zj{DDsB)B~AX}rAMxHi)%+bws(m$$}}B5c!URSAS-wC)K_S*IGHp?{BCiJ^6CvP^{R z?N43369gMq7haz?k0a%_>i4;=aTC{@p4is#`pp%SEhT9-iz`pW{apS066myi76VwT}Je zaBiW3F6u1^5?X|wxF=1brn4w zrjrC$UGtJ;wtM+Z)77-cK<>C{+}^ZYE>^dOoG%9dS~e_YUj3he&CuY3)3s@@j}}W; zCRtBA$f&dE_U`A#i__<_z1s4hp*ZKzPVU+oUV-M&)GLve+@U+%4(2nT@ZGj{`@SXm zccjDm^(6N_pK(y6m$!Fr+*hFm;zxL2osc;E{Kk~K6U)Q9{bs%@o!b0{G5Z2jvu9V! zdlrWt-Gr=`yN|8ooF<5GJij^i@1i5Tq0a+z7Mz~Lt6ueOTITv>!Gb2MyMBM>KIARu zIve`s&+j(|3{v@1Hp^J;;9#!KdD)pXVbQ!Uf#1e~U*uJ89QdcQu}t<`_ROSP7xRBh zUt6rYk;&HK+Q!F1?=zz`*1tI2Zxgfih0N8dRq45NWlCBTr#meD@UXV)binEILl+C( zWo-IV&sRF^Iv-koS@N8++R{}^3|do8?X_L{{AB6riQnI|9$S%pFzRb-c!A&c`|a|( zIyO|Lg>&cVaZA9Zeo-q|rt=Rk6O0k4GA)q-VbTT3fvNEpB7TAXq&_s(+8 zG@J8Mz4^i~JE~KfCv(18BJk8mv~zl+SM_$?S*z#m{Ku{^E3B`rpsasMO+|0M;A`eR zf}!cZV(NK!&EgG87f^E9%gQeC>HLb%yrnH?g06j?xc^<2M0()NeV1*OUh1V=7;~Ph zcp2M!-1T8e=9f;<7ZST(wEa`Ny^3+FckZqGTTV)w-HtO2x){eg_w$<9Htu2}5=+CE zRI`NfU0<@YcG3hrZLbFl>*n>7w}`V$dEEW>JCmZ)YTL=B z5q~*^W972g1m8%-Hu%SwSh-BBj)|>N0n!y4g7sdmvJoQbp2)8`1?`B>-5mcdxW|}XUnMj zS4h8meZ+!yQd{1}xicD4uQGmlbA7u_b(O$t{&V_|l8$gMcIPv`ROmdBCG(um-UUxJ zHo8_Ex13VNvElH|sa%`1g6H*3lbdX-bDgX4!S>j*zm8s8=y%N^_;z6Ht^0xu8B_OK zf4j3_W73=G3y1Q|szUp8Vr_3s;c+R8I(~eKCS#4%=Ua=oC%I~eM@LrNao8+$Bl_U= zN0I+r4=yZEpS8c@;gpBR`#qQhPX_8{>IPOy-zyDP&S2rT4mN$QqZVMK+#V%%B+7m7 zHfcpczQCdvVac09OII{{KYfsXSJUoQfaWS&t*GwXoz3RD28^p;pD(_qD8Mp{SI+!? z|Ct2+RPX93=XOkE=2WaW{nyFRHTCX-=i3fh7(EI9aYiKjum3ysj$J$)6i8$L7 z*l_O0GP`Z}+}!6SAM#kc`c=-!3olt@E$w={cb(fgb!&)0GV>(%g~q+d)^=sC+VV2t z+rln4?+~${Kh{kUJ+MNz)|lzRrQ0t{En|z%hDsV9%iCLhY^h^q!47_#k1GRNqh2%i z{&6rB?tQe6XVW{W_2zN2%x}xC+jUr{@too8$IJKBobA{hvG2#Gz_nZ}{O(pvUEr+M zdTr&iSer`|Kljf2sJVH?o8Wn=S2r0nZDq~)F;i?~VSYx&<)iLa&tF9zWR+@$1d&LCUVP+$G*?j|2=HRCF1TLx2$fF$+PKq>w2V^MGn+XpX;-;Swm~v$76Xqs-7uN z&%XBZ+qY4vMR93`{jP>Pfjh2gf7bFY_>laOr)Dc>SlB22N2W8+#%R8JTyiWe<7WQE z9J#MMa~aat8?3$ePiwQ`({o|Byv$OLPSrWM#;INGTlG8D7RIuzWntD4g*poqN+MVB z-mA4f)zW#kZASGh2cvZ6%M#ym|x@)<0GtXYA=)Lsvy)QnU5)=gi;T5ah5)H$EqPs7UvM%Sf)Q;Y>q6swf6Sx9ZUB- z(wn=JGhHrM|5wd%;jI+`makv0Xyz5&VP)p^b~lf5<5fH3vsOE^E_@67_p@h9_yl{O zRS%9H-IgN#c#rc0fx`*epZN|gXDBb8+R|;I7gbX6?`iW-UVZEPaS_MGLYsdD-(nKg zux8b|IqB&^@0&Rn*cWrlG*3*}ZLo9s{xy5N*x0(YB6^>%j`6()@d{bc#s(+qOz zvwAOI%V&JaWOj9xT*-Hj8*Q^TMn63+ekO3u+6|%`le-W8nBKV}(Ru0qt{IQde4VSP zqPO#2Rmpo%kuCj`h2Lc?VvYK@yyA0DonnxPoMU{)j_+ox43-|>dwW_=&RhTO@iXk5 z6VwjZoLk-9AiVVBg=w!;L$=)Br^7^s}^eNCMDNo7d3tE+z>Bk z_rPq`7QaeuoBs@Vj)kQJZj-aJeo@gigY75V-`=@DUzgUjZhXJ@-+Z%6t3;&U_x|=u zP10aKT5w13bxNv1Xxhtjc8Z+$xR$rR@~X^!RW2_5?`cBLs`WZ|zw3Nv@QyQFq36?A zxcy%G6jt$|!?i|faiZB%I#(6GzLb-3u~KaArq_a{D@ytHEq%1^-MKf18TflspS&t8 zy0PL7Z}+~rei!0SY)QN)JL9!@c;vk+chQO?#G^=8hql^Q4e4YqA9 z*>Z0^zx%F`PFKCY+1CPUj?FgE+9LVjyx)dtGNM~=-8b+0&v0Vf&!!!s)2rX#uXMQ3 zn|4$=a<#$xLMO)NZ1)Y8Y2W@%m+iqv?uBmS>633g!?+`RqU%yw)#knFySMec-jaRjxM=zB8TYzF z%mQzkPq#Il#=SvSfbaF+RojE-Pbu>G`iB zx%ug*TR&E0-wSY4%#GT2WTR@rFP9Cny4rnb4lyngdUyKr@woXN-AWwHrA?=fRyj^I zn0aee_xC@CRRUe(4(%6Ms;F;zw#KJpTJw~YcC)9^{$j2XM)#HmTLjJ3l3K}Pm|`mx z5-eVR*V;)aYhyrra%Tm@l3l0IA6tJfbamo}-S^Ey|GiUiaE#zSZd)jO&O>5v!nJqI zt!ARfieE}9$h^35t}3$nV~^Ob6*152*Ep0cI{Wq4zK_1H1{xCAC6CuxziY|5%I{Kg z&1W$`&tDIfgA)(dUrFW?Wtrh{NiX7Fwb!ZDFIaoNN|ipd(?5E&T2auv=)hv$;z>IV zk8HKOba3Jk)-7C;mf0VTG;^xO*Uv0q^DWUcsJ(1aee{^(W7b~+S=$8`tV!Kc@_znZ zCm{z(z2z~s^@6+4WPMp%8xa}%w#}2zyU;ci&!lwHD&CyA}*e1-oYbbbkT|xA=;fHBenmi7)Me*nw`}&BL#90H4(qBuiO%(YCcf;cY(dbwT`ob^Czr3ycpspv(EV!8 z<4Y;cuDh=OIrt*M=+NeT_4ALIW13E-+@JIFSA*WJs}B3*W}k_W&@wr@Io(T{?Usy% zUsd58$EaqL6StRNOiL(`mD*~2Uw+3F?WxmdX0Lba_4&4Y`?BO&v6r^Jzs?e}DtF~C z>(eLwy%(ged2oHr-RPy8g${A8tMTDpGx0+6gfATds=YpbZ=+VPI{Vw{eX6o=oX&$y z^ESk7mkj$p^#XtR@;aW6?5@`u4nKQu(>ho24D;5bw+>WI{Wmj-RV3qV_N>!!ZJvn{ zrNi>GM^{)C74)y!G%;E0p;gl7 zq>D#RUT8S9O6qlW$2qod8fVKM?|UlL#*|Ul_tdaW%*M>l+GoX8FO`r)sZV)}gD!AR z;X3X&KWLfv=4E<4zaNQ29S!c@S9)DE-XM5^oOZM|St#bd}6R~q|$ld!j8%%f44A`!}(2{o|6qFc{$Ki;JC@I^Sbw&Q|2r&wF3sD(QDe2!^gzoy(Gj!V_uYK-sMN-B zx4qGtN8xkIX7dX^JgPE3=g7-bPbxB^zwjE((%yAIpN;MFv}yXT3p75viq|E5TV1li zmWw}QZ=P*dGNZNO;d6OKA!gHE*IK3bKW&VaT9Uo%MT@BD1)Y}{Y9F@pu$J~dw+~$V z*rPqiDYKcqv_5Fg@%2kgcTCjTlVsDX1%)fbJ0`p)QXMAijNCC zXP>(Am2IlS>L-f#e&siru<0wm3YR`|KsBH1=$e34tpV{CO^&8ztM^pwd3`CWAmQ%K zZQuL8Oxm#X*3YmN26ew8Wv8(i{ClM#Jn8yb-crMt1~;Cq{O zVrkLCs^hD|w;oz1I>TCTnZfUGuiuK_;b3dFSRD1u`i_86mg@A|D?NXA_H4@8ShsF< zZRsN^9plEmj~`Cc)^o^P_iu*l!_A2Wdl@noO?dS_s^y$D(_h00k2ieQZ_wfW*mXYZ z+brf+ij8iQ-e#V^er$$E(BV+C=;=@DTs&nQnNA;$&c4=nvZ7Tn+*hy4a`md)N32^r zR3H7VxchBiYw9_}yBgQsV>8(WvXmZ12t0klEV1~E2xF9W-fZoz_eVeLE=-Oc zr@np0C}f!%`q=dO{ytUap!Ycz|K{8E=rG4TuX^$-@qK{Q&b>K-m(QDXT6zRs`p>Ym z$T1{@Ia=oO+K)z??)Bvsc9^P)94tNj>Z{z`mEnB_TPoIA*gpwt>B{$reV+R5AYY7| zw#Id}$By-0J=0v??M!(1ChM^3uOmz)EUY=@eq771H)vLG|K0IEXw%tUd)qSJcdT5i z5Ula;_s2)3POEPFmVKM9vg^-`KWCmk@!Oy(DWqZ89{u-BFPtW3?`c!)*#{?>bUzba0VP?jp%9UsQZ?5-I;gUutd*W&Av zubn$|T3jB!FTDFz`K9KfRdz}x^FAL@%|LPIp3Gm-7nI)R;F9Wu{U*h z8jGFkflGEe_6Dzm_ncgswc!y%pM&^4b3cVn)(e???K}Mqf<3OuR=-NSbok<}FYl6L zc4}B1Hx2E%RuS>#g=vL;>*?e9Cz3sH%vKECaxH7~=6D0m!yz0W^d|4FHQsW}?;}g* z{e4k$1UB4XaZKw^663zYnAQ&-ZLL-JiZSec8i_j`c;pejfR<=iI*=GEMWFU6T}_pQ>~9j_GT0 zb@L;pmDdfmTP_9!w>;0t60PH%bgoV7Wv#gW^H21 z6v$W{c4sY9@h#3fT#~ufl8GFteO{W2Z`xVkiD9_5Izq4V@Mr1co^GDrmS@EezGO_` zo#%4?`2OrEPyS3;x>Von`jWs!m&;4*P9J~kyp3_egY}#CDx65Xwd>!1hMoO-hrKoL z3D3E1TkX}fL;8(uaV6gekKWvym-oFEt;v&i?T86@E`2S3k?lg0X}`2xyR063WskU{ z_|a?8sc$ciPn0NJ^k(s%Wq$BV^IV)1di_kDk<6~YiC+VfB6 z>)MvYR#rYqnZiobeOIOUrk?&D`7D01&urO}pAEgKJIpWtZ4_|GUA1!I1Fo!0oxF_)0nCF-J1~D0fyIHxc3!OM$tohh;Od@#hig^|O^JO+)+n80N{ZV6CJHO$A zO^JV>_ElNWk$Qc*qjHgS(Yk-@ln!b;N7>f=vpzlL%Ubq1pZ=C<=1w`dkSF=O(WkD~ z5_{X7{W;l8mNM5)uMj$=B=q)U9tV4ov1-oq^Ys-YtHN$K!xUYnwR9ydH;vj~A+*wa);gK9%&&DM z1&yEY-xDCEU6=dE=|X0R=?tx#^BC{%k@Krvmb9+KZb4#VRpMT`rAIbzTsgTf>2PX< zUHZp@DZ9P}UoDPn<~Yu_iM@1sQNP92zuuc>fB5)2KxhSP#phDivU6Q$f1OEszi!o@ zBTFA%Ue;ZH`L)pERaHK5*?Y7f&3D~pI8WwVW3-0B=k%ae<`s!)Yc=cC7R^2rdAs=; z*OGU$OV5Ah&yUgyuS;UpeHwG;S;h2OZ|zG3Kd0LCc<6jT{O{1-MB|Fb#g@wrT{mY} z#joI5e8Tzfe};{#+df8ZUY-$h%k`&#lF5zraZikzS<9^Z!hi}M`3{Ir?aHth>=3-9R-3q@xh?njlKdu%qt_C94lLka_Oa_3=jPztn!2CO9Fj&` zShzoJUwg($Eo1G1O8tW7qtfp?)b27La9=L)@_OyGaw7vH=3o`(1?GSCQLKSg5^+hN!KRevgz zpQ#32joN(Kd=>O?qaBG;_cs6sc zxIo&;rDd-l&W~W_{h2L|Cv&u8u0P;hwLo-Ve6YPrUHCJLYY=GMsm`r4Z5of;;$&h5Cw&z8v@ zk9z-pzJE)ArJLb;{~593&)lp*DQj=e?(1@9jh3txULN=H%*h1D?Jh_EBs~@H?P$L8 zt2ZyfK=tk8&2M>nC(k=j!YqDra~9X`yi<=9i&t=Gcdd(Vxf`CJ+4Xv6N7S#icfTdd z2+fH9@xG(=gg`ETY6c1bQz zexIhagyHt0&l4Uk6k|IkRV#6Ixd-nCxxRey>+-vr9qye9{Hk>5!sV7H-#^~c+txbQ z;^FJ(K@+vvxWiVjxR>)@W5w>M%=4>1%1W)?be?_ouW2kB42E{%!yz8 zH^l5v^n1H%KOOG)^fl~d_tu3u8m|6$J8;|VQ2ix(N3SNI@!tM!hR(uOUPr%8oxSI3 zR!GLWsJHRrle9!6+*=+#>6}*Cp7Mo3)}62P;~Bri{Q1XrB`tDeQxy|`zb0bsoLOHU zEz8&W)jVnO)ho&jdFL_~t$ZBW8`|Q?v+QrfwUH}ODa@8geJbA38p&Pgy~{dy*UM)@MjOk+pFUGn z-R;;PnYfTaPh9uSOvYZ;`NkcwUn{Q9J;h==VeO1BO+|c8AET^}1aRkCpXRt7$#c8u zSKSr$g_^5(huVI-`bWk*K*NeRVr9*1Rkwzk3zw$N{n}F9o4J70Tw>~*-D^pXfK?$W!jb(V2y?-t3tI43dc)JpTPWm{x6NbtoJh*k$2 zaTaf4SUn*$@3WxPrr9y#_KRcO+}ND?MPv?mYE~cIJmu9K?}@c5zy3A`DN_+jMiln_h?#*$CS;~xXo&C>el0_ZzZ%2#vWc;_$cd=(S4l@k51dFtIv|L zza+`M;coEZ&OoDs0k1PIT(c4Cm~=7Q{E{Z`6ic3>+?Q*PH-yfPylNB=6PkBDeimu*@?qwaFTDRUiyOCUM_#T|R-Rj;wf@*5eUYCH0p@vGH|wf*-4Q>m zuwCT+-fumDi#Uw?>Whulg-*?_{u@8j;phQtsmuS4Mn-bzY_;5HYn$rt_Od4J%X7h0 zJ=Yt>eRJyWB)z!NUT~S~h_=`fu31tAH~&rO3%Ky9kViCV_nz8gMjJaFry4&q6}=HZ zUG9x#L0rD*i`s``Ar_%?d3nF^ZSdthz{M}6+8fyuw^{30P0cT-OLr{J8|3El{*JG& zoV8&48OO=|cJpc+a@Jm-Z6BF?^U{BY^Btv;v#)2|*dhCGLCArvG4gx79ita@7rdNf zxABSAQemqHeR65*+RT^dJQkdD>W4G;^<~)~jY9UC7?{p_Yx|Jz@`MhC6Z~zmo@K|j zX>L4hUV4o=vMoTw{LDGQw-K?*zi0NaCRSA06~EpYbWm&;bGq}#0_D5sv^(pkeTjB^ z^P~1r)f&yJQfueLJ-<#bI4k$mrgyGSg~7^QC01n*dX+yNVX`!Le;n1ZN?jz$N>pmf zNACkO_Qqtpr*b=F?ccoJ5?IF*+-zD%t#Twc2N@pp5>EYE=O z<@Ux6Jk0Te_uJmC6Rna=&R+Mq^oMM-i`{}o390k-J6c>5Ok>~vO<*<(VcD#+TbFg^ zB)i}#7x)wJy|8?w5-PIoR@jd<$3A`NESXWonl|U6h|HnxtCkPl^*25I#n?1^oo`{z z*A7PJL}k{!8|ws`q*t60(|(gb>9?bf;)*bS_w;#22bShtSsLC_ab`oqp*4$U3U_Z_ zrx&dgcuezl#BTkHG=^^0IT1%q9nTA}dq4Ygv+}Jq@8jJW5t5s$A5ZU=J;Igg){}Hx z_L0Yif4iq%oE0VVZO8mm7q~wi`tguC^Jj|#!^0I`=Y0&1rf-#6V7I_9I;3p>g)X&> zu6OH?90+)SQf9-oS_z-k%&u=+u6h+5{Ch2_JXY%~*OxmC0o}Y4SlRjVCEC}vO}KZz z@wTyKM$VRL?-yEp>tWrv^tzRKbNG90{-*y7Qa?2K)|@$Z-26$1^FEUqab4=|ie>S{Kj5~k- zr{?8dpYNSmWVp_v&*|`*6OTR$9W0Idb5!-kF$smcY?b@#J$x@+n;d5U{>;&ahjH?D z*2k{%$YfaU{@S}rVcEfd8})L$V?)c@*(+QkxJr$KjuhGQU$S!M+B2bBP~fh_pEU|9 z(P4`&ZK*!Svh&nx{X+}GW@xh)*s8Hk@O}35(c5Wf&J}1!>~ZXho&DUvAVlwD?7y_4 z@BbdXKi=JYSFPvG`DfN~n|AGa#iSx|!}M!s)nneT_io<$>{~fQVpUO65TD=j%u8?7 zoGi08WMA35WvifE|2tLth?$3;75h|~Ouf<+Wz_dQ{?3Y12U{m~A1Ii5?j7T-owqFS ze+Xk@K54oC2%`@7r}=lCU5pN#`OLF3srIC3^?K#WTMy3@$$fu)@kg;B&bWenX;T)h zrLM)-f4|pp*wA`*uDWE_ld9j>_>Nd#oj0*vqRk~wxj@G+Z^etx7te%CgfKl#D~|g2 zXh{^))!1b1iWRf=BpB-5ZaWitu<&5I>g+u?J})`9IFFZS>*DOCZzhUvU|6^ASnBeE z-5)-G7G8T*BQ&=3cI}^l3Ec-uXS!+zG+z@u|JHGl+ogl+l0g0@yVf7NB1u*b5J z-$QZc4N==TL*2rZ%`%HKyNp8bKAO(Feu*vfqByRG8z+5>To|T_+_UZzQWpBWvb0p~ zO>g*yWND#>{jUyjZ_aj=+iUsB$=D_2RM=$G<6ireu83ZEsd0F*gUunSC){3+&BqEK zPH7OjwrW>gSo8L!F-%uAmb*$W>+2QCnVGU}8mED5N6J(EDQVF>ix)f3KEPehctuTW zN@m9GJ!KuK$DN+Ocq`s7G<_rILerz~b{~lnbj(~++#K=JFu*sg>?$jRd7#^+eaBK5 z5Bp_(W|A}auQxatnt91`-}Hb}3!PrNe!sJ`BjDg|lO0mm1r_=Zh?yv>t63l0up;m2 zt?KJ%mcKRX>4EqL+h?~P-NzI`xx+Bd;)g{IcGF!u{n z_9aibeQo}y>iUY$a@wa>Pk$Aj`@L!7>BTmuIkvAbe{CePJZeEzyw#Z;R+GIYxqtsH z%w%aaanc>+kXbHJ4S&5H7$?N?8?6u$Gy?mu+(AI z<@K2bEi#|~$P{<&XjKqPyLfE>P3IGtGVka6c>8VZ7ju?eFoAz*e^lx9f`HbPiaNe| zNt!d~oHjaj%gU;6RzdjF^=hSust&B%naw=aKyZT0X>PUdr5|TRJ8nyk-KQ+Nfnjl% zgjMP5GfVe$v+YW{{#$&>f=8^}>v->`THHC~%e>HV-r9T9-d9dZ@V&18eofw*@az5U z^ESALw)O4p`n`_yi(8=el}9Q6mFcPp9G6eMK2_W%;iz##Y}%%@U+!gr zJ6QrMWn#a^rSUf0%$>6TIINtPw(DQ)R*&2 z-g)m6{z~st$M+j7&d%4bxc#naqH)Tqqq@7dZwm>jTz&2HnN1IjvzM=utL;;5xeqZ*%$lpFc5Rxo zB+!q6=Y!j`t$bo1-(1-o?YlF#vz>YA)x!#NTP(l!uMRGYKlY3zbKV4Py@cHjGgl^U z&o+2xyLwi@s#iu=m+m!N`|Ge|x5BHZT?r1l4$sYx)O04D%Kqo>cxcTI11G~QxwvGd zt4#0r7JR8lj0#&_u%!Ir?}FaI3+`)Hdpv#?!DAAy@} zd~Wg0xAAK%HnWwU+sHG0&Ybyu`>#CNo^bR-VQy@|v3ZNCB1)%3?uo2?;m+8sZ&LRv z-(la?#fIS^Fj@pkMBJlCF>Yg-XhbHcW$Bvmvs2Tn_piui*0qk z{Fr|YgT7wP5r0+veNui`CUWx%#4I~F_skTp<(yw1@7AAjb;jecVu2K9ue;YBe|NSu zO$y!^VfVA&NzKCFdS{g4dxmvyEknQD-Ku|eX^u@SclG-vzPvtDm#61_SbDvU;q1TL zf)7|`91!b2AI9bI&F;0wtim0)!;fd){d{JVU*)D>uRcDC5@EP@)vSHFez;IeK=x4s z4IjDZ<}W&5b4p8mjy(FgQAyQt;Whph>FNjaiw-LGV##c0s<@ZqK1EwRi6 z&0^cGrJhOdS#{~z@12P=C3+%E-n{bK#Jlm1TFSneL9;JjJju~~bxJXpbkzHC=tJ~!(^+U~kLPFHSp7QRU{%le zt}k6aN6$s(ZRRk1%f58_^G8hIJFln7PQ0}5L4u6zGsDeG&Y5@5xN36dc9z-etb2z2 zJGVd5Im*oU`CP5%)T_zw{xjV4V0%^L*1+>+*ZKW%6BO0MiTD7U+fq2@+&Lq!63~x{7z1sC$SbTEy+ct@kWvk`ezt7kh5c^hiuZVGX zgSd0#o;zA=3O3xh*^#-+yVgF-e74By$G0rXuhj3K*)ye9xt9Ol#obHw)*s1wF*REM zRifki+$+l-YVV(WG-HM4O(F=ySkF`4y!r#4hA-+&O8@5%c!gr_=Q>vHqRhan76557f;tbt+5yEmvB|B*Pr`Wt~Xgk*_N&&Dtg%7d>8Ub0sf5>&9cLW#3)) z#ThS6TguFAo2U3fU=8oIwZ&WZU1h#!P#|wpvNtB~T@aJ$oG+!9o+iFsah37JZM`kq zGS^q#7dsu~9?>_0?Z=#j8&^I3@+@P+UG5KQl00*+|2AegZvW#)*VR?;=l|4d+9rBw zk)gMnd8cp6(N{@a7JeHAl{0$Xyf0R?pS4V_J;QBfd2>_hmg03Ycd&`<@4r3G@xadG z{)S;0kM{U168Sc5Pg>N3S8vzN=()0P>o(r6VSn;?6*kAs>^t@`euqKpo++hFTI(2u zChS}%^W%=GbM)4ZH2aI;s_VetIP+OOM`dWy-rOs=et*oN%whtNw z4(I*;?U=p6^0O4LTEwYMk#~R0y1Kl!`0oKJwvXR6SFbXhU-S29wqD<9jLgi>#;kU!Gg%9nB{Zfy{#Q1WW7+P@ zCpB2#9Nt-9X}eG@FyqvF$GP719=_d2fBbCGkUSp|thKMY?#|w+7x(FHKHYc0s3UHg zO)%50d$#kW+nxQw+O7UPN_rde{#bpnOhV#Y;|VV-4eo4wa<3+4L0G`*^`Epi$O~&T zJDj=m?7ilZs+*zd=J$oB-fdgf(3D~F*0|2_qxYPtJL0WZt^1p2yMF&m(^Z06i!0>B z9=<>IbJP2qb(^MWC-wG6e1BH(z1yd!-1vu*^O`$0heN~pWe%}Sh|Lc3)0Z!JI`QD- zQr=Ccn1oO5Kh41&u^^P;)R*q98s7VQ6Z&l5e)`9LFKpM&?B5o)9U_hKqBA}ed`oVT z^zLoGxXF}T;nd5;;*UF`rfr_k9-H4cYiiXshkF|H{&+v-X_Dh#qr#AJ@z&h`3@6Ig ztFB1eShHI9n(!?p`K*Pnuio4EQcACtooQ>YoC5EbJ3P(XmsGJzZb;txZnyWj6PuSG zTzvOsRPV(NQH?)iud+p~*#7GFU%NM^cX%co`phhFN6>x$OB`#8#Z5IC zZqGMt4N(cQD(`iYI`TMbj*D;Elyw_f_r2YEDN1zB!R<2?d`gmQ@*=n*r^Ng|?(9CJ z>Eq|ZlkbhX;`iw5UVksNwuE=7_p>|h%CVVmN{%v}UB7PLL;=0~K|OaL?>Cff&c$cl`>*?xO>`5cJUI_2;x-?N~p>G++xpREajOXs})$l9%W*k7iyd+8k3ApKjm zt(o~DcG-oE-A8VosJpZK&s9GALQOX>{o^4oKN`6_boXDEa9M5Ms~^)j9D8Pl=zZSZ z@l&4f&o4(O+XuO&GxBHLxEnb`zoLoh_)87O89Ra{e|;8;TEklYH(g?B?zed#{T2jh z_t`14YDVn|VE--9G+DO$@3$$k8)_#1{W0C|W`$4ScNgb5FU+JrW*sa0lJ~0JJl(Y5 zXuyN)j~@rYRSJ-fRy^YV%#Y+Ebh*4%h+H`7o^@_H7qR=SNDA`V`y;UNOsSW z+-cu~{xk60u&(Lyzh-^(&beg@%*Ph%N^CYgA5s2m>aEh}mt<=fsV!aJV{h0i+Rgf( zVbcx!8;kFleVtY{YkttC--nOvV*FjOYmRf|3dQ4hX9+HsU!wYeb9(ragw_K`nF9S~ z4!TD3O5T5Wx=HWmR?D}a|1+p6+}k#xGA3MlM@yp)JNw*!iO;TAFzmR_{r6{EgzCX; zIjhQMvo#{?B=@8qd^^)o^j4(Nt8CF@$3k9D746AiS6$v6(ED_M-UX$da$Zt}RR!e@ zdlJtZDBZSM5Y+H4E#z#8%Z?d&13ibZ+Iu@AaA8vRJD8jj;X! zvBtC&$3E;;?O3^j`Q5q5WCjKknb+}eOr~7oPZLjZ6u9yB^7@GMESV|Wo*#T{EV->| zk9FO3+r=lN6LZ8BuU;u)N;#l$-g3{TUfWQO(87~$bxOaRPjy`Qyn6l2q!~sZZ%I7T zJhQm`y+*-<8BAW*?u3q&ukE~UY z;0$9pT($PTx$HH*aG`at3*%ff71#4u_40@|2+iV|t5KIw8T%+O^Le~5Z@2jAT~*sA zu)f}2f9vOz44Jvswb4bZ7m2RV&+0n8H0kx~gSQeI7PQ&#XlMA=Gka?0-Oqh#2bj;+ zJ+hJ7{QgJH1S%btHYWLqz^%G?5tI9vE)vz!` z=*3~rYpW4q!-cD8bNPS}<&6UP6(<3h*H z`FbBT&b@7z^>Ag1Yy0;C-Pj#h@)sPmnw;MvCKnv`Jac7ICHIOwHf&{&tR^g3dUS#D z*2L9649l+DgqdzS@AlLuF_1a5^+92)_&o*2UaK#4XziM#tZQ_&TXPe~ z+#AdGJow(ia)B}XzQoUaNs23S&#m93%d;S4!I#sYJEm>e@-%O~o__`F79pORE4A#` z%;rpQD#|*r`K$rciO=3IB|~i`Bw9lk)JimVT3@W~ePMI#^Z{0#a^CyPI|Eo&lus)x z`}K%8a}?Vt7S_UVVL-{Za#0nm%byMw?95i)Ktu3Ww7RQtDkn7^FAC5Joovf)aLK@H>P~)+WO*v zS)0=V&CO>;jhR=q_ieuys(omd)gHF#?3^q{#&0XD4s3OFyRh1Q*2fvSf&2FhorwtZ ziTAHaOugTKZ?bhTpX#=Y3uRM&te@$enrwOReg*UN*%vDJZCLqY^41HFEv@sfF=i$2 zzGkB1SKaF%;J>`YWbfZ!N9(N4b>!|o_3GoDQ+a*X8FLHnMZf;%ZznZ%)_L{c0%Fb6 z!$lnhqu+BEsffP4nP0x%vuWd%wU6iIr8T<$bIqu=O*@)-WvAHm9nX)gI27|OJ$91v zH8Jy(Gh==PMrH2%c(3A$Rgtst5-E*CAFQ@LVkq0a_I>936?c}c)<14<=vH60pu&`Q zuOhGae0O;stz{1vCYGLcek3V^{KqC=l12PmG*nwg3Q)U z`S9NH`ZZIv&$pLmEy`1_e6--2_{?%=bFEqCdRrb&zs!(q&EEX+a*`v17}E;hlt(Fz zD-@RGm{@*4Vj;Is-|As#y4foUoms1HWMsX1`~KmyHU^Er^ytz(uM(oJ?cdSEc4oQl zzuE@|T&El-O}rnGD5*2;*VnjP{fB03^Us-Man4xIkJY`Mvs~S6Gmqjc@6W#9-WRSr z`S{H08gbX>GdOPVRnvL9^~MhFPixcp!e>7Y)nHUrw0Ln{?7{vO7ZfX$x{tmvjXBN0 z8ln?sw9}_VVcOHQW4*SqwWR{2F_V zz_WECM;3hAyRGc}w&IHS>}&Qq7}YIb!c+bz`0_JRi~d@dSf-VEH{Y*4Cbq!UJ4Y__ zrM$sHpND^9%HD7%w$CsX)Lba^;$2U~VMVK(Z>Mi9YZGa$xk zJ5%TFb-ASiLBA#hhfn@J+p|H8v*NsD@g8@!gQ^RgFNS~BZQxFJEm=2p#?dIAI6j*! zoy!%Gn?Em@SzM4=R$={2IO~nRoa|GH`F?(zGd8!M{B`hvE`QkZm)#bu>fZ7G8NA}J z&#c;zo~N6Zz*V}q0r$6x6JIO{c-M{P^`V zZWoT59yU*mHG0P@KIL)6i|0$f6mwQhX$-Tu8ut6EmlGF@;Jzm@0Tvc7S-IA*ZS1(l zq_**<|J~C;*LJ;2yCq_A{=HzpwtI2&cg&9HFp4uim#7jYw)^^@X+9VG_7|=?>*C%n z_uH9hsxSJ?hMdi-(bDU};?{O=TQf63S% z{ps9X_SQ?^#TQD4-6(&QbhKUM^pt{MJ@x^~*8f<}M9Y}2&&WTLCVN>kYu&z0w>PbA z>5%POwNG~b-c-Z9wfj|PeYZNsK5?=5o+<+tR@Dop(TC5Q?pV2H+3C=$C2Rg&Stw9? ze0uMMO|=_#oSmU4E_JzsxZ}%%i|4vII?ZYl7P!E-T;Hg%Ci2{$ z2}?Ac!{#k4`;up%y`JNiS<~L@dpt$Gx-IT*_5Hf;cLTe)XWpU%i}!Wv2rg4FeIOdK z{GI9TDO%I79Q-VBVWSeCbg;eANxj|%an~>FK4$LhNj`ab&h^Yll>kw$$E)%eY8i+n zO`Wu%cR}%8=cb=$JU(qvdwuR<#_`ZIe&rfp-!r;evkCelXpaZ z=n%d>ht*#E54(x?i|_OAY};&jT#3smq2lP?2p^GG&1;iB$EEu|-ot9~_mNDurp9`K ztqmFPE`Rc2Ue~UkZu``ZGx_9}Yc@g`9m_22^o2zXH$9E3UH@fzc9HG7{|qZ!7&oO> zto{*vW}~@mpSHx$Z%y2LV_qEl`z+8zVf|$eaV~Mmf7cY&Of)Y&@9WmeonW*y;puxW z?lt*54BRDGxVimhFU7WHead#(=~a{OeRZmZ!Q8FE8?L|KvT5e4-=~&{wnzPFoHVbw zZi02}+MjA4Hy*RC&&#_QZ+~amCrg{KD&vhy&EvP4@dW)--IWv6V}5+IY;6{o?v!`o z84W>met89RR~Kq(I6cbY{W!m)os0E&fAOQ}#66$Oe?NON&W4W6r~Uvo{+AD!DN%*uJ#dh28v_S=}*f zFR_4^NBE9emJ95UbanjCpu8vGKf{I;#i%bcwZF}_wf(0cAi#L*_2KzEMcIxH@65)H!-r;4DvD|BO{+i;J z?~77?B~B<__|lwv&GFPM-u^QO7)tZMi>zqn%`jc*SIxt7f9-Pto*2=6_B#v?%am$X z_{zC0^U}PYwQu_IGuusWU3KRxTrv0Ei4f7W9eJ`HTFm-VRiA}sY!0t_|M>TmH9ph) z3^llIze@F7TvI4*e0bkswj#>~)2BO!ihb;tIrv3w-S(=*^H(~s?0Ea~^u3T^%h0b~ zM;C5lX-r!hVcGjIyRT!bt@gLar+AsJU)^vct>3_jBe=zRx$+VRuGmSdpI*rck!3!x z&inFx!AYz33jAlNd&%;alce@1)M{oRcOmc){jaO3ppYQhNh2 z7sfTR{06)W+qheOo(fDY_v%bqyhU&7YYQanZZGcJm5Hd%Kri`Df;v!Cuhjdqbk zeG2P-eLBk4u})f_wcm>~BXD`ROv~#nY0@5}*T={bO%-x9l@$WbUD_` zu00cT9iFMDzK`F#>}}-B9j~@eIF@?wQ^$sN3+LHBidb55xXakHwzxy!zLu}$u^yh{ z-QE$28T$;Ij2d#CdE4WqI=5>~k>7b~{gPwq0y2#&O4^uw_ptltgjiaL>8>unu*daM zh!}tI(H2FMX%%f>g^tZ?)w=lTT)OST^#=lHJ)FvLGv-v^#>CoJNdkLfswU`K2e0@0 zKKr5C5(UljWj{B~w^N?`XpesFB6r@+As_7YkKCKGEke}sYgn;dMjFej`O}MToxJ+B z-|}Zezn;x_0mqZQ>)A$TCgZYuTU|-MF9o^^BIYIf{=Jk1k8tzs2u((m9`KR`<;_Vixg!)0VSb z68$j2f+;w5b#+(yt_|CHzwq5&v$4fj$0_p4bn$I52K=?MA8#>c+&dP1?oQ?6Ehi^h zGhV&+<6FbpHT!z^?|5d=z1b^%nr+PXv}X)4J7=huHE%l2m$Cm<(PqX_Oa41D_N~d) zYWhOGc9X>)NuLxI(DOdsSoiC2@sfpZ)3opHn73)lrXZ7^lR1woW5ag1SouFJD_6_PVg>y1)H)cKeqz7_KpY|J_?yTK048=e<6v z>YCF%uXL`;+40^aH-K?lRok8ZuC4$UON$jpmDQYUqCFaV+3| zd!c%sIbWsl*r)s;dU&Hpo~M}M^O`7E85`tA1XhWHcz8Mszf z@Pu}z?+G>3N!?n@^D5l9>uANy=yex73Pb1Q1y^2M=&_vF>AURBZ1(uj+jTn4p7%^* zzGpr5xX*U%$cf^r%FC>aHr>A*l0N@@Wpchply~0tn6r)>t1e%@#O6Iys%?fdkJoX@ zqg#@fWG(eN_(F=S#h@ft_k)bQVJG7p=7Sf`-J86cd25u-lZ^$RO1c`1RU6sf+|)iD zo78kO?)LWOVNV5e)~yO^uXLEGk?kA)pP`)D`)bhF<>u3Gg&d!iu}|j9(L13c;R0_j zN_M6BZn-%}y`nKfAcom{^~c-;htAyIFTMBOHG^YD%Wglczjs-xaD(}k2OrlPYXq}@ zeZ(N^U2gb8t$s%M%ARdUBMtPmH>I2xTyunjN%RpW-b8)N6Z~t0^~$!N7I)sYBjR9sb7fUnQu7)? zseLmZ-wSS#fAcbTPyCVPZ0uT=FH8Hjc1VWrk3YlH%DwlaX}Y>l_tkZ!JQFrv7J2Nq z|BXzn=+|4x|D;!k{qFLXT6pbM!rjMvub$y;4K6>!d&DVcYuX$>qeo_sA|3~ZSZZz- zU3YQjW{L9sx0)}8R(q}6-(fZ-xc~b#MQ@jHa^J7nN{4qnUS7Y$`@r?Q31u3KBl7J( ziG1B`)i_~Yn3RIXlG4e`7VxaylzUg^#@#PF7DaBqp?LH7`uA(j<#1iC`*){2E8V(x zdgkvVw~j08tqS>cHR{Im!yIv6UW6`~>G$uBfK%&){w71J2 z=^IYtmYKR-`sB44cZHRYM_(=PbluAJy*=jZ%s{^TM-RnZd3f?W^B%U@>n{A0P0%Zj zIdgi2%=J5gp0(i&&tnd&K3c>lELGzyuwka$+4SpM3^ao`m4E3ESa>v{NKROG6-$9x zz=Lg@l9zAeaAuBXo9ia{r9qrsM`6o?!k+iijf`d+XZ>eT)H&I->ZzXvZ<}(8aNat- zb2(mj4_#_tytQ8Dh?RAi!m5hZ@+#U~zL{20La%l_4p?|?kMH{C3Corpu?#U`TJI#e z*)aFx3GEEs#Zu0*uLS5hJ&l_X>HFcxHeOaY{pctE8B|Y8oH#puUVN?7(Gumf@AYw) z76j%l`c$}ZCQE~=#?9k?iVVG$;azX9e`&Hfbge(ivhm;yv1%FjO>5@0-|&iibL67T zqvczfts1UnaVu6w8EMb6JCVboJzA@I`c-FT-^4;td}o79(`lMlF-&)tmQ+ zyk;@24B2hdJMo_D+iMIaGwM>`Z1=5Gj9EWlXcvF(WE0oeWcg1T($b>8XLVkRJ5syr zKSSZd@VWmP0;XtI?5+CQdv=`kJ|< zWkQ$U*YaOZZ@KRu_nfdiA~b#4PIKOft?$bX>}-9Gm^4)ufFM&INOy3 zJC?RHhN_w85|o{{&W_f1nrG46ob|?Z+5GhFo@Ex^X6fvnUK-mc?d)Ycp?5pEG$}qv zWVMFmjLive*Ik!*cjqiaPS!_{L*i)$qU~Bq8^X^-NNH$9Sv~EIIA|c1s`}{3;&rRm zFOmFo@nzmUp4q#!tc&ipe%p8O{mc}`=>;=%H2lNwF$6R|$@w^+XVSYU=Fru(te+W# zwsxP2I`Qmps+X_m#r3|w9b#JfLcYFyzoLnW>r$?`t*=Xq*rK@K@3%YY-j%!~pp)^; zE@8?#pQ*2d`F6G2p3u6;UjIpYd13x^CaVxWzWOI0x%S^Zf8Ssg^S#QB)_|OR|A?fw zdu_F=Ua}S280c+!UBJAKDY^C7`!;nsZllM$*LQG*hBqw>jlXkyvPFAM%YQK*9_IbCmJC?00Siaph zfgvGp^GmHcIo^FU{&w8vRvj)r>bP|2^~B_wb8Vl0KeJFuTJ<(jQ|z!@lD24#t?iyu4u_^~+L6jv zTzXEyX8PMqLlbr)ckG)5nE-ttF6*$u)!1b!%!fj%^OEuC} z-`a8n&4~L}y~#_Lwan&>rf6vF>$AsKr5#^Z^7B7~*2i{H+wvuE-xfFb&9znQe%R>S zo;~H7+50Ulx6OCodk`xs8*H)STAG`9{0C)=CgM!$Bka_TwBev{Pcs33#Qp{N$s~P ze5To{x=ict;_2s7A4VLlJ*C4v=g6Ktr)IG3wfWJs;jYnkHlLJSGtt+HT8*dLWnTSN zu3Tx!**`2l=6R&U;H;E@b`+R-- zY`xyJZtb$9S39L!8>F5dd{^~z>L$gBs~2~@*YIgLEK+~WZnsilQ~AaBY-^iRv(_Jb zI_=TARg%o2fq^2?b7tEKNjzhWniBNt^9qg_XFu(QKF^A~W;~es?r`w$sXHGnPY!Q= z`rv(smR^*{s>ks<8aX8b?rNs{B%9hD2kmSZ^6=tG^f_Aho#x=Upu6>cL%ddb(VC$Qrr8~a7p2# zV1>i_whu%Wm0uR0)gkt4?|+8%LZ@9{+3(x5&^5YVuGp|;$LqyjFM|6sGIUlQSBYAB zbZfar?$l#thZqiZJEm@X?`FvGl&^Nj=39@wT%T>0+9eaFJuTtl$yHo=5gGcfQbC*9YX6Jrf<{-;_g+38nV7i2r*U(>&pDl=ini9@ zdKUCH{f)V&<{-ZK_j{?QefRf1QaC4n*XeDVO&a%w?UfI06^^dDnq6jBpU0XNd^hyL zi|qMd8;){qtf>6Vy=mtU1=&kntXAdsS&lys=9xB~`&rWF$hLl)ulgSueI{?!G(79@ zv(#}R&+3U<<^B&ZXl|TqoA^ABd-cTI?^&C6f781C;b+H6mdw3(Ry3KW-A(YTao~5D zC;9B})AdL0ch0uo>C-ePAm(NNh29+p*1p}uwz}g{Y2xLlUmCXaF?=ZeZtCvPBD{%Z z?aiRi6L&^fAGet(x@;%IWA2xITZ39Pw`{O_fAjT<^+!*eWv>@~vf~!x+ye)4ckh18 zw;=DF?$z+Ro6XlbXC8X4pQoI2SLflf^)jXAx44#eSsZFVJ2%r*Ph095=jm$^bGxVY z?Ngl8Bp}|D_&3dF<&8tnW8|g=xH$-|3468uKIbh3QSEu#HaA}Xn-?~9L(_FVi|0$6 zxttweC7bSf*pP8;#qxdH61$?F#q5|O%XQ)V3X4!MrBVmf2`<)MZxhq}DuFy|Y?pkJFWt zQ6IS;t@7J68+-C*i_D!B`HTmRpy9r`b7x&*&pS&zV zqtTqJ@!f^xQiUBR0{Nbocvjci8yXa!5G=XzT4?juHFaOQ7)00iA3191`uPm+(!?X7 zeg7FM8eONY%u~30!dClHF+=O{kiVeH>>BBe*JwbcF(>!UJtgHJP#CMJa~C0UzGv}zh%GYwzs!W-K~CH zx`R!+M|Q$&T-BOQ$^i zJgdjCl5^krxh~h|mzf5)Wom87DzePo=kbqi0k@Y9>+SoZvz~D>K6LeU9K0Vda>=eE^}HWYU}$5ZR`t*9 z4g1=cTyyG5_SUDeRm&}Q_}0c;kNF&TVY#Q{)aUa{J1*=vV#B5uy>HXz%5PV+JB}?p zTK4#s;VFi1PU|m8KipMdy(3}Q*}~b)t_kZ5D_=GTJzA+cM_oO_2krK?`f?wl-Vyqxa=-f}p4;0t2DKf( zrnEBSnpKs0M{i@1Kuv)eJ?6$hk z#qN_o{%no-@QR~wPHk#!-mI5#m-pzMdEViqxnx`3?7mXNI`z85(3mW?J1+x%Jbdv{ zP*v5h_4O<1{|su?k1RQKm~8L-yTTV5ec$Wz%YDg^_k0zP_uHa6lMB$WzE)~bNOC?X~^_-3aktJT9e8$lZwL9 z7tZ?{AkTMTLB#JCN4HaH6?axkcAJQImppvND`)fM&HGFDXK;0#F$-T=xjyruw8q-x z^wlD3LyNCHJahE3^pZJ;FG;`Fa@>%2kG)sj=H9u4%i_7tx{V8&isuxYuwL)?h~xJ^ zl6T!ADd5xw$p=4sL$5MUdHKsBdRx^a=8$VYrfV$f;9j-;xW~(r-TN*SsTTKlx+e9M zntv9VcX0R8Z5D+^try;(G3~yl<|gymYP$FDGY-0n#`Ge`1U(JgKODK|1)e_BreJIs=i!IHS5(Kxif+qlO=_v-W>Pp z&su-`%&C1j&$eDO&7br0qlTmV{QDWISF(PeTIr^1U(v`Qb;Z_jy}=Rf)rMyix|x;M z?TA%u(@$=eNZPD_Cd0crKWNR_{|v!i$3ytm-brG$SjRYZzUFJoSf6|A#6xyIII^ul z)$m+Bx0&q5ChjFqkB1xX-r&Cf-6Bze9}S8B>|=tr+&OXdT!z~ z@$)^0emU)YzQw4qY>TrG_s-zOSH5@zFKc3+Z}wo%Z^!vE8>^N)ugzmqOK|wneM=_) z_q-YHuPxY?)h79uR;`&NejtBQXX5dvK6UmOos`K!*B$fO{)$>i^E zb-kM7iyF%I-%~90>ztT>iP7!z=ea%)tn#<$efl`-jNY%izYpELT733M?58xvu5DTc z@tfC2wz{?)e0_#9wAp-a%<_of0{h*{sr<8--?Le>&ieENL5;lC@2{DeSnMf#%k#i` z-`=!CFWyWzbVD^#>&;2w-3#_7=IoRgV067&xxeD=pY<=LubO?^aaVP_uiyJi3Eg{4 zYmW6j5mU4q#|B-hk(vQ=6V}L z?q0mv_dIh}*rGkWpN*Fsyx-~8V6tof48=qBv5TwT>xakRpXru!{=H#Z_x=^nKHgGT z=&)~kVYb?LF@>`Q*~uH<@9^qbBqD3P`PR3Rw&yQxAA4^3xVPk+Po28;5%ZO2H%(g+ zCVl;g#?zyZZ0|Zv+vl_S^uME9zD_-7R{X`Sxi+c&=_9MX-jV4ixkWFnsC-bCHk-q8 z_34iqj@-hkrNW&tr1!4IHEZ^HzK@1S)*E_pOOyuxZgjq+_*T67+vCCp z20qR{?Q#ieQN~E?s&D;FQ}{&qR?pw@?oFi5iwoE1dp6!Z$#`wsbhbpt^P+zF{~Yvs zz9_}nZ|P!QaM5(#ae;CzuHDPm&$yT`=eoz8TiAU|-2JSdof2+Lr(bS-^X_$y&pu3J7JVF{y3(!9JSXAiNkhK8Da9+SdpC$q z7r(xtz&cns;K9S#z@tH?9eegh#0Qm>-b>uMySzd&`u+M@J)S2l_WAv6 zlxB?f;?ZAb7;sn7H7i{^X*FJGkR}$j%}{qE5>6ds~%{_^v@7c zugy#RawqTA+)tmGCplidt-3Yx-C>^aIOAKv2hPu%J##VZ?cZ<37jB=mBG8>*{)(%? z_J%uq*(*^4gmKOSjqkeu85e)$%+Z~KzMvQ_pxG3<2`$x}F7 zvD@FXck22({)#n^7CL2dsThP$PN=zBaDY|wTK~+`%{9&m+2Mb^&YG{jY#0`L%5wMf z&PcX(>yNl~7e*d=q9?Mo>Y&Am{CjGll{;2X>4=qYTzYomsZg6w3H8>Cx(k6FOR=WT7>GUqYi4B}HZeQE(8S=OY&Kp!up}t>l}m!x^6ukDy^kq}9-12Q^{vLSS^pV)&)aIusPPs<7id zYt!%NJ+8YWm)=VZIZ={(Jo?-07#7y>zCB;3oWEOjTC3gJzHp_gmCCZa9}Ayte9Lg_ z(xG{Vym~8UTzGzN@rCu)bN-e$2yTkH{lb_#X}g1OMD46ryS(+RDbnTF4OZqc#(q3w zbYgRGs=<%GXs*u@8^29_uRZT`&%0RLnb&2v%Xo?}P?Nh;b?ng6nZBkyVFqu{Ez|#Q zd}dF!RC~S0w_iIJbsbV(@}y_O!izS4?G!Ya`tQ^i?T+2`>rOyh7y0Wus3QA3u}XsXixU17q#1^+%RDMxWik>T4fQsKQ=ed4sk;xg{dm zjn~#6S#x#n-GuXRC+Z!Vz2=JbyyF#Z1*`sEDNnsxtZ~+Q&cf_7WsT00N)BKDJ2yMn zbjp5Ho4C}^Wg%fVd~Lpb?bOgHoxQSk=kd2klG=8c{F>P;nxF9G_sn~y{R;KQm8ND} zM3S!s`byk;r8ejK-P4!Ns(!`PD&Goyp{T!1F*R?=<~W(EV_z0Y9{T>8O~OAy*3!!F zaBs+p{|qO5HH>8ve|B!;-WB-g)X}?-_?AAki7^b)Jvgr`{Z+8wyL9(w(pPJ(z3pw;a2;Z{Ma;+YoUfUpUO_MP5tn7?w;MRk4Q9#aP*t` zJr}O~Sfs(2lfA|3U`##yw%{kLdR%x9(_j1NWgt6E-OQ`ZmQV88hpm&|SL&}-j$pT7%r&^yj|x8zjr z*0rvmQv3=m8rJHXe6p;Rd}}PdF@DPC&)QOl_Zb?urCxZZ*!6p*uU?eX7d@x*i>%}9 zw13E?T-;N-uGqJDh4-wZ*?IGKHC_F3#oBp^_WqCO4ch*u&ABW4RKmP0%=>e#py_Gx zCx5RP?cQ|eK*6)C>k8|itlHFHZh8MT(*^yu`*8}a*PQ3oN6yZk`u_PP3DNa+^^skN ztt?hqpN^FZV<_9Jf10^OTcogPhkoysBMY`(dHhH%D zqFzSVzUs2wtvScK>Q9UrSGKGg5A$uKw#&DS4Rb>(!#jRHO7`9~!}dp?g4VXUhl_7^ zyYCd^my+MRz^w4~C7mh9whIUZb4!(6t9+EAYg!<+^|?~jsnrqj8SBE&O7`adXPCVA zg1qtOIW8}sU%nQVlK5r%x`cD;@v91FG;3~G*!A^HjrOreJn7QS_o9}1ooc=w@R)bs zq#arFXD}Lc->*LVD?~$Uo+*8*?IO+L9(S{V%Jr-7s1c>6fDj8<81K!$J(_fSKU`VV$k?0)MYX4l~K~h zcSl24hZ{%rsCS-85AjfQy7%iJ>*fjb%KkH~^pjS6X;$9jcjbxTYuT{ZGI#4=bVi2+ z#VLtj6j1Is;TM*$%eeFW8qSQUZ=3erIM?(1hs=SDLk^6MkHwFBnqgO2sJ?rV>*Q(hRoxqDxm_9d;prS~iJwa-7&-TC5- zR@l;+{!{ijTr<{dd(&C5qf)2f!6QB9Ysw3&MUS|LB`)2fcjlK@qpI}ktue-JS|L7O z8>^2TIwQ~H!}giyv|*yp#QJNb8NyPcvPp5^D9=&-lN+Vo<0BnCIEI^q~rhq literal 0 HcmV?d00001 diff --git a/docs/public/UlJ4ZDP.png b/docs/public/UlJ4ZDP.png new file mode 100644 index 0000000000000000000000000000000000000000..d38f40deedb0fb54876b06769673e3a51b0defba GIT binary patch literal 26297 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 N22WQ%mvv4FO#o~JmvR6A literal 0 HcmV?d00001 diff --git a/docs/public/aEs2RuA.png b/docs/public/aEs2RuA.png new file mode 100644 index 0000000000000000000000000000000000000000..af3ad1905370c2acc879409aa8d1eb4e809c8771 GIT binary patch literal 3784 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 literal 0 HcmV?d00001 diff --git a/docs/public/aTnG8TV.jpg b/docs/public/aTnG8TV.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6337adf10e8096d57eee2d7513f0cae6e904e9f6 GIT binary patch literal 46839 zcmex=(@!!_Yvt)pcXsQZjks0nRC0^$@`lU?E5?q5Hjad;EK^!m z>iBt{J=||+^O_~CCtt95)>I8=4W?E{txJ#RbQzv=ipf@#IMZ<~!fBIYlxLVgWI*(a zRjb9^Cs#(w`6gwpj%+&BbXYRQ(NUE}L?EbT#R?78s16O)sA-{#L|e22wWe$cnii@$ zb7#+1KAj1RB9275Y+5Cmr|rF_w766>?9rO#dMi(R2`{_oyUaka(IbPQft7*fpf7j7 zT*leM{Wi%F={k=ix@WGG(?D1J9-qmnlJ-OD?bV++NkKS$#6~ zHRpDZBu_`JrqD&9EIpke0s$TewSrDuXcG$R3=vrCZJg0GWy89#v}a5)TRb8aU0QeW z^h>YlmsRsR8kVvqG%f0ASxUjHJE2paUbRflSXJ~USKvax1p@|w3rv|Ix2DUa%()Xd z%WzHbwBj|{O4GOk+FDG5Rwb$}b#Mw1GMF@zb*kQ6?_HbpR!4@0uQ_`)+t~M&Vv~eo zQ%K87kOPEPs3a<@crNvvFj-WM)08R0vt?D#siivFfi0X18yE~2m+@NVnk+XBd3v+F z@6D>NO?R#>&g@<8ds_2k$it;V$DU}o8VVd?m~dgrteGKE)6}lz_@2vI6}f4pmQQC$ zXNb4fiKebeGxg>=pSUa=y-DldlG|%jBcqySJ9`BV@(3Jq6Ec|UF=?V!$5aom36oVl z7pgh=gv{_-qH;xXspmw^l?BYl8WQMQ@ht&33p| za^ymWv=75FhPIZKF1=b3UJDbWda{+K3!PeeWYdZxn^qRC=`vi?^jP0t3s1Hm|l8gNZGx zltNin2c6n*Y?II?TvF%Vge|eDDGr?qNyb1WHQlHX-d~6 zXQ8$h6NaWh295>?wWSW6CMs8Uv=!cx^hjDJ!Xqrj8_IBT%gZfqa;>HPRxMhyYWhm2 zvCt~l zB-bj}D%VedDF$CBDWMEuhZ!mt6a+3bw9E>b$!W4EMdiZez|Q`DhlDl;LjyJ|spJgJ z)2oUut&)wNo@(-@RBz?-WZ{L&9jq7^FdXbiXlr0_U}$4tV0K_I;bCB4U^!^8#J~Y! z`$1kMiIpa*UIG^;J1}vu%uu<&pmIUY$(JKbXo<&Dmn(}h1h_KY%w(zp8W@t;7@d+c zFBnJ!T$Xm7^7QJ?vQXDZzt~8f<$A}SPEq&qNy@ma;iHnM%qgL`AhUsifkWEGK$oF` zfvJIkMc9FXNusesVuk|C1qBubUnUNgfLRlKqZm0dgag!CW^rZ+G>9x>@OARl5h=PQ zEpU*h#oV(;;(!DX<1~ig46l`|zyawuW5%7`nukG9XVRKUryQ9Q8dwhU2r$f0T*?44 zzo~`C;Ut#;=K=W7P?*KO&&mbv$M zRDSNVnLDKNb4+=UO0_*&>zrfiyWnay-`2AY*UdPtSDrYK&Rd*ddbY6?B)}YTgSR-v zH#sFXbxUt@g6XwWre|9cDw`SS7)YKtkY2hjokuO;j?GbKI@hCZ z<)ap4DCv4A%}v>;$J-z=vg1&io9GM!ol`N!b0x$|Bf>I!+(Jr)gWrBSwZve3j<3a_TBh;>lc))t#&wq_9NQW9AlzgT5Zimdsq~GDGD;TZ4?s zp|nYdc6Lg5t(>aXATd>SYLL$zS+Qlu&OL9QJ@G*K@0jZw1*h|QWrbL(EOKh$U1m1p zRiy8VTwAtTyrwLQcIKA)b$|H1%tIe+)=gS<#y8-y1A~vMrL>QP5(8W7^D2vFJ8yqe zKY#!Hm-lC1pTBAF?4CxF*G_?3r+vg-p4 zns0n4uJ!xR@XT)Be82g#pQpc!w98Dt^zqOAxbrLaPhb4X|LLdNw0-q&Wo>*XU76{z zB;i2SvfRAjW7GGZ|1@t|eDRb0&Of(YFTMKb@V%YCWD5B9b;_vio$nZL%)c!B^e1`0 zlb`t(#Vz_`e(YE?mvF$crJkSvM7=Dm`Ok3Hf5m+L7s;!Be)}%lH`l%T)BE~}H`kTk zyn5VoW!;YltE`tFYA^dE?_}OnD$?quC)(6tu+HPN&E*C2j2Z99*sf1WSn}zQjp%aU z-G}e#eed1-{B6Wa&wjpZyUre+K3Uk@_FOt&>6@S3Mh?0j*Uqj=|GLMv`NdxT(^lHn zU6*fluUOO=w*TzD{?8>}KUCk*xh8eAyLiz7G7@Nt&)G^&K=yaSS1L2`EQrj@_S$a}PD-_lS2zFKP^pTNc;c)TdqUU}upXTPd`UbDTMbF994 z?#a`aFBZ>RwmL4m^!iEViJFsBA8lG6rh540&zX;3&7Q}<dEJy=BCRppSgNA z%dU;{Mb_KNOsJ~M`*J_{;bz%CbE+-OpHH)%Eq84BjJ)jArV?C=r>Cd8>&_NP=2*&m zSTjzM>+HMzQ{R61US^O!=~afwx1E>!41RuIzP0`M-B_7l_onU4^!v9bdB^qe`9WuA zMF^|y_MWY_%{iSfx1{zw{})+n?e5eKB2Q*K-7#*FSOh++VxvWQ*TdZI`WiG>7Ni4pZ%5J;_3Kqm9fvH*2|0X;PbD6KTk8 z#@k)H@BXyc>&ibrJUew~Y5TLe{~1pD$FF!+{kkrDVWH^e)tl2~y^m_N>RK$$SJRoU z64R}6;cJ;`c=F47<6rwWzq@lOcv{F#yZTerHGfk4W%r72KlNqOM?n$kDv47)#kyXq zx6ZEJnr0rJyi2IIUccnmwwTI>gvsufpYvDzS+&)y=0Ah8)ycKnmnFTloOAqY1^>c7 z@6PM9UE8wz>T_!&+sf(bJRz~WSDegM-|~2S|Khl1=R*0i*{8qGT+jRbcbsfe#htV! z&&>5J_dorwd__^IAFJ2FiB*uMGUC%-N~uc@4V=FU;6Rm(Ecob@VB z7QOO1l<}m$xohQ#E_maosazbNbdbtvGw8%O~sN&+k5vP??nO=a)VeGw;I{6VX6^p9e>T6GeJ-kd;+0JsQ?J@tq+HMF z*nHtl#lL%YX-toMHYA5EII%hSMC`27O2(6p_dc+@x&7&{j$3Rk2|xX>*`?;oZtTw% zJ^E;=L-@6So;TH-AJ)o0pW16aoA+X*m{;I5*2$vN+UAD)A1sedcWK*pY}d~@)059$ zx9m=43>OPpqUH0-R?hfE;lYd&IkTlLy2&RErk;3Fa?hI4$kfa<(dcO5)bibN`5QLZ z7qguU^}O-*^N;1{z19{mz(PIdSCyc z^5}D3vnF1-@TGju=BNMoogbW)-c`LUfBm2I*WI5)Z+<+IbXHAtrf{0mt+GU;ix!`g zZSLGCE3Vu6{ zb1oTPPV6>QHosI?{>5fn%cX+n$9Bn??|yz=c>SA9ss6-SllP~!{;C#yRPyWR`Q%Bz z?3-iy_^$Kp+4M@|$%nF?uRG!$f@=PLKk@VL_l@y(hreh{Z`}7Rxc&C4%^@W_Y?;j> zcIqCDwuw*teC3(hc9XX+s^8E1EAf+!fBlchn$PjOK3zY!KKnvnaQN=?D-Z2^VNp}> zxa#M(ychnnlYV(mfBybO&b-|RZe97NeN_4OdQQ3j44qadkAIf;I&}TKx%IS~@7vGM zid#PIN$Jklmp=Zr-EFh%fe5a=Gy7ib6(UdSJ`(@-!y#p%|H8> z_mve+OEqN6y6$#0)ANOt;+CzG-tD)X*IK#Gc7FPdH?Qln(~JBqe@&_Mzv|xo=&QW4 z_4EVN{)(S?-0?bn%G8%O@9h?w`D)r~eL8Kc`fSyg>GRI^R5T|Qu*LTJ&bC|n=H)MO zty3!7+^sKtRu_Mm_cJ)U>TAd8$suO*7MaIQ*m*`J_u9m?my4udyO9wJS#}E=#2s5G-8S3o-i$n3gWIOeIaf-zWVIdBDV8j^ z`BrOu@#Ei`Ra)9&+pbBLRQjDhuzAk$jcfg78@!CpD4V{%bojM_y3sG4=X#|E#fFz& z$(dGLv)k+nD;B;Qc=GA1ZL3edGpx#tT=qF@$tr=2n)0`E&eYuc^|$I7-*nCg?hbu* zd-t$U`zzBvWW&3*fp1*Ast8ckaoPY5|<-c$HH>7Tic@o4kp`ys? zW$|70srs$mw+`#K_TO$kK0ha(pWkKjf&CTnEZ;kxFJ2t_VBV{K*56wyDr?s^yI;L= zrt3y$(3*1f_^YzL*Ll&t%T+=@DnfIkR%dB3XvkTs6ad+{G zn$uP_b5^fg_-R&pLBY9m4;~)g5#ztB>c)o{)2ZJ5ay2P?I;KyYkfJ5a(No8G$u2!< z@2_VY*GJaWeLe5?N3FWOt-s_$3Eze%g4YtCeq0}HvwvIeVwGfLW#MJnd#)r^I`Q-z z*|aG42)PRZQsd~-i9_$cJ2DtbvoSEYSK)uC)0Dn z0%mZUC~(f2WSH7n@aRT!Z2HVXN!KHr*_e&`7EE8WV}<3r;B^m8&1!mQm~J}8dhhh& zd1oR`zbR|#bjR@~bnYASLyU{y~Hf9c21 zw=NvY@;yC0T5t38YTn12joSiM1Lkxx?VTH*X0xN<^s8_3rnl|R{OG%Mib*)f>n7{x zsqc#F@{LO8nfLApx_VYG_r5vf>}4 z-!JbHa#?bMq0R))6zAj5ZofX?`(SzM(t{7ytrj=#tlEC^N~!jg^xQXp&L_oPkMDBN z*m2=?!Kbb10Y8)CmOO2K8#1TO`nrvre*KwCj$yL7X9`zGe&Dy$S!yC0ygzEjFMhe$ zq^X^jrW;a@vw5EIi>d7U&v5VaUSZ|gT`N~5sM~+m``r}VwQ^ZY*0Cde6H-;DC@f%E zeYcz<`iv#X{hoo~<6el4&0Yi{n9py)2$lcAsWm;Tvs>2vLW1}TI08TqS{#Fm}g z<9ChcYRaZgwx>M~N0`=3dhzb{;@6dX_PhD?iOy7URBUiPHq?DC4IhXVsQ>b00? z&YZF})g)NJS7jPgXZx*HK8KIpc`SbHXvKF1&RH{#ub;-VlWV0W|FutRzWzDOV{z}( z;mMI}BDb!&8p#pfyEgY#wfcp!!n8^2G`5@i7|N)tzpMDVp~W&|$|0$Z+c+||T%5o9 zv1b)Ox3|gGm0Q=Zd3@_&;O4LL(`vo8cP!b}rQsTW+HUcu3!iG^wM@5f*><%3{yuc|EY^DFOtzk`>9IWW$$IQ9Cu zmP?8OOBooL9Zgj`8`y7cO#NK+_|Jqp$67cSCanqVT4NNpYVGm$6V4&%Qd9l!RU+P5}3wC`Qs!nKwe`=Y<sWjq#g+BSYs&F+_*o@cnt;w;Ln`OolTj%}s35a;PMo&_cs+B7b+H8!Yvba%Ni z{arlaRbAnp3ED+sUI8%`Cr8-}XQo;4)mp1H| zgtOJGdZvm6hkAFttt+XR@NA>bnj@(^k@JGtY-V(wY&W#{lwejcEh)^++#@n=)zXK( z{j2`0ezkSe$K7+*%Sv*J{7k>HFD7BVeNhbOV-*gz#+mH;s>yR^v|Q#m+r`Nmt~l}0 zX7x*T*>~stRb=Z>dT{vkS2?2(k*YWDY}9I+qO8~xv&<~i&xP|?&@73kna+02hn^qg z?K*vS{k&~|*2lY=iaEv1I>xv}TiB?>JTJ-P6CXF-+3<7v z<+?(dd;i*=Y-(y?$j~#E__nq9l^@TH&q=d+!rOF07KiYZ>8+poE%^mMU*H1HV&Uh% zq_RKv=7%3&b$0z!qq9n)3whV{Xj=M|T57#F^EOG>)49@ECUMbf!Lk*HCv!HXrDiT* zkV-Xm^lH1&v?k4>XqiuSdhy#ARXX=PPHQh(!B$ak_5NSo2G-tXhHS^QSDUDGX1QuG zhKrfaV%A{Oi7b@fAMmsN@?`DMkVjp@eC+!l`q}3PmzzsGo6)#H?A$glwXK()h3w>U z37QqX;y%Zm)_{|xEVUMUoadARL6 z##z&+zVp#*4`wqT%RmOsg=$kxdUnj(6cu#Ihf!{qXp;=XOI~g{A2-vf61PtzS28o5 zoN#zTN+;Vkp8%fVZIAag%v)DunXH?<=~dP|nSF(y&srS~nbYII%ajqE(dwvsQ70*+ z)k9;7$%?zb?9c7%OpBVZT_kE+IQN}Gb^X2VS+PFlJsAuRYA&n1wGK%$weje9o{8?- z+Tqu{?dSCisV6u!nU2ZaNOqt2#`4y)(1lNDxy@qTNJUNzg_N>Z<3rtHq zF6tyOIwj3=IB>jQO`}p->zBRL1M9zOuVSYL25n?K_RXg7e9BeTV~ZARTxDPoXlwA9 zHtV9UhL7i}qyqJhJHPBt@9Wz)X-T8fjH2XTf90DO;uN1APUX`%DbUlE6~N#ll+bok zlXI21hp@7Qde@rkXPh^5tYJH;pw8yZZFKaZ>C=^27t}V%#`{11?Kxd1MQgH-L!s<^ zriuvNu*@~7I%OsoG@G>~)D=FaXm$wpoN^WH*3-<_(^HB36)Q+uENx_*RuLaWyC>5^-g?_RC1{Pc?* z@1#wgjVZ^rS8QrvU|`@}*x>CrS#zRMh{#v7l&iNT6buq?2l#3QPcR6(#&E#1XXmsl zt$8ngrzh`kwn{tMcWTAPhJ>H*%Rj&RRFr%}%=(a(PlB*ypveqhW!ViZEO#Ydn=u(a z37ToR`RrZ{H<2)Y~uEsq{ zt21+EFwd<31|P)@3GV-oFc=9iFflT*GO;nTFflWN=b;&ym<3r_1%woY4Mjv1l?;p= z*p!VORZN@$5(*j?{J+J(!N|zK$jbDeVO@P=($Q`)orsM|NB6m?{%1HK{-2?CWB$M2 zNk_Zu-{nMX%>U0&d1GVJ{r?Q^WjfLS8EUuO$~BwqyX}#d!gQ&2GVfsa%R%8OR!Mt&dl$+6|pht{-19?DA0+U z?DPlmvqk?IzF4pEnsnsy@%x;ei@VAX`NloFac4jGbo~$R`_n(9S?uTbYs)%gr|Bo6 zeQ8SO@fGoRf2`$WJ7l2VzfkJptm$Wyj_&iC91yA=oP0*_aoEP|Df-(#O}#y5F>~pc zBS{N=!_O3oty*fznQO4M^KsdJ1I@>Ys*e&XX2>bAcQo3hDE%qnmu5cZ5OG4}qri;$ z$9GJ174_PZuJfOPXV1R4zTQZQs4FWkg({q?PSkyIulL3417PU#>PXPe`o1TxH0CL> zWF4Kks7|V=)@QR|;EHpb6r*MF(LRM^AsOXM0?@lcv;hUA`%`bM8E4 zNv%cewI8T%Ia{0&wp6_`F>9C8@iQMUDfdnBH=G$PZz-ph-ZfJueY*LsYtfn1%qyvmQ?@Mswz#V?YE{;9 z@mp4R{Ie$SKD~Uipyw|=i~Vaeg(bd388a-uvif&xR+;L_-QqbNcdvB6{ws93uz2^j zEoWqEGrz^CoJkE27mqzCP_UKN`|!)J=4S4Ns!9KLT@jQNdb1!pyS--pyWNFn>Zbm6 z_Z6wT5#bwlM(tN=ZNV@1D|5ch^%R(T`JGYzEyrJ8<`XBK`||j-$?q#EeKQtso$~Lt z%u=c7#Lg))C6mLP=k`9TihH-F<9qv(4_hCbiXRt#Ep_C}%%np?yO(Po`6%SFbgyUO zzgZV~e`Si5>zSD^k`~m>m?81&aBpR9OZ42RiFcl792fZZ;GJX4q_2evZ!D|KU$ey> zdlcm`p;P4FO|S3kbk3?~oV{z*vNp`(#pQYCLaQ#V+!|1%{OWC@+p$NstIB##Pi4KQ z{w*a)`Ly}_&>K-6JN@5#ZPA=+7&vLpiA{bd<*!WL(!Z?t=7h_PwmUlPOnrj3EHhtp z)jMa-E zT1(VBtucG?rd?O*&5cL7IuTtLC%m8R5)(OR)ABUe>Q{-|CmjlDdCIA_$gz6KddADW ze}z_BcVGExTk=)&<;4B>`gQJBg?ybhN%n-fq|@9Nr#VBdwxoJ3zcOXJRmO_;S2;Sq zy)Txim$Pq+sLX4+I@xfd*7xn~%lK8Q$y{x|i%0Ikh=2dcK5xUVro?jqfL~Z|*kU8MW-~X`gwEKkj_GGIaJ`rP*7a zD+QIm@+ivpiZW5j)rmM6|1pXL(ls#bI zG_x+N)T!nHQJdV<%v)1mEB)Fl=*8!PunwJ;&Z(-Y#`>*6*5^@4P(H+H28`KwJ2ur%KirM}D)V=J zgn#yG)u1_x^E7ts@TvWv^;JW6%a8Nha^83TXXrSy_O|S=z6w~gR`*_ilemq__lr@R(zMKbLtp*8u;S&FFGmtT z3T&RPdnYHlXKQD3|5_G3o^z}6jyUi0mwsd)u>bDEqCac&gx~#sdjB;4da1b^|LtgB z7y0k~tNw=AziOSDm)*8O@Scuagcv%#-x_+a2by zs>df+ebLh?Njjgo;=GZCCopWt%W^TBc zcaw(OdwyvR?v~$aen!V0`gG2`Rj1#+^6zceQ|l8mCms8GT_^rS+_}7W)9)NUomz9Q z>1gWO$X8#(#U|O_@_(iN_LS_0n8>;A_a>?*?*4cv^u;5?En(`Moy#8DX}iTldEPj9 zFJe~h)`=!b$rV@Pwq1LAbX{P_ZJk=}sfx=U?tcAp?U!AbVv-UTRtCBR>_`i(s)+o) z^u;I3TiajxnC{4nigwe@UmL5mSG=an?&)cRvcnqxuEu?-yHz*u=yBoZbDN%X?a_&d z`p;11|0?&}le`~tI_DmlC+D8j&e)y(D_>e_OYxd*PdzL=HYOHsoBVdVm%$OoUs)%o zDupf8y{kD_s=aO9dG?qH9!Ht|0y^7vKAq}SS?l5ZcCOV9Q>Bn)B`G;+*K*A~0yC;S ztK7`={9SA{7c=wcn&|PIUsWBx=3PRewQBE?i$@Yy9Zvajl;c7{lR33AkTT@mAf7rVI;c8KXt^NEFZE{<8 ziFyXC(=yHV5?y)a@YPqTKUO>})O~7bGjGSI8Yh39Biy=2?xu#G*IK2s&VB0Q(+QQO zjHy3DoI(=i1zkRdxc4lvNi{xppyI})l_GKANXLQlWE4KRjX4&RBRSXtP#nW@?m27 z^owHAuJgj%ZMJji?B-}~ILOc0|7TfY6+!_K4)xj*Iz*@SV*sk2l*$#53zUD+|GP`F_;*U5@iU2@q;mYbAk9b9kJ z_^d!Ko%zh8%2_t&PM=*=x$s$=v~<{}SC9JE>AXrh2PM{a9SQEAwfXFf&uNtlpDjMi zZ)$U)a_-4AQ{AA&dGnOEcv-f(tV#>sKI6)skDul2RzA+!eDq3s=L#E_b8C)Am7ks; z5|TNWLsnw0M&B$|Ux``eEfapMl@gr(Y-_>AJ9*~D)mET3@wwGjXI^i-Hu3t*M`{(F z^R&{tRyd0r^IBdhTw0iTp6^`Cxv9aqMfrjvo85FSeD)AHm+Y~2*45RfGtLT~S$4d4 zRp`o~g;%D;cTCtAWD|2k484ms$o9&&Mh|IT&(H2S-0uKDvevcD{l2pG&^!m zX^+XRJFlz{OHa?oyDcCX8FnGkL#P7zCTRf)UWgLHg{*W=7c|{_rE;;`}I`aYN>7E z-kFwpmw!DkdU|@gUhH)J!;HLB#CnoddU7~3bM+5B{m;OpaqvR%REDWKD_^%Vb8c+fR+;#8#k|K)lVvLgxaOk?T1i?-T8S2~^_M5-dYzXVFEw5o z5K+|=QPs1&akcuC#N_tnCuc5`Udy$kYGSoYZux0vqIZZV~fKc<|@84q%0+yxz8&NW_Aa+G-) z*guCeIeuLZi&?+a?{dc@i(flt`z}KpTM%rN_`@?xtz9^A%Z-w=ZHE&#w|0x^9y+>X zeV6ltFZI0LVmhwe4`=)^I(7-vwTE=|Il3RtRP2Qejev#>ZsnRyGwV`O($ziZGT|a@ z@FQRR)UDg09}O4X+K5oPVM6PN6B&@<1QV59v1!+iZs|X&xNs487(wXT(Qavw$6N)K z?lVhVxCj}p*#68`_teoX+otJ6H~pCLbz{=eEgQFN)`{3QO?PSQhmAd{-C{b?@s5Xl zkD4C4wZ0eTvZA`?)lA#;1mu#ujciW2&-C~#DVKI(vrFY9o0D>B{l@My`;8_(E3!G~ zKGUai%0-#8_u8!HJbsipaiwIz?L{$rIj{66>zvd4xkxNo+UA@_dTwC{=1;iwzi59;_@n07Cz*p=SBM90^x zG&$p1v-y$x!X>^Z?sSGWSzS3A#P&maL0-qK)NX0-I_0Pv+qDaF&b)rplC{&u<&EX$ zYLT)?F zQA?q9=T;|A+#TIH*IQ1jthh)oW@pi_n4NVzXFkfR25$Q@o#Ug+PX8XBRb~s%n@@gm zwtC^$i~XTT`KNpd)Z8vLW$w#QJ7N^PB7zqRFuZW-AWeEGg>MzrSPd^T^_wRS&Dx3$|`tNU5I_U+ZR5+sxwQ)f?aHZna+bdRxEi*`kmqr#5CRzt63G>G_=6B{#QB zDeY(fu&&(jYgu5;(nXJ*7B#Kz)(X9Q$oZ1;Wxn-6leSnI8%=%wpF#h1x47t1Zq18F zW~_0_%lqZyWWUG!!>4~6_rKqFmH%zo#TPr*S>}p{ZP{>TvA0oAaOYJ2QohPfdu>&3 zzLY<*KF;Ktz3?@8&54iNJTsQKOjbKB_Hep$nIiYp@QkFTI|9ExIeM0FwcE2>7Z+#D zU;n-BpIpWFfBAp1s-}tOA2=BD!dq~r?$lMgnv5!cU$;rR>-qgsl>Xt_8)t^y4=u_` z(u)uA_RK6a?3lLVG^N7zbvi!&g@qmuW4oI z%)8T!UgjP-zFjOdJfd~m%EDjMbbnOrnyq>E-R!pq_v%FKEVR{&cVD{0HgKxjm2jI^ zWrz3q&ONeaUyrl?;){jtpDzBhi@%on@2==e`=&=13wG9;M@-(ab-}l5OaAVOR5t9p zwf1Fh_=C-6t6vuR&Rf3nmA&IePM)fx{j*{+SD)sT-7?+gUEP|RN%Cwl@8+v6Jr#e} z`^Qhao9lmv?Av^C6R676Z~L_@-X&3W*K{#s)Ar?O^PASJl_`z=y8h5nUqK<~2lJPk zA7+)ky7HHv|F&H1NAtE_&D0IlRXYB`nEQ3y{L7P#Yp`<;j`*e_QI0&;QbTD{8I$!O5p@?R*saFfywAVvWYMj*Z)UtNNDu26XKA z>b~yj{Ve&SWJs>Wiye;|vhL&G;(skC?f4&_PT#gh zez{nP;l-`K;)mLouyj{>Kk)XRlzRHl`-txc+;deF3(ttZ^}QFfAoR7voEJNpm%Y5iCg z_VejsM%k;G>s`-Vu6*}H&$s5yf&UCPc6&Zgf3JM=kGQ<*ho_hK%IQq({B`R{MPZCnM?Wr!DXe=%77P0-w z{RhcAGrbMe>bv!`^P$%*eR=GP8g@ScxnqO!<( z$@2JVM~BQfbwf zb!$!6p8jVoB$*qr!=p-1GACz|VqxuO^{T16kAIBoaAW?de0yG2kZWM~#~D4_!j~WI znc367yX)s{;r*P}(mTxZ#M4)(-I&03l8IKzFe``cruzOMSaz;OD5FHw8NMHgSp zZ20H#?fJ}a%R(gfOLm-kda`F?UqAZ~q4%tZQo=bqxtpE7=y^{QGhgW%#Syc5f13JF z)qBj(6AL!%SS#1z#{6FH&S%rN%X}tmt%(;un{gy{)0XRbIupBkAN_vuHD2p+(w*F; zTRd+0Uyd$3;C`R)M9fD2n;mtp1zq;DDjmLb>*;@njBn3p)M_qTEYY%G^kvi3RhP^A z#XMF^AKQ~_x>&9|Ouw~`^;G|rm`yLLT%4ZvmbJRS>Yh~JTzI0U=>4X*=cT{wUw6sd z<=B4)PM)fOFY_et$;?!i<_2kf8sBjIob3mBkB*p){~0{%;^M#c=T)3v{%7f}`kt@t zHS(9cC6#4w^3;f*{C|W&MUa7sk(rqlGL;10=EEq+B&1;A5Wp-TtZ10v*Z`hEVrFEt zXS}`U$s|wpX>+H1{Jhp?&LqDePnAiYDxZpPRi88RH@1EL*ZPS~`-D$&&L=AQ6+z5B z=wQc=9Xs}b2yA$gr=Fgkdab3OaLXjH$#C-hRh}$MjVn&CM6X(X+>~_P`I`5ZhgQNn ze5(F4oE5d5C-Q8!R%|@GcYIOnu9w03H?J*KeeL?>RY3c9^ZCvzUi>J1wfmh$m565D zsg;Xt`4e3|Yqi(aW$Y1Xj}6tYoqh88rfJP6BY zJ!d1H|K4V&##G5zQDu1nP&_w};OgEz;w^-dAI`!RTP z{_ca^zMuF(8X30tv+kP5`Cy0W?h3ua2Rn~9J(qtV|3ID@9`N8vJaDKpFfcF*3Mm*c z2?#p`Bq$m>GD8BM2^8?JH-4Gk+qkYvyuZolz=R2VY6Kiv1h?d}adEeJ1>UL}#N9Jzw3;*+UR>|>3=bvZ4ZaVdkbE1-2kKis}kgIA0 z944IDxl(julD(U@_&pXQi8WVCcsp`tFTJ%UGIZ7)W%qNUC5BP&s$XB)DkYK>W~RP+ z@k&mI4ce2uQ#ua)+g_Dr^0LRHdebzWj57PR(^$VY71l-U+crmkLHjPb6XpL(_Upv5 z&gI{+wqkmq)b8$8b0>LPM60Y++H!L4lDSVNdEPzw$?T%uPnFr~3t5tzIPP(I>@1Zl zo%uYjVUNw^7Z=yz<-ASM;OcnKzn)FSXh}sxdjwuj0{YIiiXSr3I;|FLXLrnO2z?& z6NM8Rm7RiE7H$+NC~Da75S(`y8QAQZ{xjVARiEhfPtSYSb=HFtf4?gq&iofV^E^x9 zt{x>{5ncYL;+7{qS{|&M-8@m|*z1=ckMElHz4yZA^q}UP-K zL*$B+SWiRYm5cvE*kazVYTmRXDui>=ufA2ii+e12L_Isqx4duKmI8$QPszv@Pt`}s^6nJ^9TD5A`3W@ccr{-SBTD59bgLeO~ z<&KLdwN9CN>P11TBI{L??K%eTI|Db(bK&#+=Dg*?CYjZRDhEEDWV-Ng@%~LRY6=fl zJ+xG3c2Vp3)DWlsV~U=xrCZhxUE$A4H_cbNuCok1a$}{|L;28UGW|L?b2#617B>2o z2hZeDba>iwLD^?RxbU6E!nt=h-+3p|^8D+WUpd0BmL*v}o;A(I>TzyA2XE%n+02s+ zEtZ|XTX1BD+=@4C!6DKrFFs71R=ZA|#dv|&#K2RJe(Wf}QQ_^r>*LI);Yo&n4QfnW z_yvO|hP~g;aw_h(;uMAEWgU|?O^*@an&Bsr&UBGs@mb^c5SvJY01&;r;wQm)BYW2lr1W1@|+ae8iR8jJbBKye(RV1wc|`P zzAruTc-p_1>k?1rUA}E&q0j%gM*5HI**7!Hk`-_0?7jZwXUU;MZAyL4$q@xp9!?I8 zVclyuXa2IsZ+5iueY<9xSNLYXwAthGO%^(PFUwwddNrIu>&&-fMY1VAb9Njnv3lI+ zQJf{dPvVW6wbNn2;^V2pnHJ}W=X;;v2o%Uu7COxHJDENQMk zg)*bOEgJgW24kAt52R4d>6k<*v$X(ce8TBQ`M(FoBC|Mse^@HMEBgZYK__E%D?h{IJu~u%i_=W`fzmr)V0}8`f*vGy*_hY zs|#EFY5(t1rUg+^TMRRkF5GYZl`}nIi}l0GydQDV`#`<``7iHB{K~Y%H_Ohy*|YJ( zo{b;2@V5#a{Lr1FbFui;he@kNk0oqrU6>Ii1|gPaL<#=#S#)6w>w=oK%uh4rwH*RW z=S-WrG&3q}>e9f#K(XeB=AN&Qgshu-6!OO*J5vq>X3Xj|_j)f9>a{XdYiY=;sX;qeJ<3`H27eaSXX{x!l$nvRRqn=} zIlEV0&pvY4E$yd6CN7*%N=d%-y>3 z?F7HO8(&Xwi(9luwJ2)ZqOJPe(^ZYO>bhn{U0bwO^vntqXO-P;?3*SQT?v^Jwsgf> z@1RL@rY&8W6%st@%2r+PAQ}Ds9Z^&6gtz#wbId;C=yG#U_dDhIRDSbJfK}T&)91XW)S+#1_N>NjA@C7UjTN=7D zG}Pml{jOE(4pnHEoVsE(hcQ6!=83i5tyfQX28b8BhK7dvtQ1w(^$voB@Tyg7F9)5O zb!AE6fxD+!K;dsFx8m6Du9cro6lxydcgvN{=7`KZwyZew+=r9JV;_cwh8|Z{wRvH- z)W2A6r;PHvhx=Zn$ejwgz2(W_iYlHL&rDL}4kruuR4;pCWu3{iyx7mddh>jqZ3`!6 zZkWX^;d`R&TK1$5cll-t-t}d;d%1|q_S~_ELwU~IHU_Y|J-XALx1%cW^d^~rJ0|76 zCyE;Gm@6#ap)udNJ@$0%=N!E=eU~JA$(@e3r>r-=@Nrgn*XDTp zL)UxdNuPHn$+fsSy61S_b64`1dph8ENs7?oomp}%cV_(Ra8`IXt9>Dht(0`}T(LXQzP`o&2IH&8Z)Q|&a8~*I zFYq@*)lc^~4DG9WCcju-Wj_D^5e8iW24)5(MiwR}MrKw9W^fBaP(aa8!7(t=ps;bG zL%_n12^$Yyd|1%%0orU}v{(Eo7XCTnh?JDnPc{BW42m310xgOxEe9q{mz`?cPx~LWfIXt_;Hapms8k;r%i$!jY5#I3fhHG44i!iJFH8chQ~#Wt0rIS& zRU(I@qLM(1qWyCF2RdtX7IOc*0MQRNM3KYi{1+`TF@gOHK*~A%CV(XC#isu%692LT zEaW86qW)Pg|I63EYH9ULum76#pFx%TKSP7~uiXC(A1?i8cwzOQA!Pr*w)Io%R~>Lf7N`-jL<&H79Ezv2%t|6pJQ1vo^K6J&(|h$uOf2BtxTAK1MxRWoNK{%2UsSYZE$ zL45&3h1LG$4HXRaCm4P)E}Ssez+*lS#3&9Y;hzV}7y{xCG5=?{{?VZ>?;j7;_(LTv zrw^-zhicX@KI3D!X-d4zt0pHGu(mUY<&Sfi{$bk{mmXbzB;Mr6j|D|OcTXNLx^JT< zuq)Bv*F5}x~(y7|JC3QP@M($iH?kXp+FMRqZ8~eHQ z+)l^JdB->Q>Q+rSqy6mO$&Jz{KDzxg{nYtzicdWEk9k)5O#V#oWdk`cP3UZI5&ALX z*zu<6{EusWYV#Kc{7SO_Dc-tV>*C$n9+kCyJB3O#-89{Pu?oNP>OOH*ylVHJJ1(xs@!rekir<;g z)psSz`J#_s*)6Moa9@^RkjuKrmvRs7ciA?%-)B)O+1GY1ap8~SODbfOR`@sBmQ0-= zzJB9{hYL9-aVmJu`r~HSw$JmE|0LJ1ZI)m59`*gtz@)rwajB3JXV#U|eE%6XWZf(h zl00zFpxg6D?GGW5j?C?mX)~Y8J*@0|pm?;o_{n#Ub&q)rd%}*fiu~#D+OR9)qEt#p z#_Tfnx>v46>KEE`uX$Kbd4I6-knHnK?#s=l_Qh@9yNnofw~the)qhKJ;yDQ zc<^O!>E@ukKE}=|5zg{He{PBMW+&b}_HcdkzobCUPsWderYtv9`MJ1F@sM~#?V($S zF}gZJMgmLqB&PUJTzff1WGzRG*~_ZkUE2aVr;GC^3Guz-IbYnl)cfp-Gm|AQZ?Vht z3fy@1ZeK%@!{0Njg)G-Eyv|sXc{nWIn#O7c&ms;MgIBB!?Oe>N!pKl>{~% z>oHP&(3nJtYUX*r-mi-CP>W$^CwLW_ktO_@cZxnfF_a>KD_=oqo>Ko@nxNe%V+hE>tb0@l)O@NlNF~ z&g7!$tKI}_%=8NGxFvjES8>yY?E5z=ALUB1wzug$Yc^jmNe#$bc=h1+H+LdFo^j@k?pK>U`J_(B zeeZK3J2;jXZd2N}PF?ZQoK(IJUNzxGxgso=S(IjVH}g7tJlmdgI3-nh<>v<}H<#=^ zciQ>Vxcw25AJuN)Ve6~1y!eO&@Z~3-;<8%|xFB4fif1+81 zYLItM=ia%;Rhwn`TxQJQb!C&7w6vM8C|}xNnYRzVDW0%&&ye12Y5Qk$%<+&M_h*SE zzxN)uPiq&LdeA4(h$nINBu**m%B!CGCy%qXS-O3lztw45f17LZ#@tff>WdN;-{vR1 z*FA7;yTm=AJK~(1mOa}1)|z*t#=ELlg=TD%EWWJCc1XW-yXDcbtuk|ZH!`(q&Hv7M zah2U9-R?%Wy*Cc|_@AA6r$$IzZd#FV+lM~(4IY`Zy0`n=FEn`g+QUcOdflT==Wo(2 z>)#1XoU>M5%q3YH-I5EjPPa7R&3?g<|@4ofz&n#0@H}g2Y312gUPcB;bNXp7YSbjpqB2E4U z6MEU31KE?r-DNcEypPT)vfZ6?yflB-pH0iSzwug`P5Ca*-84eu?pZH8bSiwBpD$4rjZs2YL6hsZGs0eBuu8!!L^Ky~I5tYWb3` zs@N;Ne3ZAYGe_~{zk(tYJvZ|z%T(7H{^|@HK78N}P+unFu3V$okv+wgxv+MfyV(T8 zh31SGK5gyfh|Gwc$iWkl#2K;3?3m$=WXnGB(;<~x8y#Xfr&y>NzFwNh;V~oQiH%N6 z$d!#w679Cfa;i7>GCNtmP`Q7c|C6E0%NQ|5!$p?U4zgb8(^-G3KEbA%FXj2~RN2a? zq~n)1a&tr-F4+6YqAK>t!)7NP>GZ2A7u``_`V&2cWSQ-nB{vQMs=@E~WC6Ni(UoQ_S(M32~{*0!x@SeBo? zV14^PLmqcXlx*JJ3kz<0x8LPS67Yy{deVOJ_H1p}Lr%3EPwe$Agb(&DK2s;rX5O(n z;kuveE$tKCt<2#|8h+o1{7FU!7 zA`}Bx&$yDe$A?2(X+o2j1@DDh%^T)>>)l#@+qA9EBWWM&g{DO}!{%PxwAk`YT_S%# z`_qhzr6%bc^M3eEDBGCjtb2aWC&QM04vm()H^P;U8M(?g%;rzN(WTc`BtLOZkT1`q z8<)?C$*;GXzA;pLo+pQIB8L+9tDaxtlKnR}8z*P8nz7tC@~YzE6qoEx>o?t+@sMrl zvXLl@?}Tro3YmquWL#+N#_fA*1&%OCt_IKlacTlR3A{p20-8+Om%5*BoM(Y?jl z*@vYqT3r7#FiiS(fAMYGhuhmCKPWt$e#md)k}ZaZBsWXsHHxHU?>1F*z0jpUJ>r&? z;_4iwMcWiVm}Nbj&7q`l;lY!Z2tC&>-uT291v^y^^#J?)Fb=p@$gPyosDUqqgyJy}L#Chcf#W?kRGrPkR5}xF`L) z%aSuMCD$nFY_OB<`2+WE*RT0p*J%E4p^cUmuU`>swfhOj{|xW=cKpLccl9r+O1Z zVxJusjQ;z`>4q#LdvuQ8W`?D=)Pl`r=W1DrLDPO`<=2c zy;Hgy*w3j{DxTav&1&AUTSp%MY3bg}IVr+<>XBDRJKIwGvfWo4n)2#!uycOeUiCNs z88k1p6xn~1-uESCX8L=sqPcAA+&NWea=**o5F9%(*LJc;l8jG|?1Aoy6Q8ra`#Al~ zcfa3aw{>&HJ#u2Viuc(|yt(**BPH5p_Q{X#?ZR3r+UAYlboO zo4CMtJssQbytDsz@t;fV{2LW+GAuj(U3`<|ePHsPzudJ=3)V0D>;C?j`vgHR#mmXu zJ_=Jfo~iw3u&AFPU77f7hWFDwxsRXtWS-c4>-Nout&h2n*(P7Gb#&>>4SbOO?fC7Q zjdSNS`$gV0bIZPAwQL^S>>bl5Oy`-eQt7_qJO7zHUf#W(HPTzZg}>!rx%gvmh0F)t zx(_ofPS-Jo*Bm>?d;F914$mj^En@Uf#(4!j-Ke+huAHM7LsMA^cMor+%8VVEikcb^ zJR4WEy6QV0dirRJ>n){i+s+ws_}H<8dCb0j=s&{^yDI%y{oo@qyCeTI6#k0X8W(Wo(v7Y8zxnec9xwF@3!k)S z>XZGdKlM+((?4RY=h<8tXWKt7eKW^k^zYutFQL3KAOs~LaJ;9!JE-O`!spxF{ zX=-q<;I5{x-K0aQn(i&X}!Rsh($oHQDSt`_|L#s?sR$n$r)@Dc4c%Koy(FIs&lJytUG^E{-^Z!f9?G7 zx3qp3t-auX|2NC|{|xN^85W7;MIK`M&%hD?P z?9fy3k}%UZx9&BiYP$C+Rfzn1JnN6*`uP{!cYpC`bANDikKfeehqmdRSoq`QGW#`i z+zgj4zw^Yt>2ctRrYi9V_ZQ~{o{3Xxt5#wOpD|w|oO|h%h;KZ50*s#AQtDr^@vr|n z!w2)3T+|P;p8M!M>Aptf@6J8^!dJUeJ7zY0ITj~=<(HuU1%>U*8H#$W?N-(;i`Lve z(9hJe;g7RFU)#jp=PpgGyezj|skDHtP!ahd9 zkv~vHH?5B+sl@NYNm*;oC)vmN_e)8sFG^f!$kHMv9xUP{_(Neyl7L5xqQP_r-}c5u z)vs4*Tsg(_OGk}E-}!a#v|1K{P;sZFpIU96J3B8IWI1v;F46M(g7(YyS1P5yG#a!h z95cOOCT4zx&F~>-uW*Fp8buZ{MJt61I|V!fP1`U068xyop=foZ?O>Zk>0Aj#y^HF( z9I7n}hd8-e)QZYXS@ur&!xIz5){|)Q*NRb4@am4kiG0gG{0gj??zqRkapA*Wffhxp zgx2E+jwu?~AzM_~mf?O6wtcWj#L*W{%8F`~gW1pVimU^X322PTlr$%ia&-k z9(&yQAt#de#y0r6#EZ%(o1im_yKi`NFMHa{n~;%Fp{Azp#k_1zl|XCv+C5V;XPdVg z3+1)FFm6if(s-6!eQH^AfL6cBjmdYk-YpE%?3`2g>7HTkAs0o-)y6?3DpgKvm6j=7 zS1w*V?jW0!2 zqIVQIoJ5aIk~+U5Thez^5}(V=?cpb$UO3Kl<5{5RM%fu%=|WF7v`Fkd@HRg=?)ZUY z$%}X@!j4`Kdb}{RPc$dz@T#5eOag6dxlTB}xN!OI9EZFgqMxOuPpJj&IQJ+$j-A17 zjhfD;cOr{gL=+9O;zWHTrioAbfa)^B9VeDla!m|x)QoIcwat0;x$<7I}P89s|rUpR`s zlF8lV_$J0OLO0Rx$4`M+o|w{{l4ZxXR&zX^*0wm{nZkr!hBk_4?1~T6KA!MlD*u|+ z)~US;c_MmoDt+=SGdX#0%$+b*F3(-0sFr>4g-x4&BZClZqw#mg=>MKRLKFf12I2cAeM~#q1Ny9xStRL*MezK6;Ze!Z>8F!2? zvNOrjQR)$?Leh zDU`gu@)~ciOW-Wy#Er}nF~1zSN_`Yde;%5g#NGJk_<83e1^)Spg$frpuGj87&-pa) zl2KAZmGhGwlfHRY9kfvr7W?x?B6sR+Gq;n^S~M0;e;}5T=l|Awq1`+mvE~#bTl)>| z9Mu-mhmv)U?wO$O)@!u-!iM?YB|-TbN%Bt8VuG29dwe!+cpjE1w5SEV-toCu|VT5(@Z0B zDw16aEt{%OPH0gy%Fz{kU{}nq91+V^DtK5_hxcCVr!GjCx9!H>MDA7mi#Hug zI(lejdVRacjhy{j*Ka26N#7@NPb^XSxMGcNz>GHCDG^da3ZJH0HY#SXR7&Jt^4VZg zLW|D!MGtB-52xh3if2A(WwT+!%}8;3{^k4)@$3(F?C?qQ3A@ppSo~3n_liwi_jS)% z-?UyN39|^v2??o5{63`@r6Y9c+`8yEzIdjz8;Tq%svm6D3v6`x=*QMAZt=55e3Jkk=dteMah>%ByD>xJW8Au$=13;(=+^i0igw~)dtvBQzg(k)*uMXGW*oqw?O z&oOtOmz6EA^SR0nJvw#t6sx$q(jSAFvHYvwIbW^VS*h!k<5=^;k$>gJE)(MbAO9qY zjP44<4|}yH988J)Bl1kXR{PqJr=g(MG@5^}R;YOL5o!3vWL; zmFjGg(rG)=vhj-@Ydhoj7N2`92U%L@9bJB()BJ;+e6+gbgNdvbrveibKXz?rzVM%+ zwU)m}%KE;qylc9C(y>qKe?)9-@*7#VJ5P7ccs~2klUrYoPVaGXo|pW3|3Mk$SAil+ z4+||6aGrnE`NzEoz3E-ufm*_5j(=Kg&aYO@c`7Vq$?w*5W2ag$pUpiLol2M179Gbf z=CBioUTWOszL=a`((%aR!!C_`<`yy^B69qf+ReUPRhwwFvEY}isE{J-A@M`)Q}Y=U zyKbCPU9(i)wIe@C?Bj~mb>Ymf)Kptr9NX4QZF6%>T{rQ`j%24&KIU!?pPi}fh9yM@ zQ+9d8@;!Qyza)$O`qD1Vl&eQu<P=1p%B6ZC$>Tw>I%y|AXA zNNQ{q-)1jA9hpRn&j;vAC3ICy$*&_G8(pgO6 zqp$Rw+p$av7p2W5MJ*CtE-HeBG;Hoq90G zv*aK{it*B0+7_Gg{iptnP`hmRQ@n#|cU~If!G8Yl9^&lr|9(Fc$=%76|L&jKoyf1c z!rNY0{`hy_b<*uKAJ#52D@rpIExk}a$FKW8!-n0*)@t_Nb`-g7P@Xw~r&^W!i|_kv zi>Y^h{(e2BC~wE2&(WpRk1t)kIR2jVe}+3Z!un6XmhLgRd7yfC>D@M7Uaqq*jiZev zziykHuk-o!+RExsp_bfFwRMNi<^E^5x^I$Kyy8FElUvlQt{UHczrK6jr~CfNjmoY8 ziUBFL-*wyXf35#I^<`E*tIwa!{WYgueRj_1y4sN&Sz7=0`qersF6-Q+sx4uuzc1aI z|DWMM!?)W(zNIIMTm?@q?v2`T?#1^thd$kBwkg>azWNS-ZQhsv4DUkgWe@E)d1I*Z z-I7PX_PBt>*Z6nc?=|K<^X<8M{aN(OleV_iaCY z`}h3+4By|&{dxbU;@|D1nJvch;aeZGlxEI1`|fW!^<2W;{q3do`#o#_*57~q{m=6? z2Vd{`d}jNDa}$DZ#h2cXulw`0zBu^GegDu+rR*+*mAw zvK6@dJ@rE!SzPn2d~es)~nU71+^a;6+6ubIUVrmy-IIWC`TM^a zcBI?%zrXyxuioV!zy9XHOa>#7N$QU#wa8_j>}HcQhB?}{QbU(GuBM1-^scoAi^&_JgmrZoNKe z@IZuXLSv+$=#)++mG0HYU9&pQ{AYOkp_eCvRrOQPnvVX$Zmm0u6yHuvKkB7)a@l#Y z>;A^~PbcI!&s{TP`a5Qpg*>+f--{ppvseArX>Fmnd=XtXaAJ}%dt;+S&TJ=23Czqq-|Gcz)>tW9N>R3lYaCXm? z(nCxB-8tdzYF_$C;##N&VsdKe1NNAMJjAL1NqDzt$x?eWJ9CX8DHd zn-vI(-4{r`xM$|-*1umiu|3uBn#%U^>V?w|>+jq)uDX52wo~JzC2z)u6Imi>W(bvK z@NDq4JaFZFnAH=BZ+iSnyZ5u4*gDUC`JYFE63&lS?k;9=dy=BYotmES^>`D9o~f{b zpbPJe2A&l!6=QAR+jMJ729>_!xgehLQ?YTQ)ssz$!nGf(E6aX8ZY};O5O`YN{3L6& zd#J)8KZ_H-y3;rx{$+iwG4oF3(HkL4L~3WeT@z7rT{-?Kdw^Yj)j}pGhRclt#Rn(w z@6L%lX5c^Jw3hUv8>oOgIvt>$h@8q=#nUhi@M)d79L+O6hD$TE9x0;p|;m=Ddh$N9Ki8>b5Pglob2* zY`?gF_`W2AU1ghI<+jDf-cPmWk(HJCxqc=S` zoynI_K7J(pa`7YK9Bq$QH{s9|{6EfJGBG_M|9!^2c@vK;>T9%n9ls;Lp*CP;oZqu6 zxqFQo_zbQ)dqiB1yb^Q#-p$m^!u;;+z6#B+#%s=sn=&gHo!wYvTX{|EeV%TQ(FXyU z5e|62C#IW=)1Q{e0;+ggubsou$W?v(7*qnV{sCcb6ew(_)o?n#l0E;g&L zG2Az2`Sj&-{n6Wbvus$I10q)}TzTQiKYzdZPYqipNvgbmz2ed7JvoB*=N0uHM;_i;_4xh?_B&hl{3%w? zEtlc%lXgBa&0tyVv;KdsOMl05U-PS;Klggdk3)OsE?)Vc;cmUv~Hhv;rC5ze>uF@Wqa~8`q=vK@0~NYPqn@MpW(s`ZzF}fPphI==L!FNZa-~i0N>K< z;r{lu_K$;XR&P@AynbTqBR|JwLbo|rf7JcY@bcX(rB} z1C~s#P?{azSkd3`u+;r-rThH&DHC$Lw_W~mHPVNB*jRx%;AfcATlxUYdGdrl8;AY+|bD zrNry93Je7$k?I9g!%A6af0s?$FKqGs_tMJv&-dTezy3Qrgz??>!u2+vPw4zO7+U@* zccZM$s@SZXqDRVa)rJY@SFhjyH{3o;<^8{p{hYS{{)xTnJN%XJgvw=3odrIUj7sjF zdl%ff>o!qxTKR0>DZ+kJw@lO#kW=QI1gih${eHGJBs_b1xXN+fJH`H1|Bo;z3xXDk zF*7hh&-ViF3=mLIG%$1wOl({@(E+kN474LdV8$*VpSzmHUV(-!AH9M)beX2?T%4So zT(M(UOwg1aO{v0~9KMQdcHEb}TMx`=O4Se5bUSuTTGK0N%8sRa(>bTO-drp3J77jr zs%FW~9Xrg-%#0qr_MW;{W7jN+&xOXtMJ-3fxPqqaYUVLG{ARaenGye@*IsIY+^u>d zOZD8|WtJ_~^j`E>d*LT1ah=+dol7;nTlGX1zgnudWtW~omtJX=&%Q!qYdw&CyM5C` zU+y~NWBAD_DJ`3G>-)Lg`}&2A1!noCyBv8l%kT7Mvsu2+6gl@Oa&~q&Wtv9?eYqsi zax1Cy5NK_cQ|X~3;YHvjXpbJHC1rA6v{DZ_ax1q)peLcpL!k-0T?EA7P-x;*ndAZ5 zmomvy1+p(Xfjsu)xU3NLP_S1ey{U z|LI#HVcX7V8Wg~yX8Po6x_ zQuX5!sp~p*&d+=1loyk0l$dMgb%lQk|5E4lJnWM2(s(|Fn_huAJH?rjq{W{s=b6!> zQ1qNTGx9l8a>@~zLKZ*v)ekx5bgrmYH0XX(^g&l+zH&jS*gP&?ffj+MKQ9*OxokMn z;pCLj<+E2b(5qWt`;hzADmC?^{40_onqrc#bzkcFP}bve$?zHH=VnEN9j6`$_a`N8 zw4S-<(mb!OPt6~EJhC~GuAlhoSMm5o{;V3N0%rxxiwb+uaHYnKP@hqF5m z?78%``_Oa`-@GWX=^DFY>{(~8I(+%S`4j&cBzEcOn=KNWvGiJ!;AENFsmV>5ULl3u zEi0w%l{$AQ?vinr{A>Ir_=mmVkNzV;KkS|EDGE4$sc)3O{^j}WU+!Q3D*yU7=Wo5Y z{@ePcf7gFm|L5e7fAiPB{Pl10$G@tg?)D!48H~^0{Hz4Ar|Yx}JRKr4}@0c}LKcrElvB3iR~! z($ZG^6xN%r(Q?*SNJV32qF2x}k)?VG69rify@H-Td#d#Jl%~m|7a?X&S6LJvW^<_A zZ<#SmZ|CK+jtj+&g}pcFEZ7>;@4YHlm3>XN=Z&`aQfDqr*01c|B`wZ5bLlC)3p3}6 zcR9UgU2^!lYj>BfrkAd;%eCx}Rcd*9F)<>^Nol#2dO58+@Zc}<)G217$^U+h? zcirB{=BwQ5cD3bqQ|+AD@+Hb=k7L#!>G$U854O)W_}bm?{KjKOQ&imU?yi_KMj7|> z7d^l5E3@cii`~zeo4;l3)zgpPYnzldWwukHcZ=QWy9T@WzSwJ5U1t(ovMc76>efS& z*0!ld`u=mDDH^&?ZEwBk6%+JSS8nwgy%|1Lr;@(paeiHBl**HI^!EQF3`&9wpkfnr z4<7>)c#$mwqo9C-qM@UKLttTIoTCQL*8| zg>6!5F*7+F6%{iC<~XIC-q3QxPh-!~6;8rp`W7vUMkx}B?VFM^Sp*zeS~it(PM^6U zMSU}O<+RMdZ5mh(ch&VkEXBwXXUe0Sf9g5SWIckPVeoR;6kx% z%5LvVx2Nnb+_-1y$x}x=ADs%Cvj5mqO|L+sw|YTOZ%^6jefXHssiT6Agj*CjT=h9- z7EM{ISvj+4%I?aYUa@-)3Ag|GQNnIgV8Q(Jyr z$1I`wOB4lJ)(50a?G5zN@O&h!&be=*;)*uWjmFv&D}CzkizK;<*~W>_e10sjbKbsO zyA^-`Gc1_$A?T^rV&R@&yOgrz=Krws3RIl`V9ghwT`T@f6Pdoo<9d_c=Kl;Gn>x)@ zq&2QLy9D)a-!5@s`-2_FD(d=fnVBexEdK2sR`+efgs{5H4_r@~rhM@3=SZ?Uuv`&Db5-{?cMy158PAY%8_XQ+@|=e zCN`iuvSZN!5;oM;s;c|bT2)j(8M-l z#R-%5$7&SonsWX#+&lS_6c1~#hte{GMz23=!6|+l|U1YCrSS;rBWoozBrOuy6 z|7jonBmd)?txuBJp@JiuzwDYX{zHGK#Ugp$=g*vS6s=|)dHCmL>gn~Z-@7-=G}L@C zV{6%$A0Bre3hV1nKd{3|lFg^(Al4r}@<3GBSZdbN<-bbDo?9Csxk6RnO0FJ$p57F#~&7(Hp34olOOn=RGB%==d{Y?XD2zW zCsp{kowS&oGWnq5uSpWMZmIjYe{Yj6Xp?CE&a+4(@tH(!`$0L6f9dsS73H5ss7$N0 z*{m|jGhI%||Iy9II!!jgKkJ(W^e#oFPV-Ee7I}2C(P=f+X`U&Qd`_BwOaX0`_AjdB z;GVkec2S$etiwD8rz8^FZgkW)3d$b;<6kG){+WYi(`lWL^CW-I=bx75Z<#v5Me)&J z`C}g(!NKQqT4mEooyj#%CKXoyy7`tZ z;3xt+GBV|+QR+NNwHiCgM-`hYC(mq|R8y{UzK-wRqkFmApWRM;7I0jn&FIO#^Nbt@ zhk3v#cf)^%V`mi4DAx5eOC3v{7O65}lBdolPo2%r6!|6VW<0NzKcwTagj;9RY0FKg zRW|vgAM@N6scu&3sq%C3@#lw)|D}DklU6z3`Of=uVPXE+JwKFpd?*+A$?-0D%EGpw zj>I|B<`tv>lU>Cx@rXyvRxC*?+Wrn6gxnU-4JXLMCwBZ}QZcsWQoP zlIJ`dV`Dp`NA+js*$a898{3>Y`&#+y_dnJj+?(W-54=;H-ZZ^YOrfLWpL*{<_O_e3 z({84vO!Bmti%{~2^X%@eBGY~-0bPsmeelIIN1uV#fQzOVRI zVk>OAC(5x4oQgR;BS}fI{osEFX}hA6I+HwmlBKR6`*G{~d7DoYS`-`w>=K&JOF!6t z>~`)x`DbT-r2jCs_4$#0+RW!a!^~Gz^BK=yolq2icUt7DSNtk2j)D(wsq*Y$pYfqW zqVGQYAD$oHHmZ{%Qzm)-X}GraGyj8BMSg}z7QsJepm49t-4>ntA?>uzrYGA@Z`Ro- z&$Gwp%;)JV-+8Ke&itMpQ1|?pbCo{Q@2IuZr@pxb8qeZm33(; zn?3(Trp~jnndZn+D!=2M@_{FYLT!p2A1drSALnkn|DS;^GIdhq!)X<%(;`#EBLDpU zSNETxe?8BSwEOn6?|;ZY-#asR+RfBw(Ye!ZPCs}*{GwX(<$xAl9sMdogQ6ghkM zAG>$!Y~+~i5}G&^I+T=m^eYO=F&}W9f8syGY>UaqB2(uT|7SQmedT|K-VY}qPCBpO zR^R;a^ZVmFpC2~(oV($6?mmwX#j-~tStmF?P-s2?N_}$s`zq`oe*N?5w9cmUlIef^ z=lrvLI&=OHd7U4XlMmZe)TsIVG&^%|kFnbMVE$K@78E$*BFN(U{^WlK#{Ud_{~1nCgOr{BBL6e+Rn!>UpZ##YE&Z^uarI2K^ZVuJ z>-?ymZN#^8)A?@wIQ#3(2R{qSI)ie*vmlSVq2Pm#50%R2>ecT5IR6k-)<>pJt33bo z?zD>Yk|~o_=Sk<+Mb7;A`tZZ|r&U0X`=RH3=7>Py18$r8I40hv{|p9hM+^@0fJ*Xb ziv4HYKk+lB$a&7!pWCng>303>{|rykYEn+xAN{94<f`l! zd&KWJ3Z_o{XCnx552!#o-lV)<#eL3fo%s(cL1l*g$^Q)V6Sv*2Z?==1T~lY1^CPV$ zz5i7j$a~k@-XCB2=lt>JAM?DEbh>Y|xHnmKBq=GjDYo56>}Q|+Q*~Node47`=G<)( z^$%Crj^RaeGpsv-$Xb>l{N4=Y!jB z=kEWwbpGkwZ8t#XZM&WO&+<>%?Oag8ozFk5YLiXz!w+Xp9+~`bKEHkE$CdR$`*drf zezbnfe{_@kk^GU8NAgGXJK_cQ>DI)zuJ5iF`=?vu{bOtPBfAOz6#uy1u?T-$XZ|=# zylpL5SN5Z;I|4aZ$2tFKj*I>A>h6BKKjrzy!`4=09b-E!uNLv2!BAZ5>gqVIsaZ*8 zk?Qsz7%P76_Mdls%F3>r53hWhbn@u@EA|2>e{B57sPesupR$W{Av)5E|H-}+G-EEF&HPq8NI$JUSekFFox z4|eyT=pWlZ=0CcBbboie*goAq(LdThazDC$bbWWc*gsXM?DZpHuKp^JGLUcoME}@2 zH|pHlKhZy?f6RXr4zf;Y`^tEseX4)FeoXzS4Hl}r3b6xh<%9LzWzX!)41f7%hwDH3 zm3zPEK%??O%Q>44*)TXnGA3qfTHJ_e{FrofhFQ+R=8tJ-XV{C?DL8Cof5bX>;>YAi zN9T76>D>6SIsK9U(fQr>Vkv(je{B57{^EDnzvle0KWfU4lG5@nKRIpL`d;aF?yMi%q>~TIIVto% zaBtG-mrR}JsrvqeXX>}IEG?UD?=An4 zGRe8aGi6f2kIKdeI-AlGAGZsgTf^<#Y1;eh^{I2}Z}ooM*!xpXTJXV#=qKCmDQ-W| zZpU_?`FNY>HvQx62X5!=nAu+N`Phkz%@fX4_bn1O=g6JUbki)kU-X^q?n5V4CY{$* z^Dpynw&R%=sRC+q#`u`|PCBPD`BlXypF2K>iq9XdJ;BuR$Zn~`?2dk?e=+|V>IEL# zO|O{HzRYdX@)U-@UU}jw`}iMJNPMvB_^0AMiPPR-*}W~(<&rye{z>)hy6`dH&$P_zQDd4Y)r4 zXDB+vXK8Wc1mDXy4Y9n=*RQu9y5&0g?xgd@PiH<%%{JM7>z*plwu4exUraYd3QZqENV_hqGIYhrb5|+87J?}i)X1g^hm76;M+N=9*Y)^ z=f%wje{TrhA0TwsIMqjK^Bs-MYsY_dRz8}Vx8UC!S^F~H^92+)(ZR z?D9v$>TTa*X0Si|QJ?ztKSR00{We>s>_#T{2}+VRlG8a-H{73g{XawPe}>;;?cxsn zIi3%%@0<6ZVdn(%mh$??3kW?mYTudD+5iyX9B&UVi!LB;%Ji+FEIQ z=C@4DU#y-SeMH~hmHz_s?TfG5!djYNezQHfsHpU#^qom(>bvh1%GmzsxPNL3*Zngk zSwDSOH=NH&m}!|)UcKSS`#Ve~^&UH}zq$oKFaKqu zlP)*IAn^DrgLCI+JHGn8|LckW3~$aHlRvv;W@TmTVvgv4C*RnYF38<)ZZA@xAMmWO z@>%K@lPzsdXWI|zbQYK;{D>5Jz{eza_x{WUZ%^Ml=Dp!}{>Hi6qo3&T{=IPX$gdlE zCwCN9dnxWHxAni9QtW@`_n!R)e1(5baNM^#rTOr@LG00<4|bdXMH0ci>d&G^Xi(UBbvE{puOZLglNVK=j4_J4-32ZaY}PdqQ& z;C#hVpf2)<_m1|e`yD)Y7qovbIJRS<9owhd#qKIs9CEiT-4M;+p8r7WaY5Dnm8rA+(*G(&PtsF3Ji}96f5i?tNtT!$Wxsvv^fyj_ zcGP?AJs0hxZ91Ek|DL@ble525T%VEk!^=NB56-=2Za-{%-r!HZu-wz@i(m1jFy^fn zXDQew@x=MXIn#2zGc)$MUwn6aX3oDSUCwS|&$i!PQT94-+l16TKGPU2^!S=C+@DeU zTRpfaM%3eKV4nHBwHxoWvaOx4W6!?n?hO@>p79+1^6Yxwg9m?@8#*UFDQ^$_`{~oC z*tbF#+K&s*lWmUP!p=}NY2NzgC9dHVK~l|T6M zH;V1y(d}jT7I>J(Jkk@txo0o?-`m0)<(?mN=u6$lGGVq^{H3-#jp288#nq*FRPHcx za&nyG!*~1flC9!;zuOhJ&t~KJBx&%UA*XfvZ12oH>!(he_k@Q%=4OlFf%#_5dwu7> zdg_0qXz~7T%Z!I9mYW%7%bd7>_U5JspJgKj=6%}vvqB-Jtohutb^jSUZ#Sqv-Z_u2 zeP>~D(No2D76O&m?aPkOQf4{GesNOa$GWA_neBi-<(NoqPpMK7!yE{8+ zLRRVd6;Ff>jyNvg^sG?Dedl>*8E5N5-YfU}9==iid!wYm>CWprdN;n_k;8K=!B08S zdUwBck$m9o7KxWvc($#XP_4uKpj|wkopo|q6?1RGzH1668@~K~BO&9CIhI2ZyIPz{ zwwv|C@h=r>XOGPLv|ByLb$Rhj>yv-Z9~LxL+|=THg_rd}!B0n{GRbx7_4_{;-Ac~g zzWDZM{=^Tq4!hnzv1?R4>f1o z{f@NQOKg;VUv$uY8eh(o*YmF~mOgUw$3zBR4&4&x>B290?-x}oPpJ1%|99ejODA&URq(=V^B8){CcwVhKG^}egR zf0gfCofGGnWR#Q-Bs5k$ooHvJ!**$+AE!WW?1Adm2TAk3?O1oGpQr9Y@#K&E^JcjB zaxPpNmm14ZmDhOg(!uhHyTa$sh{+c!k-OIXIpN>W2@kpdMHVV5>27{^l=({Z^BLOj z>yNf(CxqW^6uPzkl8}dhOuJzczc*W-8~>gk6TihRy}!KS;F_4yS4t6C+Z3FuyeI$S z`E8XhcXIaEqJ2;K4*4JDtbfxI`H{alcHVKHJJwA(A5ZqyuGUHJOq;x|dszhgi-MG! ze(lrl_IErv9X|0-bTRAe8T1=HTd9Tg%Ix0!Snr#U9sJ}F`- z%z69F>gkd5gXoF=LO%KP?-2D zhGWi>s&;1PXO>U$kFK?H(_z29gZ+lzlL{Y=mJfcSw^#0}dn12#!Sj_@nrj5yr#zhZ zgrRDiMVUrl*R&4|LD%Nht-bvC+8o}5!pEOtpHF+hyktrMyZ`bdQr2I3PptgnW!&(U zeWCZ7HnXY@X)MVH4H8!(A2$WeX}eG}@!k1Fd>@#ZA6?09kg&Cr;QuAO>44b&6;q8n8f5RbC|;OQ zR6pBrj!^#r`O5}U0{{NxL}nJz#9Y757GY!FKrbFIp~ z1$FVpm~f zc^@7faASt{`M{C{yVHfGSO1p&(>;;bpGzic}W2eo;`eHptn!zbi%vi z-}_<$+|v&~{a9#eu|s^NK;et;Tnx#3@7z@S@$&rSqHnwBJzrf@zDaraLbby)-o4-b zQuA-$*GbzRxgFi%vh&o`*B#|@+x|1~Y|hV-sXH-g<@}fP1y9J&l)v)3uX^|7$0<`@ zdF!Pv7ppz?zFI(5dk(V_>)Ab9@v$0OfQo#rcdCbRr!D5~k*TE;u^e1MDaJHzAt#aCWF@>i6ot!Jp;GUMd^pr;=# zit8)3o;;oEY*RQra^~YdDf;_-{dY^|Ef-6$6)V17U3j+d?Qxw{UfmBR^(j}|>z9AD z^PV4>{bTFwv^l;vOU>hFX6)Y}R8SkU=w6;q+}8FVt_NNfuY0Rvxb=$S9oc`K@podL zZ2Zr#+aY!P!J_`%OQdtWyTtFv%v%NAEtJY!=^9xq$C`_4_RhxjcvE_NBz!k>Bm7eWj&8ETrJen@;OX#j6WH zO{wb8Ke+SP<9A{nE|YZ=Po{mo$?>^ilZzR&yIVn zt-E=OlOkiA@Bh8o^25{i=!BlaGok(Nzxw5cPrAq0sGqc%mcNqigy=Tce)c1^2e|$I z?ufAB`%;=;_s(5E=*7|b%9Bp0J#$>n!*^=>^PM%vJ8$pbe)rnd6RlNqz7+H2HXT2E zY)A6B=R2%x{gf{o-&VMO$zT6VB;y3vC3Y-I7IUWWRoOqkY~Alv*?YGl+^zP#E3QpW zK6}|t$KqQ>h0&|jN>w`#d-Lf1CpTIp`EGpmefK+9J9 z&dKi{d#uztU48Z4joX-;zDO&|*zoP#B>CGw{r-OjmcsuG#jgY^{;9rVIQ@IK z;~93bCyQP6BPQ3%No}jl{+fJE^V)$srC&;Aj4$Su>Po)Yopb&~N8tmGir$3AIi;M> zAE#NK-tlm+@Shm9e^2(9w~OoP)xX$KxNYLe^gFw!{!Fl%WhdN!h3Dm`>709Pe>GdY z*1cD(d+15evHuL_J__ou#A;leiVJ?cnR!a*{%yISJAcf5Ql44rJlR>ZC$7XIBI2Dw z@1A1CS5Nsq%h=7G%XwwvQ^5r*8#Z_6ZlCw?%jbXJ&ZJ(R`M$i{dD1CMfypJOMd!Vl zmVV5?^`yFidpJ+#^KZWuErbt$Oj#>&Gj__)iFMcZ8wpSS*XfPgJ?-Pk?P5F1OZCGU_pP&&TYfInXyW?CtK$V{swdB%Fempo|7mq|-qS0O zz3XFq=lH&E-PwoVv%;R7{d>S&=5sZJ{h2Sv_+9z~c;`&3f0WdJbd}=Su5}DeW!EMDy-esPaR-&+liu6=l?8KKt>(S}lpvgs&y@cJy-dGm)b%bVU)ld!PQCQO%uXd$@+p z-lxYd=U$HcqMJ3JV)}F#%Font-|%-o^EC29pJVg0^RF_iouAxGC}BOnDe)v<&VspX z9-K?raZXRd=jF-yGhcTy`rMC}pZoplrMJJDm1aFu`6967i_9j+4?C6{A6;ctmsfV^ z@xEY=lmAZW@jWqlnVE34TQ~Lk^2+}V7dd3~3cee07FwRun{Iz)mZissh<}jwUFR!6SP+Tdb3IWG11krx?7H(C!kp6FJd-PpF@ocZr*p+~=% zRjm)7Rqd^*|I+qP;oPt3Uo-eNHdsnW$AyW1&SU=1kfwI*cw-#X`-XfbT^7&R-81IT z$YN1odM2Gv{HrEf=V9fKn-6j(%)8Aa__ct2V@4MD;vL5r+WjAXa8F2C{Y?JDCKjRC z<4>k!eE-gO?dpyCouUgTg;(X+^1RQ?S-zg2yyyy{W)fxi(7pLyl{9@O0Jy}t0p4)11N`2feGGtcC(-~O9^lYjBa z2k!zqJ0`Hbe8nV{TqSeooJ-$Eogb$;KJE|mS7dm=ef7j|6~ckrcStWxPKU`*Uq((;mX`l7A;~aWsz6YKjT;y<1==gycizk8)w^YpByWJ!& z-tWmtEiQA8t(9qfk+)d3yFH3M_)}e)eYxRJ{)gL+A1sZL-_tjvz@i}HoceyTe>N<~ z%GHir*q>d_Bf+QeHRV?Eir%_)j=e8-W>lS2#_Z{otnO z>pn)xB=t|5?PvR+VM?ew@B1@>uYVs5V(%$Cw>Yl&=UltO<|jWR&d(^@_-w(WIld?5 z6b_b`r=fOt~CO+cnn|_w>kv&H&{{f!@=3jlA_wM*T@72F| zjVZi2{O|i?3?%oxnf6S1|DCv3?+t5X({$y+zqA~mW#1*=6e(!?A*S|k>g2^AgwFoi zGp+Q%2m9TRE>BMV^G7f2#Bv4`f@66b3?h;Urj z%;Z}8j$bg3`5kBDmkA4PAKka#Y5vcc?ZtnF@Cy4B;pabfJM2@N`9G<%*I(nESn`tP z!24&;^WVkf`=69L$F_HA+wOx?eT`&{EbU`Xo(gGVpBMRDVD9Xy`A@UX#rL*ZAN=E* zzV~SAHo+5r+}Y+|J*ZGGut%qy>&}@NJ6i3dUVgdGl%Q^ zqi6fwcxM#oDCY5dHuz`#yR3fs-JPc!{xQ$%r>v}Y1;T!eXOY_VBGgu~muhX&r60iTd$Kr4BXZx#D(i7A_?vDS@ zV7Gj;+DxYDZ6|N#W^J#$@t@(h{#^TjbpI>WZ4)jF%q~>B@v6 zW%;BU^WwCfFTX_`HuL#jJbPpJdchS1M#++APbP2J^mN7K%k#i>Wj9=!V-6QgIueuVkz{3c-q%fR_p_kL*pb0TAt{{-%LIkwwx z%@b1I%6i~=Y4#s6f$h5gm}P%d{q?Aedi8YPw%TXg&zy|a{ddBmhr4S+`_B_!^s1kx z?y@)D{G-t8s2r^6=e^Z{%u_zw!q$SR(STmrFMHg zlYd8k+_vps?w{>9x80Y{{TTg^d!7aBobz|z zIq<1e`qoB2SKKf7^!)dN;yX4@%jVBEu&O=3{j2_VVasCu4>z=DRy~+vQ2Shx&-d;9 zU-ReuXK2^|T=?i*--0`n}sIY;-;_J5b!29L(v*W{-9y+*mw#%d=A^Hb5KXCZA z{_o67cHwFKw_5o2-;w{f=<36tdpG_)*K+yQ74cKT{~31F|9fu#RYJ9|{b~|^|oyON|DKjzrS z*M~nA&s%3ZUDDwD-Gv7Zubj9!Z|D3q{~3hj&gJnf_8s=vK{=E23aA1z*gZJxRLlSln}4JQT@JMWFB z-=@gCf5vNK|4xqKKSO|CPpehmm1i7JcE~BuIr;w1_Q_e*tc2*BY2Nfh_m+Hjv2dMttUdpqL)*Io=K9|W z5InAw@RPw!cftHirw&{yFLIq2Bvl;p_P; zTs1d7ygnjdwqx7lH#>jstbWB@XmRK4=ITV~THOTsCG4xG_odiI zp6lR`xcS_#UQ9e7-{4P*QclD7D{6DkoNzo{cy{`W_TL}Rv{w23XSnij`T5{aSEk84 zvkzcyJ8}6>XKt{{*T(OB%jDjD{{{1IFu&u z$*gw%r6;^s$Li7BlN-3_9&o*1v|ervvq!+WbBphJx5~Tau>NP*`Q*v%6FId;;fARe z+#id)*Ykg5%WpD{;+bc&5aix&*G(-zxeCV zu=^&ybc1jE*~9nSjj#4(-l@~yB5x;hZ{1uEzWl_i%iiTI*S$S?AVZiojG4_e13&{&F-)IA0N2HOnlmSyYIM9)r3xqPK4W-xT4Bmeo%SoduRIh#ZwfEh^ZQnId`a^(_2u8Q&PdPU z+2JlfWO?#&0{oZr@SXf0($Im{G3Kh$1(&sIUqh*%x&xomC z*ivhFcAZMqr5A70U;d5J{Lc`)|DU4u>0kX>wTq7!2p{Emc5kuG<5&FKem`6=GcG3b zZou+4LVq1@1-DG#X}o-Ov5b5Gv+|v!U3c~#7M%0v!0%U&FUl-mG=JL(jeOot56evf z53{D^Z+&-ZbLy{+_ndWa$WPI)-*vg?-~0azm*&U6>)1H|Oh-Y?T%Q*+ty+Ke%s3>% zG~aBWed&Zb^HmqUl#aLABx^By()+7@lZ-j)5_}&$esucPwS9}3_NH7>ct6|u$iH`X z=iePa@%LcKy=5Bw+ioBEyYcw^eUXR19kQE$X7Bl%DbK$}CfLt5{Fg0#_2;I~-)_o( zKmVU0?ytb?cM(6DFVEk3K2q~#a`R*bxr(iuSvEd=#XP(1=$_KdkNIcz3-z7u@9q$Y znR{aC`75@pADqo4&qyEsx9s6(8##}k$^268Mhib`)E+DM3s)!Rgn-1Rd(Xp^AS74R-tR!+L$oy*imF>Y+tRnua-KQD7-TvwJ z&)k|#woA{&Zj| z7+;G`3{USiGyi*1`a7rJ|Cz&2nT_w7g)3*W)#V7BkpH`QCFqz0*ZK{d;g$8~|F#w# zo})Y?*TMlYd_y{uyXl%VZr9dmGkDgKa2j)u=+p4lSAK@_DB}Q#HQb{ zFJDw&@H3~ldrsfXf6C?t!4G>&qomzTcbOYVO=wShE8)NCuAT1@!S7;{_nQxFpHY{; zbkl`{7vDc)b6I!m+>0}x`Y$Ik^`8m3*>X%sx=yTni{*!?Mx6^qXC$I01YEdMloE0N zmF@A#2X=b%_c=ad4(nb&Q`uhGKD?zW*)SB?mA~2|d`@>+?cG%d z)mvwZ$4vcjyE6Q9n#AWxg^z1wz1c1<`6->kcEKWhvQSU&yTW-K`;#QkynOZk$_a(9 zx=m*9cFoGIWfyQlo)c=)|)S$*fZ%xA^KjupEbU)}#|Y^-1O zaC;hWvT4$R=SISJqje>Y+x={d(0$##?d~*}4Hmzw_Zzp{xIMSLwkEYuApPV?e>w9X ziR)Zm-`&KN_;=}(?S>89K96F|RoAcnG)LBX`N?Sln@apYuRFtS^u&hYp`O9*oXvW{ za*l7BN>i44xBpekweXH!dc5CEP?6zeo$jWFMVS|lPxx&1blUI9yVHcv32t~Md_8RS zA%o9%D(7|YmpnVEbdCJhiL*2H88>r#%G}nrx)rsszqsJebiTL!E6vYwH*EcCdv9Hh z%ClD$Yvr3acgPvU>!jC&9do}@^~|PZm!8`9f4BeaZaQ2&UqJVK;anx@n$meUCSNV+ z+pfH>^V|FWcQJl@%3{qq65f0M%jv%PpCO?3c+KG?d*dDP51eYbRNTe5{xcZ4Y&y^R zO0RmJMVDOewm9`u-hcRVSJrHDxmtVQm@~ES@wUEizDlWyPbZ3Glv_-ZPd&J!=D6Y- z{=Oy0f-cvk#dvOxtBFzEb~`U+=Rd2n-#L2!`YfKq@?yDP>ZWr~P9`K32t+OyK68(LArjj|+a?b?fQmx-~B!%dgp= zd!V-BocVz_HWmtx)Z*4nerNRM=>!*Ni7J*W-IKm=`nvgg$=eG(Cg1AsHq;r+J#42e zy}UsA&VL5i^ZTBy|EO>&Mt*nCwCE`>`#g_0DnGX2ue1K396-VbwW`nXBba zclZ6hQ@-iFkiC)L&pFDq&r-5G79@+WyP3+{p&xKKzfGq7>g#jHC6kKvIFASIWW6l* z@YTt8FRfq2>?pcpF5hUUcb!R@-C~mx$0o*qIc(FJ^5euAsqfQOr&Xp-^Hdj@FZjeF zx3$X5%kIIqJ5%mVH)o67A)Vm)#i6@Prg>9Hv+t(4k$(AZ?h1R4U2GHj`uM>l?z95g zGkz+KJ(JBXr(0%jWSdsp+`M3S&d<1oGa9l@ePY!8i~hLIIc=f7cBf25@29rB>0*;L zKm2DX|LXJYMqTnW_wv>87Zus0t*kEQoVfWRjbl2ev+kzTCu^P6S2(_S+8yPun7lB( z?7c)@hTZz0t+Q1(Kh)pMGIz3N+{2o?jJ#aM(s{lU<-BdoMUTrL=Da9au3@!VkH6@7 zXXVo!Hw$*mnD?$&@0<65-rXHV=X)g%pZ&hMEN1p5uJ1yHFKs^TIJ(c-weQ1jg^08F zxg{m@#X1iOmi(F^n7ed;*#y34>n^7+U3+4Zc~r(;p6Pemo@}bz!uQVSgS+a^KmQpv z`SkY)KJ2KAXg9j|{OD%+oTS|~v3taBe%ujl@alEC(gdMY9fj_u+^4Ifm-e36>8!Zr z-XW_Ux`NNnrQPVg_9)KMYe#I4Yu^&@Wj;Uk*0$X^e&>*=)z_ntoW%)O6$yVNB^?-x5?G~u*#xxL|~sC5_K_WTx@l+L@M zc-n%LlroEQDV0O#;p`qs(G+ooPp6HZWSOPt$r@A>6_ zOM4f^%(!h`y5V>8Ho?A>v{Ku1=3-&DA3uE%bzq&4?N{!5cc#7lwpsB|fW>n`^TtO{ zisULgo(GjNuU{QzrN^>OLgBXXW0h@(%O)nOd}k?qth48Ewp)wgUPfhc@0njEN@e|p zUtQ6cj9T-VwRu{d&hfpj?deC1XHPCQs}X*7bkpZVLxt{RmlAihKTe7Fp2<|o{gL~f zP5q)i6^A`BqCe&?{^QNfoER2++QP?li{kkSySK`G=rw(u){Dyu zzk4)yb6LcXjIy}f+w-pU7hH3=7CQB0ENy?ZCztk80~u zWU4pLIl7;@X!`NYl(^IfF9l}mUOvCkAiaYj_siA|Z3iD*`xA3=Vdwh;r#m}dMZ8V@ z?#pz^Z2HV(so76&*|)s4o!_!~J(KNehH2vYkM91tYcBF@x}6ZG&gPZIhgf+Ni=2hx zo?1q-nDIGIi#hp2XKv$!lg>-$obHl4-8tvWrq8NJw%mNO^ZZAN)cIVubakapJW2cI zWz^67V6QXht0(7$lT~wdjyc@kxJixY^pE5HEOy)q6DNHz@oT($LT~%2=kH{`7kLVN z^SQY@A^wT-ww8pqk36>B&X;}qhw<#5%9vY@byIuVq?vc?y;aHnm{554dLifgV~6ed z0@uH`d_HYk*ux!)-0o*OJ}=mjbgSIz)ziZn(`75zMC--2TSRZ~?WpkY*?jI)rcQaM z)ucUN*&E(B{k_wva9e*{#jkDEk7{D)KZ|}B{b#Wthhn<$p{wbSZ9g49ew3r&^zwkO z6U+`tPZaPybidlpO!**l!g8O_(#z+46nyY$Pt5E;_r)yKH@MChv%m62-s(ZFQuU{D zo$WsTFLo9--Fhz?Z?;{d_#ls6|e>G&RZwx6qmPVYt&BV?nAr$Kcq#oJ@r;Q z+1_?z?suUYgCqXSPAjfvSM8ZL;j${1`qhQcf6il+6Dv%eJmvf2Hymlgj0)Z|Zn+a5 zxK~>82|2PwpKskPEw=pGh4Y^~x_2vaIDhkB{OGrntf!vh2Q}`EeG`S{>Ko5Y`dl)T z*_*RFcOQ?7d-7|O>=WRXr zMlP{v7vH-gvboLTNBp7h4`)uQQ9JpE<@5uKy^%+rdFxG1V7EQoSHUdv?&@+46PX|U znWxN)Vry2;yKzpg^FyKK`xzB&7xRi*pHE4gePthC^t$(Ex1U6_-BC)NBo_JcG3T<| zWxRim{^LowUsQBY>CGOSJK;N|xy}|RKfC|nho_C?L=KyEx@BS#+iLiHK0m7J@qRPi zyX}_p;^|&HTlbd*9#)q>I&+dgXSy7V(9;jjukNM3del%n;|{;&W^>8o9_&u{U+O%& z^5~1yjo@b*&fRuPy^<4i_Y0N%N|+|&op(g>NVMekxjwJ1$#LcxhR>XKJ@xR+j}ZYk zg!s>{xH)I-bW@vUF_TcK<4)JMmh7tS1MFb&YSx( zw?8r8K91|bblX_jzRZU|(x1sxRP{OQe>|zP>9oyE@!gkhIj8S@eth-@Dfc_JoAkux z%{Y(lN%_?7ktgBTZM^cylM1P0oR*uOE#wBgcB? zSrrfG{h&X7zni5awJ(?Sq@EAse;33gyz;Ttw*L(6D)SkI#XVj2hdunr{`~IDs>R=$ zx$l0R*8i|++7G_;`QgU&QZWmsvcCOYw;vQgoX264bCY$t$7eb3346uei*he# z&Xo9=%f!2klW$$@={7rY!|Q*zC*AvFCULrS5uZ__?D@Wre7q+ocl4VdzTOtknH72K zZcG2{t4GeqGu8ZX*q68UoH(aV5kG70_FohB%Zb?jc;>a?MMdiL>SUXB>T|XqJFRou zUp9Te#f|tya;e{iYMe_Z>+JeHd-bG`<+~~lUH_q1QSL99SJ8K5W76FZs+|R2uTHcP zT=wee6_ey30u=%1;06EBCI+wb>^5uy67y zN$soKwIewn%=un2_1<*z>%BSc4IguM?3CZ}Y3KITdoK-cEUCN}b^j5!yx7NwuX3l| zTU@r&`(Ct)wTdWS{JAJqAD z^X%l*Y3C9PHw8)CtP}2O_4v1*aoSU!3j3?aIRrj<-Eh;pY2#%0M>zRMyM|HK-h0af zb~(x9pVsZaQfPDgod2_5$G!JGd>6?-^X!QaCH;oh`#C?9Rpd=)tA5`3!06A>oq5y# zy;Xe{@yeqx|4d_3VrGif&F|?p#Rpbw@GP{`3y){$ZSPKS`?cl#mJ=Nx&g;wB3!g5Ecz=A!_viDUHJtd$%zuQR`R*;N4^{JDrF{E6`I*nV_YdZ@Nk>QL z=B6LJ_vg(IJC5$fA4^={d{ExcA7CvvJH5ZamQU^a?7Mp^yRU!z{-1%<{FeXO_lNuH rRqoDPR=xM`e}>(+zU^IilG88mq+MzX&nxR)I^5j%f5`ds{=W$TRstS+ literal 0 HcmV?d00001 diff --git a/docs/public/anw9cOL.png b/docs/public/anw9cOL.png new file mode 100644 index 0000000000000000000000000000000000000000..09740d1da57157a5e1f15571ec8daf5d47aeae0c GIT binary patch literal 82094 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 Zu0P&5&sF*Kj)8%J!PC{xWt~$(69CZ|B2)kX literal 0 HcmV?d00001 diff --git a/docs/public/b4b7KDb.jpg b/docs/public/b4b7KDb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76acd2cf5ce52929cd972878115bfa6c07c74af0 GIT binary patch literal 288162 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

    ) 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%0D#-Ae8#CCYUI-JM;E>h!=irtT+kdnv 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 z63%0DC(LV{8eOA3bIohf(pmgY8Yvjb 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ʦlU^;zv9ol%qYKSvzc(0W$&Zb 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�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 C;%B@7 literal 0 HcmV?d00001 diff --git a/docs/public/eGO0ohO.jpg b/docs/public/eGO0ohO.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d1c9b730a0976f32b576eb29e2dcf148b6d2b4cd GIT binary patch literal 11793 zcmex=e#xk1&XXB#>kn7#J9tnE&5m;9+KD zU=m;!U|?YU8?>ur>RM4EPH>+kgWuCVXan{%IEZ!ap$dcX9uwY9fR z{la_k#-A@Q`TU=u`hM<{!yCU@)?3ZbZeG2@vgW;)pL!0&44(fCCX>3pcIi%7bm~pa z><#ZWn}#G$-yE;JQ02|Dob5h8Za?Yki_u;mZ&Ld2)1)u!o7R_Ih1JWaRYQ5Mk)zkXZJf$mtX{X=#qjk1@JD!~=O|{G1)|u*SYo~Vfd|J;&?U+|zB)_EkTf6N1`aU^y!lvC^ zThcFVt=$kt5QfiBG}_9uc~4+!nQoL}wo1n&C67)eB+BcFr=W_EjD4_f6R=KKtcd@u^eiEj@HxZs9Y%^)Am!e!dYi>S6=;*D&@cTKp>4IlSn}j(2-wPH&scUGO~p z&1$pBCSVf|>aI43Tr*?g1)1lLkr^)*%Uucx(Acz_t+v3}gy*cXvB#N9##?yaGFv;G zxnx{>!FUVL{Sp-J)whSDKZhwDn>cqtdd9D`>)ibRk1%KpFfcJOGcYkSu`w}&(>N0| z10#!|kg$;mtAc>2lA%L@qOyvCiShqi3>=J%42-Nyb3@*wCtFM2ICrefc;nn2ayVCB ztqKhN$Mf~y+I?H4U;d5Wt7U#IW$W>&)1N!d{>s{DZoznU-X=fe;|kobG)11ItY36C zaWk{k+W6qgP`33&WY*u2k-w$I+5Ta>{&8v z;l1_JYjhVUFRG)>FYE#ho+6XmHVg3cMHae8ozu}DcW?ur()et(~dfuKSd|R zlR}^T;QlPWpx^KY!+(YqHu9lg{!|}xlwB-pqLcrj#`{xHm|-^S)#PO@Va%a{_ohmP zp8uNnWySr-C#%a(hVoCX3%8nX^Pge4mU4iyfmeAhoswX!Qn1tYNqb0 z%svxo)m^dqUwc(Z{+jgcld2X>6V6ZhWmq-o+(w4uqS>iU(?Xjco2mYI`!YKzL2>n2 zr-avLHhKMoUEVhzNAu5Kvow0W{+ysQjPn&^ z!U8JSeT~XEdStA1*4U|;k6RM@|$D)luz+En)6?*W{qDV~Ql@9*?_9mSTISFncmLzZ z@>?^KKAzB->%HGjDNZu6?{t91w=>FHYl^o`TJ!4Cqxd7cyIh;u`KQ;|e>LX1CEoq7 z>5%j(hL21iyFTtSPTn{BY1H+Dk01Ui{_*|eVS#rwvc_l59V}y5Qx;$<=T;ZL{(!CB zf?Hw9KDQ_BQjDnH{hwj3+b{pm;k#$=BpvOr4fwb6*Ya15;oGZ1@|S~?od2u4F9Y}O zTDfW#K2#bUYKj-hh8_jQvB>`XN1&*wJI1izYF5OxGso0wj%SN5OMPx&<2GCA!eXhj z`SPms@|T;O+8Fnrp)WF5>R93AdZEAjuCI{&YHBjIe98rrryJXPmWv$9{9zY)>*|#2 z=a*iOkl69kX5uQq@VTi(AAGtAN7beD4e4FQTX@~zkNz2nh~lInW1e~ z&F{*Wx?O+yPqXg+(ekC_4BOiq^km|Id&U|8M=S{|uS` zk1!|+GB7bQF*37)Yg{nFC@93F;2@xAAnX_rm;f#XnHd@F8Go!66AM1tWVK%D<2om? z?hm>LOW)~S*6IE`-F-#N^YA%FFLvp5m%T}z^FG8$p~XpSTZ@yTsB56i{{Kf9lm!`> z7@3(_n87xH2}VI7VM8Vb2WEkQKm*4_usuv5dp?GU^!pU1%zMB4k)8FA`E$Lz{a;i` z$+dMCH{I@(_dIbWce{n|o@ujmH?``2xPEzgnL*gelugS*PJOL5-nJ~{)XcE;sXpiR z{~uwn7GPjxW@ch$V`ArE0$a_^PA{Kq;`WF>#}UvQt3P!HXgW#tuP6 z3qP|w`w_=J;>x4~WPA5oXhOXIvV{-0ohPv0K%uY3)@B#dlH`hZa5f&A95q zqnhcd%WuBETu|KmaEYAvxBA<2WvrjK-8XfcU7g&Vb@!X}5$e6V`rYL zSaf}oe1w@pPpQ+ZJ^9Ba9S@$%mPu@yomc!%v+>;Ctt=Zq${qiy@%-3-hPNSmxZAEB z*F3Yl@OI*VhB{TN-Zj}L*dBJxTh+1Hx3@S;Akx5W)%6D1a%G#Q@A7t!?^wI17Q04l z+4`d(WXBzWZ=uJF$A5_cp@s?O;J^GmWVgI_f0xN#4$>x)ZUFgpy zo&84Yx#ypY%Wn0UvPJPNjCsE8#>{!1TO%GO{#g7-Dm~P1_Pv9Fp9P-WD6VMTE*7hz zE$z3|Stz&HYSogLhwf@zZa014x9X4iqpbx}ewAv|>}Jn!G%hNgD)G9Qo%_`)!^aDra#7v|?OWfb)dyJV9u}VG-F_rr*zDX2?pazcH_KMHpVM=?m0zi+ z+jd+(Xa+-p-keW8{~m+=z3P_V3Yps;nNp=+LrzP)v)i?$+hu06&0fL%z3D^*PA*HogC{2jY~cM zczn2$-OwN39&$rIH2BB7Q>)usud^Hc*4E;dbDU`5aOKT=hTv^_IcHifeMoN)+;!x& zpw^6Jwkd1-W@)W6`H^<)MN;KYy-W9Gx+XYYvK5}|=XUsEr=eZu^+MHS{z5nZGf1hO zuKy}q|M5S=ev|yiVjp=OT&Mk8)oLEFx$V*GCpGmUTAOCC;?7lE;{P*b$8_@}&!yu9 z?YgF4vHTWupLf^en8l?=_ciVPK_UFvbv@%*OV()5-sGBD%0J}`Kfkj*9?`lpFM8Tj zB8exwNAt7`qq`Jd?LB^e$9LefzDOo06zDaDd$`P>%0cx-P4Gy{g)srmTm7IAo z;!^sB*S}V^-ZGr!Kht675&zj-_Lnmhj-{3K=e?R^9$acxoc;8!!0M1E$9nDRJU4yP zdzv}5qQ2es?3Wm`h*M!%pM^N*8`(@X56rAjEp<>^$k%B&;l17C7oZ?{zP@;GaJ)rk ze#Bo)o#nol|Hdctr@xA26x)61QA(Y} zf$)#f$9BEk?Bk}&Hhs%s@6<2P?^J5FmCK*BJd?{KUAIp5-IHskA3o&mvRss9f3$pB zDf=g<)p4w09ocJ-E&m$$TQ_6Q>H3i0F{(%AI&E9(woAUgb>jJ}?6HC}`;4}%eEO~G zyZJ?{_{?qdZ*^Y%&(NW6H~&ws!L8P5ml@Y9oPRP)?)4nDbv?_g^uY<$bLy70OLMg| zqrGm0UD`$(#~~{0&^FNxi~PDl`QYxn$ItK7y#bZEs}2zljvIc4R=dCSmPdz~Hf-Hj zFB&=}@raOLw>w%ACw5*SxQ8VF}SSIr_v1ESAfd`r!FN&MI{xHwG)$d~Nk?B=a9k-ia z)tbzDXJItYBd$d=KZRyq-S*6F?T>#i*RHzo@X+&D^S!2b6y~Jf+2T5t*+xI3P|lU@ zaO(NXzm-zU%J&%ETC&~s=8H?)p0iuUzS?&qS7JMR}iTe$La zcIIX`hdVXb6Zw}Pm9ysv+wbdRZeX*of5*@7@{25bCmE!1rE2+RWK=8H)n}%fy)OOvY)+JE;iT?vqm+||7h@je9ckvU=ygBt*ST$*?j+OCVKO^!nx&<^Y60TNH_G#I6b_fBf)4jcb|CPbqyQyW77GXmNAzkPJ7*Q z?Kb0%rV`%|t~;7$=-gazwP2Rwyr9N}f}V;~%d_j-&0cr@ii1VspLwhGUTu0uU841? z?tF8d-K&%yD}U74z3TL?HE?2GebN5k?4|i`|DOLp!k{I<$iT$N!~*L2gZusrj0}Q` zhKY`W6F(F-F1+~gqrgT5hl2qI(Domry<+F@%kP%o_1`tW)b3U7mESAB2b0g;Sz&ap zpg!fAgIEtk+cua_8RJ-EHREq$HMJ<%n;|6aWbk8(1EdMijwIw@kKPCOJ`GKV7m8XUbI|?GBF1kmaDr(@LZ&P}` z=g39XuyX?UzVvR}H`OLfJ$F;)yxu=Le&>tz+d4U?s#fZrON*SVi?5{=rp3reJPkUa9PVg%*u!Sut~=MJsj(mXvhbv4WZMlyqrblOT%?FRz}T8xpeGR=%%F$W3=`M{?cI#-zBpw)u&8fAS+^HSeL|_c%GgA zrrzcGwY=3yeg2$Nk9Rp`D6I(ZN)KS*S7CJE^ZUH-rpeiUoBA*H55R%^pMllqzMRNP zk@q326a7D_#D4nt@Z2KR1A2GvT#(+}c$@KnZfeBW=ckH1luSNlWq3`9m)FpmvdP!z z+J%T$*)|J$)DB-?a(QAx1y8bv;B|);CsKTCoPrkfbyY4c%(!c~d5^EbFY&6nF3AD-*%>8<5h zb>)G+?4flFyK1y-&T%|o?zpnTuKq{)Z?%~({xh&Vz2M6AQE-jb&ko_mN*}eit-5|- z_ot(G7#wFQ#mZPtI(@}hU+v!V2$qAJdfzPfk39O~;z5nOg=Y(a%1ta8l1UTQCL?{Ho>Z-XHJ#i*WNr)GSSxmj+l#oxCJ^O1*rBxklvfu8rr^u5_{G6mea@B)V+* zc~i0Nvx;7AoF~~^@xGWxCPBM*SH0bThLp>;^50rI0(8<6zFri6`d1Dj^jO5OP3`+a z^SzvVU--Uv%C8cxzA*b<%e^nu68z8L6c>5=!ngTu)&7fZmtUNB@sp!!D|bv z!dH70pGI+QJ-TS)W0n`Y+Dw=tABQp}m$5ypICJK#S?A~Dk5A;Rk=g3D%itzMYMg*K z!`8`Rr}nFOHC-(eX--YnToaLNly~RrrN)|t-8>h<@_yL3NqL4$jq@!`7C6_KR{pgA zC67h7GUM`C;VI6ZT?P8yS!?$=`!3bm>v}cLlWK!SC*A5FLMLSj~OkvwwXg;zdL`+3sQ%W>1jm1|s2r5#;jqW92Y z>w<=Zee2dPn^(}{=q{b06Z@ZGqjHP5Y^2ti$2KQ^GejN9YWFSicxh{7S0%2+uY}OA2>fR<*d7@M2~+YtoH}2b&D8 z@9>Q<;|qAET9Ld+Cb#gKw&T&uzxHhuo$66w`s%o+f7tg3&Wbr%&SFLBNpnNIORr4v zde(AIA6wyEyedZT_?tQ(L$~AXz*3UKtDp^fauzpED~RRujhmocrzMGWEm8 znU`{{e3yG}d1*FR?edaaCA0k|;}=rRm6}7GN@P`z2{yWueZJIR``iBhXZ*kLKfB+8 zxJNp7#R_fT-LmZAljTCUeVrW^+}o7ec|*W;+QX?+EjU^n0$x7nY50BMc|=3;lZy@i z88%!AKBj4T;N#sRQbiRT*K5zxz24C0v*$-l^sW_~&&4?!T136K{4y2K<{g(uC|91-yKu*%z!7i2xRNKPY-yXeMrzuit(CI~eY&3diF zZEiHj;jF9P`AE}M3Os^N1=mII@3*j#;rNz&O#1XWS;mG)ISF2dTnbj{h#{hApwnQLxdO;nz~(KB!V;cxQ$pDet>$2?6Ua8ewr z&DjT*|19-8uSqAh?zL29Tpf1W?oH6&?2y|rcTc-_o-n=cTl37`Au&~E>q!}1mqm}) zr88WOlM4@au{m7)v;4N&j9q^$>!ZKP?|%*A8KuykL}_OsJ|Zn|$4{p@tj&HUNA zpHuM(#p74?;Y#w({Mp=sTe*`^&Ff=bt+w`K^FM{tM;5RC@qYGy2Kzg8{~6?AbDj*K z(L({@^ERK6(8go-)x7Qxzf_%v2p%&P>%S*|>c`4)S5 zFwgjWo*5zqBP~8R{9*W=Xzf1t%ZZl{PvvAJ{HZaOfysib`*8n1!$KW{!#v1HBmRIU zbG-Z4e38#*4w{_Z`}vgEXZdwa)&b#1Z9a1(ZuwC2sg>vRc^-rFAf2BM>uo;FBmDme zg9c@55dh}(4eotJM+h$=Cb_jE~T#R zIX-Ptty#mVsbXt(7@b-4R!uYiO+ujQhS{Cv z23DMrM$7q{^3;9!mG}Eqm$}T^$+=R!jkBn{^I)US{61Sncr{{+MqY z+{*>JQ|k90Z1T3NYk4kneBP0;(|?RMc`G%=PnpQ6z0A?nv%hHx=lOHWpF;ZeS#Fu^ zINtF|edUrXMr)4CRdiSGKvhMW1r3kgJYLSnN70&^WXj)c>rE zF#j_OGC=)5aiM|3#fKjX4}yIU8j2S9_AG|a>+>RmP}hHzO;_%^<|TArV#!b_a&Bk) z&tS`;#HFX8bs<1AyYP|JkBfX2GC6`{{IMrx&R}nqr}3*#Ka5n7l`b4k)JrPpPF!vLu&)qj+}ls3+L~r^-uP@?Pff|SK`plXNc#ifE*?^xV*mYN`}^U#$`I>fFl-67>X)4lVp=I0dB zxuytQVDf#u+((aNBBOSMu+^)Fu}+VcwQM@r`d*HYMb}<9H)E^v#e&K17oJ^YdA;(! z$bW{*lbymHHzm9ivi^AWGWVoCsx}PKl~do&k=e6X+u<~ewa@0D3el!Tv5k|bX!35$ z-g@OZdzz{D#bw>9vv)eyn(e#9`{uIT{fBysWZr&>-?{&qeXFL*;rp~ zyb!oNT|6u~e2RuX-%^Jy7H^WKhO?Hsdsvvgk)E7l>fN7G|MSP?ew*((GxR5O~pD)?J^I)XiZwcqSbXP-_I^%>!PdoZePomUE5T)fN@nx z>E}t}8dDaY+`cO9-Id(Ra+Qhi^L@-0YX~Jwyt!*eU;77?RL1|4P~~_zg+LLN@p+@+_m4FHuucp{|qxZEg6Cq zgy=dhT$|UB@zr}Fqu#M>8D77w9QNYtlpmB_IOg`o=85jhH*6X&JI+sL_T97k&g>;6 z=VVwOPk3Cses#>}36FDsX}X!{ZOGsL;LefT3&hTF&ud&15>-@uU-Wj50#j>J&V6aa zc)lHGIU-C)_Pmy4VCs4#ciOXZM*xRTN7tow3ySz=2&i9dRQ9>K#nLcjnG2W8);O;0 z-YNStmSj}jQJ8V^@;@#{v0Z)>&s&7bB^!9Gdyskfxs(FS?k_=m@`X2euQ=$S5WDj5 z>=ijzx4p{vX7lYxaJQsZ(Y!_Vkum=nt}R#+rjdEl(8XvUpF>K`BLhVyzKE2|drYh) zS>F9;@T)k*7&ZUzw(~Rld>YugF3!m-J-ffDJ>l8yk4@{>L`-U!^}f#VM5Dq~O)t$= znfJwietb~){P%x`pM8QV5AzZ(it{S2eQ;~){rl@QZaY1Sm^|UzcfSci5wR@E9LWY_Y($lxONN2je zkqv3x$H(f_|J%hRTDetPZ+gRF?FoWg%QEjc9gw)@t$5O(;j3h|wAsOyuU*W2R3!y7TrU#+0CB zX`u<8XB!&6wZ)d_eSUVd)ug!Vz1iEo(2dsG3pLEd9VHiDw3a&WmLp$rQ5+E;u(uk(vO=*W5D{|qzOSgyR9f8gciRl67* ztan|1ZSle4^WXmrfBw|3Ic3DTdo8Q3svm0|hqGI%l(K6+pUh>YtxrT7o@rmyHU4IP zp^xL|iiKAWu6W+?bf)}bCF2hhR`rO4Wvurpdfat@(bW+p!-1M51A!E&1f<_ktd}IsTF1R>n2}sAW zYw~moJ-H>ws`BJW%_WW%Ga2u)h&QWj$z)3T!4McLeZ=}o-bqRJS!wzak0ZGP!zO4g z;mV7zjSpaD-obVzLwo6Ncaaa%^E&&^aII!IQp)anRerOh&>`t#=6_g!#3W4mV3ou) zSw*q-mWedqQtQ^V3mcibF0Qt`R#dm~hpf@}{|pbd-hC{4n{&EB{Vkn$7j_06NlB?-T>oB7?HUtH(wy7-js@}^&7Y-oJMZv{_e!N#c><4bk^Zt{^0KE9e2Z>XY-Y2% zY^b!ikI%nnN9d0Z2L{IQ((p-#+Bnt*9%PWdzF$=QAz$Yk=1&uzGd<5(b;e3LJNab4 z=HrZ0Syr>x3bFBrE$G%LReSB&FIjf-LxfzoQVjrpUpTV(B;T(h0 zhIfyque@<3<)g;k{|vrq{~4|)t#~v&Cr54O34O6bx$>)j9|- z*iVfqf%h%aFUm08Ve4&JEwm~p-N|v$hNh#kf|AMxcOSpG-o0L|WY-~&^p%+oj=%Mf ziL9TgH0geoReQ~q*;%Wv<;U9Z{@76^=y!0h<9~*m`-~@l?LY9cFPBqGF-w{wXZ6I^ zWH-lc9J9^yo|_6!@MDQuw&BsE4^{t+3ZGAV`$LqCVR01S%GI$d&w1;)cl{pXYG=#68{Gr3Vr(+m0rD%-+yRM<FcZy-sAmqxxQ~lU4_k- zfARW9ua*9hm!G$H)0gAoKQ)iffB&E1nf<((?hGah$(wjz>=1PRWfbb@d1jAg&NIn` zQbswgFM77hMIw?DpV zQn)GmxF=xRRe{g_Cq5k4UT?_kpw7Z}=gvY$fs+A3tF4MIN3m{uvUA=R8T)WCzAu8# zsez_DKQ~An;!`^+WS%EKk6+h*>Xzn&#QN$2gABgYvz<7iFFjcCHDv);OVpC1f=`(4 zD%UiXt(OeT5Se<9^{oT8B zugng~2{Nk7Q!Z!!eg5voG9}S}cV7N{@aghT1rL+*ty*zE^fiKwU6jIJ+^L9K_&z#p zuJm4mO)Fk|du;waT_fa`_U3c{vd@VIa9KqtMBRPls-S-`V1?6Lt*>Vn*KJuF6jYWu zS?i?2G_BcjGAaKV)E|aC{&nPMNao3F@2=1OIHz9K;$zjH{|uME|FNpm`@Bv~(!jp^ zaRXLi+r_I-C9Z&mVlc%=7;y0E%aE>;M1& literal 0 HcmV?d00001 diff --git a/docs/public/eHJjmnU.jpg b/docs/public/eHJjmnU.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aebbc9d20085a73fa71a3fd6024f858a3239af96 GIT binary patch literal 123338 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 z zIvxI)eQp`a>IF@+emO06T~{ffo0%ZaA$rroQFE(lT#Vv!8_!j1{(LLWaL?%O;4%*u zJ-(*A>Sxo-A@98z7-qS?^bkvw zt|}Ax{-<`@pH>B}zKFiJ-4efdG%6ih`}_n)-2BuAlJo7ry^`|@iN7pvlBMUpW z*6cGn9-tX_bjh|jL0PR^^B6vLJvHt6SlFp$pxgdt+tR;HFII2*;C=Pw!X5nlf)-O+ zRUd3wxzwj~>ywRwFaAxGN?sqaY`J6kkKPB``7?4DL|gyNeHzPeKT#kjoVkG0^-~hh z(?z_B!8@+;?v}_p=Wehq)vc4Ew#&v(^*_UdXr_f{cKv7g==p2jdZ68^=$$&U(_&y;Nq0z%A*+8>g(d2`u_rKP7Lgq?d^1VbQDJF~-`= z=TGD?uUn_`N<1rsw@KiMWwZ2=OKU7t#drIEov@;`VBOP7^+!oU(f)6Oh3>Q+Ft{1p zexWa-LZ)lIs!4aI*t&bqG_;NcIBM31J=0Hi4Jpjw>Ns@e@!=hAdQl($993Evb^TkR zOxqFR{sbL`j*oJ8Jk|%C{cQ-$`*O!CPJQ!laTyIUPVPrKU5{3A?_a}t zwDidSu)gj;M@^GfEdR)%VfEOOv84F#+4VP)I-EBe%3rey( zOvF9~FY42Zp7_?`vF)zrkohWhvlnn{Wvt5LOpv@{^`uq5OVPAr*NS&C4mT1Q?ws&y zV&u}af0xl`IhA=sp5ue)xUitB?MX9>OBG_6?501tXwg`;yI_$YV?kG^|GRexYjph$jY%;wf?dkC=8IcH4g@ zdeil?*H2GteRY1n>7C<0B^No#jNmhY;c<&~WB=?}yDLUXE8*aOhNKRWr>{S;EZ`1$ zrIxp4!Gp$3#W`VLvWhM&T(tk6x6K;nzJ*b%ik?i&4r;ui!G6el%~XfTiBslmY=6SF zYtE*y{ki?o3Ac1|JAS?uY_?HW-0(Vl(oDTa(~A=lrxf|Mv3tvHDa;pKYJW;8N-Vkb z=rNO>8s`5Q+U|Co4Eialbls5mQQT*FkDYtYP1w%JSj^|QtjY9KMjmsFU!V&^K|!iR zdcumEE>_XM8;@`8ni3TdxnVX(Mu!heLs`Glf>oykA1rz58Ng6x&Cu$yG3N0bE$z6h zfDTDP2kUgBpPzq*h=f^gDm*%kOMFXH?!t~v#xFNR(`7b)Q{!wGxR|b^9vxmD>&vkt zduB3E)NcWWWz5@5e3d&4vi8b7WUgdz4gQzbJZpD#6GH-%dF`14SHBx9GQAU1@W#`9 zM!~_=%nZ?CwG~rY7c}cXiZy3Fti=4%^`mtC(Z%g=R17Z$9not%67lw7!F66`?_Dbd ztP88V#QIOX_5aT>X>G&LJ7oupxi(E){z*I7J7!Xl#b#gq&z!FrpVfJBi!!wqPiW9^ zX#O3e=5d|(ldjf=Se|0J%g;KicF3@ZCh4u{@k)B{P|aO8?mj7je=82{Dm#mjGP1*WHX+{P|RaS)XtdRP%hl(F_$1o>-4~cy#6qoui zUAQ}5?s1owD$ffK8{;#KTJ-HO{(nNpRDHytnRo z)sos1PiwDWW;}Y#fUVEFt+%wdTJFP#SHY3LlBS7&dD#P`%BZkFcIkVLA<-hya z_kFQ$c3SAFqFHvs<-BL!#0^b{_y1?u_&`G7@XMBP?#TJaCzr84J>XL6^+e)%^pS|^ znJ1EZj>aBYaXIVQ#0w{02W&f8#aXjU$(3R2)(I~g&ClNC-&nyt!7$)8|4EJ2>l3P# z)&^Cbd#Vr~mmC(?`kBAGblsIrzxC2%gSm1O{+(LU`=WBildZiEPIT(O+3h=JU&7J( zKVqV$J=yw%ZNme$V{^GfyLOiAnm<`{(PY)#duLANMy|3kc{Y#Z!KNR_KXD&im9Nm+ zA<`VbhQCs6_aE=sK~r<%X4GWuGXL1^)zs}1JSV>SkNTyVE1o*&76krgOS{QFp^CLa z^oLQm~U`BH06Ma*~K!0x&;SVoZ8?1XDG-OUSs%AZNu)Al@(7u zPH@@1M^*0V3VDvY&7QHp6f!TZxccvq2DkhY7P;IFwg&=DEOwpgOkB7i(zQY=JWuJ` zpJiT(IYFN}b>ow!Xl(d2L7(YLywILmzYYcpYMfIjweIvb*mP&T(&~kq#ecTDL`CMN z*83Q;hAzJ0skt+$>Helq7xX6`XIK^}Zl7q-@Fh`#b(i?BqzML0;+$R?4|~^G-O%2= zaL!zJyEX6L&0v~hUD;wQKCfZNn*WL_ioH{K+ zG|sy;+)?3;68A&h_QyJ*y6xxF-1zGL&J>pw@L2efcekyda(j;3(fJ?QdL=hzdfFTb z(dfN+_O!Rda?@x5i}+8Pub(cxdm;O`d;;s-#SMR_-4bnOl+!j2z5Zr#i?e0FRjZ=L zCzfS*`#+n-$Z9;Y?}(dF*?jVf(R8KD9fcP+Y<1qlwtiy8lzr+h2h42uoVog4(>~;# z*2cI6FE*a&H~5lLHb-W!fyi}Jw}Vqk9~BtBUm|tzhF+GSfc*R;S_=2Q`~y^?#JvSC zPHbqX=90dd&ALHr=?5O`n6ys~4{X{}c(kMM9xd0?%}QYrRj!ck@==ksj18WV((&Ry zL(r*BN>|?~if+;W$?| z=e+&Tu!Lpn?7fHQ)a=|Ubq~e#qBPxTg|pqY-8EM4Le*I zzwTzvF82z2vQy+xv&7-7fbIYl`4=o^=m28Qa9JwigA*_(? zHgRReXC51~IaibxEZ(@%%ko2=^SZ9CZ_x>h(>6ShPTQL2e6GMF_ehEPFY6XZ-5YY7 z!>-@-(fH-ewD&e&z_!d>!@}nb-IJEHUjKPUWPz)%cd)>W9M;7(XIZQreG6LM*1OjH zYAV`#_Y}t)QwE7Sb}r(4!7UE|89a+Eyz@4NED&Y-&oD`4K}2t(_W~u^u+-q9X*b`* zR*B8-TE%dGWk$!&?b#=HC;Q);!q}}m`_ld+Dwa=Dj|h9*FK!9XU}z|nU%_hrCPzng znU=S{r^AIRpSIUe;^g%r7AnffKX6+3t|Q@CTd+b$RjcADrs8kHhdX$Ue>5zKlRXgA z$k?7EQu&5)`X3jGXA10{%VkB{b+wn7?LXDqVJKQMtx05ime2{cX)FHhc=zbC`N2mI z_J^wW^Y2dx+!OBK(eP;X#DswPTo+lr0?SnPCHt+Mf90|M4c5KO{xf`-c5qdhOlJ`9 zot{?ZjXtv6vr{E9mi%YfzQHnXPOMh8$L5o_gjiqMY~Q?M@i+C5#YeOln7(U>t@7R^ z!J0NfF*tQ$aNCk4mMu#seyUSul4d-#O}x^*I6?EJ&|gn8mTY&esO>wox~F`ev1sbr zdkg+^St;GGXLQ)RAMR+0n!3ZzCoQZ0 zckibD8-4w6EOveIVUC@)X{w&XUi}$i>Qx*rB77$_bxb-G)=DdUOIf&M+0E~X%acV@ z4}bgTI%#6IRd-@>%wvP68zVzQ{T6;;%{{R0`@2(&jv0<8<-MEwFW5L7b?%%0C^qgg z%YTNOfz}VMpWm2qX&OVd_M&Xhv+|u&tUc2|@?VMypZLghO}1lze!vC2pL0_7I(+{V zBU?7%){fbyr+ks0{4?Xt=>;2ok6qjPQ!k>8cah+;rQ3bwoSv%M9cedurMJvf&0?Ey zXTq%;R)_1;!jEr=J$wWDcqGUd8s)=4_OBHJfa=fQ9%@rX^gD^nAYAy7fQgXXZ(~ zbX-}xx*)XsljL*H64g^0ReMg)@JgE!FqQwP%zuUsrLyLxiMBVmI8=KzU9uLdv~Jk1 z#bj!fQGLxNSa^2)k*0NBJx=1T4dMAW7laDFs6W}q$M5`5OLC!U+S*Nzx1*!?9 z*Ic9A7H8gB`fTrE*5+apw{zzMXNx?W+<7j@=9#HYu}qy;+UrJU4%W3tzeV1*&Yuxz zDs<_I#mtA1P7A)h;;)*q{k6c#c5{shHhbisg-hO4o&NM(yuXpge}?(OXG~AdVE zlKh12cXEy!>g{Y0>fXekGriRO$j;OLC(ehzJ#2UUjMi`4<LV=zc-GYTYocFcFNAKE3cM2 z{yE!nGQ85zREf6GR<6B@9;sn{Vm^7(XM;k zzr_UtmVBBX6SA_-Zc^7zNB?L2sqBxlqTWlM6T4}uXW<$g-S4nf|E`Z_V(!f=+dBNV z%wk~Fxb){_bEUS$L{Z#{S4k*;Gl^(%mv{M;1I?Vw&-9h z!`YP8$$qysvpqi)b!utJgmy2d9bsq7&-_z8pkFRjEc`KOV@*@&mEDc=e~7a!U2>gc zI+u@cb(7WfyMCuvOwD?8XW8SeI}!r?Pdd12a!CKF?Rd4$sO#p{)9>WG)V*iVIdE=< z+4X)^`HFvv2c#RAGQ&-6c3Doj>9{-A=$F&Xf`eiF?-)wgvX|>@2-fCN?K}2P>ty)R zvzM%61j|8d1liC)64~LpUh=2bkk{)U4Juw;Une=FFvyi>~d|^>0SHD)qf6ew9Uuz zoi!|5b65AJvVZv7X?}`x`bMt_Nsdbs3u`;#<=!p)!?jLnUGt2n9UroEk9D(&n!OD5 ziCkJ?%<8{eb+zDa%dR3m-d0J!bs8BT-*mJraaybwbhTXcxXi)1SEO36tjT&<7ddy8 z;<-It*Pb}v|0-d3S|(@Dt5W^YD@M9XyKQGEX3YQb^glxj^Xz~2pS|-!FYahsXmd(3 zw$#wcO6+oGqtnF8vK;#+lsxL$@mV}PZ{kXM)-DJ0o6~Opj&XR*&Uxm8Jl|8TDJ|U7 z^<(!Oto~nxTDS3Z=MFo8GwizJ zbIw@^+*6WR^qH4Q?r-^`7a#N#Zc9Y_t%X8g#cm?pE6sY?9t>U#?%L=8) z{FfUyr!<&wo?CX3&-FsDN4~yi3csmf{TU zsBDQZ44IHM%V%kD^Nl%4LVHpUmnSFZ9WMWSR9|_|+2AGt-sZx42}`zWuiy}xu})$B zpQT>@e}XNX>whkKxsfv@{*2Rd!7c6vVtx`WHvbt8o^+}>v;Jnt!yT&^r@uMqE&Rr8 zY4j7;a6J+4sF`^SvK&`zS$lt;OO}ah{i7`jm4)FG-^ohVev0+Fyl_n{<3X07d2C@K zdnHec&9!lAQhvDh$R`c&G*&)Ii8VK;YHUi}A9!Ha6FxB$a|b1B=NWqcScI-{y08?6 zU;Grt;C99IlntxHUDHi}99AvWUY*S(Cg=CGr+&o&ZokycN8&g?-c$WIxsN@1iJe0N z)B25zEDh|N*t}XR;#(zk4i?t_st)+V{wKcO@J-;w-L_WK_;vHdf654kYYPA1nVr-t zdYp%Cy>!O9PqNoj8=^L?h&;qSyWw5n_CE`CLj?6+_c&FbZWP%(ci}%(rNol2%ne+w zd#YUA!NLKmmfFk`IPcM5VrE{9|&mF$o+ERmvv89_3mjG(BFT}Qt$NF2@>*)IWK5`GGdHNGSANc&oHT1T9U(D%KXVZm(=UE z6O01f`~RdoGhZ?9`Q(YwPs&mbx@6Dw@?O#Gku}9@QAb~J+xr{3zl|z&E*!GA@>hN+ zv|l1dmfhU`-?Qi&FX|i^`wi3oGbo8g`OVBPV!q}YQ~XByl`89R?Epn_);qfvKluDf zZr7(>UANX$^t=g_v|T#eJ3PSRp>Bs@_NS0b*Dr}Lo}ctL`bpv5>g`FDPj8*BpU^s^ zyTMfRe8iTe`=7~*JgIX!v?)wVKl)vi$5!`A0?beM2%KaV?rjigZ~b+OfoYbTl3h^! z%}U2plem2+uTA_E_#}M6-^R+Vj$15yEtaP6EB$-v>hN)X;b5%&eTR`))f z*_X`G7?U2{dhn3b>YD6=p!o+`b#?tei%y7mwrKHGf#cx^OW91q)eEAosR_QCDy1qW zr&@n!k6cp8gzJJgS01=Jac8TY_tcOB73v!`3+0b!@$A-Jc_X)2KK@6;ts_k{rcR!4 zYrJwc5h}i znI{-(*dWx_cyorCrEptUVZlL%RNI3g+e~TBD_V3~aI(I6lKM`s5-c{(b^ociLz~d)8Y_*HN7Hqncy6Cv;i{C6OxgW@<3jJp= zI{Tj?_DoOPmmkVkmfQ%`+npwA7B%f&yzr%4t751WL|1evFs|AyLIcrU%1}ioTvUu z_0V0HH3?^Lh(G+MAFVVivMyXfs{gk69~Z7T@6Z>DH>7V^z2a(dZkby9x9Qj_nZ89b z+01uJgFALb{$$xv-7oRQvb)kE^bL>I=_=)Dtv2_}l>yovWuFY5>pi$}cTdP7ev{)@ z79R1|^G|=i>Be^VpDjX*J7W(mo%r%iI4j=*4Mvaq6IM;!Bey^|CtpGOL(hz5lM?l8 zeOD&_ELv38v@LxFcf5lALDzkJt7lZKFuPcia5(MBqW0g4o;!}L2*}AiDL#F#u=o2L zo1Vt9_Fm;Ww6>L-Bj8@zo(JqVE{Tb3{K=Zv!~flMf%~NY3@iHrv%m5Azuf=GWX;$ z*SQC#G0tmB`!?@bw`pg`JCmptt>$NzX++$qeAp1Dr&^ZZHGhWegskn~;{3Q)W(2Fw z3~{)t95-R%fwp6B>YTL8uQ~9%TA1-wfLpOgXw|+W4B6LMBX@^$OuZI&%_-_%poZwF zXI?Vfo}@dRE#_rvdU4>WQ|s#L9V}dL!rfN-&UKs?z#Y0@N!v^M;hT-o*G1pI*&{3G zXBMRU_?xu5g>wB4rN7HA)K2AH^`_p<>fPja_SSm`!;Gvh-$~(*{@uGyN9_8I3Ej7M zub(vG?$(mStN62JqKrAJ*u~m^xa!$U#;x(2zMSjr_iu)Weoaf87kXgz$qcy)^M}kl z{LI0M;Tbo$TMvrtepPQUZdxSgT$;oY^PfR*+24j_@v;b)hF5WU)BG&UKgFLnx@BW?%JGfKjp+8| z$|(nhF8y;9_kX9h@c1T+@FOBi@87K3;N8&9`^i%9#a{Wu?j%0*E4;5R)_T8Nc(gTD zt8Yfdv=9G|W;-7!73-R_X%XXTmypUQD~?ZEz&C%>Q_d@5JVk6%6}>;n{5uxS zvlr#E;R&MsHx7qvyZ`R!M3DvVrxUaaq5|e8oSt~C{9x{r59=P}E1C7>WpUh=4hy|L zfocC4&4<~J!pxU09-6i*<853-udiUyIM%jm*?$JPr>g^x1ncPEJYh32Uby3;P>X)Yhi(O5 z*P2G|rN1p(udFF4`)TYRIBU^;7EO;S=0#_A8QoQ||JCrYZc{s_!*s(vSC8t6&AGE} zXJ>xux38Mv>FcozO7k%fQb z#lt&V6hE{pY&XBMVENKBQ#QQm&J{4?ou+s}V{Ih^)0JI4EjQnGGX-pn7I|0Jd}RNH zj1S-SroBCRCv=nity*KLyu;TYu5`@O5OV8t3yNX-X1c~WS~q-o|A|}q+t&WGXfcuN zi%-k-lQa67LzaXpgX4U3!`#nNCSRP#waoZCa9JVv=Ky>*hJ%{{N)0K-(rY>ao zawqHYkEz=Gl@Co9yZ9(jhjsqS5BuH~iI(5tSXy=DmHZ2iQVdkrDj(sF`d)+dlrz{a~tGfF86rv)F zzOwG|z86|Ehr{4f&)QQZ)2)(L9)2hz=6-MKR+gQMjCY*y@=6HWU?5|DqpYE4k;vCS z4xj6r*exryU%stvp0bC0cg79HHh;%GY~Ks;3Lspvr=Ilth) zzCA1~6%C>cKa1jj?2vh7#CbWOtD(_R{#h=I#Olziek&XJpP!7+$(Z^x;L)oWjG~{I zR;y2KOL(*FKf_;#V9AWo`AK?r7TP)oY`yTrRHb%@(Nxp+0`Jr_a>p8zWv5+hEd8m? z)7GwkUtRL{*@6R74bR_f+oky+&DHEocxYkLvW2&%Zht77t^53s^ooiGjalrv<>Iqm zmrZ=c{OGBJbhqnQORht!n-;Oo;_=mvGd@`O+9-InP4X_rNAWjUO;57PF5=y>S@Xni{E5m zO?Y}|?WJko4WsLYmYuFU%RQCPyG}W@F?k|`tC>t|*u^8FjP?l^R!=i;(_I!KnX~K7Q>pbV1cCOo>dHz{+jFCzDwd4Xb&g56O|FrgZS>8XRWY?9)pKx-D z=pW`MS^ZhJ_N%G-y_&DU`lY3sb2nes;zJw516`J$vg#Fi=y)iw^rn~B)Bg<8_A@6j zUf*$MrTZEQhqX5^F%{1Vb1`VHtdZZCe03YY^ZkvUOc(9D3>bFlT#KJ8^q+yV==^_% z3*KBJ=VX_uOyzuwoy-a6;ePmM!god2paq=e{u9n!J)-aNA>)u`W@)-m zW3I)X70s8g$m`#XSk@eQA}1&6#2lMC$Hmuwww9U*??{V|2&oo2?)*blum7F7XsE!! zh12;2w2FOn>`w-UYk%YT)OR!dTA{m(Iosg{T^kycQ;uFxDtKiS9hmyBR77d1k;S?W zUER{>Lfd5nX4g%)(rP2+mvXUUVpMNvB%d9VNZdmmf0y?hJ7ZS(e33i2DS%;4Ip^Ah z!^?wy{F(J4^ppLWOl6TfU#9G9{=}z{VIP0v${E+l&rhz~ByIiobY{&eeS>?SxOP1F zWj6Oz(T`oF79#Ny{~3&HS@*7sTyrLK`OP(=ZCq`-8XYVPB!gUclrGlWb|tgv$WztJ zt6#QW<9;?%e!U#q{^VUBKGY}O*Klk9IYm8`?c#5d)n>mVG$NuuneN(tV$}~{v;Pb% ztUT`%J2jpfw(>7~I_ZbE0N2ZDYoDL=EiQDIOHTjKaKmhQYS*U8js-vD|9D*04|uAw zyOc+H`-`ci$Bgvb79dUC8A>zOkj~No09e#RjphpHhXDK3=Wnx*`5( z!pbTUk0sw3QmptDBxFCzUf@;#d}i4!p;_WV%W7ph)H>o`akAuU|2p@;V|xMn+JhOF z^4`fD3V5;SWKLd`)}xmH3>&5xt(;m~DV)c8?DIbNx*C%<&|xd|`#n)7Ya{YMKqHM5PvT*A3S!jv-aMa%I2 z)+pOmEc$y@tMp&RmcIOFq7mw%Ddz5h6eT$_H!HZSjI!HyBG6 zZreN6ZR)>EpF=0}TX5W65E)bLvtf&ya&`9Z4(XMfboT5l>E{#I3})ZbBf0gV#_jDB zZcBV@yEgqlgQ|4?3WrAvi&lKmZ4Q)X39>q({=1>`h?Ye2N})8aKkaVk_;nty+Hm_< z6Qjf`4hHr)j^Qy!_!fpPd{NGQVzI|kP4$3VX5K03jTss%rcYW>T_`zy((l|?OHW9D zZ4p0zV#T#X3*WwqU?{%nWV^)2isOmM_Py#wQ@zD|>W;l-nBsk1dQb9=g8R$N9*4R* zxE#6sShwqONvV!S&OUk7{zG@_1y?BFe3iyMtM`Z7waxy5eB4w2GfbFsk?Gm_jStN) z`T0EQKlbM2zM0W?SKNBc=(wC);eqp(S3x)Z-fc^rdEk@Xk!SmExNIo-DIu_2*LiEw z2aSixT?$uowcV69`+qvU?dZ7}|CLu3|5AE&JMu4&fBXS$yQ8aS`%atsP=j@;{ncQP z@Y~ByDt*!qT5q9vg0~{bQ4x9d!uQF@P znSy;JZ)&c;!Tg`0`TeBlvs*tIC+vR7^13BBkC$QF-k*u5=LQ7E=_n|coqnFnFx|RYz4&Hl zfN$Au3H2kJYlBy`uE;!X=N7kMUQ+Y)xj8!KPDesRLhrl@ zKbNGHvvg{S^}2*LnhcFe85V2*l?k#w=S~ch3}@+@wNBvvE8*5xpN^>B`1ZkXO;`OB zX_-4FjDH`ReS50!d-k6A>b$<0t(BR#OrJ)cHWdBB>FBh1hC**yulS+BmF72Biu_~{ ziT|OXu<=%jVW`=%sg`UH76)}Xsl5?C@%Gy8PThU_??MGSlOC3M6|Y#k?7NJY(qrCR zDYtiS=%3`gHBwGQS9X!X5@s<&=G&jjCWU?!Ju2dIl`WJdmaScWqhmPpF3p>d>~9`? zV#C8e@n+Tf@W00yp5=Hg5RzDbSfuD&2-CrT4_W$`3%|UlC2(*XYm@y`c@~k$^$Fb1 z^#eE^SIyL@fAXwAP;}2V=L63>uE_2XVl}@b9aA4Pk^jcy*|R23Imv3DuvYncGTW7c z!=innop=00=jtB+%EaQf>i(IP$2VCju=0q_^48Q?;d;nK)-nF%lSjp8BZcoYa;PLe z>3L_$CFOLQkY8M7a^ zoqGN#&y4^?WgMJIOW zo6I3qZnLJ(J>b;#=z;i8wgvLCM>P3gDeO;wa$Ic6VX08>h5(xhbH$488;3w7@-SsHO?lW6&WhL)S#mr1S>&wI8a@J)gXYv817+vY#$+Pux> z(Ehfd?QWNzEcQ!05VSLi!DwN5{u|N7^V4E=y#l0G2prtPyMN+iM(==`$A0eoDKz=( zgwE+l4>o>jJ^FeE>-PT)PuBiXl@pOU^ep$%(&=9Bqb-{JpCt9H*UI3tbt&)ByKk72 zDf8$t-%QDhLq?zDCD!fx9N2m@{z)@GBd1nOX62LslYd5y8kJ{VMGYQLe`DwpHqqng z)R++CrJP&(s%9;<-Zatu_)kaOR_WjJ6B>`4VtBym_uGf7E$C|A#>bqj0s^I*{z{eI z($AALV644%&$54tmDBzmTQ}}~6yy@lq{}Wd?`VVlDVDz*I^MEfjFt&{p60w}1=9t) z!_U8+Za-SF@-SDN_|`XErQbN1Oj$O|@jY_=F{eI#OUMBU?Q0iz|8Zs7-K|h>Y`AQr z>h25cPGp+t@BH&VDY$HvX@=l~j;-fgllUDzMdr<)AZcVKu71-YR%^v8L(hY{bqCi9 zom}a7FZt|@BL@w6g*&#bd;j+L#&y2ArGJiua5`o_F^`>gL8G+%$fW|^`HPonOx<|c zB>s^|j~7W*4c zzBaAou(yQ7ACbOKRU!U@Ok0i~YG3jFQxK!jg7zM%l*)IC3#7K+>^%6NLFmPiPw$jC zmfQVjxXmS;@oRN_Wn<$GQTfx{U!>LZB3>Om^`D`-$17uVj)B5K>BTY=Zd`Qy6w|wE z=iRQCfiXSmvu+vZ6-+x{-QK%#f%^krN6)&8TX!+BwXnuEO#MCo)@7_&l#J@iyPvX`waeALbLE@~+F2HVTD1DUMQ{c9iuOM;W0l_!Ufrd3XR=_3eUsA1 zz<{eWH>C2u^;nqelJ#`C(0ze*>#qOt&Rg*^<{U@Nx+yWcMD#k-{U(Ggb@`fDVCAmo z^~31j?sa>$@5q(4Y}=fBwx#(*s^5Ae(=d}yE1s4;E|@k^oZs&33{J;@8?0CMOgB#L zZgS<=eJMEG@{##b*9Vplxn;d)<~*1E%qe6Of zXVlK5-(6P|-f@V`Y4u&wSJT8S>-W@o!UoNxn@)ccdd=TF^?aGpvBzclC+lfzw>t3l zdKpi;RvdRM%PaHWgA66{3-5#vryVPDT4$lP=1boWEouMHx~#$nC&*7MoY%R_^53(U zeUtW{@tvJeZ0hm2aP`I|Qv!uK$8r z_-SnT*Tf92CsMVInxS_Mx;RDi40?2@af_td9#B}m_=sXxr5K~sh^1ev56Im-pKEfZbZ%>Fi$bpB$9kW*W&}^eVXjk;HqUAB9g= zWjy^Ye6iMhyZsTTR`VZIil$U*AGkmDUy?!2lhf@=u>#V@7dK^WTy>1SG=;f5|Ax2U z1xv9PiLIR+d+w(!T~KEtAa+Kj&a`eBlQ$w;>)tTkGLQch;PJ`+lX~Fh9h(l$G0bkUJHYjL{RV}n zmpR*oo>p14$zPtC((pNd;-}RA3^N02T~@V5$bXcYvz+asu*TwuEN^5&}_xOQ>RwQ&Fbn(EZYA}D{0l;DJ|NH zE!-_x+$n4VSxSkukBk?1^XsKwc$oL7?EQSDyy$Q}wobyCI@83#Q-&OXXA(GoHAZ;D*#1*E&TCXB)QtS*S z{%1%%(0cmvHZ6(WhfkPXOxb;FrXyF+id~%_zUwk>k7jG&`N>+g=!M&QCk?K5B{L`I z-wE_D71O?WNp}syj-xH>mhKbMJ6xqzv}qNm);pow4ATFU-`$rg@$TT-tZBhf+%Er@ zXXAvRiRLS|&UzK$UU;I=0nVMCDuRDF!SsN4UkbXns->CqBHPT_9Iaac9 zE|QC9dHZ|PB<_H1VC>^yW?*30S&*@Vfq`*tfKQ04PiEo6hYue; zdh{3!9zJ~d;>C;mFaQyM00XaHy?XTM(Zh!iA3S*Q=+UE>FJIojfB)gbhxhK?d-(9- zwH zr;Z;#&d|W{=FOXvCr@tMw(acMvlAvv*tBWWjvYJJuV3HW+pDOkxP19?78Vv=UELKc zRy=?HyrH2XA|fI*G*nepb?@H2uU@@+`SRtlW5-^+cyaXT(f#}P|NQy$#EBDo_U!ro z{d-48$Nl^F3knJzKYnasVd3xZKW*AHOH0c;ckaZ;$LHkaT)1$-*x0zHrlzv8(%IQL zGcz+fI@-j{aYnTz_%>kyA&OELrmO>C?{ro%>JjKX~%sghLY=b~jAeHKAjF z$DuQaTwPtoKizU;U|^6d3GxeOc=mYG`WL!?e*Imz>h;IxJda+#Tqe$OSN^FkGuPWk zT}zl*7#J8h3p^r=85p>QL70(Y)*J~21_cIB7srr_TW{yKm*3ej?V0VzvuB>oY2CEe zP1+&!;sg)Y)lU_k>+Ifa{rrQ|em?#8PiEeod-H?&dqxSDRT2%+I%1x+-(_xZij_aH z>%iZSOe%%v=USJ)pK~C=AY!hp-T$ZZe?RUl z{{Qp-|G)L^#t8-yn`?i||3A9Z{)cJa_Et+j=n7|w{7p%_1SaXvp4)-)wK7|$I0yMa=tP) z6`zhiXAYQqa9z&fWA9ej7_NJ}cjLp%r2i}Wwk=`%yrVKU~{$ta=Mbam~rc%frv?kF(wP^1_j`+wU96@B8#+@x9f3 z=i|b+B`z)xnJ2MX_V%UM?Pm`1@#jQaZb9RUcHpCQBz?_K&kL`S|EjU+=x+ z^55c?A~ZeM^;^b2bF%IHTmAFbf0SE$@ZV~#_)nj_pWQE8zuWZSy7#mC_m`~vzUp-P zdhOdAE?Q?zln|F;7u)^7gXccTU5dw^o$mA9vu9@aBfHgl^Y^aH>6cJ03$ZlZVR})@ za7nJe;jxeh|9XQ$BdYa6wT@bTw--y+x!{uYr2ov^#TM2@2X=l7eL4B^H_K^1gD-VV zG*j$&*URn@Q1wSG^yh=jfY6?KQ-z(ws%LP_J_j6qnLbT&+VQ#- zzR#BLJR>#HZSAX0!B-k$wDeRN>uQEHjBGA<)DI`fH{?eRv zpWb^JGqe~Rb{#&JEW6m?#wj;{^CJ^p%4bTjdfl*DT$kJUxo4H9mD*09FITm4Z%<`S z;wUqkw>tEs61K~CmNZHfHiV~fpA>&)^lh!jhG1u& zi7r1+N^(vv(%JrL=Aqo)BNJi_g$(~(POHtjxYIhxL&?zTt$)ui%~ol{SC?nEX?%-0 z9?>Nsx_G&Fl1ie8&XIIpL$9Kq1&O?qQ!U*l+|k@L{mh!h(j9{F)jmQl>TWf*8|rmu zek*h3iL8IV%qex>_C-7|mlpF}-aPBK+eXVZpTe)Mu`_!rktCTkA>Z{Tqd?_7?Z_sH z(8bH0la?fktoR|MxA&T%QIg89T{rx%8@~C#Z8Et`)WzzV#Ip-06-ynemt2_? z(mPMDxaZ5n2`NQNXZ_E8_wwsFxJf_Aljq=0#WvfdjB|=-cvo2^-7tPsxZUH>ULl*$ zo#}QT&pbDn|MN`p)*n76wC4Y0F?8S&NUk_CVb6>`jS>oM9gIm|KJFC~U_QbCk{R4o zn@`Wn>^xoD*;Yb_w;%ks+N)z@_1%rk>)t7G;xai>+n+eVO2A`RAJ69Vy;JjhZEuXo z_sG(pZ%R|Ek4S7>?A7rwo$ttpoDKh1872LQlsak~7Hd}>dsE5q*lP`Jf!Om;AbH!% z`E2}%hlhgo(j^~)_X6oGU-hI5A)LMxW~3p&40s1_dWS&-cnKXEAV~j zacCi}<=+!sy?dYT+j~2s;i@)!_wTWOkZ%8X+xJ!J2!$uDe@EZ8J;|`MexJCxQh0GD@3;8S4d3tYu0OxH zv-*4epLd9Q(St{VXWNq4&%MW^V^{xs^!t6>#|`iI{g)PCW{aM9_r~WlKevA?-M*^+ z$6fyYp925BYQO)FA0+47w()!0`(2A}*uM(;D!%{s{C%tbf4yzbZkVtk^hV9;V>2FC z$9-HZ82wo<^#1<`>wi702I*=&Tb5(7ukOVsy`K*crhN(tZC~}i?(zCxXUi4Xc(!qQ ze_LJoVq5&#&yV!X=dOrbxFU|xFk!=0!Nuo)zu)T=*eGFeqpR~^Z)@ZePrXU=S=M*f zu0Ca#wf4vMtg9zC`u*KHN#a?u>Vyd~bLQxFFgBMu^Bk4nc8X8Zd2p~(;+b;eDUqYj z;eyH+dNTQv4kYYVYlFN-Qq=Qfc~sI3{u}2lg_^mG&lsq(85hcL z51N?l^6|M((IV%>e@Xo6jyw`Mu}3(j%xz)uDw_C5B`M=Zq|47PmxT5IFCAG|5`X-{ zw#b=+hh>7*X1e^eYI`(i^^cS#9`@P(qDLAIUYnBKVKFE5+hkQYnMbCUZN2wr==52# zC2JYjKQHd7O1iPro5#qyev`ec6iD^9zJo3k^wibt=l+RSHk?z;GjZ+8Qg8vjS|@^$4(|co!Qwc!U`4@U}j@B z>^R~PH_i9`3>U@@#^y$e&?6o4hdl1E(rxT9=4<>ofG%? zOtRCKD+24DQ^d2mZ=s=f<3Wd>W2HTB-cEW{tpiqgTT}LD_{BRU;XdZ|6W1z)ZJURzw#cxYhAuO z>Yk2+Neqm5j?v*{8 z{@galZ2#@8ug>rP|4x+u_q*Tw=Y$A8p7oydP7~Lv##I^9WL6(L_UfKd(w!TheTuey zGYtvg4R+o9Bf``y?E5sq$G7fD@B1hG+daV1G(hz1k$-`)ZH7VLrwJwRd-}P{t46;f zn@=>PIryTEb=cjzS10b;J_XwR)mwj1PA*5Sf1(5H)e9jer~5*`vt0MM8|~GT(%jdc z_pUnb&NXJO6>LiuMOLkmO6s|~*YwDX&uz&8j#npjrHRXQ8rpqd*Ca8CyGiRxl<>Ya zPv&UnPgPp!Bxi7p>FIKzIafLrpRY?@?riwa#lS}lh#dH zvzjqMR+O(-VwM|^@c!QBgpWL_8h=9>xlMx?>ZdEY{)kgbvikBZ@j=lB*H>;+5}#d) z%~oqO(2KM;JX2XA>>QLd--03MfLRRZZ+D)hBC4A#p7OXJaB4cmRw(>S{QLz~1@X-b z8XS1cuj?E6PFysj+>^&orL8k$YK)`h^Jx-+2e$Ycsa`j`ey0AwKfP#GH;Egc4X$f^ zJ}qMsGUxR#Mu8w1S80Z@lyz;__+M7OQW5n3^U#GS^|I(iPQ#95O$FI*Z6?EOoaoy9$b+Xr!fI2!mfl&{koKn27g$hX_R$6(@REklKjx!L2A>oVl4Nuyj@I|HVvXR^ABLeCtU8l92JR>iD?4wQF6Ptvf-^RKr_g))+ ze6ne_%;A!Gj~v~Z(->Y$TyYREFUkE3-MBif3kNh5PIl zI-DuFxHL(nZo~7LKQunOzkfGX;JRVY^S$pUt8q^ME*W*NYF%3`}~`;$Fy9DP7V7ME7r zcP|H?9)}eUJpM^jZ0>CQvBs){Q8Yw>t)o$pL$t$D<=Dx!?O)!C2{3D|aOmMmy7AqZ zD}Q@~M1Uh}Qi#Ced(#ciPoKBvE>n^Nt7u1{BTsjihxolbM#BY7Tt_m_85Y6RURjg; z1STG#;;b`FkH%M13U^2X=+V<$kS+>vz>$zgLz0tYv-t=gZ z!{olBfBQvE@|m{p=(WjB_kOvNzpQY(fZMM)p(7H^hFbU4&)J`SH!V5ilGqEr-R@K0 zEjhlW+-8<<)1i(B5pU&>>ZnvIUux;n%DWMJ$1hA@`xv-c8YOHL&dhcZnN-G6a`OGDPm=#% z@8h!hcKiJGsmd!dl)J*r*^hiUW$5!#Z0c0?PVebY?$^ImHRLd6HRk*t|M!C8XZ1E8 zu7?#u&Du?;G>>YmJuGDS|9$GYfXe#y?>ZV~7EdnaNvywl+CA*h(-gIP?nwo{MH5v* za+6t-j&LvgH}R;)#HAct#h1>VT5;L4P_ArBatq(or4Bt?b9d=&{-l!0Ieqf?_+Rck zCq*y1-g_MOTV!+Gr-(@&Jrg#3SIez?IPKz^Vp-e2IY=k_)U>DiaL`OJEwz5E#E4##Ae_B)5_8U98E(+&z7Z`9+6mG?cHg(|Ka^BZ!JRtctc$`-~J4)ca|R6v32|F z+n3(W-3_Vb%HH2ut9UE|R97K2$~m-Fw5?neS+hn;8f=o~tn=rpZ{*a8Ypq~gwJ5R( zDqgtObpH8g+c|ihSg(48uvY)L_qX~F=)#CqJ>%5qNwoF1zyXw`=>pnbM?dHcOd|GvKZ==;90_Ve5AJzq{; zemraU>g4Z<4>{L?N2a{@iPTgi@NYK$oCR{g60MdkbvcXcex2lg-}v{@qrRnQlVd-# zT)$Bpv1#$S!%M#lR>a-e{a7(1U~ObRsUu-G6dN{wx?s4%~VYKd>g%7nj1I$qm& zzY8k5k*Z@V`b%3|SLEpaQWu{46-xx0TNgUN+`Luj@UMWXZ{cgWwyrn7=F4M!$aM3` zq@WIyM{5O|C+OZt3f;GAhsL}JYr{ueN7XV#=2g073SK&P`n*!UD)*WEIi)T=c||)tdq$eKUbS_C>d)bd$ofEHAZnM|(IymwhLt=P+I5e$RrLA7@;*T`{ovn% zAcqzAIOw|aSX&3*Tg_tB!7|xV!)n%4jr-NAcZC;c)~;S#%HtY${KNUfo?2Jk`ZhZB zOy+v7D{we<*VRXVnnHH$Nlm&jJ0fk`_BU2-JHwTj-|g-?r}TP%N2v>sn5(T?+ur*k zFZ?<-9@#7Ozx2V^^~p<)oY0!H-KodnNBw$>;{x}z+HZfAJ>&Jr>U^1M_F z^2p>dT~JlanB>5k)BsWdYVL!pQjm~n2aHU(> zhj_=tsZCkk5*trk(|cf~og2Kylm%>4gM_N3TfpPPsT~uaNn~cuPFkxdz^o;Z?D1Mc z(s0ryjkm(evBy2UZ;NE}HcA9EN;vNdFLL6UCaRh_Q=+NZxo683-;GcgB_|2gdMLS_ z`&4Sy{dKJa&k8rko{e^&cd{jU%(H!QQPFVOdR^Y0^vi#C?lj{N4Otyn>ffWfZ#uK# zwO5B-lXCW1MG8qwUaeH0*9R(uyF%^?Cm*qkQ8{+(*_T5_X1)BA=FLuS4shJ66#D&$ z#72Jaj*GMA+VhKs*aoa^lz9AA5fm(pNsx*JLVjtN*nBpuaij5K6Asak+||2Oj=iXz zp?>U-+v+1bY?q@7uHAcAtZ`%YbG?O*D;8wMUR5=8dwdm&I!KXrwb%CQ@@5h};FUh63QHDkNlUfq=S^vI59(*4`p7HTOU>)m@TO?COFS!-);D}O##=jXF=0aqlJApu)g zN0}PdG@m$jj3FfT$c}B_j~!d(^G3e*@6_$DPJ0WlSdbOEH7QA;$>WXu*Z9ynNR5)e zXl~VX)qQ_=fBkq_``P)`$IWG3%x0kN=HhdEMU|-)?-FEY7z`T)g~EM#Ue+kbteLe${K&HJw)PxO8L2*Z9!w zi_bYnqt(xnD=!{)cMc+q%BwzW)AsUca7! zq=K*hTvuxwYASd*MT*3QR1&6M`8&bCa$g*M` zOXrIZwtX@#S@9y;?AGknZ>P$f4!g~56WaL7sB7)##eo9K7w!eFk#Vc^e8cW}bV;e; zVX@!~2Tye@Tzp}FeeZ8m^`prGzl5BF+!kz--tTU!?snNA&e*UdrgTPsgTyR>qlqu% zj_#a$b?e&JZFWgVnzaO`RV0QfMWu`1E8#ghRpN~NG>O0mZaoga`oCFpN$dTY`cY%I zg4-L>d-+K$imzKFCQV*s@i)v$%EnNo|4-+`;84Y2%b&Y?B=)E#omivAWqx6TXJ^LA z&Bflw0)pOZ2Kcl$o#wLB6L5CZ3Ay)I+A_x?Ua-HXo3F$1iO=>U3aRC?&m<&_Rty=2CGr8A&%heMOmBP)7vJ8)V z?8{to=8yeZ!=g;r$iBp7y0>z}CW-C-_WJ&gTX7CC$6ut>39dNTA(-{b%1yZBx;KyL z$pd{Uf;=^{&b#j{&F+*adV9p<{nQzbl9EX`gf1>yl>E|)P27iFNi+Vg56|uuqHR3_ zzkOGRU)?Ko_u^im#IT>c725i;-ltx@tNn5R{VS<`f-_{4yRxS5U@tDeYJc2d!IgjI z;mX1tulMYpWg8(-xQ=P+v<|+_o>db*82@9Rc~4u@{`KV}8$Pbyb6nRtG~`n9)C1*h z-YRa7lXY~@c`@Cq=@UJl?9!4PI4@Jt)o^;3`u1n%lnisSl>R2q7ry2lt?G7h4%3Q{ zGb-8yR;7iOg>O~UKVm%pZ}l_bBMn);t2&OCzc67oWb^J(a|?J<+UaP%tstj z99zvVg2ueGz~k5pn85P^S}VXpNaSNNR0R;#O`!f7sGG+C?(8ub8swedpmk+Sa%&T- z&=Cehfk=h6%NvP-WoWqkUWa zeu==|pYP61jrs4ydNnFUG}lDvuwloh8!z^+f^;@=Z<*MoIQ8_x%Diml>-z&7w~B?j zO7|Wq;8~<&_G|qr4fdcjDf8-J(a?HEOavbw*T zj$eN`uUHVZ|5b?eu2~XO6mHG@8XxM_^Rrh}=<&DX_XR@y?VGq(eO>LhwJ^q)$4lVu zyze0S=<40t%*Wo%-M{B8dxhe1 z?(h4Y@#!=FJR6G-0xHT;_Qrh&Hw2PS;+X5|B@GQc9 zuGwdK7vHOY|Ie2H;@;o(pbpKowOYB0kJ&V9^z|~X@aingl}tMG3{(#}-}n3Trgp`G zEdQssYYt|lM{LR7_pu^dVijlrF*+@5)84J?)%EM&%+|2``KWlsf-K*sH^J&m?kj9c zG-e2u1kb+5$anl*yng?uu-eK@CeaYxRW-BpCEoIMOSaVubpBoZZ}qA7>+){?U$&>y ztoQxLyxKok_T72@wdlgsDzQK^-PbbnR6Pf6z%3we29%9?5@{wsHMgZ1H3ccmC8(^FD?iRrR~HIJC#uJc(tN z;n~akHqO0jQgBST+(#~X4aE{O{tt1aQsrIPwTRssVI;x*Z1kN$`lAGn#m!?p7F|==? z#?iGV-}MWWcP^N-FwruxF0rWRM7(Gwli`-MsA^&548DEWLVB0zomKhkt~ygfPj`Jv z*dv4Iy5X)5g^n2TnYQzm{F(eI?s!1iqRbU~JKs!^m=qkc%JP@?y2zHDKE+4(UAt!3 z^5oKd38kcoA5_?MqZg#AeY0Anx%Z8=)=SH_h`KN*RkzPq^8-~iR?B<#O|uA5Dc<8C zn%479w68^W-CSX10gv=qD)~@NRN}l-h9Ft6Mk!hZE*L91Ga)64} z&%RTNLW?COmd=@YuXyHUQ2*%Lv1WV2N1cuft~vA=sH|L+5_qV5?-bLuo>O{m8+57k z`tc?Pt>bd4PjazJYANM$j5xj^Fr4k5)~OXTa)v37eV44d+V93;Euiditg*Z=@m$nQ zzn8Nlv=*#riCz2g+)vN%UOhcC&QB=fIb54BKPz>v-F?eXQ5)*WePTc2d3(o=Tt4~LU$ zn$rnG9`0&i9H786JI{YSaMZ^rD!`Iez^xO7KJ@268wm>U{+ z*B0}Pyfs7O=C;?&ipO59Qx4#b*?Q>D=6*}JZNcRy^UmfzlQkVJ+2+U-XSw(DJ4)fpIZoa4)Zj*Yvj-vz8q zT6SP}@Y)ZNbN8)Ho)f~HILH0ss!qi-ypl8ZvUz$XI*upa-7j(U`zt}innP;hzY|aV z4YgdYw;J3N>*5`Z!VYE)_x}o8+^?_CoZko9F+h)cqVln+Z@crYI_}k!KljQDabUeVNefhR zDz?3soF)jWH8;GBy9$|v-;*mf-xsCUG}l_tl;t^fbL!dY0*AlzobGri;SzbHWPR3T ziPI5IJoeu1tRVqg7Z>I4>ybEZ;>f+|^WD`BJfKly7}-;{!l6e{AbH!)9QHSVeg!wZ z`q&=ecy-ySy_IwO%l^K+NlBC$I1uPfe z&D|ZlDoW+plevG_=I;6pnpZRV`IFsWPNt%RPwvl?W?u9P?efx9zDYiP&o+NfnSJ)X zpW0;bG`w@k`+xoSTe((!3)y#8yr-W%GuMC8?JZ z4$A#H_AmW?`5LWTruT2`cMaX@*&|(j`ixiC&-2&zy(3%>VxjNXz%+hbYJb>tnb@E>W#8D2s9q|e_OpY?){Y5%3p!)tAf9$)b4TooVYCO zGv_+l>Oa@{r`JsV@!`O{JLlGH=RM?hd1_>HE60`o+!#Om%7+(@ba#KOe%){XCZP1y zPJQ|O3pF!V-nt+7{Nbg?Zz>Cq_sf}aNc)B_{aeOl|crroa>@a7^b9fB`O}5U^M&`J2UjWU`(KNPWFc0W{GQy8>Qq7Q`QNm zav!;HOXN0-p_@ZbP57*PCfbrt1)l0|*3D}tNlbh(OF~IW*qLXt#F~b`W*vevFKH_r zljxZE{*=nC=}K840Z(8QJN|af~+)OPv=h&kt{5T{$?R?OM&Wo24q)+Y@I>vcE*<)W> z(iYpFZ(~8}?WtGC!=NNt&~TT5fb!nMLWZDerbdarjqd}JWI>ba3T*dWm<C| zO>*$854cN#%0pJt04e&xqh1}L@fEOk(1=+FW6}YKo_C#!bIqh8@BF-QfB(l>1+M{1iC+MnmRB z1UJZ1=oeExr!J#~Y_&ED;A{oaFZoTHg^gLm@YG}UcfErz@hb;@k3ux(uxD+vWG?5IHs)p&je9)+R!QZ!nLUqWk!b{%@--+5nw)Ip?oA_DZe9+ zLb@85_Qv#)v2!vN-BBiyol=vG$KG< zHgKpq^vDS%Z@ZZ#|L)AMdkQ%wu{({mT^9VCa^cuxe(R8zhkgd_ar~?p3hu6iS%3Vt z=RLS2*#5kg!{%Sxg=3fdtwLnQ&rN^CJBxqis-UDhw{GWdLfrR{&e+%CInp6I#h4|r$spIjA`(NLPj4}_&vL)-?6dM}uv=%EL?ADI$~(SlQ6(q{mWC`n(r_?ggB7zOd<}>M z&$hgzKPMIUFf<>W^X7y5^Sb|*cfjnQ`|ZA`?{AS#Fqkp{NIQBt;^s2XD*lf W_N{!%KYs=W1_n=8KbLh*2~7a3!=P^f literal 0 HcmV?d00001 diff --git a/docs/public/hcegguh.png b/docs/public/hcegguh.png new file mode 100644 index 0000000000000000000000000000000000000000..98ad8ff19ca76c493a0d3bba5b08c89849f4612c GIT binary patch literal 19408 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 literal 0 HcmV?d00001 diff --git a/docs/public/nLaiYDE.jpg b/docs/public/nLaiYDE.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b31413693c333e3baae8d83b6cd8c42d95d3f92a GIT binary patch literal 222428 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

    obAo9c{YD;}jo6NP$X4)m@x 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�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 literal 0 HcmV?d00001 diff --git a/docs/public/o7WLvBl.png b/docs/public/o7WLvBl.png new file mode 100644 index 0000000000000000000000000000000000000000..abd42d8c055cace1302cb42cd9e69e1d39d195fa GIT binary patch literal 3524 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 I&MBb@0Gl8M@Bjb+ literal 0 HcmV?d00001 diff --git a/docs/public/oHYR1yW.png b/docs/public/oHYR1yW.png new file mode 100644 index 0000000000000000000000000000000000000000..77bc73238dc07ffd1051e9cff4fc6e72cf5474ce GIT binary patch literal 18766 zcmeAS@N?(olHy`uVBq!ia0y~yVB%q5U^3ufW?*2r`{3|v1_ow^0G|-o|Ns9VIk@-f zEnmrzklDle)ZkkH+OH}w6nFmb>r&4e}BV6eb=sB`tig2 z2lwv0e)Zzji)SH0-rv7{`|$2 zxO#dx{rUI*>y(_ofBt;={OQ}Y{Bvhc{QLj^|E~vcKYmykW%KUc+uuu?mM)z4V|Ll= zj~`yV`|VzT_RYsXKYsuFwXh~7Ipz1tj{n~;eR_NC(}%|=j~{yf<)3FG@}S_xpuY+2McZb{;x));fBQS7cH1na}_K|M~p-q_&oBi-%dl%BP>7 z9{BX_@139jPcE+C*ODBV()8)g1y8?RU*GVzR~KG;^I=wg^8UvkE9dO!+Kc-yy@upm2|!rgCI76-2BOs@#^oFC`& zq0)C}wnJpkX`jwZ8Rgw89{)~GZF;gMb=TpONxlKu6W99$B`n-@`-?hOp1Jen`Gl+A4_|xv>A|+E%POj> z%N_!#-W z{@T50-L-3P@*U?a-Fo!KwYRg&UG&sv&tG8f-~H+5j|-8SA6w(+PHb5mpgpZNW9QP@ z&mNxr@$KG&D=V~h0^;LiHV0~*-nq1G>asmcJNHK$J^b|h#rGc?z z6)cmzD9REe+ceSDG2nxu(y3L-D^@tVsB}~;T+|T56}Lj8%iW|>?qfu+yNR5B+{Mtz zZ+?e_mY1G4IKb0%=)-?apYpH!SM6H0FW5cUxSsQ{f!O?a71CE$Zhaig-Il1rBfL}j zo&N&AbvtC)INDC^u;2Ul+v^2>Yq#J37d(eid1J?7l`nrjuQoGV|8M8=U8%_r74|+- zJm*yO{jHpfZT!}g`u|@n{!}wNy!xBK%IB-i^56gX_ggl9b!+n%pZxn%-#p;6-*EE( z%;0@z*_%$Xo8{M^f03jeCy~l^k zYy7u5bL78&RcSo)?azDFJ5QbzpS8)c>+Q9nm~IrknN-v9fZwY1-h4{Q6Fn-|$kYkn9~RAlt~Ap45VFJ{lVvt8fn zLCyp(yB`PGN(J);5AU2- z`H?R&&REA(@Vgu+k9e_^UHsm=R;gWwKG(81-w$5O*>!sHec$LMC;ljWy>;&Mit8^t zbG)j=WJ7IE`LEUw(Kz>HzLsuCOkCxv{EMcpa`La6`TaDxMMXEOtHuRuh@`94E;v5v z%h63YTLpf+eU`uf?jK&+x0@awstrl}@bJ*>y_cqGXo>V6Q;@hfYfZooEs?4DzF}`{ z<|qEru>Tr$RP@}kC(ZoEBFhhVt|9G;~cgVt+io&R3@e(jZP(be}Z<*z*S!DW7e zhUTd-8&g}^X^CC;KP>-zd74I>UXX^@H7%pxMP?Dde=k##xaYL@ShVZSuA&mJIR-m2O)iQj%sPeQ=GfGPKV{ObOn zHJ@rOB3gO)f=R%JgYGN7-mfwK*p}q`>B^?A&=*sVIkBHSY4(13T<{uCzki=+SLyJz zmFNBocQt$e>7kvS-JeTBvioi~CRBVr%iS%q{P4Y~p0tK8FPR@2_J>0z{#@uLVJFk( z-j;v@b3d$FQ$BfhehAOsV)ZFc zV*TE8)H+W)YyEzoc1!&ac|ZBC!(YS2yL?6akL|h5san~7eYKfc))r|ys_t3 zpU3)JH}?F$cRPRo_kB@2_Px6MA-n5z_`R1sllEwJ%-7hrYT2)cq#wj}-P5iKPmYwo{yWc$jn{Hj6UwPoZ zw2{Irk%ZcR*U#G@-+#oW=G;dHgBK@r9E90RLIl28GCo|d<;-HA${=C&sjDI2fG0D@ z|Dg2760TRDkDa&s{U$#mV6ALf>c996N^E#K{{1UIYr&!L=WG0?y zH;EU{EWFHz<6U37FN_!X&a)yuWAnU&+> zJv7#>Vk`GA>zZ3uF1e>IHr+j0(RZ%v*_)_`ZvViB0@qxUxt*h99Y2AH2a#t zpQWv~htqx6sTuI>Grn;)am}X>|L)946kO4KU*=ew{-()3@iR}y-KgnoIpXIu*YT^W zp_8Y$f9v}G_``1JWzVnUm{&V5wOj4qCXw5rz3Jf}G%daTS~jlS{$rb*b@Sf6u}X#Z zdQTK2ek_`BRB)~kOKgHc)x3ER=g)f1W5bhkrE=Qd59(%Rvu3}qFnf0MZ+X(bkFlqg z)tPtBwK`pHb6RWv?>e5@KmPJ>cCkI|vipHh*{gr$dGSuhErH7q&A%IKru5G{$9(z$ zfoOqaVfo)>&$rc2KV4)HV{_DB{fMOi^ZlhckM0`2xz%xwvw8F8G6RXNnddj0%Tt#A z+`C)d`qIsE8|zDYb>h|!9$7zpt-81j(1`18l zyx%uod4Jq}V`5o_tUyU$@4XJT){V&pi`NwdH#g4DjIlZD_IP1x>+cWc5oTq%EnGa> zcaG(C&TR``6wGwXSmmP3ii2)GlDB87@n0oUdg`=HWceujV*L_;wTr+&iUSsg-{>cABC0f5(Dru4}i<`Vq}t z)pj=gL{^eXtnY%lzb zil_RI=R7rhClvntzB40V<#PDE^km`wvQ1B2c87A$lQsL@bLi+y9p{B*jBN{qo^IY9 zeM9g=9lL~zr?vXVoQp{bj4Vuz4hjMs$kc_?0R?X#xoz`jueZFoj#*42~HqLhGY?ZnGvCWlpQj5ux1-3l9T=VijeeGGfzI)H^9bXeYZk@Qd&&BNM`I0=I zwjZ%2#Y@W!OiCv^C7qu+VaZX0k~f75RMMpCZnM3gf8?0ohVJ>ba&P0kZ&l9gooU0J zTaa*b=D8S+d-ELh9z6VSb6QQWaGJ-7rwdNq-mLO&-s?9ii}yLnulGLHb8_xW9nV|h zvv;5C>u*mekgxhJBz|1-{UT|D+A}_vj5#C=SKj_;E@o3LWOvl$W17Z?LtO9FcIs9# zUr~C{GG)G=wWxRA?EadMt26UHJ`GM^$kJTqm!$8rL78(Q!@`_{?P?o0cAoZ>efVb1 z&nc=Ow?4mlL5Gpj%H!(_9_Q&8r!D+{>W1jK9d9i*FF14KEa$|RPt*!! zrbIMz1Pd1(JFe$5W3Kfj$;bXm?DKcma^5xc`jGJM*(T=WcRieDgh!c8IeJ-FMeStY zGMNye%@_V(*9{KIj~3av_~iq!b=>NIzuz!4o_kXNOXrLi9G42aoOg29^fX7O?fN*K zKQHp(w)b~GyuI^vf$2rf}}ye&B|niY%d~}=yM`yk|IgDOvBB>`rafCPVa>d} z)6Y0RymH;{V9Qc5`SW*$YkT}XK8cG;xJW*{GTE#x|9KuyugxFLe782`vj!_%CiMJz zCGB~^^3TP>S?-sP25T^w$H(Qo%(E_)D7YD5Bm;FrLcs1^shx`t8kF(Ks&Vk#UbA*> z_5ZgIrkym`vSF3*SRvii9<#upM?Uj-yx*;eTIHNuI~m12`91F)whqXzs|L9wcxJzy z+u`Gd;mwU{S4?=0__#}GSxW4%Y4W-;BmYiE<%Or(Z#p(UW3c{3m8r%$)1|M=<~koKc& z(gd&SzPm=7Iuny*?R{3OM^@Z9Y3@|!>drEM zwcfd#XWJir7u~7Q))?m|e{-v}bz8LOuX7Ta>Yh7y$4%O@@t2T1zyI}PJsl4oa~K?X zziY1EsS|fM|6>0?_5CAF^<9QnIaLgm*Y7^*Yqk2&0wG5pW_ihtR%K_R?v!XAO=bVI zYWw7tkXyz(jGnPypZw>FaJssW!o?P&^kX8{Q*XaJVc=2I|6uPM#wWZ&_SHhtvkke| zZoR>st*oM%nDfTKT2CaDqu!B)S)OyP(sIuxt<~F$l?Ch{-x1$8x4&IU^=)_T!(&GU z6Fj6$GrKgD%gUGkRa#U?%#o-aG!D6VXit8nY@mmdtaTxVZAZym0w#^CdXN-o2S|m+S1P3!kUEnU`<*WhNQ$+CFuGe}XB?c7`@L^YR0`c7Hy2 z!N+aEH(utO=L;3Z^N$DIzTz~`B5sDm_hl>Ii3olxxlk)tQQUsYPV%a(M#*W;ZIeLmbaZ1L57@_y@|J^gQd1>cGYzJ0mix6O;qm7T|AHCEMoA2HK^ z{L^TKrNjmKtmY82tqa&2Q*O6!Fn8S&?6PHf^S{ja2FJ&IB3EPCB)Xg9eVfxV>Ot9N z`L30$`kWuP@h9eYz3^{XWGgF`cwqyxD=*v0qaVIXpWJ@6`4%Hji9LIs-c?^+8NQhh zZ@X3pvq-p9TfMO3|7fr?jqXyxZ*+`CS`=U2a@<{9egnka4eZ z(Wa*?-=()FPGJz-SzWfr_sD{60TUJ`@s;o>T+-D^o%;IW`EdQv^$iYlRDuLLIwl$@ z2&gwOvKTZlun8PsV3KfPVCG0*VB}Fi2xj#goRPKF3DMQq@aTuY3WwUZgX^yyKd%1j zW?|{>hRN=Gul|fMxY>X7H>&pEmx_ZCqEiC7w-D+hMnN|HBPpb6Xjj{a@BJILar^ zkU3?bKF#-w^_DZo(-*bhpO)Y(~`$>p0|~hSn2b{eva&6zMAl1weDJ{xyPUWE)2Aj z;raZC&$#io_w&ymdmP{TeB(>&J(!RYn=Ea!{7c)%jf#It0(je8mn~biUgk0jvvKXg zXBSVTBu1Y2z-BO^;;zG6pJ}l?*(Qe{B;=~BRV-%P72tEz>Y}rW&x41JEJkM@TOY8_;n2{+NYCnIE+*gmC?}c0M zeU6#)lDn;v{axgNtKk>yfZJtKO_D9nkjxzG3 zJQUa}&{l&;M+OW$49qJmC46*tHGK&eQ%k#b_`+R_PrMWUXL78^m94OlG@r@tD}p%{oW=^gFA)s$!3xR}I;D??6GpX`efD-pvbEW|27Z zPiNv|ZzG?M1c9GBTePm{ON9K1R60I=R>Fh7F-}uo^YSDg&yY|H`4hS5f?MJW7KtyJ zOp%g(Y7-o18eYD0$9A!DLGtP!n~xY2)EVr2&CongPxp9Vf8>k_n;T-K6+KV&#Ln1| ze%i-ew0;@~+oO4#lxTZ^xNZ-Qf>*Z?(QI-Wl!LD{j_`rZdqt@@aomASsshuUU9MJ>#qvS`0yY@`v60hyupNRM%KdH z=X_kP%BMTgf7gn|az})%xD@KnUyNb+>G56jgxedII_a%*yjwmmJIC@z>Ur=6pC>`F zEX<}#dDkkZzj9K$;&g)d%b~;xCsTNs6lEt?Pr|9aqWp#2Z~4&j(p-3bCc9kWaCE!{Pt^Mt1LbmgzI(G}BwVS>!H>ala+fuc4C3cz94r(u+_x4*rJLB9W9~KFZ;z0IWKOEi!#eV2m zm3G8nk9Vn}u&DhV3*j3L9~Q|j{``6OfxmWvG0{ei)5Cx1@a3|#y^P-Zbb*>gM|R1w zLWzpwCw&hx{N|6Flw9)6C#Ed-Wlf!-z>Z>PtB)<~n3&}_EF_q|7az9zx~$K-YNL0l zn~hI^vdrxAm3k?Q9!-%AlgwT8OlI-prKyoGzOZ%|N+z30 zte5I^{91V7zvD*p_r7y00^${Rgs5j~|g~H7&oJjBVQjjr%Tse6dgQ z@9n0NEAH~gWX-nM9GQ0^G$DblUh?_pSQ+!;Ilr}yY@|+A2R|2^*KOmn?&3}!v1$&t z8)tWMJ`ajL;c`{e`oIOVtj^>w%cg7+{gYB2BN6ppIJ9v(_i4U0cP8*na#ecoe@ux+T^lSgE|3CRwdj@N>>r;gv>yCU=+wM5^j{FoJ-}u+=|Mz~2vS0gE zYLlA%-(O!R&ydPucD`=^k5Oy?-Ix6JPZA2Y9^p_BJE8wJ@j?8DdhhUtg@+G6IKTh! z&#V~dK9=}wupvGknnj%k>olb757j z;&k7bM>-Q(&d)odrnhl2%XKC8c2L*Xx^kL}ko|9)**oscl<Xp)FDr8PQA%^`S_V9n>xjBvW4Dr`}TUm^JAHw z*5@}HPEP;mx^U{HGJ_k(rn~>Yej?-EGEujWo4=pBtah){eoOeeGy8;NW)_}&F@0h7 zdx_p#Cce9h*YC-AB%8A+MsLx71L|p z9BR3_Q+aN)*P(v76VCZ2DX{MElD}8|I_BLvyq@J~?0?J7r&j+!V>( zmWoDq%l~v}9lp>1EKkq6L5*KUyRhlTyO+}@o-+}hWzEZJSN>b*rBK12GdIq*S{h%t z+u8N_ou$IQJyp9e1iFMv{<~a$#wUGJZj%?TZk}WomJb;kczU+QD>GSQN%8X~ z>&${D;Oo+JPxSwb-DOz#dynr6;Z1Ir&Rj{lK6R0wOS!}( zv$lNo_m@Ha@?KfvOMXIo(q8GvG-WaEJ^0~8cU@v~PV;ikdCYIF_;tv>Y;T?NxV(_l zE9BDivxN%wK0Uv(q~^I5MRp3ySf|N;yzCdeaOY)#lQ%%U@;4cON)O$=_-IG9-^}2> zak*C%40tv?K393WIXY~|+iLR~>v!oH_FnJWR!=c&UO0PVV9m}LJ$KtCky7TMmtX#H zmM_^qCH+sGQhn=}MK-3g7mc)XcZO(9UG^m3na%jUM`uq@&l0z7cS{-->%vP|H0@VC z3yk+w{;FZI)z-Z9+KL#l%(=2=$INPYSI;Xb+yCH}P|z}%!}*)5K^=9wZCOn>{GRG% zzB6%|RPs?I&c$R;Xp~I3zggL==*tElwtd{a?9NJ^v+;&y$9$eIFs}ALI`2{9f~l9> z40>Ltr>OAioZpdH^T4COvs{2@+O)-HzMHp{+?g@!pZ7hE_meJd5WReOn>Yw@)HFM@L*eT+QfDpr zW#D+`XJV4(cRlV?JooiZb#1$TLswavNBH%Xw$3Hp@w)o^Ydi0)$`BAfXrPe#=ZbgK zK?TblPk&$W77zZsNcqDB!4f|SwQD!GKFvysF<-fKaeQUTif(U*xMP0~I=fd~zp~_s z|A%#sIakiy{_?l&OZTaZ7Z;kEnwmDwT-ombWc}B52a6s)dGRPi^X)QQo_F(tm0S!~ z_lywzMC!hN{*BoEJS=u^nt*m^!$zIXJ3FQSmwJ)xk z@O<1I(V}a8Inqe0{8R6QSR0-{d$)@6r0=mb0yv*PVk8sa=*AcR!t%zP0V4!o2l?5+8(g zODE2)>OC{>$g#9DO2REG6A)ySKzWgH?%VQg(z^zvN@;dz7kV zTx?jy{LMJyBYT8%@S6L#)6ais+j6YuwRqLS|5krrAAOu~%!9G5Z~xAxYdGf_D2RD* zzrLcYAmg*gXU~~4I_D0(d(o%0%lek-rHg0I@c6UrO);9u_t`DSw=N~EZ{oTSJ3IOQ z@8q0ZI58|}<_~1!R^sxePn`*_`#Ef&Dwj2ozrD+mp z%8vbX(VcVtN9|7LpIg2>s0~TuKgg%HJU`Z?#e8A7h5Hn_#_9=+y*@atw6}GJ_R|>; zdkYtZiP|~VuKHLr)D=anhPG>aN^39FH@6!9z30D*X^9R z-C_6iRPn=7XALYOq&>5L%zOB#twe1@7>o0%Yn^gG6cTK> zJK@+iQw}zxce58fO}dhl&&6!~yqULKhE}j{07n zAs+^|21Za<5i;a6kDD!W{kxF8DZT0{uT>}UXoblqekfY?$9|QU`g-QxC6BMV=3HMI zXdS@bwy^r?E4vW;_wkmCCzf1!<95Db)m3|mUH?8#USC=JrG06nV$6>R`rl7I4Rrr` z*C*JxeqGq|YuAb0PRi!_<+~>2Y<(8*D9hKTxBu(^o&0%^ z=dXX3s{3@GoY96Q9=ZR$K9~JAdbWB`la&mQpZ~A;xtE{6zPdV4dVSR6BYPhnUbbTI z-r3ukC9G_CuKBZ_J$dT&=3lQ@S4KWw|1Ztg>3Qy~1>ZV%K6}g1#>e0MbF%-ll+>qR zcg~t_nw~jm`_wP&hcl!Hm$*S6xO_kOXYF0Kp z%f5&G-yyaC`R_IV3cuP0>-}(vxVYJ>ncY3}|AjrW2QEBJG}yQO*Kzsq?=y{;^H=Rn zKO^m9zcXCVKgJ{R!Zp4t6V)eF?q3_X_t*1(f9<38R(;Jsd{)}~c)(RY8<7{vJYtH6 zrw8%!Z_Ln<)1jchjrHceLyT>Vb8{ku3~aRcst-P`y|+kBH0E*9 z-_r*9c3Pjpo-{}C9aOl%3hwgf%rJki@!jW6(XsX0O6=JnYT=ccOUALEU!-`LCqJ4;$RP@E0{M~CUjMb`NW(Ql%ms60ih;O~Zt*2bnt<9%0*S^>5IFqUPE@9gZs_!+* zJx(?KN)@)1_&3Lm+h()QtD7Gczcihi<2c9k>t1fV^7-;??A6J9Y%#Obtj(8PW@cdy zKYnHL+#9;<9z5%7Z**@>F1f5-)ofH#~uCfTx;^_1IC5kKe*2xX0R)dKKfW!R!yy{;4n+M zLmTJ9wSjZH?>;hXX>_~F!~E{@NrQuHgU=mFUHntIe%-E178`Sv>JvY_I4buif9jf* z?_)pgT)lMGw+ii94!b@HdxYnSRmk{XC@RaoY22|WtEo|CTLLI<%6~B#X+J!lxutUZ zE1{w=H{Iv@Kd$DjIDOL>7I3k-SC<@*-nGT%h`#Pl=FOF-+bWZ%Z*y<`CbIKrE(de( zDoM6H*&Q8Lr~YnJknPoK|5+^c_RC$1O(jqC3^cz7uKTe)>)IZ$bGAmk`?yV+qvri9 zw&s0xi@0juGw~dHocCcbH*|0jT#3C%J(R$3DR^RvGrIJxNXEHz>)I zP|DWe=~HBIR&Qtg&iQ!PV(|vXgbiCH#5*$?BpBGb3)9cfb2VY$VQ5||;vFvWY+j5| zO!d4};prCMDhD^KZ|wAbqvGW8=gsGwM@8xPckh0?V43x$IgOL~3|QvI6=)Ui-2ME@ zp*h+QU#mLKH01sper#QVm=n04$Q}RQ`d7%Si}x3<`zqe{!}jOKrMus%yqm}TMumO* znG$L1v?X&@D$ZVsTr^?kIiWwVr^l-wy|R3_W9e&6p2bD^kFOo|eQ%w-#?pr#>3idkB{{l8(d$SZZSnZxc<(}=EOf9)}|5x9`DSu zvtQq%4`@2NDD_^E6X?lzB^L8OQAV#5c>hz<0fs&jf)xnjSUb&)WVo z6u0p)H8(aczH;&CnIne|IBdUq6KXs>-#lxX^N8dA?wf)Emt|SoJiJ$` zHZ7d)x@7gb^O6~tA1_UPrDPrG@#l?aPR=o%6;JtC4qId^vox;>|GrLr!qXF8 zuH7ETzY2__0M^J8}Ch>Ge>6iowM7Yp1Sko$&5={?_L}_ zl)R{U=}DK{SMpaZ;*^k!o5^Fa#g=DU-!2|ul~vB3MW0yM+j~#mmbq~9u`2)jQ1SlV zv%gkYemC>e+wt|~-%DEmGCmnrC0tcazhiO!xP6aw_)>131>!8tjg5`h3@j4no}0Dl z^|!+I%aOsWWn|>^_QrnwaPO@ad%Lmu_0qzEfW71823?)@zaOZ1-0$(I#WRH&F+ z)_gR4$Z+t%hYe=tKR-U|l00cX`EY+(;fqcG(~63Y6|%b=KfEXSq=mqhSBnfhRD{+h zzG&L|@#CktX18})tgWnB>pk7rT-`!Z;=;u#_hNUIIQ9rwSE;ZlTF$MmS=)Vi=aWmD z!zZa*Tx{-=ytwz{$>ldijaRMTZ}{)yB)wR@`2Lv6VwPQHYm$z=-OOL0uwv`gMTv(v zUp~C_VpY5M@-WM{dv%ji7zt68MN@UtP<*Vf;8HtOxH9vn`)Z0IOfq8!E-OFoUW&2G(-n+VbOKO&A z)5DKK?@pZTl(U$~;$on)oL$s-(OFiBGl9FK-|v|jC~nDoIKhwkVeg$X+h)DPE}+Gi z_NTh~dU|@ktl4+*cgeLYOSiAC`tEkv<-M`_^00-kyG;AVBfoDuSF@)@=AuH}v*&X0 z&dg1f@7w2HHGjdFl~Z$Rclptt7pv|q-@I%_x?S9*=#AWm16-M_o1>z2rPS7}T^p#q zczW;2+iT8Vl)8NDR#f5pGEu9U34QBqPF2Me{O#55pZ;KRbpD;WF|PaHqADl zb-B4~>D8NEpPpRW%-iu5?r9U@N{d>-q)J&zHaZtEz84m3=4BCv$2+LS9~8#k-HD#l=TY%|2Nwr{yXu0 zZ(YAU@CBoXeFDcS(Atp0290{DZTaGR1rFCfd<}BMC4LE&vugCw z)U%!tzISf*!nS|fhp%7O5d6X*kFfb!1iC~Fc3_NpX*}}P+Ee~9{nP_0}G?9Z*!m9TCgZ!?<7qUsb z1|?+@I?g;!aU0Fdc@4L)NLbnOOcPW5_ix>|y*jtqc@D<=ZMl3_r-DCcU9PFbid$lB z3%VZX_0A94sUN%C_j1>n6ZbE=e&Us8tY@umH27fsp!xcpeJ!_>yJUYUN=NQco7t$( z>DywHVqUdMvh7E#PS_ih*n|RkJDy!#;_S?K8Rhr1xmHJ+9GI}h(5$TWcJU#BFBh(E zwXwOq^-Xzf0>fSpiI%tT4rT|b_jX)hX?}l+^SOZfj*G|pX1;u8Jumg<%yWOXRc#IC ztZ#^lypgRxQ6)7jUTEE_84o9OYu~Zef3m65dyXn}fI88tDf|3p3xOrVJZ<;i-q`rq z+F3S1pzHwq`cAvesk1k;N$4%hJ6^5qYS6R7=+E4DT|w4M*;h<$-TO_3XV%#!qhxb+ zmu0)F{nnn|*|f=5lV|2!>&ub{8_YgVc9`I2+x)QnzOtB3>3!MWgpL~$|9qV#9$n|z z(0$)j)rse@$HzL)t-)1bSDrt(;3m)fg2P7+>KfnuA+2Q4!Q^PgBiuHFb#CI08M|b! z*4F%dyNb;~=Fcl>Pa&(Y=EiqR!mLHN-PVsySAVnhdBTO9Hh&9=n)IF$KC8{&L*8f# z@@NRmie#6_dNJi-;PthiejmE73`$wk_2wpt@8|B7^^`W`aa2u_G`O@=)qtb=?bi0h zKOVcAqrsz?hcBE^5nUq5R-et)+`6|f`e~(v%HpD%nq`htGn`9oBC~&;i|F3xwC2w@ zopS#c?k2|b|63ECzJ@IQFaGUTwyn>CGI!a)3ziKFj~Ylw?f4+uym4w?^wW!c6->?n zoYt(p7dnqlTpVfC6my{Y=+X7dR8x=X`P|r?x-9y`&R37-+$~{SQRc<}sQj*<_}i`d zIZT~rn!J+C)t|gs_SOzE{>R|lotW?^mXlX+*|(m)=%@Nq;*<e zj7a11!XLt>KZ3Wt+qyF+=TVWlr!yvqqw-Y_-cV*B(yc?)UEI{-pz>d183E54;Cty=pMKen!UBd==-TB0UK4%dgxX?XngEE z>*Ugdwu`oyx+r>@ZphPVf99IJYUv%1e~%^=20oXojE%F}|M$R!ul@6D&c0r3uX9!@ zI%$Uc_v#bfX6N&bCD{1m->l{3xqMiy;x!kuSG2Rpq!8xU$BHuIOqNBR>V2ZGC)p`D zV`kKwsAqTU5(<9gDx^Mq^;Vas%-HtBygC|0sh-gooZ zkrI<1A0IZir-?j^@wDwZy=U_a1Ls@wEn{E&dcBNO?stHP=dqf9bJ`s({P*M)xY%7} z4!`;Diu|8&rD-!>CQd%>)ORuF1*4&NbcR6XoO_Eca;vOAn=O1B?3@wAyT;Q%&v@Gs zg9R!|?!~T$*|l0tE&P&KE$#UvzG>;kqeq`6uMp{5(p6{A>m41@@g~lI=NkG*&spDs zvOKL-_k9)8{hs7YPnu+ZaP~*-^E2v|>Sy1ytIXOJUs<9d=f9&MtMgQi()=x2=Dm9J zg{qY5n~vWx5NbN7$+M_<4qxZKTn?|B&F}p)^}aC7d?@U;!@V%dMfd}+pDX$t|B4OTlBwMzU8{Mcom*!{&q7bPn~-G zc~;!Dp1FVL&-l#7=>Pt-`sClU<;)Hyi%5x_F_>8>*5*#xY@sVuYNzXNchD2ZeFGJOLUjB9@#ucIrDa#0b}JS!F!rNi;P}fD#((Yu>6j#ih*%2 z&#V_~AIuV$J;joCD)8=y=O<($xt>e5T4u~@Wn%WeWG4PBhW{vYPEz5yyjk3~2hx6D z7885+CaiM(=gi9ogpYEvw>{pe2gfN89Th+X<)L*IY-Y(-@DdC7t?o+zDffid$tT&7M zFY)laAmklqqBAA&+0%Xw(Q^|mH@!JG_cE(QU!Qp7lZ$sc*M8cPc+aH#AH!_c2U}+_ ztkK9_c=r3LouRN&<-@e*{+vn6U3JC7c7Ji$x`C&6-wWW<#MSUhaP3Tk8PET2 ztNQwC{_pSqGrqpMx}VoPe`yXof9}`Pi`~;cxP06>kC(UZqW`pc%xv8g9(u2AYmeCC zHm^}pQG4o3o&y&yCM4**abEEzx|KEUoz~7z2FwN}HWChV-BDH`MlrKhdxIt>s?Qo& zlr)0oDmGo^Xr8GU;`@B^l^|sv&g|J@qN7h=TKN66rp$8N>VM1M zmS*%{GpJCFS+B3LVt?E+UhcMK>%T7kA6LCLKKrHV6p5cNudknfh^^f#X0apcQIykF z)jw7L>i_Oor7rsIR`#@YJjpL!bVPA)pQ-%ss+E$!2ZIPJseL_%3V(ggl3sk^;)m5? z1{JaT8k@JSwJh_=%8m{TxUR$V&*o{($tcgiEmuBRpPZlQle<&xuaOC`2X|LFoT$SGnZF|u`5Hg)>nI0Up4n`W(;3qCbG_) znUC#KQQwmM3|)zW?+407lqBL39$L&jVo>wZRo>-@cR<~MoiYd4A{=6j-xdyWzPkMK4z5FWulX6M7;4}$Chc` z-QKH(A2`)r=$=@pE!L;~aM6B~a0|J%)y?z#f4|R4{BklhH$kK3*^3uHd?Me!coDHI zB(A)qBqvX(^PbI|o~W?U{XDVN%XgX!@;7s5TF7P=6k07)72r**ICp5G(7LQuEm;ON zpE}KQ?FvGt9GmPPraAi}~pt&tE%ZYRMl?Q?zEY8NQ(sQPV#fw*de=#?$s}E##)FFcc z-@v#3{{G&d`=v_z&;pakAV^i!6px#XS972_o$ z(`0X%eC{(b&P{Ym`K9lCo$XxUGU-fa<}AZwK974@-f6D;QSx12zwJ%A#_9QYH`G^Y z+kSZY_2=^ZrN)f>o2so_jd+AVe7XFZbK$I{*$+!D_J1=t!z=wUzUYYPi|Gp`TP+s{ zUzaXaot(BzZ1*~!*!99Z%(KPVo&SdhGXGw$wQ8;GtTLhbHCr-||NFaD;|&L2c2v~C zfP~bhtKKWuD7&YgaQH`&$&IDHN7OI<_@w!N?mTnX@2HcViL#BobeInxi>w3sj>u{{SDg|$Ng;f8gA_wGajt@ z!)LQ2wA_c8=ZlAE+cK_l0mif3q8wifFA4v=y(H#j(5LO5OD}&;XIrE>r<8$#^$zG< zfHhIo%Xc1HdHBNo-+{sPHt8PLH|s;M_`gVh;QsTzqD0-VoyWh+sHphZ%GJJIZ_4wP zbMJ<@K&^O1_tNvT+7e^zm6d~D0-4O&)wu<@y+c@MwLOT&+Sr)Q?xUaE5WUw&m- z=8Hr6&QCKh&#G%lNx70QbGXH$Qpkk!pumqWzc$+5l+&Dl&*{`R1M9z;g)3%89%#|d7AB1MVHwm|3Z2RZi zbw;x8QR0jLg%Kh3B_BQpRNk35{}*>+FXz(rvOJ~dIhe#kL&ct~uv-`@vEuQzi3eV;I()(9VbCY{ipR|R92lM5D=g0O z&JH*{HRsB*+-1v_Ej!M(KI-+wn1>Y-zf8Cf`@eXaeC1!v;mOVa?AK4~KJ?4H_3#0^ zTL%&X6LK0$|3>EjnHBKhDi6=yCDZO$t#>;tvtRAQr`nxDzRv`COidY`ji0^uwv7>v zkdp;9=gWP4&pueF?AM-pCf{P|Ku+BOAZ$!&qb6oF?}0 zO~OC3FM6MS5c*{6%0s3N50iU&e{Qtmkq?yk^?kjMwbS8QDqhwSGj>(2UKhK&Z11{| zYYVU6V?A5KbLM8=w2Z*8#YXQ|t$Oriks{CI@OgnR?BDIHS;StYyz`lBJKH<|=!hAc zr9&U?`EzpCvr-M$J?}QZDHA)~F#EK(n(;)_3HRqc3Yf{m%M{l*J^!j?`;=C`x(RPh zzdLT5et+I;bEj2%QZ_Z5klvdjm8xVsx$@z@M!|y@d>;C>h}y0;t|<5-7_JZ^lvZ_v zC4XH?qiW`C?&5XrY)>@H`7@Ul%nAGUFz`pj=4&E&-!{?L%y$86WrPr=qT*|gTIW=z6vM1)x zZFkz_Iv1`u^Zr8I&OI3sD|8aR#Z}%)3TfRmH?!NsO`UmX_hMc4W*@cBlPWVO-Jka; zE-o&PgF$~k^Za|eLTlc9`ua0YZF>IFYTKHE*J0bjgN+WpJe3l+%D^OeN4xs>Q%^g& z`wLkQsX7`IsD3`Czw~oz`nNug++_ty5_Wk`@|*@WEp-8hA2-kc{PffI_w_!9XL-3~ zOH|pe*5CXnB&^`BH@8IA1&cndD@RuIsu)k6`O)A(*heEp%b8oIX$WwzmrBHiJYJbSHrhR#@WS3BT0)|G*RLktQ%&iuYEe1W)rVKK z8BU(qF1$7_e6NT0$uluM_Y@2+O#7IXE3m`PN$s5^s6EoFW>9mbOv#|cSfWA_oUH- z#b$>Z=Ue|NS>l^e&|6|+Ycb^Jo~%*2m@KJ( zT|jtcMR~P$nydMl*)2QvO*vHfs&3P_<^H##?61ztS?wRPbKc)AYfGnPF9?tMdpl~~ z`aNq7eXKn^@nY^;W&ekprz!k+po_OL%>td%&3gW;{$u^_(&C;O?->{v7(8A5T-G@y GGywoLpBIz> literal 0 HcmV?d00001 diff --git a/docs/public/oITudbX.jpg b/docs/public/oITudbX.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7edcb5781a4e595e0c55bbe724b98b73f5ea1734 GIT binary patch literal 444216 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

    8FWfX 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

    hC)9GK2pNn?LM*&(OtX+aovG z-KFU-Kf{4zwQ)y#HpPGP?<~7_U}|D@kKeg9_tw@nzABKHcyFT~XT|qMZ^D^Z0sCJG z9ju=4r_p{-|J9Yfi>1XqKUK>aNG8v&e)1yr-_7bhHzx1#zIeJ@@Cj4+PyTN;KQ3%H z+)(mR;%QZ^?)~X2bNCMKbF(;^t0TY8Ql9h9w%pc@e+qsd;4ItS_iMs8m+}e!lqVeB z_GdwZZq4+B@``)z(X7_fx|AM!m+xRYFzY?vhhz)O=UW~NZTsfYzvy;FN4aH(wnUHd zp*gozgzEL~`jqrvVc#jzH%Wd22T#g}tyL5I-?5b(s`B5dclozM>g?UF6YmJFiw$n^ zFIYc8_wvdwipS#ae^vM-xmhmtSHmmWS1+xm{ZxoOAO6?B&QZeU-JzFuM;Kpc>=v8g zq&PPy(6erF-n~OME%Q!QTQy2A+~(a^blxCmrrDVveaoMGc-<`Da-(ocs=VYeiN4c4 zHflGgJr=5oZ9Z_k{o<#c3Wj3e>la0M6kI$1hPTaj(1TVSnJ@ z75C$>GUEQk4y<`+!((~`}l9^}HOz1;Bb z%sW5k^0Fu0+~*E)&E&ty zc=7HpPWcUWn}2v$Zus&b`BTA*zTXMuDkUd##D2fA-sRb{Tx|6lZgw-Z@0K~+cV4;i z&urSSUWtzlQ%**2-sY6!dgIKy{|pn42W~t5*h)R}wB;s&4Eb#@e%o%od3B|&c{@Mv z>$Y0grR@i=&gM0%e{UDL*Q1q@T;V12#W&OpS1rMD|5s8vt>StZ!_ z;6}@m&lSpFGbFSOa&P`kw{nrV>-{}*zfR!W$?iLDUS|Ksas8&4+{tByMuv40ir1*i zMSU%LJ|Q{or=_n02?~%^MN!o9>bGx#d)BCzR$cZA{hM zIK@Zb?L*z|FRrp1ufHifCtG*IwyPl1;;!BTLt(S(*4_!bt;<*(<<>39eOfB=`1CR3 ztJ`iL&Wk*7b+a8C!|A&B#p(PCw_5K`pOdm{^6k|}#CIOL*sk8WwWM&{huI0K_f9WL z-zK~9uui1Fe+JdR+pIUwSDbO;RHS$ArjySrJ}O<_mtI|WnxQ~U_a5`kf0j$v6zCV^ zINm>ST4#6v9G@QDc@KO8uP8LUd;98(qJY4O-)B`MH}}ir%#BW6vR?e<{^uparnhwe z=&%bs`8i>EnT`41&29OGlUML7wR6TaJYl^kzUj>2(;@2%Wb!6NUg^waX`Pb8n3&yE z{$#(R1bgm*UkN5yN~5glYdaD5pnXE@1(N3 z6*=22WX%r6?AELBV~7*Fs;do|ZY^6<<<4-)_BXJL84| zNwJAXrwQEq!TE5)@h4^mdHSb}l7*j6^DB@rer(3~mAO9uYb$>;=XOr9Km3!Qe|l-c z&$w}(^Uu?2cQ;Okj1rfX&M;+Za<3|D^= zr_sDRxk&hu)tkl}r{vsM{q0_$lAgT!(8ChjTYQg{?cx_XYd_BZUA5>y_ovHm*4`5| zn3=^XyiU6Q_HVz6`N#a`I!W8cT5WyKzHwvo%~x@LX4eemTjsC4dav}!_WcdVAD=V0 zIU)VfpIzUoEKba?l-u6-=845Iy}v!Yy6yT(kDTO+Ckt@cWGGuJ_+it%`Y8){?P~Axd!wkYF!$lz2SUAx zzpcA}O)ok3YR^R3C^Nomju-U>-u7%w?dcYf+ThEtcj8R_*}MFAbf#8K*cwv0NqNiV z9Ch*diTP6h-1bhK?z(pQ+ioV+lk(+p%b(QiUF_DWD`@+hcE9D`1j%&$Nv(A?**4YF z=Eg0aK5;eUx!`@=Eiuj$YS=cnTTfrxZ@Q&s?i+#A50314Ze8cGB=A2&-RV012{(EF zr0oefXWHbv{cU53>fd+&cADKfC2uVd7oD%V?bh7iEPv;pZW8lrVn1>7?)69NEnNQJ z*yn_WZK|ETL%iO1^D!s&&7B)>XS{4vmAn4Y{e9K4xbFND@{>2bUBi_4Rq~VBtG{Au z6YuU=p0i8BAXozC90R zZJjeu^!<>jV30F9C!E7$X3-~Z!RMcNrTohKNa;6rNoT)5d|cOJcs{Y_>9klm$&;TZ zpH9g#yme;NY3{_%gGonzs_o7(J3EoXu86xRx~}Z>ze(peZ~e~@U{D+Rmi^O)7YHHxI85Uh?umFQ;Ciww;`1NF z)XfJ!KTGmH@^VX^(TPLHcVCMBeOf0nmHmC*zw;F_^!o0+xe%({xx;6Zh4qj`svS{hnDJ{q1Su*zu4{i+xpNj?R>zepE~-7Za&{U z$F?TrKf}iN47nSWJdFa+>xRF$DeIND*j`0GXJ2fzQQnh>cTT}`Wq zvp=uQUh+9z{QqP^7R#1JYYMX`m=ZA@@9pwkD%4C{%Ngk-$UVk(^KRV6*@V9do zUg!4yXE3Vs-}oWz=6v?p&DGD#ZXC1!AotN8C`z^<7<;N;* zcE4SFd-aF>2V4H^pPj5)F26AI4*RD2!nF}q?vExED_XlRlz4h`+pBsbd5`r=DirU{ zK4@tFjWJWP<4+gfeNwTR{*#qSc3Z)| zYr_klR*Sn`-to@w zQA9M;J%w^xOC>R#(-HHy>*hp=f7@;~k754id*+ks_@|x--S+tIn))!k%hQ&&yqrg=*3n38}G~h^Eq_&>TZcio{q8>LMPa)SFdp_Ro?kebwZc{lu$au?xnBjJtIn>-4YraevB+ z-*wyUoFY=!xyx{iduHExdh+%0PgAY8?U9qtIg+~i+pZ3)9{*@H!8iL;9^ZZV=<|ZT z=f3VK_?qN&d+*^%Z{F`nvK8igY-8N~JmKGsbNl@J?=N^IcxFVm!Zs#wFJ>YsIME9}^;TWUAXt&vaq_T=}S z?USV0Yv$gR$>(REV^iKz+%WT1Oyec>(~EVjw?!YHS>jXHFy~L7zlEiYvVzagbA0=Z zP8ij3{%25rWAh{L=*|z{-bm-Pa|9f=>;LZfy5v*nCwb}r43n?3Sj8{t51v@QMcMn~ z*4Ww!+0#<~-rzPWE&U{NTF1gx*F55S(Z3zORa^euvTeSwOX}bwVLfw&H3bJB&R3oH zL0C=s{<7Q0q}dOCpI!3PvXZB9>Vp~I-Zs5`@WAZ+%D?l(+ryt&8}E2vuV!)hVUZ*I zw7>4v8#n%ExK>nid__u1irDo342pNR+5a$p_`}|(y~uvr_Bid|7D7zsr$yI?JGj{% zu)QJYP_yf6X{kZ`wEH*nKHNX~p~HQfW_bde_m7*qx8C`l zBIX}-KX-fkY2ALi&h1a8KR@U0cQ1Q)dQRtTCyC4y88P+>pDU|13a4L^Sh_js{7icVWsmnNllj z)<%{nS)slCzcVidbI-k*tXJgyI_2FttH&1SpC3N9@7uR?WlHyqr=PCyontj6rztsxz=QwgLxn1?-cD`M7>ec;~ALl>a)4nG~enYx= z?Gov-4=L_3`NwMVuiehw^y%QHb4#XAckTY_Rd?i9o7<7NfV=-0bU5^sw%(i`CYBL& zTJhbT)j93c;%<1>&G7d0Uh{DFX?97*?UfbW)#=g)56{^b_3!Y0Upwxcs7TwWsG<+w z)1@MvGMwea6`Q}=Zur(-qkD70F5^a(d9%0qJu#ThWV~(r{tpRx_Yb*lulRJi`DyPQ zVfjb(4}`is%3>@w&&<6YB2dvDR{Ng+XX~_xb2~&m&*WD)7jO#XI3~Gp$QY;DA8jbl zJib`-cgfs>)9M9`cjQkPILf+yvpoAw{tfH?{txo|b!W4m%bjocNhqJ^>Cdwd%9{5# zf4cK1=i%PMDbmI|H`0~m;-1b|KlaAk^SN0ePq#(=h5rl(cAcpE^WLJm!uBJN@*mHi z$q)Ks4&Mps+&Q zzUQuaXIlEx;v931&g1<(n@+1Y-uU;#Dte!ovE#d|cUnK){GC|3>%jauX%p(x9U62i z{8z*+eO-~e>2~hzGOyF?%)Xtgnp>T${P48;$pZ5$%`9J!#YN};dM#IUJNwJmW<{Z* zirO~i<+-Z2_t<&I8KqvkeMtYI!0VoE_v+0~yo%i%J6TQTv1Micxj(6Mp3Z+hE%KbZ zKl^jdujSs+(c0>{Q}?9vY@XA%cKe(MkHd}^c^(j$B6)EFb3|m-l;zbn4KovNO1Yg6 zyEmzG+PPG1TwcWt&#cdoS6FB3jty?N59du!`X3H0-9PC3E5BxSZ* zedoV));T#Ty0?o|kOvab#!lS3l<;uYWo1kGw;Zm5SW~3$=2UEgMgq zp4_}TBKTa~!yj9x2i@M!Q!{hE`iY-@OWwV>eXM@vzx=~T6ZOuquT(kbugKVQUe5Tq zO&|Y+-qmmJ&wpSufAfC^#e?sUzh|FNbv*mab2*pdIrCX=8^8P^o_H?)8hh*J-c9CT zj(^x5Z7Kbvljr-qxy5^oRd(OrE%7ONZf-?_adC6sb&slP_nSYRsZB0VF8|Na@KfMs zieJ9!-R1m#dXpb^Pgv`{uBAY1?FsfE?J~<_$N2XDQL_E<_i6Im{S)tQW>!2Y&(FRm zS;ppZGUt!F)MMWF*4Ul@vp4r*#%-fd@1&WouM4WmKPR{L`L}x!zfvdPm#oa^yFN!f zCg+*#rqgjoCm+Xo*MG2$x@kV`*4uST$8{gFKDxcE;9;>2XPIvMia+k=FQ&&nc<}AC zu1EcTspG}}85--%EKlpSNPZ~qFgp48(yg1vl}=meY&!Y9KVEnJ=?@qa+i6StkLjGc zuTHD)$h7#8+C0s4n%VinJ8zG>9B0%IFi$%<&7FNe$3BNSPoMlvo&RXg(~18YoY*`i zD-N&NJn4SV&zSa{%@04_Gqc`w&gjg$!wK7TR4tQrniY+lCmJ3P4?ZUDz4eV)WcsoC z$%oDzuRHj0_F+4T$EUqL>Oa{<+Io4s?YP-#=C^ihn_hoIPDkuynX&@;YZCj}_cKp= zuRi%p{p&pA_@%d`4NiN!I^Wz=abbI1aKibyr`=auGTSwDUP)Kn{Ur149+}O5_?I_7 zEV|o2ed6Pyd;XtNC#3%qfB5i`>eAcWpZrwa_I=yl$PdzGV(fDaE7PJ**KzjOeQtm9 zpW%+ZX61!*d=d|y%x0^fl_U92w`POQj9g=-KmQqIHY+!kYV7%Wc9Q)0o|{U(4}>B= ze>@hMI-&gI?6msVzPlt3U)Sq4ema@w&5W}*_uMfSGdjL9TV~$PO)1qU9-Hz1eNtl= zr`MCMS+{*dy2@Ya{XaOL3yItDzqwmfzlit#Ny8r}O3mM&{uG&X`r{+{=wsg{wfFzD z{(ai|=6{AcZVKsA&FRZz%C00uEU!q@346O+rkp)*xx%~C_xy9V|7TE4o&R*(?KG zugT?+e>R=4-gL8E-hJDLN}K1u=U06AeeQPdUcajrY=$4__tl{D0UlzSrL)7MWtuw#}gbgZ<(9j~nm!Sp3=O@zJZ<|#Z+5b`h zGjFZHn?9RwXKcMcKP@_S_3^ia+ZHze8F+46R@mS9ZTs}W&l!mazxbbgenIkI%3pEs z`k;9(hx3^eEb~tk?svbKvS!=OK6$+d^ZyBW+9x))%Dr3iO!{A#w!*JO^P7or?z$WM z?GJo^u;D+$fm$({zxZKM{z+KZ{=|O<^PcFuhkfSV9+4?J;@*j;)9)|4 zougA%b}r)me+D;y$<)c8cjleHeMjQn`g5m)*X=lSN$p+;Z@ia**JU{r(@7Hs?^0w*g_x`GrusFF*{yziD za|`u}pH_Wb^R(eOzs|!ShwpB_F^^-%r|M(#-6wyk-}$Y+&3(W7#eB=WxZ{?#-m3o@ zj&D1>Ute`Y?o4}ib^U{t`Z_m^|1(6|v!DKCVQJh@95!>#-XDQIyZ`>U`TcQD-wq4g z-}YbU*v$LS(DVYi@yh;()4h*;`qMJ=Q{7>;O8YX(=2wMX|2O+H-N#jG=ks5j-}uG7Sp|qSNR3jfr*AcecB=HtCY7(<1-v{1<)VyfRPm zM#FR4-Z;34O*(zxx%I!t&z0xvHm96laC64H(>j~mJU>sq%=dZ!Z$Eka^L6re)@%%~ zpY%VOC;z=}-g|*qZqvT?fhY3$rT;VZ*Y)4DN!^}(I`_fzigWzE4<6?}uD`vcI`Pws z&AmTPysErcpdQRR`91sg7<(zPvrm+6MAW~p`E}YdXVW?PniuCcWLsowKiPHd{My)Q zPhQ<{GtN2ZbkF}!ySilRq|$S7-p6j-Q=i+v>HgX${oiG5+tqJ>+?o4Ers~1dAG!VD zU_YS#>zdF{|BN$8h9B^{4tL_6Hx%cT%78pW%ZK-|ac(Jr8Hf zeMo1y{h>~B$;@*fl+xQ>B>yu!nEdbjo(F=ZHTw!DPP_lZ@k6Ek&;HNSsdIkJ|E&IJ z-p+H3^B+}Our@av>n*p)eQY7O!+Py*FFx+v>pVp#Ui@eH(Es^n?zY+o+1z$_<~K;^ zosws_yK(SJVrJ*6Km1k^yn5&TVY@YJ-_Ciix#8&? zvsJvWZs+YU447xAMR(qXWqDX zbKm^voa4XVvmZOmyY0{0jl6Hf3S9R;s_C&l{G{|B_q4b3S>NyGUO#PZ?vtX}-t7-% zHt$xK^DR@o;ZTr%qyDRX`tN@}f5aF4XK0wmxtwy&Z(_oM zJ;e|A>l`cjVON~+e){txI}R_Y-}o>6_0c&|5?pnIFoBnOdd9u!PB|#Ef0R&cKl-M{%U!ZZQC}y`Oh$;jPuo%ZNKfrRd2kiIOn~i z{`2$S^3r<8fA=mdm0`Q9ETqP>x%Wx+ulpY@PN&~1J3n`O&wmDPG_3%{^vw>so$24wx@Hf&mBu)PMzld&*!oId7ZwZ)AmyZFz! z+y66|FDi*mfBVRG%lyUXKifP6RX;NS8FU{@OWe-g<1YPAwy*fbrcae8^pzj>nf$VT zkd!WcST?%)q&@q@{|qx8SDx0{{=WWmPI-!NoW$nGxsU74+n@QA`=7z~KLhW>?SGtC ztFNwzb^3hie(z)Z6AyEDKdtV2^CKed{6d!J)6(ymKYiV}cXONE;y>GN=WPGOU2!{i z``_>X8Q9#z{-n-Hm(Kr@|0}1`CjH#aboC!^jvtFWw|H^;X^ZMj9_<$Qitf+-Wwm$H zX`RQGr*$@+v^(CPnSOtph5CfjwED?!3e42+f3?5c|404jzxpS9%j_b)PjCKnzNv2h zrdO?x0^dw?)^BsMCbgUy*t$0|22bJhX?*MOqNgIGsF6y{}1;4 z>ObeRv#ZP5fi}!>Jiquu*#7Kx-6voEGkiSxp8-@b9`LDuX#1Zb`LO(x`kkK&{-_tE zU$Fn#f7mAV{}BciL9}zj8PU!SpSTcwa5xj_;PA#PSqJa8+>@NM-~Y7n$;m03r}=KS z+{aVh+*82(rsaekS8@73#t-$2&CXAr-d0&*ss874&iM&Om3JP_{NVqO&Hm_rhC}Wb z@A)LpXFlInxHCKZ^!NGv9Fd27>?a@dO!J>!<6ohzt?^K}GH33`)I^<`2alKC`jfly zeA%b^8P9b#&zY1j8}V_^99!pVd!Cxf=Z^Ee$=U5V`T2i_hL7_jzs?af?|!_@TTXb- zKTBqXbJbI~KYabVva-&|@5!FlIjf`dCKS||_-kHgn|VdrHtu9rMAS|H?4?h)MV@}T zt*CI${3n*@_spDUbXwunJ=Sf1Qs+mXJAU$b|6j@Pb93K5-FEn2<-w!p)i=wZ)S6ajz$b%TAr_+hT8S7)Ad) z`F8V7*~hCb{nq?AS9IbBZ?na1ou<e#s0pLk&)G!(Q{0yR zg<+7n75dlMjEozvsz^ zpT~scS$5hKd2Xsul@K=bGdSsIvn=_rOuG8PuaD2aRzFTW z-2A6z`yZ$JJKyRrJdfOVX4~KS9~ie6)$9M7ah^YJae3Wx;bVUs*Wb1N$hZ9Uz5fgr zn>(EKW%_m`pJ=y|&9RZ2yz+`nMP&NLe+uXLC--dP_{nhcTb+Mp?a!NMZ^`~=@cB{K zKWE;}P3b4jJW*fA-PRZi|nJL9)czIXPO z)t21+YjScnHt|ogKcU|9Q(#S9g$|Vew93rZ;s)K zu+T-q`9Jwn`rm!NVt-FPzIXYP^|^IN#hmBv-TzRzY)%c2;-u?p=?C(8PVe)p-gH{0 zKj$a!rjr&nIcIkNh<$t_{iR9~5APq{grsB(`y*M>x!Zd?xA#7n#``dLd++wSkJm{) zt}DC0P-o`3{|s%;>ulBUzVClK&AqFAosrWyBcGWMXXjT)KVX!N`(5$6HRlQ2nTKW` z{5QpPihPeSCTa3UPI!Fz@TMd0KTmL$pEl|AFSkgm2jzx)i~G1#wp(nnJ@NYCD}~#c znYr7J?=iD}qVv#9@^nSQyBk+-?vZ$>9lX-}jRpVhe;=b2#hs+isRsJ-1+Ui7no??v1n{&tr>^28XOSAGb)4krOdylAJp&Wsa@I&ttc|TzBSf zJLLVRciTOND38v09FL-NALr^S%q$YP{qM7D%JtmNdvA=yY&a^V;^Yn>#`y~(BN9X_87q{+u96xi@`=<7Fxo65B-AS*BtE_VV zdF;d4U8+A%et+;`c3M&VMq9B@e;@pm5tMlzBe(E6bHj=E6V7ai>=8EEZn?4Qp%kDb4!U4LUn2JBBB_<<-8Pe$TJJ?Q7NM z=E?sw+HSTVobkE6=eBX{v^O*Men>z0B=J@B;rBYXjlNH`mlSw%w&L2=?@y{;Nmm?t zxuJ1urONHNMGud!RAt>=d{nE+csIAtq#hv-!mQo*RkPdkelEK7Xa)P_dwcf4=-k(+z>?lgbd55IXnZn!;h zbw!Tn_LT+h0rO_Bu(UBMiYU7K&@=Cxl())ITaiNwto)q?u}cvm1-H@?Rj+~Wu9(bzuOpV7CK@AuraIK9$-;-6i2-%b8IW!vW-^Q6-{n=NGK)P3CEo>Or?`HkRcEuO zuLK(I}exH$v?o;?D{Ixuz%wGl!((ZT{qHh>#g@&ay$5VTi%5w z0nYb>wBr)xB`XczOUr)vd0OV^!B4gG>hy1aZu?X5c*mzZGyXF?VLokke)2sx>%GU- zthWBle(?U2`S)q}CYG<67eDFg#-l}df7pCDJIz1F{=xf0yqnj>$;s_)C^de&I5qol z-SOOtGwPZ84fEIOR7A~^y8fOwYIkj)x7r=1d#ZoeZI&$%(@0No+~e`^TT;RXwdOKO zTQffY*7p}@e4l)Bo=@TTQy+h)%Lm%U&v&~qv(~)rY?S(I4lxDaGjgv9s%?d2jE0o|;;5(*8t6RfnN@=|Q9C zD`)3ExozD2p8fRc)N6^Gq9@;(%vV&kea^fhZ#%i2XOEd(n-}$Vdx1{((Y@_55q@j9 zSAJ)^u`%<=Yy)@QnYSz0ZcWX9#QJuh?J@8CdrT*8f2;Ufa(j=>*#^rbU;8&oZiRQs zye*lw+1YOH-TK_T=Sjud_A+njEs3(uS2sQ8u%A{i+cvs7U7s^`&z^KinM`gw^WJSS zeLwWW_ehr?IINR)=GeFClli=t?Bx5XpK$WcoTB@iqVLtOn5AOW439|*6i+pd%S*sH$*l)P_}kDx@3oVzCim1)%hp< zmHqfbA4CU+B=$MxTzchK@%DDkUBNq+`PbYpA1zG0J7HSvj=FWpXsb)kc^4{>+4Oj8e@9dw`Vt$Bfvk<#Sd zEGu*OOqz7s^YKng`=hrCGjcY*`K4{r&a4C)$6sKmAr`hqCI7UViRGnH=U-c%-8^TrzWMZt^SqCk`RGoU*1NZS z{)zAHjjv*V3m<;tKcD?ZU;O6P>64z6ZGRwbtG+tD_k45Oc@GPl`1U8&RnJW~tN$sG zIyyJ@_L*&dd)q4%tDK$_t7->rPFrwy{X<6KlwiA%A+%FD!g|^rn&#vZ~XJ*kx!Aj zmiboG)=SI9?2(p8;rcpYlq!x*(UOzA!ysRch^dv zaKAs7CtS8LdfqlWci+@EhSRRS7XG=$I@Y*4r$^;r>Mj@Y@L(3(6W;rNyj4A}t8mT# zBNkrGfe)c+Wb1$4wfdCcq$x7F5?tZOz}Bi{h-e1;uHC8)jrjq zjGwz+NH+KFTPyK7xtp!v(%GBmTl5e8XIN?D&we$-Syp+UWbTj1yZ_AlCbw}WzPrEX z!93xdO+4Ffs~m32QJ(X(sCx2B*~ymY%yo6QY?=4w-HAgSYzJ+vHtzB-bC*nEPBh!G z;=#Lf)^)KvR3`8KB$IzoXPf^$&?3|O`M+;P*UY$Ga&X(c!%|G1Z6}p2(s-Y*e6&?# zd+zqEt1FLaMqlCY3$1;`bmCn}snxy2x>%k{r^!otuXnssh}VB#o_X-1(brRvZaJyvQ^=W^Mp3Xjgesb;{t3TpzWW;+rcKQF9*Z0OC!g)oC?ZG8!_fK|CJp5k$ zep}`FW^J`wx6Um+QI=E5Y@m9)?S@&jm_<*+WC>}b9DxIqlXzI(Hz?lWbNIn@;6#L> zX~H`L1%qjFr@zdqK2Ui4uF~$+adS9c#pwI-h1GW zwI@3oo-KKF|L%)sasF^-n_ng^$uy*i}$%dzT@3qAv-DH z*Y?KEdTVzW9(r%z;-+e-m~%8Kz~hTDAA5tOn0ykSrOBt4<%g9j`t#2*dP-WpHaohg zIDSv9WaJ(T<8y1f%C_(Llm1vQ&ba;jq9kRxl}lb>+uQq~H~Ls)n*01mr#{|S-z?Mg_~2#c2jBiPbnkC&`gHB)+}ru8Oh4jI zx@}vykyq&In#&E*6|&P-NXqg5_7%~tVUn)n)O+%G{-OU2TmR}!ce;LrRI;r1>^3Wvdi>+I?Qx%T4^KCpd~`{$rbXe;=BcW; zm2cy<};5VerkAlQVU-ttaK(-JkgH;Q5sL936}2-%Cmi+t>7L zPP)1Hr0SIR>kJ$_SSC4aeZ1O2XNF4R?lUtEZrj{m!9BT5R`+xu+tb%Ov*kQCwp*}G zJofTUsiU&a^qzGW9FI3X-CU_r_L6b8Wog2s-1WDaqMvrY5j+v;5nP zbL`m0^Eh{V@3so&JGY{|yo$F+Z`m82sdV!}*oK3t(+d7Gv=#n7aCUp!SKYO%W8~GR zul`iWd1U*OwHxb>+!MCnRPCHIscMGAdA`M;`>#1p6Z-IS)3(=b&SHxfPFoNcp{u)= zXPS)D@0L~hx3R&VNt>FIN${&_#Q zbKQI>_CG_@oOypZe^lPqSM><}akH#u=HzeT+X_xg7{BaqJzamo?9BVN4{=KQ(fq;2 zy7Q#cU!>1vPHlSLm-`+9bsZu)BZDb%dNR-Jkd<) zHs6`wGU@#6{H)t<|I@oE(`>W1a8BDTonQAN?AWaZV#}soi+}ofhvIc=j;g^qRT<^CwD$;8|%d-35uI!$~cxUoA z(e-TkIgM9e-M#alVPom^bpDGOKP!&+867_HcdcuKfNe_UY13P=`j6|p-7DVp>=sY@ ztGm00&7W`W((WZJ?<8*Yq#swF`{d2wor<2}Q>o`^+uJw2^Uv|^ zlU{ulzQcF8X`|8U+HGfG%G$Occ$#iG)Oj3JuUC$i^vJ!PckyRR-j({mNrL*e zg2J0*U)eu8{Ww))x=aUc%caew&a2u^Y+n?WdhyZ63D<>Q)@@(&^!}2kbC2!d z=L)yoPQT`I^JH%OPIgZA?7F8nXLDaW^6&m#`AebtkK1nRox0|F#i~jE)xVegH*bcO z*}rEqeq-Gs^}*|w{SE`^JL^9kyT*L7cZJg9l|OaU<&r(jSC}2=>JMDu#3R$5p6Dwu z|D^lIzIDAD3MTmmJW}0N=F4;b>p|}H+tOv}LYGy9bqr!_=iSbF@la)JO7z0}Jh|7Z zn>VEY?SB+|y26@WvS5X%aKhk&}aIMKwiwdr~L4AGCk+r{z=O~T3|=d;YC zWs}d}ZPn@wYyUIcERr+)sH*T|+Nr41lkO}DKB~*3qG&Yt4|I2TUH{I{kHzOwAnmVEMThH-^b6&%NcGay;ij z$+Vip>p|}>C8Qm^x3)UEU{>Oixd-pFsLYkte7`|~cYEIH=v?Iuo*exZNfvkJ@jfq- zt~6J@KVhc))1P1N&u4hgKZk!skK)Hl&hf+`cF`Zr-_$O=`>Zru zEj4Dg+3`23hr6%p2VM9S{8Rp;mD&50FB30VvgF)QpCln-qIGk_zaKwe-B>8qU8yX_ z+MM+A0O!rFZ+9l8ysyzc<|Y>5?$7c1M7$7-v8vwkJnw!%C0QLAYrozl+o~TvE6n+B znlJV~AYHyj%6r|y+FiRIXG|+EpBJ*_ed}L;v6)8GHWV}Ot!c2{zt7vV`nmrE^^N*P zs`qv8l~2q*SLA=vMqAz?xyesm-FJJm@wf65YiG6{?whzWa>?QKiJA$=JSAnP6&^G% zyO{m${ObP<-OJ91xfSquGO>ShtJFXCxy{XYV)||Q(`9j=>N&o&R%}yoxwpMPr+(X# ze{1J@S~bjZl5+m^pP?st=W3_BH%jYWlx({fPKw(X?Xlziv}t!|Cmwt`{f)oegC~WI zm%IJ-)_mA~jQ5sLl-Y}Z%c--O3i*W74jk5;YBi-?{z}3ASAGueWd-)H{!SDBmeG92 z=LyG?$rkFJ(N%AMDxRE~yX|(q>ZaoT+&tTsKHj~1pV{#}`OR5hP8Cdzx)*<(KPXyJ z=jrUX%O~8QqazpJsdnq6srcL0Gt)06eA!){ROZ-s<&V1Q&WHl}4jztwsb?Q?tC&8N zY`Z_{EdSFIPOF%PHscqO))V3vy_{ULL3Z-~>7PECPpO$EBX-J<3};HbshkT-?Iboy%D@SKT>z_4@Le{rq++${#Bjqu@8Sy*igt_wDg&gClcq zv+$o_o#uBSN98|*g1xTwNloR&tJP9>FRHs-Zt|kKX=zKDWPiag#he10&7RQ_>5Hu{ zz224E)8)!>f9tJE9ycAuR~B!MoZ~ysT|eov-o(?Z&(3=1oNdE5vEzod`llPsJLXvV zA6}8W?d-&Iv#%e7PS;mdvy@8K-Td1wQJ{8ya_*+@Ir|@cs@a@r;LzCc?eC0@Wp`(5 zznx_N`Q^s8Ju;j{$z`PEye2Hy>d7cG)@qx5ieDzY`6Ays6r3t|Pb9Xsz7+kH^jaM#$c@ zNk7Q{jf?r@bnjDhjM=&q72mRzbg=2sNFDYg6XYJWS+ zH=ExU^ZZm)<{kX4l?fuUCx8pcZicdQ~C(mtZcGtnS_>KH}C(Ayb z{C4hp)5kr=^6vcm{rTr~%rE2h&X^RwqbR=3=6U%F_mr)Yd+OxX{T}Z=GDmWzs+GQA z#(AT!Cw1E|OV76Zyk>9e?#+EXhw7KCUuk5(_Ox3_ta{tVR+E30)XrC&|GxfT zjmV!_vhj1Xt9OZXA8CHOf0YgIIy0kh!p-*gs-<;a8Q=6wSP*A;$8dA*MA>7BoUgNt z4pw%W-74#jV>^G+>~P8@!KJezT`Et!@m895cx6sO?P<@s9|Z0$*?%)lQGnB@b8WLn z%I^=-Y5tPhcjj-K7BfHj9G~0U>(Zw`6#NnXa2#}ae42|ff9?6bzDIU{yVIPwcGf17 z#)B!#^b4#u#VtPVucP?x-jWYDRs6k#lVfAk3fb%Hk+nu>A^So>Jd-APGyIo!v$lD%#Q%2;5m)ydu?}DF1 z`?6G&841dBYv&)Z_1^E^^UqiN<7A=leA`OXd6T3|-bJqtc)urgT0!BQ`Rb>`B9BGp z?6D8K_0D|Zl!JTygm>uNSB;C#-I?D}@akijrJaq_3+3v7Sl{pJp$$iyE;fI%_Bm1^ z*v#Ais(jPm+lMEeTyXNf%lg{pN2R5S2m4N|ubh<2w`8~bT=kw`rJBr%w=*>4?=3!Y ztH5k?-Z%HUyAB?elmfTW^)jh$y|XdByF`D>)N&#ZncoG+dkTQtqSS{qh%`4#!SQ z)*rTrIC8n(bB*7FbHQof*}NN?D`d9CKG^m)^=jwLIq#V#-Ok-3^IUStgsT42a%B@! zqDvh2*e+hX;?}kT>GHWL?{2AyUU?OMv+P((tV9*3xtgrjkxg}L*T0FpdS`)t;@5-+ z?%St0&aPY?CNKIbVw>_Y`)wbuu3ho!;J5z_J=g9}^ErI`d|W5%wm$b1>pGEq;m%+I zxux3*Hpx!%%snyjwX~g=#JP;9h@ObrZ7=IO-#$FXapFPTv{*@T%{L{FzwAxDq?mQ% z&9s?nNiX>(Ux|%fH$6<&TYBq%2Jy9f{B(8X_b^18%@O8&SNBbJx7!>2``w(SHXT-* zthT9cDzB{Ay-jE9$J}qXbN8#3-HUDiZTWHAy&LBPI^u4eJyw3x|LxMvD$`{PT4qFN z@@|gI;%Ip>p=6TBk!c5Y6r3fD?j5l3$?$#W{af^epAp~nz9-dvVztTq z3HB8NMg}VCZ_qHrD43B_Zc zX_dNP9`fhznrrlK*%`t2dZ)M_CcSMa$^YfCS8?-I_OjIFVxF=&H``4nmM8R?n8oOx zuDWTa;q_6@b6M1v2a-&$IaFt~O*`_I$@4(<&o-ajLx($4%OydB zeB#z+rT#%B$I`R)3%Sw@!rYd3mOC*oDqUpsb@x*1eygggdG66V4<}x2elw-D>7KIA zhdp%%zT``t)@hR2V^?67$^LexSloga4vn$rIOR^4POl63&+y5A4pY70YQB<({p(!L z{awg6&FS#Y(|+dat1I?rZ=S4GU1q-ejk?=QKE<4tUUYt)+VtoAlMkD}eLNw2 zWuV=W36s>yS6}&k+VK4Wm&(JtciV4^xb>eQ<=>6sB>8PIyFM6B;d{v2@s`20?#xl4 z2s_RV4`jEUD%tRBzmf12{@h>9d)P9{yuUtKt>1KLHfQ>zp4>N^XDfXAXV~MsNqu$N z=I!r%4C?=Go_){hrB(ZpEq_wCoo~~59OwDZtH9vgY`tbdmbtTyUQX)I`4_wMt;L=K zZ})(=%jK^)-Z{SMrS7@q)@CgH+xU6ntdgoWi5=%FnCxBJKIzh>kFB>izg~Uba`}vz z6I{ht<@26s+W^nsQ{Lz-Kji=R3XCLv`FO?5{V4!E@nAWGZn0edX35Pv@8Kj*za4V`m z)KdLs??3;_Ou>s2Z-uqFX_Y;Gexo;=` zaoS`($5Qum-@~3088(fQoBKG<-oE+j`h?w{Um~8~Uh?}`{hV*E_isPlTex^*pW!~| zrN4ahCZyc4+Uvij&1jpi%E`_<$*bMVn~%&sXf<`erL5<+bjgbIOIu2!9|=f)Kdtj{ ze$FdUH4(pj%0WsSaxEr>nHr`Yo9;)diyNd|W(=1gP{E8Dhh zdhQ?9{|r_(;o*K!rC((Y%f#kSygP?=+R1H?Dw%)Vewpz`@6?5o+n2uDFFW6T^=AZY z@3upg#=t%T}*Ttoo+>#z^EvY39}28)n>i!^ygE zbIP`Q-RfHszMu^_W=tw0S;DXD^+;;kCSM$G3>xGmmfURq?3QILonLdH0gjSG+gXdT!R` zuDS8mj=iuyQHl9m{kuT3f|GmHZ{ChSxjWL%d1712 zhuwMU_q$lNDP~L6M3-6fxn{;K5Y1PeBJig9#O)={n zr(%^ifBrqaxP4Yt@zSHG_uGA~;!fZEAbF4UqI(AY#<$fsv)(pr;d{il)c%Q_;Jh2( z4+#lg-S}A9Tvm~Bdc&~8R^E~I}hdHd~$_UvlUiqlJ<#eOt-6@BvX2VtxGA0MS&F(`Xwk#k#p-;a5_RlXkgV?VjSQg)k?#oY6m z+;P*3maaYhYwn-!+&J&-*^r%pg%c}~gm z$yPHC%1-$GpW)ADpQ3L;J$p^gY^!~hWn7(DV?zUHNEjK)TcV>6fhI_Lw=0ruFTWGB?!NG&s)4h4S zry0+4os3&^=DgW_qxWg7z=!V~Z`N8wzNuK(edCo>&b+lt|LFeSka|(2Yj)+dsG5`W zj8l@f6^T7vx4b?%HfoaD$ESPze;!WXp*m;cr2BiMEi8DpOker!SPJJIcAc`4t%u7v zT7OM1@z}k+!tju_{FU9u&fMgEv5oUM|J{evBHY{Jb}*XUH@dy!SMU5A`vg4&51HR~ zdC6Ahl{eWqJh{A8>YS7-!l0>!;hdfh8HEnPk*2L!!+g8pXN86cc)yu zta9X7{if)Ml-R|>e{MhQ;C=HoGwo;kE3-1O+;pzMN|sB;YzkkcHZ<#QyOA?feY+#e zy|vHHZtgnoox3Ts%6sXaZEqf2tDd70e8Zvd!=7`JSL}uMyq$jV@I|Q;H@~x9GUPj9 zq^|R2S2Tav>DBJK7CAPycU7-9_f5OWR+O;I+g`zXjy=<<19o?P)K1tQ_-*fO^*%*0 zu1rbhd`nR>Q$mnIihO6R@V)Q)_ouIG_~uf_Z6Db8;Dn90;%(OTt&i3pIPK4R`Tg#N zN!ycn=N~T1mOrPrudt8fe%Ze>($>B9EPb!fD11-eKX=;4$ydbuPb)+i?0N3_$*^we z2UmmWW2z742i-mNVf~8I_+@b?^_^E7oSw+MhOJa$*QOKJod>_k2>HY>x;%YFR?der z=OnncRz;sU`YiRH`^3CVlicNB@=F);?4I=G>#NTnPCWMgGf{pbv+gtPdqz%%=?ZSg zcc}O7p408|?nII7PbSaF`9*JD@7CEeqh|l=?bCcj-!z-Q;XAmuS$)py#QSZL8k!uh zY>gsqIjq?W<8PdvD>?t7uv<&LP<%?rM>gwS)jXDq?Yh5zmG1o!_dMZD(18=eezFH| zZV#@tm^VSvh4b>2&G9vcFJ+z`oOX1!noO1VM%!G!1^aU&6qWbotx5dZ63D&&daqmDe3C$Fpa1!k!POQ(Ub3!c}j)YWY$i`}pDkf5~lYAL?3&Z;_iBd06}O zVpW?5(WmXq1P|;_3Or!ccK26|h1{pV%+s8EtZFO|%{YFHw`VtBLEQzun>iMd7R>7A z>*t@CapgaQr%B^SyEoOx#BTUKThvu*`=izRuJ7mB**6rrKexV|eTe6kuigU39Z^iT zS4*Vj-T$&_&!%Y?@AgeQIZeE|E^^Xd-EWgB4Bx-ieil)!uXyw5wzt0%B`xG83+q~BvMajO zSUhB5e&Mm$yEDadFQrYN{O)aOoBtlWqnq!l5<|>kYdK^)qAUzp|IS&H36^t@`=7k9X%fEII$D;o3*BXyMdm5#A5 zOU^zmshkpF_+a{{zr`zgebTplWA`tron^IIDYx>@?t*P6l>;7`&G1qZ-*8~Ac^!M; zIrj+%AGvpb@%NPIPd#s;x4ZJdF?Y4E$*ZG}L{CsD$vYpEvo845>^1Ex5<4m`hF$Eg zdQ^T-WY)>Yn={K|*#-Wch+8|U^msH|L9|lLcB^R{EDjxb_^pO}M~4NQ%#ZGhjNhdh zew7YkB8?U5eX{`RRRqm)$a4R?(XrYz@oXY-jvY*)@mzzHs#h4;k6xHT;z&x&4X^ ziaEAtUZqtpU0XpzCM@f{cY4L`gxhPL-uNbwDeGM)9#FWv^U>U0bMuRZOYNAse^#59?WsA= z9=5(|T+MXe zqdc9zyu43L_`3Awv`6lpWos|=JrH7EbRk=B;sK+x&DHHk7Ajw=Jr;Ib&;2&L$jfc# z*?kVLPRSNJzQ8T* znD1EU-vgojd-BdFo=>Yd+iX$e*<7`I(KlnZOL8syQ~n9uon2P<^!e_T=F0bMdr$l; z*k;Tj8+*y6d8K>`e@?A<#pNB5Z_6`h&$v6`Wl3LpmhY{iY1Q(}-exUNvq*N%&FgdC ze|6T&y^?H``rX-zYSK3Dyu9+ot|>20)PJ1%a&z^QyKOG(Wk229#C+@<>*7UUD*ARd zIQG=YEAM2BJ-eg5POj+Uw#hopYA518ygZd3o>>=E^E_1d>GI-s&rgTu*DzmJheSjTiGx2_&G z^6`#uNq6^deVG$$P?w$-`+2tu^9{ZS^{2cSPg)*Ol45URSKi+F?w{b(NBXmW`%IJ3 zZ9K@IA?Mt9W$$gd*hVv*1FG$Ng!gQ>$?Z<*xBhU_z|XGUV_US$;=A)t@any~Rc&#y z>_gk9#CP93j#cGq?efZMPExtnSaPbkY*hfDMyX(#>7+y|) zd;7Qdl>)WXIpy`IPfNUc_n!Z5$z$b3reRPcJhti*>!=&aL-mi|Wkz@%)pX-LT9wyZ!ULO#0H_&kq#wK6+`a zSM0n!Eb`oK;oDnp+^n>n_9{9$jyvtTT~6}~ojq+FyH8JC#CJL;W$m=pYxdqgKKJmp zf{z=+oD&aCJML1q#$#{eJ4R+zPX8ZXRuezWe_Ahe`_td$qA46-D}KzCOwHDK#oeS+ zy@~To``!Y%-5aGPGp5I#uz$qw_psLJ_2q=QrK!KYr=9Sg-k3M>^}K~&v)}C7YhJRY z{i5}>@A=F-Ufq-4rS|5h;+1Dc5=XY)7v#;G>rwE%vc;^B_l?78omZwtSKMWPZ#fx# zcaJsC-sL-fo>tOs*fL!*b;(inC6&kg7x}7Qku9D!Q90St%1c&Y59`S{rMYjcw)siC z&E0l8+xCOi%_rMxrz>w=I{D3x=(|6PpS?X;m(OC&VifbBp~oUNvNZS2Ci9~c>eHDn zPQ2?;%wcTY;=H8u4g0sNt<#_0US?k~>3#T{hPT^04_)#<(!536KD}&Cm3Ph8w8OF$ zEbX%wy%YLv;P7rsqO3^EpB7_f{rs~jDd`ITy7viXuii7My5!A_cW<+8^w$5{m9lrj zH=dssr@y^E#r?!;(@CA1!lw&gU3+7HyX2C@+F#Byl}^R--nhA&MR3}^J-n?(H?lm=2t%+WzFlVJlA$p--1?o9wnQvU$FJn(g%PqHVX+H%mD6{dv4SaPBF_ zxm8<^2Ode?lNWb8R%f?Fd$zZS&nC~LX~Bnbr-_}pdH3~vWBnwX6G|)=dI^1-FYo?( z&+*{)-B$M`Oi!z6PwWu)<>7Q~g`|Wbv3?6K{Oa|ED8+_^{6Q z2c{4HnAdyWpZ0dktJpK2)RPXq)VtRsxko$h`Kw0Ro247e8m|;iRDYB8l}T`};&Yw{ z=Oi<7-`V{7_GaymvzyNGzrAQ{XL@(ljUQ)sZF_tAIJfmKBdy(h=WP2Y_U&i-w`9)~ z<8w>bZacjB^x>-K$A9<>3d!BQdoT0ScaF2VdxcL59ddo0aM;vXQcvLEUhfTMZZi(g z6wBgmxSgJ_x};jc%OEUt1M_?bgoST6XbLDd){QuKO|${F$6ODa0afAA@bj-?eAkmsB3;d7Gzud*$mR zZ@I0?Bs_0wb_$y8ujEvo_H@aMWB(bR%jsP>mtd9pMgLOq<(Kl6ws!n3cY}V)Y)rWI za=Ud;w1d~Wc|S!KuXLaDd%w))m2+jLq`ls~d{647*e5@Y@)aKN>~)>UZ1M5r(N*k| z90bjDIQ|GfO)0i}9=Lacj&O(YGW!%`CYFy^|1AC1HO+9&z2a66hlX!uPZ&3BxK?~S z&Ct9t`}pLaifa8gmTy=-VgD=6nT}R()eqeM?eOXR*S;nC!Sj@ByyH%MoBKl{HvQa` zuNk-5%>MMw>$KmR@a^2w-p%IGg;%zp&O7EH=6iRxir-b1`!}Yw^1L#CqBvh?&+g-f zxwi_fHg~*=+c7<_&nJTK!;Rucn!8Q+M~AQZ#dl`wmFVoOgR&1zt+sBvy)o@&@;e=; z=pElbgvYtpUGshQ;@#Z`pWAY0KH}M8xN&2=&g1ZcqmTZ~Te`hHCBfpt2G0qv1o!Fo z7tAQtoaeJ^`}c&>%0)|Sg>853?f5sT-Frt$frC}+pPo|YBIA>L+Y_JmrzlK+A|B~> zxS8>r@sjtOtit*u_;ah8$~8+Xb!F3wIsP;Ja-C&ncv&Jo_U>Mz>q}NE+&gw_!LM0m zoyIw9n@|1Q{$zLT-7|q#>be#0tS+lxSkh%zz~|Sq=gnrjca7V!RQs|b`Zu<79Ar|? zl`?(1`*`8id43-c-WQ$rfywOft$XQnXZ)Hk{oz*N=8s%|3?Iyx>s)bTQ|{dp7Mikh zi5b(X;?I;GU$N}}hQT?g5BT;9Bs&5K26qK#K1pX=3ay!*t? zI$qR@Ju};K^3~N#r=<68v%MWF*0Z~y#`d88nuh8!_ZmHcy=P3>q7O2vs=E~!^#{m) zyjoF~I`Ka9-f7%C+jDm6Hm}axUcJM;=y`$J3geaAqHdpivgMW42?ZygNv93x%xLUB z&1TMavT9RxvXzR}gl_>Ge&&8)~=`{cZMu**7-4^7=CE zrNW82{HqL~j+{2RA$oeb`XcMY#_N^hi`yMBS-*2X!_0mvJzbIVPN_Wo zTYZ?$<_5<%CmoEw=kwgoI;^|VCi7sfoXa-(3H?I;H8<8j)!TVz%d69y-XF5njWz4c zwdY@^UNQWz z=KXHb<@ua@c2`S3-Px$$Cmm+2VlgS7%Rc4Y0_*KBI)7~UTQqNF^UqWFvVTQS$-Nf4 zIOq1Nvk{)Jm^4bQ_eT8PFCuF7?s~f6E|GPIc`|NV`z@{Z`|@Y`(udifSf9wcyok=3 z=j>xOtwUMowT*&>-i7}Rd!*ZCUVV1#X_uMv{)AhErKyGPZi|DZ+xKkq+`H~vG=IaB zEhp~#ZeH?7hEMVKi3>qUcP*HeaOWZlY{@9 z{_C*t@6^4{Z9BGq`}q9M9KXp9wTU*{UfZOroSweyK#PCd-a@C$?In8t54qE`qR(%*45s*&8lm6bDaCQ+far5sF|!{ z4(Im9sdH5i-rk0|8 zPZz7bhpRR`%$w0{Wca!7oOAMh?n4XPch~V=JWyc!A*a&#gY(3L2PbaP^pRaZamF(z z<>fl_9IB>&uiAF}SnR8RGxZ~$Ec2>neKPe@d4&A-uLrBkZd-l2{_2a;nbdXbj%|p@ zzWH1F*V1Y}*=ru(ij|kVpH!dDDAO0s^OO$(r%9ZpGt@a}3=#+J*KOuTH$S z{dv2eS;kknD7ll?&6nPDeLJ(gd86oZkH^VN=j+UPyt(r8jcJ#cuHN~sYI;xe?xV9+ zif`u5Jsjb(>%n)UcR8=>!#3V8uD&vjVQ*D;uQ0N-b@?QBqi;v7<^EcQ;W~*&~ zT-jl#FL*rg7*E>qeQ%x!-qdgX(`jFHUMFeIiMr{3GkiPtp7_B0=KXDF36_1SUm2A` zE((8Z_;#VpOYLO5y4%y{w5pU#R+D9Kl|^mcHGA>m`(hnm?HVm)9ZPf9-jq1?(q7I@ zh;O&k+q-*GW+rn;PdYmJ>f6m#{ku*bx_n30Szq7v*4NY<^VUAL&+SZ}aCk>TnxFID z^c9|E-WDJC6jUqBQOak!nX~ad1J6yrCHsyC&0QNe^L!28hn?kZd#<~AeKjcm@NrK1 zF>i@v^-srFR*MOLJ9sDMseaSJ)4x3`j-^`Vew_JD@Xmh*jcu==#Jk+yyv=yGQSrl6 zQ%7sF*&F)SO7b$^)?b)$q3i9`a^~I3a?3fsIiFeC_n2k9>(w>-LX#7CbSJMqryimH zUD^HPM)@;y6&BvAX8zA$UXpla;l>W*9qb%_w^LsozFfND6|+hE7UxgOd)_(p)U9E= zxz}AHvTXN~d)KDjHhd%dMl#KH+o`z2Rt`t!{V213JHfNw+`UMrE_!?U_UC1_lMe4J z)wa})4f)8UDseA&3*XY|Ic6yzw+9}+DK#zr5~Jz7h@!JeBFCH4`Ig1KyJ%$Vn9d~Q zBz1T1v-5AS?%DJF2H(fsR(rR({z_$Ma+83NZA)Cm1&5E9%o{bu4z z&Zj?g7TLUQ3%vCA{l&zNYx0L)zS;d}jc{jIBdEm8Z+k(rx7fhRdAZJtbL0jFrdzQSaLY%L+`!U*Vxw1+6lQ3t_9KIEk zru#2{&|$uEQsFy+Ju{zfNnO)2Tjtfrq*%dgU#Gjge#AB>wk&gc^yaGh-_B&-JkmJp zcwB{=3eyQ@&y?RD?=tUBzLMX3xU^j0By(#a-%`IN)r@cE8SYzXySZBbA?uOy4RdoQ zS*>fkRIhDhzaxR~P3<(B{h0^+70h=?3ZC{TGUrrz7L_vV!NED4hZpHj&bT+jSLc`6 z@lSWB`OfCZX`lX*<+1UOj9AetHO6`OPHfqbY_TQkgW%lYS3Eyh@2T-vA8hAiUV44= zJDZ<2-umGOEZ!-fm~-pzxbz23X|$fCSICJzs{ zca*BxKVq4demp;U*@>#D6<@0*?@u~jpkE~Cms{gd?O@=xO*fG*{u1Zi$yQCaTdKC* zKbYD6&Hvf%GXDoB?w5R^1uaeRYf#hz(* z@40y&$dv0zzB1um1(Q(KCg=4mwKM*vNS{!Zz1z&Oz2;f%?9~U1SD2l#IOezT-q|I$ z^z)D17I)QE&Uxi+wdw98xrMid4I2{Wbf(#Kn>QxwTJNvCbmPq-$=wx|Y#Y8Me>Bd{ z@olL-{BiN&KVcp}b*8P?pI&{QoM8eCoJMSp?H1w?$s5EwmubA&+Q5~sqfZ# ze*TqX;x%_Uj}Oh?*u{F8Z*woZvS;aJw}7weC-j`&++*^(x@}Ui!g}{0q08T1TjkB) zxI8@ij(L!NU|Z_tPp9`x(7%-8Ipw7Ji9Z}oa$-Isy7Eo5g@}cc-Vl1m{ZR^c@xW>EbF*g_Vo09@5O50{Wbb0u`oyPP5Bm+o}5h{GZS8E%ih*856f`w zU0t4|c)O!#%eKTT4-QsaGQ9mGY{`(L*R$<1N6usKoY?t~E+4y?w;@07pK-$Z{u8R# zJWewl)T!8Z&%AL{x6Y6c+n=G5c)0wkt_RXeGl47}+DpPF_+jabi*|II?`fXd? zD*wd&DaC%z70wy1OnzPI;j3$&cKk!^1O@8@$G85p$ep!bkon5q`;)HacV3(`*KKdZ zPm^-R+6_B%crQ=S3Sm$CAT}d>e;hy4^*5oB*OQdo?oID)s@8k|=;*c$6LSuIZL!_! zV>r3}bZ(_p?5>UPm@k(tPF9yY<{xzQi*ZhkKEH^Oo9_c`5nc0CZUe6shvr0Qge z#M7TX`94{*k2z&y>kr>eC-{wPPgJKq@pHc^;$dFwquRGHYSz}|#ILyw-&0CYC+;!p z*;Fl7db0M+aoqrxKOghHa=l}Y*vxT#`}-jFBA&*t4>eC5@_F~MPRL&N;^lVtP3_a} ziskb>^7}4-o;5!}ee=O9-zR?JD`&U-nsB5&@YnXo<~O$M1U=cESMaub_s`2G{@qo# zwmC1(=)7Ory4>6Q_`ziBR^3PU&RC?betQ4C^kKG}>9XsC*3@tO!*=jod(2b$!C~S{h3cr9>8+DjKG)fwt*n2) zw=+%EV9O7QbB;%w?TikY%-ocG?E9VcjLDqs`p|V1KPRc8{7pGH= z|3+8powuKCd+gHj>784q?caPyW)6Rw<=M8`$1I$7Z82??cvZgJe)I1XpY@X>Z70<0 z^sSZNCU@IdVV~H&`#YPT{EUcoo_S^VziCPz?f15PO+MRx<9L{|#eas7;1&G(&S@w4 zr+NNNi(JoOws!tA5wm{}>ztHoaT^Y)xP6o0yY+ob;ty6HQub{m#``x72~ zJoJ9PP-MDv$&LEH3-jLm+GOkf&c89wqS`7uq4dDYhr(wkW!+6ktXm;}L;8)p*iGfr zwKFyDbR=@6o&T-8v^$B#n1dtjeQsq>#~pYFQ%oySe)7TG6ijftB+zWZPytGac!>4uq1`iXpA zu~Fv~Jk;OwShw`&zFl(LoqP4pBCfyNl=pSpZ=2`t`JE%%UX1NTds^}9I~K?PI0;wO zHm4kJn67&-B9iBa+y|4*y?sCG-*h%le13XyQ-uvX-^8-nPb!N3JhHNQpj16?!gayZ zWtD6Rm0It7fByNQK0Q3WfZ>?8{oPk_Og``8_i!g1pZwwSirmE|2aR6U*d3|0e`@RL zCwcF=q3*XRdnbu}G4qw`6CRyDAh7)o&*Y=8m{-`SPU;MEi{=sdoVsp@(@PbhdrU>= zz1Q?f^eAp>+xQ@Q=Iq0J63!*wooTcFwD9T8w{x~`aQyIFUY%cHZ-)=iq*7TR}KF-hXwRHYR+4BB>&OYBxoz44e^LF=_dzNy`mqLUCi+ZGTDDng7(E9E_|E@^@(bv%hyqw9DGQZR};%VyZXUD${NqvzT7n z@a14-S%lu-348X4MZE89x%YN%Nv-cfNB**UsbcIn0sfc}?;3>D2zRBOZUI ze9zr|PVDKO=G{v3>&%jJx800X-9LS5Uh?tzQZX^x7u|Dvly~Fagx+gsb68hCvamaM z>u}y&U5Slzi_+xoJ$tT{pWjJYU{(``o>+UQDypZMH4i zaC`Ua-8()l$T@wWci!86rONYje;wjf{W@od^?~n<6Mxz`I_vQ6=h!X%pJAoA%DK1K z1okJg2btwh0tn_ zmI>}L`(OS0T+@-;x%o-{g%;C^)<&0~7;j7dxAvZCtNK3QN`-IsPgWcEO)%bfE@r~# zNiF94Kio`l&X-QkKly&0!=AM)E=C+L-WB^5?^ZbUcVnqm+>FlF-@HZBmlVX$E}bZ) zQ^p>iG@WnF55IMr%_5?r7<%3r^6uxC&fR?M!`$Oxw{!Qr-F7>7eeiwh!#2`k7w<04 zuT0If%sXe;Ql8Srm^#Pi`40w(e5NyHoYmHO zlT7#YvEFVl-)Q1BA=0=d^?N>#(Kr6c&dbwIZi`!EpJ;3+XtE_)|ASPi<=dGbeyh%@ zip+}gv9$dVq1RV<^XA>g#LGH+-|v&WJNt_2dyfYjEUeUIefjt7+2^jY&+A`wolEJr zzuW%I^ZXf^U-o&A`99N*4%W*%cTAqNzy8RF`mV;rr+<@A{9C#?xb2MIgj@Su{VKv! z^vc!B?IH#L`o6L_>>vC(=ili&yPd1^JlEYkIe*jTDa&`u&oNeSUh@8lw3^{bhTn;I z`rGU{A3QcYGq1bi#qA~S{*!#?bAFJ|JrQm8y8q45n;YM~IML#L^%7%~e^^RUWkueJ zUDK^MePb8@TT@hNUuP%mZQYbUdHcj;XD93Y%)Q)JP&@gPzi!yt{x?EmFDL#yRNitr z`EU1;*%Rk((=#ylUb204*fE!$S%zyTN1VOL@MK=1++B6Icb?|ywg)!v+&uHc!b5J~ z{5;qka`!CzaO@mg+*11+kB=Xa{xT`c((==vhh`UUbJ)x_KYc#ud)UGAJNzWCZF-I^7rfH_z~@Od>F55w-F)-pn{xtIu^(oh4$r$&5x2N`@xg<31@AVm znY_sR z`NUUz`d4Ijc4zj1^lLTG*(FcjnB@QI{L>c)JU;l(h!j3f zsbspD<<)ZhgVhHvdC&Q3au09jOnsOr_IYK=#^RkxtlhrbZl1esFa6K*^Q*&6f79=L z6FXn#9u^jBqQBDd`j)1@2lQaA8DmRZvt@#Am!!o5~yJt^X}|+|S11VCHr1b#gb4)i1mGadOhr4=KuaPP5Y9 zWG20mi?V9|b}{R{q>|#RTlL(`a}+I0A~R0dM!oZUX1=?A+V0%dDIfAao&9;>{p7N? ziVyS5cf9l8^PfTJ{^S)i#m>x8`}JURzri=3pNGq8X0OgaIb}nSN7QWPB9XH8gwr~k zK82m#`m-+Oe=>i{ZR^b|_glzr+hn0^u=RIcQ2xpP495iQoZn{jEf6og+UY*wWdEbk zX%_L96l`~$TX)at)q%Ou#yN5~{7=3;oH#w_-j2=1ySH9=ymQ9mT>Jco)gO#r+G5)bo)NDj9ZJuXS194b%X3A=9%u#iAG{|o{Pr1@LcZ~M=X|CrM?l0Rpzo6EiU zrTc{M{au!K^}Y1*$v1p1KAkfs&&9f8xr}7L+^t+MzUM1vRC%u!-_LNc{rCRI_gAEt zT~hgWoxP~+-G$jXvbX2?7f=7Q+bsKt!L+i3@NoC0i1(9&*jXgSPJcMNzgl1N^S0ZE zj$8lpv5@^;uN@>2JuxcE*zV(;w1d+=eY=@1t^3~6@Wa|gN4K6<>D~69A@ACeZ4!w& zU+2AP64q9owl*@I(RcIi{|wuM-_8+wx|^@ys?~(^+SAtVpRBqocEajOe>Oj^zpu0T z{hFWK-`#CbdH={s{-n{T7aR6Q<{3(qA8Y+-J|`*c?Qgv!6P|PLnYe4)i*)wMA2;1T z_Q&kwp10F(%icWpp?Lly-g(RS@hhF^>)_BkcP~0!`k?N9?vHbxZu>Jk@7=d*|DgX2 z%J&{Fs+823oA*B8?rq5u13Ay#l@<@D)!a^fCivSsw{TmW*X_JFI(xR~Jp2~Z!RE8u zXw9+r{~5Ntx@++{<*U6u%dYL8d$yK8eY3IQ%R{zvhkZMzocpnTatp_?(xfTEZ*dazy7eLbPyd>m3QyC$Q&t_F^&!*h$)}^AZr)Dk`_Qi#Um?HxL-h3g ziHq;<=jUf$$3Ex5R~gk;>fciY9`fF3|M&Fgq5llJi+&_uXA*ba=PXxwb@DdT=%0tn z%nH*Am$*n?%=5ng!@hdbB|Cq0{vY#~p3Fbn-Mv^>hQ()|=loChXSN0FJr$JozS_^~ zw@mJ!+VO@-^dDY1Xt)Dvyr&r_PyE`JbWjhy9sp=iVK?^vZpXP3EVQ zYqst!yga3h?ZTcfuWr2F79qs5-)_b{`NePk+N&S7x7gC0o44=nCJXDe4|dC*{P3Tl z?T@{_MV!?}+f6aOy6vfL_c*d;av$&gc>eHpkB*~>17`$ZM$icI?Z?6 zr`zX_|45xylYf&x_`O6HOWRFu<<%B^O=rtK$!;>geQJY6)%=`yaV_Zy=ggm{*-X3M z{y3s)>b6hY{-jQd{7}5F#Miag}Mp z>k3r=Z22vw>$UCZ#MF1p`8oF8JN%-(=$zqk2Ftk93Mbwj`FHw?&E#+IroNLgerP=RdCunc$ExR+ z-YahJ+1|VD{-oQvza!b!OW4LnoV{5+^WEv&7Uzure7l|7URhc7P1?haSzue4qan}k zZPs&i?Kqikh8?e)t#7^k$>}RKa@Jcmz0`00&%pcZp2XwaZS}_!`%}UsQ??$v-F*9# z^#-0>e-x~@zx2xwEBbc3QXx@o_eq=lANHE+r-h&YbFg)0lz)2ZjZ^UXC%*Iff13H; zvDvfi80V&hcZT}9{JGK=xhG5d>tz2lZaRG~>>ht%U5(Y>34RObN4Y6UmqpL9k@x>G zWB%j^n^T@_*E{juJhSBZhVMC!cN@3enUTw1)IaChEz4xvTKhMDCFXyuKV#i5c=h^~ zllR$P|I`0D$No`Bd!><~;fIfN)_Kb=(EoMl-`zUjCA&_aGgo}@?al*hoBd|_HSX;% zkCcC^m4DGI^}n-4x+OFMY_+nv2DzUOU!vt|DZNuI~b8E=egepOi1pT7Q2`Qa~p zdGR0K>eV0WXQ$o#=WqStr}?*7%kyoz({A5Z%PFXNxgUa?t4Z&Paj*{Kl!@h z-8q3M+nZ+T_s$=S{5b9Wzt$d;o-o8XcD{-j@6O`2L4; z-k)EmJoo3xSMiJg6!9I^TP_fuJI}mT@gD2`>d)J5=WhG(XU;ZH*@8dMKGpR;@YiRz z-{bM)`V-;(-|c_z($U>&_i^4~b~f1!vr4nm*%jA0h^ZyqEMEOB`Q(2FHM{vTPiKCr zo$xMUf<``A%=a1Q4@ZrHH zSz(#I2j@RK@}J?|&qr22O62^FZ@x_~-`^~Ed+`xrtFk-Zd**-k`*#2I_vtrNw){x5 ztm|L=xz&e)Kl1vwKmBJ|lsheA;-?M05#H&&51!8EnXhzC?%|<_lPlzN|1(@T ze)_|X!(Z;ti51>0x_Nrv05f8pinZ+}GpXPA>||D*FigYL<) z+z0;| zZ{CmG?XPtn{%26%T|IprZ~OY5hl#UupOl`~d93r?qOQMpTWqxElWpIdd>?LB**q`eY#)r`)1AR?sfjtR9{&?)@hcmsJm@>j=L`2 zqNH^%DE>cen>Lv*dP7msIjgTnuN0J*bUyj!S3ar!tNo*zsm&IQZ@R8X-uh6@BJ}ij zUeD{iJ@0JGEk9l=O{>ZAw?1?$BFg(8Tg`m`A9e+`eI7q6jhoc}+;4xs{&ofPJ~8L} zhf9Cw+?;%MC*S8y?+?EzD14W)$DOh7^d9?v%>USVZ}vK#$ZP-i$v&PHN9dpu34IQ|J7c`B=X~{rTyNb7rQm?n_tO>tD3H=dF9Y;&kdJ%i9s}Z+`CG-n)D2 z?tcfb?mS_AE?=^eKgc_G+wJP~AI9|`-&@*7=b!sHp}eZ!g11|B;`H{0+g9^#cyk-_ zN$O6Y_QBHj!_j+ua^jY!E${a{H}l(ZF7o&7O8dh{KF)d0f34_)?A@EGPxnWjE8Lm8 z?aa;Q+)4fcw^Ju;zB{cmZ`ZuXAM20aUVWUuYGZeWg>Wpj?mkG^XQhIfpm(2U~PwH>y&Xapcqn;@5E}yT@8QEU;BTW2M=^UnCW|fchfoNi_H4xr~k2b zlat)sruNN_{hYMje}?AgzvsJI{{2?D<{yud2gz1O6>gJS`mLFzc z-_CWsJ7H5rrM=64hKG6o8SehD|?t8qCaiYkyTK_{OlUu~x zbS6(cXH;kO`9H(K=!$dPdUHQmzCIbM^Sxy6gJXLpUyC^TO)_71#^lxN`?o)Q{W$fu z{gK-retzF$?=F4#qTbEaIqAoWBLDfb#|Zzk^d?=+&o*- zwm_z2;x|EQqm#40_dI=G;aC3G_&&{J!-3>E%4RQRzWtQ!zN7f=Ty^i(jcrRnd-xq{D=^J;io1f?>{jWtmH7+<=Fcp?CI_g{~4yQH1nBPzGvplPiB^8clXrnfA{Cd!yk72 z+n@fllb@o#_U0a^iW4>u9tj>k@xbipo|uuCHIQXeV*5S&A6M*;IZ;K_QU_2CcS-rAlkhC z>7&zj#(&MT)g!}HutF{zuASLQ?=+b?Y>@OP8X z-p##_D{`JbuDE^w>-~@S=l*Bl-L-fh$L!Q~;SbeQMBmO4iix|Bs-Cy&g@|^b_+vt){H&Z9PJE8MHXV3hKb8-^p zd~3HqnOF9G&gQ@IpOPQ`R((};W9y*{yDX2d<=*_CLE*7Qdhg?^UuQR+GoBD}^W&cM zANz{VTmFkY{P|7EB>$%9it}@t|MHpLlh%1^_TH|(IsG2T#RJCXb@Fv__7~>=^=JS2 zTek4@qBEtNZulxxH(ULzsGITR)88NIZ8i4%KWsLC_|Gu=^DEf`^^-s9JpVHo)t}#( ze!yQdb-v+;^X&XT?A1^H^QoWt@AkC!#SF=MUrX0Ezx~g^e9rS{^7_gDy05GJnXmH4 z-hPkUaXbIR@=yM3wApCSyD^h%6`ZvW39{`OIsw0!&1{|xGLx4->yGveJjvoia2(y||-)eg?tBlF~I{*TqN zH&dq-?|J?^b=&b{1-Ji6|Fi8dyg&Ehe+HSy7WF5K?*6>~)~@WFndLdA({`WEJwE@T z=wAG%lNRUaJilpqT6vxAWR)ACx7Y8{W3J>%k8*lrjo#g#>F3$LI z;0hUd0(de0=l$sdI~)_E%PYx<7Z?&HoI-SJdhcfLym>^JBB~-%h;#bN{Qo z{?D8}Pf8Dev*3L&w{V*0zo++~&3}etvafi4@o)bVzxiQ*n;pNxJ)b@CYaji6 z;(zf|{N#g&KYe`s!2aTY2KE08+#g@5pZ~-EW8Jp3r|{}uxWBO?Q&y}*(; z-^IfpEn~dD(lu-G+BMHoo_=IfDKRVZVY?qH{BP2m^+z&&#_+XhJr}JIl%&FC%kb`%yc}r=ymywrJYCT2d%rk zUsN>oQPhSzXR`$h*Zx!Ym~$*>TV2BB^WsM~+}n0W)@DM%gX)&#c}nfdPc_?w9$j7E zVX@=Qv^gSKOTRJ3hIq5;I|{PZtot?1XiehdGp?cSHikQXo|MvCw>je*ulT*>1^S8> zPE&8@&hcJ$=w(=pi&&qf{md?{d76*^24n=6Jv;YVLcy{rz#zlM@zH1f5WcC~EE`tO zQxd!BbwstG!tt9%u=yj)1kRdz!xXOb@60AHFg-d!D@1L2;o95pJ2ZB$zQX9V@nvH+ zzrcyo_-9D9Nd_HO=QOHrADL ziaK&)_mq|Tr(zQ-cl~j_SQ~ugLg1-7RcV(hrG-j$j}sPp?R)%m`;@G{s4khL?HYM^ z7zN&Q`98Dum~yZ75W|eP{XazZ=;a06w@WU{sJ>&k;$ZdG@6!6KW*?ht z(dNd=YqQz)(I40RlA}@KQx6pGTM#$DF!Y{SU{GvjuTS|I*L0QA9dn{rb{pMLdT2Q< z;mc>O#Zv8x`w|bG;>-$*-Wk^Tc2571lSdo3@prx3J!4J7X`Ms!IujC)u&xPpv9Nm> zZvM*BLg?v+V4pP)jkf0cII8h)IUHC#C34x$M>f;#6w|K%>X4A0H(m3wt<#?$(Rz*2UsIj9la3qqDTUd02$oJ_`=nn`8kweH zTdzV)nrjaoYBMPG@9|@>?9N`O z@80$*rp8?2pkLnOgSP3N=arNm+jYo=ca-v!y-KjO(o$+XZ=t&TOzR9Tu~{7#9-i^? za@_hVHBsArg{sHAB<+S2i3X;!=%BTs;j5b+U8MW8xYk_Mu4dh*B`s{r_18;dM~uv` zL~hyqd}av4o<%ADo+gNQ^?kpyX7Ohc<~2v9?l9;) zoO1EI-dy%8i)J>2YTBMrj5kbJ#voOx_~!Q%=Vyr-8$WBc6>IN~V7yneX|`}sStgls(uX1G#g0iE_Ba?G?_houWw0T72RGNQQW1^JzfP;x-I)2&!0^b2 zRi6b<`E_(oT#>rCFl^U*o}&3@ZvOeK)fup{(ByPZ1=GVdr>2-a-qEg|v?Xwcs8(X% z(%wB!dV{{d3S_OA`SwWi$*&!SWq-Zjj-4w~JP(_`6qw(*;GoKeGEb!}O@#;ytzQ&Wx|j#EmChK6CJC zhr_eQ)7~*h%nmNRaQ}{LwDz6wf@tnF$G$&G*iyyOQe^GbV|wJE_0FaH19$^1viV=7 z9eF#WH~UC+_IHh#4Z5jQJ{u%1Gn2Vel6vfwwD{wq6D+!1>a2^eh`1`ThA|r#ZeK4P zwSGnB((vBXt$Op8*067#eryiU(U$X*(iW~a&{&_LbtJL1HF@7hZLbBVCmC?ad*((g z2$N8{=^I)xT_o)2X=|g$R&#~!To=D`@=2KCzdKPySMMzp;l1FpWr5Z66|B!*n@qa3 zeU4Lx$eaximOlBa!QFPbK+Am7eZi~?#WS9SRi=qn?px5)cd#$kG7``8U%Eesp}P?iD=yuh4x)Dbsl2PjjBN-|?MdE?81~`aeVE)Iy%P zlaqH&otJ#}RT#&Wsy*LLq&Ew*i`J#iyL(3Jw$L2m_$#7EPi@-D6IuR@e}8AdS1o^` z$$1Ks-t8iQe9?yTsbt|~wn)f=12C>tzAuHCV zuDNpI`c7x*xr=0;$%t&Jm>;H{)GxqYt(MI-O`lu#)bv)b+-bc0DZ$%{EUa6v89A=n zwKp%LSk7Vjk^O?N?M20Y&YrRRk%qJH{*Ikqi_>RjJYycJuQ~mqT%lm++5Ij zLbEL~V1};P<6sX%_MG~T3@$JBot0IWj<&ddzEd@=ypw}NZlUyc=WCB5I^*uT6}lhR zeEPvb>9j%Kwklz?aU6_@2uC8 zFRm9b^?kGCNahBn>GDON8#jjrP7o2F{w`(p(YOB@su~=oi>-Ce+BseCZO##=);H6Z zO}n|%fk$(uL&T5WXQY?ZY*xN6r@DC7u3fzc>va}w>@!}$;&W?_>B*ODQ?je3D;<6o zu+Y7B122!&`B!{btv`x7tSR3iIHBP9>JpY`8hz`16!iYMHHT{QbvlN9mMM`_bbHzB z^p0!oKILT3cOq(n-o66v$J-Jt=k7h?ntn&Blx@wX6NOb(GqvKSoHz4wvdf=wP_ydu zHjs&VoUPfkPq}OrSL`FxwvcUJs=KCDebi$JUzsQ~v1x-_(U0l7x2#jGiu^Fms!OOb z$D{N7Bl!m|q5;8DO6=Shj;y_w)Svh4_&clj&+O%0qW-0cg?h(&P4Q0nmDr~h8L20- zKr6Ut<6NKA+)^%{KgZr1#`}I}Tx)wrZEAlIi*^ z{lR6{)CGnbp`!1?{=_K99$nh~Zn3!a^A#+ymu1)U1{gBS*gZ|zeY8_dO#2S=qt2kI zddA1H6trv4m~Ng~SYIqQGhLxW;#54xLPK%Aiv~Q)4Obnz++>pYk(W(~VMV{B&-Rj! zg0g(8RO@eu-#=4Ua$Mb_gT1Id|IW*NVTR&gQ|=~TJ>@O;Fy-wdF2h?oOEa5h?YN!r zh-uHljR{9LmGaHL9&EH-KWz0CjoZ_UTJz7CPk$Bg=IF)`2MT9y34MHI^AZ8J z6{pKCwRcu#ExR7HD@9wogX!oesZT#U&rWG%+Wu0qL1BMDr4fWq_wkG zT*gqKnC<<_x~Et3Opawe^_JfERQA{@(|19S9^71`>{)X#O4l&t$UKDyJHm61+|&-$ z`>f0KD#q*2qKs{~?=S@(J z!QqWTQ_MS_u5>uf)3z-2KZDTKodF9u7^avz1=HPFShOKx^Kssu+7G4ZTyNkLF+i%GVVQV)a!9j>iH_P#jr=f)RSjg zztE#Idkyp3XK3Yo)vT~nXSr!HrzS?X&}fE?YqMUie$PRz%kLy+C06m>KK3~4y1Gu@ z={vUXABEmiURcf|+8Ok)+dPzQ#Tmxzc_$O!DQr+$I<Rrkf7 zBwc}!&&-XR%Qb>l6)~BzgwDPx<73;yBe=$;{^r*BBP>&Dz4Uv+*Z*^DpX!y77qTWh z=h}l(*{j=gcTMjJ(|aw{p}9vdEX2~Q*=tpN;d$1tk2p?N9zB;X)wFGHn;=i@ix^km z9;VgH6K_gQ=a|Xsd?7A|zvHTu*OODn8k@Z$3pPCJ>#OPzX4`bdo$ImLtH`|;=N@+3 z|K^ildVi<)f(J(*Sw4KQE{RLZ;-E#;Tg9w*7UH&ZPbG-n<>88r_}4xtPW;czt+q9R<=RRtVd#7mzjKiq`ST3lzGuFLk*so z{Vv->#U-2W7#s{p>b&BWxi0nDW(~uREwhULIDJds-Bz*vO!(&QMJ-3p_9eUjYJ6IJ z)IFlt=&RVBNjf*<4USzGxaz0it`m6QT-O6!Gf%JF7Jf@XtmEDTh5L7|l@=RXNO$fDKci}_v-&e*ogiaEYu4hOQ$2T`Ig_&b zS=0fZPpdx)L6g$W*RgC!2AeSe#rrKwUR9m-Q0_(LJuP3`73l~J2FswWl zEp#I*xb^0hwP*Jp&uzQ4zM`jia?W}U74v{gvGFrESj|w~cY>Gy$RfTZmP@I#xsM*P zEUxh?|8p=~wPNbARGu|~Z$GownX+2!kci&g_el5fodqjjYNcPYXj-Rmseh7mKd;;3 zL=DrrU0o-(=^OQThHc1;$h&cP;xpaQaEn>C-x&fH7m5jedMz;3DM6_3VQ0kJD|L;v z#l~Kb{W+WYgT{q%B{+JWN`BPie(#2o7X(!3jT5=(9EXw8N*ejOiNaqkjRL@MFwKY z36mD`PVajd7k==J6yx$*pLI7nnBErOiZA;e;-$0vT@uI4Zib9yvh5X*6rC>ZzOtxw zy31-Q3Ei2Ni*~-~yWJSFmSdjNcZQ0PTVVIa5KnRbMQ$9-mH4LI&%a4I*tedW67K$ZamHW-K=t&WA7jk)e zH*#%|o?3fAT-R#ayxr~hwim2hU$a4cLU~{65w9Pe6(O>2oAXwMJP!(X{@L_wn?vN% z=Q78(hW*Y;n_<7QaO>IwUp_OeS+44kyq?E+{){i&);puR_AT=I>7&Z}>dcXC-7|Hf z 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�Qs_!_Ovf}Q428p(s_qC^c zmOfwMu;z!*TrQcuRi>BQID$516crk)arbh>*6?s#+*EjHLD%ZSGJ_ioeKL0<85&vE zK9hJGHjQl#_l4U!+1wvR7fshM&@j`Sva}||OC&D)s}37;x2Ly$Y~ibr*?(%>i>H+? z30QS-meZvrj}4DjDf`}@y7MBJy6oofqHI=bBC;|3-xgS`%6lL+O@F$;5#(f+eerkfSE{QmrmQ%on|*M@uW)!~ZiJ&@5lwbtx)(W`f?MwGS^cJf0tr_nEs`X7>I7 zfx^OPJJUE!?#^5EX@h%=&-Cac8CQ6BUKhAwZ(zBE#U!HS`mC4sf+tt@aC{HA-OS{( z`!h>m&6BFqwUt#}q8;*+?d0$5TVoaapCM+=f~+-WwLk8EHqvSd&7S-|Xgho9(PxiO zub;%~8h0T4cK};dQgg3fuC}RxjC`jPtN65iX@w^mr)>`GaL5UM(emKM0`HzfyveVE z)34}l4i&zzJ>k&qDeedRj~I#N`rZG&BQSXP`(W&&ewW&Mx-B6^8RoOfD#+}&n7?(MF=(uH+KCl#eP z&lmIz5q+dr#Vc4SHuo4~@aX^{hLme3drd?dZi+g3KVIqVJMW$C9=7j48kQ~WvWR<- zGrJ_cduq<^ic;xG4^#@eAN4%i)tQn#JN!Gxg-sj&9(22L;>N)MhKeQ(7BX;~R>T@LOo?v(%BrJabeYfFUG}?_0oxAG#A|1# zo+(=4u64M1l2nJYrAFkL(3|lp)_y;yZJq0IH7@RfhOoqswrP@$OSUoZ2)U=Y>}ec> z+|8X8y(?x_wtcHh;IXLcoXq9Dq~_q_{Q{?TJ@-6HiPy>9o}VIV=OdV7dS~|HEB6~MPkM3plz38JtjUvKe~vcKl&N)%*T4 z+&!ox`_@i!t4PwD#e2M6w4dw5`knG^3wreW>n_8^|Bl|w*~TmT_mt8`pY)HfO#V2B zg;}!u07Pa2`^zFcz$+fFjI=hPT$Q>-* z>-DBNx7FTgk?*ou$!EO}g$rA+I^VlLuzOL6VeN*Ms%vf@xcI9{$;0I9-KL2 zkIw5ILOM@luL}$8KAgsVj^~ft4}$>fnX0P~?yFz9*z3If8H>Cl%-{8zx~`hfdX{9c zqI32UneLFRO+T(YX_zK*P-^X0=?Bcmiy9=aZr_yFy5p2j=bHE(4`+tk9*9;io87JG z@aoyRKE?(A8A7(G@CGgsTwo)#OGd478s{;;-BV7m>76-pmSyI}G>55EU(P+ixL}078hY}2ff;A?AEy&LH*Qg#^5kS-Bh%6866HJ2UaaFWa9ouB&Omnl zAKfgKOIj^Vbqm7T*zRiNe`cC;ZBk5#%dH>1u^VpxX!D%(r#owX=zj*~=S348=Uj1c zNpU-FmK3w_;yPR339|3_nR?^GV()%?{!TGvy>FK3vI$R{YoZxu$m(?$eCKcopZ-;3 zm3eD$#LRZ3H;W&Io)Tm0+0?@Alk9Hjdt*G`!;I3f%oHL!{(U40DXs3eIVz4G!W*KRNR?m(B4qG`eeI zAk=hgUrs5*(!l1wuGP!FCOdyT3XKTBCP#Z)?Iij3pD z@;0-Jx`n>i7H!}XI{J)TSJD5oR%~ujKKv*PM;We9|%}TJ%ut(gNqh&%`^|I9VE{ z{cd14DeOyg>wz^=m5q|_6{Z4fldr7H+1bFEykga=6Dy26)GXW8{3DR#dZXnUfZ|GXsXzjo6C>>IeL;ItW_rI-d~r%$djQS z*MDD;mU>ce`Q0SS>E4XKM?bZ%*u1;FIwwLbpt@2i!p|_t-Kb*6N3N}AZq}X;r)@}5 zP*ASCKEKd1_58fOxiixgbKf6Py(N}wu`BzG9qTR^c`?@WFJ*Ty=CA(BcGGE#-hYNO zX^gISV*Q$znR&PcUQsgOShRM*!-$M*!PyL2Q}1mryu{0O_u=~j)|A-&MoVW)dfoAf zdir!hqi>E~^RQ#}bS{xq(K9BNpSXK)-A((rg%0_qnP(Q+Ou2oA zWkKklD-K1*PTMM{8N^*a9`_(XQ+Mf;weGCb9&77A66^4~&N z(v2(KY){9WK@t%=W@ziKH4Tr4f9KumT~avBsyptFz!VqJhRP`m!h$D!mYcFt%JtV3!P4!l z4_c)TUVS9s=x5Zj$%IwZ(qNr|!0Oyx=M5Ny4x9+z>GUM*$g5!2Smm@|s&}UZOYPVu zvGCsenF-vsAK9iH{iwsX`m%)8^Uo3s6ijAM>xweb_bIDk?CSW$_Ui5t-iJ$7&$Q0S zJGcA0!ICWn*RN>2UEKQnie6~7fur-R%M2HE{xc*6#E5QMw)En~D+_M$%}hwy@Fd=F zAy4ld*9gg6g*6)5D?(=$9V!;OcJW~SN-y5D-JNa=Qm4(?wX!4c{pFpDUbi$kL~S(? zy24ohhbO4Zk!w$tB5T0?qG=mzU9aCMtL~J)qSGFGE`j&{kuO=#EcVZ+J+wRKk(lLW zQK{M9Z26Da!sjiE@wv75UFaXD8)9y+rB%-rIJIurKF1~2X=yA=l+;(9NnMU{{I7)7 zw$0rsUvq>hRQubtSG<`yY!1hk-kRDPy#3!1C6VXh3(wUalw#Z*`oWRwdH2O$*9{Av z2d;m{a;(!L4*zGEP|#$d^@>rpJ3=75=cUYPgY_#* zulP<4*tPIm57!>4e@bOch6M>bb@S~OC#3FPm-M7VJbRYX3df@}J>3s#R>~gW>QDQ# zSwC1e&qg#%r2L&kOSp{v+rQqDhFX_J7sWFg9L=~LDpU{}!~cDUiP@!e>7<)kg>#Nq zHs*8xXV}zSuYYHWpO3I>-m~=OWiP(!m<22B@m{@p(S^CSM@9Jjg{D0?dw1f&*~|Fv zus1wzVP*SeZnkiq@K@b-ru0b@7tPUowcpSuHMGXqB=3uC`b<})CkK)q@7D=v01tK&yZ!nEgvEM@T7S#v09+CRHQv18Ml zSdyB$E4mDHj^(XVOq(8Y^gvXwVlLBOrYCuO99_FE%}K8R`6!4v`HfACh@jD#K-ML$ z{~3yo#a{ZlzN3vv*wdyk4XNIvmiSUIo!yYy0tVv7kj zd?y+`W}GWI-mvP`; XQJV6Cc2u{x`@?SPmA)o`n+E-)L&J!@2SQ)!+Ex@XX3Jh zg$tQQ9!5<~I(p5hO=f?igf!C&nZJ%c9i>OA3VSzmS8)j!O$)84yng??&Ydm6T~lP5 zic@wlSzie-`eCT`y|sFa&8YyJYZdmN_#B_}vgk2d@A=i~>~-OD!NKYC_dOM7RrstU z(&xF);=(HtFYP-8Q9CwVcz3)b{8^y?4)c^!?@25?7j;7`r^*|Ii|fAPSZnwwMO`H{ z?e1x3>*l=F;6(yDso!?G2)&EBJ>Te`L|7a1=`+$bzV1wU5vSP&XI6Rh&z!V#n#skp z4imSW2o0z&U@&beu0L|Vw0Uv;l_U|q`a511noHXGe@+R!ro8I*p4<+f+nFi9I|`Pq zX0Tsu^y{wCiuHGvHBIlyRlJ_&V_huXuqe3w&hFJ&OZA?9JUKD?^=A&DsS(%GZCGd3 z82E1FUG04S%;I{Z*X7|Xhk2Jyd8gRw`!QZ{R_NQ-`jthu*UBD>Y&=(Q@GR?U{^=jB z+1|OKw-mDp%$UU-9H85m{YOl`iSERehtWVp4%SdM@YN9$UteEt$N*G`w-%j_#uB9`Dk$ z58u9iHH?fCJ+_Q*XVATOF^dk@Jx)7(V|CK>46U1g+!~(6zL};_z2mc-_Y=YO%{v2+Q9cyjL&w8O^?>&qbD?k3Iz2Ich9Ulgn%gsj)2`5brTQoP|?COqQ z>+<<40vv8inF>j=?z+A*X<^NFz3HkCZ?0;HYw9-TOU!$5f5pq&B0p!$dh6cGx3iz%y z?~wZ}#hrTOy#_I**Pn_PqzelDJNK?q4m*9%_Md7X zch0<|qk1LY3!Zk@8wTx9o;uB7Ve4J*XtA{KaSGh2Hyy7m>wWK6$k%7FF5O1-#MXUv z37uD8G~8-D_q%WDgQ#;~{~kBf&$ z@6VVxX@_C|*P|D6qk|S-G}$@r=dq-R$-Twn#tL`yH#- zH1qywJ$m)(>LaTbC2n|@nVYfw^N;EClfJW^xIKHD5?4mS&aWm$-TUu|1S|HlXzsb^ z|NRUz(~Fp=Rt-xeUYkE+krP^N$`r>pQMEz6*;Y7l#i2RJx>$GYlen3nvgHwbnrXhx z*=_f^s_&jM{`t!>hk8nz^j*_DcP3cy?wdUpQKF!26uXgphN6+Ev}* zi6O!B1r4Sp@D}=a#eV1ACM_u+|0(-)V%|p9bq5!j>pUoL-rMUnF^TK--=Y?ErMJh0 zdQaQTR%q=qS{D=fGwDXK({779yeu7FEB)-eZa+K!)oIGr(DypYJbW5I&+UJ6WXgYr zHx0~!B`af6pV$ACIncF!#RaaM==Vq5-bDM)th3pAfVU?!AYtRdvxcF!12z_I=WB|5 z|50*>cop|m#~iVQkFoVP#IIbvu`5ZTTH5XJaqBtv&5vXz^V~1IcG&h7~L z%C4>6#&^mO#c5ei4c+uzY{e?w1BU+@{AW+!P$l$A`mD|M_!SxrVQpJ^V^@8Z5tY2T zY)3<^bMHZ4?#0Io&M@5U=uuslANY!8W2N26;^}`?E!KMVq#n!26P==)_3Pvj);cb$ zS3Dwmp_3kPtk}U8adT?yRKcKFspp0tG_2p6g(pW%^}2o1>k)6j3|~Gafo0LVIc8qk zntA;Azf-GbMlAo^xv6=Up4`OsJjf$w(4)Wc*UcD zwO#z9Xn6iMb06pOs*iypu~p^f2W1$uKJRe$V$4XMof{Zi{KtT0mz_eVPQ`zQiCWVH zrnG9rUN>JkDg4m3T1RK+6}sl<6k?SWeRs7N6s{E7!;nupiJ@q&4rirzw3SAXjr^ch<6E;aQY#q3H@^pMXjB~CNIpu`gjeGuj{gw%C*@FB%(hpjr$~qtyXdJi zbR0dBv8{5u%9=&DBuv*H4Lc!pDE6_dWX!1}V@>4w`j^t*P_L72Z6CX2I9b0)!6T-u`;eA7S%1HTFl0{>FvH zcmFvQ7Rs1*XMW+LC0v2IUqZ6Z6-fV!uJP6m=L!5N^NhFS?)*EY4~;bJ7Q7Iy40&|^ zh*S6LgGUZs3^PwF{gGP0%v$lE;pRHF53)P|9u~}rTv&Sj=PdqQ3pch+rV-7W6V5LF zs#UXGrsk&DC#9wJCzB7v&Yu+bn7`L~%f*MM|LrIUUN>EQD$j~&skxSW)VQWGx-FHT z!6Wi?PuYy$(+BZuI#0@1xW%2Jcg6r{^DkW__e_>V>3`u9qh>{h$m4RSQEzC0GxyH_+Ror+C}T%*a+QHBcj=(7zxvjB%rML8!wqWwn=S zTRRwa75Aw*oTw;$6nZVO?Cp+J{gKxjgCkcEX%%fZh7isi+%qY z9zZPw+*4$9PLPm93^Xc0Pwmhnvf|J7)ddd^EdQMf6ry%!V~l#zH66rXD$+ zYcriEskwPcDp%3XH%F8LF3#TZVWan2uP9!PW2!kzS%WIp)EG3Yy37jSylaMF>fJqu zu13z){Zo5vZK~I|M`muX&5vF=;QgggUujK8mViFPi;#_tt!d1g+TYe2J&d{YJTNLE z&0*@sqw9Z*=h|7duyT}&7qGo8;#+-WYpP?(uDXSRV!cNh6y4?T#3k?s=lGaeC;vU7 z^||DT&CcWAPx*omc2Rx}9a&M_8xa<#;PDO~kUYuCZDpZBz%{aY%t;DyYY(CoTb zX{Rslic3(4i_Ck#JW*yj%Q1%g4B@+1=57iV;d9E6sg_vVBYE6tlE;R`+5euNW!8=Q zm&&Rc&A05q%hk)?|LV`?V=tOe99nw4Ghor_ohgmnQlhLGJJPjVR63Vu5GBQI)Em}d5OgT-ts!oQmw3JvFuxZ-x>O`*=q zh68SK=DR-BhjaT#$!33-T)^DUeEyyE;yG-ZYs%iCcjop z-E_ljYORB#!Kcvce;QV}zPRIA*Kn)aZei`~fY#KI;@qsHh-A+D^P}3j-H!eIS`g=$ zx5AKxHS>_b%ETvY!sWYu_D8wzF4Yh_Rekl?rYRqP^_|^iIlY9n>D9djf-?*&R-E2E z`TC4&yRU7LU(tB#ysV>2RFACTO0%VR7Arkm_~})QfL7?ee!=i=j%ANky|ejegbM6l zS8606o{`fn+voq0)#*j_<^Vy_O1><9`~HpCMBlW_Ffq)v{r6NL;LzLpcl#dX zyU z^t$&wb2s5hQq|eMeP`H$*k`KdUhDdvs;=ECHRbH44aaxI@JMhm=YBrovZkj<<9&fq z+q8{moZVu?XFbd1J6HRP!FxKNvCdg>{?6Km9a|Z@=~nA{#j<71^X{h8ZdrYLN(;7?Uti;^xM=s)!x{l4GwT**OBmPR35Y6L{PBEe!-A`o z>pLILe`LiPeBQqAm3UUxr{dZW)ezHlk=YuB3xiD_Y}aP@Xn6U^%IUSuS1EzK6PrGU zi)0#1%+NME@N|F5$)?uW*YD4qh%C!9b-g=hMn}Wqi$Xd{g02A{Ty|&g_?k6?K}&mX zb#mubr)v=*^}>NUQ)cGZgATEWEQ0Ph2j0@M=!(sbo|C$tQm*dTeA}t#2ZmCSkbfZpfBX zA6Sbc*2}o?_NrMuRC90&&0ID0T|~w&FZC$KX-jyNNKbnA|M7kXm% z+TQ$k&paDMtM|P5&rmFTLf~Q5)K!6PUpo_WH@EBTP*n@pa+}Z{&1-kF^{NPaZ;hL( z*TJ&e{dZRCamdYk&=4!!{!VlUU%TAHy4lPX@q+P9pLPbDo=$!Avr%|8Ps$EevE_Y# z-Pu}od00%j)?LthctPY$lj)QcbU~R@c8_#-Le0?s!>py^DM>S-H@aX>L%&e};fxI!~UTab*&_x9D+q$eSPE zwOBjX%xvIvI{I0A>SX6~AqL%-j{;BV9p9%aB(N}deq^K4w8NM00y$%C+cq zo+{Js!tSZu6~VdUGAlPc{HM^tZM#{!>6q8d+2NB{=v;mHpy8A(ySR=B53jlA;*Ju5 z30q^7`F{r-4LNMyKYeHE#^1V*0@oKBT29$v8K<~(V!dXCw_*DSuZ`a=?=ZEVEdO_9 z>FU(GXAGGq{bvX|7@_xbM|lwhpGDN;>nn@P zs_xaEO4w#LqsC!9&xeDtUVE%|PW@nV{){w3`LROY9buN8ViQ+sZT-B`X{Bz`Y&Eut zt%|=pD+9L6oK@f|j7$@|;04D=ua23{gHEl zy+#+jLUg8N2jtkd_+4C>kR7OVHpI8!r{cU5FQY5Ex|^9hYu-N+kvhL}iXoevLQvYbBEk7UBTeZ{-d{QyV3NngQa~s9T`)*g8c(;xF(%izBb8FFyq5_hSN>&R<>qI z{?XGuw}_obXVt4v?b3qSU$1wFeRB%>6Srv3s&_{(pV=s~H1W9mXOUIG>vBAV?)6qr z`(nJMXFa>#j)h)xw-#Mponu%l{$10J&A5K$a-$92Y8t9xQs+&%C!RVd z@oB*VAJw{NwOe!KSzIPKGoHD~aJl@5o<>pm-&3NmH{L1xu=VL3TP>%%@j>6q7z!*_ zoVw7qxubRVp4RmODvLg-)p~ox1s${dm(U$1SzUV|>E_vO2VVq*ed~-_WSC3lhF_6c5_t2h z&s&Y9eW^2rs~Z!pnJpAhX#DLo>tWH_f3~N!wn!fFEim?)DwRDsd;OWE6J&NOO!J8q zUAfdTk!`coGdbptYaDBzYtLvZ*v<4+BiQfW!f6+#1~A5YNZt`iIyF6V#UTLiM_5 zzEWO93X@6wd(>C8cj58EMFER$q+kEcSg_b{l~Rep zBN?scE>@0hi`NL79NDIA#I{c{L2QNh(MKmjx6F9r*qoyE>S^M}vom@bxT1D!%nUJ; zaXD)C^^eaw{Y?*g*R1E1U=)f>OWnMM_rlxcmo2Zp|2zK7_C|AbbM&&Fzur!{HTFkr zy7%6kllN)QXFYAHY4zGe3W+>=GkA~kCKmH0X6%ugE^fQ&@FUY)Z4nhNy-7j4 zJ9c?%ZOW2Xz5QfYTEFGe67A^QvZ?NWSoGSCw?`#d?SERO{z8r55n$ox{Q|gW3 z`Tq?3s=J=WWW}0#j#jT&VHN+$XtUXNYu5|6c0_Z8y^%`3 zc|E}OfaN_UhbC9?F{j zb?4$^)?S;XX?AI*>Xo%2p=|#dIy+jU!lS4E6MuBxzR)2mZ;tK3i={DVgng5gG`8`b zw>fHBa%)SS;!F*LVE-d!Yp1)v|0tcJ=`nXlL=xMSrMxk&P3Chq%@urUbfB?JdjH)s ziOJK#?N`m&!j~plcJ0Q;nXR#$xgl#s_k8=fVrtfgC6U4IdJ?wAj)gD%74vvnO|t&f zzwtikdS-K^pZ3gxZRLetQP+~$4{&vzUN|eq%+!oe>F0O)aIdX@;+fqQU^?sH zL*@gl>wRh%EI;zC)!bDoaD&rH?10AFPw$VPv0B-@ruYcUbl=I7HBZP)6gi5v~f!T}?Mzo<=%| zNH3LV%sX;qX)h~x=ajJ1g5M@BQw(5zy#COi({C0Oy;5bGefIA4oe>V(&pzzn2o0ZG z{5nT)no-2sj|{!5-->m`2Cqoawijkl%$GkSt#{Gk-=m1&ZoxabjC&3ojj*=3BFeFN zTB*@>PuI{8&kP%NQ(Xg>myHuH=1%1f;FU>Z-F{MA@*`8))ONK$e;q^^H#Y6Kw{T~3 zgAf0{WlA^q>@Iz^RMmWG;50s|RkydT(q@p_aQ>uDtG1>5GYjeP^f)_(3zB+;-=-Z{ zY|s;<=ydFLfzCYk8DWLYoXh{YZeZ(Lmv}&lP1E;}yJOLdv>zKQITNyuGvxFveK^NJ zF-6?)tanNDJFQ0P>w&zSRosW)v98=~<0YbL`1uakD(<@meCt*^%Se6~Xg8kr>E1gg z;RegI2@MTv(q*<9a4o-N=`rV#kiOI&!%OF4l0+GF^z0VjdCq3t>d;X!y-WPg{;YjU ztK*7|B;s9M&m}Dq3lC*KrL6@(No(~AZDXMaci36$7F?Ctdrqai%TB?$@+(_^ zq|Je&_m+jST+Ir%bt$jtO0ZP6mw3C!@y7Lzq`;}cXV0u|TAW(Q$Q`L6bZEx3WgDeb zxi*;99MzaBaeotMP`Q)+Gp^RFA=5jih^}{Sar5PTxYC1dOW0Qtadp)u-B8Uf&-&^j z#7;0*gve|?6&qSy-!;9(d7@~a#KNV$6?c}+iS2KbJl`5B{h#4VdE)7RKc`O&O^xKt z(Po(O`Hlgr@znW0^%->IR-OO*S*}5E{+>ITIR}rJSo~(JIVPl#wqZ?_j>Xy~im4jE zVjmmmU6VXsZunlXea^wiXx2mf1-HJ?&Q5)&yEtI!>V2sz79X6Dq}6&^UHr75&6?$$ zk7B*}yiQ2BFzn3w#8w(;DB*iCj-}j*%_wCCPuMZTLe_*eBAiZB1GF~Y+p5J7ch0`o z=ZANgWnbfhEvJs~T#;?qe(~QUHL36Q8EYHXopW!C+!zwSKX7Zf;*Ow+s|%-d# zYu!&~#;E%r+17}kxFT@+@xhKYJDnr)PPpx;V9pT|I(O~aQm${|0bQqf))z1;J7(Wv zYtDH-C z-RPOyx;l5hK)2)8nBq#$Z;BiK_9+-?Zm2hUvLQ@6=$h7v9>ENgnXx=6s!_YWTMuW5 z1_sY(+W#)#hWNCIE(!BHi?kJ8>-Q}RJrtbwpW&>_&9ur8l?(4yo%%d;j%l7|)1|xj zd;c?ZL}|FDOl>%D;&R2mhab6FZ?3uj!AF97lSD)6pH(JpA`8Oy8p!pgTo3BbIZ^A# zyxj8P+2a$!Wd$#7DiPI+uaaDTgtbYmAhEl4)1gP-xh1UQeeP9CUGJD8wrBd4m;mO< z6S=QminBP&{lM|j)Z_B6r>gA=H#)2%dDkapdx@X!YZ1o%zm5Bh53JZwwB!06?ihZy z_?f{D;iHPauqQYczS5A1R0qH8UG()kYQkCU}9!uWMqH?MkW?kHg;x?|3?_486mQ8IR=noko5ms3_Q$? z3`_#d0t^g{UmcKC3|c1hTq||<@7CeM!8?lQ6u#<{j;RVhTh#AR>G$T{owf~M)aB30 ztvYZXzx!q8M_6!G34C4??=P3S?(4&IS-Tsb$=7?xnO^v%@L9IK#%6!;o5RtY@SDQG zko9er@vL7jH}X!)+f!0=?)5~g`SbJ?Ur9>bRDfu0!VFW!{&OGiR$hAXVTbXhZU6lD zo9~>Ldt358zx9iA*Ofai&YQaB)B8Y>?xfV0XU?3J`v77m&*ay-A=mZc+?TiW3h&S4 zw|{wd@1E_iseee-Syo=$u5I%l86wJWQx?0Nn8;rct-A8m4%$=$T?{Wq=U z@%vA+*Pgujvasy!>p6XXf9Gm@?zlho$h^!K^*V=-TL0~Hd>;GciCpcaoX_XXV{gCl zm%sCi&+%{-pP2`;lVEI_dBw?na_&fX5Ee#&N`>Fb#+d(*_vag zv%g9Gyf2;WcU#PNbyjL-XYb~$+hRV;%nXX(rtbKyliwa!D?Ic3yKT>nxA)C}nTtkS zRvg-8Kd*cCiF>uL^VFFxN4Di=-7>qCZL#Uv+Ks8p)XZ*WXWY!KI~;G@aXYK*#-?0h zpSM}J%zTb6&bhVi=w!{_$%Z*mKmVqtwXS(pD^h;0xc1)qS9%A~Yyoqbxw$7^zjX3P zjd#6f$dAZ%@-?y{#m#((j5_NS>bavRqP1lxg%w6m4b~|cY@3!l2OuxlT=Z0M~ zyOngsFE={rwojDVnPp~YSLZ|;&A4eL`&@au?Ypb7*~zgRmhSxh)^h&(HP>Ib2Q2_w zhDsFM^O`N!+8|b&%eyrwzb>M>R$Dd z=T&QWx~lCeI~qFW@zXC$CmnxPxhLLp?G3wnzjrH8UBbY?z&!DH#@0&X%D(hzEk_JG z!)GniR!Z9Qd9T=Z?d+xB&c8I9{Wn(ZQ>@$yF9!qTf9ZlduIKQ^TFonX>%hQUcTlWr zE}OnqL`~WKhsQQA>aO`IzS3mMqgAJ}eAP`ur~H#G*ZueY^OeA}G!>&)XyRR!} zc|E(dD*3|tTZE1wzrtuH-N_JEf!Up%b&wO)RIBgdg6$(ExTzKN5q*WG=W^`-Vm zX)VjfWx*%1w?T3$llmMh{my*&na65RPCD-72%~viC-_ie0=jKi_zjm1D5)rb^z2&93?IFMUpH&t3bvmp}GcSpwKJ=83P{bw9mslS^P+eYMm= z=5?va&)cWIObHiTwPwkxO|u_}ph70d^=wx2|wD?G-;V&z* z*LBrz#onogElGd)?b|Q;1-HJS7LaWHj(0!Bti7XkwB|oUQk_-(w7Y>5x1^P=ag~|Kf+DWA7%wO=nl0qT|Jt@VW%|_x zH)fu#L&>*{pMJga6OO$8dPi*i^jjOxzC05qG^6WO*xeV|J6FHbiofu41CkAFdf^7^ zJtyn@kmz<(4yk~N`1!Z);?0-EKGhpi zkkl}+AAa9acz3$`^*P65k9~7ss9b07d%D0@chSbx`!m+0n{^#4mfQH`@AL5X3w+Z> zkaS*nxw+uorxjCv1WYp))KM;7_*VOiC6n9~BqaTrq>?Zp2EP`{48$!Gb!1e zh_#h+T^}RP<%$~TO`m=<_eE93+e)O^V(wXf`t8n#4>dEKA{-7?$3?Ha_AQYQvy6JU zdtTPsc|sZwep_owp1qQqY8Slzw#3ZZ_dEy}Fv~nF-tgHf-j-FtDI(X3*X+6T3r1N) zB7&-9TzxB;U#cem(D&;#H|9QCbjo2AcRzs9XsC669dD*p7=W_L)Pj)Nr z)c&bnY8xE=_4$n>zg{n2{rPQkTynzoo^LFP*WXsI-LL<`@}Q1u>GIpk=5utX&u++v zm;xi2PxA*C)INN4Uv{6m`klnh0XGiyJZw5EJKy_kQt2MM-KVN_I*`|HFd3C*o z+$@kjdHV&Q{w}Yu?4KWIbN=;<$F0xz<|KTc+c&q*aYO09`t><%dp9&Q?H0C{J(6Q7 z_eb(-)~H7tEnaPL-u*}IdCfyV6F%FXJG;g?J?)y~maOB8ljFC) z{E^4}@Wsj375^E+Z}ltO{RJtjQ} zq6|OhX@2M~wrk}~dg0B%zUZ6H_TbAuKX@T2{G2n(I!^6l#O|<<5ozydTfV4@Gv55D zT48ws!m&_RR@t3(I-fmF>e@OJIR)m=vfIA**vb1pZ=^%z85kHC4?TQWQd_TGu_muL zXW?wuWXqFZ{Pn-s`7b&vWs77hL)Vrvk1wu*@f z#+$w|cRp)Ax8iBhca-)Xi$}l8+np!BSx$@7`Rn7d*uux9^K`FW>%}8`1PqXz#JJ*f ze!^$FcI)VfzVCdwTYm*^w)j;)XQ`p+&GnbJ-?M!km%R78)NCXjpgLVx|E%i9rN^h; z-+s4t=j-e1MP7V-JXb2>cHi^vZ&rW4-*G>OFdOYdeLpPIAp&iaK9pFBE}|7wx8 z&Do?)Q@+%k&D?)?j(p{l-;OaTg|U>(>G*?DyZ;>%mb~w>sAo+^OI2*#?#i&f`@4Qd z^(z-YTmPbKdXP8FRdUt$e`enM;5FBF%YO!EVfElCwYI`1_s0CJG~ZHKy=#wa(!Tkf zh7nViZH)BGShM6yz1gy5=U=e%->LMQrKUYiZvDb%zWervt3792Y%3@PHdSI4-|}f@ z5%aBPd#AtT{lPZbX#33Dk1u}>n6Y^^r=y^Tg1hOLxb(|kZT77`VLN^L>h7gyPaii( zu5Bxt*ShqTFN$w$7JI(g=Y0QJvP<~ZrKVlaiX+x6S+sdh`5fNT^?&*6#lEgr-&^Os zGwZzP>et8k<}YJluqxceMqB81|Me^9-jX>lBe4c-84@8=pD@kd{`!?ao39nG z_FV5L7@DfFYSWzjFSccCck$LlXXQ0JX61aHclh%@cfRu%&MUpLw0s-2ciuD=1_p*h z#xeW4)BZC!Ki~8H>HdrNGc)t%C*99)U32T+i|tiwW9wVI&YtKD>zHCJXsfnw`T2{N zkAG5>LiaiYgUorKY4-NX)ypST_4?YT&E2(V^Q6s-o>kdJhn<}A&M!?@S}j;Q?V`n| zqK#`qci(N-%(X1rd9QlQwe!iX=U*$^t><^m{$^~r=z4C{)tPUiuFkkwxprgjvdz-^ z7e4Q{%_^O^;ri)BVZmAZ{eFATUGvV*d>Y3!q%eRn`TK8F`m_J?p8n?QquBX}nRmub z6nmMPF$dJLH(R?g<(9hG*+t2zYopz6-pV#BIsbCa&DYAgYoq;s`}pZ@IdbfD)VAKu z;I5FxrpwW8=ep;fx{>+vrI{>$>bYmx-`tJcU^XGsB0uMsIHszspa1>qcKP{*`<*`Q zYm&>goH6&zT4C$7U}?3h+jM5T96Px+w>x+9wVapJFGp^^=5{)2+uYAt=XAHO&WX%i zbL@1~X6al*gQ;`b-A_OJy!Y(d6Azyl6t7xx{l>ZMeQr0~i&fYEkS;TsiEJ^L&Bs0E z)t9vU$!BZNKD+MTl8{lAt9idP=DtVGPrkF}J;n1EZP>N*gXUMg{FQco#Rl8o?K!$; zYsQ?&+C+qjmYkoOS`}saV4H2ytS`T_ zHP$dNgdLjrh3iJmvquxZh(>59hPFT&)=0)fnLIxGQtsE(yiO^dS)+d7i%%}wgtvB4 zdo^EJ+Vdl~^q|Vos7@Kb%Zp^}^201-_MIs%dx27(qNyEnT>1Y;7)%8in3xzD*_oM{ zSr}QELA44C6DuPFo1n0WfwLAscmc|1I5;CAh@1!kO=6UDDr{mTedG#O1fFX`HCF zWn)@f@4Q6b89j>|!a83^^;a!iJ-1@gw&PMepMA_by743X%GP|dV&j=*r+d?myw&uGP7+UVoL^9XZQazFf-B_@S;t52%& znI8Un>#k{Q!b3g*{Wmz0Myot}}y#;i{9(oF7)e3xFoJPn&%(-WrbYl(JPw{zuICuwKg~gO9PV4NYMoZ0395&+bFLc@ULwnm6oemU|%F@)p#zv<2% z7gtTzy`XVfe(8nFq7GJ!B2FSNrv~nK(-GrKPs_|o$=LPu=)2>g{U5ac*{|qknbpzB zn>g+GiW|*!#yyWOPHnnUI%|pX)Yn&ICarQSV&Ymqe@XbuREKr_VUvYpm|}9&b_-i9 zC}dD(_;Z_wvtrt%;ENW^uP90+Z%+QhwZH$(e}*|l8~c(DJ6?Ln^7B7~OLrRUwOKjZ z3DW3CzY zB>Qx;^A;9sl&`684FCA|b=#*+S63yP+8SwcWt$79pV{*z>{{&+b?1*Kcx4_1zPs_C zfoc8Y-#gE}2~VD1zu-`3$?l?-J-ffj-E@+>x6)mxOXvjmjgyMK?wz`>WyNb$j_qX1 zI;-ilYo*P(?Gx2@I=@y(mpU(I^|-%2>BT0M=^_qtGmjZ}%$QVlto-pQyDv*MoCW%0 zJ2ubIi6Ls% zRr2xGrlSQxZNYCkX1W_rQFM^lT1#$TXlHbeyl_q_<(Pmn`xKS` z44gfwKQ1Q=E!)PG)R6pEe4*Hct(=c4-b}Jk(T+T6!~BxsOE%5j}g_3*1vu#CfjI}w{y9$D~AP+?0H zH_$k#v}Z-SQ6JNFut-_rdxEg?R*|c$4Zd-U1vB%# zlM6j>o-5B3`4MYgsJ`j!!bsL_$Chzb+}!!or%A2vr(5g<=_$#Vvw96fH+xOfj<)G{ zIL7qZ+AqGOEN2GiWlh1_G$ReIwH2D4s{a|hH5*gpn-kwX(O9nW=1aumkcsVw{Y!ZC zV>Y}kC~!R)Z!7lLy}vZ6+Wy1&q$51X-Uu@+eA}NCd3TA(!-_CR;luv|=O^3OGTqba z+a)G!+tpm@8GhThT+8-U^tH2#yq4=m{*`Cg=(f4ds;Xv*VE8R{o}hE0Oi@pq+Ws@- zKbX~;IU!W5Q_sbwQPaWYsF&cBFWFNkhO}`{+rhd%uwvD|H7?d-J9<@@-jEh}HLXx4 zeD&_b+xE*zoGbrobYgnnx49P>MZPe(9Qtr=`3XmkM*j3TgGbe#Z6^(7pwKt&zHNdJ++&g?ziQ{?6&PP`hEFB zxbgkIqZxmnf87#waGsEbe%rO^ zf&RlD8;P(Lt*rb)f>jm*IbSyD#rEy=SH7a!>3%>cLgMQE1Fyqm+-&5;Y3tVUc&^Z1Ut|)9e#pomPy} zG8CJZb%=YSIm;c-+&8MVEwbueX12>;-<^9>uTqAnw6g1yv}!S&W8@g-04T2T#4z;IAuF!b=rc=HqS}@ zX|F@FR&`f}@4b0kxasl6C3BtLPdl7($W3cw8{_7yvn@E6b+N74yEtG`Mac7@zpW1E z)@ldK)+?>sDO!4B^*YzsBCXdG!(+O3ozi+2v{q7UQ}){V-b|YeFMe)f?UPqNY4FhN z)|1Tt41#fi3+p!pen0QGZO=Y77cO3HT81$A6s+Ov!5{OI{U)8!F~C^_oZ+4*)RNg&EkHX z&3pOSxblTh&d)EFtv2kx`LA&Cd!d>4)`$HKdH!vmSLL_E@-?Mzo|K2xRsCo9C?9LH zXYP_8rGL93erN5stN3PlJzPI~pLa&*TjzE4f5h8)>(6iM-*kSB@x#qewoRFR<28%L znjhRJ-p!Bs_^xZ|#6bfXDsHgE&F#=(Y*hJU0$sJpVBuc{{3SLJhDh9 zP4M-4eb)P;nn{MDn^cW+8$DJ$dgpR&Mazb1>avUNZ*O$d6U}ej+|G4+U3`r~U1GfR z9PeXme?++Z-geO6cH&B0n2(c!4xc>ZoMekVN4(Z=mx`CLJ*~oZ`f{7swOw_o>o#_) z=^6GUAGpu|?QfU!hZ|oESSsFJDU`TjY;pE!!m@lzY|hh zPCwyN%NLrLQ~8?R_shFu=h-{HHyJz%bQkJRt}C3%+a`W_U8CZKTWUtuVY8QPUGBoR z-P>^e+*6ljxt92?KXhaB+3hzLv9s+zc&EMPeE^g5>06ts)^D0K=i{{ZMLQm9y_*r! zeSW1wvF{IW*PT-y>zC9f_neCe$bQ(qRO7YP%KTaJM-3txbi{n59qIyGE=dbcDdsH6 zdGveX!(7JGwl73dXPmvkW;88zeyHT6H5?N){`j7rb8>I8&Y{4P9G4ef245te6txs` z?9pAd=TeuB+s31jwh~87eyyDUwDXbPyobpv%Q*J@=-Rz(vevDeSNGkM``yd*En`jj zk81M`3pUSrZrgQOUdPE$#`eaSBa7$!XXtf{n6~%EHRJuC%$g1^G#2u_b?tP9`l6Hn z83N8OPRyhLc6oN%jK7DbD5#}rfzY2R8s<{&Ju6- zqAfeGT~&Wztn5-*c+@-L&h!hjGkk7XPB|WNWR~-ygEy8L`K78S+vfx>KizcwvG}j> z%QLha7F6}7PS`M;KO{I+GV(cR+O00Ghxx~*Y?N5A``lEu^FdRMPc3ElJr%pie?=~D zt;hVPrROh9n(Gr1SEyiGH-DGx++WMKKQ6iapF!<)w{|#ZVwASx>{P#AWkz z!SzjnU(}v_e6V)%lNoPAVt(wYPCk{Yuc{#D13UetNy??zkJ=6 zoQ>^Mx(i}CAGRMj_%NiKGx^f7Qwmo$Yo6XD=-aHrp~EkBLE(fXqo{q>x*IE=njO0F zyF5PNVPK8z$<*20DaRw0UQP+y{9@6AOQ!1D)xq-=+25x4J@v9#P?NjJutd0Lq1~l7 zqDhxy9^U!3rp~VW;oEYnzfH#LT7Mc;oz2;QZ~Lat8-jF=!j|4Te_LclbxrHpd~=@v z4D+tlZwt8|wW)8yuE>37XT0HFH6cP*n#HJis`}jKEY2xEvwb>UA1u0?YsFe}b>{gc z-;LJQ-Q897&#b2RYP@m(pKqGeI&aj@w79=0Y^~;!Z;eGSTpAO9NS=FRn6qQc(Zy_E zWj+~292P#Fwrc;(^OJY3Ivg?0ShCbza>|;|EkQ2@)g*OmZfxOQ7*)mmYW}t~2U)R~ z85!5z=k)~1ui7&4T#qHk+{oWqo3`szW@qiN74B%z_ceILIAfAwwUVLh!dts}oxYyQ zmUgJsu5dQEdgsuw{Ie_L%;$PtyqVE%Xxfwa*7)~UtKzx0)~x#dv-~3WqKytGgs&!? zY`!~7;(XQipWo^g?>YQow&IKVx1p!Q>(z<1&$=wc#I_iVuZq9Dy87$>^P7M2{rJyN z(Z9%Z>X~H=rnJx5yqtNLsJ39;-F=zs{^oyv^UrzT&LUkNPi5-d~w6c+7ae#GK+jgD-)t3-@lGaan6-WVv?z z{Pa(DCraASOs?|U2j{b0UKKJH$=AgZSB8y@Lor8PQ#m#DiGgpN( zuKBz4=GuR?^G}o&&vADMoMy6DZF-FN;qZbf>&iO*{M+Vly)vpZM`iO3U0*JxjSZsf zMVCGcKXz%QmXPt5!;1O2^NzNieYP{4d2{Hi?Q@q+`|;+^rrH0jbN*@fI-d+lxxdV; z?xw1?o{zPaO5SBzyYpQEH*Xn-9Mo#QK3SGWM@;G1d0kt%#)B_TZQxC|{k2=Mh|#D?N*v9J!jgv{Fc>oeyME~y|ZP9#q?W^aaTV| z{b$&-ZK|fyq5a2hy#Hh{>)ErTVOcRP8!aj>b)@wxE!)hICet)apiSb`PD}sW^63i8 znszwfG|HBCS>#qV?;L;d&Bu>}7L`k#HU4oaw6Ayj>KNr2E2;yRmRt35TeY2kCF1qi zajj3(G4tg0W#;dW?cMn0Zttg_)Q;nV$C7(q-;~We_UEzWmt%&#$r8sl_oV-42$pTs zUpys2MvCRs;a6)7XQT-D827e^MLBH@*!gRd6k}WAe}=WWLU*nP=RCXUS?`~2p5t&Glp^OjAXP(5M#wS7}AEpu8uO={}2EXGsE&YViv z*m%>)ZQFl_4`2TuVK5V9U}R=u0RcA9@Du}hK^2Rjkg%cytD$3{f>F>!0THD{gMft_ zoeCQo4_;Ib{s11KVrFEtXZ*L~eaf#Bkyoud`X6#XU!wgi#Wq;2(&pmC8+|Lh{=M*d zqUw0ypRcYG;t_2^`8;^EF$2@BH);?U&VF%)zUS~q&~k{rL|;5>AhKxE*Gql;$51r{Cfe4 z+8+$v&XXVO-V6UI$bR9x`I~v4K6l=iDrb*VFS6gIu;s>r#mVz>E-Zd{X}($K9NXrZ zPSX@Gazt3NPP=znbMLf(2mua-*>_n)r)-E0d$*%s;Dlu1&;2RBU+n~$Uo%u&ezJcX z{9&1Kq^WO4!e;k}OpUuZ6q>jeao76Z3BSgbmibKcoSwOzl%7cJ*R!WLB}*M_UHoyT zeu;oQgXmNr2|mTsxh88{Ti?A{r6n8iS$Pj{X5oeq84KsHC!hV@W_T)MhI8v7Mus)r z%&lFsl!Z6Et(Y_4;LVJ?rTT6;@BFij z{Pe4T*ZJvJYOmGoTl}sC#FJiSRdI%Ax4Xi=IDLYZjHMG4EQQCo${(_NFC|WpU_cxw9q}RD~ z-{EfewncxhPMtcPW75ZIWp_SwY}RsoyS}-@bGpyxZ#O=6tdshhnwole$?4fY-&M#+ zBpc1!$7ij(NbviOt4C*ZW^LNENh)i>bkoM$6*p1}lB-rE2^tubd?@VPtYy$QTWd$r zQpLzf)7D$8Zbg3Va@BR>a*;nf**e$ri{~G!bTORC@A6z+=<%jU29MJWFGiYiXZ;nN zcIeDSUQwHyYk$AZ%)A?@kPzs0W0u4{N2}SKM>#kCwVj+*Fvpl%{__2Y$6l2P@INa{ ziFaDcH1|f7{VsE>si~>lXY!5+%gO1PrYAraMH|Nl%O`8~<6?>NLu!zZty7akqb^C{peuma(A3pjzv+rcS;1kp=`|fnFd~n*T$U#BCLG4BJ z?|%v`vsvZ&DkLXoh!`5FJxsWKI5O;3T9VC`O}oOy_s@IK;Mz4!hLwehbMYz;ZEbmJ z&D6;g0zRz&&DAu|qNXwG(WyBP)Pyfj|MVd=bkocobC%EjykGjeOROjFRt^R6n=As3 zk*Ow&nRRCRN{VZ4xyaYqlU>Oo;K&+qIN{r8`Cljdh0KNPME5vOd2~2jGqvX2vCr$i zUTi+e*vbMbrQ9d=p90a2EOMIjocAn`|F-JK#`4SjyVQQo{kv`hxJa{^QWpR!uJm}t zi{^J5&T?HfYmw*Kd-W>2_&Arc2tHZ-sYSr`ZT^hq;fKy`4=Qw@udr!S_=&vF^`{C2 zHpkyh-^(?Vt+D3H-ix!Gum39je}ustTzIoGvaztRvV!MFK*le`WES zIeTJ{`bJu(C|E4)xYEDUTw;avjTIly|J>-_6}r|C*k+aqqO-zOu|^&ZEc0x7(kY z`hS*vf1B-AtC+^CgloR**S~$SaGvGuS;loGUwK>VUS-B>?w)$u_t4z!e;hZyJ^Wev z-SVG(-``#~$kzUr|AVReOrKuaE6)4On~#O^shsM2y`|h}(PH(|-OFQUPjOOo$^Vge z|`=Q_LlI5Tj{l$KTOmQc?3P! zwEaNdvgMQHXXt*&_U>(3Rpy|OKkeUthG!i$Y~B1vKG(_I{`G13Y_;Z+K#mqC?M1I9 z$ejK2pJ7)!Z*uA6kZWz-=AS(H#I%;Px5Y-@)wp=lxiWtL^zT3Tj!AdKe^~l2rZeS) z;8lSR7bOu9$=#RKwwOfjpA{ve6Pm}vU&sHV+uOH4LC0?Mnmhd;`3%j({VjV>DGGFi z?P{80yyxu?(=9wJ#icAgg%_2%=d~X*pK*8Qs#%5B#(mnqZz+jR^iypu2rtlF&)vV zJa;|bl*<^cS+l0$?0&hm^Iy)bIQB1N(p#@hn-)!8uD+k|)TvV^xC>t`eC_76Y18&Y zbN_lA-k}RB^6$(#vB~q@nl)=Se18#ruqR{9nl*Dzu1~!svu4ejm3)yFI)Rc!w?wYrzrlzKx=Xl_}nrYLf zO)K&u`BmPmS+i#C!A0i1k&%(%o6hk)*$+~D?e)P0WlL9`I(2HB&Bf{>uT7gaC0uXz z`!k7Y&6+iv?)r;+KHbx;t*xzK5wfW?nKd#}NJ=lX*y`|#gWF{npN))+jBaoDp8Au2 z)+Xbar#}xdAX#^zzqmLO`Rr=SHKW^gM)VWo6`>bi|E^qp!J~*g5ENot8 zdRJggM_ADA=)w)B_8eaF_cvo`pwY^0MXMH1ntHA7-v0SAep7C)l1dc#dy%8XNzv!e zuEK)~ceJ=J2HchxKcX;SIz=*e({wJQv`O<*zF8SheRTZO0dbnob{HK1B-gE!Uv@2)Mb9YHh_4qaM$SaPG8cD^C34x%Z zb8fKl_QHR%_5Y7BcndHvGBGo=a`7;;GlQpo8JU4TY5)0~1+Alnsmmf(j=d z6i_fWaY`y`oV0M`MTdtURGfnol8c)}Cx0v`S+r@wg2mthn~{Odp6Nfsvu(E%#6wnV zu*WDq@#SpSo^#TJNo98MOf#{jFka2*FGsqAE^`KJuiY?-$52;kmEEp2mjik~@N-T! zy|GaG$-7O_=Fe6tyBIxEGvD3lqUk8Qm2dJc7Pi<;u8nhr&nlOg?~)2VutZ}1^vWmu zC-?@va#6i*p31Z0x}l@t&V|Nir|xhD9guva@<~r5xJBoU?mH z<(953zdZH{y`H_PEhKx!f*EBxImBk)7I(f2Vly-^#iM?|~ZWeMeJ<9y`re#Oln{!;V|7w3| z`B164*wkaQm&?~B6T{CbnFsi6TT?8$O5NP{SyPOYr`M%00W zPj1AnnXA9xKSRgltia{PGTSySxxgrCdvOZiNx>OgmMxLE%dQ$-xKq^JrS+x36p+sK zD^FgN4(8Cvo8slM)c)n|^%J9&IfRu;6pwOyW+(&+eEPw;+CgiIftvl5*>xWePT_v! zxh<`HRh(;xhq%M`UAiZ69cdFdixuj%xufs(C9TQh$+_TaO>+3i%SyorX=WcE(=_wTm88B ze&JS2od8dVs-5UQxRX>~>zo2brotsh5CY_j`SEm1UE*LKfA zQCn2>kLjNmcX}5|x!%{BENOHq@O9XaQnpmRrQtWFlnVTBoQ#Usxe&I&d}6+C_V=u{ zx074f?wN5sboD~(f5+mMZDr%U^Py*j_|0_!|Nbp=TDJ97|J^bzDKAzb8HO^6d%@<4 zw=`u_%8#7i|H9(t{?*roZ<=CodEMET zg$x&#I;lCQt=N!J7A0tPe`Yb>l_c__VfpA7G<*sHG%Ua8*m z?&45ulJPlwGS~Igg|8elT_!hPRckks&Pu$p<+0OAu113smTc}?@*0N{SN~^-doiJq z*)F2%_kRY9S+n9bpWDaB6`VYybg6D)%;GOs1HW|}y={4I0FKI<)Wy!Tdh*JF=uZ+407tq9XGYFTJCNl~kIimvCOT?*S? zFy;eMT43|6qB-GniYt0_5lkYwhtX^oLl9bfb`>r?bYi&!k zY0xjPJs&sA9qg=6DBM!W7+ZK?=Tvvc%U{Cp8D+2b`y#%4b$sJW%Y?~}nU6~Np9n40 zF?*eMIqT~}OD*GtSx2s?txy-03CUOQpYe^y`!{p{rbkYbR~(w_J=3lI-5vAaJr>JD ze`hbdz2Hv$1n!~+i@n-kg1`4HKBZ^5=EbY4jOXv{E!rl30OErm+!m)!&HkHuV4J># zMvQx4|1GW8_D7gLUb8;Js_5uxA$We;-Owq2le$*>l$fku|5k*l`M|QP%S0~E3tinW zZ}>)H`Zsp@)YbP(Zsg>)m{>-vcx@;2WFbf3QT9peH{KTG(A{I{5oSN*`D#r`_dX8U zk5gxaZnyJ%^)b+_S6nAsKt!Lt58{cwm50P__N(+9bFc5x4p?|H;7F-MR^C)|)q_p@ zj?d#3x)OYE(iY{ z+cx=~n*I#ACoZSDUzz0GO>x<@>6NI%t|q-1Zymbl=KN=9wSGL|)~@M4-KzPjSJX{( zTCIL<_v<6u6%Ia>dn(tJsB5M%rHfx;X@aJ@OJv1V?~KT!vejls-K|!|1%@a+-Ffkb z*-_zkf$6h8t&Ou!(%o|7J0qXzqz%XXZgD=<`cva27$~`7L+N5O3v;J!7S=}! z&T3k_6?83VGOOq=J?G`>V`=l_Vf^8wl0x&4Q!nKYzq+}JX;K#NSD9z2Pp5jtJZ^S7 zxQ!`DgIy%*@9FEy6FN{(RX6n315>#I#(F3uDdaF z>MYLF8(c%?i16snY`>Ki+8XE?bwE%1E#Dd+K%{f6^4|i-$JN3(R$I&a5wq3tn z=ZIf4muFI$_$2y##dp^`p@q|ImV7bmoxtVmc=??5t(XtC0R< zLynEJHWjW92~}GCa@FS}E4iMm2skjcF7W#yJ?CDAEVEagD^E_jQTQuRbnOI%l|^eb z-9C9I{U~_v_DNFEkKgQS-JVbx58DgNbyL|@6=PO?Ke#2^U~}fJ$8knopF`!poxeR} zQ-9cJ2R4;M5z+nzuXZY4xwPT6Bxmc|JvnL{z8uoMI4>%*qPzNDj`^jNcZJ?P*X5tB zxkh2bPPt`O%D02NxTQGqK&f-FFH^)!Gg;=P3;szhx!@2aA~LyAFu~^TzTVXj^b%Q( zHeKKTdUZ_5osCVCJNo1&|8Z>JA1+?QneNY4Gihtp{=CHLxhH#?zrDJ&a+#{&uFRwa z-LQZck|%pF-qYQ-xioi{+besM;OVt06M9&@msSd@y~>I9^3;@0E{e_!yC5qPwqx!| zDVy7w(dijWQZwDnw@&4cQY-T0n$2zMwe`qly;GY`pA?OBQ$M1o^_SD*OW%s%zS(~3 zzRJDRyY%X|y=m8q})C$Ov|~sPaLHe9cb!)s$!PkZx9QPN*QG%l)-?GpO5T}{{3>o0ORrL=50 zrom^J@OwYoYNP9ym#yEUn!91auL&Ys!amjhaNhJbujWKy=H_q)PSM*Dsgtr38BIUx zZp+!dKJGB9wpffrpQd)s#Vb-vzB?3}XDGa|+T$~0X3F}|jiQxD%=kSn>1;Q+GC*qNIlm2%Du}r zUM%*=w&l{97q$z`RT4VW6t;79(y31=Dc`OM#cg+9s-gZ;sQQA=!s$lcB}*Ew)<62C zEi;u@Ai5whdBa7S{xh%RHoe?0T)_ue{_Hfi^w_3y7KQw#h>#JqnG6SCOJ>E# zZ^_$azS&1}_teRkl47?PX-=wSlysQn<#yxFwxw6I`na{;x6GXW^vd-mLbD&2Z13(> zxDvHZTX^@++_hzS8X~*c)WXW*AI8p@`b{xdsEdD7VZvR%6|oJ$MtUdKJ&rhMHqAGr zbe{SP(_?|J@7n)(^DIhwilvrBhwcuIM|IWi!p;@FZ&UO4&7SS0zv8y^qsk)-O%^0t zSv~ZzY&_7*X1?mVV((u_`Gk#75-vscj*y z7pADCg`IMpI4dFQY33iHX_xLL-PbT%#mslwY^o|B&(pBa(q|o3&Nj$9Se| zt^z$rG%Y4CInHDB=F4#n*JV=!A5SU}oL-UsOVh67_h-AM%O|Z3aB7{p?2&23*V2%i zOOD>(yzxK7#Fm{p^904;hHd05+#IqZq}aCYtZccdwdo8_Kc@F=fvqWV*Jg0ccb)%A zomteAMK(?^w9ZrA{F>Fzy^2q8B@22I9mDwB{=D3y~ znp1Go$B?=TbD<%eEB`DE+T6R4pCy$s=c<;>xg}Lx z=iG%S+brwtFY8NA?VGh$dqrKzqmY*eC0D+_{76|Tm05Skbiu5vt9lC}=W6h+7P^|j zo43Sl=JgpmijE<la|k$a&$87!j8oJ=WL?nb^ZWiO zGCLWcFMpkGqWip8U{0cO@aCeEo1e@))pK@vPO5hYZ_u{aCI0^|oacCyliu^@Vtdc! z$BrA;E&lcMqXxU!594>wL=}==@_zfMUA}Dnguikb8l{|3{EHR_%BAc6yU;T+mvvRp zQN4yGr@ULa5Aya)9{c6=;`R|A({+mnxkS5#k5a#JmBs$}F1k|Xu<{id z*V2{l&(Eb~H<-pA30}0dww@;{Fu0G$i8Yh!gm6w$bC1RCuuG3CmL|0cYR=n!eW5ak zQ~dVOc$W^Z%T*pL44!N*+q7bxa)`0k?nw7a^VkP7?JtL45;7~~dFxx_9n80I<7=73 z?YCJ}lNN1=K5@osVV~!w6@eMEmR$4vf za`&2)(9;Pwzh`v*JXt(n=j*DRmAxlw_lQ{Y7Bo&T<-N}BHql^;&!(j!0t^xTde@K2 z#jfwN*&Q!ZS+-B()7zTBr?-AAKE3s$`}FKbZ9yxSIdaI&xXNPiNk&;(ZJ(UvvOCMf zE=Rd6-^dl+#p#u=a^%j}NmK084k$ZZ=CgaoA-f@_{+yhpyWO3OCYR5x)iEq`@|&ZS z6!|ntN2_6O{K5w{OQ&<_2}c_~d-uoiiR_Q$6V@M&Pbh!bZ(jbeU*Y{>Imi2L@_Y+D zR=uvc$@%ZW`>vE%Uwb)Cw|dMz&BVy1!5*rpIX7YL?^iiTUVXRSGdq=w?Nz)7cWuks zu-=d63X{BT7RJi2`gqD|gHoGp=FDPKoy8%SWaiG>a>-*+)cO*O+Zx)DN)NAdIQy;i3HIZCgEe%nA>GaqQ*vTZ-GmOKTN_dBtW2Ep>X!nk8U<*rRAh zl)$fxI+sF(3pxAE^EcVt-FM=1*>B~ux8ERf6+ZBObJhx3?J|Y=H$JypC!dpfi^NU* z^ywVsBPTStL7=78jIzsKkMB$%o)4F+Q zPtoi!kcigTELAsgIrid=S@fxxmib3~>vKLD{b#r>?^no{IAu)_XG7a0p~eLjYV|wT zuNO3^UwOw~-pGF0`XwrFWSp&8EiYcpj_N<(QS!QcN1bivHBFx1%pJ>Jv*hiHwX9f^ z_BdEwTm1PMw=AosZF@(p+=lRsKReGQ#w~o5x_8#M`)7nb{w=L`t!T2!_*H-2vgOM) z_WE*x#3dy`>;~G`bL39%yW^~VWtV*I-9OJx$BImqum4lXv;9((`}rBEb8ZFRve#4S z$UQeH`<(xJ*PQ;+JI+-TxOVUU*?P&+<01R5f2zlJu`OQluk^Wi>?PK_H9m*$ddSE9 zOH_D}*K}*A@1(wSiklZkw%>0*KkL+#jER+olUz=x7Kj?Xie~3}*_1lhd&;qilZ#Rr zOBYHl&}0#r!_hWFs`%>NUpJ3zjSKpGe*cW=E3dTn?cpyM^l+Xxed+awTYh)sT3yNH z*WGfFqhNv5r)@tZr#f+WMKy(F7in`ROENW3g_h+qOG5~TU&0G zsGF*Lw(3Sti>a;I&T}aL&%&0CI$mKGDN8R*G7A&9JbRYv4Dl#_mCJXzOV6G=-6A~c z;iU-^*Ufsc^qcwabJB`thc=hYQ}vr8<$vb0)a`gxr#3F}(~cWz?>K1gbo$6q5}T2@ z`hd8}ZceqPM@gC7WnERNt{YSC$0%5uT;0m(bxTRb*(bo_htuZXN2-@q?gr~Tia8lB zpy=r(7k#8sX5t#7(|0xoxvfhJZk}Kqc=gDFdBHQEf4zF9@#4vf`X~1K%llK8OqNkR zz4xL7$A*t$GCNJa_?s={VA!$xMU~-!35V}8H+JhSYd@Yjm&@{QROQqR|0$9uUN_V@ zOlk7GprBV;@^4n5;p7yys4MgN%BQ-X{{1;>Ztd_+7Jo!ic*#u=zG*G?(c z_m_xihj;I+rA`Yzhk3F$<$Rkjv{FTI6_fhK?BLELZlSHIGq25YZ{=A$WwYPf4Q&@R zrgZV8DcXfvo_O8uAr`pQYuCgBJe%(tH+1{0nEd$3TpO-0U;Itpm-Tb33w+TpciC%U zpG1oM%O0NeuH{Z`0xOqho^=nKe3oNX-}l%9S>Yn8@uB}2b_ZVGJoClud*LeO2enMq zK2=Qd-tMXxvt-o=wi%oboE{-uD`iImU#ifkD zg}Jtg{&CH@DLpr?d&=u2c^UrNwd$LG9on@h_{K*ozjJ6^5T`51Q1LahJD+Bo*x z?wTH&vJRn<=8L9Uo!3)mWM)>Do{Q11+j2Yo;)d+FGvedVp`4^toGR2cul$bjKQ7VEZtdrQCiYUo7S|4*m8&E zwN1C0VshH;MyA%*&|LdQUd2CsrGB}q-gNO^TkxM@n~$=s?~dk7Za;-X^0Q~gobGrM zs;Fo?VWO_--mf1LLmS%Fi_WN;co{jGeE;E{b1}bW@^w~kRd0*QM^&fo%=*b&&^B9g z<+Gz(UaSh`O1&3w;7i*+9hDC~C8ecqfvr*UeukGdR+em%R&@>C{;t#iZO6nZ!ChIg zuWkqVYH!-OZ;8m`d{w8{DXsTg6}_{bPjyjWbJV#%e^q79!nKLZV?NE9TH2?xGDTHc zC}C09N_T(HSC8I_sy$$vvFb&9yvFz9(s|x1_i|n3a&9_xxlkseuyu--k>8@z3&IvN zA3gJ*Av4}%%D)?J+f9~4Xr5XdvTwG6@9AC3XD3@LecZwx;_0J)^6BiNzj3VEPIm)k z0#;~69^hEL>@9}`pWZT-(~oUF3DpX&Uq8pF=Yo$qe{_m~BTJ0q#iN%wS1zny)xpTM z<+@{pgQumsmGx`{YOU*KW-LZsP1>K==ABk1|}sBt_Zjuk(Kc*eQ%y_o4!lz)0PLO{Ja8Bmz0QC zG^jDAMtu~_+`2UL+T{2H_eC5}t-kX6DC0@>Aj7vGT9*rQ&dNx$JawaD!RN;fUxI4w zPtWB(6KKr5u^?zc(85CYUlIp z-g|wzb(CMqfrC-sBy{&on%XaU_CigXX%X92r#S^zy-aPwSsr(M3vr1xSp1eD>CdEH zmwz68v!(W#bk2r}nIUU;6fQXAJK5{@pGD84<)4bP1^-ijFBdoOluJS1u60`_c6a$4 z__X3|@%zV1Umo15Tl@3T;YI%$T%ARZ%I;;Kw6XD{z~y91w+Wq^^~(C?QCsHO#orb* zd^^wH`sAvoj{b|g{LTxQUGlnP#gZzw=>GMEwlQA<9yv`YWaFL`8eM<*lGPrqIpNc* z4d*t;KT!R9KKEA+{|mwi9H^_TS~#mLNZ zOFgsLbmQg^LjP`b_UHU#)Khm+3_79heSL`<({qi*e+*B`Ry}%GujsVkMbl2@g#Qe@ z5w7jGHNx)N)a>7;lziK!LSk}*RMO=?+*Ny(zct);>Xi9D$KiGNw0ZYgFNO-RglUOz zyzbZNyP;8_c;(eGt|imcuf*TeIb*gY*P`s>Ca|p^w*_%cs}<>*vHG}DZ^Y_PJ(FZI z^%HXSZH_LVw`x+mu(#%ULE@cIR76QIG0XNR7`F6&0K6)$w_o{T;!nL6@YDT{L&yHf`$i zDBsGx_IKr-S(8$pz6om#J-5VmUv{?IYSUx06xV0QN5pTLG5z0(Uv4k{Gfe-tF{}1b zd#?2AMY3VfEy5-{tbYAKGs$BNu6#ybND;_wY8IO}7Hf_*s5;JT-Ow&+uAESDDo;-gf@P7U4@F{&}-F7ki6U z?GI_R{A=x!D{=Vp?S+R{dR@vBxN>C5Z{Hpx$Iz{tB^>99CLP#%BXP-wi>Ib?+pI}s z?AMUmqPc0A!1MRa4LZ5|Bw|iGX7M)Y8=CKv+Mej3_IaDiccZvB3&pb}_^+LqedjtK z+a>$hkY`{1GnCZwFl_!HGO4SHcwYRlUv%QfV*(BuyUe5{ z9?mF~_R8ztlUbkRa(r7&_Twh6Ip0{5PqH2VDk@|B%34~aYs;zJlHTV>@48jxi2Ru> z+-Lc_GgTqy_~-7v>Mjl04^uiHU6Sz)xjVPedS|edw*SKRldjYFAXkwOLbntC?R4|GV+Nb7p7x zC&k4s`cH)}pZAgMc_kYB^k#(D4JIf-7ea#_cJC+Tcy zS&-$iB+6*b)a(sPXIbZHf`$29mtBm>SvJR?>u~mKpR|P;-@=lcXBJdDNSvwNTDojv znQQ!$x{FVO>d!c9M~ircahkQ*Y%vU(D#W``&Y>pBQkQS*zrZ=Kl~*k@e%AkE(ZqRi z@lpFO&eXeG)^(I!Fe+Yx<3NSBW5l8c<(xnT#!dQ6mP*>o^gqNXJ@nZBZ?d}1qri*{ z;XdNB0ZwcxhoZe#Y6s;q#!5Xp{h7mQtFWZowW;Qp*j{j_W=8Q%WYpi&c5=VPLEbZF zi&*mvpXdAukV#FDrfDINUhDC4Qb167p~RhSmJfIwPBj0$o2mW7vKLs!k{O>$iT$N#LNLcTorV@ zDkFoSqM>78Vxd4l6{N9_-~B85ZvDSa z{6`k@I2>~@h~KXh=8}>$71)hm<1{R+M7SI0ApdPZ|sdInCO(v_}qHXgd&g~0Y zawVJfd4$nf4@>vM=c2Y6RJA(gB${1ZVUYK7*VGdajn*`?o_edjBDGR^;e!^N+Z&oq zm%cl4TtdBTD*W^ZK_N{EGO`&|h19 zKH4Nq{b%}HlVgW(9NV?lXr92@=Jq>kn;-gK`K^EChDp=$PVvY$>pj2R@2Gs4W}Z6X z!c)EvTAwn1x|N)`>SENa8~LAMb_jdimmSl$)*a5!ITHBloi;b)>&I`+T<))UEm)Xk z)e`!yn|;&rm?q&ju(e^Y_haEHm#<{ z@gj3|_>^g>_m3Iwx$41s@HvOt9}{bqszaYPHnZi=y|Q;}_lhmcrRw$OO%!Z6pE8+W zWZ|njzbD!-WeYU(HLr^kzR_ZIYtbAhLCp+)4z}jAA6ZgN>bib-^a)Q^yI}GAOZeG+ zkC#ZDee$2dNZa_!D#6W%lcHwl@V;H%5_Rfx#A^XQznr;ucqduk;N#&o4L)KX*K?WU zz=n&ebG09@<*i(kx<}%GMRt!Jic2z@hjET zmq|nviP=?tb(St%!61^*qIko9^}}0-1X`5DFR;(vSa@G<`O+I-`?%h&{%d*IORe+P zX20f=156!nPG(z}UR~FdaAoVJSC_W#u;xqD&JLH@m%4V>DhBHZYRg<^_ezF+IQ`RA zj_=Qdfc5MBj9%8eWL5dEmfX0$=c#3@lR%3ihf{4l-!(8pp<(0Awztc7)VmyI{(G2z zrr32;sXy^Q0u!6Qdah52iV1i*S*+6fujQGgReSdtv?%f&5@=DhTi>440WnBu@nThz zmxuUk)OWsWWBrx*(d0uJ^Y&9OUjM6q;MpU0*|%@g3WfZ;UoIalHY+VZYVbyp1FX@1 z^}`#71X`@YJQ3?GbCW8gtK05>$jg}X+;gMf{U1yMALe~~=km+$gR;z_n*MtQP_-Oo zweft%z-|W-KF+HPKG>)W@lN~k#)tpK_UtbT@2q3{>$L6KO%Ir-?oiKuUMDc2+2PH_ zDcJ{Syw2OWnZtQQdm_l%U;AWxAog=O38;1P=I&YDek3;Hn10ay$a&4z%mnUrp80P5 zs%!D~st*F6K7Ql7e?;)%#nQ}(!y7lA0$63$<@8pq z=yh>w%qf|9_Re(%j5;ON*FBo*-8YF@$?b2BXI{HwR?5EECA+SvuS>8$#9CweYu;zw z{KKD;ii}+UaQ{9f@hTvEjo<0mc+nZvoUU>S2iHn)TiM#TCaRs3iA&jca-R9i{|uZ9 zr{7)ws@T`-H;4PQWfr&HPrDiRBuku|W3F$0C6{aBiWz>ND^I`p{-yP_i+tn{ZmZyiu4N6MU&tFtgC-m=1%#5GBHg7MT^Gx(Iadq93B)eNR zCTyunx7Fpwu0Ku>eERLN-WAB7lWgmH5xS+_1S9^ug!>7DDMHM#Y?~Z`p8e0pr+pM_%hrK4jNn%E0dO!-ac? z>z9XyPs-*m{N>#f0dfOJ!^SH~HWrt!{(5-F+-kG?d(W;|~mN|dQZvATlE7Gpde*A}z^)v58y*UA~~gO`_Tp9rkdpz17f>Yq@~y!+gY$HR`AF+w`vfRcE}6fOHJ{{8tK`ZuJx{DL37T6Q#B zSnZr}8S9io%Nn&!&A1yjK3q2O?IP<7;a_QT z+TZydzT2KP=tlf;&6c_2zx{*Pj^Bw^J-i=3W>4$ZmU+jqZsAH@9;Zmtbz1)!I!|)l z$lCGY%`pziQxhdO&RGag=y8bbCrQNAMWW6){U7^x3oz$bfi9<)5}|D&oHn2(fiDXb*HvW)7p*w z8iMxVOJdsHH_t5WTa+F0^V8Iyu{G}{s~a*Z`0p89T$-*fzxI*M zUhk=g=k1$x@2Z~pnWJ8;+tg|vGfdrP^~-t9EYmgrmMX71%X}y(Cv)QQf7&vqKNV`^ zD18lda$I-u_?pPHYbAOM*UsFw^1h(VW0z{z%GY;3DKflSW-a|#`gy_in}?owNY5=O znN?!{HC6C^q5Z7sQ9Wsa?l-gkGg!~zn|=LQec-i+XBQove&h5M>4P7XcbNUI7mjT= zKWcTVPO03kdg}3u?ni82yu4X=@KV*}Rsqoy%jQn~ljWWA;5UEW+)Ei7YJGpW>K%(u zJ?Qq;W7oEZ$A{t(tBU2JX-qH`CQ?-{)}S_-CyT_ zXS#zRGCDSEui(3?l=Vt? zKGdEpdU|@g_{J&y^#L#AVvmRaXV~~p_!tbpWhX;ZQ18=dZw5Dfekx%Zf55FE1SG~!|t@(^;(nvw0^2^?bg%T zaeB7X66I}WMejtJW?oXP+V?g5+aK|=`Mt|ezH2r7yK3i}gxm9!?QS+Z?09_a%gT?D zin}e3e>y1tL~g^TN2jOjZ~Gl>clgrowtoTqVzqjiKa6t=E7?yU-(^~vAbfCs=8qXB z+-~xovs(Nv*>-XQ=wx79`_pbe>-RI_9jAuJvu@j{KPMP)B0R96} zyUJ&2_3caL25WivoU88Q?sC@2>*x1B_*nc@{`S3^k`1rKs-2F01S|M$EL$7-qyGMv z2z7Pa`3D2gr~gpNo+?_cXZLZYTen1i zhq!=Y8kf+*t){GUvU$h#_da=2V9zQa@cj7?euqnw4;~9`x_G{4U6-I|&6k-w1LO}% zuDy6FaL2t#7f;(}t%=ur{o6vTsQu;TvW%#^}yG+ z>n@hhVLCLw(>`SWD*vnMuO@%>{Iw+e$AmLMeH`qQ6JFkWqOg{Gb@seQ=EleXL5(S4 znpc0Fy`Y-6jc?64*Y8a)9~jaBSI+y-l`1{G)hy4$RJbt}@dqL6bi;KWz z%+ABEpW|Qec_nTa_=D9eJNWCnxd)R>K5jV#l{MJhUfGrGFQDR`=~Z>O4We{ zy8n1y+>Pa~wr-icVdJSRh54f15Jj*4etuo|THkfU1p%eQj-~nPZg~&dFF1FVvIj@} zxgU^wZcB4%u9(WoJ?j}RKK~)*W9#_dcJ+=8_k9FnQcq78i#f5i_@T}!LFdNnTV7vw zIP~Gn)e@ft{BC<2zpQt;SaEu<@5`d@I2Wl|r(GW1dzw?+XWcTB(c{HImjzNR`y8e( zmE}0e`ONmR;_KFU3-8^>Jh$epv3?=;yI<*5%3pE!mmmK~ovmQ|H=VbYsd>lx>w3TX z_}f9&>O>Y@_^t5sEjP0Xqnu@9XTk!*j^b&amh+pt^=@W6mHHVhIpncR&v1{_jk?Yy zl>(1N{idJ&&N(G9RV1O~eMX(b8a|;99v8L6A5U((@NOFGaaPMm2^V6Oj81pIN{US(IqC_3E#EpqgQ4LFH}vCg<{ikLEVNjcZ>=t~;)|CG_Hg zoBfiV=f7z0ombR7CI3lk_k;`{dGC$@i9|JYeK zdR+ebtJ-?fx=i_HA3$kry6)4vH~Qw;e|f5D=+xVMe0Q#Nju>;it>TLLKQ5j4w!{8B z!)q(cfAb797PA+rCI>ty`L`#LyYY6*zSFY`Zm3?F)mxkCufFDM(wXh+Ce3>`_jr5v zuIpafX>0xFNSE0?){s2fd8pa9nrVM;+Nlq}_Sv0#c1$#1`PE17H!Bw2za-Qnmlk!E z(dg;vSswfN`Fj)Ity{6+@8KUJmp3h&;>xu&!uQ|7+uQQ@t!FHn;1kpLENky}8|jLd zkNLiExJ_vO^QiPSPfIY|+NVyi#iZ+6ypi|JIJ>+1Mi`Qcqn*d&8NirssdXr{65>me}|@*ySledMm}H7nhkGd#6C~9QMOzZ8Y{N%yi)M9=fBJJs%n-CcCXO>I{%tZ($Q{-joq?JsZr9IjH+veg!+_1%|52ueS2eK@nCi9 zjY}_tCwc38Es|cqnz_fQjXUjC;*>W#qD&<$>JP2lV8@iFb8KF~kA?+?zYenazg;{< zL}@1D>gb)PmA&`zx0TG^&D8pO>c`J-pRf2E`Bdh`txf;*_Aj5a)Uj*V=ju&!x^~Vv zSI~KPxeQCPn9*a2V@40YN6+7OL89FEI?JCaugzHWewe&zZgx*j>=WJkT;S4uyP%W# z5v+;xuUFT*?D@|iEvcdW`00Cg^W_z+1(i7#`&3)bI!-+V z>42uGeS7qu!GD*J(4CK$Th8+D4ZrOC!?QB!wY1d5rCz_de#91Pu6a`=c_>zy!_h3X zpR?iNPbqbe53}#YTkVX|;;V^2*z>e_pU}7SOL9JZo?*OV-v*JU$saA|D5qUNe!9If zl0oJLJKvti2?_y0JHUe-XO!lyl@siV{_V&av~Kx7wkN+%_a!Xn)v$la7QyyrQ$Dxy zL%rkQEhhFPOV*!RRS6zlYEd-3 zR>|aY@$ieJ>RtXB-+l-<9SzF*qgWXCB)&!c+GLKeP5QZV&W|!yA9SC>%K#qHYWAHl zWv_7O_D_P_dl~n*_05bfe*W~nl<&^PQ`U)Z_|M>c%CKku({znhNvGe`Jp_%Rfkvd} zyC2^S(heGqbCP?L{Zu?U*8M}qVfo4jUdxt$+57v2tS;ZNz`w<-pI3kFTc36-$>wCy z?KQBWH{lmQz7@dqm!(SbH~&7prT9$WUi&47qn;a9tgpMiXXEw7l`C~`&n@1TVxpA2?(h?s5!0X7aB)?tpyl@vTQ69hkCS?V^d6tn>Gq zs~DJ$MVQ~NKk8lhWBn=ChOJ!Su}wu#$biRcIZ`J)*V46L^vC)5rLgyzY2LB#_Vzi| zSU(G>4YqdR($J|%SY3O2Vul3Ube+U!J})yw1NU4_eYmsMb4jD*lgx9=t~yjnpI*9p z-vgUvvUB)@@5)PUl2{kC^_W25MN1d8GyJdX?tf3O5HMJ9%5L=<*XIvqLr?uneZJ_% z7eU@_nNqD^`d5c-YudOa|C)P^xJ9RvN!W#8kqzI!{IfIbUa{(f=O zzD}60X4Qrh&s1}MEKa`I^X}MzoKMpx8*VAc*ADJoAb6rfD#P*e^P8@-9@;YJ$H(1k z$!QYUld(Qb?Xa!e>bq=BGv@fcJ7>2`iFNsnr=mN0cFAaO^gjIdqPUT--i4^!%lfoi zejPvJs=OlX(;ut%h1|26_NU%SzZf_9s?@*BHv`=oFM2Dp@O8hIo?1~>dE`y$yye&T z3(R+}ckzAhe`nL$5AhF;WNuxb&D7M#{=ksw_JMazUymG(*i}|_V9mLxjF_iMt%BOY zXXY>Mn^5eW!FhhO3-<$Gu@?;&zN45N)yQ&*M?mv3ep=oYUoj+&nr z$i|4RrmuZ2>b;-fyS(wm6<U&b;)vz*sOmh{9*#@sRs3pkM#mFk9aS7 z6W?*Y$9P4?<->+rE@`>-_y02-z7M-IkpXm0n84@rHiI8M_AzudA-}<v-sCda z9T0y$JfxH8uaa?7{rdD8i1?>QwFE1hZOivS6o5&UiRVqWJ*(SSZLAhFp=}NB|WjXk=y`M-?X!^7p?%r z_*iUMKCc8Mg;1%{w)$&2f@|~nR8jEceV_eBP?Vk8@u^@QvdC)Y8`JND%!CU*_P6;Q ztNXPdN$~jO&KJmDw)uS8rue*#G~W!kuFvOf!q2Vy&w%U#2)pgg^0i22o%S=guR+!Z zW@~?V^ClXi{=7)@8Px*}#^(>oFhfP4+8?_c9Db}}0Cw5t<2(jG56dq6vk?(?U}dLm z4)fZ4Kxnj>a^^onHG&UT1mf=KxC>|7d_Fw)PCF78q`>C$dCQ$^N`FJyAlbjSH(~SQ zoBRLXgQUS;vH5(mO(N?Llnv8-*;n<=;ibreyDGmeeJ8UBrT`>$RHCS?pcdJv^ZJ|9 zGB+RQ0m;HtemYe7>)T&sk&nyXZ_+_>09fVWna0z>446utmKnAC>rs?FI6rgBpC5Ye>;Kd})dA#J+pr+aI4!Fij{y%vYh+k869H{U5@ zB}5B?)b$g{nrLbN`Mgb#qs`}Y_HvfmH`7rZ0CL;u)lR#QJd$_l%PNGXx7?k)P`>fh{V|+iX4^A)Hn6#lmK#Z_>ZGgE#*(fV86< z=x?!HAm`TGckCDbJiWOoPu}KpuL-)E^A?3iWekpe%f3(>ZocitJDUp!1RPOw;^*@= zAJ5Aap11jQ{_c+Nz2zY5bqo)KOH5SvLkwTg%JUhsAVO1lTBistQKKmsYTW-v7_5d8Y(&pI0PmZHZDAPQDNf7hXx-$1~mK!T^7U4$Y?L{pJBxX zt<5ai<;h>KReC=%`(o+y{TQowMS^Pk-?-0w$&gjWCUcDMbB#pQw}?+)raa-j-_`pd5p)pbkoCCy{h3|ht{5*a%7prt&I-@jY?Vr+SI!jpSz#y`%!OC zqK-im$7-ig35(W4yPNBNWi=mS7rS@8W7VEzL19G&Z?X!ec6mK*mwUAAR>r0eC+{EM zcQ#zMFuM3VNA%LLJAJjCVXGfl$iC-zbn(2c->e@s^I7?8Mce0frnG$9+}ieZ)~%(o zTN}~hW?|ujq%RE`(GkbR4}9A0;m8ui^P$e~SFi3?zw8Gl*TTYF zWjEGw2f1Q^w>+8Ivm9d#?yQk!+f1U?Hikc2TO?l60UcXR&j(_Lc zJO#OfFYd2D@k%DAH2a0ksTJUaafdl#qGueP7g6#m$`u|1Q^XTaI;X^}goWXTmZkxP-Su}$Y5 z!^RbJxz;wtMZetf?pyPVBel!Er|Zv?+Qyl1Pp*L{jC1ABk7ZRdX$9uh()@Fk7p$u0 zJ$7F(>+02pz%5?WO&TtQtnw1kZ!-In*0h?nO*7ak_pZ<9r3nk=*Vp^rTP+}$uN~QYQsU}(pUS0zJ5OZEadpK%9`TlfV1Cg@1*jqIliYbKjm5EljpoF z`;Km${dJ#}*ZK`PrVB)p-fZx?*6AbQ%p;(CB38h2d4!AAnZ;M%>lz;DvUt?Nx8vDo zyQJGM`ApqqWhP3S?^B+&blu|_5<6xe1 ziPObpkGL!ik9T7;iQ-6T_pNWXa=vgSXx$3w#1rA$_4VHw%e=iQ!~c;>t%^C_8zk%B z)p&HtwvfBeE;Hyp7e9VxRlE34)yYg!{|x8m!wXy%Ru<5D zM^Jgo09)_qP&jepMS;eJ2NfO~1bk@t2rh6zr)Po++ykM9l0TvvZc8JwG#?DJ%Y0v_$z!qu1p} zvQ~Y2DRIpB$=v7X%6pO}!%R1OIxKn>`QeX4@t2%0AM;;CnR5Ja_O`k#oSi7C8wOge z@`>;BbL-<5dy+*T7_EP+y~4sgvuxM&X;*6IoZ0bu(J$4K-zg4kJDD1P$(-Mu2Ga0B z7Hqi0Fh!H(vSAP<{I2y#D?fTg7K=k5Oh6 z4Z9#2a_qYO#^$NTO)Oa}b)(bP&i#Jg`tgy=_0Jmf{xNX+g+;%7XL#pcpwL>Qzo#si z^B)$N%BDKsG7A2{7>xQ1I5*pMIm#`1N|8oJHyn7^4=%1?hdO`ypc}VfE(c zDGezO1&2nd&KBm*nTrqYVdq$8_(e3K|IZ!Sn1}~|t;@RII(rnlyjQ(6Imr=Y9;3T3 zPB5THH@9SE^iFxvoo~D=MWr^3q3bJCv?M+(bU;4ojJ0{ z=(M|V^up}^n!3anf`w1(*URvJmPnnQQE2j6egA?c&E2;fmnpyc=%+q0e*Xd8r4~{O zH~v_!&Ofp=SDXETtgPdK++Alsueon^_Vb#kJwcg#I(JKEubW(YDZJYG=gAE(&0^I~ zFS%LLFPf}pb@ut1dsSzjuh}`*g1h+#Us9pd;vb0)Hy+5=9e$nRqUcm&1|oZ@YWMnT+|bK4g4W z3_NciATH?{%&|4=!?f*dxAo5uZR8MI42n6IFU)^~^H?uvZOE$Ycl^Q=y14N$Z`K)e zlV@d(Oe{jJFJ`Ezzs~d%PcW#luD8{`zVTehjaMIkG;l5!Z#Vhk*}AcF-Sc}B6dYNC zls2VBWidVW3B0tG>t#<>!^!O*7dx$y5m~WvuIab)R?h0q9~suj6!jU(DIC7w^*6Ee zTkb6u4h65Jt6n~cxT}z~KtxsB?LUK`N@#}Jj@SKBXR3Yk-qv?4b#(v8bz{a>-{|tb z`?qcWEf86_uQrjVO?4;lr;@|VAF!1fnRfnI^C}==(#&&4AIe@X5uAKM?+Bwi=fVTe z9^JiVm@HAtJwxuZjNG-i9)DfL#r+DWU1b;dE9S8KT75>`l2OR8Q-pE$nKR$*GI<~D zYZQt1oAaOHYG>4XX_wXOC!eqVG=r=4w(6qpS$vzOfYzAJ*S%Gvo^i~uC&^XN>%@y^ zwevo{-jF?i+x$05tHb+ku5Q1#@1x1GlEin(m-Z}GYde!HajfQg=7+h9C5{=b$;j7H zje7cfdcoVvzpRew&hmEP>p!|rwN=0P&6>k;ZaV2_%jR?5GHkxmm*Mjv_c>>R?%DgY zPgBJHGhE5%Sg`kI>(}P5l7i9+PEQsDGiCl~NIvrW&e7=opO^oKtTtz4W@chzVrFDy z1dT5-3Nk=en>Pw51Wa7`!C<4q!H*Xc9wM(c7x>TcJ^HNH21(xp>3osi5|KV{i~HNN z1W%YKaz-<3Ug}>ISCAAGEPZ*_UREM%lq1$u8xV0l2PXB%9)WX^Q=R~Q{>Ij`M=g(S~#&-K&S2JQJ0-(72@<*tb$4x zM5}rC^4BnAE?FaKBwpyZur|U>yfE$0vnxvq?i}G(+*j!N?}(5nLzJT7e}>6%ij|s7 zyfKR-x)Ss6?4IYHY1Z^6spnjSj`v({rP!4ZcknT2ZPfMpxM-WmruXf5r563tp3yk0VCgzV)%A^h(pRo5Esm1jcs)gJ#;ju;%YK@4 zozY$zCV9+u|EGyRAOB}Coc%pb-C^&gEUnk&Br2n8_j8%X&k$@C4U; z7c-Zw(6CqM&zWlQwk5-J1y{g}_zFFh!{U8cxe7NORS-@JZj+rZB`0VX|gY^9)9rQoi4Inlx<<+ zMnx~JT#t<0nWnR3o_*PDsM`CbQ|XT{!;#nbG6a$qEIyGPCOOl^9Tvp%{otn;J7X3Hzhxm=DsZw-$=*%Nd-G_9ai!0^oXMZyu^ zxi%}VZ#~wNG{^FlvclUl!T%1+ENuPR^-KM0M7U5AL)qd_jAkx;C(3#6pPJa~4XYP~ z+z57&@O~aEw?^re<%$q(j#+uC^R5V&HR%~_D4w9eu~aO~Tb1pyimtiR^zsKs=bmys z7aDM_ZtL97EH{|H$FERJd@rvZ`Z(j>G&zC1w7h+1E>1UHsL3Cs@k-r6K+^4%$89+W z)oVvvN`+@}GTsek_hl2{dt?>VyGvkt$F$4->CPppYQ9PP4_w^2$3k~e%A#L+b4-#< z!@e&vbL$Y$zNfx_=7fI^v9~l%&aM%DwpcLgKZE6u&>MC6H{wm?lgpplhp29szpwp3 z`b!iKXUo1#i53fsnGSzQ5dD0hKGnUpeQ(S>PSFXjTT;KbDz}|KEc9am-&FhVPwUd2 zzm~V+Qe0Sh*2=@gK_!AiLCZ`%vmo8kcaN^{N?n(0&t{)Y;`2&ne{68%&RtD&*)toL z9eW)9VAa*;J*OPcdM2n%iOJ5HIdLI>kcWcNksZb?7sH<368LOyCCzN&;`rh36_?3; zPo`h&517Ai;w#3&bw&Pvw}(#t=KAXPUPIrrN!mOvdHH^sOD=LQp1kPl^y`~W=`(qD zT)lsw^5c^hr3q3d!UCKvtev?JGM0!6rm1%1Y+2pjuX4=qn}(iFhb4m^v-gjsn^b0Q zOZWTew!nw~+x(K%muDF|y{qIe)MXYZ5aU;{k?|qidffqjtUL@MSu*u_m+xpFG ztN51x46|&vd=_HYKKgnq=Z{k=e)7_#N-2V>OdQ;-8a_%-^DYLtBsiW7S2t-(jr;PZ zoFiJhyTbL~j@d6ezi0kAqtg3C^|hDU63w|cPM?)p+F3AjdsUM`j6%xf6+s560^R!O z*LgimblTe%&T{EQf!Ztnli?<(wQrukoAE$w&YwC3_FMVuci-wi#E{6!;qh(Ro1U4+ zr-fHJrG8N>`gh%H!c5ip6wQJAjRW69O9Ycq0F3TUfnXvARh4j(-fdW6xa) z)5{KfGdw4pZe~{xJ<9#K!9kk6;cAc5FV2fAl^d@8XRyrQ{vqpwoMQh0=C|h8@4kIt zufZUG;!aF;`duxZi{G7-8=`-wgu6|zJ5aq8X zq#}L8yy(@>uwTwGy0-hDT`@RhCb;7V{~?Bo`I-Cnt&r@yCf;Y!e0qh`;*X|P+$a@XM-eY?f^jvFm|wf1V>+WX2+ zCNCXdZwPJSmgonyoDQrooy~cd2@#NX~&X4Q#zT5Gu zNuCsF6+E11ePxc{kBPYlU9uQBq!;ElXv7_zs@> zKk`~jl_T|MJ$R+@>0i&Ez(?NUx1%$PHppzb!gTub!E5Xbf|mMCwF+6K(R*Ckzv*@F z-D$BmQ&U&8+zROKm}%=h2dQTit{?Yn#KH76eBw zE6{(pAW`~OaC3e{T*irp1`dAnQ%(*wQzW_`Sb98JwIyMA78hBpPi6aEc;@nU~84rf0o8ssysh%S==!#yY?)vVgn1~ z_Li5ImU>Oq%2@V8BYV zIVl|dGN*jCLwTb2*YXDAG_8VL9FrF>Zjf&|y7^X<`sN@GPxr`<#?!e)^CNC+e9^TK zQBj&YCv@Xfq0p;KOJXB^);n%}{LyU76z4qgm`+dsmTwF#ype2dZ><*b2>p~UvP<>3 zyxec9R>{gsOMR6(-%LEYDf)dnHka*r@oYi(uXLyItV^Oz^X0=TGrhL)`5j=} zU;fW%&87!zp#_1qiQ*fYPM$4(*ZyQyd*`7$UmwXXxVz}di*jG9IZMixH%U9xSD*bU zu|%b(SDzCcx*^OA4HIRh@|Wuy-~Bshc2g~r!BQS2j%4w?NfOKc<(*g*BJ^hMy}9n2 z4jkmrvfJ#r&bn6jSg02|&sg2S+aV<5W8;(Q z@mh4-iM5>H&niFJ<*HM;W!F!UyKefnhxaw?3S^XsIGz+{y)*uZX|I-pNRb|M>z7mS zCT5AgYH%n%eJ-Bm2*cC}rZr#JZB#fJ_N-@0goYSvpOnFqTX~%NUY`GiUb-u_-11G{ zaWneSx7%lTFx;$%I@4?FoozkX@oMkM96jM{@M*S51&@oY8 z&_qOOa#xx-qcwY1v2p;@tKA`WhH{Fj^Nw9Ktrw_tF>q!O4^Qea5} zIvHh%Zx-@#_2fQc=hZ32ed?sDyx+GSDt6CI3u)jk8tR=em?5{YEHro(X;95 zPku4$I$dD2dv#;=zdx&AY}i~iGyP1=CiBR1SH)G*6Mf7M2Lwq}O;Ef0;^Txir5kx2 zDeG7MXDCToB&4?gP&vo6%Gr}j_gOAyxO_k<%KPS;Vn>q$2ew{MYnhyoc4E_9W#iz@ z4PUQ53ceSA;*D|U(XSf)7MilXH|{L!bm?XdI$yTbMdJd?j2)WG{%Lj`$XfqJOte8^ zdsAgRvzSlJV#d|qMLVA8?7nk%J&WWghh~MIhWk4iUWTVQEpSa}XiQ6z+PrbPrbO$M zTenPX*_oE4s5ME+pB4>p_|Nc0Hgp!J^5%w#CwERwcU@Y+eITAOGwYShE}JqtX2(hX z+$mRHI0>JfE7qB{;H1&nDLcDz=O0iiijcXm;^y1aB}e+cZOeH4cn+^-jxc{MPl1N~ zqNq#vVpSGT)Q)ZL%XN5eGAYwmEpy5=&eWVUhm?FPS2iDGkzv!Dx7y1G!P23{?izg;DE;?nl=+_k{ zXMx>|ntA*RlsV)w<=N5Y#S~(y;^(kM`oSCOlih5>y|MF zEcv7`=T7wu6NbwlIyO8s>SnkaxA^qh_l!p)3N2Rb^H>X#H z&uyIGwZ>fQMO;Hu>N>Rp+v)_@dS)xK3QaMc_@BWvHBx6=>4T@@8q<%S%{BApxg9ix zYr;~kJ)4?^gJv*=dvQ3=nbWf+_{A);zkLb!Zru^A>fZc>iDk-# zWf$|reS?#&WrJTFW&2WjSN584+=5H&Q*yqW3O!!&quF(-Z=TMy_ZP1ITDtbyyu<0+ ztNd9#6$RGz%;vEQ*~MGtx$oTb#WUnqwW;5ox9(NXfxd%*Zu$jV{@wnTwkRpGJXE6Y zp!<&{E`GwND_5S2w0m~!QHlQ&A3vjrtKr=1-EKrR&!5=w` z`kOHKS`S&>y7N8GMDB(C@{6AjZo9ViLSOR#^zlyQfG^ zI=6VK29v5LcS1wYqPgWypD;SHvOQ|Q-5|4Q%AK&Id*x0BI6bME^iD*bM=2}#q1b$m zt4mu2PHw$lIPdtv4QGx-x9mH8SkB|aanZXzesu^xVp~eMa(Vl3+s;F zOZnk+ON&8=O;=CX^_6V=rL1Wy898KaE?U`MQ{McT@nfs6xXi@&nto5_zNqix4OD*n z!uZU_4c;F@nC7~lzIE=ZsGQ+ro~Qdczt<`lDmF~Lz+kkBJ!-l{{)BX;=Q-Y|UBw(k zHj3wY@*I81qGdS!KLexMx6iJH9_#^M6z@K;V_fVu*-J&G&&&PV<8!v`n_~2CoO-~( z!Oa->SX5L_Y{3M(yYH$Tx;3LN3OPzRzN&E2Fk)HQu{nuDN!NL%V$X?|7Ej@`EUs#2 zzBPPXHh+=rfj4LE41O|&Zg4mMA~8W|F4NEXTV35J*>HF$l$Xi9^y8UU-r~Q~$)&9L zKZAI_z|TZo=PCAE?EW=xaVxbme(LJ#nzL0-{7dy;f6-|_^}BC;ZZti&{etjEyM{+I zPcOHrulsb=y?NS<=JS8{)h$cuUY_Xx_ydDNrQkKKXJ?Nu{JVeN<#ey-|MpMP(z4NC zT>PuP{>o!z`+eM9#u7r62WFM5^!`_sza+*=ZONY#ujM6HtoYC+TL1X^fv+})j$c$- z^3G+~w10aJ%x5tE&#?Ya%Gosb>8SzpID0b>bMl#Uw#@eU+ND;ax1LAn;pQzBK^Kz@j^3JNx zAr-!5w%<>9UVnCq(_zyNjh+w#_k<<4T^BecJQVWibbXZ8ZFc$boQ*MG&wt8VrBW(o z6U`>6AlyFV#ij5i!Sqxb2@UfY{4;Rt01u_^~<9?C%Pv* zQ@7MiIppZkF#E#Ep8nnO-v3^|tiM~U|9kz?{|u#H_P^UV{qMy~{_@oqd!vssxqUUX za}gFgX5$(4<5q`6?$X+6Z!P?~IHrcP`V_vXVph4z_EF@Wcd{?LCd1Peve6rIZz!?p zyniXU>H2{zmEGnsBF0+|Iaj>UvN|@8|IJl~E$-R>Sbo3X_VbC;fh~b2ZRSZ$Wxi^0 zW5e7Ziw^v|7+6uDDEI5Ki090%Q&O%LPZ-zqcrRFb^r%87OQ+Kpg_FXuxq2Jw@|(`GvdCxt48{xdz=8obXr>_ea zaXy@=^4%!c&35UOPURy0y;44cQ%+woJi{xpC{y~Qp)D7uYrtLJ`q}G0oBm7Nf9Cqn zS^pV~FtD-Q{FAlcHy3M z;w}r*W!_aW8!}dLJn~q1OzN7C`HdSL=fYKVa$g!6AD`JKd)xX@V8NP+N&Bu?Ebp3e zfRF1xgLC|g?7zJA3)g=&{daEv%}dsSI)VZ39W{IzO+~zY4vI`HSDyIlLK0UJ=Z(89 zm9j7Y3OiWE@=2+fsI+KEn<%s1loaqff0X@2RLFzGhTt{(PjtO~s~X&1Q1d{;x?^4R zR}qFdzb&UpTD;B`fr!{7Gird*`7bSfBCAZh4!L< zhJk^B53CPD8Z+=zwrRasQe@F4F`^U7jY;xoOE?>Ym zbvj@B7x@O3QzvSfztt^Es@r$`NdSX{?n6;gIrozGXY6zs3Ij z=~o_HXnp7TZ{9z{z$ZBskJp5*>~HpeeZe4jeRPd|16z*cw}e#2eVFkj z`CE-Gn@N*iO89~D1xqJPytAyo>Edd)i7toL%fD20_;ePQhSeUmV&Y!62UL#;XVyB@ zAHU#GeCn#e<*Ax_tEcbauNPeG)*BU>Rq{&p4c~ijmyL~rTDus0<+l5?9cbt~9CR~S zNzfp+(;z!QY=_BwA%_`7LH$>5@boBIdhzjUOg-YQnrWeTsdVzAewCocFs9cYm4{+Z zw{Mc&%M~V^v7zqp`v)Oc7eAEZeyGB%?egMY+il)Q@`Z2anOR)&h|rkE+ME^S-`k+f zBEx9N9Tv-qc6l@^F!q_^5xRDFWOe8HRE zO8IYfe)kuB?3eg3vHHnH^KaT)1wJ%37`_N_=-OYT)^$0oe*$x~H|uwC_oVt?AGajr zG&yh>Ecxuv%EThT+MvU#bkKL{agG!j=__m8E0SJ!emj^n`)iP@n)u`l*0jSerzhz+ z+cB&;%jCJ`)uP1(J$b9|U+_Aw!0NGr>DW?JLBYU;374cLQ$vsbXRrv}swFsOPr!maJgbQI@kKe}4+da15T&s>FBM;(sp zu5@TNT0i?*>D@@loqbDeF8}UuRt#DfuuivPNl&*F$6nDln?;!x$x7Z&U2;m-_(j{< z&2Fz4rWORRij=v(t4cXv;$uIXl7rB0QG=%{J9Da;-@ll)=%M0;tc#1?ddp6@?mEY{ zE8D$#-u_%yUxy0?A9QP->wT*yE@e_F+Pr%yo7L0!=ga-Os@EQSxZ~mHJu_dtzbANe zu_8l*$rpz(j(739Ubi~WlAIQ{_{8n4CQ(^mngqhP`k%JF!p6Tj!dU6xpZ&!TB0F+g*dx5N3Q2r4fDGE?aQNFwF`LIy)w33 zUHpLW;-m(!9*WDX@0k3qGSXQt z@BQ-L(y1pkn{K>t_p6&|*l~6NaRoY=&eo!Xhg8ElMRJX(2cPKRe`!|Hby6XZoU zaHY7)ESkOiC;wZf=p;5B2W|09i_Z0*>F_$Eu&yK|Nx{lnO4h6N$)U5EN50KiBvQNN zm5*QBRwI$)t>Vt!p`Tv;>0t5FKgKE~RnlMhYw?8|21P?d-QQP^zln^g6v(jD;&Be1 z$a&Z|O4lTg>4O}n(<6iVpBg5~C`j3unx0(wr2B}m$!8`Hu7-x4k2N z(ATF&I7K?8T<4`)7AmSX=82f+xa?@sNIWbmsIXAMXW`C0Ru>o+C9Ha|S~mPt0Q178 z?PXSbySH@2>n1l`NU;C?=x57>rLkPKi{y*GMV~$`Rgt8zKsMFf#PnW?s>hQ=>!Yg_ zZe9vHY2ahgu`-3rZ&P61(J61fuCz&bXgw|2Y}?j+rw^Yl&apC?S0SPhBb?#?_=NQI z1l8s5b6E~BN+|JVvc@b4Qr?jyYjWXliDa7Vk-Mc8TwRH(+o!Pg-HVv9`db6*vLj#X zS0y_uJXv$M$L zyjgPnX3q7Sc|Ums3MJ0#_5FG<%Qf;OLq-%Y|J(Q@PZchSaeoriOWfb6C7KW+e(5cn zv}F%-K(q9_Kqi%99;HWavMG8;`KI);u-`yPCgcgfv*a(y3eV*Ydm8i^D}3@6iEOPco8A9) zulS;_CGLSstGa*ae!APsp)YlXbCWaIO&zWiF|NuIy@@J^yfqD3IU6>GooCWplNpfl zVvS^zqwb`>86xL(TTe2U>wj>%&8Rs0LeP?w9Jh?{8wG3(2bP)?HyoMZ60oSlZS4lu z*9-y2E?vxWP}XS?NS(fOueb8Y6c3>Wfq(N<_A`|~YpbX}ID6>NTJBm9=;bXXFZO)uH=YX;g3}-EDRrB+ zfjKmzw<)eEwWvJx%Zr~gW44F=5Z>psb?P(w9Yt0>mo9w}wTcs3{xCB4(~TTyKB;;7 zBAwIgrrmkzz@c1d`ln%rOqa}zNk%P2qU*!`XWj|)nUI*O+Uv4^rnK(UmqAS-3^P~% z+idn@zVeUmGl>hXgdLbXx2-dMQs-iMN?yOsNaxuXrD2w=@O<9wf{ROUI`Y3seEeZq#}sB49#u|b zQ}d)r9x0R89razPzGStisL`=%nX|0EF)~8F2RzVFh4J!^E-I0B7 zR_o7GGyOutr+;9q>onh(@U(f>loeY%WcqurO!zQu>zO(C@7|iSXrWC1BZp9iU0co{ zl5lOfxj5$SD|gXj6*}t9%d>NQlocAMWXy&P`o6qUc(9H8yRbB`KSz7&_Jp6aL_At1 z^<`H~+%!M2PvZzT*S;^4%B`?9$9Xq1h~epq$7b8~wZDXS&HKDk=jr{MS6%!r zpWZZkUHJMYRkb@)*$*~eKJm5v_WVN*S_e`yFYmAtU0CCPS%JYJ^Ho~wrW~G}H*a%W z@4pbvn6eTy>%wSBemgmo&+-}D| zC5tIEfy=Oup?A{d^rCAXEldY8UoDg~@#bYYZ!;_B-8nb4&X$XsK})^nx@za$%y?;U zyj0t5?y4>J3@j{ymTJ=^Vj15UhUsqq^k!cMllm_IjZVM0uTAt?D&%skB<-0&+b+4U z^YoV|Exfa!f0mF~=I5fitV56gGwfOXXxY@5h4KxI9$cM;CM#!ggB-Fch$(cj*=*&GXRnt$J|s}-_J?*7J|6`XNXr@ZO=dE(^N zKMxq}cIVc{{b!iNz_3Am?a|k_|6RG-svOP#_4di?2f5n~Ph6gHg)OJ`dU<)%y{(e5 z3^Bb<-BS&AW$vbMQ&ft@{Y{?a%3o~a?H*4}6Q>A?Kj?E2OBe;63_S+@OK zpWe7px2e&3=HbE>&w1|ze?J)fbiR)i`?@Am-`j7$-h8%ngGOqM+omXq{H-tl9GocT z*_Tx1c2Dug0p^2WXJ^0r{*QryeZAt;tcZ0zyr&LN{K$WV!A3rE+rIvK#;43580L1iif)K~ z>uau`A@lr6Rp=XDm!+wpso~e&zj(wj?@J~(qxiF#8r-Xw78i(2UBuO5myy+}km9$s zYk`n#)GzVxo=Pt+&y&l%GA+I2iO(_{{)FN=NuoZ&Ob%NO52uxU6xhxPo4x!eA} zin{t{^4r~AVe)LPospi5tZxDfcewBDEZywSrNOk!Q`^?7R*837Oob7f$C5k7QR(;X zHtf7NgT0kwM`Fg&xt2T(erXL~CtaG+cDnu6nhO_;Hh8a{W!fz=nJIeC^{e%}j{9yp zyP?g$sv^)q)X4LdERVjiY5U{id(+vL`vu=Mzh}|)yZ4{U@eeD`%oZ2a5I32?=E3On zaCwV_i(H=DS&yV0aeMZZ2No<_b9lPk$<;+ui(Z-kao}HbJKlYN!yg9AG(OGL_Wqsb zw!QlGlDoL}Z?*Wo;B#bL)TO>jA~~^dru9d8DVluKWZ|3GV0y)3Q|qGxvt8y!bzVBw z^V6y4sxAYo!|VeITv1j!>jXA&itT+D^wVOae!>L_EwrIsD97ct7zGD zzYjTjrM+5~s-lhEy{nfO!z5B--6B(OY2~t2!r2st8}J4D*2JUPFC^LzR-^^&d;#hoLhVEpF;)T1nU*+ zOwXV1SaC2{{q5dIYfL}MwI1FQ;B5ar`pKnc5pizj_q-B456&6hu)V70k#kQfw)d25)lNwWVz14-bta8>Eel)Q&puVDLM@V3}{REa!yx1o6mSLAQLq z&XCkOTeDQKhfPxS;iQ6I?bl|(tr41g)^eRbq$wo(E+e66L7!{nhPO^V<%cHOonOwW z!*ceXuzBWB>!X@y_PHi*lnKA}pJ7$dEOXlnk{iA5r%Z~y9XCN=t>>XwlG4QoJ8X9- zP8Mb={-M+zvg<#?F12Mc9Sz@{AI(VmV(%MzI4;LiW9Dn5D^5 z%&_8gF;hl|gAUvLf2y3liqffP9eO@7HvNr~__yCs!K^o9<7UTM8Zqy~OEV;T?%bNS zQZcW`+;T-L?>djkd-=7*7WzAA|FN}~@(xJcAOGj}@)K@FhS#L#u8R7ueASvup`%81 zfk926ONa%>hAFAF+g2u-sC?gcQ&u^jCDWR5+x|q|IhpR9vsf?jZk<@WGJ6Z>iHO95 zb64fKOw^plbn`#M*=kzQQvvPM?7mCH@XIz@Je5vs=Zn`UH(4Vps0}nGJ z1Cs!=00RT#9Fb=o8eMgZG&7tyyq%_8cj99X2}2(9-PG_@yF0XB*Gwg}QKa*1$P>}lbxaNo zEg}Mr88ag1S~9h&1`2In^dK*gYmzG$-v-mOQxrlbtjY9@aoVY=pwKXhqe$Xr(iDXk zj%UMKmKL~jXw3?82%4f2$|R`L(y_txu@!&vn`$Qx1&)O(D+SsG))aAda0v%YW#_rJ z@y)SWT<0cFUgOVRQOF*sk|EMGkwL*zQDmx0OQVn{mxm{#ibBg&CYDJpLIQeB8XVgu zxnw$MD5@-E$xvr(Jf!63)zW({Lhfdi%)*{20%m0{JX=n!SfjkaGu>r*meN##sVy51 zv2dDBI-z8=r=@iX<9efwM;5sTJ1P`-cv+cPF3FuZxxsZa2|Ui(h}gr$fVWe#l_XZ;;FDe@PKNTw-v{(r|Y|MaM<) ztb?MYBiC^?OAk)YgtJpkgPTk|tWJ3{Dyz zojANa6f}c8l{i^cSrwKjDL6DadNNE+@NiJn(p8@1#KNJ%;G#5PQb?l%tDvQ1kal3> zBMCV+_H9xprFm3&{6p6~+ig|oU8uw|Nhm|^8fVP$&WJ}7k4Q^-IRtSrR4@faIYqs7 zYFN&~$n){p*0(}?RMgJgT+u!CL~)SF5la>e1r?DciV0bHWiOU!sAqql)VNV)B1>C) zXOx4S;1Vvko$CY?JhdD+iZZ!4G_?gZG#M7ObS(+o*s;=)iz{onijL>9a4~5v4^CAL z6%9tViKd4F1g1<`qgFH{}fC)J&3JX@Mv`lK59C~z#C!^SkBCal1CJh!<4FQ3cNgJ8k zmb0>GD4G;yHVG}5&=fWGn7N|ECDw>TJ(oNq1et?d3@my0oTZf&RHmo2bBeBLWMEBe z+uL=;Wy!`9!7&!9NgfR%EK^LDYI+70`?iWEu`bLM6qw@66eqS|t!m5$!O1KKBPO(~ zWHL2MKbqw_$!Vf>h3m3OoH7kEvtD_!I4sTL>5LVbrXn!G(V4k#&)- z@~vJa(MClrPliVR1g|+$8$~))mTYC&aKj<#1f$C&mZEK8OKv*fa&mOJZW<+{X!!PQ z@{Qu>=%ItL$B5||Xi zCE%gN5y;87PT<Dg-xne9v~EHpHvl2wI{e4nUPI!&EHiN%S-L03oS z#Zu-tmH;lVV^dt51icP133&#%u&Q_}s5Eqko?N22LUY-ZhJ+?vO>H42E~h4MlO?56 z*Ozj#C|Y5S1OB&Y+HH2jp2RJ27lsLAmHnUXC&^od*b2-ZzO$C)x6HNc?WoW(J=n*qz$`a)S zg#)euo=%=Yo(z_P+fubX#S~hWGP0;BiHb~R3b-;MxhCMd)7JvG1C9*3EnHI@4}~r2 zZD{Ri4;B!ba#^#YZj+!G+ujXF9%`~OOim6IV2Zqym9*Ebb1u)WlbkDB(xo()#yDM> zXyP?1O5O0PlHZO_57Cu}92^6@nA{FK zh9V|K0fzz(y{sh@xV(adHn1x&E$o=6qOoA2K+B{BLQ^fYxj1w+GJU7H9QI>W>T~lo zReS9D@kDQSi{U1n%s$URw&NDEPnK*I@Dk)>@^BILWYIKC(bbsb;IYb)MTupahrpVy z#JNtXISbDgOi+H3yuHb3!?abtT6}Hg&QE_;hHlL${d{27yL(QJOPn}7g*-eJRazzq zITQy8C5jUM@~)^ww)6`T~6fC z?hdkGS<29&*2*Fz?avX>?V~VhiHOLwg+9s+K`mFcyJZs&EhV0ayC7ywAym9)u!Y^^cATNbaq-^syZhIdwf?$O z8=1Q~{_5wz%BOSRqN%`iRke@Hg+oAO zrOHB;X`iw;sYrRU=v1eAsOl$jFmN&+T`J_^ur*kY<7CnD_J{|)ha5OmwG}q0t&S*k za^5~=0*3}G3vY3;C))&aL|nrBjYrs}}a{>?vM1 zUG-MS87r@t#|x%)?&xZ}q&1r>>RF1b=!(~z>(iGX=$1{MAn;A&P{dEK4EJd}O7cVk z1cJP-ge+)gRdiMBcW|DdG5hM4yyqi(_6*PMe2%PVLmqIc2rZeUGC|0}BW;R+BZHzQixQ_MC#Q&tKqGU^ zgo#Y9oGc=jL?)KB&J~#?BC2LP^Kwe^LjhCn;LxM%oF+POgtha`@(P)Jag$;2m9*nc zrBZVkuA7^RrD39j3rCB}gh@^y9tVe$2d9d{gvArv zSc+X=elWD~RPei!J=y7k=!s4)4h>ZoMU|F`0&W45S|$pycnGkqOz|ykX-?o1+OTue zf)Ivhr<4uP+HibcnbudE%CdFRw_Q&U$_gk7xjK3sY6_X)z%g|xr1Q(8t zEQ(BOlRP{)y)v67Y*^CL#L3m6;3%NtBIG0##O)Fwq;Wa%K^xhj@@Mqlp1YXRR4TdhrP+vYXibMkNzN=IJN2vwi$-D6#*@qDG&xOL)WGeX%CSvmR`;yPs2N|*Jlk#Sq~W2e$f6;r!s5im zp{URTDj^jG6ecW~vY^FD$iqWWMNnyq;TwbO+sE(Ed+=QS`s_m6IkiqPKX?DkW7!on z$wj8kLNm}oQ&FJBv1KBYV~`eu?oIzGI-1%-9*QOf zeoH2~GzB#>>2i3uDyl8^WM)+mn6w~d;eiW$Stb)Ti+wv+ZtA#axaG^+2TE6T`KH=P z3&*Ltu693l+Bo27;igMP($Ajoo?_+oV{l~AO^a%spw;^Ie6zi4Z4Tc^ov`7~v>jRw zd<>_aToReuvE`7%Dn%!U)xj;6CczgpI-I?NrgX7QJ2fftl0qM2mUw%X%G8q_tV_K- zOoGA`940xiZd%Zn;o&vQWxBy?GLgMqH8JlCct_5j$N;4F>355u) zVOYr2z%dn6*C}u+eVMqA%c+xvqmfC~QBkF(i$P5)CWDi0N#Y}q+Y0A8-Hz(`&#o!j z74hb%v2RyK5}ViAPno_OpDsJpC>6lyC7|G-8N^ZKb%diKAm~y<1BY6eS=eE&peapC z98xX|mRKBHdBK;hc5%&Dfj6-RAzD|$&SGMETit8brtHQ;W6lTd>S(@p^J>%gCU8kn0DybSG z4%>ocSSGtGv@g+7Gz(w0P-U}s41?#M5fYfh=+G$0sj^bpQ6%0o zB`Czn$)Q6~!;g_u$t6hfkYezJFqYY@>|QLr5**V!6(*)^44fPla4l$y>g5g>h9x2b zlbk#`1WYX$MH!YbJTMj2;P7gmWU@qn!^t7LWg*+CU>92k5m61bZp)3^qt4Zad6+M9 zXcSOt;LzZ509CIZjVdY=gq*?qvjSIY51lq+WOj}yOBs1%$hu4vSCD(N>&3Wr_d6tTcNvoEp z6UV7}Vv8r3sql7)m@HYRaHGRaA>hJO4NXpkj-^?g&cQ7#PE8#`PP%3y9E?Hj3?i3V zls#G#9XeS(L>X078l0RIIa$^@ieHjk($cc!l82X50b{|TXRXXhih&-iEDA0QmawaI zt`9lXR>I^wU+~;Kr7)javB^ix2=c579}*TSTJG977Z1Ttuavn6IM)E{!L>zG+nm^$iyEDS8@QZ20y&*L87wDs z$B0a2nI&>rOE*Yt3d4g1q6{qpy>4ui-U|jW^d9 z%O_us^(*#mJ*)9VYCUfW(-f7i7QQULjA!i~mJwY}9G8P6Ew)_p=oIz!NSh=uDYxHO zk(FVIrSghNA`d1wIeBs_u{bn2dOEQ%2nbAB32Mu_bcifyW?}YJ=}=iA%Bkog%E{`Y z%BkuqGF`~xhGLMysX3x8tx1{@lbjT8G&*=Xxkhz(1bcNnNijXJx~X*H&L>F)sVY-d z940O3PFUc=u_VZai^;=7kZB5&;))JORSz?nMkY-L1&_wHHN}383fZj&5|!sxMQt;F zH$`P3C_!*Ig)Nz+GDT%Vql0IVr;{h6fJ%oDqX(;klE5S<4^|Zg$GOML_C)tb=goaT z|4X2|b@zlfm3;sF`scpe^!C;Kwy9 zg*v9L5X=bl>hO>X%hCuemQQX9GnqP06@dwj zOpXi-H61y&v@$2KGOB7R@^Nq~ateUk7D1j4x<*r`PCppzutep7y6Kfk=9;RWOe#VG z4FN$@CIpA73QlwLSkrq>K_$YGLy&7yz@(5#4xXF}0!~UCO-`&Du8d-xiX4g@Vv~I1 zo!d7X>E1F6Ev@_o%JUq;F^X#@@bD*X(iGR+pE$|Cq*GA^G}a{KDdcsfaiW3)s0>zA zVG_LJ%0qaTyFv?>fQF;9&cbz57QJS^crB`np(0FVAxle_ zkcX=_BTEriCsUV)r-s884OLGSM@FYXk-{Z+i7s>*^ZdgTbuJ`cgeXumE7=YSLFn?V~be0 zT_#8!-xRT|kDk_;uyl{yzDwM02hkZIbelIprVUf+GLS~N+(Q8-S-a)ss!-2y>2 z4yQ@JGD5;JiVL=zswqBQb|`2GQ&Yoo7D1Kc9`6PPxei&a3uL({{< zLs4Pj2`vpp6?TPQA(qRReHCU4Nu+Fi$t|E5;Kj(G>lJXxIOF#-!OL=u;_2p>$~WGv+|%xSSETu_^jDe2CdVa{PPWWk(j*f#@oZ6u zqszpN0&dGW9kZL9w@wJ)&|pzm@QPD|w_=*o!?`N1EgKIX3R9Ud!7;f(hQm>$$;rc! zlT|^4;aST%Uq#kMtc;clo?Dd?WtvvW`H>dU^3OadlHHnmwDxO6q`oZ4~Om;Nl5 zuQ)k*awx%DG|dfyOrW9r35`sy93m_MLJpdY0xA;(GAjEPGd-R;xoqu2*W1&S=TBbR z7N>T__{*6i*6y}TDwEsy8TI>kYcDQ6>3D%dLF1H=mQcW)L$()Z%QP+!YI%?`VGXF8 z66G|BE0f!!ZP8LkRTq^4w&Q9ORGI{ZJRKc8L^xU9)DL=Yo3_t_b+uIW;=096;wl^Z z7_uxEa;iN$m0a4&q7bEVSE!x&!uRWwIlX!M99UIi`DA`^GH(@h4-_e#w%o*_)5(j; zOG-|3od-(`=fSA1h9@}=t2_;3k|q>+9hu}bX^DW76Bkz(V<4B4kbsA$g1}OT4i3!) zCza18N6Onxn;)0^xq>^AbyaxN_9+}v6Qr(hm>tdT-=Dae^?138Ll={RN25~Pq_#q07-RVoJK1TZ4tdQbrb*b;VpFq5>^Km;D_0d=wocqM|hljCQgn_L^H|=pHS8 zWNMIk%_C7})>bY?F5%~alFD3J*J7BYSvx|{d0%Wh_Q2yu?BSwiD`jT&s?6@|FIKtY zm;9BJJJO+nNkL(=qlcqH(*%*0Ng<8`T1PmT<;6;tv?U&09;qqF!ZJz7>5vnL1E~0K z;&4#t^k7iYbTPVqY&B={<9n4#lWXod?<(#+XQtrVV7Y*`Df`CMwBA3<1Cy03-`|PI zUHj}o$Gw=J=50)CzddNKOx)&s?U8m_oATs@q#f7uf_>ATGKZu!yQJ^fq2UoJ${Uff zA|`o(O6HU`Nf$I07A(8HQS|24_T(jt{msMqjqVlOd!P9x5w`K@*E_!-TUG3>x7i_k z-Ex_VVxTK;@ey&;gNl5q(VM<&oleVtUE4i6eazA;m$ABSg)DP#p!wa?k*7Uf8XvD$da%Zi+g(LaMaS1! zWnzF(6DZ+vaIvs5EMS@>;K9OpbVUV+<|-M1MN#c6Ydl#M1Qiq(v~Y29I5e`GSu)QgQw%5UTqP&vKI5K<3`?A$$FqgOLc+$2Hf@`>IB#WU_q*vfFN7K|)XwY< zJUwaaT|JGvZX9>(^6ktIJ&=8=Jl|GuUBMU6%BvSA&y`i`i~Xw@SMnv}dF+K12g)98 z7tB=_%@aLj9dLTaR+*W(*Su%E6-l4{U|F8fggsnYH&z`w*|qA?s9vhG@+4hj{{3SQ4%uwH)vp^S(qt;isKVkjg-fJi67vKnM-7jTmJS7# zNefymP55+!cCscqMm)J9z;UT*%7h6VkB+mL22T!IV(Kju)MxF-w_I%9o;$O)%FJqF zXcA~*3YIt=k$H0e;ftM@({CMpy((t)wQXn2w9WqNGFw$Vb9VddbeC7=()F`0+bkf2O>{^HM{JACvvdCvo1go_S@uQ?_{2sj^wq4R0}=t!wUi zxa6^E7V8>F7PLlIAM7Qq<6$>HIL!X>(v#eEKpz1p{ zDVS3tc~e+vV*uxD(IaOzwsy^#6T-ft_bG$a(yd-zGuM=uYzR4%)$&a7X|Gz~#8+y< zM&=RUk19NP)|-7$`g8-g;-S65AxS)Um%2S$+_EuJdh3Mq9eQM)n)Y~ZW2Abdq<5&K zcc@$P7DmrmjKvQpx9r$C$^2LG^1O5J?IuL-dAUM6V*TYA+r7S~$DhC0W$dckwsqCh zS>i9n6lP7h{qwq)_-B*AjV;@YO^Sp4_I%CKl@d=j_BQtDQg_em%l-4@YE#BEUYWHK zC$AsBVXSv?htblmsY{*iW|qb$$>eSlKXvWIWo`D&oX@WO)z^F6xp{qXuyX2->2_z*I+!TY$L-qgH%t~p*} zu5`PRn}p!~SjwSqVgCBDsi{YubEbwa2p8*}8ag37 zOlsmxhD#5a9vRy5@`qe`$f;yv%fqkC(zZz7;Gm*Xu#&2wg0YaQg0hfFMwN15k(&xL z^I5~Ay#CArJrh?sHih*RDF&4xj(MdiM8B+Vg5=)^?YFCEl0JxzpAk+AQwW%kJ)}S}p9l zK4Z?!j;9ppBElx%PKxi+PrCczvlIIE~l?FrS;@uI^n-Vc-6^e=y7iE0 z%WLhKAsgINJDKMk+0v;Z_K4QdUw9 zN}Z)H=W*52$*6fn%X0N5QUQ1qjqw~AWE2&}Is&i^~B2(P^^=|*vICtgo>x+C1 z6F>MS6bZ`ct=leqJI%#Sa^}({+MYj;=AWFaZz$$ZIhO*%j=w< zH}z4J*~??g%KCDnDg@nw%{|V~+IryX*09axKYLHK=kq5Pm3{c;bMnEA+-TF&W-ISa z`)u%>E@R)e8%!hy4-Ep7;7^Z`!f7+-do?7eD^Bh^!S{ z6I;rfHt|g0hBH%k6<%PS=5U(d^=ygFueaVY&zG&^J61a5Z@J>t@Ubk|&~$EQ|Tb^L5P_eA2LnMq}B*)E&2J$13!TPLb6b7osM-SOO) z;v!couT3YKnxcN*iV#e9p8D#0&z`e6XNC|N}@fEk1wFn*Y>&clAtC9X9Y}3EG zWghDfCLF(X`npn6pzfWsHmCN>e0{QdrQ6@sd&?IKxLRvZzk2MF`ju1rMYkI3M~6l9 z^fi7x9Th45Y^&w%A9KFnD7+Oh`{=vnofjp~#2gOUo{cTgSE2oBRdv>lU&hnZ5 zDn5O#V>frb;gu5 zJLem_bm0`+gUTX>S66B~MQ&^pUa)quZ1$W~X`zS08&;m#StdC{c;VXKf-U*}dY&8G z)0RYvX@?ihcR#-@%sjF=VxrNqpOLxckp@`;6DF)KUYET!r6+aY%K~;!n>~wOPkM3K zW>ZkJpH+GK*)NfArv{yo*&4gKTd_T8uH5WdFVnsCvfpSj3bYm7)i*3&H#hE7q1PFW zr@2pJp4o2t_TZ&L+2*vGi>6x&yz=(XW&3f!bo=U)UuN#LbDI}0@8jg@c6}$S`-O*Z zp9fo+rnD(|DfZ26UfRj?vNG28)3m8sl~*FgHh(|$a*_FYhv$=iEYaDeWwJfl=*)fJ zGv$Gg*DG1sc+bA8uY2KnW$$E=-Gw@%%Z=FfVgE^S`wuBm#Lr0b?W)_1peQ*;fVW#%4NC@Eod zwZu2_1gDZmBljZK$$@R1XWV9QYFzcEBuA$xhv&NPx6msJrKecdo=(cTy5{ln*Bh+% zl%9EL)#K}vm?VAHa$#Dj*(|-&iJJ;zvaQ969m0*y+)~+bVyRNeH*v*Z(^5{>CNYJqtBK%oLPv6=Xr(1gS znCaZ!%yoIk{{E~q|K=6v7Ps`c&byg1w|5!L`C=;*mh#ryV z^oTd+Ke8>pl|Tcty8C`CTUNbw{vH$o>YL9w7YEnLUsSn zs|Cet?*-TEJ)3js#l}W)-<~P63%>=1&2V{eYHHX%mo?X>curq1_g#X*>+ldyutFQa=**ttsUE>@0<I&nTAZ$PD%?8ssa{Y2I11{aUuvR?r`1aaOk52B? zO4wboPPj_!^s%F>JJ(g+wHLkdyecnex{nY`VsYjoqZ1s$o;;gQ%k+jVYEQ^7{(Z#K zx-@OsmBq`>SlkuOToe9!x4G)A6=xP+xL|QDdiA=f=oz~%SC?f)XBb}fnC7+FZrP@t zCuav4P24H#Hk-33X1m(rPg1-4o}MW+D)x_Sy>t3p?~Z)aCC7FPt$D4z;EK}bd%tRH ze;=P0_NC^@bw>O6NlA%+sDLZta%3 zd0nKIDeB?<+dFGs#XDpb=)L{2x#n5EllFn#d)RsY-MP;7@7Be$uV1b#D*W|IefG1e zaQ$^P&+Zt?iq+0qclG7HrG;*{*KF(+j~7a4Uvj!UN%hII7kODl+s$-NH~d|lZmI8a zIc(~g-G0YHznR4Ica`S7eYk0NY_*~q& zZ$@$54q49rackC{yMJ2!{QcAI7w?~$W_5dN;kx=2PpfK^*YHQaI`TQicWS%-x%|)8 z&o6$PvpsZPmu94?lB&v?OXoIAO?@@%*gUf(n?u*0YnEM7xo?T|k1gq!Hb(kguX-Ze z?&hW*+b@&%POaZB_RGezeHXG!y6Pk;QeuTyuLRtqoiGBJG>xbyTpU+J0h(`V~@ z+s}DBch1h@v-d=$gFi;s+?yF@y5i)@%dUCuN3EqYy+u?egzS#nDYLJcIp)h&!!OtC zo^s#3vAAw&(#lD$XTOMUHT+Uqn#^=OICY)Z_T-5YsUMYB#4nYOvfLiEW2P#j@}fPH z{KL;)oEv0z(c=zhSS8ccxC3YI&hqS?ywkt(d5%wTwD-)Kt2KFx)tZ8I=-q>e9K`s%%MF zuFyLyYa+`qYvu*_l$*zmi(20?-IjeLV;-~1{HD$(8{3-iE1v)2tG+SOlcy-;(M^wy z-!>(mTXX2#zWRWTLHDfNb}%eW$ev-^WoWl0^{KD!iq)5{Y&~^qx%UoRyOev^rdF4q zRlfE0Y|XZvZ<8^6bG z>HRKw>9%Xb15=ITO@d!_4-1};%9=KJ&1ua`TW7DF-Sg&HwWP%l@e6a$elfDUoM-ac zBu!oU+Q&6UQDu2nXT7RzejnGJsky}wJnp~`B!cJ zs&snysff3ITCZ)hcksLeBlx&uoiz?Q`!>k2)su^V$^Cag?ruG4+~GYZpqZvtMNH1s?_Skms*~^Hl>WB-Rkc4ktx?rR8M&IP7dFa)SYiz zlys}Ha7pdDxIfP$x9=0rIc)c59bY2vu4^Bc_Fixa-z)M;S|v43dB?MxPpxdNXPsVq zeddDWi^bZ`+lsu*F!mDDy}M@hE|D4AlX`FUahDdaD$Bh2^xf1`PmfKxaQ5;EXYEMi zh0~?@lNX-#%t$J+&|IH1sIv0&pL*pZs`~52`x8u8RY%5xIG<$hl^oP5u^VGF>o|`<=kIiHGeYyR9 z+%>i;g15W8<-PXIYh{zZUM%Y!ZRqjl)jhvuxwEFeeLm?%F~<(M*@9VL=iK|2@7TMw zchC89YcGRxgKu14^`70_*}b(t=Yp@CE{Dm^;9Y00EM9X|#cQ^Xnd17jcKN<67e2jy zUX}aWs`yGtx^=zoey3f(Y~+?!$;u_KntXceTX&xcw-rj4dxwiJc&_#;)7yFaKHWdP zeg7HEs!iWST;HH>yVCET`L@|AYl=G#D@aHEt$6%x#j6{?MSFd;Zy0N5CMlZ~t_n$%X>gRj2dS69F+4lCFJ#qEO zcFNpS>&AJve>+-VClV&{@tG>DG?5xR`rfvN#ZoG!~cG%QS zL7NMVO?Mv7i_l5-DNy7PDE_Oa=(wxuWT)8KlD2oXzwu%dMC%F5F>ugzHUT2CW&n$<0? zn3}%6etW;Pv}b<1e66>9e^@qo?M;Erfw@83{R}GJUFQ4ze3wsOTim?A)i+7x0}6e$M&?ncYo&I zU7wO8rY&Z9uASB5#jc$0zFiLQYLj#pzj!R?+oP@R@$y5yfA>Y-h>fhPqvPCFSA_|k z7Ws2#OXno*?0`#VpGrTQ&ieIZwwv6%+*i}3i@DAR9_r1E_!{U%?+{qp?kbrZi>|Jb9H&oQcrI&et&h_&P_*IzJ68R9CbPJ z>f6w3>Sr&eq^xE-WmR!iyD(w5>@N4u)1Otv%>G*5xh^fE=<wK zu{LzG(p%}wOt;1PetY+pn5<8Cy|H{%^3yEm;xiZCYR5b%i+LY>e%aBkZ?pY88FiMj zwn_xedHeZ%npt~|e_G%4*-IuH9qZf9deeD{;l#O@lFrS!*E(%0-)#N-p3NIyWZpVu zsuA2I;-TtoT4KERwP94oPJsmvC!S^$J(DnN#%!K-_UgNynNM9hbE|mrMxKbx!dE}; z@jmaoyuClp-?ex3I-R|K-~CNjCd>-#U3=){#pj>-uaz4sY$_{o47%*NrRsB9&T95s zxqsfp?s(&MyL4?<(C)B@tTUEt6?{(4mSuevHRDeB?P9C#a~FD7oV@pZ`(?F?tC_`r z*%&v*J}us8W-QF&p4+vz+&C$F`?(8Z&lXFhb-v!baN_#Y%XtfDf47P2E8BZM(nMVC z=fC(1pRAH+UG3Vwy6|$lotoQZ>`cYWkDa2JcP2?6=-o z9)0S|j_bZA#_0>H1El8lIjJ7n-@jJznbo=U$ldE_FN#c=c$;7Qa?!o}B2hQ?ipNz5B{8&9nnW(yS}IzP?R6 zT5F^GTXJq$?~!ut8{0l)Ml77Bt-3WXZPk^nY&)kP*V&m@T{=U$DCV``>~+&;@87Dh zXv3Q2Wx}(S9nLBml=!o;9m~D4<*@9eTPJdNd&|nM?MTnvDYfUztb*c_QmcrcCl}|< zjYzs4-hL%{$>;V9stP&1D>83BFI?O6S33H<=GQIM%Vg#!Y+txBE_xl`RE10P#2p>yW!cSE54;|!<()6=GrQx>&tSH5 z&)POR-B`X_uZFua*D~XQuF*SFwX?Nv-U(~#=+&6(PrVrRC)dyDOrg!be!Few>W*>p$-MQ{Nx9sVh z(^XoWV&C|lSryG?x85;l-a55;8?W6zad~zrcjVu~$*Q^W@zY*+|B*Xv6SOMR=vn%E zcbUC%&$Z5_y=~8X6Csw8Kfg*%sqnAK&mVi&OguTSW$Q_ilbXpBPi35MR{PIjy*;_| z+|CqXXC1K%&%PDf^`FTPK36JJeQt8izLnh~>ln0CJC??*J@MK+uwj#SxOX~JW!1^- z^SwJv+01vGTEEiciCNLxY-ytehq)Th-$ZXaW7Y0*FE{eK-QwGgbJpq>y*)3QT4fk} z;>FGr*O%LDUc5Z!MqkrB-<{?YQaO!$U;^B==Q@3o;d+vDiR`lub+4q#6SJ`Ept&W+VbLh#+oxOYK zzV;RAwNO#x;57WYX>*~2t!0_cr0$sG+C{RTUhJ~DTl3Cq+bZ2J(tJI~(vrSxUGwzg z_qL5K|F(Ud5#876qt!bt>$&^FwyW8^u6)VTvUje(Jid3{qCyJGhZ!wXMeT$wiSnBLRk^}&%7gO@Fx zeddc~^^8^1z57kx%EHXNJM=5Six)J*r)Rr!~nuityVHu8dJxBleI z8`X?Am+@&$Pf2F3(vj%v_^h*T#ix!}MMay|ywXa%dG`I16Vt7)M=EVS=4Cp~Ii)V= z&!ZBNk2BZ2e(||@y=(lOyk+b1UC;lOpYuC{`|!IL{Z@BgFV43~dC@1cI#27YiPE~z zmz$QDe2tf=H3>R>}XuVFKv{uQgj5`sg7gNGQQ^Pz{!VPsCqh-RFoSqwK zuK1F@;q3XXeAUIQvvPgc8nPZqk=pS#FaL2)@{)604;4PJZ#Z-0-cr5ws_ReNRlP1= zpS?%uc;<^5vFzz-eGV29DPnW>wAww>xtH$m6Uj1}TjTRx5zW)a>rZaBcUoFl60<#d z?h7xOC1Qt#X9qsbdY<;|_NJ=h?Z>~!m97k5bnsQ4S$@jSwOUgqt~kZN>5NA&mr|(L z+F2W(nCy4CVJy2c?wDf`w=j>S)+#4owJ#PIujKr^z2daoq7vr_6|Vjn%WhmR^NKEg z8}R+dua!Tz=Ud;rw}0mOS??l`eJe}acGUK9Hv7VZv8JM%*%v*xvN(L~h2>qZyp?)F zrINB?R*`FSyU$;GS@34#>NAa#VV)!MQbNX?NDE??3L8b?wjHH{LvR zs!qJ<)Ls~9y?ST5=_$W#rBiFTvu5db_3Cjo=B;YjvRY+Bw(5q}Gv7^=eA#QPP>Wd7ul!KI1wG@SwM2)mJo%VVaQnf|5 zeR@^Vg{IR#7p^#w%QPiCY5M953l~~>L_}03Ivo|-w$?}IbKlfJss6(ylk_;R4cZv zGCxg~`u<9o%$DieS#USKWX5GvmYFXe{5j%e{^i-Do0^5&eok5OdeTYf$lrV3%GkcN zN@k9Zj-FqW73(p5)~lInOJ(M+v77PYGzQmcF6)No6 zqA=5e^N7OCje-xmxHwdo==BO|TwUMkGQB+0KG@v!s0 zG3hJ&IWwO+rpj^bRL7AOogUNFPF-oWl{Ge6_VnJHLW^emqRdM6ub-CNUfK2K>d#DB z?{(+1GS*yHYdqaCxo>~FUB-n=^W*OP+THekrmV6y<8R+hEz=)MYftc&+T68b+sc+* zE15nm(fYYyvBPtx9BWl+Zb`ip$2C{oxgL5gyu^Is{^ouasl%II-nTmY-EWHMv#aSR z1(jAEdLl9-a>d+`$5%9GCw|e{>o!ZN=b%z+L|g8yyXQUhEq`9nTjCzL>HW;2x`hYo z6*>>47;n$Fsy%IauiEWz_TBKc$E|Y;jW!<4a%{ekSn_-$*OcQgcFvn}c&cOCaobD9 zMejXX=SAx$Pf>DPl-cCwrk5W)H#PEwZ*k7nOckHi*Jo>|zWn;wY#z_QdUuyMp5ig7 z8kf>4Ov18PI|Qm8jXZKn-Fa54$Q26{zQ9F+LY-GQ<~nh6v3R|T7Pq#rj+q^BHZEnu zi@7>0TdES|q}tUcs!UL7k!kC66q>4&lrUjs(-Bpd+__7 zOSn%p>1!!@Ker8QJnz60>R&HC@rLre;#W7uR(&sj=rP`>z)~ zf9w3Ly|$i~Up6FoCT?V%H8j+Id{Sw`PoxDs4$&T><8VG9Zm-mxZ! zY1gzxvNgUs`SXwMoWHM#<6evHOUBKGMRzxbMX7ss&oK#{W-2i?anGf$33s;K+OKDO z_pIj{@90fik8MvEj+__u*+uJ;b+JUrRF_Mo+}>Opbh#S!WjKR7^Z92l z++Ll%e2=S1?)A2VUdx>hJ>4IAEM@wvt+CnyR%UAsiA`fIi3pvT819)G?wxQTsFZP9 zdbr9l7M~llrds^<(W#WamXQ1P{gz0R7sn!0Ew;?mi#A!j*(77rO4}gstDg@nm^Ue6 zrN~C!y>i`FXYWqS$?dBOn=En1U2e{mF7K&s$LHUa7Fn~)?cS_%m(vk1O;_;g)|?EV zFP_r$e07*W%H>-D$J-*_%+2{X=SAMo+wCeykv$v!)GtFLmnTdvtaOUQOOC6G%0XH^ zHaxD4yt%ff7bX^53OM8-^(bzqSbm;ptkZS9YjZ<4-3f853}pT4AbwT*Kyy+fy}CEwRgOweX4s5NXO3Yr?pw=-|3dQnN#gH>VrCiu!zV+nsN( z?-#A%IAa}CUHzp*UG!~s&yvi;o-S9Plm_*?F>RT$d2z6rv{2Y=|7@#+_pfc7 z8$R=C)Dw3zH?2eSmi=7Wb&tDWU$U}i-jfr$UhgLH%GI*G%8cc?QekBF(d<`}EYIue zyVJsgZi~*^-1R|iYWTc8AFSl6i-V?S|8(~}UlI{$`(|(PysM`!OnbfX)Uj=9Ponjc z?pb}jU~Oa^xwBV2H#MzY_DVtZbNSTnEm7Gzk8=*aT^&B(@kP%yo1gdE9ye^fv$tZ^ zz2=T$p`4=YQs>Wzy*b$uUby3YZ&<*TxxsU0{;K-)Fz%jlWX${QXV8rFtf;a zy0W!*>w%KzOE%0tzV7Ao870nh)txG@%j&MNo%7x~*w`zpDyT?mntH69>BMATx7yCs zs8_|J1y*weH@j9xu2{Y(D{gV!&VSO&pIQ}qE_&uFrD~|W^wm$k_4DhL&E1Wci{DQE%$B=&H{0&w)zChqF}r11&LU>(4xX0^ zMq9e4-+NMg>fFE7zpu2vEYElIIX3I;(XQAN8x?zVPHCN3^(Nx9(6z5VFLH{Lt={Pt zlwaRuvQE<_pg2X^?V0G|9QX2NS|=oWKj&R*JZZn&^IY`pNinyl=R6OzdVDTBPpjtV z#jTsum))MZH0aLEr>*Mqt(5a>`WD4xZ-}^Z@Y2HcpnKxZ=VkR$Zz!AB&w8oNbeLtk zrQK@nc`Hi(yxX_=qUZU0)2^GYeKz}i)Q+c>-zI#@TRX?Dd-lDm*EWX7c31pllr@q0 zeOA+O>a4?>r>}pRSA6&L%f+*+n`gbUeDm|o{khjSuQ|Ld=j^0UQI~vPES$fyRd2CL z<=J#+ckaU6pXtjh<9=S(k$!5v`e*u@t-a6Z?q^@4EOmCGA)k-)UFlxF>C<2C{Cer~ z=}YHc7ux=3;NFw*)uui8{L)QF{j-uhlD*aZrsa69Zr>a7*>qFN_Qf+7F1J2XWiP)k z;(6$IOYVdj@2+LNE0y>?Aq;`&Y&{r*zvZiS&|x%!@YLXV1HLZn>Av zE7!;jhcirWV(5;tB{U0)l`c`bUj?dGVwVmt81m+Q)^4jE&i@}y*lFf^XuVKT-!Wj!ZxqC_x$_MFU2t$dneA^ z8nSoCsUNCSoK{Bm+PN(WIlQ;Ga>sS6Bk$I9e@c6mc`@x}(Z2mQ8!yD^`z{O>yYG5* zv!~R(nNRj@o;M@v&U?q+r=2UmoO^G3AxTO&Xur&N_j7MUqqcuO`RPlsWnRmsh-*ex z@2t1VKZ{%bwEB=kHhZ}C;@7=?`nwz2o;=bm5g_-x+f z=egm#gTBm;vXt8SQcLO3b%vcw+SQ}wtzQ3}H+%l3W#`0>&Wa0ub+3F+!tTgl&u72d zm;1u(c|qOW!|SZK`pk6qoak~lH86LICxh!OpGr(H@*9zn{++!c{L3G#GA}%H=8d~>peXyZl&I;9rz_*mx+Od1yS58enN6$R^X>6xmDT$U z%}#jg1SD>sd_DZwPw^9HAFgFlY&yQ8(Q=*AfpxdGWUbhgwdmBEH5*nhD&$fNRQ>jH z+mg?}4f`$_p4-jSy!^agyWz!$KA*pqzKY~~bY#D|#l`jeelc6_x;JMhzm;!ZwBz1o zk2%X{b_(TOJ+-F%x~1G@Tcd2x`RARsJUV6YGHl)QWykIxkDPN;kEzhj@Xa)vvpR3S zJSyLLuYbK*Qi;WkotD)zZaph3Df(R)94c<5cgA~}ao|$c5WiPT)oU}w&Mnj1^~+A} zn>fFpZ7fGX_??B(x99x(XZEDkUhH4krRZ?{yXUUc zv-Y^JKmS%@`%9~{KD9Yb$I4pys)Ix3Js02fXxFccpX)t7pPq5%(w!?W41e+a3!eKT zIW_S5l26~y&3aQ9WUDD|=lx+y!p4+iZ;Z^BUVrer&angsMD$Pv)7lMRb6BJ=1ZTo+Puw+<)U_8d{gs#S={k+dyN~{1WV1FB(9|Hl_j}& zyMDrJv7O(a#c%Ij6Z!OIZ{lr>_g1XuJIiOb#Z!V)@=@RzBa3 zEYDl7dzSTv=FeF_m&b0Ny1MVuS?RAQ4{TM`7cO}Gw)p3D!wa8k)AM+aUp@JJSL7_q z+sAD5%i|1u>jMszyDi(`?{u^B#&sy6WWbIcvE4@?9D`I=$%!{{9-I+e~*lTU$bGsLtCHgM1di1RH&i?$l zeSPxtU(eFm@@Vz0tjiJEp3iawuI$+RLM~eC3-9x}vUPb}S6<#eJN4S;hRKmLTW+j& zJ^Jf{W@@0c^4^eHmYI(^L(ZM=ds}N`v~%wn&p_?7SN1NAx+xL&HDCFQ>B8{6Cy)DE zv8&g7eR=3gO3-YnFH3cb16RHk2-7ZX6bhG;j&4Ol(oBFU0yV6U%1V!b&cm=J$<_5 zeOpz*rf+%ECr)1z_SvXJDaP0G{j|bu8C!1mR|~2i4g7r9Ik@%q!ua6GowJ2@Wu_S# z?%G$U)t#laIy2jSw`Z|)DVCVA~Zf5w-%cttBUZ3>+Zr1BDbKjjA;>ok>jU{7`b1%L<-938VTIm}? zA)CBo4qUfuy`dkwVzbcw_0p4U-(?jqpY-jXRpAb)8@~=rym;r%s<^GUt)!*zNNr1& zPwUj#wrbN61~F*~x5J5C5f^5Ba?nwd+ph0?_t}Y~Gw$CE@`vGdX|ZoHj- z_I=^R{w(z`Pi1n}O$$v|dD}9H&12)FFTLBfbU z^n>raGA9RYb4o3)Jy*8*>I_r5uBQp)T|kYr7N@wxXVZ|-I; zPLh^%Kl8Qb)FJQB5pq-4^BHfbs>}O4KVCdOcd7G1M*?N!f-YMZCq+^b3FHO-5-(Q``L^s#BCYpVOrHC8b%E~l$~E4uQ+ zvfEr%d*|-SVVQRtrOmQ6cZ=wqel1gbN_e?`+*8}4CSLB19afpwC)t{LIWtQq&n&vL zlYL=narZKIldZ3pRlV4J=IVtE@8f!xBG*Zluie}t`|?`Wv+Vf`pFGs7V(UNq?StR@ znR6?YrCJl(Y5`v>xh(UZY{@~ zhgqe6*6qBraelhhj%N{9&ZKSDn#;Q?@c7-e%gzYh-mI6hOK9u7zvA9Aqw}T|^VY;x zRIOd}S1+!k`Jznmwi8aCCvJ7g*Pnm2)u?ojz3Ye5JXg!NMNG4dUU@40=CkdmvubK< zUguS;+45%XtjuF?o@b<;dh(TL3g>~NcH!%uZtc3uZojec-i_7SvNPt~;w@6{ikLXP z_^o%^+BLh^nqRB(<(}6w!9CRGKf|g+SI)oOIro`W`^L{fpZD^a>^!Gzl~o|TxP&i# z#dAG{tH&?ix9iWJ{bJ*_3%VIb9v8b*19iNmrXQ_L%`sOslHT=sUjK?2kF~$;3AR*U z_G(>4ivj#GrPq`KOMhr)t~D7@@>EQ^b4*9pT8+t#KbM0f6c0M>zlKwxA&!< zZI9dZDCw)|x=L?zr7IU}#EdJKdzwAGzI^#yPper*KhE9n*vysnZTsP6x7IE_eCe^a zRgy=}(U?c#ITxOnZ!9h^QP?{-%vd!!O_Z;0n|YnZZVOxgI`L)G=C|K8NSSo`z-yz+ zjkE6N?Rm62+S$7Ef?sA-xPsS9p2(zmXKe4}X3xmTdUD;defMPTFUDJXY;wn+p4rrvi0*yj;{5~UUWR@ z&uMe<`%%&Aq4QS;&AY6!I6)^b-SE>Q8KbGMo~y@wwVPwBoIUr&&hH7uu0hvATd!E& zP5PGBSDz>S*M08SJ-^>|s64-BzE`pH%9dxJRj$mf)YTT(*M0eLqsl}dKBXtZsd*l0 z%WT(4s|35o(28Ww@ar& zS4LZHdse&Wb;L`x-dwl*Q%kR#&R!gGP~oxX(nXri8_kR--ZJ}=vvA3rs|^ztOxx(2 zz1k|WG=5t2mpkWTq9wasCvW=Jv&Yl_)ZhFw=I7p*oaJ2gD0B0gS-&GYz0HG`ZEn#I zGfOI2eeUYDm3#azq~|6Fd3`?}&c5jR<0+>uox3i2wPJzsz`F6z=m_IGyLn zX~DHVcYW@BYu%)K%w0wE)Mwjz#eH?t7kk|+k9Exox3t@|D*oKHj7vM+o;^MFDqAaj z$9ymAj+ep9He1BKZ{G3z?Um`v<$edxd9ml;YEHR1PnxQ_&%Jr{CF-={R%7F;?x}Cm zbNn3m7@mLsc|Ux<^2R4schjAwzKXLCd15hH-&;RepF6$do)vdr|NO9fXRlwkF4K;j z7QXeF^vkoU)?d>%-7|Y9x!dcGtFO*kV|DXrQ;WN6al z*WQa>^z^dFLG}52^d>G|WRlZ;cDG$|P;cFQzR2>=<$1|FURz$xine^|`?JdWWM9V1 zcfEJMe7dUDl);zR`sUx9THytccgxjAUEjFs>-?#yQIp&+>+CkM%zRoRv!}%D$63#P zEh$UNqw90L~il4J3R$Yq?BHy*7;ovvUYd+$$Dc+ zCi}6lr&i~JPVF_5o4LD@b>{NxyUu#Gz22Nc{hWoLdiG z+_bZ+;arE43{&vbrE_M_y5n}Kgjs6Ob+4VbudaA?oriVB^eZZSm5#m}(qBF~clAcZ zyW~LTDK9@yUbwhy%GKrD0-k22hH`Dw&Yx>F`KWaA!UuxJPIGq6j`*Ez(p$5&^6ei^ zOPSwS$`6#yDX%@hKYY39nmkYDug^FSPCIH+Txz_f_<6;w zk6$t0yf1TGJBu3ss;ghPX3p+P!<(<3yiWG@vh;dly47@N-emdhGJd-!y)-ww9hR@Z z@LZczUGe8FhYsJEI4A4d%9t;*a%RVJSBJh?b1wN@#G2D{m+Gi3Q+sBcu}@oY`qG)p zQ)T{IxpOX_yRh)(=kWRSlf#|{zB$=-w#QrKuZ>2@o@-|#EBWNiR+&t< zLUcYIS-W`U%4;9PA5K>LJZ&?}=EzxVO^#(5s=B?Me&y-==|SAFbtRjRnjUgCI`b<` z`)KE?$f<9N-H$!xJ-rKUbA8m#t7~pso+$en-S=_g&Dn{S zQ`gK~nkD7mv+aHQy)9o?#_U<+8y8l*^WFL>SLS)B9GfH1&>%a%Y@>eYnJ*s$HyIX{ ze13m*_Z59!fA=LK>!%8A%hO#aEceo72kIYi4YG6L_Ut z@4jVma&hCl^vx#@ZeO-_Rn*UGeZA2s>oTWJx8L2Ut{7HPe(+xZfvS3ach_R$xWp54 z3piSmWqao}o1b0retDt4{G!Xu$$YP(o|=6QJ05!~>v3(#oNX<;rc9A?pPwZ>?^4a? z<;=-tb$e1Sbh{f>ubHJ%n$11^`Mt)&cZ$E?Opp2Xw`OfjnemaosdK*lXE2Gow%oF{ zdH31PFK%ryF}%8^={*m=cbU8nyRN(ToPSn++&`J(<^Ezkr_+}17Ce`gnw@@e zLh|;sX|3M7K1a{8?E36zdG7OGe}nU(L07GAp1!(u|w>%bkDi6y#dOe=RwN!D7PO!4iT=(E;2)=>MxwI#{E%0K?{Rfm4B`kAtwcWuE$ z(G+&oc3W<4@ogWzNtvz-Ss9XluEoeDt#nS;*<#R@7qK^ z(alPg4%7Z{Ix%~+T))|5vX~`reE7|H%~PA`(;PJ`L;U&dj;ED$D37 z-_HHVzsbaj#TRiZF|pO9l9uPrJ0Hlj{<`(ky(?drsMVFbo;kWMeA$_~AHM3xy?mCp z*({|i+9x9Sd4^jW+dG>%J+|GYedSjw;(kxhU0w1v-dbHm&qUzan%zg-!(%tD{IXp! z^VPlWGn<8y?PPm;N_XdOySY;A>Z-17tCudFf8q05_x_dV&$~@nzx?uPyS1`rIyR~+ z^X48odE(j`V`G!gk*~HIe^H&<-yO8ye(lUy-s~F}-DliAl72P!%I3aJMYidxLg(A{ zKA*jFIrZ$R_r|_Ob6uM?KKxjEcxRrTy!V_d{lVLNuWR4EKJU!LJ?qWbN@vULHoo~z z(La`Bj@PZoS!u4n%yV+1r}8n~wdN@`x0t^5<*K%IR*%<8tXA8)rtgmxXYrScGPBjU zrwX~5xvV{Q?flM_wI^m}q;7ncA>*>^_HS+SCD9;b5FlxSU(+VXoH^97FAv5O^V&8*^H^5V%hizi*D`5jlC zb&u$B+pQueCXtr1wdj}4X`}5%)p|D;h9@oCbT4`B%EL9czinJL!_jT)0U@`SN%ORg zvUaJjoMM|&ld@&Tw7Zpw_grnWckU3lcUG^Y=KiuT$F(QVKli+LpRRSPx5yU5W%t*w z@Xg$ow&|n3>%5yL_pbY@yQkOr##)8HnP!=NI@npMTH#Esq|V`}wbS=XH-4EHZ60`k zs>3<0n;#+<@0)phZ(hA@%4Tt+_gkMmK61y_T-xmO-r4cNb2sOD3*TwFwOmvu=G(Wt z>ceMqp6@Ncn`AfN=<12LF()R(WPRCryZ4pl^e0O*9rkXWHQiaVZ)0z+wTb1~b45{- zWx`gI-QD8d*8Hw~dGzT1=9J>38`rA5Bfp0>WxUz&;$7PHt|P$#mv+zXdvvz4{Mgr9 zWu@I}=I;8Z%4GU>uD-I>msdxxG2TQ>b$Q-et_xFFsVy(tIci7FPUr|BP8-MJ8D{yCNQ}iaU8< zdu>hRwdR1>^6Rs1Eo}=CPFnBUx?11y*ta=_tC#k!*XuEMUSjBTdUmAL&RtWIwu_ZW z+nAaCOKWmF9(3;8>Yyb#mrhKr)>wV=)o0K1C0}d)R#^X)gD^BWfjXdWnI&9H=VqC)|Axn zuQL+2yezeqZhrSO>uGwyUYo~~d+q%uloy`w3-~N;lP~Y4x-ITyNy>hnop<8vpIbeb z_dNcsEPCpsv$uDLU0Knz#`i$S^EGchpC8*S9Q z0$p-m1zlCC?mY6a{6kFP?@%55xx_3EVm03<@mN7pQ zdSPL<;w-!Bz`ZB^DrR0bn>_P;*&~nB%eV5nuAlLG?yjGeSGUgZUaXjC5aiX!5fv4( zaHCMV=E6;P*Cgy-Ehx3uo%6-yu*$pdgkGo534L!ebxGd7q;tzp?|QAV>!rrYw2aj{ zPa_qpwoL2yRmyZ0p4H2-P*tNXZQ|Zdy#C(rS6sh7FR$*q=IOmkCb4E&_p)R5TVE=k z{_K2N`QGhG`-8q**v`6aakXLMpW}{k+5ApZ%B{pdE!%N#W9N$P8F$b1)wSO8Il6lK z#+9K~mQ{9#CzjhDZL;!r*W8`*oYCvL{`sXgudQqL+T`wexxH_nDL&QLp>rKQmHx0vC2*9jfR)z{}#iL6f!mo(8Wvbb%@C-MO;|OHb<_U6pgk@{(Kejo2w?KIp#Pu;$R4opI}qMK(nyJ+8LX+Gh5% zu20v~>uO<8)}xb~SGF$NJ$>U>wb?TlH{PFCd*WG|gshhtMp;NW14|erNYo zZC`Qu!CtQ8#j@;dd)@M)ralum?;m;EYv#I~u&}wR>bI&6yw>Z8Hw?F2C&R#1z~tay z!Os_=eQQl`&PhdmZT-U2UxQ05`P!L-G~P(gIzK~j`NSm?)J0q0E3$HB%u$=5@W67d zBBPQ=qk!7p#WC0U9QF4-f01bUB%QhM!^^bnt()i9&z(~^(|_Uh&S|S&?rZsyAF}Jx z&Zx{4ni+mcNu@s~w#NN7ovCwBY_r;4U!AOTank~uy`xl4T@;E`;nFPotQ-1ruD-|W zvJVQIo~zHkvik7NdZ#NE$7j5FcY0kLw}olr`8(S$_ubuf%i?9y)?HH3}Oc{bD9(anCCCjnpnFH8qvHG~I4XSgBd@vaYy%eLs~M z{@(Nc3i%2CI$tlBI&=Gz`$xWfICkg2otNjH_AGw`ixX$poY`8O*E-wC`C8gbZMmx}?isIsdh-2+lDwN|x8~eYuk1Rn^7_q= zylug^E?hWz^Xt#gnrC+A?h2KC{ytyrhS#b~T3Odsc3LGCpZ%&T9$gw79vI}gRHFU`U{4(DzrLTT@b!(={oLP?^ zu5x7ZxM$HMFhS?4>Z~UmYC-~?%!{)umh?Sc$LA&#zU1agll!K#O?;MgTnT7&Qs`t+ zXA$8DaCB(lWVkKb(B(3Ti!*>zxG|{7_I~%v9d8z1JpaP@vT;!6tmP+jKAS(2Yuf#O z?X4;AR-a*lvaYx=o@HUIi zPdpuQQ`I$R%FG(cw--hJuK8=5JbU?;JFg|bU)i#B)>i*HM|rEKsCYCw$6W7o^tTQ?<@HgbdPYrkO39q#p7U-o_RUL?ojdzDPi>eCSm5WaCOfT&V@!(-*`Oo%${^=)zcYaInlXcYd1S~ zF1fQQ)7(lqBIV}h%?lTwEqNy0x3gr{Sx(LDWd*|eS`}j*58DC#Xef3n~nd?_S zKV!S`x6NC;UO)F$JCVFaWXT#&4NomkMU~crG^;i$80Pmjzx zth#mGnWkxplX#z93zf>`+FNb4cE{_W!*i|f6@8v}X8z{6Tj$+EX>A9!n@auAza^_TVE0)f~!8dyOTyLbL z`{l2-3v5r)OnkcOtftggj~NX-7N6MVmbr{JFOF+a=YG zTP+t}GWu^_h4rIhYU3LB?39wuwWr?~&)s=IC8p}w zl0xZOPTiiuaw{1u6gt)V7+DoM)r8!oxtSK}ZJViUv?leTbIqc2t7k;V^4T4^XBu67 ztw{8DT+CB}q_4F*-zBwg z-446yHtUL`w;Eobvv=(FbV zE&ZvMUtMCFESIeazc<~S@7dy~D@~S#c`4twN#C?@W`5VTs96TLk6qH`@he-Jb*ms- zBqQtLvPUss?O=#{K8wNjIHGQJ|}Yzx8;p%Ch!zadt%vt zPx^exo{l*_t1_NVJul=fH9@d5D(u-VzT%qacTe4Jxan5Tox`<8XG5zG$LV1eg3)9XG>$g-bdKTd=F_C`P{Jhh$tInC;$#<#}pC+@{=B*FYk<$|t z9Qk})qJGq}Y=6FP^KLVP-aJpYlhJ4Q%AfmH*y*wToT*~Rl#X9B*F94?aB%Xb=clFk zeU`2dpTB+8iG0!NNm=YWkAx*_uTSPwcdGmxeetoCsp5jLGXWDCS}sjsSL~g-BxjE3 z(Ken$j-;t4qqIM)wYnAa+H@C>T-WKTuOf3!>s%Dsuu<3Tecbutx z5+2;z;l;L7foWnVQ_fu*y&3i9`_Fm&&H4LtwNU$G2ODkXSsHV_iqFroO)FY^-_~r+ z<&G<5Ds6iz^`?C-_!;4?I#HqVok)j5_6d=eCWozUdu5;X+otR5GS69hVRLU{saQ_s zwcUo#e3h#96qV95@}WCWtg}!R&4nsQf96pdD->PlZ)GamF0Zi z)B8qmU)iFZ+*h-H?iG`FKb^cyYr>a@f>Q;p9DH{-?(LfurX6`a@?G%GNSpo6XS3&S zch^}dVq(GTy2Lu-`{F8bnJ>AvJXdb)o?o=_$GhK6_YGvWwyCplEPm;4ar4>6!`_!Z zfBAY-WxIez+q7A;o^Sm1Coiri^VjTI&yVmu%qk2j)3j9o>hVnelFIYGpKFwN^n`Bd zNnQ8iXtc+X=!9c=7fy?0yPmF`kiX^e=IU=-pZxi@Wv(7mW(v**mUCVa`KUrFZhIvr=pWmL(T=;PkK*uUoUrq_qn9ao=vk-YBC z4tMj!oxWz#onGgboBM0aM5Zg=db#Gz&39W@zH^wf=iSbgj=#%{*A;wOXK7Ya^GTTL z%C)Ocep#;0^kBC+kkhkb*26vGTW6hTk6*NPy6%^|Gcs-m%e>c72EphrNXggc28^aO=ta>dOqsRz9XH> zuJ4?DS}}b=N#T!u!0)LnZU&Dj8WZ1F zT;htfFGN2-YJKBJVC;G4r*aGD?wdCG@6|86=f0+2cVW@|I8K#L6>-A{9H0YgCo=d|yuD*P=lumsyXF1Iql!{r#-zS{ zc28%Yxyhp|maUD+o$k9I?v}a!S+-qbuh~4eBYW1%-}oe3am@3YgvUe+kKMKVIrqPO zdOkJo{O7Nlt7MV`;yKst4rec)zBqX9{i9c&bjMfTt_k*4S7P(X?42n3^8QlwYF%BP zFJ~7noH0A>^ZV#ykG_5}J`N{KA(`R|h(!G{GJ|DBL(*4VmXZ?;+56^Dy>+h3x zewlwQW{){<@z$)ZJugqF7NwLbt~#<^*6ZaJ?~_YkB|c}oXgyc+l52zSj!(Xs+iiq3 zF4g}(!eA)Cz{JGJ%*4jP#>5P{aE+0PS&&6YSkaJGKtw^wNL1Ot*fGGtNyQ|=xxnTB zEd~xoMg~S!rtkXi1m}Oc|AQy~vi_gh;xCNZcq9z}uH&hHF#lWke+J(E55@0~zq0=j zIPpKjgOC5peEu`MDoX$3{!gy<_3!JycK&C$YyUCgKf{TX`j2n?|7`!y&>Md-`PPKL zJB@#>{?8zH^gqMH{2Md=u9f)DaBS<}S^pWX>VJs;p?|VIdj5xxf6eMYdH*W^$5!+4 zKSOK$g_M)?U(Ek{<3EG$&-AYw|1&%&(yolZ;{Dt8>3q}Y{eM=Af8)M)s_r(s;C}|6 z{|txf&eS(gwu=;ht^eoLzvXPUtG^^)3ix>_V`II`e})qW`#(s_v?~`*G^~GK{AT#e_K%Fbpgx{{81)^=GZWB>ywm%U{|5!64!Ie)+40ot5h^x6D!H zp1N_S{+}>=*B;;QKhOWMUHmssvYF@B*)=!L_S`sUR(Rsk#G}e>?#vdFFK@m)?^jiP zdET5aFCMrvStJ!4dDMASxKHg!j@y+;*0v3Q&wr8n*De>S{A=Y7)1pa}|1+FQIR5p* z`|XAgEdmeqi4-jEl<|1vE@g4?SZ~LT-W9icBn%P`_J4eSt3E%iX2$-NX&nEyU6#LN zU;Llp&_cV3|JKE>`Td{4zrU{L!u~&A``#wRUp>8be}46U2F32L@smIG|6`Z`skQs` zoBgY&XYc!cai7|kBIT(v8->q*`C<69U;lA==-*HEkJi7>e6RQV*Uqy2yf@vFZyta0 z&_}x^)pgygGLf?X465~QkFVMP{3>`P``1gOX`j`n?O&a?deMh#-(O9C_HzES*PE^= z>Sh0DNcMd`vA*l*e}<(8`?J0!pXEN;6MxO)vdi?+ztN_FL3yV#TAuFl_)nk9ru%=rO@I5J!Q?vcoC1qSIh`qC zr>CWC`P5SX=jBvy;kz@|zb^GQ_*e3uVe51Iwexpp{po-Hb>rKl{|w^tKSKXL^ZB<~ z`CI$j^{?}PoqoIY?|jSJ{J$qlFYo(z^x6K%`X7tj4iyv{ssHMUef@XEe}?GtY`b6f zH$T^I^?oY1E3$H#lLR*cD3$%`@ie+eA90`$^_QGt6TJ+fnWX~ z*U>lrEc%5ySAEy*U#)jV=S=*yo43P%-;@2FeRJ*a4EaB~?(gbd_J3aed!>kf&h^0h zXuDhY?_GGGvNde^t6W>x<+d$Pp6s#yW@^9l*G%RA42$A_tdxr1^=|*#`MKrqEAnp# zo2~E9*Z=xq|E;V4-oIM^;>P}c@js?nmR|h+uYT?H?74+gOidiN=e+s+&qg~qHsIP# z$=lEN`~GVJCF=*_)9Sa>Wq-Z#@YBVkN%q&hx9#7)>)WHyYj$VqpWU2jf9d?zx@kWD z8Cs71v#ag?^7(Drw9I4n*NuHJ1)1d46^e+86rmKZCmc)#ra)-`Ab_ePjQgx=3@*e_KO~Y&Wjd zjCjibs_Q z-!)q6>GJ*6w?D#hFXvXUn8( z-03}WulL0hcf}J$GVPkDKn9*FnseOnOtB1hFhE z4yAk4_7&x~3rsdFotPk@3XYH}}rIxpVf+$;HO+(p**kOt`UU|CG)Wfd?OVrWq84)o@*& zX*DbGbXMDAQ;k!*qV<<&E!*i);x5&Db>c>kYmr;kr|sgHm%eZ=&xcuSR{NH}t1q5d zx2*Q&w^D<1%Ou+pXGd-XAxRL~wXM*&b&k%%bY@%2m*@QoWZ2nf{kv}W{n_-_{~1gU zKX@v;I&$Oo4bB+z95y&(oNe)>(71O_ z&f|1$i^u~7G8zvp_?R!xVHZ45Aj7m!hU0-d=aE8XaOEL*tk0xyagv#G=2mIJ4Yv{w zHnZ_a{AW0L;-8EDwO!G!tG8|Ep1s{y_jUgHfG%;*vaX+tz69+v)9=lG68&xU>-=l; zw|~sPx9@t{f`97Y8_To&AJtb#^{t7!y3M~{|7Xa5 zQYurV@+iFA)6v79PwDu}^qW^+>C8wE)HGbyJ4v)CU8c`cCdeYCU~}Ufo(Jj6(-{vy z>d5EIq2aEy;-LkOxK|qFj~urvi4q10w{i^<>X-J{@kkgX9N*1m zJLA*w?{Ct0>h{bN{r0Y)WzFQ}$sc~tw!a+^`n5iy_F{e2@5rxfYr5+$yv@(rcmL@A ztlzP>CjXdzkM-_K`_8`);%`m-_MhP;*fZC^H`d>i{c5}7t=+8??*lJ*&TselV=}#c z$K<64kL9T!JDjs1G;fxR$<>op5%VUgFL7Vyba_dE^5un>`u+NpTV*sJx(goZQ|^?> zci4FMDsw^vsm$efC)C zKf`ga=+J9B_vFtlXbqfoCsXNh`tMg<`_{kY-{bx7!rSy~8_PDo<-7Jb>vz3a?drGX zS?#ytE5yr|)GqzrSfAy7`|qPH>)>1Q5p_>%x5{Uo^<1v=W?Ej0;hSw8H`ZUWn7o?5 zW|6til#oE#yj7Fti+5{YxmvzIbIYw&N~(d!sJm zTSC(J^i#nH*2#R*lr&1Ylah0Ca*_GsDoepreIC6X@e5AgTI3znzS?PDu%hIN&<7sd zEMvmb1kBcd{QP|WmDf+N-)zfGyD6=bGx4}`pS!Tdl7h{xb95e9@G&=lh|BZl%FUJG z05y=fECLS{%uyFSX4R*3RKh*9UVHLuUuor7>A58j9*fsHhNpjNzi0dIxBJ%lQRg4k zr`~#Zwfvv@xAttW_M3kf#Dw1cR$uiyF39fwd!c_lk6vbZvW1#@jErw%_<&M?KG}rmF^a3^c_=Q@Ro$fev z=a|~%P8oG33#EbsH>OXLn7^-fZFink%!JEMYC@JmmPKlQ5j|Tg>b88HcW-$x&tbC@ zx0O@+EM<5;;emypaLYpoF%jA(%y{fBWhTwr zb{QOfi!--CvUO#`!DhL?VT(+hgICV|6usojuQ<_bL5udN^vJ(mq4nlJL!Nv^`Tn$`=2y*)2=XPnc--D1XEK#C?~HX4|JK#)%uH10J+q zh@E{f=0Ahew}{z=mv@R@l;B)3rz1#bn#fi|_tl-R1z!uky7=niYbDz(xh-EO*@pCo z9IcrtEwOaIwaTeI_czsU{uJyyS?!toN+FG_%eTdzTP}I5P{v)zBJfC`O5x&OnT#8t z26V@*-ep&E-7bSNVSRfuo6W~x7T{EG`@`^QGwV04hpTqpwY8fSeoEx}vYvV0m#^?X zm;Kq4Rr#0ud%o}A`?Kvf*mu+}`*rJ7=ePe18D%?`%uoH^pWWs8Ek2`c=aflrr(B)9yz6mrTl^P0}$ z$B#^IO!Yl>;?SGWn28%6b{-VIeBi;Fhie}9c>VU5UfSbycXRjo&1@`twrp7s@=RH0)@%{}kp6JtYc5ec=B-j++4(A=YR0^^{86^qa_ihzPJE@}cI5Ov)he!rZlp+xbOzOTsBkg-px(- z_m-ZVw01GS#9$0-_5pQ4Ky?Tx;N;F!Z%Dp9@hsm#pHrVf zjgFb0PEHE4@ekcsa{aW0o5@uU>*X(ZoOr1FqD;|WW#9EF^IyvEvA%!LcKO%NKdxUV z8ZA0^`mOxhy)Sj%?7R53&@(;b@8VmJmiTY6`xW`jtTyxS`LEO89p1L&a;+)b{JnFx z#6|tw?7duBm3gkAYC@?Hlu_{(W-q*CUlk`6*my{UdJ6?RFK;?AMWSK6oLc z-!t?|M~lnuHQ6t7tg9o7eg^zAe$y=;;<9;-X{_q}JXZM&$EWcwvv+2@EO%$7QJ%SU z@3AL&ZhyZCyMyW%{XV?+@8etbp||QI%BE-5 zu5w*sy?*W97rJlxH@(fT>aGs|7Q6O+V0uRR#giY?4c33(f2n?_+^u=H%0KMiHhJ%| z{ugKcy_0R+!WMe3%{Kk9{Mg-R?==Na?woe=l#lO2of#8#k3CDBJ#+a+k*S`^N1kp8 zJ2}Pd)U~9&zy33<>(lcptl0d0^^4HkM*<$@i15y>IHyv$c)^Df)qYLcrOSUEaf$a$ z`WbrZ*6vC}8_u6ug8gS#X=lggI4Q+`x#GF}#5uS8v~T$`H+P&iQd0}OrS!>VxBZ>w z??!J#&S{igZ(q4eb=R-fbu0e3EwL9}E!7*6lXrRQOm}CEQ$}8AWG<$wxaasq%(*Dq zajy1;L9SV!>Rzc`9?vJ9HZE;{Hh)&`hQJArl>)ciEIeAsl~y>LPqd*;rOC+Do)W1CM( zoSYM+D(UhnXP)S`BT>62zSc9j^?ZI*>ssF|{py8}%#QpCI{0Jh@<(O;NAl%%eSEbp zdE2oxw-lQh1|?SVf+wXfhL#(KSxvLmIh9dRF3^-Z)m<#iYc<=uPHC0Q_a~M>QL0Rs%urp0*mwVwQ?8UIQ#60 zjmVcNHM2hT&$)2#X5MSo88I8)q}+ItZ$4A$?3ugD6X$HQluX&Md3s1uxLUih)92LF zkIO5)`E0$#c=<2Yd;Pok=HG|+D-?eDZ_H2G5aU?0_|~H--dp~CnJ!vhA6fhQZDI7` ze=7S**G(^5SyM89)hi!ye_9myZTYJ`zn;rgwa)ruTC?^={Pz?o z|9FjEORkk4dD3}Wc$T`6<;8RT0aeX&=UlQ>EAm+$nc}5tef!d;pH@?6?Kmfv6;<$2 z`@$Z-kFUQvU(HHcTD#`f5$_^pp4karD;_%Yw-+9k&~#F}F=I`QYgnk{uT_F+%VzSu z>Z_V48*455RpzR|m2k25Yo0E7vLstoGH=J^*2;ZL**4Df()^@6;fW=mTmHnE^2$$g zCvKe0+jhlb-l~nSm25L#pEC7IU9UX5)AyZB%e!Lvu5$P_3w?|_4(^5IW=zaoE>?j zV2<1RC9C^lv<}_KHL>4W{Nu(Z)1MO>SF|ZE{AGW8{adE^it;OhZ|#okI{kD1R_*n_ z?%r#Oy!rRl+d@aX`)^qyV&4@lx~s#T`qy1n{wQnkC)lU`(XSGFsTFl*{l_KK zdv2=6cixX#`e@h8$ye?hPkUT@=FhQ$v)%s6m(8les$%43a{Du04)NXcut0i+rKarH zM?ojWr!Sk_yZ^}IT~eoHq@51Np4zgud-|%CZdD!J;UUvkE)~8y@tU9d+LW)wGu}=- zsd!T@FD-tW6C%p8GegI(@}^irMY{G#}%> zw3}SBCAMrczIdjub@K&or+yb*p+lFHb?zOz+3YTJz~n*-PQmMm4ty!Sjl-$vro z%$1YNGJa=C9E<3jl+$FO(WR1*Yc@OZ!Vw?kER&0`?bn>)Qb~yB(N(Yb{VdBvY5%S5 zd%A!BXRto!Jaf*QXX!S5m2)o1ZZf%gHFa9X>yRQ(`w2gJS#QjFwvF z?zwNGw_mc~by1x!UpHSquxW35lZ*F+E7v)k1LL24G;VX}X?1B`J`p?=+s82{bas}# zqVx;reT%O+R879Rr)uS#&w0UH`A!O+X<4lrWA;r^!e}q=Ce?>wMsf1BDQo7))Ek}> zXes&j=ev9V(If-ft+oESFAvNcmxICHD`%fzJpPLo64RLR<;OX|4&@a)^Jd?~D|O7LjF;wWS0 z5_c1?c#T^V&uDIY9jPpw2Pgqwdx9nKa**TMBmgJ?m%>J}a(#ue1^>Ud$$!>q+OJ|}i=k-;5;pyvKe39SH z`SADCzDrvT1I_x_mV0uC-txSx&bd9NP~)PV_IIU&SDyS;*s`T-mcU{!dtK>8d8$Uo zGH)!IuxztPuGwrKP>a_jS8319E3Q{pYQNT;vbuj&y54sVsg9CqKE~N*o3qV~Zv9!P zq&EMxFq_TKwa0DFdCr++WBBye@u$Lnw~K#`3caT0`{HTCS5f7w7i`Psiv4Jt&mSK4 z<43Px&mXsG_5v&ZxNVA46!Q<6d8#j@$mNOiEOVFpBHFAIk~p?aOKzN#^T@(arSK?cSQ^t$Th?lmO)tf-6}r9`T)yVwN|P7=HBRT10d+zjy%O7_9 zG1B;BCh^B=(|!JRhPSVK^FFmQE%|cG>&xrR4F#t2CDGMe5`OzC;!6(ti5j@{vWmZXOhF zl;L>jE(Dr0X*+miorTb+lhexe*B5QuV>@5d^J?sNue=@al%w?5e|jpGn=WlJ^H9O& zmeP`W30GT%e}?JnRL`FzzL9_1Dy6pUIc2A2C~0g>_1d>59n_(8{rY8NX?ulK-i6O8 zZ*INa>grXH_CscZ$v#CX&x%dSAI`K*DS3JUR72hd3b5~jCRj!$F zmpjjS|72U;cwAksxa9KV%b6QhU$RsXtWLZnoQXNa{Ctjay9i5xIp!m8>=IMfyXtNhvB7_f-H9t@%eQ~jzvH?;R&&jNhK*9U0~T(& zHLGBq>%`X_lj2onWS{p)SqrVaEgYLvckBd*s&uZeVvmY&$ijRC1JhfZ< z%2B~9ZuvU*CVVYj9=CYnJCC^+)mL2M4lTBIZN3^cW!Y0*^;4x`PnNogE$Te6%{u4e zF^j%a-KEQx2dA*Fo@X1llf+KxU-gJu-KqU%isFjS!z+_6Wl3xi zmv6tN&%ar|-FJT5i9d$@hc`GMo-a2R+Uhi$>b>>*u*<*sfE3Y%X{;8yKa!#=FvW@d*WghlVvq+i0BqGY?s+9eif2BN^ zzs`CoJwMjyN8}~p*A`08Tip~neIq%)_1~51yHXar=I@DVe@ph~=Ei?2dHpnoJMmL* ztvc)e&fJ?nH?LkA@aJ{bp*H`CE6$0`veA478mpb(v;WlAfBvn`#ZK0zPyg5`98vby zWZR*&I=N5w8NQb26hCfqOmdS+*TeuVKH-i~nY2xNDl4M@+^Cx*@aJN(P3Tv@z{0B@ z^VDT^PW((vb-C5M>@pjta%-LuD{_fIUC-y#?@xI05){G_U&n-)? z-<+Ay^6cKsNbz_V(|21-uIjDcn;M_Nk#gGl)s$pj(Yv}=op$P`NWOYdb%Q@%_`316 zGf}rC-d{1ize4ugk=|`5ydJlGtBUp55;ZZyl>OoM?!&oGmtGmBwRv7&F!QBal{aTa z*`xjZhu6D{6g;#L59AhGe0ai(j4zi=rkoSLw7>WD!?J~s!>;|kW@Nab*UTeI()a=h z3SB&=YGoBED>ozLQt#IJ%!cO5RWh5x;}7>dwm91^d8|-L^uZx_$HS@<4q8098oJ5V z%xQP(s#Uih`u&WLmoB)YHIXaH-Jj`HLT66UnaCxFdg{xvpT~GV{IqP}s>WJ&T*ov2qiZS}(?m%m;*z3K0XS$((aF22pbXCJ+9SNYFbM}Pij z@D9IqW9rwi^;4>jd5dlRu>Sj-Snaly1z8I}*eJi+T`l?8cHOTZ_HQRzd!PQX@$2R{ zzfK2U{9zNmV&6XN37zX(#Gi%BtT+%lCuz-Ni{75=;UDtXw|oB!t=;b`X)gO`_CZUj z@B7ZK6|%9DpUQQ`W4-2{NXdng-(EeQTJ$sgzQ;d<&pF%P@ST`=HD}IpZsFQx?=^0#)ISIEecd-v(!_s%$NiH*9jhk# zmMy+$x#LHXEla?cKwA;kMJuYjJVQfLmxnA_&Y~@Ns%TEzH^*&{|^O5;SS(D4x-2$$}EjnjpDtbvnYQ?0cqMJgU2@BIs zul{ptQ7r!yrQ|1(7T5XtXK#=E6ML_J>Hg4b1*S$Ouh(ZB&D$KY-EaP{^RIqI^8K23 zE6G0k_mzL*wVCxZ*Tm1w@rrvj>r9p@_fq}GMMoZAlU+YQSI6AH=gQ$v{~2x{yeW6@ zSjC|~yXPf84EmucdqzTCDM;_ClUc@cpXDp37H?EL;deVo;CJ5R>zUy(%F8!1o9>Uc zyCvQm8~6Rm8PKRypX;U{kIlUH_f8C&HcL8T!k#t1SL``ja{FqvsrItvOBQ6zxuQF?o!w9$GrVbcRtT8{PUyoMBGiODgJwN zx-}{T;c_cWj?d%a z6s{1Dw+>V~-R*vi|>?b zm*2a0&Ni8O@@2QP-%ls|y0myKW?M7s=d6k;I+0mFU8a{le-zbw{=l!DWz!?CY?O6= z>2&5%%&!X@rQ?*BM`+Y+$`;+fbbf_Yv;X(@>{IejZ+>lmmv#MFq_D?F6}`!u*JPM# zEPtKvU47X7_p(LyoPYmFzXb*Ns&g~{+SpZu`kdTx&vMelm78-?b+3iX9l5$2WOgSvURfii&;ft0j(|J@&ZZNo1Mm`nqq@PxpPjU)v|E3T2A>Y23Y<^`^PK<7(2C$mJ8a>8#5YdX<~pxSh2x zs48QNS5epHr|0a7-fVuGwyz~ZhaBPv!4Dg`@5>v zRMmbrb3o>N&%gHfL+@prm))To8y<1}QuyDJ_sf>Q2JCuug|UUIo+q6jm~UbcFyR>qNPngZ88>%xpJR7_x0PHDpQS9 z^G=_8`tkbuDaxAO-Y$!rPxfzHaGPCvVZ<)pJVmc8(~mohEX*dk-PxV|X{FejwK`Ht z`sz>TC+kIeFP-pa&%}uvrE*hZ!wv~<5>)6|uYI~Y_M1{>c+^D>F1Evo8>Kzg?em>D zsV-xV>jh`siAq09uDqMDP$@qpIi**3lVZ-S7FR)~bJwN%?`Tdx?S0MADek7=?{)W{ zoS7-@^32cWp4hHKhPkKCZawzX_2qKS!%rS_EOF)JxjN~!vEP2xHD-FBKJBV0xO#K@ z>4X0nvhH13KTGd-z((nN%0XwQdmK!QQ_lMvH|@|itInVdfAfQ-`>a1eklJ<@y5nYolfF@R|W4Zv3m6Q zQI*8j1;5`2X9TA`J3g&&)|#unrcuw;)k7Zd3U$?3qEeRL@uzfF+@fzKhEMCS$Lu$o zrL*&8(!+@J4_8K}ZR%FEHSX~Y3|smtvq!3;_Uy95Niyy&k)3`52eV#>2r21XPW`6J za%AIky_Q*7zpkuVw`0llNfNy-M$07?uPmtwIkn}!Y23}irxtGtQzDfo_uejvS+$cd zvb0qBsd@8crMj2XN;d5*xi{f`m)wFd-w7w>?#wz^5qPF?q?o?frE zNkiq&WTO(9Njfu?a<*>M*`&pp^|H6m)Ku5TAXJFM`_w&9Oqfhvu4^e+ouX0mpP@g` zXQs5Yw908Y_gJ1)OSgx+7EKopT4bHwq|mWY=Yw{-b?Wury>b7nwouk}rp|Pg zOE&7?-o16N|2jSLT9$m&;!EeQop1NMuuD$Zru${(vR`+<)>oZ%T>kq%!_xbirJW^J z6{)jJdF3N-xNj{w^6oXS^^bki)?NE+D!=<-z;xUCu#j)BGNvqCw>!J2H`q*f`}JMo zFPF=fROdQ1ZU~+2TeFm@vu3Nl=tXN)i;04Ya@xXfzZAa+Hp`W*IeJmrRG_KLN%Bvm zIcJvXo%MBIrK?uNuf4Bz?Kz7|!hwq#Po~Y-G@WJ5q`9?0pNl+Cd93|iWVhrWUzxgv zy}FLfNtv4p$7LojHEw4+6xz3L{@Dq4Hf~*J^jc?_qTr@;jAK*m*8Ab#*4Av<_;Q7Pi`k-e8_&Mhxuc>|5r6H`qZPLB zyw*DJ$&uW=&d^OWV`?LO&*(sCb}3sl#vkMxKKHe=cJ=x z+}Y^E>;ByID`AX1+0Y|n9XbTF>`VcI%MPKvVmTR@rpVq%!8k?YB zq^`=Ew@+h!m#4*#$+LUku5+&3^TeDdV~*$b>)#%q`EIEx8WQR$b#v?7)?1JMU8~(c zm&I$h`<+K8*3Zn@cI;ld{7=bMYtIY&@w2)7nd93ox#q`pr`Id4C@qhj{4b$HQRpq- zr?;!3yGu58udVrV;!0&%&-1;nbPm0{BxGY{(YyEc+wyBuyq6Zl#(Uf}_0`rrDPd#1 z^!3{nCigRIb$@66o7Gsd$#%Wg>nPRRA^Yk?%U(U}JHKU((r2mgXHmh|cH3?Fa$U_W zQ$5FTQrj}U-BW(OP_Y{95UNz(4{fReDo%-#OF~w7Ldf08HdhHvhQ?%aCe!NXx?V`=kAN^UoqLMWv?ZE+M|QBda0>s z&Ck@Mlir%W)LIzjza}O9q_pp{LwA%6PhU9``mS(w_9_*DJxlM|uGi`FE~zY9R4}bc zHR-^Hl5a-#JK|-Q?-IK5=GOXKyH2cWvbLCEU>x@A+D6&%Q&C*A>r+e#Zc=Y%Ry|mxr{rk$U7)SZ@o%eSYyjrqLC9^8(->;_j&;J>` zcfZ^>z5jiDuA~3;(Cl@`S58*@E)spX{@!kZ<6qZ)3A&x~>$uxzpWj~5rt3r6tCKeC z_20S{u&!mk%ojOjt~G!1=A3(;$i6G5Vb6@yTYiMc9@RBHJ$3I{?$g1)g*HFAJ@H|8 zPST(G^L%HL(x zlE0H}PUf#yr@~&iS;XBA_ci``e9Oh;AO9IPeOjdwK6UQvx8<3$x+*zeu5oUexGY{* zlbOwCh5Qg=OY7ZN0JF)P|$8iOG#e>_Y5m3Gda*_BiV7TIAv^f3s{)vaU%+ zL+jfVyC=V6IiCmn%!)iV|J!PpfZxY#YnIMHtY%PqgHXG^-Y`#5XA zvc~GfN1xTqzgAx*e>@^ZVy56#Gfv;OP}=cFS+r+>bU2oBRLyZ%{GoY zv~TaLS$D*D)h@NO&c6E2uV~_CrBxc9vK&gvZ}qoS$9SJRch%ka@=+zG@1|2NPy6fo zcSSsuekytD)^jQ0B$t3w7pBjd$Ll-ozGY^RnUUy3r%$zOHz$8xF>Rs8y`E{aOdR5_ zc@!V{DapTNqJ?tE!qYxwQ@J<)c0W6-YjRZAHeHjTx!2u-nteLO=WE;T+Q08v{>0PD zzLK#i%eUlgyS!=knMq1r4=3$N5_lQoclBWDTajJ!^jAKeV>e5Gajc@C-sJZy#61sh zTX1Rrlz-D}x2%7>LhJn_?vSV%pQ&rvuaE=3hKz)$gnIE;KJ-rLM{(@5T1r*K`{f|Gn{B z*zl>@qOIH1GV8Y2D*b1$vwbCTT26FssT`G?g7u{^7jw;YQNNzA-_NH2bRPTYI` zTIIJnwcgK8sdtB5Q&sUabKA+KD=6`2k@x0rk>3oTZV5De_OyATr19I-`&l1*Px8H3 z_{uMH^TdgQdY5JeMa?>`*VFdroyqB^USi_gSx!baX-|z_)UAI}MQdu&BF!~|&f4Nr z-u8IE-MT6@sc6$7W1k?AmLuNVmTb6lVa>$TCT`Ew7so2?{cO59W6@3X@VA?4w`!MO ziPXI5(f_UE&sTn~YfmC|1kTJU*<|owv69aA*DHRXS+vtczt*%N+=o#xW$ zQs~lF|5`gqS7FzQSn-Z5Gp9$|%i3RE_fTf}x4mroy~P2U{}~GZ=DlC?wvvC}&YD@T zSwHOFYWULUZqTZ%!YLuAOWyKZG%l&w`>p=_+P~eA3x8$GA3q)ZJGip1&0bf~a_u}iPYb94SOD-A7wm$8*Txz=Z(wivtS??!m*as{+wR@7O z(GmM8-y?%w{?RXfo9gAVr8fK0!($eo(j8TI$>pE&c(ruZuRn9AI(EwPx%9c@$(%j* zZez-Q_ayN0H}&a%tOL(gHD8&xDH$=T-~N>J zdeY-7D^{0$UU@ux*}*wnE@=+abKNWZbb9KnrTr{SVi)O`UOII3YcKax{>7$d8sVjz z3NJXX)%a(B%P#l9RIvzm-%VjJvnO8mHC@^9Rp4ltriIb{#mmb4tR!Xzx=z>V^UM9> zJE?l9h@)uuq#Y0a-`)$b-ti^&?&N^h-ka7FHIl3>{;1yKUS{R}GX2u|ZF9d|5w-FE zn{Tpa_xAq`zD26{c8crw3jRn~mbdfJnYmXMOY-{)hFe5E*|_4z>r&xk^U|8!CjLyh zy8ra-A1}i+ody3?n&hhTOwUXedynYo_*psg8lQ{^TK2$pA8pP3j^wavs&(5+db>HDi?kEWz*o4gi1 zzv$ZO>Pw*~Ymzs~p9%PV_*CGjsfIdpCrF)%SsL?reNouiG~1A@>eUg!Z&$oK!)2>9 zO}{U7Nv!g_i7TeZx@U=>tWBv{dpGCRmkGDIrn}#)o$zPQwpqJP&3#|JT~?m`?6m&W zzTGl$KRqs9H!`iNT+Q})TX@svg%@6wn7f?u+_AN8e#zQP7JWOFtS9bDzIS$$naAU_ zdCSj+=f+>Uk@{hd+q^XvU&8nG*#^uOS)%C?G;xaT>q|lugn^tEOYkS#ubeVVwK-tb=?{j+3t~@bDMj`afi&fO||fBMI*n`*!857AfgiZGt|ZOhfuY!lzj|5!U)F?aU! zrR}O)jx?#>vQMek?LYPEaZ38bPkC}8;R_cr^(5J=t90I*sJ&DGh0|{j$iOpnRbO|c}6zELO*Wa6P_lz$#TY4_Eol# zulXaYw%O*Kk4${^&NlS;${kBo4Ii}fi8|AiqUB1RP@il)$bls2h z{#Re#e7VGJr_0%vosuy+Q|?Nx`!!3|XU3`tFLS;eUt+7Va+1XoD`~MgU*3Fq^X1Wk z2Nr%p28AL|ihQ2TJgGd%?WOdR)crcrf}7M%^l2P2=u!3;-6y-%r}pzxmNKII_0^{N<&-^;Rp?htpv-PrBD%Z3lTKzw-+NyYKrsQ#%j+V>yXJ1^lpYop} z@BFsuFITu&MayltvN%+Cxt3*n+GBUI1=GE???m%1nYetrmaxy<%)TiFoBP~uN=$4k zHU5;^|CE!R{Z}PdF((16vbmyo zr*6-u?Xy35FBSDvFI!aoCETm%RrHF|y=I#~@4pYKyNmahmtV5)eNn3(xYBKH-b#m1 zv&=8+OA8PE<5r%UVo)2SwoF^fd|8Q=EW6;5jN|8GckfuQw>;R$=rCpYn>!ax2&EaSpn7e8;VGW;tocAgFM2vYB!3oOH=!IcBqY z+b$<=xRqnJILmA?#~~|O_GYC|mml+aOLdl>WSyu~bf_pTa$3sCX?aF@Y0wnh`wYZL zIXPL$<+Rm~%RJE`oZ*631+O>xT?tsOo%LezyX0w?Za_i_wYS@sB;6D=@$we^ zZj^G$T)E15m%536KtC9E>zz#9Xl_N-`Id*)S5|74R=bKUSmMyp&**7@~Huk#buxoEA*%hdg^ zRAc?piNEgkD!fO2qKctHrd@3J&7wuFPOuh@+?ji_Q+bldGt0if^QWGF zT<6iV2)y_s{SV*1$h64Gki6aLarxStirc)dbIT3Q)KX^}otfRUS?Bbp*S{h^otzBX z5OgQcoL@ay=d{M;vzuO;edc)5rS@U@m0M?fKszDNuDNw~%`NbLm9uL=dsbFn0g*h1 z4bEju-e$3>w$|msS9O!feQJS9OYTlltS)}K@~)`msjQb@FIgPZ%PBISb7ZT8y}&K! z*gaL-Y_n}s&W9(y(zRTtYJHP4E^kZT3o~MGs1g?_N$*u$uv8rb-I0;nVFNM z=5ke&x1N<{>bjTS=`An*@sT&o{Zpp2$ALxCVXNP2NL3w~*__!FyOlljN|xZ#`k8uL z@80+NXEkZvv@f4J=O=eOi1p(;xARG`!Hn1LLKf{2yQ8o4NOBm4ofGbqDKtCqWA?-y z_wvk*i_ML7UZu`V4_#^QfDTgyn9{FBGzoNW$Kzv$o3u{P`H7D@9eV6 znHz59f)g}2O&j#JJ1?A)Dk*K0a(Ru^^ouof!Z^=!73aKCG**k8tmd;>&G(q^v1j0A z#*Yj4+{rV_vlKklm(h2^D5%j=dE&%PXRdOmWM&>}DSUV6)3uXs;{IH_(ldE&F1B^9 zG`yN@Yt!#jqTi>wR8BoMsp(yFE63vIv0RTljWVThp*>|MXUu7JSluNjnEFzvXyzs5NzEt+F@wD|7Ror|l?m2zeu**#I=!u-vktj^b#l;`#Ygv_OTX7?WZ zTnVb6ltIb#l*~l0yY`PG?RK9y1FE!op|zK>&g);6M(L;RB8{J4$(-x)ef8^=uQhap z=5eO^na)WEO%H;mN)Ch9V$Jqlb~zJNSm%Pv>J&vUdyN?NC!80GuJmQK=DO%!o_OU_ z)hho`&sQsLW8K%R_&QZ?8}qeU-E%k1zHhazEH_Zqrhmad*U~4KUv@alonB+znezVW zx~m$R=4ulrie#=j*`v8fSL@9FS<}R4+h2;!-o9_g_=_WBq6I&`njy2!@< zYU^pilM1HDmZjWDG(0kA+pO73H6I?c-r)8yu6WLI%~Sbl&(ho^+j7$mgSMX-fOceo zHgVV zAkP^mnJxOMaqMQ2mCEF2vS-RXif4XKJEqm@2--&kPP(8~JL!@~3YB|hz?){2lgwrZ zZk6S03*0HS`f9-@_wt25x{eero^UVET+%J@!XY`flMxeby9h2>vB2-*)4mA9 zNwZ?+&G%WPqHq1?_LFIT|DxUotumTC*-6Oc%9Eagm~V#zuH7{$d-+g)(znHb^-R`3 zF259CC6~N1Hlt!|-L=L0X0PGce=+06%(D3`Ifa=kg{zZooi|)KJ~{BhoWNtPK^7B_ z^r>iFSkTIn>n7OD23mb$P+}#^*Y3Qq1r%m2i4rc0r_DR@O83wH?re5vjg!zK8kCYJ ztNDOBN|Wu*?K`(Tc;(hUrQhifSM6TCarVu?fLM?ki79S2_F1=**U) zZ9SVOxtq4zF533Y>1<&9nhB5BcBZWk=G0AH^VQh$nb+&$SAnnmgQ_NjdbaK>(^sai zNVnlV;)g+c9Tlo)2SCbR{1Gj>+Q&J%D68)jopSnQ25HcrSlfK+nmdsbJ=oP zvCp%aXN~8j!?+PeH}W^!H8!?OQ%Q2WmX$j5#;=zq?@~*0E&7Z*=cFCxc#-c>HVM=m z$$31b)yvLMy|U9I*QMx=8{2%ZXQ5tA-X|+#(~jQpc>i?ml~szCmM0YzmAbZDJ>IGk zEqgxrdv;F3uJt)}7xhinuldiAcYoW=e{oCty|v%2bes4m$eQz~e%7bD@L*}qL#4K1 zi$B?I{P1d{bEnGLvw}Oq7EhH~@zh<*(l2?&GfThV3HS2Tp5>)QP6Of8nMQwh%``I0 zy!JX}cGWb+y8d9E!v<%hL8ZZ#Lsp=KGzHYaI|bTrd*X@Tk#JST{im;}?>ss?^0-++ zL{&EH(%H%nKTY^!mhrG~I_IH+IqIAT3i#IWF|G3Ho0Zcxaq5eUygD4$C1#lJPACr1 z))t*AGj)zSL?Ni~l{{8BTX2)wjrl@9j~Q-@h+>!6AJiXY>(gFybKl`-XE#~gJaP_{ zBm6)`^u%MJ&7P37ZtNo;dsF zzT!KXlyhbUi+d$J=5Fk?zSAn{QJvs-?Z~F^xVYJ#O#%n|O`_9|+@9QJJ$KsrfGr=k z6>Z9J(p+D>&N@gu_ip0PU8k+D?D`#E|NV+o`Oofe?@Vgfzt!K%b5+^v*Yc)*IOYgiBo(^c=v`*B0kjPf zva@ZrJF_qEhPTpo!2xD7tYrD-#quoHfE3}rhd0VxaK3V&Y6pK*e@xZmYxCB22dcT{ zPF&|3X&Ls{@fBb3j3=|DHn}sWn!fGoKYDHECbb*#%m!lDa+O>c9@E*jbor{5Gh?N63unyD zs}mdDrk+^VaZUBjLA3?T)h$(@OygeLYx+uW>bFXz6?vuCwBGefGI>$Gv=|?_NQ-Wqt38{93tqlDZ0L zyN%_b$}!CK~I#Mcii0 z33Lg3WG{ZIFGbhM)=7D_N7RXV+u3GaEx3N@_fpB?lXEs{Z!Q$F6c(7Izd0)`{WP1+ zhkB`&fThOmi&m+;z7^tf@Xek2_DO;6ZL%I=O_ws$7lylom%XeaD>c>v&r^=GbOlz%YFZPs}*vC^HeX!)G%7kBn&M)>j zhrZHrW9eEr-8EWCQR!ONvdgPvN|N<#+n=2I>2am(KSR~b6(;M&>^AJ*H}OxYN>!wM zp3m%ydle(ayiQEon|?*nzv$ZSljXNcBDr3DHBih~dAnR~5!WW4+?h#FgmUs0k z%eYmKuSK=4o%vctH`_Mx)kH8%s+v+YrD{pl6kSj5qCocKD^5gb9&EC$np7THf#Rv+mjF9W4|V~e_zeY-(iXzYf~#)3^M1>bNT#cXHALiw>1&l zPF?-5dYAI;V~elfe3eu+W8PA^C12H7rmvXzO0D=tF{rHHayRp5n_A?qpq)=II`>$# z2U{GClxp=n(mT=Y$jj%GOME|CDij@f+IUj9#`ndY6i_?W2-0XRHaCto*NnV+Z0^>t z-My16Rnpwg+&1o=qb_8&q(nU>$v>`()hA6RSNYa$Sn{sg_R;OnX)q7@58L zW33;HqCj7)Xs(C%X_a}Y5}&fx%yIek-cvgew8cita*@{;r|6g4U)yihf4uU2@X?8H zSGY}__O<0#q?lS(>8kCoXWPb{4>k5Yxnk}vPuE|W^QI+V@}1WfStmQ`sIFaKzTk(y z+*jN`9IPngD)CzRR^3O<+dpQ~rI0=esq~6$xA%??dr!QNdZ{rXz4N%K#bSU~Hjw ziy%8=Lfl{187@j5^%A#}7W*e{EB+~On6GHLFe@!Ice3)1*^_$9Z)>Z3l=D1RV!b@= zaAfEvvFSm&qD>dNU4<`(MK5b=>$1+8e(CAN}q<3q35eAx4SjU`bQ@ISY$5}@h5QB-kA4u?ximM$o2B_KW)JuYdkAf>I==5 z?}+e@OcvXBcHgG-l{1%IN$J_nIr)m4(dIx&ZL!=Ifft=GA61nUCvun8-BntX_^2#twp>ce$;oOplQn){aar<_*dem>{?cFY!&$G=u9#1^3+&jnTL)S-k(e1JE&vMKrz7KvWubSfZB>vjI zYbz5@eUFq`Va}cPT3Yar_gnEx+p?~`N@brr$>K@QL~wpvroPgBrLE^HmEtqcH$2<& zY{Rn+Pq#eXk{9OnvS!Q2ISO}xx^SDHopiz;Bc~6W>|{AszAWn# zQ!Y7La?x*D7`~%7O(BHEnK>P>W?KGm(-nbubuW%?7r=KHjjnh@1*!FeRS6TT4Cy^tmqk& zdmjE0e!IMB+R}@%yH>pIo0_+*>BqCx|Nceg?dn)JPxrU~7s2>jlT_6yjqk=hx6Xl@ zVSU0K4=wsYeU6*LDc)tr%xknSg`dt-inwGvi6idrMcE6^SHh}Vyn`Nj$Jq05DrTHuy&R`)TtaomowV|#V+ zY>;iJ$Jed$9br{Jro7szp7c_r(>3YH?1GL*6BpErJ~{ey#k`l?k0op4kBLs2uea#j zwcA@GlPx7rDo=9P>8s>=`D|%N)*8!Y)@k_@Csv#M)!!5^YkX{_RI}Hw(`(DVOq=@0 zRCd1Sm9t*jZzo6I_7yd{@$u%~#fNsy)7t+i{pQ1qXMeS;y6m#o`PX81EBr%!toyqo zTb94t`}ys%{|wvzWM5qLE5!fxs`%M$ITO7Kx9u$XnDss6rA41`$0K(xiwUpICjJik z<+AeY{`J1%@S`-f7qchsl|JV@ z;Yqr(rBaddM45KQy^kkO+RZd)*1VN2RX^lAuGJ|9YFqNUe79A98uaYO<+Q`AjEzgq z+^FeYrqp{?=E`DUjfk&;ip#ro7IB#eZF=P{B%9tIcEY7McO6@S3_ItMLZLQxjkzjY zHKuu*S=wu!Ua!*OIdMwM6O-JuYbMb>8XFJvrb|A2Ef)35@3^?GOJCwGYpWM_t8dnP zb7(p}`ON+5n=3Z=doG!1x9W@cX*HjjCIa_U`*TWz&uju^*JpV~LH`+y<+)XluR4D^ zs7wBAZT|ZuZ}TG}zhB-rYwET68(07Ok#%xi#O&V{>8_9JzslF!bM<@MZU4IE;3lU< zIVES!eI`AccvLyr%t$`h{Gxr|=4FdmPk;LIpTT2)P1mlh>$z1Xsy?+_1OGe~<~SZ} zvORot^vc55TP55bAD`S}=A@Ohps7H6+9OH7*u)htZMA;}>m0wa=k2dgr)Fzk_i|t1 zvc4^B*_NswE_JGcKPIa_5)-->b$rFfzM}Ntb#H}^n%A0g8{f*c;&oh=vN+XX)vc|f zIyRCoX58F!@9dj9XEv{v3xAc+suL;$?(MkCc#A1ky|$R-Hf`^>tR)M%b6&sBbG{Z= z_4<5drEKiesO~536W90@PUM)}bh=5Mr6TIk{{70Gwmvg8pG=wXtoP(z-g>Er&1|-7 zu58~Fe!8yfxWy|aUt#y(clBF(y3TM1R879>@ioZSr!!Wq$at2!PHVEIH`1%O7p=JXA~5~Zqqr-ZzHI$?edUIH{V$q-kAAsU z_g3g^RFnKpwk%%lSHG^8*J}TG#ZfZ<^XgweA|J`;fB*3L$o^NkW{NHc7euTN*WJ2x za%S_&Ddrc=pK`@aS>2Z&-Ld=S{6qYY*ZpVMEPg4rbhI|1>GOHKl1tGmi|bLKR)B@wvDfHRW&_cm0CgahTx3Zi;9#dtp2RGG)d}s zSKj2i)6&mre0aSo^gqM*>tT!4-yJqHGMtnrl)QGKOK3_|(O#95Dv5br>`OXdCfVxv z`}MK7Rwf+m*PJ}tFUW6opvI)mCF@g4C!bmR=1!|g=*kw>N2ZED=I|dCvKO@%nW-j1$xNCx*dlV#;^!$FrT3)^ zSv<;dS}T(gdgO8ECbdhpkAGLazkBhHcW`XB@{;w`{Vv6^c$uv`?-JGM)6pbC&$F zB@@%HDjlD`<+0d2pD0UiceN_DDjm7m>|CcVEzDe072@tT>r2MvD+^QhZL{0BZZNO@CIAb#i4qw`XmOV$Iybo7~T@FT79}>3#A` ztp7xv&abT#A6>gCp4N4h<8&yG*N-g#UIUwubte!Zerf5 z;E-3T!JC6MPfwhhogSIqaoghanddWKsTKQNT7UAoeY;Lyq|9Z@XI0(oH8<8xT(a}n z&zFxMiQIj-Qf{{C`;yZixdVUnE}gaW?CxlD!)WDM={jdW8yi2%ow>@Sx3fdp zz})4&@Pwz9{M?)S!2J&1V`gbwJ$mT3)owYFor=jn^U|KBoSc90u!zc0 zpPMhA>FOL^JXx&ci$|2jylLvo-TJ0V8V77Yw`xilkF@7u?a-ySR>ziny}mnOyWnb0 zmq61EW-|eH>GT~#7Ab2 zkFmdg99SQ%c6UC@r{{VTXRg?6bouns$uIXmf5dOq&*}Q%u4Kkj^3AvryB%*o3>LO>z3oY%nTNOWbm)Z;IMQLmaX&b#Hn;RcQePw_2 zYemqi?7-z8<)*JmedGJaPA$pOnXHH8wzn^ENr=Qs=!)rIs^GVJL z(!O*vk)M0Ae9N>SsT*a5{Inm-Yw8@lslf|6WJxV2^G&)m=lcl~N5oFN*fMdezwfff&3^UAWWF3XoAcFF=*pb6 zyGqyXTD)e?l2@DDHkAd(>-O$ea}KuHzHVoKV6tjy&$Ag@!(66*o?LZ0rgDjUu!{GQ z-0bTSRj>IY6TS+ilo~l-^__EO&UUM>!fU=x>km%0Tw|%0H(OECukeWC>g}A4n>#}K z7OmK^*KVEJ)g#*@y=Gl=6Riwo$qM=Z`Lz7OS24{lRVJKIiVZP*=a~!~TaK^*ak$Y4E!5E1zc&MtmuK=kn@#4IqfI(I zcczQp_;o5GdgGF!sdj)2jR`ND=qz0bNV%Wbrm@46RctZuiv$CRJv+}|z{uOidl-G=Q` zcirDUP4dcNv&~(}>pXgmCw$qqbmN4Jx0UYdyjJ#}@aST*_tIzet@3TkA5P3~bNOS& z{_ui5e~Y(OX7<9kI{8R_{fIsp$eM zPReSTO4V5`ofy)mF{jYX<<{P5Jxd?my6!HV*|?aETlvF|3uS?KHQc%7{MNDufmJ`wzh&C&drR*9vDNauNB-p0nJ4_o`V?olGIiEpm;1Uit5zS+ zU6bc?CF-&E@)IR-UbbeNdmfw3_T|khcj}m9aJ$yROK-)m*@^m*E0V5e3BG!78~S+P z=UETWT}w+zP4SEF%l7l;y=3%fL!yM+<=#0)qQXg+POe(GDeScIGOe(%Ew3yu%j^n? zUfEr9=Bv)UO@4xXsY};-MMYj-e(6W+r#WvY%6DzLX$(&7eLlMMih z5T$4CxN~N+&WTNT4R6LRsx>&3vF(tZWU=bQX-a2JH)yxTw+1Yg)(hWRn0I~ctX58Q z2^r1_mtFd1sW0zX+4nZoLZkng6Svf=UYm^5uPJ-kw3V?N-GrJZO`9uIp)7nv`DdV*-y)w| zN11ybTby3~;>6z-ui4)mpR#Y;`e}0?MHN;?{Mq0#%XFQ==1IDDd0WL6Nn~=$DQ%9m z&zND5kiF{D&YGOqz=!8QE51+v9BIUV_UpH-r(N^!e*bVg)#9gez{d2gV*0(SpE51W zjFd0q?Rh+7)y8@AE@tW`U5q%oaK;y1xmNMa#2C}}pVKdf%U)XU>381K^JS*3E%W6I zRauc`C(iqpteQ7-b!Uz`@5k%c7FvC|)3T-P$d_&N`mX7!?)*|VukG-~GoY>Pwu&z< zzIRUzgHCzp7`)*UWsSW}P#0iCVqkpt`*>BBUAZrw#D7RQU%J9@P*S+m+Z zHtjOA>y(vZFE?lix=nxkXkx$K^|^bq+oK+-BwW$&+r7=>`=#q2d$_K9OpKRUw`<=o zi9bs(?G8&{*ne~}Xs>NH_rEV|w_NAZk!9;VaxGPO&Xn0_0y%SaW=#x~nCRrj|9$fs z`+J*1x~xEBNSAAM{_gnqY;Rq*jr{lU>$g|`?LN=IHap^E%5CzWVT7EYR^H~rLZ-ebPUK81;U z?pEgX_0yH&NU}KP&1Aaz#-IDwZseC{6fIn&xU46}#YlBMi`Fx-=0L@YyoKF|a_u>0 z%5&IrxIZ)yZ@s3^v*L@W(py=>)j^-_IaUepeYv12g4;jJVnO8cmhO^_X>%8M3M{ky z@U^pIclYLC{+?uwIYl%1`HPevrayH4u%+`wi1+KzpD(w(d+B`Wf%~DC$`4Dr4{M6I zUuj*^WNYNk@zPA%ciF|oN3K76x$k4V#DNqDg)? zyoAzbo-P$n@d^4|q%(6>_1cxWs~)=sb#=7(uaWwBq<{0@&RI*ZEPuPavPpi*F7bO8 z-p}M-qOEjd|C#NUIYAj=51w0gMysV+6!pD&HKje}$Cqx=^|s+}XMQ{XD)45dB2Vo5 zw-0Zf2=`yE?8YbD@<2VR<6^U1_?qiQFCT22z9R7CF{_jA%qp8AnF^G8g@68-|95s$ zuE~ejF&;-eHg7$)`R&t(F6y6`3wtSbw&c29NtmdgY!g_s<*)kk*L#nwY|G0b2b~*pHm8F*jf1Q8-$YXjv*WVwt zw%c?L)$TEhm}2E=*k|#{<))=nz*{PN3Yo+=Jh7Sfm^tjf0M{=V9+vMLpE=Y4ip zM(b|4_%^*ORKwdfMrYleDc3(wo1eAm?BqpHE#8?+pY*wM=VQ=)+x^@N0yZpa*|Wdf zDysF(^psy7yVjoD&(|IB;fKaAVJwKnYfVe?OZYKIdRqx3ubXKAFS0hG)ynW>=l)$M)Yg?(kSB;Ph$x)@7T&+w8Fm>@8U3`|{C4)~C&K zJ~RH@+-ZE|`Z4+4i{mFI?AovY=;E}^YW?3!_s?IEskCE4$AmpwW%u~+ys)M;_TjgSdtTn(y6I5={mVkurcc!`9m`hVG~?{Kv&xTJzk9igX`WIN z*t5s;>*c@t@0b5N{q51lp<-Cff@Jl0t=^HY(! za;Vvf*gsUZAHOeQ?p12}nRmazzZ@pr!J8yCEa9f-7qWk2}b^Ybu z^5=c8*?FIP@ve76LFwK0(utc)qaOGjHPU|E%*Ml8nYGJliT9GwtfH<%PP&^+CtYzo z`u*F+soJSpFSnGO$O=?)6|nDg>H21Oz5H{^)60im-mg#j7u0pgzPrt5dh(%HPj(-l zQ~6N#Lg#W9)~Ds!zTxlW&$nOMvE||q_p_Co&YeG38`SK7M0u9D_loIH%y;Vb+N=GF zI%ynS)XD4T^?ubZ^W{&On8c?o-ro7Q*Xrj>@l*3&uX+9Z^xM^`wKI{%dM$PxI={8v z*Z*4oozC>zN9tdnfBW!1!~XEgCvQ!iX_T`6y?D2(lGxj4t3mU7={W2*!*zHNa+n02e z?!?J`>SDYx7nf|aUVNL)=Emvlt*fT|c%FXT*TRs)y~Ew~_=3IP$}gN2OJ4kA_o6w~ zUb2hy&cxlWyB8@f{qn)-$BBGD&QJeXUKZiuU3_WP7pq*~IhR(=-Bs~*DhoK|o&Oxt ze!8$PnYH5}$H9KJJ?rErr@ZSj*U5T1>-OtK+so#4SF#Jbb|!3cxtaZP&HLpmbEYkw zxN}ydrJGKpU}YA+(BH%U-!H9iwT}?xUbEGI-PE+Bm&`YZeY^ND{%icyNjJIIOrFlbIDvqo7ufbmUvE&+!`%v?78gDR;ft0nj(|Jn;{+@adEo8<7AD#UiSai zSbl5%t=->V{XKf`{gnHGh&Hi_qX&dQ@8Q-u0EE&BSl)|NnXmPqZ+4f z9)B)7V|rv@)I=5+m)$OV>*6-nrRFa+zAu!~zA5=-u6>B&&#Zmh)ptd@%@6H*EE==5 z%3EjJX;t30Cez+Xe0pVhx+W)L&Snk$E`e^j8^2CXT(vb?MYHrmGQaPQfTz~pjM=5kY{Ldg4aA2W`qM_8(UF~3K3|!cS=`$pNzdmT#Qx8Tzg_! zo~n`0WVKJR;i}WaEi#_QOzx?=u4QdDf}D$nVYUXm#1^ z$Ff$%&bRo!wxmg^NB&Jk*Iiky$D3laS1)<^?aI1c^|$6nE&e_KZGLU}U(@f)-!A{V zu(rnO?$qPH+D9LL6U|Iox?+9HGFvGjWkHu)xfbeka`e6V zYmIKIwe_91E7JM>^8P{2-nl1_Y~vF;m388f9`ADQSq0bpb8i-P^zfgSjOvn+`+8vCf8CnICcT!R@47T9OISRY&-`>}Y6 z$%+R{CoMdB$oVzrp2+u;PA&a-Gdv>l7PsK$C9eeIcm0hmowZ+JYEuOxjPg>D`gn+~%g8 zK2FRu%W)Z8l?ykWiXhAUrp%{9xe6ctP@T_IW%Vj8Qx*C!`u@@tJR zi~YW5Elty^>07(@m}=?7#x4HqKdv;La;j{v&Bf*2!K=SL{aU;HR=()%ZpfG&KS0#u3$-ie^ z-a7T`%91&Czm{J2{raEb>A(LBXWO>_oAmqYeed7yzkaN#*FN;kR&-M3UUlD}b0UpsH9++5fH>}vPi3t1+Qmc86$v?=IeSjmUK@xF&As~q#lR{eS` zwJK!QZckNx|0I*GCJ&=iLpK>tyecp~I3V^`s88vcONYGfvcEmxI^ph{YuU;{SE9A! zR+g^X`|V|Bq2Kc9F4B9GW(VI6ekt*!OLw`pJNwD)ONupDovkito8~XIdZ()2Os(w2 zDG$0X3Vw^Pe;ni~_HFfhkAL^y>iwGDv2XLzB&+4uf&#TGcYFSJ|8?x`wBzBss;2EI zJ9YZu(yr3XmmxtL85LbTJhp#(%zOD--pxOk*~Nu6R@(1e^~(SKvcEfPFRn7#`}phh zo8=p>{%5#cs~US!s$QV0|B;}{wojK+ioB%5dUvh)s2lP;rQCDzkA}T7H2a?weiB%E z@F-`sY5(WVmrf*^a<95<6A{t+?5yL0u6eV5P132KGci!HS0H|7iAe4`X?OW~Ec!hg zFQ1x!Z_`YnmhW1f?wOpOKeOt73Y`h{XrEW}#^lrOTJKNKBKp5~@|{UmFznyHani|G zl4(Crx)qvSjZP^w{E>Oxb@CDA{|rjn+&BJAToEs;Hg~I3#Fv-dzJi&L3YNGgpE|uT z>Pq%f<28K~ErqA;i=N#kqRy@S=syEj$>p<~E;?#|x#)IpYL+^a)#mwXMY(1VeLuyP z{tlj&%DMONT|lJv>}$yvb+QOyMMY8UYhT}- z)4|sw&QAL6(y?cc)63BGHJim==}yk8ym(sc{+7C3^Vd!Pu6!x%@AYek!!|FOe!ri) z?2_>55A%QZWZcS{bU*p^(s{rBGjtt&+q$=DG8x9X)JeDXWySZAH}6WqsG*`Rx2t zvTKH$-KL3IuhMN?vn&IaPF9^fb&||2nc1SjnJ@1>z0lVeogVKQyxiJ7)NW&KfvbQ^ zz@qHbO?$2XoK}^LY`J{-dT4-Vr=VEb`nP|wtoLh5rOtjC(Q4|ZFBf*oplyBBvt1{b zTC2yme^_nRWor_)LQZ#e-m9mxwf9LChwE+)*k`(M(b9{RXCGPI&)dF4#v@pCxwg`; zMX_u4hHF;z1lpE;IvZ%~JaO^w5a*Lp?bp5Kr_56*x15pwa7Fz`(cmX_Z7XUmNz?=_U{>U6))e$BV!-!9IYyx-0*>)*bt zFWPN>I$&SGuc)m0m;V{QOwXM1caQeJ^>g=@ihaMV|-o(qgdmdgJ+LJ7PD^|JuHuL*GO53;P zq*lz`e*akXigh>KPMq{iy5YF!={5DvGxBw-^|&bu{>w(wrOwsBkR{@tQB-}+ipBXF*Vd;OR%(R z@qNoHyRNi8&CiIGIQeRo?v<u4w238GY@GbpPP(5OaKCJwwf?l=izS!s zmM!+5bmV*FUEdv-Kej!bp{OHa;JL)@wRX|7DI1MgB4+H_6TbKKQzq}n4?n%GjK6gM z)}?>XW}W{TKJ~B8uekk>>c3<^PK>{O=s&}&pN4;bpWC8$;qyOUm$whIO1=H&yeylx z>$|paVbZ6M`M)Dy%Kw_ukt)CSkKMnrZy&-h9shW({PJnjYxO)SVX66{Nw1r{S4kb7 z?=C)L)2Z!!YYrYfl6z#;^;utSEiI+=S4LD>eR%zN!+(a0u1v-Cp{^*w5cc{$oxm;WA`kTkvBaam> z?v)nY(36_7^26U%R<(z`46i(k+L3d2*^hJClf75wO%JbDi8ni{X70%O4ll%QkSU$Hp)vDKCRubOlq(9rpVkMb!}1Y94p*> zK1x?*r<~HA6Jqi=onuqTk?Z0A8I*1(?~+xFICcK<$%#$HySUy)T|Txmc}nX?x9GHsd790B z9C5K-OH8~?<6kS!aP*rtE&oMX=EP4Q{l3>O@_xCXerEoq{Y&R>Ui$a$ZyTq0t=Fo* zgCZ~Qo96xPN$~d%?LX~&ihf+Zc7uD1?X@dwdQ62Eo({OME;Zibn!dh7bNO45jlN2f z{%`E=owm+coDv;=qQuMTvZp}Hgx!Wy?a$1sdFHZJ=+~ux`ln@8Wu|4$JZuskGBd{T zX>He5+1T7ycER%X*}8pxEAADUIEQO=$JHs-sVn~IZEGuZC}5+&2{@} z8nPrfJla@k)k&9CO8qWbc3a<=PCk9mzBkn)&SU@9y-!Tsq_e!0`~5lkPsz$&J2oTh zt6oul@rV2TPgQr>MRl9aT50KbQIR zihfSdC#R$&_1mHM(&pAB>CTVkI=i*JE^1k@%;`;6POp70(4MRQcW&{Y*Qqlz>R(Os z|7^77Z<{w(o(vXcLr`mQ+D zDR~~f8xHT<_)5$9YDm?o^Ra@jFRs{oXZ6|qx`6)-jt32|SV;4>OCHmZ%6Pl#+{Eo` zmb5cEc!2Md;XBV}AI!#LfAJ&tNACUEuJO;e`1{B7<{EVG;#>LR!I8~ck34G@^#98g zI%X;o&T+RdWXHRyA0`KNYtNK?5*O8e>D;GJv;M3)>1p~f_WP>GYp%SXTs^<_h566> zX-7+E%2uDYvenrhtFN2#Ti*Bw`t;;q?)+?vOi`9yi{1fx(%SN@2(($JQuiem_^6%fS$lX6L{Aak5#=R?a z{;5mXcBZI=v_uLn61ru$X06jr-HsxU%ZCMoSW?eKg|#M%&F^g;j5Xz^~hOYH>8wqope3SwuV>b`*a)E zY-97pl~*k0tvY12@?C#WyzrIj5l=pyIq@o4sdG!9vS8hkJs%PdE^m9i_+r-cZQJiN zyWPJq>r`9ea}G=1+`4S}wc5(!E4L?Yid4%8%dHEKm~$^xch#;}eNnOYzg&51)J=mn z-F&vA_|)HtI@3e8n+6LNYER=Z{&D5o<~_UDZ{54dH?hM1di08Wx9{t7UHELTX`>su zGfS_imot3bH1&tE`E_yXI;WoRdaGj=7^T$ytx-Sq?VC-Osv3txBRj*MCT|mJc^NC1 zpX+`rweXg%Q)Aug8k2(CtQU=rckG|Cs_n-8TlHz*BN;D<9 zZ?YC^&71#ey4Qt0Yx*R;&v++JyfAxR$09@V$vTmfy7XO7tp0c8KSS33rTe!ovp#1l zqrPv4joqb>7NuWVrA{1)Q)G5u*?Z~yv{lvXC#TkmMDFDBwwY+DRCM6^nx~y-1z&5~ zraE5_t5b~p(c*t3@JHv$owsc^^G-d?ULJK*?AWiL`Z_{=?g6hv)9y$ZUx;gtBUpY_RE^3QJ@JIT#IK5|NYI{w=AlyYU=_4jqR9|{NO zy)4&z@kjefZ_KyQ6)$CZE9d;a)c&>qolAaBOh|W0;FKTp=2|_Rt;{5=?0UQNl(j<8 zF6AJfnK#aPJh*a>%jB6zq@HI*+4L*7MHcPZT9z>VnD@7;^N;j#l@dE8)7#7rqIkaRUO9+&z#DBaoV~n)%?Y3mz7=WA-*#=btIoGzjETz z;o8YBvaBQTadaKJ_@CkCTHU>@x7xZ#_X+KbS+vl+31S5 zVAz?bGhOd<#^g`j<(87>TE3Mt=GIS%G~Q*00$(i15n+|rTHxpM^x57U1||syL&~GQ zZ)NA4tve%Hw)@SWi~XwaSErm--ulzt#ITq9=EILi)3!x!{u8o4IzH3<+P-DmH9pLE zds%9=d34TpuUS7<#>RR~&)WA<=hJVOE1CO(7tTrQ3H&xEAzWV9;pLq6r4wKJ@d&LH zTxj`9b(=x+oGnw_{rx9bM6E2ne0^VGpXh&v?Z-M?mE1d`H}$4$JAPPOyz1hg`aLxd zOSrHM_(z6zJ6d^<8gWt)BeXR zuDor!8gV{2^Hr{G=<=0Y%5V7z&3+&@r*F>X!+iIb)J^}k_w9x2&wXc4s>qzRYhO@% z?6QkWJD$aRy?w1JoVg|A;1Ij^OI?*PDgSodi#z3GYARXi=6RqZNK0Z|B|kxtQF-_RzFr;@$Xx` zwChX3{o0B=$B`+~2t?!Hc_x?<}mzE1a=pKISqet)ySCcSF&d%6yaPKteBohUzd zo~GSC>2z=Fm|aID%$_`OXIPys)6Uj?PrJqZbjw3`#_659#|2iK{8jp8>+Ws#B*3gs z?Q-Up9^Yj)E8mx=e%=4}k$&DZxxyE2(NiK#_X#&VN%I!QFInbS zVRiD@PA;AsXO~^(c=`0ot5SnA#zH3CVy~2Eyi&Te+gYwB+HlCwHvBaP533|@_1&B{qEc+E5a`QHF>!@;K!>EXJxjA?dLo3$8>(%^h_bSIjg2id^p+d z{OQX|Za-biqpgRQ=&BZ4C>1DP+IU#FOXQuJ<`B`Qg9Rg)0sTzfGub8k2bTj6hbjhs}puM{D_1dP^ zrLM^pD)cU@E6$dy_*?pH&-~3lZEP#EpMUz#z{~$NetL)Zn%|c;y=c?A_TuN1|n=BVqP4YRTi!n8NSpoFer1iL7;7RJNbTTzJrC{sg zalWtSZC~zxhPJ;uzrURBt#UDE`{_RxlfFMWx#M2%i+g=8`KC9Y)P6a=Mog(<>Fu|h zqL)6D3Jsf|WwuzZY>!)P+|0Tx&-&&^b4|7P&5B;}`Rcm8OIkCJQ=c!>K8N=ge?C8F$)dS^ei~O^g?gQ|+;QZ>pRD;_|1Mv*seBRd zxyU<)eRbkG*;(Gj= z?JyJ3Qe|shv~LO;r=mvwX)gCY8DE zP>x-GXUDRFvvP{@(N(s#JEn?h9*?bO6+81`t-kHc})u(>GEuE6Aw%*Y^uWy}} z&25=o@7x}%`AnMCX&r5FW0$Vqidt8pS>{>`n}dF3UVCji>FkrLy;cYQc?F)h+}$&! zZO`lXHQT+GZn8A;oca00lg#PS+`Er2oSzi;^rFl3YcF#yU)wYNMN0F}8~;pBKi+Xi zb56S==t5j&^NlC&!`+tD=2g&C{>>%dWZctkPKP;wc@t<%Px3 zPL=f23ok_d4pFU1Gxl9GMRnzsQ@;(~Y<6~Ee))I2Yw}$!<(c)ZkFI3wmIul&Q+h;+HS^ACs(;E$)1?HqFi~- zbIX}0%``eTy*RM#<*nS4Qe7{VWklCcTNPPSqo_VDXw!p^FRC)VLJhM!cN)cto=?$? zUUPCsvAJ}sa`_a+Njo0aE>GF4^Yxp)`BVALzm(iNZNlYMe@R%Hy;3jxD*E*L$;~>T zz^TjmSCDIv{53rN>EvRoxju4Y8)cJqUh8Llj$b_)v;lwi`H3^7XFRK@DGxu&6Tf_l z&V}o(dYx`D7hf%pnp4kTJ*}aykLhAqmDllQ>*e}(YTH;&%Xr&;(?Y{;-k&d*AD%Pl zSlxJ(xmPC5@adzz(2%Xy7e$?({WWafvddSZs#bS81%A5aB%3#J;r_P2cKgJ*JiBkM zoTl8jtKwmO%cGf(q{4kpoV>2f-=S?YOK+`bY}m11R;7CCJy|>FPA;C`l)2Y#vU19^ ziM6Zsj#RbuhbrDTvsTNSINww($87O}8}E8NZ(DZlGz@TR4AXdgvZS@&_{!c{NvZ-b z_G~JbDX@4lHAUgh*Px#vQxfb=dW=jbEMJoysP=u@NjIIkh);1Z^fn9Li~5;&RbNF> z;@iHPceRYQgFp)*L91U9K;1Dp@4NFa#@(4^*S7ZAv9mwS=X5-=Wh z?y*Ybol@oCC4Kkn{M=(!T{CkIoIK@OSJsWk6*C_R-e2-Pc2Ub&_x4jNs|(b1SIbO( z7;#f$YS!BotB-zgKB761`}IWerr+j%>o)bf{*rY2F=v8hf~{-DSJQdR7GDji+I2oM z@bxO4E0HYwl_3&`eoJ931{9O+E#00r};|0+6IM(Xo2L<~=x{6f{EwZF1fth`0~?EHmDpF)+COv8iH{Ie|AI_O>gZ+EH-@3=DI-7L$rGn)gIPUcN(lh!VB zo<6Bzfy(sBlgy9YtGT)9a#PNimh*`1&7D(K@g*+))F;p(6h$xB&-b*OmE*Q!&;E(# zTR+LPEADwBbN0F7DYu6<|9W<*q(7agvm>);T0i^Z&X-D67SH13+3I8?m#++!5xR8T zZkCGThqZNCpYqgx$ZT-F64vo*bxO*TZiOX#tHL_r~b_O6pwt?y4JE|`Aor0$J_Suf)&CfdZ=Pk;Y0 z)=zZO=?}S5Jq6KA*QM^0iCnaaW%VRO<@NKOmv3JQX&&;t0-wEAYBkqy@rh6BD!GbR zrUYAbD{d0=e!RS0wf|ANO2Eb^Z@SDQm79vhW(qFTxX~l=H%$Fg?Yqip%VMfb!ew?n zZrOXcc+SbS-yTYQDmthwdFq76iTTqVw@jL3u52lupJy|_{Hy(Z;obj0dpo#to}~Sh znWS3Akw0bHJhgRuw?=)Bl%LxrWHK@9JM$5ZDX+gwpK$TK;6=HPFNU@vzHXBRK~0cT zsn_pymaSVC{$l3K0$n?}&o?q;CbO+g^uOcN zc;saEo4wm`y>>&cnY53D;i|8S-~?}|TWi|+Hf z&XXvi)Qdc0`a-M&HUH>T$ChcFzM_0(;Va(F1#{A-TdcSAb1T|B&1KDmHR;OA z*{)F&ZGPXMB)DSorZ+|cMRQ748HTz%>O9Ka#=d;Lb-=_Gw^p8f@UN)_OrUAA6=?(e*VX2PcAN+74GsP;n1g#SDSTC&d+bv zd3FE#vG`qV)89u5+Rf8emn=Hj|8D*ZkIQvm8j8WycJA-v!0yPfIlo*>%`&;0ePH_jA3NVJ%>1Owt$Fe7rW=3quV^j)(b9iJb^eivJuZJd{`g$Y zp1Wn=tyrHG_JSMc?K{aIZdTPP^T~2ak#Vu2@}V`=3%}Io%-X$}-SYh={pIuCx6j#k z>7`Wm?!Mh=?W+T2`wi0j)}Q+R!|2a%`}`xDo`a6kxh!Gw{&SXsYsts_J8!&q8Ncb- z{Opufy#J-xcfa-b_&+`(W~yfM$9~hRt@C&N{c1P$^pc3Ko9kb@{QK~it>uo+;@Gg8 z@xhi4(v6yxjvV(t-SW`l?3z>h6CaeM#l88Nwfs|1u{RI_-rgt3O)nW~ZLH^19!PxPNh?yA0?36hC>);94}t-qNGf zZ)PvraW0Q-pMGxLLXFVXNtf^G%A9vPzVx6~fxqUHJAu{Rt+S`q+$)spJ|FN|v*fat zimuJgWf!%Ag+xxPX7HbuHQdg6&wAdV(O;# zAzO{LtB+qQ{3~r;Q68(diuJwOx{q%k2mN?(eD|T}$CI-{U;k&QzBzHz^3O}ZG{)yk zILl{z`<8rm?wU)sSAC`CumA15$tH;ZO5usn6OSeyHue-}GP?D(9%!V^R&&Sk=lPH{w_XN=Oy#PdEewK2fj|Ut+E$Pe`I7YFyret z{`f>)mnToZU8pJfv~l{YoPc#NbDq!Ce!hQJ<g#<-lt_d z4oRqnr2I8?XH8nglC=0~vs}hZqk~7ecFb0an$$OO@9I09<(uCw_q_H{Xx8I>7iaxW z>HTD>QtWSY*~WI~+F+e+1@l*IshaIx+q^C9r}WI7Gt(j`tGE7VxG=vY&hyK@V^5d- zU7sxRZ~yt<74uKMTJl(Z#fA^R)wSRKdSzdHXZOE8j_)7-Gu&&xe)K;>t%z9NlWP5( zJu~z3dFm&w_~rjy`PROB=D(!kZbhCv9P&B&yZ*NMTT|1!|6TackY~I1&HP&CKRc!R zZ}(RSzFikTV?plJ3 zn1n6-y|{$?y4&W(O{8`tkKeubvA05`VPg&8q3n z?H{fkf73tb-jNO=DXAY{f<^vRSv;Lt_fxB6yHTBM)~+7{|F~}4KiFhv^VaV~^7nJU zdaX7se|$|PDb%MX{f*08pZRl@S3lnDHz)k~n#pSB_CGRr|9HK=KSs1LfBhewocZ2g zeXrLm?K^+js{higTM>LS{xcl*KhV4CKSR=wU#+sypM2wkzU!WchUq8P z9656MuDoKDt;XE*&mWoY_q_Z`OXbYUE$X{${cEbHeKFnG`L^zfeXWLT^oxJdDU&=^ z=1zX)$LoLp;*T#Yrv-;k%3RS=xUH`0CX2*owxly!1}i>ZshIh2#fK1GseW!7o%!=U zj_>!Z?S5<+%9Q?hN!8RZiP8#99BDd7XKd!`mv!%2d^qsYijN@`SvI2b%hMa@F(XH3 zA2d1>JzLdGCUnH#P;%eIk+j64ZJ&*j=u^p{!oMnUwv#gq({zr`v)X_7c;MsJe{4eK zr22W?n-(7oe30Hae|h@L^NbH|G(IRF=x0@Ln|#>w;ew9=6)$Z{=2`h@8ZJ31(BY!J zYr&iFc-H*J3rR&?F}G~@2z9zl@-lLny!Ath?~+NLDwAq`XU_ATys56#k7bEVWcP#B zt9>^arSvSE$y4~ow%vx4GroQBR9WPyGRgC<%1lWi zPqURLmA2bUO@8%ulHW;{rMIS^_-1%(_sNN7OK(oeNttA3;@HU|pw-i9)U1-$b8+U( ziBor|oS3=iSIUVqXU?1n&4~`)>T_aRO3KMHpC$Q^w3m5FyDVCF;=ZR+a>hwXWs^#Q z*Tz~;ns_`E8Y3rp+y%QjQe~6mNhL}1Cv8b*Bp;{uOf&Xh?;4)G&&|zMFMi=Z7SFI- z)=KW4{>+=V%oP5d>HIwB{^UuL-G-uS%uAXkPDn~fO417KQWV^z%k1us8C&(6 zl}*wr`4wl*mi3)&I8Z*CH}q~zlj_1o0`A#-%{t@kWk zlUb6IdIDKJLMAx8G?aHTR21k?Xtehhc*`P~HHY(8#N27eZ)~%wR21mr68r^3u|itNzW}bu-fMM2evJ#ib|L+`qd#)k*Z~-4*X|JT-i!tsNG8Q|@T^ zFRkS{b$7e>zQ58^|8?Ufy=}pMvjZ-MYTD_$UE3-8IAxZ|hdQUd%6nrvb7DkuE@bha z__}&`=K3h7iWO;VP4vymHTvfFzDOWV)e%-6J?$If8cZsB)T z+nTzIvAeB90=M@4XPEJyA@fJ~+>1xI{LN1bNKN@0T++GUJvDS|h+@vn`+m3Pu1dOf ze<4S;skP>-GhyXU(VCLqbNwG>l<(D$(s=l`JpGwvL7l0@WU2WL*4IMG^2?xe~zZxv8Z_1wJc*7;LcrZ?Hk`*W51@Mql(7F3y3 z{L<^H^|Fv3COcQ0^gMcZ>Q2qa7uWvjHRXPA<-~M*PEq@g_LAPJKN%MmpA7T61j@83 zlRTAHoH%jfb0@znO?!7jR#n7d(&pRW{FnZF)v}LgeOvp7M2SU$htxi0zpBh? z$qZVtjPr}%%{{ZGnumz2<50e`aK#UIP5S=>Dy@JX(aG%-3ifE1u18GHW?Wi zshn6kndRKco3Sg^bH$QgUkp-cV!aqT;ijtDWEHE4lZ@Ov^72^(99g8cKI-KvUY9HV z=*Em0GiC@l982+3b932f`+jcEY^#ML-YK^{HRS#?ESj`C?4gu@sj8FQ^{f+CvMPdA zp{q1r=iG8T$Eos5_R;6plghHMPHy&_BdBvCR9PjhXQKD)qcfF6U(1V4R`b0q@Ga!s z(F^ZaJa6{va1n51RlffvC^R>&SFU4A6jy~rd!><)TSlp;l9HJco0;0h$wp~Dvpvmb z>$zX#X>-^mm8Pbqre@|Tu}F~X>`mT}xn2vUN}k8`T}V0;*=?xt>eadb4B@LzN-P#} z?37NKcz0uoNmAHHx4D+qWsYK@lAbD)io8|dUNhNsqxE0U^i1`Oh9}*2U3qk4vzQ|9 zn^gU5@!t6pZ!Z5+tI@=voUKvuitEih z*EHR!Q-1BqTi22KdDp%c-8~adq!=v>ayC@F{UYZ{TamZOX10X$l8(?s)E zEc;NttJ7`y-#cf*&bhCs^va%nP4(!a{|rty1DD@jwQ?rs{O}dwWzpI%oL^u3$>03( zKSS@0^TPcgqg%gaST0YKEC^ln^2M^hb8}X2nzyFwMSF(mq=^}awDR9ySh-vC!A#MY zZw@-Hz4uIg>+a0*`n`8MbJDuBlgpNNufC$a`Auo?rhQ%2TDR7!ZM9s-D;29fx7+vH z53Q&vAC8vqEZ-deV}Ad&vsxC@vh+VEZQA20_Tr!OB-Sh$W0i~XbuHia?q9L8AT-Rc zeC@BAGEe0zT~lweB~?qDmFsn{3V8iX?Z)X)FMTJMuZXR2D8 zObtA^>Q!Hv?Wr>%>o<$4xJPTQn$aAk-tTkIYmUs3-V^IqC2w^SJ5^f{^q=A4uc^9S zGq(Jd|4@>8W8QhWxgj%De%$VKY6(+$B{WgPP(+VYxba@APDy=pba?WOBi0GJvr1N& z{@&BK_9xdpSMMitC;8skw(#!Ex*NN09o<^B;A(D(`qzEA(pi7^+_YaitK{TLFYoF? zk2_N?m1OQre)FH<%axFgITt%k6&3GJ3ch#mo0{#E>|I`~PM&=wux+(==vk+mEY=%i zWAEPWIx#70VrPvg$J{@Y&bh~wSj}}2)wB?`HVIrGcD(98L#MBi9ov)3fmK~)=4?5$ zH|8eEemZ(DUwnnrz4nXC&sHzJFQk0oRLi!rJLFz$*%Z-cp7K`i%96{A-~F1^uYW6G zVVvvgAg$GZ)k`y8tXgUEa-K`=txfa9Zb%EyHq3A2@z+{+VePaNyZ5s!lv<~0B5wS0 z^4>L1f>O$Sgo-njKJLBC|1h(>w(8@OKUGGnbbWHJ z(6&jly6&^;N#1v@5efQjkRmg|kxfNn#=<4KQ{G%(m1T0xxxr8MTiV~By5zg6Yr5LvlaD%D zxqf-iG|l?8=cDwBH(3=@&Ax}XhKQ_IUSg`WWs>Javm@osE|cn9fmZ#jTF10er z{4w|X2hnNo${odXl}*xmF3d`QlI8x^{qe>B43}j&`+a9@>Pi%~tWKP7SOQ;pQ@V6Nl2fQy=WuI#nj+Ond%f&C(i9apebBYn46AjuknwOx`V| zJIUBBW3sWaq2(97Z&|s^<}06^a%GqGmd(n|{U09x*)r**%52{!Im`dvSZS!xWGk|E z>i$Kue0+R7lxxE$3U!9nY|NW`!S#o#vf|P}=cAG{yH@VLwJr4S%9yENH_hJnZQZx< zP0J@AmDSj_a48&SHk#G{^7G@$5M_zt`0BCB z&CTP)>gh^pE;Egl+-~Z`yeT{4F~i8s<3#Mt#m2^lp)dTte&5vB_ioMK(DE#6?VBEJ z!rJ!meU)GML}$KPb@ltE-u!znZ?(Tn zc2io$*5l(7D4w4(DJ?DS%+1M0DVt%PeHJDrCMISECT2uuUqR8p(1BT)#Zk#9z$s89 zAraEqX99KhzocKDyZn#ji?X;m)k1y~x0JXqmYY&_rY!!+d6%!}Uf-Pe{LY*GN9Kp= zOWA*ToaSHr?LptkOID%tV>s*Ez9g5&b)~$XZ=kp0Yk15g|DT)F7l+4wy!h$ElOM1D zGh9z-;_>*Vy;4s{C4ivG;kU z*4KY;EbPwT{Le7?Kf|H^$@Z={U+npMV*XxP?hBJV)xL^cwcCIC{72;<4$I~#{Ln1< zDZk`PY~E>4^@uMCO}b+Je&$JWSM@i(wbI)mrQq$Md@rTyP25$xs^@=KD80Viy+3tz z@bg9b^6%Z3i`Sk0d4A82eLgeh+^sVF*R-W--PhlymD>+K`SDBX%p}vY_~++We)4qn z|Gu~GY+de$`sBy|87`>I_q7h`(&&91{O0=KwIBX7B=y_>S~K}#_@;j*XEY5x7N2){ zZ`bnM`*vBZsOC4ZDVNXuXIQJW>3it&@aH$enz%~l*X6vKAEq3*O8IWHqV4N%f-FKa zw#|L?`f|7JZP5$u9#=A2ZymiKa4J`7zpda4Q&p2kHD`ZlFAP{JVi|QjSYWUDl1ZK# zCnc3t(po<$zgzPArTkfMW4Dy*uN%25o?my3xw$l)r$pta#;Vduo+?wkjNCHL$|o7S zW&9TWw)n04t=i=`($dn>&TpK#SuN$vD%D9R)77m&4Zv6POM5xFt6nvR+MWY7d=^ih zD3JW0!A+;lkwtKgfRpkyP!rwX`s7Km?vol*QhFv%GIlGOpJaEXcE#^Nu-Wz#PR`u? zCjG|wjq{W3PW8MpUU6!%R%goQ$&)9~KCoi)@nvh?{mE2wbLXjv@_aG-Q<39Io}&{^ zqzG!aou6@Vv>s^ivSo2Ubo%6$mO8Q(Z^GH@ZeW^V8lj|hq^7IE$+KO?yVyjN9 zj!^Kf@z^3UW5x`L851j9cqTWQPMqYu#YmD(=SXA6+(joPCUhvqv8krM+9Wf9ZZZuHJIf z)>XcnKX0YWq)wHI)`m(xouD@J^UCe-*II`xIXYv8gv5*)ixgU%6oouhCY{`(+}zyc zx#f$e@QF_Kh4a_-UpqTfQs`v5lJu^W?pa+eCsihSzWE#Fsdjqa()1I*Ql=FZ?`LPZ zmv5l`!AoV5r;$<0CQr4?ss9<=n|#)+QklKlHf-{iSM8`bFPA;}Ddf59^YYTgqSJcPU%M`nlARbou}o=MaQSl=Tak>J(VE_=SHqJG zFY@@k?OwP@IppWXS4XrBr`*gqR=35ceBznORbS(*vQx!ZyPTY>njPt1w6!*OqEc=~ z*B)-yi$0UBEJsRyRI)uF9S^0%HH1_FzI+q zO7FZ?r&e3<@+#>LbTp6BGSUio(`Lv~9=;;{$Bz|1_v!!SiPFoD*b-Hz^yJU-BRMVM ztFGpXWxKd8U;RDhPTz~ks^;ZYMpIL^MX9J%NXt%}FZ5vj*$L+_^xt@MAf)aHNT)CUjMXR?#o1$-=_ILXs@8u>wgw zfnA1%3QZh_N~hk3UU(_gH%*bJS%@Q6_h#&rmFZ_bE@)3pO|ROyr8~aSRsD3xeplr~ zU#>4&_jO_>C|g8vC>%L*zf3~`=obzPasWX2CFaOn)U(Ebv#$L&k zO@5Iq0uB>-nmG1k%F21Fuid?Lv0eO=OXA{An>XFc|ERg*r(NXZOL4Q6FFyC!>uM`l zu_cOQvu13O@1={kRbF4@I`_WhRQ%G9OKwKBzuc4$>6)v2tE@F}6zg3SAJRLyWNY$+ zA1nSdOk4HpYCe05)~@HN-bboDt$d%Hm}|L3aB=oRC5~Ghl75r?bA6UC^69)ZbxH4} znyZDZHrk#l9aW(jDMpgrhMG&(PZrWunY?C_@6_p&b}bcfWZ`@J`NEdEoOkWJgjMD$ zbnlB~$yAx-dES4T+ayor6eE+RarvF>CqIM+yBRpLDZAR4)^T<(;z?Q6?mme_q1$@x z%e_%o%bzba@>KbIw=-&Wkz==Eno73Wq?}U~TV9<^b90#~DJeNAMNLU5XPNnUpU0FPL#sTxpMhBhQMt zH`aPgcXhfnS7QB#z$5cbiyqAORMxyXe`DAE-oO1PYu>zD3+kqA(l=g}q|n5n(0ilP z<(8$zUm;JGnNgAYX+fb`u9Yg2ymr}_FS_KZGPz8kEV*WRJUyM&zKhPxUij`5SIe61Uk)1J3ffL z&uZv1U$-)}YKM5pOl4)|k9QV-()yR?=5kjEGzz+9_vI%)Usb%=I>}STHJ0!EL9?nL z+d>!R=H~8`DmObP=ke*PO!D1nDf(lxX8h^N2UQm3YE1E6a^l2^g{PaJuIA$DG?G`< zn7#0Ic(1+q!Oz9fHw7F{s!S?dnd;WPY~q(CR+H{ce1Gtu1}K0de=1$-44Yx>mX_wU z=H#SPrS5Oaop0X%c>S}z-g<7=RdPLbCV%4DPye0QQDfw(l2wv)QTg#t<+iYOU3WOo zy*_bt&5NIRg_m@Pn6LU2TBfw0>0;c(yE%J$;;QVWf6Gt(yRIemytjO>z35N(CmQQL zn`X5ypDXa^-gM?CE`m8rzntrzs3C9V>F+Hbwf#SX=kDz%bTxNfj8tFrDfGdzcjqqD zh^~^^{7Ea+POoP{#KyZ>#~=G2`*-|l<)vl1fuYY{om{%gY4`PGE2^}FpG5BsWD#)d zm@N4A6Su1)d!u33+1{>oCa!T@CC;C-a=s*8%z67;I%(xk>HKpOPF2;s^gPgB@il8< z-L9)2A9?(JGutOWYtKyqN1LhkzYOzJY^SaJyn6Mdxylv0e$4f5T&oaey?d?lY+beY zE3?&)`s#i%mHDn05_$Q^i<{n8BY$r3e6Vi+FU_!JE980>MD3f$x_Ft(y7o(57E5aN zPSk3YhxE-#-k8nwAa}phs^`60LZVmyGbFh;t#fNlu~qU=-WhB*S2Lq5He_AGPy1eJ z*Jm%vs)Edq{%3HBpSL|z?eg7l=Hk*Nyn=hRA_W|SwM17sKYcZ0MNXDkl2i;Lzy zwHx!>X0G@%{YaFqSQE#azj5;&e}(q^jsCh-C+6l$uWsuQJ>7@gS#>^cPh137ZxN`o zl|S)k)&9qq)tqkS{&?~8)jyZ7dj0+LxPBB?RbTk4_HKIC=c+eHIo-=1|PS%|M?A_J)$sbpCRoZ23T9wbLe6u8ADuLQd3eZ8l$)ZwS0LWe@PBMaATk9F@|EkoH)d{`V}JMB{7 zX}fTdOcuerUXSVz^(x(qnEFa+qF#GW*P2s-@qhDKBqnBxb@mF>>B@hySKC>*`R$MS zpX{ohH+gP(t@71QG>n@)TCcdMR+Tv6CfxlF=@?u0>vU zQL7&Grl(%?4F2*@_33==4{Oclb?#GBQ~H#Ylw^0RB*)96S9y`XtWioz%E_CNFaC&B z7#XQd)_uA8@@#$C%NYtsnr6CYMRs<|8n6Bky!b_xuDp)d2Rjx}n@s7(1TP~ur#1fH z&TpvKoSZWG(z=T*0#^GUB{{MvacqgoTWjWVq**$_v6DHr&jQU^2viEM!ic2Xex(By}~Cp$Yk zS$Mibx0LSQ8_}XGfAo*2Yg}n;kf)N$B!88BHZ?UB0Y~=#M;IIg7?>DXnOInvnVFeb znVDG`7#NuZ1QiVxjD(a79GM*g6AO(SCki_SC>JaYN?=JUnzXT@>7mJ@gCZ)<8#aNb zB^epm?3w;E{OViz_ly7U=kERQm-EEmw_4P1f8T2H{olHs2}d?Q*^m@r`0vmv+y4w- zKJ4F@{hz_5a$f!3bxRXU=O$YuW-Z;ngZsygj_ZjRLd6%Xi2r^2OwpyqIjb}!gKo%w z`!)Y~pt$q$#1E^LmUG6x{U!c!t5f&RLm!U6tEgY*^2gOp7F3*$m3ye z*bIwF+ZTEyF0J4G^*_T!-rlAE8Fpmw zn}F5-?yahqd9uZ@=08LJRQvuEtGfRTx1ahyzR9QUCMxpKg0Oe-zoY%1 z&s(nkcg@D|dD|E4@2{FO|J$eiCtMGUa)sQIVkKG~MlZ*cr?J zyV7;iltn-PIdMEZI7#i&!`h=lhf;XUT?*Z<9{bO*y-ZX5la0Z#7cmbXmuN4hl8Soc`*^a(;HrU-S6CeGOQ@e%j{iNzc-go=%=BqIya-=$obYrBJ_1 zAs2So@)!T=I#d5Pr+(+EO$En=9_a+^%nX{m$tY;j#%ix=dPQ?C?M|K6uRV18&+sAtKLgwMAI5@J^NyYm3DVP$-x-nd z@7d*?4L!=-tNY)YZ*&RX*;usyk+?hSvelD+)hYYzejNAwYeM#2`OCfbk2e01tC_Bq zdgrIl^ndbl?rJ_?pzAlUM$8rTD4Sz2wR+CRKVA~Q#0?_$sLp)VmtheZA>lBo%%)pfykUY6P`;JeOeV}6tl!)dS;&G3OjB? z_eX)9Yp&esOOLfMh|G9cD=pg3Iz8@Q(mlWazl)3R`f-%443wPb^Cf&{>09ATPqtVF z$^^ay-vlON_q6tCvhc~tY9)t$X+>Nvy7lq$ez!Irxm)Z1T{t;!Zug9fDG5j3+RQl@ z=z8Sok<(YU^+j|~y|%?(>-K+!aMu@6;*N?XwoeO#LTg(utc((WnR0Tn)wHP>;}7P! zeaR0xdFR$I^PrQH)qH;1OfTB9DfYZtY0;6G{j-**s(QvR`o(?9^@IIP-8`>=Kl3w# zyrcC%r>XnQ6jeEqa`a;6Nng8N(|k^5Zaj1L#GT#~zuF$FaXSUKyY}6myk%4GiMx77 zXYRNYd{igaB;rt-$frDWW4%bDbl)DCZ@gRv(>|~8Qy~n&}C;pLG*qrGnoVn%5 zx}_1`(+_$qTzIP3Tj;p6#>q+N%6tyqD%1Zn`IE?{EgQc~pW0h3r!+}s%BG%$pY>1f z<^FY{&VMb(j^wp}dEbAC+Nt$0=cXX9;XEQ`R}-7CC*{7o*+}(|e`6x0M^5b}U-u{nscp zXx`=;LfRC>dqypiCy}8CIu9_qAWAak%m>gdR6G(|7gHC#II`;UZ?UP8#i0EVEy=6v zHGWB423@;meC^~;>5E?#%@-H?Uon^c3cALoXQq~(@PCHe6#++u&m{k?GQO~0=*Pvf z)H?4Y-9IMGzPS63*vgI5KKy4mnGtxiw)ah+#r>%%-uJ>?7n;rXU2$k`I>_J`pH^*t z`QbmqmHI#Rljk4azQ%m+hw_D7Ef2dno|O2`U(HiK?a|GzX^%cirq`OL-9N3(^C2nZ z;&d&iEydcu<}7`yAum++*6xet>}gkW+dt&G?zy^1Q;bVrJ!*5|j?>zgPEN^h|5O`M zuYR@V*NR_lUWJkdpsPAF-<2Djku+cYN+tN~#q*Ero2#v-wN7i;!geH4Y~hYy?N`&U zqw@#t78ksWtg0>CWx5Yc5ApoosgFp+6d47NYK9 zVM70u^`(tcc3-?#zHrh}#n%0eQN3p?)m%lYcLy(QX1iAOBhd6itypnI$?s|LPxjiY zK5~0pII~=OXX3{POSC%v%`yLaF=R*bS7+Zln}Z&&wFr2T^i;`jsYXt^4$rUnC%5*i zzxgx0kLjP$AMua%2kV85zt?%i%~!KOnUQF?Shga(_|EEA>oqH*PhPSMi8_|Lar4Vf z7o-DIdKOpK3(mgzHA(-GakbI8XOe9>X~$~KazJMy@+fosU7oygN|45c)x}wVq}}dL z_@V7T>3G((hTF~?r^Knm8CRbD&mhphI#}(x_`xqq@x|#+ws5TeFvVw$!20Gay{PJ$ z>^$M`ibJP%?Vof{UVLw4K6mTyD{BJRZ#@6#!}_jiAOBeF3*}S&rT<9jL=%V6^(2W! z%gvv(X(+GpHkjxtTJgH?XkP}u*^q--v zwR*=<-+x`6&f;7)rf*f%pX_mcDXgn4VUScdFSV}4xg+GX=Bm9@ge}=+(@x%Wab}SdI<8qpL_R*nz&sA#tAI|q(|99!5 zKCmE)mi$gPb_qf|B?3p462GBlh(;%C7CilM{lSQZ zy?^^6lH-$J8C}@Srdq7_xG;J4%-_>mm02I|-*~zt;azNZ<1STaRUwzqasxe49uuk6 zmUjjJ+Wb1QN>AgCUv%Ww+1`upXx#sy^{6Q9!jmsYAGx+TO1;}vr+?z%q)C%zFYDsl zx9g#ki``u@SHDAr>T~)EOQpVjDs5Bi%kDCLT2!9SQ#$vN&Mz*hIl9p&KbFa8D)pIv zbKP;XYPq&Uj@hCMi*xy%3o}l;+`sYn{F~e~)u~#A(HB;0Hy4(NREedVp4KdOni7fK|1;fM`eMDnopV{6UoN^QBj223-^_jTwov_wf{Hp3F8!}Tj~=Z` zwO;h;;Feo2A2B$s>wn-^Jc%eTjzbbWsNGg@ttQ^iw?ckjgeo@YwN9XMyy2Z^l8=G z_T^9h-k;2NqMmiqrx|lkM?C$MeIit8%b)pI3jQcbWfg6?HeDvdxl8AA(4~c6T&yCV zw5n^wOs!65W!6p9F`8$d%YSKcEc-`&{u8@r8gvEqc%QmB zWl_!^`=$*G56k)7S=TMrIyjGK#7mHD8aK;+4}MJ?Yx9fTx`|0$t~1?i4@o#s2<@PRuIHt9(%fU+3*h zy5zURetkszDy@}*r`~I4?o6}#s?)vKeA34n9kG}3XYv+V&UJNlI`b%2^jUD>hd(m| zH49Z1w%^z`UFA{N@onok%5A17zbw!>x-_%6{ZYWqa4)eo_m7LZHoCs#%;(|||8tRV z!w+9x_Xj(&ze_E?p19)l}=Bzz2wikc6R$NTp7+;a@|!kVSTMu#r0ENdt<)o z3Qjt+TPJ>Dz2>hvJN94IrTg~o%4>Z(Gw@Yi=BbZ=`@$}sDY!oU!nQWcgUj~*mj7(& zviBG7$;$$_0{OfbvLCs=#_WZ&nu~qsiiEqui|pMbcCIe>EVe(hn(6sM8N>8=<(m8p z?X5pbm#^IN@Z*9`yF*b4$+cod`a8L5r*$N>?^w-wp8v*^-_tgFz1o@d&*|y3{mDXm zxpcDDa!varIdy4eXm*wUl~pez8G=5R1+C%#prY$npdTbF<5TDo zdh*Z9;DsW!zeT5aa(|IqzR*vf_mR>p+0b;J8Rx8uE*m#L(h_ukR91WBVa@uzetIe| zC#}57pK-_JdiL@cdhY&>Dq2T*3a-CjC9!*%U9)tjSX4;%MvqXIJFc=>@vLF141+%v z9Sxde`r2MI=#;AXS-(*6lXdHI$`?+LTYO>9)`=Be73G#wxl81I{oX~sEYw)_&&&CT z&Mb>X>tESq7dJm>D^2}Sux>fi5##O$Ma4nE!GTqVZo8*mS#oUA!OX+*zak$M7F?Yp z6SH4kzh~js@AB<__PpgjHJ0C%maM+-7cRI3ArmC)-zg#@2XUS@{r5wj?PA)qYP_X5LMt0(s)q=wBKCfEl zr5PFQoN-dr_2QbfYePksTFLCx&7VBG<=M6=zd}9z?s}b@x?y&*H&2b{w60d|&?g(8 zyt>QtXs>Oqm$od`aG^W7$$G|1Z}R&Y$aW zzr1LU{`R8Ps-=okb+x?zr8Z4mSm=DDcU?=IN`&;a`)w9VW=H;s&G@J4HKkT0SEp^> z>IZk?qqpo>waVmbSBBG7w?eP}leaD%51X4aZ|TEY?J12nwx}+<%)2ha4l{?rw2f3o+Vy7+-#+0P0K7QGIB5jbaA z%2YHx@Of-}U0m6DYyFGtrUF({^ zUe`OGZ+sE?vPx&o?rB=5oG-2Gt=oW;^pOKxm7coB2(ML@`uc%#NI z8s}7n1)Ww#9BWtERhD|UYOBtR*ssPqKdrr0Z_aC7UN?7BT#bQfcUVTzXZx^-N3PPL z7JJOE#HwhTo!EQoi{8pN$GP9cimdHDdfaoLNcgd?eJ36^s&t=vdg_%|sJ6KXs5sxL zUzi;gb7fk8=4a)p7uu9nbiNA;d|5YrXO{7-6N_edXRe#>bDo2xg_+LPyNcd zp0De5W*TX~Ix}aZPR8+IwJHmPgaf-|R;^hRDYB?`$+XqeT!poTSL>`Q@Y^*#)VCu0 zor-R$Q}>}InpN|!xoe(zI(urtmU!RgVZp&&AyY+mDBk4%ImwlE;g_qDU%6uzUpy?f zd(||r@}Q7OagHmUg}%H@Ik!u^_~cx3<3*PaYkhfga%O747H_x6JMYRB=ka77+$!NF z*!kE^9n|49$TgessdD~K=iVW3Y|>b?%k47gDr>VDW>XfXojsO1S;>9>)Gr(w|k!5cWJrT zbItwJZ>)*R>0NWM*y{bFjb@?d`j_L2Te+|Pr?lf*-Vp{P0VW!(YkqHQ^2FTxTDeQ1CLldIvL)1Gi&$d zq^DmZcDlsJip8utwKGgdS479mPGU{Lk=I%RH7CC$)_vNfEp+|;da1%EMd>H>zxiFx zGSoIYTH{y}E#nswt26UOI5*HnZ7JI8)_RAf}CCwx?fxbKm%;+Ph75|4;p; zn$bR1a;;ZZ9gK{RHAy)+-)j1Ac{QJzM%`jL@3fX*+UH-in)OFL=v2vYou$ok!D>D; zr+O?(<+{8&Gp;0DUwhj1LmR5)E*CibE4kY9^ z|7-O}-upkpmhJ8T8E(X_{?CwQ?)pRjpU>>xXOGK&82x8pFV1n@W3*AcphY{-fLRir<<4UEH&%ZeJj~& zkrwY0Dd#7yzSx=k!`oZqO{!%4WbIF>vRhKcd!;Y#xYzB<|K!xC9fs>}PM5ws*)E#R zB<1A9U3YSyFK%Wtjd-S4H0S6pk;u!3xu5-KI9MBR^mE@fTZ8@+F>6$nbj)8^Jy?Cj z{2y0S{E-_cCmVr=GiDl{nQ5$-`E>TooikGxrC(W?&QqT>@kho@&P~EOYDaR-X8X2* zQ>sD2!OkaVCOJiY$}`rHFi1XK`qdW>4H% zDV^r0u9I6>$pn^2+fH}w^YeH9BqD3j>Zo_m zTh4L6=Hw!fa}o}AUR=z^yGvn=czcj$d|}O|@6jC}p9GcFCr^c|6jf zjq(SZW#dx<7ER-kFubs3yBRjDx5pNNL&<2{pC?q-0oY|f1Q1|(nqDZ z6Pqq}rfd#AK0TmQWSY;+i_KD&;zD+FHl@5voRM}dH|<)$ZoPzKyCn=4-d`9Ny*MN< z_4d`n(UmqlIgh$G?l`j{;b3RFo6YWIt=KO)3A^OKemFu={mj zTIlTFKC`)JjI+T*0zsh`)ipeM9MQkIHteeL)aTffvA-++NXK3AC+~l1Oj2&&n!A!e zIQO=a+11~(15>q}i`jUW3G%13IWsl0UCzw#nQ1PvaurHfNj7u%3}7*_LZI+b8>ZS@6lp#s_;X44>Ya6ZK|ky3@yy zlanjUZd*oM&rI`vy)t~6Ja5_MDXG#E(|Q((a!j#35xmrAap9yBM=o{mSroN!lGLST z=Y?h^wqMDUd3|n*W}N4*?!}@$O7mK)SGs<%{86v;axMQk+Yp_iBNu+m(e>Uq1vIQ^ zRBpCurN{%b#lk1|DHj|4>9yXpKFc6^;gmejJYy^Hek!PyO3o zW%P7ry3MPTb0c0}n{+Tr+)c9Nv|3@3h@n=@v2J6v$HjW5x8%7!DY_T##;qH6JzP8c z%%;4wDs4ZNEx%uSd{p|j+`D_zR4apyM_*Fg)zwXxc0UT3r#9oxqIuj(eUb@BF0{CQ z*5~YAcH-F=NAXokvC`J3o-R3NH(j&1aL1W#(^|#MrDsmJaI;J+&F+$S66apxeI<|o zV6*)}<%W%We)ZftzvBFgv(Fx@`K8BEH3=F7i`%i=~S_wO|`T3Yn9ieM`dl{K~Bm)r?>qIIN58tZR$SnqwG(9O_(3> z&~Hn!i|1*c+y6=qJv^~Et7nn!% z+xYE8!p36ZlQSP2Y|b*g@T{t$=k;E1XYnUD|9Mxq?lH-2Ibz@RCg9qw3%h)(GOs)R znEf)?y_Nq?)u%$cOW&sPNPtS!!ynvKU#@(eq7@*ge`Leijdi>m>sSJQ<=n_Mo9%s3 zdZFIsZ|*#PQ{JS?2nJs@{Cxky(o~Vyo;h;A%=J(1mA<&+UBW7Tt!vMGHhtcu-2Pte z`J{J|+MK+BepjZ>J$9|?$HmFET;8*kb)NKpDqgvy^>{j{^geZEebV8DhZfand$pg? zSNmeOPHpR2kuTRDu1|cu=w;$R-idYGhqMK*sWxd@O$?oRu`?;cTEdktXkA!xOr*JS zvAJ=vV%_01pUpa_&5etVDhk7Q{@N#F@XM8d$B&9B@h{U&OtO_1*JRF~Iq6+xTIBsW zpPBP`BxZdnYW*U-U}3LD=AF$(E>pt4YwFB=m2j~0S%g8tnw86XL)J)47s;E~yvB7= zpyu++vC(|%jiMxD%?xtVE(`BAidcQ&*{-rnciykta5$uBYR%F!2U`Ks8e{af5!Kk1|8_ZLr2&IFC` zzX@4wr~`_F=BO^+dqw+{ z`c=8-9qsaG)w~jFczNBfZ#rQ{cT+ETz6xr~Q+&B+x}(0zU!JZ=?H~?;M<0_Ox?lOv zp!T`O{k_@IpSlnKGfcXm%qq(DBWu38Or-F7^98rxrL3H+dNVEMSvqg7Rhdx==o;4W z$x}hKaazhmUrRmbhdV;U3$5aOZIo_koRRqSqTXub;;$lMUli(h3MPrZ=(_YbMq*a` zmAg6;Iuo}_NIITcv*}`KeNbOW#XspA-$d{4(pJ9`D`Wm~@tc_7)+6tZq@1#rUTC+z z{iogjmgs+Ktl#W^E&ZYUpFyPi$41xx3|{v2Po6!FFS=;{-TI&3e}+ky4z?wpIvTU; zkx}o5fBq{uzbe`-GM||oBN(u~`Jb0FV@gl=SEZa1W1X4Pc$ZyjV-0mFI9TR%`?rYv zvYweb@h1}sMYLaPPusI&`oTa~@uH5*v#)QRUOZK_;8vLBmOS&>Ju}lH?>zdV=&EEr zrEO_)s4kZq@0PmbfA%f&G7FpbO?btN?%S?mJrahiE-JkN)p5+-YX1gr3+c-$Ac(=^?Hwm|j99_*hUpRk?`Y6+u zR~YtGJJ{Lj-<+{k{nXA%4W~oO3KMLw6PcK&T0FB&t?lkn0-1<^u>k+5D z9rJeCh~0YXFZ5#Dog0h7e0J$1uW4O-N~CniFIf4=;*rkPR4=h5YweB&?v%c`Z`q@d zB9EpnFp~~USvu+J!ZWUmrynk{me5;T63xn&(f%vz%zUnEC=Ei=JyQz< zPEJdmdwOx^k%c=Qj|#2jc3Kgc(cbdcLe@H@@MDdr-{U@w{XaD?1TT2fs`2`@`Z`7a z=L@d3lk&G@*F8QItU9%$XJ^EjPrt-`eia(sljV_g zeXRe;N=9SBPA(0>IMG-MU6WSti1nd+^%rw#I5M5yePz~(Rq;;#ZF^ zz@|dSu%kl9Rz1=W`YW!_|JZ-$U)SJYVfs7vRcVU4o_bO1qBnP|mG$&=os1V)e4)EH?AVn!ktmj2w@b%(yoB%gRrfx9 zWG;Ep>!Qp>m&AX*?U(GPs9%n6PBL8oMzLff|5_`LsFgykR?Ygz(p^oz#UCv); zGmGn9`9v+6;(dRyz^W+a_U%r0HB5F*+Z?77zJJBp4U~;tp``~bQS#Z&FZZ7vZ!reyGh;i{z>P<3pZ)}Sf?>1Cg4cL zg`>NsY5bO6(Wf&dYHgIbQ0Na!+4u!(mws7y^Uk8HuYyz${XHIZbnCZ=U-Wv!k}mw( zX?$_j`=t{cHr-elUm3lS|HP~>dcVp}hE`3fe0AvWQ+`iDSLyXBk=el>PLpQMvHBA~ zNv=7~Pvu4Eg=H&Boz?AmzbuM-V)spZeUntkcTE`^oi(a)(+b>omcMe_`{mffzsvc% zetJ|??v`K8f4NfeVVR7nvrb&tB)_bkSH50eex^I-Y|j^w_lsxt^)EPnpg81YZTL&$ z-f!!DtCa4wR@L~%ug&4V74W6N{_AG*7n+Lw(aK2|%PsEK7tD8V_3E4{6RWP_x`_R~ zsVQ5>iTFM1drev%cdHvK)^;82_w`9?)A^DSr+D$&uK0GjT0eQI{mcGZ3%Jb}I%8Ot zF8@rp`Eb{~Gx4u1uYOsmx!n6}@VxZNR{ER~-YMBf{(P~FP5dJLDD3ajs1oB^&M$MT z&U-7>{nh3_(x;b|kbfmGe8F?3*GJT9L7=Ez$e%JG<8|@Po^# z&?YR<>n*xQZEH=ZFni_ns_yH$<3{^Bi6)K zE^Ax3$2qra##F(u&?Q9=*4K(gYP?oknX0nzw6+*Kf2*j7tMD41n#h-jRF`^g3%?Wm z(PH=JS%=GVvRH2Ztyuq(b85}&BzImRQN@L&w{4|7J^NjXm-5I2J=qwsE_aCv|B)E| z?QZH_&OvI|tFCPEn>TB5+^0ald3#xtR(Xd@g;y%&?-XBJdbmi>+V$p?su{oH?fi~f zNJ&O@Y24T7*fsTW_JjL^W#>Mf`8m^{?^O5{&X~5DZBJ~xo+h@vop9*3=dCmE{yh!Z z6e}^;Pi&ERYt_l)hyPmS2JLkX|7L8m+q?Zx{qODv8{=<;t(6j9e|1&&}?%p)%DnEa5 z;f~cJQ*KQ$>h`+GRWT`l;iJRyMH<=b>}TqVUYqb_%N5@#FV-owhE2a57j~S#OCupP z?)bt(OV9Mhe906xpS?9qGv(cB{geDMo|iXi{5zDfBv*gZ9)rIqr!_c*0L{O8CFn{c~pGk@yCJtzjRIc&GSsE^~Rd;^e;P- zKPHFQzZ8+Z@3>PVWl^_&9Jf=hfzjfshizf{qAbx`P;pI%DX@E%zoN>q|jAr@tba?Gv{Ws*mB3;C~|tOkyN6wMpbliM7q`Dudaz* zN1w;d<#s!J`TWFP+7FM4s2l68Rk@jZd1G_pm(vb)mySNtWsTqI&#C{PfyLlx#cn~> z+a`+ZSH9_Z+@7U#lxuIbU}4m(*WAlF9yRsu54^71>CBbfrJc3gd~xB-#HkmL3PxgTb^|MGg&LA5-WeHHB_lj zPRLH~)OO2<8;`6ClgTKmwU}@uIOuw0mC?kQJ@2h&NWHi^yZ6{*Tbr3iv9mAkIC*D_ z+NBHAJf6Rb4i!D8FIxZB-RNQaMUhrMjZYIFE*1Z3o%iZ!f}(jLPX zve2dEET7)-y)Mf$f1g_P%(5nIpR31?Rr;|487a#1JO48T&vusItgAKg&)Jjvri)1T ziQnEbt^3rJ3tKPlYpsgZ7cy5iKGlUbH$-Gg+k6`?6?x;jRx0 z*Yj@YPg9j%+8DC?0$NA~fjJcGr#jn!Zi3 zSG84TdGtg6Xoq;s%QdUj0w3Iodir^hlyc&hrCuDx{r{E)U(4n7dU4=Kx_{7Izm&+# zB|%Rw`j#1;b~$}@`pTIJYmLkT?i6iS+B0YMvxh--Uj44Wt{2BE7x$UpI`KWJHS0ga zjC&KkK2F)1ni(G@^2+*?(we{VqD4CTvEj~93LpNxDG^_NX^WN2iN&oF8}pt79KF5p zAdjWcrDb;}HLFIJI4u|7G5L+fUMrC=^LR3&LM94-lh#r4`g~ zCr(y-T(aSew2$cJc!iZOTvzg++x}9kQrceqs71Yspa0cP#pAbRJ)UU`uaf>y5cV{9 z$L*7SQ*UNWb=kYF{#5s0iz1Z`%U!j0n)C4f?psx7-uIv3WlQ^$#}^$yakr zB3>WrSiQFNrSQYF>}%`S%>OV)tKh=#lfRr*cE4&1nVP8AJtb;G%xgC9LzVcdN#r&NQTKBwMrIGTi z>)De$_s&PP6Zyroi;Y(n^Bg>~w5Ip)%qORf@>1hwxF{d_zOBpV{LNR(r!RW-sGikj zfAfL~$Dif|Zx7uo66VyB^F4jj{-FC$wiry$61vNMq~}UupOU`lw_~eLURV;q-*xF( z%{)nwxHWCUYCcmRx%o`*mA<%Fy4!2+*^Sal(~dV}5ILd0+mjo=6vea& zKX&CgH>vKgo1zy-ZQMSgU)oPs1^Nr0`H&pFZuifpZ=Y0N?Q@Sc7j~U$68NPqJyNaU zTg&?7&S$!1`WH^_l%BX(dS&k82jA00 zq7`RUW}mtk88~g$hiNDDPEGij-}gRTy!}p_+}xX|V!p}Pi9gFz z)I7Rq)3)itN7Q$V*vcsi{4RZ5ch_YLXzbSb;=#`6>mGfXYTvT)Q15aR{l)X<@kr?P z__J{z+Rv_a`Ow|KQl|}@)rF5JdF!;v{rz)a=+vYxq4TpZhe`(73w~4T(!Hm!YG>l^ zi+*dDR#t8P7w>C2CGeNhuUu{MS+O_nFZaKZzpAA};p_h32PH2Oj?b%mO2u?uf>ZFHnU!p-*{5~=Jb|bwc0ZblD+y5mzYcUzPWSu&Al^zO9hV{ zjTWoQe41CNyDqf#!o!cb;%i>|3j8qG7h17o^*-&LS58hkI%QMJ>FZ@t&lg>LGJU<@ zkDz6%{njixc$lyHYtUS4)hjvihYwr-tey^D(JS(VDa5=d;4KWgAoCLUf8Yt17#ByR@G@VpVF?d*V*-vB!loQ%-tpFn_qIXXD{V zaY7fRySEhe_I~eZ?&f;4$aTtkk&ikrj%?NoDcAc|qb=~|@6GVmiyP0J^H&VN(Pe(Q zE71Nyxui&_{F!&ak}Np2Zq>BBxEg zGAko{>0!b2Rk|LrA*<__nmUUwcmA^Q_vx?6;csNh~*Mldh}Jq$;oOd&z6?iO;yrba;-bFDC*i0yQ$VwuZnNmE-YP{ z`fX9SROLdS+fEma&OBZC+jqn4z~8{tJ?=+Csp`rINy>&tb-n$+SZOwXP1B7Sw?DGvKf zTccffcVFav;gh$lr2MMKu2SXht0$FS9BgLex>R^nOh{VBUtqED$(_IZc)^pDovkGrf^6=hY|6tX54==A9 z(%l>%ZT!QNIFfG9X#J~lc7xJ{fRmH8Li1W@&W!Zm)?M=I!#Y>_)$?v;yek*iacbY9 z_373bV>Xty=|vysoZED;nT^|m%%=a}>++XO* zev z2mBVxhzTqfjJvw=&LZEZd%KJ_ftIHjF@cWOo3FQeWQceRx_X34fn9lo-4r;20Tn=LoRr#`Li znHbW&I7m@6sPVU#M0JVun^SA}qb@Q}da1TNmhYH}YoMt0jI_&{TMo@jO$igbrPO47 zeP`d)(-%%o-gz&=Y{tcMjZAe%*`Aq3DZ5ilI!?~KztQDGp84#X<$)hd9xh&3JzZBv z!oc;dDv#EsU7+>1n_k_B)t;ekC-NrcEVTs6!-%b&C z^wa|<{`ncdWs%ZL7sb&0tRnje%lY9zMB_i}3aw@fY!z1ovAQ%I?kYl6$wOIasA z%zC$SlIx4qu1!{XE5mG5CS{!boGdG>lI-MCaWq;|X?2k5j|YySJ^iQl$cmX-JPXO=jo<=!nNB_;KsmTixa^4UwC60XwHdnzhCVczXl3NirWq>iq5L8L;Dw_<1CDsyyt>P9 zmmo`>=dwKynrs60GktLW!#DAG@`Xlj=u*xJHU}Ssj?( z)7RG#8dInG(7s`__k>=hkHW%{t0hf5yAQMUUakvL|1145zICIPdrR*%Px;P9-bq@! z%)>n9KMJXzq;>pMghHp(j`wv-b`JNv}S#QHVLuUC; zUURj=Q>9lhSfb5J#c;j4lao{Etc6|KN~<#Fvp(3*T^c83uQ|(o_LAO3##+Ek8;~r0(;B)0= zFa9$yFHV`I;I%g3B9r)|WPuY`E=;L++;4XBUz>~K#CkQu=SMf2B&YQ47V179r++-< zhv79}-bn^MEU#9sdbgUn{LkATSu2FrT)Pry_}~ubB;S%UtKx@6EHCbsC}lD`^Tc;$ zb?%jTaZ~A|udthyzQrQV{YRB%{*m}Jsh;^m*ZHmw^VvgQ{1J^+$Xd6_-1CEz^5>(5 zZdw~BSZ&<6%h^d-SpDQQr4uIZU#eEC7-n3Q>+s+Ho0-k$V|H<`@_-L zXjx5xEW?d~-X@NP6I>;nJ|?ZX`qT8eTxO-#t4*Hvo&P*P%sN}(X~!#IqWa?IEJu-? z_?eSp;FhF_tzmz{ADnM{Y2v)7;-F}0onffkl6I$tJ<*@* zg0xwEzGP%|a@`YfIMyLPE57w={|BvuY-XCS@E`_0YK} z(!~3(_^9|~q16ZL)l3vw1RwmFy<>t}^DWoE%*&3vwD0|~^ueC%Eys9PCS{wHoOrQE zR$^19s4%C9r}9CT%1taCi$BI+ve#UfadVe{_o9!pPTWoZXjtKClGPC!QqrVxW2R`M z{&BnVKYp`6Hge^EROj<bS+7ll&7LmS*3C|zROPQYUfMO za~cX0uJ;7i$p&73e#mplB>%}0Gwu8jWhyIwSbwhV?y6bVm_<0^1-fdlRC}E3zasgoKR?UR-ACIDMr@a zdD+W#ck?DMc(wF&z;uE+V44{Cxe6-EawSC@qBP~3m$&s@pG zi$b2tb^6RaiLIf}nL`d1@8GU5{_C~4zVS{*|FONC6Ab4)#LH7i%U5MS`_H)w$-?R%?i~|#`dpHt60ms5B~P{4pHu#s$6oxgYQ3rF zhh&ZjQHdir;&^7|O>|Lz%6wAkkN$__&7q}}JXihUDNWkB;mBhC7x%x~d07ez99h}; zPt|R|bW&YF>Z8v=DIK>3x>O&pXMJ=Wd{&?T(I5T~FSNRbyFOU4dSP#Hx*V^7mfF~6@x2=@mvm0@{UaN3Od!Ki zaR-k~Xq?x&-inhZvwYP*1g$|i4Wq(^FI0Gz#EeZ zE){13UW#~xWHqurHi@hHSTalf(H{AST_;WA`#3+&7WNj%Kc#i-%tl2;;Sd!o#jYn; zdAkqJQa(EQ!O2DYn?KF+ROvoCeYJvejvtmBW^OB$%l}T=%Dpxy8lvN(t?*CaaG2D|U zI8UR@N43)DP#Vlt`j#W+BaUjD@(GyTbpJ-;t@t?5^PD7G-h;lkAuOE{WNNp0MvBgE6$x{THH^VRgDKi=(9 z$mlxWyr%QwgA9>Fw^aB4@c;0@GI5&o4CRz<&dVoQFl^ePXS49(M3sMRo_78RgKBil zJoa38^`YX+Wny<&Th~2t|xK+2lWqhNJ(6jRC=^XSa?y;(Tr0^ zdFv!rZ;jX({?xSDML=Ku>5U2&r!)1R_1Tp;6S`-n8mQSF$tj!lz^8}FD)rvcJbxu2 z|CY%St3Jl%&EyH0WiID8dy#n4hme~plRWJ>x(-}qiqk$pJ>zn=Pe~MOSEX&+_sa#D*hi# zT^}4SbaP2Q*vWBGzO_!`quYN5p~as|;-r>Lezc$M#Rsi7C2@Wob>63Z1FwBa;cz@P zlau%OV~71L6;`gYfr&SNSlLTTFWC0oOJo1C`l&w+dp&iY^29E5UM#$G#Wm?wOFFwx zvFWobu|8E=a`A_2#D1QNbt3MvP(*1P>q@543#)3;dQL@51d@QXtnymO*KY}q4fcKX4>(8 z^38J(xhnkOdY6&=oX~&AT?{(~|9XGA{wQa5NAfZjmQJ1K+y5D6oNtg2|K;kU^Q%>4 zlU!&>XdKr>)gG4v>%CV@+?LWI8Z8>%($$ky<6Eh3mi}@7@%^f9RtujW{Kr!{qeG$p zq)A3rNBngw|0emyg$wz12nar`y#Jp;vRfzmjefe5OR!=V{{`cVT+=uXTsg5vl7*8e zqme^t{mJW2q6Pk6B0gSk<23)VCF6VekIxU*KiiYgr5#kSGs#SerPbZ@-^y!caqW{@ zUTaLOJSr)Y_+ZNmWx>$@44;BxBH~k@bO?z(V*jS1Y|*06rlnXXA@nirj~M4F=Mxk5 zD1SQt#rlutPv!W@C3ON;>A%9OT<*CxaR{w0>3@+j|ImvQH;ts1GMM~4-fXzk>B4`8 zKX;ZcR^`5=bELme!eqh|!-X6{`mB%kTn#j>6Vv8-c12OK(&5#9E-{J<1>UpWU@tn9*~UL9)lxJ)Ook&UY`CRF*XonEuU>cSil^pic)*zHz$J z=$E?4Nsy_;>7$Qd|Dhax%@6er`xl1XO+U&1!OAz~{`31!I~BSd`wzUhDnH5PKZEe6 zkXeS4pS-##l6QYVJ7A`KBbNbaqaD zYFfwJbKpo6kNx`k*{bR%wtD;A@>mjN(`j0!?I9}A>iX!!Ufw(Yr)r+eGO|~e7G7-X z^hd{O&8$!7TdrQbh*8E(!J1DDDZSzw*<0r=qZ%pKx zB|rJBti%P?mfDu^{|r{myImF+)wOLB(smU#6Er$;MD;;PT%gOuAXg8Gdpi9m_C(37 zXPNv%V%2{JzCAZyvIJWE@&9mE?aRbnTIwfNemDwxs;!7K{*nI4zvtqGvlljKdD`(_ zyxOgz(A^YQ|MOXVl9RxSDT{tj>AP^xr8TBSF*NYUtx5iqRv%~$e`tEWS@utO%a8OA z=jZ&ew^Z9HtJa$s?`Y5Jsge_Jlw+kO$#Yb#Cuh3rqd&rt>uiK3*0G&jGdc3JnUO|( zJF|<=D#L!BzR5z<|0e%ym6)|yRCQCXaY68j&EKM?L<+Q=6ispY@&1(S<5jAm5A7Q} zD^@N1X>a*4XOioWXPh4o+?>eTlvHONd)0J4Z{Pzr7Xhb_rSo|&d4A|xwd$Z;{@K2j zldR4+FKFZ`Er@v8`ZNCPxn8luF`t@LH>Pg(ozTS*%el!vP-|@-$CaHzA|Wna9g{qF z%v9Pb+GWonK9g&5Y{mYw_7i7vBuShU7XC0PQ)RMSs=F^wGS}l5z6&|!GHr!}ID?zx z^p9TD*Zs%2==hv}tl_a04lj#k+jLab4_3HJ9H0E~$W}h@NoIb57XLO@f{$wp6mjS~ z{NxV*UY#AAZl%edOu9GW;?nY zO?G{>qRlsD;sh-fLxq${N;SLJ7;#U2*zieFmLpb-Q~eN2>nw+s?GOGWcpt1d-X~_w zeez;mX}E{dG})u8ShNgR{gF6%dC~`usny+Ct_e*X3Qa7Xg3b$B1R^%(c?v({(hyW~ z=vVghC~}`9Gx160iJ$Ce6gI2oZ!(#al5^Vo$zSKmnqMZ_Z*7Z~`*x;9k;7@Rz+Hj; zdLBxh7q*B`{#dCpDbr+9w)vWioYyk`ENge1&vM|%C71V}OC}lJ zBs1@brQ%6Bw>=Y{WS-=6+cQ!5tlpesY9ocvt<#?Q`e-qNZwZycR7!L`b7 zimY&^@>kc0$66)sI+t~(b-p`1ORhzcBQ$M^kkH*wg?`yOA(ubXyTd5tXo z#S%A7A+m4%kN?-pb-MVIi)J~VZd5xu(cJZ7vCz}*IrAPFr@Z`X%hK%} zBJQN(C#u&ZBlzHz&VyGA`7}!dUM-YkJz|#8$j32JLFGZKhl_xF8;i%*2WKzx{&PF2 zewt;Hr)kN2wv#H8Jl7q4bWEn@*e6ewN%k@in^JsTek+|R5%XWX;aE6op}=+ z*NX9MtjL(<(Xvmoj<0j#33ajZjt6HR7_<~c&y?7(PhzOahk_nzT(Et_r#YUUE^au+p;mrz!s+bW)A_*~veo7p*o{ zWLa>1%GDpbXCKUX&?s(jO^Mx!tJ7^eccIrURl$Tv?#yXTix1ehd~p78yz)?&#O1an zM-C(#N$%~>IL5tE=9tqn&Y3C8Y6Oq){X8<&w|7$7v&TOeW^2AU`tLYX?exn%+Q4vAyO1RE!ro!-S8=4s906qO+1<&xwn zDk>~e$GKDGQu4_T=g*To#cI+IPK^9G$x|iou&AK9+LKA1DnI^kPn_tQ|IC+VQE#!t zwKSu7emp&|B76Fnd1Y4UD&KW9`qUg@`emycM|Jz|m5)|z-BXeoC3$heu{5bOnG@Ga zO0>8ymQ*T<=TvsPkgar#`?&M3m^ViA_G#F6dQq17AB)Hj>%)(_z!7D4iRaK5>Gr4%zj&de@09XH^Dp~1)inQ8fqZ(6GFoKW$({!7b7HThBqg&5XKS`r2Sje5@QITv*+oR4U9yg|3>=jUHS$6k?pzEY#Cl)Tc zv2e{a=Y6cHVyXg)%vX-hy5%@ERq(CsiWl6O%~obCpB)!*NC`MHi9{uB%GjT-bNWAn z@^P*Qp-~nIo-;y@>7<PiInJPE$70N4nIl%3XE~ylGFF+1;s?ne@eD;p~rTPIAT< z%fgF2Ts1n`#N}pKWNKBrN;~JOe9p_?q^LAkqVE{ffs+DSsmhur$3Hr_T^D09Olv#2 zeBy}-+vA-df6+V9uU>2|v06OxQt4dxzzcngY-HITnZQGB779*^V!A&Tbqcs@Y*7?g z(dBTxDOA3DQP%`#;ay5?&3{`aHqBqqznVK~hViXjj<80DtDHFrXZA@yUf8N>E-v8l zGQ-&9t@qJ_FSeN(***GB!9IHwXZtd~Gq7#G6QOpoaQ10oHEEai8%U$`Xup{$f zZ~mbZSG%UObo8Y>>|?3)>f#9~m?_u6>bR`0$SS|9L3P)YsBK;$Y%%NkNrGz)@7GVm@mMnZO?$MG+q5SKOiEf!EWOx$B|EOk)j7UYK(QkFFJQABt_zvCtE!!qGb80mYa7!sB&sJJ*b_Ykn6}7$*1pZbh7aJzQ(zVQ?1iAJTf$_J&cBxST@ROCLb;q>?;dfzo@njD z`|dx(iN(Us8&V~0RMcX6KG?j!;a5B>I^3f%Wl75Iy+#sp%M5#q6Qe9@YI*t6^RmU- zx0;{HTyl@IQ0mdEMqSVMHQc!~{~fPBwbV#$`pxMVCv16grm#n1;+q%QeLh;rfu%fC z6}uBML|(KSTP4Rc>q$2j86_p0qs5J?b}pNC^tQEJIj}v`K2T<>G1)TYAdF&roaOa1ZF!qoyp`_tfpqt#vF8i z0&{eX??SzqY&SR-daQ{^KCCCu_&K2FdBW|<6FgGxWENzz8wktn+2s`-mzUN$;ooJ; zZ+*)g)3-VQXApeoF~dVeGja~civ{bf1#fhGQZ|SVd{a~0@LOuD>V;$uEw2dhkRHLTP);v;TQIyc#Kldb#V4*m11CyQ^o^Ue9nF>%Ec2AXoI zjN-z7&N#=!1+zZoe5h4$z$qQj7A4;%Ub9^=-tSl`0m&{X9stuM+;(Hel5NlC~K{eLAUbs~CG*RBxu4^9;{JhA9UXcGhKXSIkK|Di)w{aDql& zh2$(3jug8SHY>mB1)6uC^nbzA?0M3&NL{;T-h)MDla$x_yMJL>^S7C6%FF&q?8&ZEzKOBj-^lK)d?H2r({Cl8 zH8$H16~CGIFUh>f=I-OV=M09|4RjCOOqr#)eMM}q*rS-eX0=z1ew>oKeN^Fst*1kt zVct!1mG4T`ma~4_zm%I~ZF4xeoY_rUjOoi0i{JbYxAZbjJ;HF%>^NUnU}M6HsX9@8 zhd!!E_#M5_^5{srg3x>|-Zy1>YPY4I#BbIw7L&LhaLZus*Cno4|@*I5gO6Z7~ z!M@g~R=$bFx`FMi{TsVo9JIH zCqBPcweQICe@@!-ckCBawtuQ}Wy^-cKG9pZ%;C9ScxHaYk~Qv6PstdTU9>5DdZsr@ zjQ!1C!B6V#3w4!*l%_8Fy4ic7(}~zkp*Hp>-pMXxz3}x?cVFvXZ{LLJkHgf~O$+8) zKkYY__i~nyA@w!lS!xf^&~8|B>XUQ|4!i zElIlh&eQC|Ka-Z_LaM5!+l=n~H1oJ&sFt(Is{F+nHZ##3C4Xn8_U@Ez{cRPgchh^HG{?&!xY8G7Al(-s?C%@Y3t_ZMfbr<6Ya-GtU}=Y9(8x%# zjMYQHg_ominJ2fHHxjecfG7xdIKsqwinb^48I znumB?eyjLQa!ZI+{bEzaK7C=Hu-8YeLoQd7_qkXQJ{9-W5 zo_^u(I^}W7nkn1=uG#(fkjtb_vA@m9(vO@!Z}2GAZ%WmyYgMiORp5QTVN3V^8;{$w z-UR<=Fqmm&Ei&;pt8}4?+TG7xLi!J$$TMyF&#*Fi#&nL!$>N)SNfokRShA+q#9<2e zly48Rjvo-)Jbk0@xk((GY*<1QW@m&f{4^^dey5pAzu7nAQWI|R9RK~zO5sd5zX^Jo z%r^a{$aL9Iw4j^w(~&hv7Q)Fhcvc@`J^jjXPm4$XMy3A@9LJA0e@lJQpVM4WCB9|) z(dL_4-}GIgl78Q43On{@rqe}f$9=({3}Z6BHZ4A}W4F|kO%ms%UmTP){-a`9{HG~p zQoQm`M*NcVKP4OWi$X_&#bvn{PEd(<_T%{A(77Z(I9;N%MDiksPMFL~1>Hp9 z1M_ud{WmVQ&zM(t(Y1aj9HC1e%vGXo}KuzM@>n2Bn zByW}I=*;um$WQ&J+FD`d&nFkE&Pmf*uYcQo|7Hf) z#V^HF+z-F`!k>B2%xAM)lbX;6(+7=0GJ?xad2)!cv@8r}JmdCAxJ*h{eW7{2iqlti zCB;dik@`waQx_#EMOm^PY>1j*^z8Ty)f;&?CfgUB^xYH^V|6KDfzOe$glxe`|IO3i zOBF4gXLu|6mKm3ViRzl!*Fx*!l_*KY$v78UgA+_xV12@&qw7dzZzRYwDI@eoxhL$+5aTj zKCxWo9#c)v+s@g%iJeKDDtEuwZa#DIjiXBKjj-gm+?&2!UOmI%&U}qtUPB#gPL0_z zZ5GYDg`4@58+)}Mndr;Rst}WUQut-!Bza|bMgP=K9x`iU&V1**v03>}qJg)g{$JJ| zb*-=Mbq&w_cASJlrpku>|HFI3HcXcbXya<@4F?pl4PtU!~B8kb0-O<9kO__3j zZn*z5aPB@vw)u{B3@xhMQ_S?9g>0Un`8Ki0ER5yMq?R>rY6L@cwPuN|&=rY{o)?wzD@pPIhctVeATdORdN8dn*zthNbPbTLxR)L+)- zI9bQhb#lkTg{8I`u^bXjjc$h9vyoqdH;*$s7F5d6tmDj5${}*|y2JDxZIFVSAwNM&-777ds|NmAkNXczbW~_L;Nbnt)Xp zo2|BxXOEy|gwKsl{~264cd~U%*>~LhyDRUda{=Mv7q%I+e?NL&FtJs4LU_aER$gr` zolR1%lbshlzENK|aRL+jHxKKH#*L>VVjBJ)_;kLzb=mPHk7M&vEH}SuQvFwW$ouN# z1KTV%tjX=2>!dd63r~$u%c9#eRns>t(EK+=(Wppbc3t}>KAZiUO>QpA@rkx$d$WIq z!^uOtE&nZRoxJy1PF10Jd5`^*#XM&*k_bdCHqNkg7$`#pK2%XT@!Zt%d@oI*-Op9c;ddmE|#gR8=93E zT1^5gthy`boQg7Vy8o){va;Uk{w$wq`b`?`%+Brx-IFd_%uwms5unM<(!GQ4Hp>L7 z4k?8vMz#}qY!s$RebHIV;&5g5*^CKdLG3J)y;mF*JhE2!Y<0(SfnNE7=w-_km1H<8 z1TB;gDsJg0ay&P&<3h(8p5*X_N2kVgv-a2uPc1q5s_0GQzGIQ9HWwG3bdq)A^q8RZ zaN4vDjUNpQCaL+nRLdyXd}YxW55pGqXqHWaDe*!t#dkJ3Zf^4q*`(~Wq|e2@<&3If zLJdEMX^&6l#J?NV9FD!yGpN2$pOupRP~zgudL?7!pV9_$E=`=Z%rf^KMS0gxl5pNV zQ`R|TcI4&FcCl~#bl-n7pDM31|B0+8$N4J{T6)i)*c2rA@cB%UYX^1pYC zWs7+DEzb_sTfZjCtXy_^rnuUf$s1Rk=xx}|Xc{ahWUFMvQ=qd_x6kpdN7k|$A1A`x*-`8ER>D!q%(;0%rdO2Mlr7eZ zM!_z+7k99&oV-El4BPd@H3HlAxm;HYPw}|Y8Kp3d`{07LCzqMzs?^L~c361w(%DKv zbq-zz>3kho(^+;My`iGHt|c^bhVZpH+RZBaLVnqD#u1qpRmO$u@95|m+!FbBvf+&B%h{gnUpc1V z=+AO-x6n39sMt8oW69}_4@Dc*A5}HXR4PAcaC(!+xr;4z`YvK>9EuyC^73RVnzj|C zXz`rMo4EJDt$B^#^*Du3PF$wpS}{fSY3ozAxTqwzmK_2rlSHfpCz-A@-kG?@Ufkv0 zY*wotKh@~foX?AL zqe`nMi=a~PL{60gwJf%jk}h{ffjhH1u71(GD6mztMC;vSj*k5S7v;1g+FlgTI32CI zC8gn=`VBwBhzZRhcbkMwq#@Y!V6X}QFsWrqB8NT~Z?lj0qbD=uT^D&B zJ(<4aA7@W#$uDm`S%FOx3lrWfRZPkBcrN>1dE$acyE)}~-aK(+k#p*sbjjpnM#u)u ziPaK*ua~Jlen%KG3y6 zYN}C&+CpOIoj;T+n7LTQY>uq(eU=atdSuGZz_vE?V5WI5-ng3iO)9dHFx+o2b0Np> z0v*pPPHoS1K0Kc4H+DDO{3#?a6H~!qB^0sYZg!J6>zcN-{Y?c=f9q`)dA2CSIYlu` z-*JbfQ%V*0&M7bNvawBTl)GZ%U+&Mzq{pnIie!^Dn630KCxlM2V7k!B z<=W!q5~F4)!;;DA$h=@z(xGHYZCg%`h(!-(MyVHME>xdd;`m+WC5w~ag`2UbZd`lg zvP&q~-EZj|CXSp_$}ukdoH7q*D{O0Gl(<+VbwYaUG~*r{Pv;+Zy9=aTH+~m97|ki zlQ4VbYxy;qCm@r>vG&W7Ym{|!gyRd zR`>HUO6i%_^j>H_aa|>W&6>xp^MusJH0MeGI!-J+$kge=lB~OkiCtooh`=GIhfWHVM zYQwCiLkbo#J*Gkre3^|WE);n6rkXc*>%Eg3z9tpv$+YcWmL#Wo<1$acg`%TfD)Tz@ z)+jHMJ9BWQSj(nl&!+kojig@v&GKyhOk1^YP77Vt6j^icg72jQyB01JuLHI%=c05k zy)f{R@mRZH{hP=g8*&Ak&82iXh5Q6Im~8tglqS7rq1H~leSi48TE2AmHLksM;b5U^ zlh00`M&TfDrzEFXu^9oUB+hv}3yjTUx8^)7`AKZ*6m`Wf6?#)9ggo^0x|o=C$jfD7 z*n_DvZdo+C^a`>aTl8p_lTJh$(~``-w`-zQmw3!wDYUncch6!%c20`doe4P zT;*r_q2M)1kVzs%RAq?YIr7HGgN2{yyQ0L%`S@$`7^!&%L2uE+4%P!ED;l! zW?;l$DmdYj&LV}3ZeyWFjzuiSAMzF^OuSIo(Jr)O>zT=yTz)G(xgX@(zTu8n+!@!2 zSqCZ-mrdz#nt=cfI-S0ecUa6|pO9*pp1`$9S4G>u*|oITSTtwl&AO4vY1sV!cRKG( zF*`qt?Q(~nrmpk3*K*=RB+HIZnUj)^)HEGAV!G8oF!QdC@4|<73?F>;Tb*ipVycQK zPsG%Bd##PEPTZKeV`B8QL)~)%*&EKjJ#*zEbIXRvt5so1D-~DnRcGpOxcXq{ZmXQ2 zBl`;fa9>dUBhRA8GWF>3`Kv`wGKroIZ0P!S;h|-xfy0RpeC9{8qxJZt^7AK7aeB%9 zM5k3nhwCASLdFh{%hO7fZhEwMZO&)f?w-0y{oo6=9}3BN?9-Eu2#N7>Y%+PryL(xC z-YefE&xNbIW^OsK?qNf8farx!8S;tq+}J}GzT~<+MXz05J;T4p@-OEydDU~)XVW~U z2Aa-PvwHc&|IkFyW9`L;Yoe3|S-9OBu1mf0S2{KAe6vUuCufBYZ-N|difqZ^EYhSsM4MMYR*L0CicP$*>B92U9lCIKhf8&V_xf-6{{y^3Ry+$ zYvfc@*C<`uX*jXaT4#2IUfWF@;WKTr&5K?{x3!w~KNKtQ-WWJdZBKzpqU;m_&g>n+ zOt*wDsj7hoE?XklrQZz;_ zQc)n{>b+xH&#!V!SbX5i3<;HH){80;L0X=2A1yA-m6l05<`yCT$>hD!g=zmhR9c>^ z-Qhg6Q)ywV%ZrKASwHkJSDCkbQ1Y5|G|Z>EU6QrjQ{&6TnVE_l5r3JOwr*HeG@(jd z^gw1KSDERhj7Alg6Tv?ZY{?d#b>_{6=_+2nwt&1~CuYwe4q zBVj557Z*!q@NVC@PHuYAe+Gw6F{f9L!c>ah87g-^<1LeJvlHuexH3^O`o>PNxt=*} zyQB5W3{9O*wKwVneCA1g^fMxPy5Z{PC0VQs#Th%-xt`@Iiq+K+Q1b}(FrQ_xQQ+yM zDU&5r9$&G(z?RvYC8gsWy^L2PLt^@jGpugMr`ad5wCftO{(O~}ezMK|yp_Nt&qDEg zMu%9I^gZcm%vZCGxNG1dcHFZ`nn^bERacIi%91%+6@8+|r+s-49xZia%Tn!531to) zrO65c*V|gnMV6cri4j%tD75QXVakyu*0!`e!&sWNcd60}Cq0%PkBQ6+7v5CLIBNiy5a{0%F2$HmSOBG%glmJTOUL zm#s&_N##VJo1gSjq2(Fpwi$F7>ZSH@nM*0o5l($F@zRkU=SIzq}Y^Y}4vqSmD(%ptdyv`NB-R8Yn$KPVRXsT{fky1=gpv_UW-{Z~EsMD7wuJefSu?sSiu=Eko zG0b|}!JW{5!RyXRv5ienEE}VFI=2{1uM)rK^=Qw`55~cVPMBW1ak1!#=Usyj3J)vT zJiCn!tlCt&C|0zoaHgKifsdagW6dm9W~dxV@(XyQvg7Is?-TfTEi+%u_r zydmtNs*quB!rXK6%8oad++d%$%Jrz=p$02^={AmA3Z9eYKFe}U^QaXRn4-75TGFtW zYl-59R;|N+EFZR9I%KL=E4XvECtvU0P2LBWNW_}zXn6{xESbOYWI;w_$iGExK`u;J zISN)v%J%M5J2oXjST6b2oF^wP^-k(ZxKQ`{)KEvZt@-8FhftIxF+;mLbXt0a7U zJEOVECI0(mWtC5ft_u^z*wUTy7hU}pcPM2~toW6tl!|bbGm;ugjYkf1*)5T;UY)r8 zjd|sgOZAloNvF588nvEScD+|hQet|`ktO9qK1&SRKby`>jXT?&&~~=-%?#N^8_qsR zS9)r=BeOPjlJuNO!Z&6VL2qYhv2U+MeC{q|IY%=Y7FNA^jRVS$7UMjPwEPCR?$ueOMmv`qir#(q-$9-5ma|#76o!lpSXJ!uP zPEHYvnXOY&lAPp@O_dU~X^nDgYUx?v^hh z?-zTz+}JXMBS$82y*b56&Us0+A! zY27d@$$v{rTEuqE`mF~#8P^?tv1RSTn_FdO%xV;uIv>(0tM8;F7i=WR+j?N?qlMi| z)=paXoq5`mZxS~ytFtYcqs&s*d8YRiXS5jWPbO~8@27;kbvC?fc@aCAx%SF&!zG!M zmmiq6;7I7QL;6ZtPi({je4j4TJ2Fw@s;HZBl1JQA?xG^)*>f6p2+JK`BobyiRfMBQ zXyNXSYK&`sxb8c;#7kz0U7=3O7Sku58w+|)ocO_Bc}Kiw_wJ}T8Fk0JWq?f;A+vL26lrDt|7lF-rE+!sdd>1~ORCa8NMRm^|nQVTq2fS!wEbp#PT-$EkyCj8_|Oqs>DccSUxU03VsIG(b;s8+tvGy9=rM5MIZw=MNE zGEQ%Z^O*iYNo2zY3H__n7bZ-&^rrD!j$Wp~>ZrOEmyU39^QW}4wRRNT6y?-S2xPR} z{#)$Ar7Fn{)xjdaS1LyNcuih(OURJNGHLnA_uChXdX)#R7Lw$0Hcptj@Gqy(7mkRI zslty9rh3Y>%}X%uoWx?{nis4y#d)TQ+l8QrvViI!spl#$q9&S2En!6w8+BPI5P=#9U9VI-H+9(PskpHQkmI;r%TAeBM3Vx4bHJ z)~w2TloV^2!vqkQ4Bd@b#W-=qo-Xp#$ z&9`>#Z!$bsB{_8?hlh)R%fgu*356*a(xz^z%M)`h+%dN^I>Sge$XijnqeEk%$Bq?p z%Winio2%KB)OSpFVdK#S#WPuU7KwFQA5k)JS-xP!@{&BZ4ab>9Z4<+tozxO2?7e+3+qoKm7_FK9ub&=}{zMR5INh!H9VzHeuypILX zY&2bW?6$$AQ{im~x>UK`CMItd6EvTwzDR{{Vo_fFhKsQda)Bj|F9g<3O+6|w(^dSf z-63IR=Y?viof%w*WADFkp6N1C;IjJ?*%!`Ap^KgBuDjKpnQ|2sdw9kh)QnwEU|+6rJ8FwQ1wmC-Gn1mus9% zU3|kUQa=C2t&CFlm2M)p>~?ocXZ0S_i9B%7EXR!h?~JF*6BFHca^$R*kC>UU$6;Z| z#3O$>zJBSb?{SxRJX|ZI`bE$5ON5tfx}%W!W1DonTL1+G)`S>)`AvKCN%h3r%?3#c$KI&S$~M$A3wWHEy)ac} zgKwD9X$4)L8>(uvZ5`^jnI|hM-z@)GCB~_!_asSSL1l_(qSu8Ff*BskH(95oE`5F} zCfTV+i2cUA8Et+{dfk(p!=%djf@bO5WPWJpUer^1VetW<8`CE)XfsJ+OB4#zS!26F zt*N=_Aj1Y(&Y7D-H$1;$%i6v6Tm7@+TUl;=i*|azcfF%!6Ss5ig#QeSWH>rr^|owI zGu-Xv7x89x;#yZ>>)U&e8VPweK2a~8AiVX+&y@QryM@0cr^L1;WG#KCV!kPM<`Yjz zJzv2{&JedWwFd`2Gf$r=6PR+?r8ptPvvY|GxAO!z6 zc20>!K7pw}E{Pr7C~?2MP^YF%@r0&|!4AD>rJF*5yR9avJgJ#+b(h5kV<&kx&QY=tWQdwCltL}KIZ%W*u6+X@`EG_(1lN2YZI+gxf^vvn( zCc#a{MaeHLlMFqUl*({_h}l`^{V9IZ(~EVUNyj{ECf~H3FsI{5yYdsEV;N3|gvhLw6%nwu#%5WUwlVvGTN+^?T z-*K2bAZOxJPL&ytSaKFPmZ|$}Oyo)A<$Q7Q)S@#+T2}8xgd&!S?hFiRSu&-@$&V#U zKv_(gDWBaVvs_!i^%rfqg4s>c0@+KdcRI}sZIx`*&3obQ+aVzEWrfx0(}z#&IMyE3OMb8LaK7%?F9NWsoH4iuxTuf$u zVeaz9h^1wn`NZu;8U{1vl2kZ5yYx7PEjWcHr7U?L7TkR0%hJF+i}{S10jmUGPwdjJ zW#_A6Hfj03{LP$>rW3n$TB6npJPBEnWs+;nB=abBT7;k>>qh2;-ln>aqK;2}Pf9fB zG%0@Un{(yfkt^4Z9qNk^Oycgc_nW&{=m~hO(Mp1o5 z8uP5qFRD%{vzxqHU+nx8Kl#Z|={I%F*^>e?Pijw+nXur{F%56WEeYutPAz`DBt7uh z#J5EzDk_guI7AtXWsld-jXM@A;o#l)VqseMKD*#8Q<@cubG*VXnq9Oz7SpX`xRg=1 z%aP^4;pr`AC#MA|Oj1vYNcmK>VvciTYvQDgu)UlcFW+c8t8(OqWx4yMUZ zwkyAJQgHNo_{BRQcBlTvRW}w)JHExUf94Xkv_}tFTG#eZRx#mt(;Ve2=_K0qWm1|@ z{QN-6JuLSbKM22wwL3VmIH^L&)3~MWc&Gk+-Q8UIlhl<9|8@5~o7&Eq`r@DCQoXAx zoL@aQ8b7`<>2L4siHa#L9tCQ#$1Vzc>YWwee)N&Rjv8SN-sA>bq3S-*yBrhBGiGMh z?Ul37Yz+w=#a?hu)NHzk9!5c*-o`vpXeR*Ws##LPozBPkyC= z$6@|kA!cVf45a-p8%$RVQkm&`c4L;Wz?{imuGwD~eYIopn6Qwq!;WL3f{LOiPnA{2 z4m%YqfhoxfkhWCzmJ@Aq`6|gYE(ZS`e&c+(1s-A}lVViVJ4%a7svhs*`GvV6VqHSZ+s}Y`} zWfJGDahhjd7yFskQtnAt4+{m(-|X8~!|SD^YSP%Tm1kFib2W!Y@@2E>7rGn`IdX~? zsYJF1PoASZsoKtM@{ON-M@(if$`(IVD(hmQc#!c(Y_@ZgipPalRvLK<37w59>raY= zCKV-Bs5ZHr6q=N>Dp)DbGi9G=P474Vly#nOGMp#=7IHE;`J$HJ>2uQ`zNiphjdL0v z-W;77s)~l2I?Gg^G#%Ex`PTVP?D@jwN`4;a+}3D2oRt1E1int# zdtc}Hmo*cPuJgR`yRp<(P;^>bPutx72GzIR1#y`NnRX?nS@hh{%{m?{y(RhLg_3J> z8$WU{bjz8Y6rCik1huNS+f=26#hG?QQFy^ zGJS0nXZN)K3=7qSCb6t!wiQ{C_97{NA#+VfLv@qbhYeP&mYc1_T~21H8RcX>4cpv|sFY-R{%0))-q};-f#}AA8Ej@92 zAM^6<@ucrk2Q}mNMnmh9#b2ou^n@oGT03Z_H8kon#g_ePOK9 zbnYjSZV`5>9vylqI?8V{d?%fWW372o;hFvN5=5OY2%v02tn$65|eUp23rr3??{X62{ zu=IcK&G~fyjgg-`lb-d1m;)*MHk#WznsLk6Ub1<8eqT?2!JC-3lf)`nX1UA}?+m?D zk)Q1MXj(*XfVa!#7S)V?CnVpC?ZOpa{Si?Qnv+X)X1C-r-IV*b#xvz)@$TeV z*IfEpoISWE2yAh363{wVA^UdwzLR$zF4l-p5^8+e(aWQ@u%hb6jVVhyPv1Nd_8@k1 zYY@8|%f^K#i}>&KOo*A@sIp-G!p=%L`(&=m`ppuP4+fk}we7xew`Ws=Upr4=DgPw5 zb5=69rR`Z(cfHwZR8yQjn~PiQipxLl>u_PCSFD?TpY!waihf^3_n zd=KP1q~G1G-ej_)>)8}<)k|O6oRtrV9J%sLMM(Ezm$Adag%{i#7j!+j(Ci$!V9SXu zGj5ABoh{t>g>%71M)RbgUmw~f>{x~7^-AbSS+|$*J74&+UYxlk<(Qj~$E$ir=?$9} zMmVes?;J z)1#z3mOGp)IwoYEf1q`J%bPzO6?fAeEe_n44iw&IRo>|9c*tDgz`^f5_c|rdPBe?y z#>sW!rBJ!gJWtlEH~FG>YOQs4PV!7zIORe>i^73RN;NOq)h6A2aEd96Q%j9EDY{6Z zsn;bTO2}=SlF79qN9jF=GiJ~@5!5|d1cZPBkiSR(krc-3ivO%HpeO|)&fJ7P5EY^ml?d}q5z?)}X-%HoW2 z9g1lkui78}Oqk9xQ=c_qho(22A8c595Ayx&Yt4NwP~5Uj_r@EyPL>ms6rUt&O#HdX!=qQM z!!~s0!%x}Uoz8R%GLRnMJtKJsQDKa>p z(YfO$*Xg7$Qo0LcHtA08lh~zLrG8N?AoCP&w7jszY2Qlsutizov3!eHZM{?~%kId> zKILFm49k&;j8&S75!?&DOsLUFYin!vxX<;;v*Xu^8;{OKW^5EJ@m@XQts=KbOlhZJ z61(ErW?}n_wqMNkSeRER7Fq0hSfHY!@pVb7rlNyW=3bsldw64(b2vos?7f_2?6UEp zyy}7f3<^ht&TK5vX>HX0)%5woC9RHvsS}pmR9@uyz%Nj!J)=20?=rqkQa``XL1+I_(cix*!PFZrT);II3oHW{~BvWo%*Tsj^RXm4rE2Me0NMe{3Lz;#=eC&c1<<0XWiyon^E9?};yzEUDpd zeAAy|@|6F=my0i|n{B$}jch$+U@vu-( zEl<9Zl4qNmrQ$dDq~B5!wf%+`@*6dUKbS@?|6=8Ca{A|j`ER?pTbeKaSs3`AA-QQu zV%fe6H*d9Ox+{KBZvB#$YrpWCyHT*U^QkiV%4Nq6O^X#cvU|dbo6E}f9c@wa?CgF% zz2y(v<_(QU+x{x$cJ3C8$rPA8v6ky_vy3foy2`qMD&Z|2r^O~(@tsJTm?da^T=?Ma z#fjXkD-2zknmJ;enUfAoKB5@1uFra|v&O{sG8g^BK|S}x_MUX%@LkM$;G-$$>80FU ziW#$8R;DxG*?1#DRmI9(waw?*G#~wrNwvHJrgH9E)^jYnvvk4}EA~~st>?Ot>@SPQK@)DQntyyKkH`73GKOtX`BkKWAb4=QA56uss8XwP{^p*uwh zHLWj?Y-MWY3UP|_V2B&bNfBlI~`!`Bv9<17^aE80^lhael9!AB~#*VFpTLlC+P24ZP&Hv!- z8IP5iqi?y)f2?r)g>-#NzS}|0lAm(Bxi_nM7EUW)XcsX{|4TQ^v-o7+i5IGcM6wtE zaZ%mBrDVy}gU=Kqin_aM?yG*fJFVzZH&4dJ3)OuOT2AD81ov!h6zj&erLLRzWJ;%s4mtvULcm+^KljdqW_b$*Ysi)kxdM zLR2yTqO^p}wnJaevifX&VzS@lx0_es?<*%V95;Dslg1zYxoEN3LlhUrQ6~Syz6?Yi^2<7aE;?;&&r*Ve?Mq3a%H* zE5(j;C9mdpYCB{2*0bn%w(3p0lON8z+4cP7-7Rly9eMA>Hm7$pTwR_DsN1q%@M*eN zr0eey!@0mmVVxlNDiyor8ogayQQs17Ii4(>DAs&Y$yBS3MRbkVrVg#625slOI99G`lo^rk9b6=!ojnBuf; zzCxJ%lFck8>zhs~ZeF3wl^OePDwo9!ml+Ky%9b_Lcg&LCah8o&=!@4m_P&SFGo)S4 zxJ-Fy)Nyic-{}C8FA7VX!}*U+IC85|vT%-|Ek}g7NEDl|i{X2Z`;G<^u21BAdP~o( zMs1pP=OXPZk&aqBg^u~kZB_BC$Z%ZK%e|)RK-YtdTVsw&OmaK6=ime0Yz^DH${FHT z8%pFh7AZw>Jvr4_wo`J;M%&4%!jkHToxf@2T$T$;{-!C$RJ2j!YLt$Ov-2U| z39+)go~q>!{xeMXm7AX)>nP*$`(&`%q5ej>#h0q;R+jPRp8t7LO6K0NtSfh({5yWn zxh^8bKl+Xq`$+H;ab3B_xgk1wz(Q5JxZzccx}isVahI@PQAsqc@nA~ zozd4xx}rVfqV{wHugEQZQ9>(fcQehl8e3t3NeUYVq`@m=0Y!-j=x1RU8|l%9)v ztucE2mA7Wyk>=R8mh_DlbHmsJ{Sp@nKRNv&rM)Rz@%WB~`*mz5`)oO>GI5jV!qm=1 z>|HJm*Lagmf)*U`J+P~{LaAfQSy#c|cHSIrH&*R_QRV;PMNY|=MZW11S=N7&Xa1x= ze@Etj27~JhF7Lnadq3L(Q_FAeTmKyi+v62s{GWm2>fAndr-*W%?YGR_Y9_D!+xdLu ztE$c);?7r`G}?O(ZMzmbQGS-#=1eBeHF^o2c>=RlyAovN}JGwi3(RI-!tt`7PhrJ_O}1V#rhi>>=qZRI3GE;1gccX zZ$F^DEn=F|WvPPqPyBmWHT4}n?^wpMU&y#wS}A0$iic3s@k2rvx;OS`Nxi!{J6C}9 za+!|P>4}>6o@c}y%5CXwJt^abXUwV3-G;hIGc_Wly6tarXH>9JL*V}|9K6ZbCu`p@trS7noD&4nv27nHLq zLnoTfTKMmi^X>=6)t3y_b_-m(FCFwO>#+5Mtl2$wtn&lDimMmAnRuDY^G0mAvbxf{ zYR+_>cS#Es1>`iGgKAwBEx#l!+2r=dW9~5zA=zGjmWT_6%so9B3#J`Bqx>&o(!YmO z=ASHNKX59X_2B%?e;*w4a1lM=+{2OMxv;ly#&gYDDMwqYTD}WUJ3lACQ&G99cYKqS z$)Y~@jf@G8LrzvWzc9b#9&nc3^TP29wUH{kOpjC#Cp-3ZX#Z3GtK!#b&(c~XWV+6$ zTYEF7a6l{jLLKHSwE{EerQZC_uK$T&qB;%CD$NA7UlhxZ#- z_uMo)q1&CjOFE!^;_lfV|5832n3$0*E;d7ReqXBOWC_htXZ30#W7{aH0B6h$qCc1#qk$OcPrXE zyUb<)xW-q- zQf-CP>rJnMeRx=pUE7(osC846Vh{gvRc`;rQeJ82zH@9|A>OI8FGyPM=ylwZoxVsZ zShr?jo^FxFEQwCxrR~8+yyufnW~v3hIjJf&Yg0~t_U`0E`K})#XY=SuDwIF%J2bt_ z-AYPxVXX(-#JiI{1t+J@=2!fFm(R^E?uqYefyc=LJ7&wI&X8NYA?Iec(!5JIm1Ndi z*zq@6DSq&7Gn`_U#PY|ehU-Pfi?-7i`VV|GBj&CROzP%VVfov8Qowz~slQ9Qe>eSS zC^P!cFkw?n`;8=&d}Yk;F9G=Mix5`DQDM3JvuuN zB}+A~O7Umirn*hVt?RM3t!tL!65oW${{qsdrbr8IP&qApW9K1;LuobKWy(Is%MP@8 z9rj4_{Lk=2=~s>tPmhp|jfA$!2BFIy%gz*-i@mAi3v*LBy5!zOgPZk@iZR}*!hyM%{{xd9PT(ZqdVCod*L;8E#cdmIb zQCGYB+U&%mt@4I`;klm-3$Cnw;p@&^E#_)@SoT1~luXW6iJyuci9AI`S_y^y-y$b; zSGX$*Hi%4V?A~;tqT{g2uZhC$FC`;9CLi}$bE5oPQEju~E|=N*Qpx!(Gq$Y>GX3Q| zxtv#S4wtFNF7ruVa+6$c^e&4u_*VbwT6vrm!~EMRaiR8 z_IAs4DNhzXJ;`u$$4S-y4AUJgX6m~uSBco0hqMTZzg@EP^ob=7stLVkFLbJT&U@22 zXZGS*UIk|+)UNHma{I~INh*e$XOx^_b=h?K!;RQ4{SkL$jg^=laIq&`a`nt>pYM=x zN4>Glnd9ez6HSjaIHL`X?1NNSJb$=S?&CUs#T}P^wVvhweelGV%Qx$~;+cQ^V$J%` zaADqm29xNH+S#7UA6?6ieBFFg)BX-q%)Gw2k|uju&%7uSz5LBrSmg}6Uib%J%@?yz zS_`cU-B{Q=WwMUn5fiVs`V*I{_1>*FNuE^0@k#ID{gYBVGS7L09G)SS#CKrc{yheH zJ`ZJ?TdaaT6n;$edz9yymZ2b0rrpT*^g>f(ZclLQhRUS}87`=Dd8|v5V|%UH>$*%* zd0NNK3A1gF?d_k{FYxH#1^?!jcZ=pLZZ!37_-eMHrA1 zaFttt&z-cCME@;QQ#6>Rrro;Z?8K|Y;>dbrueg9!z_+s(3oLmY8eduVX{o+#(R?GJ zoE*n-$YuUU-`RVQdLD9`;L$95_h#~gn2Rdsym>_c3#fiZWBwN2Tsp ztwJGPy%RU9J9aKPv|CqwuVnX{51r;Nv$wflle{^nL$JuY-&j~j#>wxM`vgB(n^Gh5 zS8==*mkxPZGYi==m4q2}vvx}KD1A<8G@RU!CLwZgu_9BEl^9QtQ>T*ZNx`#RTaF4( z3^1PHyZ?+(ZzG%Qo1YKnsNJ17Td`!RUTf~HoUmoS!K#W@;$<=^5f3~R%!ED#_$sQM zdbrj@2vk0#J}tR%~t$Ipt82N*`-Kt zdzB&Qfo&p;Dr+~t*{QRW(XLZu&BV1Eg?HXK61wkU{RXuglP7(XELUCA`CD93XE!VF z@qiby&T-62eFC`$Za#57&+H^}*~z5&!o7DlZ=Al`GclrI!WF0JiDvN&O(uM4ayW9v zG_ik%hyOJ1N!2QovRTZO4w+wUs$a<2E7@k2ClWrr zm8bH?ct*`BH zOj33}57j`|cX`IoxZ zbMY#RXT`5N*BxtDTc2zc_atbyPGg1ZJJY$5GRG3{-tF|5EV6XfN$XDO$uBbn6TcZL zE?D&3eu2m7ZyoiA%qQRcT&&I!RCM6HesXHvjp>}DYhayx1BayQaP(!52R2N{{|=Z-`UAF}wVQ>J%M;@|m6f4KoTai^y?iD*38d zRemzwwPccK(GxqqWnQT>_8d6W-hm3N1%HYsvOqm+A)Yhe{5O>XASJ6kU5bZ_!?&1LUW2{|OK zaGzOuhKo|BM6l$n!}B6CXB}BHyLJIQD{OPts6MWp$>I?e ztfVWapwo89d#1<9w%bV(Mbh57-+G_?Jp6=zccq}n7Nzv*O}3xZpFFW}($4l2%8M-6wC98Sk9i@>Atod7z1(=aT7) z7lmg}aWS5lr1!#;i}h0S+o=jc>spS!>u&WZdFGL`u{7(D(9w8HoiDy^Cl`6HJw54R z_YAdnse;U`nJ!&<5;H54{O%{|Jxy2YbbldyAxd?jM`FecuLz+fHyi@O({$D`zj*y5 zjC)JMjJ>;5s<(9ql!%|za{-;h{J|qRiQ8EydE?B&kmHZs6ucfCGUCv(J;TzL;1?C} z@>D_ULxmSXEUxw@POR-xLMZ|cv(yux6pMI7aJVM;&R?i?kk!6tQYwdrQs(KRP3EhQ zUd((kah+!G)}$Y^pDLP1HJ;r5rgp3Pi93tVPZXEmrlMo7sPpgO!oLDHO*hFeRQ_^s zYxK?Z5Ff6XXNDY0gMJqIb#6G5S%1XKG4YhagoaO_ELEHY-~HwCkymowVKhIL>x7tt zM!|WHJ*z(^itc}UMlyy!S;FI&62lyxpc5Omwz0W|J}6JJu@LHfxg`8@pGy^Il!r-* zwr+3k#3Nnrm$9A@wrn|_R60?z<-*)4{Y8QgnbH#%wK=zB^@x|4iEpuUI{HHMxNaR2 zOJ7^@BCZo&+DkoSBsL1=T`;}jDAum*_Evea&b=eAuD2(@iKyH&%lTxH>c0yMop!vP zV#iU#-O-uwD&^hDjrQ`93pi&+8he;p+~j7hJEp5O#i*6}c2|v(uSz^iNPWW2`L1XF zwN3R9x5#$fxg)#v?hz@0?}{v))yhvQ6uWmhyBjiwLzoT!{iq4dNk-r{YEbEKCqb4*5 zC~`_n5%_X-Mskp)&(x({xi&GL1>F;xY&n$YJI#9(rp#o+87Op&hx@e{&zVolIFx!y z(*2SJrG&m7`D=JqWY3X>J2%Z+GKssyWnn^5M@;aOi7g%cJe3~Rp*)ROi_|)$y927z z)?ZOP^h@u}rMD@nldC0MC%A~SRqhEu}pa) zOPJfeNiIz#+M6CLPj^k7`6mBFj#^i?oWs%^#TmN)8FD3ye=oa#&+O^G6Ztx+lQ((F z@n`Bd*K#hqEFmE!6x$KJ$HUsd(R;!47KQ%|ig)6i#BW$`n3$^Jsi<(+`9Xb>!-0s& z&Ca_ritF4C=fxiJPI;i3^|w;^z|>9UlT&(gJNIwzO7iQk7bZUObosWgWvQjkwECp3Q#aZbJL10^c)V7gHgPS>jEB?NHwGPO zSmxGNaBT7^fhM*#g~)iP1>a__5#BMmF2kddQ%!BQxYC6KZ}J{TEQ>c#6VPASTK;q0 z3AS0;6E*x;GnOo3;&AElbL-roRHYbtarxw}oCh)uQlGUPInua^HAVe`>^{a@O>%J; zZnVU@==mhfRD04}l%`O)E=u2VuEa4jwXE~*Y8PK*rk`^aIm=h_O|eYFTtM%PhAKxx znomk`i~0>mwKpm^-M+08ns$hHwpCk_%i+vPy%qu=bZ#VV`nf|=pS$hGGLyfZsdM)5 zc{(?|=IqOK@QRRYNme<}p%~u!$#IL$*~2$a1>N*mGAZZDi&Hwk6;IS16WB57iTS(ARKxpEuHNtLQL#no3x|%PrIBUX z#Bb_n_%gM>3NuT_o5<|TvVA$r=3dTE9e=vdc`Scn%H5=; z@_wQB6T^IUiDy%{II;+2Rw+!<6WDI48+A#ill6yFm6(hDxj?~0mze6E>rY&D=G}T* zM{(maC!Z6`+zJ$x-UJ6l9AsYCdT!E_gtDB8B_ABlOw~_v3id6Dc-s-LE!1*`<=}-w z8;fK3EF2QtWIic+GqTz-cIEKA(eBzD)${b_#9uc)wXHbr9+j35yU;hFh0{s!t#izb z=NS?8I*9=*m6aNIUz{PF`c5apce7ygS#D;ffOjruZz;d(m~v|2%_-Xa3pF=YDBjQ) z5%%=>ySY>4f}5Mx`eKHsCXLYr`dUXglcE}D2m7_z-;=f~j(;ar=aj^&xMGFdxq~lX zHQf5ou;I9`?nyz@b6y+Y96I7@?7PI%XYR?$ok|+H8&zk!E}uB}P4qe5OULeRe4le5 zZsCNu3BRK5@;;reyfY+qLU#89uXva4mqpvEH%lAj>7BH1*I_GezEF74uGPmg$KhS3 zav{eo-GfIq{Squ>S+e>a|5J&*fe9xBr479ecBGz3?RF5{zj*l(!QVMG5@9Bt8ZIU- zEn8far85mQX665uYb_Qs(VXH_pw#U#;d18(--fsM1e8Q_?0l9ktoPVua(vTMA+EGH zC;KAWToe8tDN_F4srND?OCU<%WWQmja);*58HNHso=h%}dMx&=E9l{U=H+~io5a=H z6C>hQ+*I-rVw`kv;kAFKIh-}#*9v+r`yq2D?8b?iW|IWw3a50nF6byY($W$ker!>A z?2)cM&RD_rhVb-nwyREr%lnjwy;AsoL5C+<;%>`@eJ&@3x9M`q+PWQ6a_-(yt0~;M z$lp_);Yqve1ed7!8z%gca9He-B>k6V?NODyz{Fl2r=*Ey-=>J`KS@7X)00p$L&0Rp zMMW*uma8`oH|!|bCUho*b&9crpJ9Q?!N?ZF^Nb#H`|6Ia`QVv$ zbWu+GA&VEn1~)nrKbWO1{vouz{ek~K<~8yMIk(jaI5wP2xS8=Z>g~o@$sYHEZ9>lM z2bMQo*2}yzhueY zY&GRhu?>EDu3LORSe_Hp-}H$!Rb@iYDY3KGi_8;rx?E<8R0uljx%GQ(TzGMs$c&cw zMbo%drkuRtu~BPEzxG9wL+afDw&F)_d3dEx6y(b7%6Z~&TWMu+zH_sxaa8w*6MLVo z$vn`uPKWnUnR=qI0!P{mzg>%trEJtGOgUNqrniW$kIX3>`%JI=rRpn?E zSjd*s!@JMNh;#3Bv5po2MeYaLTf3VZvUF#(a0)u_=ru7BKCy3u*Rx}1*q?4}nWRvn z=RPsWL_(c6P9;W;d9{4LN3}VoFxXc$H zVI?=-jv0c9H%{m;N%E|XzsqKoaJERb+jg-=_7<2uKaf-)_~t=xm-ybW zMBnX+W=%y;TzBsliFJPZMRCbx)mvxk1PUHA2c3wYmeOsY_^5N1iqOu?oY{sip4?ZF z<2qXu^r3Z{wDcSYmslINBi$>E+-P7ezw^7%c{TyTFudn!{{L6m8WVwofNq?eX48Cg#R)Gw)emU8`!jJ?rv ziQ}YLXNZ=U%emGfyC}qPSt&p}aD;kUv~37sPcNy(R@Keqi&G={h-M(t((T4<4N5 zV5xh^b!%p$cr;`p<@bFKR=vQ)MN?WimzwwYj zx6qN$%_)a6QZtWld|gzeW9qT*qCVdauHYh*m0@>6kFAT?X?2YCA4}4#wW2G9FL{b< zS?NrQY4d!dDtmilX#I`SG~3ReWm6aL*kPm*d#R{Zx$2PgQ{KQHLGk|#D|>DpT*c(P z)2mSFuynq;#N0KGGlRvR9@JUs8E|&`jtd(^TOLK8Smb`N?!}93v!w-O*Z7p}?iTy- z&h6;I%9WE9%wHN7CA3c7nX1`2Ey^^#S>dvm)86iiJwlPwXS`8~JL>&l&fZ{V)tw)# zThxvnZ_0}F*05dSc=gUiVUAPIEhoH;ZcDwFxYZKlePFHZ#ufp$o;5xD@?z5dbqg$9 z`j=bh#g??A+;&S&*l0X?DJZjbZonI<>3`f;t2W)?iu9ZADe^=t$TCqt(EG@wnA>+1 zk43$^DcY$i?rlEVHuCki40GdU#&_dC6Vv+;_RmAE-RZ6IHQsCh3Mrbsl#pm z84}iH7Jle7%B^bqHr@aD!eu@wb9!%WzLOF@?OJO<&4P?xft8XxskaX&t!SKYE|9`G zS&MVSu^36&wnsvTwF22L>^N)`wqa8DId?UC=kU2J6xNuD&FC!dWR?|y-mrvQb$LjA7LQb zbw;?Eo6b26k&e`LQja52_POh-9%Vjv@n8Gxr?X}2&)#>v93k4BsI>Tr^KzxR=Zlm! zJ#=)K%GRTq6BT~onxx5O#j?ZFg%@_Xu+1vCsH(!56r?(tGo}2_O^&6iD&MB@yuPTW z9H>ztceN|fd!xb(p_`kYPHxd;>*?vtOS(3cTX&TQS_ZN;t6JR|EW zm)E0s?cN+d-=%Mb8F{9OPM)~gwIqD-;^1D;;tC#kyjSn(^$DJgFW#`s5@{{xj_7U&nGX`8l5|*Q?)h zjb8gFdQQJAGxf3TS)eoFtJd)ZUn(?x9j}*f~dcO+B~A zKN<5iTaJA)e44Ux;T_ek9UBg7+NW6NL`KyUz?CMwf=G)Dj85=9CtXtOcB967WvWh2;Q+3_4CeE{yBX?YGbNYNx-Q{U(`^HI} z8)h}k?ejP(@J8Q6=Be`@gKNx=G^&N%N$PA8 zNmJ8Ev60wRAEn@78xZ;4>)(XAn|0WyR2CGj`p=-$tT;{YBxlaLiT5tNSQsn#$%3cH z(^$>Bt@BBFdZOBzsYy!GNkZvr%5j2441Uc`X^|g(DknU?n5x9Wb*Mm&?~9I6l;J}; zSpkdB7ml=SWu4Gy*Q&9M-^7UDJ1oUo)8O8Xb>1%`a__(KeY&1SxO)?KXHqN&|H2RR z*^|CM4Dx7C%Zj~lO6fy}fTQHgy|Uc$ii}J@Qcp&dt2q63k(OR`w6?3R@ko*KL?=__ zTba{ds3pvBGEY!!+t;}~FiU@9c#+bTgQ{K&SvqcpUw95m!pwVz zMa85fh1JVkCnx!xY&s#{*?Oa0LpYK9_p}3ByI$yWH$|L%-yET$(Xlv0h%M7nJk@xb zs<)%1!1J5MeT9Fw8AW+yY$?%lS30VC;+RFFgie3Im$JR^rY7ENxZ25KiJZ)?#?I|?#8+}kEcv7pdrG;2 zYqCGX@eLOqzwzz;eso^gORg_B4jppebt7fV$wN;T79F_|Zr#|gbX?_n%E3*KCh{Ft zHx}~UCFgVZP3MgG8=n#i=R0*K^N!XCq(#f=&o&-4#mOg}Yq zjY=fnhVNmQjH9`q+iyzOt?qUbE8KeFgv!Dc6^(_PT{)y=Bn8@U+Oq`TRNk?v`((r$ zrwi>}iVu5MPD(x$Y@jQ++)-nv)V!P@5)-6){n|QyPTt*;9TV4<6(*At%^$tyCdXFLB6 zR#uyplEL5f=$Jwiw`*8N_9WdDsr%B3%P%B!)wcvWe~HUqyv@65d$rC?USW<|NfS;- z9@zadAX?hHtb6;yNed3Ioxf1{q}>(+k%ih$E|br1-1Vp`Zo$?%j>K=#hxcC8So+DW zDRYr)*P~}@r^+lvoj9~V?ZoXPVh^$>HVF$U%z9$#`^vfZm?Qh&iJ$Jq zCt1&MdURH8hnGf&(CtIghkhpgJJ`2xVMc(2>F$iug9W~38zwwd+3gY>?R4Y&K_$n2 z$qk3ThOT_FPt`K@mr#jC|Ba06=e^v0m$!CzY*2486FfL$=g|XuB)`hJDA^~p&S1UZ zBx$eb{)#70re-tC*7GeBxKA`+)|xoA^FPB%nYT-KPF}A)Uums5AN#58Vw2Yj8rkTi zPG@aCJ;7NkOw+gHgv-=^#f0h|%k(w&s!ld2>p6NRh1cNpY3uz-N-KPvHoo!s&(N`N z$C<-74ZjMV_@)-|Ly%`}i$W8dXnCpL35TUO!txSCO%$y*9MRj!x@Sh0c$$t`gv3ud zH^ZD67pM72Np0RTZO#S9TtAa+4aeRTOT}0vU5#u}PG*NMDjCNXr1pF4?LWq`BQhdZ ztl;>ad7PWp`#aU-ggMQbJVQ)`k4J1r$*CO^iv`r&R8KQm^*-QEd{9{`C??C#o%+Fi z%LOA9<{!HH3;ytjCC}b)?RsNi_pLWoZgV(qeaU;|(bLV=Gvz1eiaddO9e@5e+S`g- z=LDsTyByzrTc~7ba^$2VYqgbSCVz`;O^mwn;I&zYlhmnX4(EOq@#OE^S{Ih=BcHM z$t}X^(2kWlF4~4Ey7M;L@I1|^KJB~VtKy~~QzO}%zD1-7IbOHW`zo!h_S%Jiqw=L$ zvp2o5uc`PV)Lyh@YU!p!r*{a(av7&@bJAtm#22w}T|(K-m=i6t&R+;9c)ileOvP~X z8<{I9c`Sz;UBxE1DdZ}=UC62;tQXSBXL~VK-fb1rF}e3{8J(R5Qhpl3&T{ja>mF)u zk(o93mh(NmFlp&24`(LoC``D>!rgRnzq5wp^2`U#l8P)R?L=PaO?GQsQ&9PQHWeG=W(c2?!w;|^<3_^+EbejtX5+`gV=ylE#kG+*uPfcQq8J83{jNl40IqdTL?co+oT*<$P}#Wi`ksiD%2URFCBL8aFKkY=Ej9W_t%Kl zH9H;o*8bMU$c00XiHAq@SX7JGbHxMQmo_>yIW6x}syh~wBrs=bA)oh?@D@#zpjEr3 zbZ!=%$YR0&=%8@oUcucGW`0L5t8n_vw+N6DnQUQr#b@^Pll4!y<}Apbp7hA|@6m-h zH50kZzB#+RpRU?x$Kx*5I9I~^CBMgM#hYu^#Y~zN%GLd~-+xkoIE(L#MmJ`I1FBn> zC2{uKrs>7MR0_Yb-StgoqVB{*HWQO%mT6t4l@BwV=lteX4E%Q>Qg)xu1&7pANg9(E z9Z%M8=uEWkoh9^7*Yn9Fm$R}0A6Iu?zOd+$)xuVfgNBn{Y?vT5E9_pb^UaP`YB3vg z)`)R0;r!2_+01mBIZ(|h<3uOxLGdD`>E=?QGZoW3F7gJ>Qq=r&!Ov&2S+w5M9+onz zOJ19#y5)2QBbM6fyn|WhqdYtqj@zr-bZ}=-*j(8w$bmy+h*+VVQo^)q;s^u?ooBPN~ zyVPWtT*wwh9oMjfbJeyTYv_{}zpZ$Xweg&r-&!F*Z)Ju@8y>Dw(P@06Q}mx9qfPzA z0Ux>QOCl2vWNb2xjCyn2Rw-I8^YMQMj;5>U&dju&DYRk9vhBGX2P@(~?3r}-L$PSl z#Yvp;o0T7^vv33#aw-ev2!uoiDH;cD%#eGb+&V+%K_i!k*OKgw*B+?uQGLiEp1M4> z%ixn0OWseNBS&w!rf4%H6&WlPU_N#`$dP^jOP$BtJa){^m?_@uqvROuk@Ci@ujlz< z*_LeSllynI=!Lum=U~cc@G%eNDlP=~et;<{axQo}jmczZ;TJM+0 ziOtW@{((;EsctFOnEGtFst z>;6t!vi41rq=dpFHOH05GjBM{w$=2r@J4if;9uMBlFy-J;G8TZd9lc$>$H0!U%(6g z2EAMZHNjhIwvQ@&idw|}GbCU5vvG}JRnUY^o(&OQ3yzsu$sGEYzWcY>kz&pW7qJef zdj%chw=Y;;^4j?KlYmf^F5`C2gpfANlRM2r%oM%uMCvpZ@oe?!t$eV9r?X{O^pmN( zWmuDAkHm3$R54+Z#5J?ir8@qY&9h)l~i`J-|f zml^-*GqQG=xEXDB7F9hNC;md&)8;|$?vxc%k_78o<~nh5W$EgzvDAOWx&MurjwqLK zbW(}8R78s3kwp*UI8G$pR?clV@}8!ybHZ~Xm*zC?W|8=WCn-__D?hX;d=q}Zqkc=U z+U4Ad`;*lapKr=f*>}*_Jie zhhJ0g?bpUXSyTAx+zWz2Kd2ZNo5*um@*Qn@DD2vyDCYf~-B9;ISkxv0fQbC6B_i9*#?$Q`UJ@AMTQ~ovx=+!sJ@4bh)ao>j~kqV_dZ5Kf@Wtt#j{hvMO5hQqHr= zW4gkdR9&$}d3MEe9xrWQG~Ya_s@pgxJ!XPGV+Tr1qm*D9y}?O^;>if+;>V&FB0#>OW(#Kat8M zQKXt^+}cuDv1C>~qaj!DjhWU$5ff&qO!AbL5;JF-#_?0aG16tN>TcPx?)xqeiVWBG zOuQ87qJ4~G`V94?l}F_`4AedMN^KP1$YLZdrF1B$CvWY+ZQQ&w<6S0a_#GFTDYh$; zGtr%8ne-N4QO|^#wi8v7H*9I~oU-A-p6iWqo_fj!OoyZA?AA`?Rc%?*5zRMaLyY9i znFqxdtW;8Hy^9w>J z{bxqe#)}NLbtW#A6gd0IbDj0xu2aRr#?ES13ss&>R=lm0(N)x6nOT_h=g`&k$etne)pt{i&3YqQMN$9lo}6J;Fv*RmM7x!XUM_wkuZonmdAnvr*= zb~)^5S5dE$dZPEn*h5$D#-f8W;>=nmOKh{95OiUU4{!IGwky5aDsL3_CIxhVXO2}9 zEaP!^-Z4qd+pJMBozZj_$BD&?4(`00RGUjDd0yb?td3XO!MCZ%)=A2k<0n(XbInD^cHB1?ymLU)P7 z#PsfI#%?NpFRF{ef5;>jC;CL>PH%kRET3F+QTb8#$;|BnwiDic@Xg)5abxn8Np(** zA1ryWby|kIfKi;J;3=hp$)}ULZnJ(|aHjFIisPb8uGv|UhgGW7wNqEWGwp0`xE`=U zxkjwXD6!jrnT`MA#EG|0{}41j zYV`a`N}q>dhqtoSg!y5Q3atcnSsx`jRL>d*`N$La|$(-28pUTaMTE zMn+X^%jpTHxNqvI+}N~*Cuv=anTc-NA%<9k!d(tmuCXWurd(|Evn%*wI#E(7LgJJF zcQZ$#5XTH*F_CpgeG@w*ZKsL$H>jUCJJxBW=;ocTRIhMlQKX#4a>h<>DQ6))y~TY- z2jvX8qs5I>@;dC#)ZbD5&tS;@^Xv}Z^5kaO1O3XJ>kD80ZJYniTgOjznvruOw^*6w z7dzMB342)s+>WhfxoVWF=PK9H>F%=bOwk+VbKM3;{~1nB5}$ULQ?8@Hxhus<@Z!e6 z3vXWC37Nj?jY8w4V-HlBnR;TJ6j~f63aB_t6noM7aLR<==e{^EZ? z-}kpY?2NA$MHWqRm?m}R%wL|#Z=R(HGRX$Z1ia5vWq$Lu%-%NblggGgs^QBTj~%R% znB`{8aINdGpxV7o2bpPUkGr{=!emcHT=2+^be&q{a&%L>@SNVGc|O?=#_!S#XK{<^ z7g{ANv|Zy+=TPm{R#NHN5uK6F$(dx-%X9ik$11-oQ{9fayu2HuzFQz|(Szs-AzqWe zJI%3dvyq&U+@siVKS`uSN8_9Eg)gZ$x7qS^yPI!1T(|Mel5o8q!^Beu)|GXh-DG;` zp^1R+qm=GHo{76fHoaYZlXd;)-p%%vtQSHoa*CeLee*1($xE+QB;|B^wwh9l8F$b{ zL5+qOfxAy;u3_$&7_5}i+Z&OrnA>+sS$E^ArW4y-It9I3xtYABgoHYjBR<5~9M8k0E%T16tveziBqtM@?pD_%diTP*g_B>}KbiSKN?XXXJ*Q(*S^Opo z=Sdr$Dm`4g#$t(`!^9$~lhZd=Iyj`9zOa1hhfLGh)2o)GoLAvk6i|~x-C9^T`Y^@rIcboYkcx#f0CuF+Mn< ztJG7#ZtHjGG-rhiM@7qQmlsEVaGexgB=?82uWsSuU)-60B%b_h{j#ZWVUF_de@B*z zmCIe2vU1XaiJmV^XSlQO*9TsQ9y zU4Isx(2EO~`?O3;+5jteV}a&mHJ#0Y-N@p75YspJ$g zDPYoE(sy%L@|da2 z^(Z7Gk4^3ICcA8w*#%K^lp<`OpJZCSc#8VPNj54)3lFPI@^8G!_rm1j=}8$k-aK5G zwqwnlB#Y?QXLoxbj4vht)SHJ?|;hzT4rN?m%s%g|af&8bql+E%5< zwB09+_tm4Wou7^|0%;Cu0

    $d^_lVkA$Z@KRF7JhKCljE2@D@axFgXhVe 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

    Z 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 literal 0 HcmV?d00001 diff --git a/docs/reference_configurator_support.md b/docs/reference_configurator_support.md index d0824c7705..4f2ddfffe8 100644 --- a/docs/reference_configurator_support.md +++ b/docs/reference_configurator_support.md @@ -189,15 +189,25 @@ Currently, the Configurator does not support key rotation or non-rectangular key For ISO Enter keys, QMK custom is to display it as a rectangular key, 1.25u wide and 2u high, aligned so its right edge is aligned with the right edge of the alphanumeric key block. -![](https://i.imgur.com/JKngtTw.png) +![](/JKngtTw.png) *A 60% keyboard in standard ISO layout, as rendered by QMK Configurator.* #### Vertically-offset keys For vertically-offset keys, place them in KLE as if they were not offset, then edit the Y-values as needed in the converted JSON file -![](https://i.imgur.com/fmDvDzR.png) +![](/fmDvDzR.png) *An 1800-layout keyboard as rendered in Keyboard Layout Editor, without the vertical offset applied to the arrow keys.* -![](https://i.imgur.com/8beYMBR.png) -*A Unix diff file, showing the changes needed to vertically-offset the arrow keys in our keyboard's JSON file.* +```diff +-{"label": "\u2191", "x", 14.25, "y": 5}, ++{"label": "\u2191", "x", 14.25, "y": 5.25}, +... +-{"label": "\u2190", "x", 13.25, "y": 6}, +-{"label": "\u2193", "x", 14.25, "y": 6}, +-{"label": "\u2192", "x", 15.25, "y": 6}, ++{"label": "\u2190", "x", 13.25, "y": 6.25}, ++{"label": "\u2193", "x", 14.25, "y": 6.25}, ++{"label": "\u2192", "x", 15.25, "y": 6.25}, +``` +*A diff showing the changes needed to vertically-offset the arrow keys in our keyboard's JSON file.* From a1096e1dec7abae4c3cb957c992b7ac47877fe83 Mon Sep 17 00:00:00 2001 From: Andrew C <47721334+polarbearhoodie@users.noreply.github.com> Date: Mon, 3 Nov 2025 23:06:56 -0800 Subject: [PATCH 89/99] Deprecate LAYOUT() macro in favor of JSON matrix definitions * Indicate .h LAYOUT() deprecation in understanding_qmk.md Initial documentation uses .json to define matrix pin definitions, rather than having users #define the LAYOUT() macro in .h - This change brings this docs inline with the [porting_guidelines](https://docs.qmk.fm/porting_your_keyboard_to_qmk), QMK MSYS will also throw an error if this is attempted. * Update understanding_qmk.md enclosed '<' using backtick * style guideline, now builds correctly prior version indicates directory, new indicates config. still the same idea. --- docs/understanding_qmk.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/understanding_qmk.md b/docs/understanding_qmk.md index ad5afdc56a..a47617c418 100644 --- a/docs/understanding_qmk.md +++ b/docs/understanding_qmk.md @@ -51,7 +51,7 @@ Matrix Scanning runs many times per second. The exact rate varies but typically Once we know the state of every switch on our keyboard we have to map that to a keycode. In QMK this is done by making use of C macros to allow us to separate the definition of the physical layout from the definition of keycodes. -At the keyboard level we define a C macro (typically named `LAYOUT()`) which maps our keyboard's matrix to physical keys. Sometimes the matrix does not have a switch in every location, and we can use this macro to pre-populate those with KC_NO, making the keymap definition easier to work with. Here's an example `LAYOUT()` macro for a numpad: +At the keyboard level, QMK will generate a macro (typically named `LAYOUT()`) from our configuration file `info.json`, which then maps our keyboard's matrix to physical keys. Sometimes the matrix does not have a switch in every location, and QMK will use this macro to pre-populate those with KC_NO, making the keymap definition easier to work with. Here's an example `LAYOUT()` macro for a numpad: ```c #define LAYOUT( \ @@ -71,7 +71,7 @@ At the keyboard level we define a C macro (typically named `LAYOUT()`) which map Notice how the second block of our `LAYOUT()` macro matches the Matrix Scanning array above? This macro is what will map the matrix scanning array to keycodes. However, if you look at a 17 key numpad you'll notice that it has 3 places where the matrix could have a switch but doesn't, due to larger keys. We have populated those spaces with `KC_NO` so that our keymap definition doesn't have to. -You can also use this macro to handle unusual matrix layouts, for example the [Alice](https://github.com/qmk/qmk_firmware/blob/325da02e57fe7374e77b82cb00360ba45167e25c/keyboards/sneakbox/aliceclone/aliceclone.h#L24). Explaining that is outside the scope of this document. +This macro can handle unusual matrix layouts, for example the [Alice](https://github.com/qmk/qmk_firmware/blob/325da02e57fe7374e77b82cb00360ba45167e25c/keyboards/sneakbox/aliceclone/aliceclone.h#L24). Explaining that is outside the scope of this document. ##### Keycode Assignment From aa5a6d38de72e9aa2547302c64769f0536de1de6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 23:05:36 +0000 Subject: [PATCH 90/99] Bump JamesIves/github-pages-deploy-action from 4.7.3 to 4.7.4 (#25771) Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.7.3 to 4.7.4. - [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases) - [Commits](https://github.com/jamesives/github-pages-deploy-action/compare/v4.7.3...v4.7.4) --- updated-dependencies: - dependency-name: JamesIves/github-pages-deploy-action dependency-version: 4.7.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 275e2b2483..fe5d6027e2 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -56,7 +56,7 @@ jobs: - name: Deploy if: ${{ github.event_name == 'push' && github.repository == 'qmk/qmk_firmware' }} - uses: JamesIves/github-pages-deploy-action@v4.7.3 + uses: JamesIves/github-pages-deploy-action@v4.7.4 with: token: ${{ secrets.GITHUB_TOKEN }} branch: gh-pages From cbeab2ac4f69292283ed94049675aaa89128ec34 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 23:38:23 +0000 Subject: [PATCH 91/99] Bump actions/upload-artifact from 4 to 5 (#25745) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci_build_major_branch_keymap.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci_build_major_branch_keymap.yml b/.github/workflows/ci_build_major_branch_keymap.yml index 1a0b44b908..228dd0025d 100644 --- a/.github/workflows/ci_build_major_branch_keymap.yml +++ b/.github/workflows/ci_build_major_branch_keymap.yml @@ -62,7 +62,7 @@ jobs: echo "targets=$(jq -c 'keys' targets.json)" >> $GITHUB_OUTPUT - name: Upload targets json - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: targets-${{ inputs.keymap }} path: targets.json @@ -112,7 +112,7 @@ jobs: qmk mass-compile -t -j $NCPUS -e DUMP_CI_METADATA=yes $(jq -r '.["${{ matrix.target }}"].targets' targets.json) || touch .failed - name: Upload binaries - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: firmware-${{ inputs.keymap }}-${{ matrix.target }} if-no-files-found: ignore @@ -146,7 +146,7 @@ jobs: merge-multiple: true - name: Upload all firmwares - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: firmware-${{ inputs.keymap }} if-no-files-found: ignore From 8522449ccfa36d19c82317e8a49e58862e366c66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 23:38:36 +0000 Subject: [PATCH 92/99] Bump actions/download-artifact from 5 to 6 (#25746) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 5 to 6. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci_build_major_branch.yml | 2 +- .github/workflows/ci_build_major_branch_keymap.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci_build_major_branch.yml b/.github/workflows/ci_build_major_branch.yml index c37e1377b1..6cefd58901 100644 --- a/.github/workflows/ci_build_major_branch.yml +++ b/.github/workflows/ci_build_major_branch.yml @@ -87,7 +87,7 @@ jobs: fetch-depth: 0 - name: Download firmwares - uses: actions/download-artifact@v5 + uses: actions/download-artifact@v6 with: pattern: firmware-* path: . diff --git a/.github/workflows/ci_build_major_branch_keymap.yml b/.github/workflows/ci_build_major_branch_keymap.yml index 228dd0025d..f5533cf07a 100644 --- a/.github/workflows/ci_build_major_branch_keymap.yml +++ b/.github/workflows/ci_build_major_branch_keymap.yml @@ -92,7 +92,7 @@ jobs: uses: actions/checkout@v5 - name: Get target definitions - uses: actions/download-artifact@v5 + uses: actions/download-artifact@v6 with: name: targets-${{ inputs.keymap }} path: . @@ -139,7 +139,7 @@ jobs: uses: actions/checkout@v5 - name: Download firmwares - uses: actions/download-artifact@v5 + uses: actions/download-artifact@v6 with: pattern: firmware-${{ inputs.keymap }}-* path: . From 22b213e1915a49cc8419fe0d449ca26fb372b43c Mon Sep 17 00:00:00 2001 From: Carlos Eduardo Date: Sat, 8 Nov 2025 15:43:34 -0300 Subject: [PATCH 93/99] Add LED index map to `qmk info` cli command (#25743) --- lib/python/qmk/cli/info.py | 46 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/lib/python/qmk/cli/info.py b/lib/python/qmk/cli/info.py index 5925b57258..26f7f0269d 100755 --- a/lib/python/qmk/cli/info.py +++ b/lib/python/qmk/cli/info.py @@ -102,6 +102,48 @@ def show_matrix(kb_info_json, title_caps=True): print(render_layout(kb_info_json['layouts'][layout_name]['layout'], cli.config.info.ascii, labels)) +def show_leds(kb_info_json, title_caps=True): + """Render LED indices per key, using the keyboard's key layout geometry. + + We build a map from (row, col) -> LED index using rgb_matrix/led_matrix layout, + then label each key with its LED index. Keys without an associated LED are left blank. + """ + # Prefer rgb_matrix, fall back to led_matrix + led_feature = None + for feature in ['rgb_matrix', 'led_matrix']: + if 'layout' in kb_info_json.get(feature, {}): + led_feature = feature + break + + if not led_feature: + cli.echo('{fg_yellow}No rgb_matrix/led_matrix layout found to derive LED indices.{fg_reset}') + return + + # Build mapping from matrix position -> LED indices for faster lookup later + by_matrix = {} + for idx, led in enumerate(kb_info_json[led_feature]['layout']): + if 'matrix' in led: + led_key = tuple(led.get('matrix')) + by_matrix[led_key] = idx + + # For each keyboard layout (e.g., LAYOUT), render keys labeled with LED index (or blank) + for layout_name, layout in kb_info_json['layouts'].items(): + labels = [] + for key in layout['layout']: + led_key = tuple(key.get('matrix')) + label = str(by_matrix[led_key]) if led_key in by_matrix else '' + + labels.append(label) + + # Header + if title_caps: + cli.echo('{fg_blue}LED indices for "%s"{fg_reset}:', layout_name) + else: + cli.echo('{fg_blue}leds_%s{fg_reset}:', layout_name) + + print(render_layout(kb_info_json['layouts'][layout_name]['layout'], cli.config.info.ascii, labels)) + + def print_friendly_output(kb_info_json): """Print the info.json in a friendly text format. """ @@ -169,6 +211,7 @@ def print_parsed_rules_mk(keyboard_name): @cli.argument('-km', '--keymap', help='Keymap to show info for (Optional).') @cli.argument('-l', '--layouts', action='store_true', help='Render the layouts.') @cli.argument('-m', '--matrix', action='store_true', help='Render the layouts with matrix information.') +@cli.argument('-L', '--leds', action='store_true', help='Render the LED layout with LED indices (rgb_matrix/led_matrix).') @cli.argument('-f', '--format', default='friendly', arg_only=True, help='Format to display the data in (friendly, text, json) (Default: friendly).') @cli.argument('--ascii', action='store_true', default=not UNICODE_SUPPORT, help='Render layout box drawings in ASCII only.') @cli.argument('-r', '--rules-mk', action='store_true', help='Render the parsed values of the keyboard\'s rules.mk file.') @@ -227,5 +270,8 @@ def info(cli): if cli.config.info.matrix: show_matrix(kb_info_json, title_caps) + if cli.config.info.leds: + show_leds(kb_info_json, title_caps) + if cli.config.info.keymap: show_keymap(kb_info_json, title_caps) From 00eebfb575d6ea0660755cee2c6ccf3b21110312 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sat, 8 Nov 2025 20:49:15 +0000 Subject: [PATCH 94/99] Fix pmw33xx sensor initialisation (#25777) --- drivers/sensors/pmw33xx_common.c | 2 +- platforms/progmem.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/sensors/pmw33xx_common.c b/drivers/sensors/pmw33xx_common.c index 61e309ea27..95d0fe6b4b 100644 --- a/drivers/sensors/pmw33xx_common.c +++ b/drivers/sensors/pmw33xx_common.c @@ -108,7 +108,7 @@ __attribute__((weak)) bool pmw33xx_check_signature(uint8_t sensor) { pmw33xx_read(sensor, REG_Inverse_Product_ID), }; - return memcmp(pmw33xx_firmware_signature, signature_dump, sizeof(signature_dump)) == 0; + return memcmp_P(signature_dump, pmw33xx_firmware_signature, sizeof(signature_dump)) == 0; } bool pmw33xx_upload_firmware(uint8_t sensor) { diff --git a/platforms/progmem.h b/platforms/progmem.h index 3a7a169682..6c4ebcaa01 100644 --- a/platforms/progmem.h +++ b/platforms/progmem.h @@ -7,6 +7,7 @@ # define PROGMEM # define PSTR(x) x # define PGM_P const char* +# define memcmp_P(s1, s2, n) memcmp(s1, s2, n) # define memcpy_P(dest, src, n) memcpy(dest, src, n) # define pgm_read_byte(address_short) *((uint8_t*)(address_short)) # define pgm_read_word(address_short) *((uint16_t*)(address_short)) From 024c4ef85395f3230ab1599a4f1c87ffeab7e553 Mon Sep 17 00:00:00 2001 From: leyew <102467346+itsme-zeix@users.noreply.github.com> Date: Sun, 9 Nov 2025 05:01:36 +0800 Subject: [PATCH 95/99] [Keyboard] Add Rubrehaku (#24907) --- keyboards/zeix/singa/rubrehaku/config.h | 20 + keyboards/zeix/singa/rubrehaku/keyboard.json | 694 ++++++++++++++++++ .../singa/rubrehaku/keymaps/default/keymap.c | 35 + .../zeix/singa/rubrehaku/matrix_diagram.md | 30 + keyboards/zeix/singa/rubrehaku/readme.md | 27 + 5 files changed, 806 insertions(+) create mode 100644 keyboards/zeix/singa/rubrehaku/config.h create mode 100644 keyboards/zeix/singa/rubrehaku/keyboard.json create mode 100644 keyboards/zeix/singa/rubrehaku/keymaps/default/keymap.c create mode 100644 keyboards/zeix/singa/rubrehaku/matrix_diagram.md create mode 100644 keyboards/zeix/singa/rubrehaku/readme.md diff --git a/keyboards/zeix/singa/rubrehaku/config.h b/keyboards/zeix/singa/rubrehaku/config.h new file mode 100644 index 0000000000..e47dae35e6 --- /dev/null +++ b/keyboards/zeix/singa/rubrehaku/config.h @@ -0,0 +1,20 @@ +/* +Copyright 2024 zeix (@itsme-zeix) + +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 . +*/ + +#pragma once + +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U diff --git a/keyboards/zeix/singa/rubrehaku/keyboard.json b/keyboards/zeix/singa/rubrehaku/keyboard.json new file mode 100644 index 0000000000..3dbed82aab --- /dev/null +++ b/keyboards/zeix/singa/rubrehaku/keyboard.json @@ -0,0 +1,694 @@ +{ + "manufacturer": "KLC", + "keyboard_name": "Rubrehaku", + "maintainer": "itsme-zeix", + "bootloader": "rp2040", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true + }, + "indicators": { + "caps_lock": "GP29" + }, + "matrix_pins": { + "cols": ["GP7", "GP6", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0"], + "rows": ["GP27", "GP28", "GP10", "GP11", "GP18", "GP19", "GP23", "GP24", "GP25", "GP26"] + }, + "processor": "RP2040", + "rgblight": { + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "snake": true, + "static_gradient": true, + "twinkle": true + }, + "default": { + "hue": 210, + "sat": 100, + "val": 8 + }, + "driver": "ws2812", + "led_count": 16, + "sleep": true + }, + "url": "https://klc-playground.com", + "usb": { + "device_version": "0.0.1", + "pid": "0x8889", + "vid": "0x4C27" + }, + "ws2812": { + "driver": "vendor", + "pin": "GP20" + }, + "layouts": { + "LAYOUT_all": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [1, 0], "x": 1, "y": 0}, + {"matrix": [0, 1], "x": 2, "y": 0}, + {"matrix": [1, 1], "x": 3, "y": 0}, + {"matrix": [0, 2], "x": 4, "y": 0}, + {"matrix": [1, 2], "x": 5, "y": 0}, + {"matrix": [0, 3], "x": 6, "y": 0}, + {"matrix": [1, 3], "x": 7, "y": 0}, + {"matrix": [0, 4], "x": 8, "y": 0}, + {"matrix": [1, 4], "x": 9, "y": 0}, + {"matrix": [0, 5], "x": 10, "y": 0}, + {"matrix": [1, 5], "x": 11, "y": 0}, + {"matrix": [0, 6], "x": 12, "y": 0}, + {"matrix": [1, 6], "x": 13, "y": 0}, + {"matrix": [0, 7], "x": 14, "y": 0}, + {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [3, 0], "x": 1.5, "y": 1}, + {"matrix": [2, 1], "x": 2.5, "y": 1}, + {"matrix": [3, 1], "x": 3.5, "y": 1}, + {"matrix": [2, 2], "x": 4.5, "y": 1}, + {"matrix": [3, 2], "x": 5.5, "y": 1}, + {"matrix": [2, 3], "x": 6.5, "y": 1}, + {"matrix": [3, 3], "x": 7.5, "y": 1}, + {"matrix": [2, 4], "x": 8.5, "y": 1}, + {"matrix": [3, 4], "x": 9.5, "y": 1}, + {"matrix": [2, 5], "x": 10.5, "y": 1}, + {"matrix": [3, 5], "x": 11.5, "y": 1}, + {"matrix": [2, 6], "x": 12.5, "y": 1}, + {"matrix": [3, 6], "x": 13.5, "y": 1, "w": 1.5}, + {"matrix": [3, 7], "x": 15, "y": 1}, + {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [5, 0], "x": 1.75, "y": 2}, + {"matrix": [4, 1], "x": 2.75, "y": 2}, + {"matrix": [5, 1], "x": 3.75, "y": 2}, + {"matrix": [4, 2], "x": 4.75, "y": 2}, + {"matrix": [5, 2], "x": 5.75, "y": 2}, + {"matrix": [4, 3], "x": 6.75, "y": 2}, + {"matrix": [5, 3], "x": 7.75, "y": 2}, + {"matrix": [4, 4], "x": 8.75, "y": 2}, + {"matrix": [5, 4], "x": 9.75, "y": 2}, + {"matrix": [4, 5], "x": 10.75, "y": 2}, + {"matrix": [5, 5], "x": 11.75, "y": 2}, + {"matrix": [4, 6], "x": 12.75, "y": 2}, + {"matrix": [5, 6], "x": 13.75, "y": 2, "w": 1.25}, + {"matrix": [5, 7], "x": 15, "y": 2}, + {"matrix": [6, 0], "x": 0, "y": 3, "w": 1.25}, + {"matrix": [7, 0], "x": 1.25, "y": 3}, + {"matrix": [6, 1], "x": 2.25, "y": 3}, + {"matrix": [7, 1], "x": 3.25, "y": 3}, + {"matrix": [6, 2], "x": 4.25, "y": 3}, + {"matrix": [7, 2], "x": 5.25, "y": 3}, + {"matrix": [6, 3], "x": 6.25, "y": 3}, + {"matrix": [7, 3], "x": 7.25, "y": 3}, + {"matrix": [6, 4], "x": 8.25, "y": 3}, + {"matrix": [7, 4], "x": 9.25, "y": 3}, + {"matrix": [6, 5], "x": 10.25, "y": 3}, + {"matrix": [7, 5], "x": 11.25, "y": 3}, + {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75}, + {"matrix": [7, 6], "x": 14, "y": 3}, + {"matrix": [7, 7], "x": 15, "y": 3}, + {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.25}, + {"matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25}, + {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.25}, + {"matrix": [9, 2], "x": 3.75, "y": 4, "w": 2.75}, + {"matrix": [8, 3], "x": 6.5, "y": 4, "w": 1.25}, + {"matrix": [9, 4], "x": 7.75, "y": 4, "w": 2.25}, + {"matrix": [8, 5], "x": 10, "y": 4, "w": 1.25}, + {"matrix": [9, 5], "x": 11.25, "y": 4, "w": 1.25}, + {"matrix": [8, 6], "x": 13, "y": 4}, + {"matrix": [9, 6], "x": 14, "y": 4}, + {"matrix": [9, 7], "x": 15, "y": 4} + ] + }, + "LAYOUT_ansi": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [1, 0], "x": 1, "y": 0}, + {"matrix": [0, 1], "x": 2, "y": 0}, + {"matrix": [1, 1], "x": 3, "y": 0}, + {"matrix": [0, 2], "x": 4, "y": 0}, + {"matrix": [1, 2], "x": 5, "y": 0}, + {"matrix": [0, 3], "x": 6, "y": 0}, + {"matrix": [1, 3], "x": 7, "y": 0}, + {"matrix": [0, 4], "x": 8, "y": 0}, + {"matrix": [1, 4], "x": 9, "y": 0}, + {"matrix": [0, 5], "x": 10, "y": 0}, + {"matrix": [1, 5], "x": 11, "y": 0}, + {"matrix": [0, 6], "x": 12, "y": 0}, + {"matrix": [0, 7], "x": 13, "y": 0, "w": 2}, + {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [3, 0], "x": 1.5, "y": 1}, + {"matrix": [2, 1], "x": 2.5, "y": 1}, + {"matrix": [3, 1], "x": 3.5, "y": 1}, + {"matrix": [2, 2], "x": 4.5, "y": 1}, + {"matrix": [3, 2], "x": 5.5, "y": 1}, + {"matrix": [2, 3], "x": 6.5, "y": 1}, + {"matrix": [3, 3], "x": 7.5, "y": 1}, + {"matrix": [2, 4], "x": 8.5, "y": 1}, + {"matrix": [3, 4], "x": 9.5, "y": 1}, + {"matrix": [2, 5], "x": 10.5, "y": 1}, + {"matrix": [3, 5], "x": 11.5, "y": 1}, + {"matrix": [2, 6], "x": 12.5, "y": 1}, + {"matrix": [3, 6], "x": 13.5, "y": 1, "w": 1.5}, + {"matrix": [3, 7], "x": 15, "y": 1}, + {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [5, 0], "x": 1.75, "y": 2}, + {"matrix": [4, 1], "x": 2.75, "y": 2}, + {"matrix": [5, 1], "x": 3.75, "y": 2}, + {"matrix": [4, 2], "x": 4.75, "y": 2}, + {"matrix": [5, 2], "x": 5.75, "y": 2}, + {"matrix": [4, 3], "x": 6.75, "y": 2}, + {"matrix": [5, 3], "x": 7.75, "y": 2}, + {"matrix": [4, 4], "x": 8.75, "y": 2}, + {"matrix": [5, 4], "x": 9.75, "y": 2}, + {"matrix": [4, 5], "x": 10.75, "y": 2}, + {"matrix": [5, 5], "x": 11.75, "y": 2}, + {"matrix": [5, 6], "x": 12.75, "y": 2, "w": 2.25}, + {"matrix": [5, 7], "x": 15, "y": 2}, + {"matrix": [6, 0], "x": 0, "y": 3, "w": 2.25}, + {"matrix": [6, 1], "x": 2.25, "y": 3}, + {"matrix": [7, 1], "x": 3.25, "y": 3}, + {"matrix": [6, 2], "x": 4.25, "y": 3}, + {"matrix": [7, 2], "x": 5.25, "y": 3}, + {"matrix": [6, 3], "x": 6.25, "y": 3}, + {"matrix": [7, 3], "x": 7.25, "y": 3}, + {"matrix": [6, 4], "x": 8.25, "y": 3}, + {"matrix": [7, 4], "x": 9.25, "y": 3}, + {"matrix": [6, 5], "x": 10.25, "y": 3}, + {"matrix": [7, 5], "x": 11.25, "y": 3}, + {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75}, + {"matrix": [7, 6], "x": 14, "y": 3}, + {"matrix": [7, 7], "x": 15, "y": 3}, + {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.25}, + {"matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25}, + {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.25}, + {"matrix": [8, 3], "x": 3.75, "y": 4, "w": 6.25}, + {"matrix": [8, 5], "x": 10, "y": 4, "w": 1.25}, + {"matrix": [9, 5], "x": 11.25, "y": 4, "w": 1.25}, + {"matrix": [8, 6], "x": 13, "y": 4}, + {"matrix": [9, 6], "x": 14, "y": 4}, + {"matrix": [9, 7], "x": 15, "y": 4} + ] + }, + "LAYOUT_ansi_split_bs": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [1, 0], "x": 1, "y": 0}, + {"matrix": [0, 1], "x": 2, "y": 0}, + {"matrix": [1, 1], "x": 3, "y": 0}, + {"matrix": [0, 2], "x": 4, "y": 0}, + {"matrix": [1, 2], "x": 5, "y": 0}, + {"matrix": [0, 3], "x": 6, "y": 0}, + {"matrix": [1, 3], "x": 7, "y": 0}, + {"matrix": [0, 4], "x": 8, "y": 0}, + {"matrix": [1, 4], "x": 9, "y": 0}, + {"matrix": [0, 5], "x": 10, "y": 0}, + {"matrix": [1, 5], "x": 11, "y": 0}, + {"matrix": [0, 6], "x": 12, "y": 0}, + {"matrix": [1, 6], "x": 13, "y": 0}, + {"matrix": [0, 7], "x": 14, "y": 0}, + {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [3, 0], "x": 1.5, "y": 1}, + {"matrix": [2, 1], "x": 2.5, "y": 1}, + {"matrix": [3, 1], "x": 3.5, "y": 1}, + {"matrix": [2, 2], "x": 4.5, "y": 1}, + {"matrix": [3, 2], "x": 5.5, "y": 1}, + {"matrix": [2, 3], "x": 6.5, "y": 1}, + {"matrix": [3, 3], "x": 7.5, "y": 1}, + {"matrix": [2, 4], "x": 8.5, "y": 1}, + {"matrix": [3, 4], "x": 9.5, "y": 1}, + {"matrix": [2, 5], "x": 10.5, "y": 1}, + {"matrix": [3, 5], "x": 11.5, "y": 1}, + {"matrix": [2, 6], "x": 12.5, "y": 1}, + {"matrix": [3, 6], "x": 13.5, "y": 1, "w": 1.5}, + {"matrix": [3, 7], "x": 15, "y": 1}, + {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [5, 0], "x": 1.75, "y": 2}, + {"matrix": [4, 1], "x": 2.75, "y": 2}, + {"matrix": [5, 1], "x": 3.75, "y": 2}, + {"matrix": [4, 2], "x": 4.75, "y": 2}, + {"matrix": [5, 2], "x": 5.75, "y": 2}, + {"matrix": [4, 3], "x": 6.75, "y": 2}, + {"matrix": [5, 3], "x": 7.75, "y": 2}, + {"matrix": [4, 4], "x": 8.75, "y": 2}, + {"matrix": [5, 4], "x": 9.75, "y": 2}, + {"matrix": [4, 5], "x": 10.75, "y": 2}, + {"matrix": [5, 5], "x": 11.75, "y": 2}, + {"matrix": [5, 6], "x": 12.75, "y": 2, "w": 2.25}, + {"matrix": [5, 7], "x": 15, "y": 2}, + {"matrix": [6, 0], "x": 0, "y": 3, "w": 2.25}, + {"matrix": [6, 1], "x": 2.25, "y": 3}, + {"matrix": [7, 1], "x": 3.25, "y": 3}, + {"matrix": [6, 2], "x": 4.25, "y": 3}, + {"matrix": [7, 2], "x": 5.25, "y": 3}, + {"matrix": [6, 3], "x": 6.25, "y": 3}, + {"matrix": [7, 3], "x": 7.25, "y": 3}, + {"matrix": [6, 4], "x": 8.25, "y": 3}, + {"matrix": [7, 4], "x": 9.25, "y": 3}, + {"matrix": [6, 5], "x": 10.25, "y": 3}, + {"matrix": [7, 5], "x": 11.25, "y": 3}, + {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75}, + {"matrix": [7, 6], "x": 14, "y": 3}, + {"matrix": [7, 7], "x": 15, "y": 3}, + {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.25}, + {"matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25}, + {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.25}, + {"matrix": [8, 3], "x": 3.75, "y": 4, "w": 6.25}, + {"matrix": [8, 5], "x": 10, "y": 4, "w": 1.25}, + {"matrix": [9, 5], "x": 11.25, "y": 4, "w": 1.25}, + {"matrix": [8, 6], "x": 13, "y": 4}, + {"matrix": [9, 6], "x": 14, "y": 4}, + {"matrix": [9, 7], "x": 15, "y": 4} + ] + }, + "LAYOUT_ansi_tsangan": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [1, 0], "x": 1, "y": 0}, + {"matrix": [0, 1], "x": 2, "y": 0}, + {"matrix": [1, 1], "x": 3, "y": 0}, + {"matrix": [0, 2], "x": 4, "y": 0}, + {"matrix": [1, 2], "x": 5, "y": 0}, + {"matrix": [0, 3], "x": 6, "y": 0}, + {"matrix": [1, 3], "x": 7, "y": 0}, + {"matrix": [0, 4], "x": 8, "y": 0}, + {"matrix": [1, 4], "x": 9, "y": 0}, + {"matrix": [0, 5], "x": 10, "y": 0}, + {"matrix": [1, 5], "x": 11, "y": 0}, + {"matrix": [0, 6], "x": 12, "y": 0}, + {"matrix": [0, 7], "x": 13, "y": 0, "w": 2}, + {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [3, 0], "x": 1.5, "y": 1}, + {"matrix": [2, 1], "x": 2.5, "y": 1}, + {"matrix": [3, 1], "x": 3.5, "y": 1}, + {"matrix": [2, 2], "x": 4.5, "y": 1}, + {"matrix": [3, 2], "x": 5.5, "y": 1}, + {"matrix": [2, 3], "x": 6.5, "y": 1}, + {"matrix": [3, 3], "x": 7.5, "y": 1}, + {"matrix": [2, 4], "x": 8.5, "y": 1}, + {"matrix": [3, 4], "x": 9.5, "y": 1}, + {"matrix": [2, 5], "x": 10.5, "y": 1}, + {"matrix": [3, 5], "x": 11.5, "y": 1}, + {"matrix": [2, 6], "x": 12.5, "y": 1}, + {"matrix": [3, 6], "x": 13.5, "y": 1, "w": 1.5}, + {"matrix": [3, 7], "x": 15, "y": 1}, + {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [5, 0], "x": 1.75, "y": 2}, + {"matrix": [4, 1], "x": 2.75, "y": 2}, + {"matrix": [5, 1], "x": 3.75, "y": 2}, + {"matrix": [4, 2], "x": 4.75, "y": 2}, + {"matrix": [5, 2], "x": 5.75, "y": 2}, + {"matrix": [4, 3], "x": 6.75, "y": 2}, + {"matrix": [5, 3], "x": 7.75, "y": 2}, + {"matrix": [4, 4], "x": 8.75, "y": 2}, + {"matrix": [5, 4], "x": 9.75, "y": 2}, + {"matrix": [4, 5], "x": 10.75, "y": 2}, + {"matrix": [5, 5], "x": 11.75, "y": 2}, + {"matrix": [5, 6], "x": 12.75, "y": 2, "w": 2.25}, + {"matrix": [5, 7], "x": 15, "y": 2}, + {"matrix": [6, 0], "x": 0, "y": 3, "w": 2.25}, + {"matrix": [6, 1], "x": 2.25, "y": 3}, + {"matrix": [7, 1], "x": 3.25, "y": 3}, + {"matrix": [6, 2], "x": 4.25, "y": 3}, + {"matrix": [7, 2], "x": 5.25, "y": 3}, + {"matrix": [6, 3], "x": 6.25, "y": 3}, + {"matrix": [7, 3], "x": 7.25, "y": 3}, + {"matrix": [6, 4], "x": 8.25, "y": 3}, + {"matrix": [7, 4], "x": 9.25, "y": 3}, + {"matrix": [6, 5], "x": 10.25, "y": 3}, + {"matrix": [7, 5], "x": 11.25, "y": 3}, + {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75}, + {"matrix": [7, 6], "x": 14, "y": 3}, + {"matrix": [7, 7], "x": 15, "y": 3}, + {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.5}, + {"matrix": [9, 0], "x": 1.5, "y": 4}, + {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.5}, + {"matrix": [8, 3], "x": 4, "y": 4, "w": 7}, + {"matrix": [8, 5], "x": 11, "y": 4, "w": 1.5}, + {"matrix": [8, 6], "x": 13, "y": 4}, + {"matrix": [9, 6], "x": 14, "y": 4}, + {"matrix": [9, 7], "x": 15, "y": 4} + ] + }, + "LAYOUT_ansi_tsangan_split_bs": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [1, 0], "x": 1, "y": 0}, + {"matrix": [0, 1], "x": 2, "y": 0}, + {"matrix": [1, 1], "x": 3, "y": 0}, + {"matrix": [0, 2], "x": 4, "y": 0}, + {"matrix": [1, 2], "x": 5, "y": 0}, + {"matrix": [0, 3], "x": 6, "y": 0}, + {"matrix": [1, 3], "x": 7, "y": 0}, + {"matrix": [0, 4], "x": 8, "y": 0}, + {"matrix": [1, 4], "x": 9, "y": 0}, + {"matrix": [0, 5], "x": 10, "y": 0}, + {"matrix": [1, 5], "x": 11, "y": 0}, + {"matrix": [0, 6], "x": 12, "y": 0}, + {"matrix": [1, 6], "x": 13, "y": 0}, + {"matrix": [0, 7], "x": 14, "y": 0}, + {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [3, 0], "x": 1.5, "y": 1}, + {"matrix": [2, 1], "x": 2.5, "y": 1}, + {"matrix": [3, 1], "x": 3.5, "y": 1}, + {"matrix": [2, 2], "x": 4.5, "y": 1}, + {"matrix": [3, 2], "x": 5.5, "y": 1}, + {"matrix": [2, 3], "x": 6.5, "y": 1}, + {"matrix": [3, 3], "x": 7.5, "y": 1}, + {"matrix": [2, 4], "x": 8.5, "y": 1}, + {"matrix": [3, 4], "x": 9.5, "y": 1}, + {"matrix": [2, 5], "x": 10.5, "y": 1}, + {"matrix": [3, 5], "x": 11.5, "y": 1}, + {"matrix": [2, 6], "x": 12.5, "y": 1}, + {"matrix": [3, 6], "x": 13.5, "y": 1, "w": 1.5}, + {"matrix": [3, 7], "x": 15, "y": 1}, + {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [5, 0], "x": 1.75, "y": 2}, + {"matrix": [4, 1], "x": 2.75, "y": 2}, + {"matrix": [5, 1], "x": 3.75, "y": 2}, + {"matrix": [4, 2], "x": 4.75, "y": 2}, + {"matrix": [5, 2], "x": 5.75, "y": 2}, + {"matrix": [4, 3], "x": 6.75, "y": 2}, + {"matrix": [5, 3], "x": 7.75, "y": 2}, + {"matrix": [4, 4], "x": 8.75, "y": 2}, + {"matrix": [5, 4], "x": 9.75, "y": 2}, + {"matrix": [4, 5], "x": 10.75, "y": 2}, + {"matrix": [5, 5], "x": 11.75, "y": 2}, + {"matrix": [5, 6], "x": 12.75, "y": 2, "w": 2.25}, + {"matrix": [5, 7], "x": 15, "y": 2}, + {"matrix": [6, 0], "x": 0, "y": 3, "w": 2.25}, + {"matrix": [6, 1], "x": 2.25, "y": 3}, + {"matrix": [7, 1], "x": 3.25, "y": 3}, + {"matrix": [6, 2], "x": 4.25, "y": 3}, + {"matrix": [7, 2], "x": 5.25, "y": 3}, + {"matrix": [6, 3], "x": 6.25, "y": 3}, + {"matrix": [7, 3], "x": 7.25, "y": 3}, + {"matrix": [6, 4], "x": 8.25, "y": 3}, + {"matrix": [7, 4], "x": 9.25, "y": 3}, + {"matrix": [6, 5], "x": 10.25, "y": 3}, + {"matrix": [7, 5], "x": 11.25, "y": 3}, + {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75}, + {"matrix": [7, 6], "x": 14, "y": 3}, + {"matrix": [7, 7], "x": 15, "y": 3}, + {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.5}, + {"matrix": [9, 0], "x": 1.5, "y": 4}, + {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.5}, + {"matrix": [8, 3], "x": 4, "y": 4, "w": 7}, + {"matrix": [8, 5], "x": 11, "y": 4, "w": 1.5}, + {"matrix": [8, 6], "x": 13, "y": 4}, + {"matrix": [9, 6], "x": 14, "y": 4}, + {"matrix": [9, 7], "x": 15, "y": 4} + ] + }, + "LAYOUT_iso": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [1, 0], "x": 1, "y": 0}, + {"matrix": [0, 1], "x": 2, "y": 0}, + {"matrix": [1, 1], "x": 3, "y": 0}, + {"matrix": [0, 2], "x": 4, "y": 0}, + {"matrix": [1, 2], "x": 5, "y": 0}, + {"matrix": [0, 3], "x": 6, "y": 0}, + {"matrix": [1, 3], "x": 7, "y": 0}, + {"matrix": [0, 4], "x": 8, "y": 0}, + {"matrix": [1, 4], "x": 9, "y": 0}, + {"matrix": [0, 5], "x": 10, "y": 0}, + {"matrix": [1, 5], "x": 11, "y": 0}, + {"matrix": [0, 6], "x": 12, "y": 0}, + {"matrix": [0, 7], "x": 13, "y": 0, "w": 2}, + {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [3, 0], "x": 1.5, "y": 1}, + {"matrix": [2, 1], "x": 2.5, "y": 1}, + {"matrix": [3, 1], "x": 3.5, "y": 1}, + {"matrix": [2, 2], "x": 4.5, "y": 1}, + {"matrix": [3, 2], "x": 5.5, "y": 1}, + {"matrix": [2, 3], "x": 6.5, "y": 1}, + {"matrix": [3, 3], "x": 7.5, "y": 1}, + {"matrix": [2, 4], "x": 8.5, "y": 1}, + {"matrix": [3, 4], "x": 9.5, "y": 1}, + {"matrix": [2, 5], "x": 10.5, "y": 1}, + {"matrix": [3, 5], "x": 11.5, "y": 1}, + {"matrix": [2, 6], "x": 12.5, "y": 1}, + {"matrix": [3, 7], "x": 15, "y": 1}, + {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [5, 0], "x": 1.75, "y": 2}, + {"matrix": [4, 1], "x": 2.75, "y": 2}, + {"matrix": [5, 1], "x": 3.75, "y": 2}, + {"matrix": [4, 2], "x": 4.75, "y": 2}, + {"matrix": [5, 2], "x": 5.75, "y": 2}, + {"matrix": [4, 3], "x": 6.75, "y": 2}, + {"matrix": [5, 3], "x": 7.75, "y": 2}, + {"matrix": [4, 4], "x": 8.75, "y": 2}, + {"matrix": [5, 4], "x": 9.75, "y": 2}, + {"matrix": [4, 5], "x": 10.75, "y": 2}, + {"matrix": [5, 5], "x": 11.75, "y": 2}, + {"matrix": [4, 6], "x": 12.75, "y": 2}, + {"matrix": [5, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2}, + {"matrix": [5, 7], "x": 15, "y": 2}, + {"matrix": [6, 0], "x": 0, "y": 3, "w": 1.25}, + {"matrix": [7, 0], "x": 1.25, "y": 3}, + {"matrix": [6, 1], "x": 2.25, "y": 3}, + {"matrix": [7, 1], "x": 3.25, "y": 3}, + {"matrix": [6, 2], "x": 4.25, "y": 3}, + {"matrix": [7, 2], "x": 5.25, "y": 3}, + {"matrix": [6, 3], "x": 6.25, "y": 3}, + {"matrix": [7, 3], "x": 7.25, "y": 3}, + {"matrix": [6, 4], "x": 8.25, "y": 3}, + {"matrix": [7, 4], "x": 9.25, "y": 3}, + {"matrix": [6, 5], "x": 10.25, "y": 3}, + {"matrix": [7, 5], "x": 11.25, "y": 3}, + {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75}, + {"matrix": [7, 6], "x": 14, "y": 3}, + {"matrix": [7, 7], "x": 15, "y": 3}, + {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.25}, + {"matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25}, + {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.25}, + {"matrix": [8, 3], "x": 3.75, "y": 4, "w": 6.25}, + {"matrix": [8, 5], "x": 10, "y": 4, "w": 1.25}, + {"matrix": [9, 5], "x": 11.25, "y": 4, "w": 1.25}, + {"matrix": [8, 6], "x": 13, "y": 4}, + {"matrix": [9, 6], "x": 14, "y": 4}, + {"matrix": [9, 7], "x": 15, "y": 4} + ] + }, + "LAYOUT_iso_split_bs": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [1, 0], "x": 1, "y": 0}, + {"matrix": [0, 1], "x": 2, "y": 0}, + {"matrix": [1, 1], "x": 3, "y": 0}, + {"matrix": [0, 2], "x": 4, "y": 0}, + {"matrix": [1, 2], "x": 5, "y": 0}, + {"matrix": [0, 3], "x": 6, "y": 0}, + {"matrix": [1, 3], "x": 7, "y": 0}, + {"matrix": [0, 4], "x": 8, "y": 0}, + {"matrix": [1, 4], "x": 9, "y": 0}, + {"matrix": [0, 5], "x": 10, "y": 0}, + {"matrix": [1, 5], "x": 11, "y": 0}, + {"matrix": [0, 6], "x": 12, "y": 0}, + {"matrix": [1, 6], "x": 13, "y": 0}, + {"matrix": [0, 7], "x": 14, "y": 0}, + {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [3, 0], "x": 1.5, "y": 1}, + {"matrix": [2, 1], "x": 2.5, "y": 1}, + {"matrix": [3, 1], "x": 3.5, "y": 1}, + {"matrix": [2, 2], "x": 4.5, "y": 1}, + {"matrix": [3, 2], "x": 5.5, "y": 1}, + {"matrix": [2, 3], "x": 6.5, "y": 1}, + {"matrix": [3, 3], "x": 7.5, "y": 1}, + {"matrix": [2, 4], "x": 8.5, "y": 1}, + {"matrix": [3, 4], "x": 9.5, "y": 1}, + {"matrix": [2, 5], "x": 10.5, "y": 1}, + {"matrix": [3, 5], "x": 11.5, "y": 1}, + {"matrix": [2, 6], "x": 12.5, "y": 1}, + {"matrix": [3, 7], "x": 15, "y": 1}, + {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [5, 0], "x": 1.75, "y": 2}, + {"matrix": [4, 1], "x": 2.75, "y": 2}, + {"matrix": [5, 1], "x": 3.75, "y": 2}, + {"matrix": [4, 2], "x": 4.75, "y": 2}, + {"matrix": [5, 2], "x": 5.75, "y": 2}, + {"matrix": [4, 3], "x": 6.75, "y": 2}, + {"matrix": [5, 3], "x": 7.75, "y": 2}, + {"matrix": [4, 4], "x": 8.75, "y": 2}, + {"matrix": [5, 4], "x": 9.75, "y": 2}, + {"matrix": [4, 5], "x": 10.75, "y": 2}, + {"matrix": [5, 5], "x": 11.75, "y": 2}, + {"matrix": [4, 6], "x": 12.75, "y": 2}, + {"matrix": [5, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2}, + {"matrix": [5, 7], "x": 15, "y": 2}, + {"matrix": [6, 0], "x": 0, "y": 3, "w": 1.25}, + {"matrix": [7, 0], "x": 1.25, "y": 3}, + {"matrix": [6, 1], "x": 2.25, "y": 3}, + {"matrix": [7, 1], "x": 3.25, "y": 3}, + {"matrix": [6, 2], "x": 4.25, "y": 3}, + {"matrix": [7, 2], "x": 5.25, "y": 3}, + {"matrix": [6, 3], "x": 6.25, "y": 3}, + {"matrix": [7, 3], "x": 7.25, "y": 3}, + {"matrix": [6, 4], "x": 8.25, "y": 3}, + {"matrix": [7, 4], "x": 9.25, "y": 3}, + {"matrix": [6, 5], "x": 10.25, "y": 3}, + {"matrix": [7, 5], "x": 11.25, "y": 3}, + {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75}, + {"matrix": [7, 6], "x": 14, "y": 3}, + {"matrix": [7, 7], "x": 15, "y": 3}, + {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.25}, + {"matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25}, + {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.25}, + {"matrix": [8, 3], "x": 3.75, "y": 4, "w": 6.25}, + {"matrix": [8, 5], "x": 10, "y": 4, "w": 1.25}, + {"matrix": [9, 5], "x": 11.25, "y": 4, "w": 1.25}, + {"matrix": [8, 6], "x": 13, "y": 4}, + {"matrix": [9, 6], "x": 14, "y": 4}, + {"matrix": [9, 7], "x": 15, "y": 4} + ] + }, + "LAYOUT_iso_tsangan": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [1, 0], "x": 1, "y": 0}, + {"matrix": [0, 1], "x": 2, "y": 0}, + {"matrix": [1, 1], "x": 3, "y": 0}, + {"matrix": [0, 2], "x": 4, "y": 0}, + {"matrix": [1, 2], "x": 5, "y": 0}, + {"matrix": [0, 3], "x": 6, "y": 0}, + {"matrix": [1, 3], "x": 7, "y": 0}, + {"matrix": [0, 4], "x": 8, "y": 0}, + {"matrix": [1, 4], "x": 9, "y": 0}, + {"matrix": [0, 5], "x": 10, "y": 0}, + {"matrix": [1, 5], "x": 11, "y": 0}, + {"matrix": [0, 6], "x": 12, "y": 0}, + {"matrix": [0, 7], "x": 13, "y": 0, "w": 2}, + {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [3, 0], "x": 1.5, "y": 1}, + {"matrix": [2, 1], "x": 2.5, "y": 1}, + {"matrix": [3, 1], "x": 3.5, "y": 1}, + {"matrix": [2, 2], "x": 4.5, "y": 1}, + {"matrix": [3, 2], "x": 5.5, "y": 1}, + {"matrix": [2, 3], "x": 6.5, "y": 1}, + {"matrix": [3, 3], "x": 7.5, "y": 1}, + {"matrix": [2, 4], "x": 8.5, "y": 1}, + {"matrix": [3, 4], "x": 9.5, "y": 1}, + {"matrix": [2, 5], "x": 10.5, "y": 1}, + {"matrix": [3, 5], "x": 11.5, "y": 1}, + {"matrix": [2, 6], "x": 12.5, "y": 1}, + {"matrix": [3, 7], "x": 15, "y": 1}, + {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [5, 0], "x": 1.75, "y": 2}, + {"matrix": [4, 1], "x": 2.75, "y": 2}, + {"matrix": [5, 1], "x": 3.75, "y": 2}, + {"matrix": [4, 2], "x": 4.75, "y": 2}, + {"matrix": [5, 2], "x": 5.75, "y": 2}, + {"matrix": [4, 3], "x": 6.75, "y": 2}, + {"matrix": [5, 3], "x": 7.75, "y": 2}, + {"matrix": [4, 4], "x": 8.75, "y": 2}, + {"matrix": [5, 4], "x": 9.75, "y": 2}, + {"matrix": [4, 5], "x": 10.75, "y": 2}, + {"matrix": [5, 5], "x": 11.75, "y": 2}, + {"matrix": [4, 6], "x": 12.75, "y": 2}, + {"matrix": [5, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2}, + {"matrix": [5, 7], "x": 15, "y": 2}, + {"matrix": [6, 0], "x": 0, "y": 3, "w": 1.25}, + {"matrix": [7, 0], "x": 1.25, "y": 3}, + {"matrix": [6, 1], "x": 2.25, "y": 3}, + {"matrix": [7, 1], "x": 3.25, "y": 3}, + {"matrix": [6, 2], "x": 4.25, "y": 3}, + {"matrix": [7, 2], "x": 5.25, "y": 3}, + {"matrix": [6, 3], "x": 6.25, "y": 3}, + {"matrix": [7, 3], "x": 7.25, "y": 3}, + {"matrix": [6, 4], "x": 8.25, "y": 3}, + {"matrix": [7, 4], "x": 9.25, "y": 3}, + {"matrix": [6, 5], "x": 10.25, "y": 3}, + {"matrix": [7, 5], "x": 11.25, "y": 3}, + {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75}, + {"matrix": [7, 6], "x": 14, "y": 3}, + {"matrix": [7, 7], "x": 15, "y": 3}, + {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.5}, + {"matrix": [9, 0], "x": 1.5, "y": 4}, + {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.5}, + {"matrix": [8, 3], "x": 4, "y": 4, "w": 7}, + {"matrix": [8, 5], "x": 11, "y": 4, "w": 1.5}, + {"matrix": [8, 6], "x": 13, "y": 4}, + {"matrix": [9, 6], "x": 14, "y": 4}, + {"matrix": [9, 7], "x": 15, "y": 4} + ] + }, + "LAYOUT_iso_tsangan_split_bs": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [1, 0], "x": 1, "y": 0}, + {"matrix": [0, 1], "x": 2, "y": 0}, + {"matrix": [1, 1], "x": 3, "y": 0}, + {"matrix": [0, 2], "x": 4, "y": 0}, + {"matrix": [1, 2], "x": 5, "y": 0}, + {"matrix": [0, 3], "x": 6, "y": 0}, + {"matrix": [1, 3], "x": 7, "y": 0}, + {"matrix": [0, 4], "x": 8, "y": 0}, + {"matrix": [1, 4], "x": 9, "y": 0}, + {"matrix": [0, 5], "x": 10, "y": 0}, + {"matrix": [1, 5], "x": 11, "y": 0}, + {"matrix": [0, 6], "x": 12, "y": 0}, + {"matrix": [1, 6], "x": 13, "y": 0}, + {"matrix": [0, 7], "x": 14, "y": 0}, + {"matrix": [2, 0], "x": 0, "y": 1, "w": 1.5}, + {"matrix": [3, 0], "x": 1.5, "y": 1}, + {"matrix": [2, 1], "x": 2.5, "y": 1}, + {"matrix": [3, 1], "x": 3.5, "y": 1}, + {"matrix": [2, 2], "x": 4.5, "y": 1}, + {"matrix": [3, 2], "x": 5.5, "y": 1}, + {"matrix": [2, 3], "x": 6.5, "y": 1}, + {"matrix": [3, 3], "x": 7.5, "y": 1}, + {"matrix": [2, 4], "x": 8.5, "y": 1}, + {"matrix": [3, 4], "x": 9.5, "y": 1}, + {"matrix": [2, 5], "x": 10.5, "y": 1}, + {"matrix": [3, 5], "x": 11.5, "y": 1}, + {"matrix": [2, 6], "x": 12.5, "y": 1}, + {"matrix": [3, 7], "x": 15, "y": 1}, + {"matrix": [4, 0], "x": 0, "y": 2, "w": 1.75}, + {"matrix": [5, 0], "x": 1.75, "y": 2}, + {"matrix": [4, 1], "x": 2.75, "y": 2}, + {"matrix": [5, 1], "x": 3.75, "y": 2}, + {"matrix": [4, 2], "x": 4.75, "y": 2}, + {"matrix": [5, 2], "x": 5.75, "y": 2}, + {"matrix": [4, 3], "x": 6.75, "y": 2}, + {"matrix": [5, 3], "x": 7.75, "y": 2}, + {"matrix": [4, 4], "x": 8.75, "y": 2}, + {"matrix": [5, 4], "x": 9.75, "y": 2}, + {"matrix": [4, 5], "x": 10.75, "y": 2}, + {"matrix": [5, 5], "x": 11.75, "y": 2}, + {"matrix": [4, 6], "x": 12.75, "y": 2}, + {"matrix": [5, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2}, + {"matrix": [5, 7], "x": 15, "y": 2}, + {"matrix": [6, 0], "x": 0, "y": 3, "w": 1.25}, + {"matrix": [7, 0], "x": 1.25, "y": 3}, + {"matrix": [6, 1], "x": 2.25, "y": 3}, + {"matrix": [7, 1], "x": 3.25, "y": 3}, + {"matrix": [6, 2], "x": 4.25, "y": 3}, + {"matrix": [7, 2], "x": 5.25, "y": 3}, + {"matrix": [6, 3], "x": 6.25, "y": 3}, + {"matrix": [7, 3], "x": 7.25, "y": 3}, + {"matrix": [6, 4], "x": 8.25, "y": 3}, + {"matrix": [7, 4], "x": 9.25, "y": 3}, + {"matrix": [6, 5], "x": 10.25, "y": 3}, + {"matrix": [7, 5], "x": 11.25, "y": 3}, + {"matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75}, + {"matrix": [7, 6], "x": 14, "y": 3}, + {"matrix": [7, 7], "x": 15, "y": 3}, + {"matrix": [8, 0], "x": 0, "y": 4, "w": 1.5}, + {"matrix": [9, 0], "x": 1.5, "y": 4}, + {"matrix": [8, 1], "x": 2.5, "y": 4, "w": 1.5}, + {"matrix": [8, 3], "x": 4, "y": 4, "w": 7}, + {"matrix": [8, 5], "x": 11, "y": 4, "w": 1.5}, + {"matrix": [8, 6], "x": 13, "y": 4}, + {"matrix": [9, 6], "x": 14, "y": 4}, + {"matrix": [9, 7], "x": 15, "y": 4} + ] + } + } +} diff --git a/keyboards/zeix/singa/rubrehaku/keymaps/default/keymap.c b/keyboards/zeix/singa/rubrehaku/keymaps/default/keymap.c new file mode 100644 index 0000000000..17e226b98c --- /dev/null +++ b/keyboards/zeix/singa/rubrehaku/keymaps/default/keymap.c @@ -0,0 +1,35 @@ +/* +Copyright 2024 zeix (@itsme-zeix) + +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_all( + KC_ESC, 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_BSLS, KC_BSPC, + 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_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_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, MO(1), + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT + ), + +[1] = LAYOUT_all( + KC_TRNS, 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_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 + ), +}; diff --git a/keyboards/zeix/singa/rubrehaku/matrix_diagram.md b/keyboards/zeix/singa/rubrehaku/matrix_diagram.md new file mode 100644 index 0000000000..cd11c0070a --- /dev/null +++ b/keyboards/zeix/singa/rubrehaku/matrix_diagram.md @@ -0,0 +1,30 @@ +# Matrix Diagram for Rubrehaku + +``` + ┌───┬───┐ + Split Backspace │16 │07 │ + └───┴───┘ +┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ +│00 │10 │01 │11 │02 │12 │03 │13 │04 │14 │05 │15 │06 │07 │ +├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┐ ┌─────┐ +│20 │30 │21 │31 │22 │32 │23 │33 │24 │34 │25 │35 │26 │36 │37 │ │ │ +├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ ┌──┴┐56 │ ISO Enter +│40 │50 │41 │51 │42 │52 │43 │53 │44 │54 │45 │55 │56 │57 │ │46 │ │ +├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ └───┴────┘ +│60 │61 │71 │62 │72 │63 │73 │64 │74 │65 │75 │66 │76 │77 │ +├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬─┬───┼───┼───┤ +│80 │90 │81 │83 │95 │ │86 │96 │97 │ +└─────┴───┴─────┴───────────────────────────┴─────┘ └───┴───┴───┘ +┌────┬───┐ +│60 │70 │ Split Left Shift +└────┴───┘ +┌────┬────┬────┬────────────────────────┬────┬────┐ +│80 │90 │81 │83 │85 │95 │ 6.25u +└────┴────┴────┴────────────────────────┴────┴────┘ +┌────┬────┬────┬───────────┬────┬───────┬────┬────┐ +│80 │90 │81 │92 │83 │94 │85 │95 │ Split Space (Left 2.75u) +└────┴────┴────┴───────────┴────┴───────┴────┴────┘ +┌────┬────┬────┬───────┬────┬───────────┬────┬────┐ +│80 │90 │81 │92 │83 │94 │85 │95 │ Split Space (Left 2.25u) +└────┴────┴────┴───────┴────┴───────────┴────┴────┘ +``` diff --git a/keyboards/zeix/singa/rubrehaku/readme.md b/keyboards/zeix/singa/rubrehaku/readme.md new file mode 100644 index 0000000000..f7fcc1f871 --- /dev/null +++ b/keyboards/zeix/singa/rubrehaku/readme.md @@ -0,0 +1,27 @@ +# SINGA Rubrehaku (PCB designed by Zeix) + +![Layout Compatibility](https://i.imgur.com/jTkWkJd.png) + +65% PCB designed to support Rubrehaku + +* Keyboard Maintainer: [Zeix](https://github.com/itsme-zeix) +* Hardware Supported: KLC x SINGA x Rubrehose Rubrehaku +* Hardware Availability: https://klc-playground.com/ + +Make example for this keyboard (after setting up your build environment): + + make zeix/singa/rubrehaku:default + +Flashing example for this keyboard: + + make zeix/singa/rubrehaku: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 3 ways: + +* **Bootmagic reset**: Hold down the top left key and plug in the keyboard. +* **Physical reset button**: Briefly press the `RESET` button twice or short the 'USB_BOOT' and `GND` pads and plug in the keyboard. +* **Keycode in layout**: Press the key mapped to `QK_BOOT`. From e7ad19bb953c6f430fb3501386b96962dbe9912c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Mart=C3=ADnez?= <58857054+elpekenin@users.noreply.github.com> Date: Tue, 11 Nov 2025 13:20:48 +0100 Subject: [PATCH 96/99] [Bugfix] QP error handling (#25591) * change QP so that any func can return error (`void` -> `bool` returns) --- drivers/painter/comms/qp_comms_dummy.c | 3 ++- drivers/painter/comms/qp_comms_i2c.c | 17 +++++++++++----- drivers/painter/comms/qp_comms_i2c.h | 2 +- drivers/painter/comms/qp_comms_spi.c | 10 ++++++--- drivers/painter/comms/qp_comms_spi.h | 6 +++--- drivers/painter/gc9xxx/qp_gc9107.c | 8 ++++---- drivers/painter/gc9xxx/qp_gc9a01.c | 8 ++++---- drivers/painter/ili9xxx/qp_ili9163.c | 8 ++++---- drivers/painter/ili9xxx/qp_ili9341.c | 8 ++++---- drivers/painter/ili9xxx/qp_ili9486.c | 16 +++++++++------ drivers/painter/ili9xxx/qp_ili9488.c | 8 ++++---- drivers/painter/ld7032/qp_ld7032.c | 28 ++++++++++++++++++-------- drivers/painter/sh1106/qp_sh1106.c | 3 +-- drivers/painter/sh1107/qp_sh1107.c | 3 +-- drivers/painter/ssd1351/qp_ssd1351.c | 12 ++++++----- drivers/painter/st77xx/qp_st7735.c | 8 ++++++-- drivers/painter/st77xx/qp_st7789.c | 8 ++++++-- quantum/painter/qp_comms.c | 12 +++++------ quantum/painter/qp_comms.h | 6 +++--- quantum/painter/qp_internal_driver.h | 6 +++--- 20 files changed, 108 insertions(+), 72 deletions(-) diff --git a/drivers/painter/comms/qp_comms_dummy.c b/drivers/painter/comms/qp_comms_dummy.c index 2ed49d2232..7a2aef5d37 100644 --- a/drivers/painter/comms/qp_comms_dummy.c +++ b/drivers/painter/comms/qp_comms_dummy.c @@ -15,8 +15,9 @@ static bool dummy_comms_start(painter_device_t device) { return true; } -static void dummy_comms_stop(painter_device_t device) { +static bool dummy_comms_stop(painter_device_t device) { // No-op. + return true; } uint32_t dummy_comms_send(painter_device_t device, const void *data, uint32_t byte_count) { diff --git a/drivers/painter/comms/qp_comms_i2c.c b/drivers/painter/comms/qp_comms_i2c.c index 93f503f3dd..f093c87ee4 100644 --- a/drivers/painter/comms/qp_comms_i2c.c +++ b/drivers/painter/comms/qp_comms_i2c.c @@ -35,7 +35,9 @@ uint32_t qp_comms_i2c_send_data(painter_device_t device, const void *data, uint3 return qp_comms_i2c_send_raw(device, data, byte_count); } -void qp_comms_i2c_stop(painter_device_t device) {} +bool qp_comms_i2c_stop(painter_device_t device) { + return true; +} //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Command+Data I2C support @@ -43,9 +45,9 @@ void qp_comms_i2c_stop(painter_device_t device) {} static const uint8_t cmd_byte = 0x00; static const uint8_t data_byte = 0x40; -void qp_comms_i2c_cmddata_send_command(painter_device_t device, uint8_t cmd) { +bool qp_comms_i2c_cmddata_send_command(painter_device_t device, uint8_t cmd) { uint8_t buf[2] = {cmd_byte, cmd}; - qp_comms_i2c_send_raw(device, &buf, 2); + return qp_comms_i2c_send_raw(device, &buf, 2); } uint32_t qp_comms_i2c_cmddata_send_data(painter_device_t device, const void *data, uint32_t byte_count) { @@ -58,7 +60,7 @@ uint32_t qp_comms_i2c_cmddata_send_data(painter_device_t device, const void *dat return byte_count; } -void qp_comms_i2c_bulk_command_sequence(painter_device_t device, const uint8_t *sequence, size_t sequence_len) { +bool qp_comms_i2c_bulk_command_sequence(painter_device_t device, const uint8_t *sequence, size_t sequence_len) { uint8_t buf[32]; for (size_t i = 0; i < sequence_len;) { uint8_t command = sequence[i]; @@ -67,12 +69,17 @@ void qp_comms_i2c_bulk_command_sequence(painter_device_t device, const uint8_t * buf[0] = cmd_byte; buf[1] = command; memcpy(&buf[2], &sequence[i + 3], num_bytes); - qp_comms_i2c_send_raw(device, buf, num_bytes + 2); + if (!qp_comms_i2c_send_raw(device, buf, num_bytes + 2)) { + return false; + } + if (delay > 0) { wait_ms(delay); } i += (3 + num_bytes); } + + return true; } const painter_comms_with_command_vtable_t i2c_comms_cmddata_vtable = { diff --git a/drivers/painter/comms/qp_comms_i2c.h b/drivers/painter/comms/qp_comms_i2c.h index 70083d6526..06a284dc15 100644 --- a/drivers/painter/comms/qp_comms_i2c.h +++ b/drivers/painter/comms/qp_comms_i2c.h @@ -19,7 +19,7 @@ typedef struct qp_comms_i2c_config_t { bool qp_comms_i2c_init(painter_device_t device); bool qp_comms_i2c_start(painter_device_t device); uint32_t qp_comms_i2c_send_data(painter_device_t device, const void* data, uint32_t byte_count); -void qp_comms_i2c_stop(painter_device_t device); +bool qp_comms_i2c_stop(painter_device_t device); extern const painter_comms_with_command_vtable_t i2c_comms_cmddata_vtable; diff --git a/drivers/painter/comms/qp_comms_spi.c b/drivers/painter/comms/qp_comms_spi.c index 4e6067394b..31b68dfdf6 100644 --- a/drivers/painter/comms/qp_comms_spi.c +++ b/drivers/painter/comms/qp_comms_spi.c @@ -45,11 +45,12 @@ uint32_t qp_comms_spi_send_data(painter_device_t device, const void *data, uint3 return byte_count - bytes_remaining; } -void qp_comms_spi_stop(painter_device_t device) { +bool qp_comms_spi_stop(painter_device_t device) { painter_driver_t * driver = (painter_driver_t *)device; qp_comms_spi_config_t *comms_config = (qp_comms_spi_config_t *)driver->comms_config; spi_stop(); gpio_write_pin_high(comms_config->chip_select_pin); + return true; } const painter_comms_vtable_t spi_comms_vtable = { @@ -97,14 +98,15 @@ uint32_t qp_comms_spi_dc_reset_send_data(painter_device_t device, const void *da return qp_comms_spi_send_data(device, data, byte_count); } -void qp_comms_spi_dc_reset_send_command(painter_device_t device, uint8_t cmd) { +bool qp_comms_spi_dc_reset_send_command(painter_device_t device, uint8_t cmd) { painter_driver_t * driver = (painter_driver_t *)device; qp_comms_spi_dc_reset_config_t *comms_config = (qp_comms_spi_dc_reset_config_t *)driver->comms_config; gpio_write_pin_low(comms_config->dc_pin); spi_write(cmd); + return true; } -void qp_comms_spi_dc_reset_bulk_command_sequence(painter_device_t device, const uint8_t *sequence, size_t sequence_len) { +bool qp_comms_spi_dc_reset_bulk_command_sequence(painter_device_t device, const uint8_t *sequence, size_t sequence_len) { painter_driver_t * driver = (painter_driver_t *)device; qp_comms_spi_dc_reset_config_t *comms_config = (qp_comms_spi_dc_reset_config_t *)driver->comms_config; for (size_t i = 0; i < sequence_len;) { @@ -126,6 +128,8 @@ void qp_comms_spi_dc_reset_bulk_command_sequence(painter_device_t device, const } i += (3 + num_bytes); } + + return true; } const painter_comms_with_command_vtable_t spi_comms_with_dc_vtable = { diff --git a/drivers/painter/comms/qp_comms_spi.h b/drivers/painter/comms/qp_comms_spi.h index c39ea95f72..bb1a841519 100644 --- a/drivers/painter/comms/qp_comms_spi.h +++ b/drivers/painter/comms/qp_comms_spi.h @@ -22,7 +22,7 @@ typedef struct qp_comms_spi_config_t { bool qp_comms_spi_init(painter_device_t device); bool qp_comms_spi_start(painter_device_t device); uint32_t qp_comms_spi_send_data(painter_device_t device, const void* data, uint32_t byte_count); -void qp_comms_spi_stop(painter_device_t device); +bool qp_comms_spi_stop(painter_device_t device); extern const painter_comms_vtable_t spi_comms_vtable; @@ -39,9 +39,9 @@ typedef struct qp_comms_spi_dc_reset_config_t { } qp_comms_spi_dc_reset_config_t; bool qp_comms_spi_dc_reset_init(painter_device_t device); -void qp_comms_spi_dc_reset_send_command(painter_device_t device, uint8_t cmd); +bool qp_comms_spi_dc_reset_send_command(painter_device_t device, uint8_t cmd); uint32_t qp_comms_spi_dc_reset_send_data(painter_device_t device, const void* data, uint32_t byte_count); -void qp_comms_spi_dc_reset_bulk_command_sequence(painter_device_t device, const uint8_t* sequence, size_t sequence_len); +bool qp_comms_spi_dc_reset_bulk_command_sequence(painter_device_t device, const uint8_t* sequence, size_t sequence_len); extern const painter_comms_with_command_vtable_t spi_comms_with_dc_vtable; diff --git a/drivers/painter/gc9xxx/qp_gc9107.c b/drivers/painter/gc9xxx/qp_gc9107.c index 108344da4f..f0eb24d0cd 100644 --- a/drivers/painter/gc9xxx/qp_gc9107.c +++ b/drivers/painter/gc9xxx/qp_gc9107.c @@ -32,7 +32,9 @@ __attribute__((weak)) bool qp_gc9107_init(painter_device_t device, painter_rotat }; // clang-format on - qp_comms_bulk_command_sequence(device, gc9107_init_sequence, sizeof(gc9107_init_sequence)); + if (!qp_comms_bulk_command_sequence(device, gc9107_init_sequence, sizeof(gc9107_init_sequence))) { + return false; + } // Configure the rotation (i.e. the ordering and direction of memory writes in GRAM) const uint8_t madctl[] = { @@ -41,9 +43,7 @@ __attribute__((weak)) bool qp_gc9107_init(painter_device_t device, painter_rotat [QP_ROTATION_180] = GC9XXX_MADCTL_BGR | GC9XXX_MADCTL_MX | GC9XXX_MADCTL_MY, [QP_ROTATION_270] = GC9XXX_MADCTL_BGR | GC9XXX_MADCTL_MV | GC9XXX_MADCTL_MY, }; - qp_comms_command_databyte(device, GC9XXX_SET_MEM_ACS_CTL, madctl[rotation]); - - return true; + return qp_comms_command_databyte(device, GC9XXX_SET_MEM_ACS_CTL, madctl[rotation]); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/drivers/painter/gc9xxx/qp_gc9a01.c b/drivers/painter/gc9xxx/qp_gc9a01.c index f037a4cc87..a9b5e4b057 100644 --- a/drivers/painter/gc9xxx/qp_gc9a01.c +++ b/drivers/painter/gc9xxx/qp_gc9a01.c @@ -45,7 +45,9 @@ __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotat }; // clang-format on - qp_comms_bulk_command_sequence(device, gc9a01_init_sequence, sizeof(gc9a01_init_sequence)); + if (!qp_comms_bulk_command_sequence(device, gc9a01_init_sequence, sizeof(gc9a01_init_sequence))) { + return false; + } // Configure the rotation (i.e. the ordering and direction of memory writes in GRAM) const uint8_t madctl[] = { @@ -54,9 +56,7 @@ __attribute__((weak)) bool qp_gc9a01_init(painter_device_t device, painter_rotat [QP_ROTATION_180] = GC9XXX_MADCTL_BGR | GC9XXX_MADCTL_MX | GC9XXX_MADCTL_MY, [QP_ROTATION_270] = GC9XXX_MADCTL_BGR | GC9XXX_MADCTL_MV | GC9XXX_MADCTL_MY, }; - qp_comms_command_databyte(device, GC9XXX_SET_MEM_ACS_CTL, madctl[rotation]); - - return true; + return qp_comms_command_databyte(device, GC9XXX_SET_MEM_ACS_CTL, madctl[rotation]); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/drivers/painter/ili9xxx/qp_ili9163.c b/drivers/painter/ili9xxx/qp_ili9163.c index 7f439dc317..74c5cb28ee 100644 --- a/drivers/painter/ili9xxx/qp_ili9163.c +++ b/drivers/painter/ili9xxx/qp_ili9163.c @@ -41,7 +41,9 @@ __attribute__((weak)) bool qp_ili9163_init(painter_device_t device, painter_rota ILI9XXX_CMD_DISPLAY_ON, 20, 0 }; // clang-format on - qp_comms_bulk_command_sequence(device, ili9163_init_sequence, sizeof(ili9163_init_sequence)); + if (!qp_comms_bulk_command_sequence(device, ili9163_init_sequence, sizeof(ili9163_init_sequence))) { + return false; + } // Configure the rotation (i.e. the ordering and direction of memory writes in GRAM) const uint8_t madctl[] = { @@ -50,9 +52,7 @@ __attribute__((weak)) bool qp_ili9163_init(painter_device_t device, painter_rota [QP_ROTATION_180] = ILI9XXX_MADCTL_BGR | ILI9XXX_MADCTL_MX | ILI9XXX_MADCTL_MY, [QP_ROTATION_270] = ILI9XXX_MADCTL_BGR | ILI9XXX_MADCTL_MV | ILI9XXX_MADCTL_MY, }; - qp_comms_command_databyte(device, ILI9XXX_SET_MEM_ACS_CTL, madctl[rotation]); - - return true; + return qp_comms_command_databyte(device, ILI9XXX_SET_MEM_ACS_CTL, madctl[rotation]); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/drivers/painter/ili9xxx/qp_ili9341.c b/drivers/painter/ili9xxx/qp_ili9341.c index a101b292aa..4ca22d8a73 100644 --- a/drivers/painter/ili9xxx/qp_ili9341.c +++ b/drivers/painter/ili9xxx/qp_ili9341.c @@ -48,7 +48,9 @@ __attribute__((weak)) bool qp_ili9341_init(painter_device_t device, painter_rota ILI9XXX_CMD_DISPLAY_ON, 20, 0 }; // clang-format on - qp_comms_bulk_command_sequence(device, ili9341_init_sequence, sizeof(ili9341_init_sequence)); + if (!qp_comms_bulk_command_sequence(device, ili9341_init_sequence, sizeof(ili9341_init_sequence))) { + return false; + } // Configure the rotation (i.e. the ordering and direction of memory writes in GRAM) const uint8_t madctl[] = { @@ -57,9 +59,7 @@ __attribute__((weak)) bool qp_ili9341_init(painter_device_t device, painter_rota [QP_ROTATION_180] = ILI9XXX_MADCTL_BGR | ILI9XXX_MADCTL_MX | ILI9XXX_MADCTL_MY, [QP_ROTATION_270] = ILI9XXX_MADCTL_BGR | ILI9XXX_MADCTL_MV | ILI9XXX_MADCTL_MY, }; - qp_comms_command_databyte(device, ILI9XXX_SET_MEM_ACS_CTL, madctl[rotation]); - - return true; + return qp_comms_command_databyte(device, ILI9XXX_SET_MEM_ACS_CTL, madctl[rotation]); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/drivers/painter/ili9xxx/qp_ili9486.c b/drivers/painter/ili9xxx/qp_ili9486.c index 48db779c04..df2d084aa3 100644 --- a/drivers/painter/ili9xxx/qp_ili9486.c +++ b/drivers/painter/ili9xxx/qp_ili9486.c @@ -37,7 +37,9 @@ bool qp_ili9486_init(painter_device_t device, painter_rotation_t rotation) { ILI9XXX_SET_INVERSION_CTL, 0, 1, 0x02, }; // clang-format on - qp_comms_bulk_command_sequence(device, ili9486_init_sequence, sizeof(ili9486_init_sequence)); + if (!qp_comms_bulk_command_sequence(device, ili9486_init_sequence, sizeof(ili9486_init_sequence))) { + return false; + } // Configure the rotation (i.e. the ordering and direction of memory writes in GRAM) const uint8_t madctl[] = { @@ -62,22 +64,22 @@ bool qp_ili9486_init(painter_device_t device, painter_rotation_t rotation) { ILI9XXX_CMD_DISPLAY_ON, 5, 0, }; // clang-format on - qp_comms_bulk_command_sequence(device, rotation_sequence, sizeof(rotation_sequence)); - - return true; + return qp_comms_bulk_command_sequence(device, rotation_sequence, sizeof(rotation_sequence)); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Driver vtable // waveshare variant needs some tweaks due to shift registers -static void qp_comms_spi_dc_reset_send_command_odd_cs_pulse(painter_device_t device, uint8_t cmd) { +static bool qp_comms_spi_dc_reset_send_command_odd_cs_pulse(painter_device_t device, uint8_t cmd) { painter_driver_t * driver = (painter_driver_t *)device; qp_comms_spi_dc_reset_config_t *comms_config = (qp_comms_spi_dc_reset_config_t *)driver->comms_config; gpio_write_pin_low(comms_config->spi_config.chip_select_pin); qp_comms_spi_dc_reset_send_command(device, cmd); gpio_write_pin_high(comms_config->spi_config.chip_select_pin); + + return true; } static uint32_t qp_comms_spi_send_data_odd_cs_pulse(painter_device_t device, const void *data, uint32_t byte_count) { @@ -124,7 +126,7 @@ static uint32_t qp_ili9486_send_data_toggling(painter_device_t device, const uin return ret; } -static void qp_comms_spi_send_command_sequence_odd_cs_pulse(painter_device_t device, const uint8_t *sequence, size_t sequence_len) { +static bool qp_comms_spi_send_command_sequence_odd_cs_pulse(painter_device_t device, const uint8_t *sequence, size_t sequence_len) { for (size_t i = 0; i < sequence_len;) { uint8_t command = sequence[i]; uint8_t delay = sequence[i + 1]; @@ -140,6 +142,8 @@ static void qp_comms_spi_send_command_sequence_odd_cs_pulse(painter_device_t dev } i += (3 + num_bytes); } + + return true; } static bool qp_ili9486_viewport(painter_device_t device, uint16_t left, uint16_t top, uint16_t right, uint16_t bottom) { diff --git a/drivers/painter/ili9xxx/qp_ili9488.c b/drivers/painter/ili9xxx/qp_ili9488.c index 63deaf5f2e..fd05db8751 100644 --- a/drivers/painter/ili9xxx/qp_ili9488.c +++ b/drivers/painter/ili9xxx/qp_ili9488.c @@ -41,7 +41,9 @@ __attribute__((weak)) bool qp_ili9488_init(painter_device_t device, painter_rota ILI9XXX_CMD_DISPLAY_ON, 20, 0 }; // clang-format on - qp_comms_bulk_command_sequence(device, ili9488_init_sequence, sizeof(ili9488_init_sequence)); + if (!qp_comms_bulk_command_sequence(device, ili9488_init_sequence, sizeof(ili9488_init_sequence))) { + return false; + } // Configure the rotation (i.e. the ordering and direction of memory writes in GRAM) const uint8_t madctl[] = { @@ -50,9 +52,7 @@ __attribute__((weak)) bool qp_ili9488_init(painter_device_t device, painter_rota [QP_ROTATION_180] = ILI9XXX_MADCTL_BGR | ILI9XXX_MADCTL_MX, [QP_ROTATION_270] = ILI9XXX_MADCTL_BGR | ILI9XXX_MADCTL_MV, }; - qp_comms_command_databyte(device, ILI9XXX_SET_MEM_ACS_CTL, madctl[rotation]); - - return true; + return qp_comms_command_databyte(device, ILI9XXX_SET_MEM_ACS_CTL, madctl[rotation]); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/drivers/painter/ld7032/qp_ld7032.c b/drivers/painter/ld7032/qp_ld7032.c index f43ae8e60d..d73430cc75 100644 --- a/drivers/painter/ld7032/qp_ld7032.c +++ b/drivers/painter/ld7032/qp_ld7032.c @@ -10,7 +10,7 @@ #include "qp_surface.h" #include "qp_surface_internal.h" -typedef void (*ld7032_driver_comms_send_command_and_data_func)(painter_device_t device, uint8_t cmd, uint8_t data); +typedef bool (*ld7032_driver_comms_send_command_and_data_func)(painter_device_t device, uint8_t cmd, uint8_t data); typedef uint32_t (*ld7032_driver_comms_send_command_and_databuf_func)(painter_device_t device, uint8_t cmd, const void *data, uint32_t byte_count); typedef struct ld7032_comms_with_command_vtable_t { @@ -25,12 +25,13 @@ typedef struct ld7032_comms_with_command_vtable_t { // LD7032 Internal API //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -void ld7032_comms_i2c_send_command_and_data(painter_device_t device, uint8_t cmd, uint8_t data) { +#ifdef QUANTUM_PAINTER_LD7032_I2C_ENABLE +bool ld7032_comms_i2c_send_command_and_data(painter_device_t device, uint8_t cmd, uint8_t data) { uint8_t buf[2] = {cmd, data}; - qp_comms_i2c_send_data(device, buf, 2); + return qp_comms_i2c_send_data(device, buf, 2); } -void ld7032_comms_i2c_bulk_command_sequence(painter_device_t device, const uint8_t *sequence, size_t sequence_len) { +bool ld7032_comms_i2c_bulk_command_sequence(painter_device_t device, const uint8_t *sequence, size_t sequence_len) { uint8_t buf[32]; for (size_t i = 0; i < sequence_len;) { uint8_t command = sequence[i]; @@ -38,12 +39,16 @@ void ld7032_comms_i2c_bulk_command_sequence(painter_device_t device, const uint8 uint8_t num_bytes = sequence[i + 2]; buf[0] = command; memcpy(&buf[1], &sequence[i + 3], num_bytes); - qp_comms_i2c_send_data(device, buf, num_bytes + 1); + if (!qp_comms_i2c_send_data(device, buf, num_bytes + 1)) { + return false; + } if (delay > 0) { wait_ms(delay); } i += (3 + num_bytes); } + + return true; } uint32_t ld7032_comms_i2c_send_command_and_databuf(painter_device_t device, uint8_t cmd, const void *data, uint32_t byte_count) { @@ -53,6 +58,7 @@ uint32_t ld7032_comms_i2c_send_command_and_databuf(painter_device_t device, uint memcpy(&buf[1], data, byte_count); return qp_comms_send(device, buf, byte_count + 1); } +#endif // QUANTUM_PAINTER_LD7032_I2C_ENABLE // Power control bool qp_ld7032_power(painter_device_t device, bool power_on) { @@ -201,7 +207,9 @@ __attribute__((weak)) bool qp_ld7032_init(painter_device_t device, painter_rotat }; // clang-format on - qp_comms_bulk_command_sequence(device, ld7032_init_sequence, sizeof(ld7032_init_sequence)); + if (!qp_comms_bulk_command_sequence(device, ld7032_init_sequence, sizeof(ld7032_init_sequence))) { + return false; + } uint8_t display_y_start = 40 - driver->oled.base.panel_height; uint8_t display_x_start = (128 - driver->oled.base.panel_width) / 2; @@ -223,7 +231,9 @@ __attribute__((weak)) bool qp_ld7032_init(painter_device_t device, painter_rotat ld7032_memory_setup[13] = ld7032_memory_setup[4] + 1; ld7032_memory_setup[17] = driver->oled.base.panel_height; - qp_comms_bulk_command_sequence(device, ld7032_memory_setup, sizeof(ld7032_memory_setup)); + if (!qp_comms_bulk_command_sequence(device, ld7032_memory_setup, sizeof(ld7032_memory_setup))) { + return false; + } uint8_t write_direction = 0; switch (rotation) { @@ -245,7 +255,9 @@ __attribute__((weak)) bool qp_ld7032_init(painter_device_t device, painter_rotat painter_driver_t * pdriver = (painter_driver_t *)device; ld7032_comms_with_command_vtable_t *comms_vtable = (ld7032_comms_with_command_vtable_t *)pdriver->comms_vtable; - comms_vtable->send_command_data(device, LD7032_WRITE_DIRECTION, write_direction); + if (!comms_vtable->send_command_data(device, LD7032_WRITE_DIRECTION, write_direction)) { + return false; + } qp_ld7032_power(device, true); diff --git a/drivers/painter/sh1106/qp_sh1106.c b/drivers/painter/sh1106/qp_sh1106.c index 4117115aec..85da4a973a 100644 --- a/drivers/painter/sh1106/qp_sh1106.c +++ b/drivers/painter/sh1106/qp_sh1106.c @@ -71,8 +71,7 @@ __attribute__((weak)) bool qp_sh1106_init(painter_device_t device, painter_rotat sh1106_init_sequence[20] = 0x02; } - qp_comms_bulk_command_sequence(device, sh1106_init_sequence, sizeof(sh1106_init_sequence)); - return true; + return qp_comms_bulk_command_sequence(device, sh1106_init_sequence, sizeof(sh1106_init_sequence)); } // Screen flush diff --git a/drivers/painter/sh1107/qp_sh1107.c b/drivers/painter/sh1107/qp_sh1107.c index f4cbd49e40..0b48690803 100644 --- a/drivers/painter/sh1107/qp_sh1107.c +++ b/drivers/painter/sh1107/qp_sh1107.c @@ -73,8 +73,7 @@ __attribute__((weak)) bool qp_sh1107_init(painter_device_t device, painter_rotat sh1107_init_sequence[20] = 0x02; } - qp_comms_bulk_command_sequence(device, sh1107_init_sequence, sizeof(sh1107_init_sequence)); - return true; + return qp_comms_bulk_command_sequence(device, sh1107_init_sequence, sizeof(sh1107_init_sequence)); } // Screen flush diff --git a/drivers/painter/ssd1351/qp_ssd1351.c b/drivers/painter/ssd1351/qp_ssd1351.c index 3270a362c2..3f652e674e 100644 --- a/drivers/painter/ssd1351/qp_ssd1351.c +++ b/drivers/painter/ssd1351/qp_ssd1351.c @@ -44,7 +44,9 @@ __attribute__((weak)) bool qp_ssd1351_init(painter_device_t device, painter_rota SSD1351_DISPLAYON, 5, 0, }; // clang-format on - qp_comms_bulk_command_sequence(device, ssd1351_init_sequence, sizeof(ssd1351_init_sequence)); + if (!qp_comms_bulk_command_sequence(device, ssd1351_init_sequence, sizeof(ssd1351_init_sequence))) { + return false; + } // Configure the rotation (i.e. the ordering and direction of memory writes in GRAM) const uint8_t madctl[] = { @@ -53,10 +55,10 @@ __attribute__((weak)) bool qp_ssd1351_init(painter_device_t device, painter_rota [QP_ROTATION_180] = SSD1351_MADCTL_BGR | SSD1351_MADCTL_MX, [QP_ROTATION_270] = SSD1351_MADCTL_BGR | SSD1351_MADCTL_MV, }; - qp_comms_command_databyte(device, SSD1351_SETREMAP, madctl[rotation]); - qp_comms_command_databyte(device, SSD1351_STARTLINE, (rotation == QP_ROTATION_0 || rotation == QP_ROTATION_90) ? driver->base.panel_height : 0); - - return true; + if (!qp_comms_command_databyte(device, SSD1351_SETREMAP, madctl[rotation])) { + return false; + } + return qp_comms_command_databyte(device, SSD1351_STARTLINE, (rotation == QP_ROTATION_0 || rotation == QP_ROTATION_90) ? driver->base.panel_height : 0); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/drivers/painter/st77xx/qp_st7735.c b/drivers/painter/st77xx/qp_st7735.c index 1db0d01dcb..9e3df477c8 100644 --- a/drivers/painter/st77xx/qp_st7735.c +++ b/drivers/painter/st77xx/qp_st7735.c @@ -63,7 +63,9 @@ __attribute__((weak)) bool qp_st7735_init(painter_device_t device, painter_rotat ST77XX_CMD_DISPLAY_ON, 20, 0 }; // clang-format on - qp_comms_bulk_command_sequence(device, st7735_init_sequence, sizeof(st7735_init_sequence)); + if (!qp_comms_bulk_command_sequence(device, st7735_init_sequence, sizeof(st7735_init_sequence))) { + return false; + } // Configure the rotation (i.e. the ordering and direction of memory writes in GRAM) const uint8_t madctl[] = { @@ -72,7 +74,9 @@ __attribute__((weak)) bool qp_st7735_init(painter_device_t device, painter_rotat [QP_ROTATION_180] = ST77XX_MADCTL_BGR | ST77XX_MADCTL_MX | ST77XX_MADCTL_MY, [QP_ROTATION_270] = ST77XX_MADCTL_BGR | ST77XX_MADCTL_MV | ST77XX_MADCTL_MY, }; - qp_comms_command_databyte(device, ST77XX_SET_MADCTL, madctl[rotation]); + if (!qp_comms_command_databyte(device, ST77XX_SET_MADCTL, madctl[rotation])) { + return false; + } #ifndef ST7735_NO_AUTOMATIC_VIEWPORT_OFFSETS st7735_automatic_viewport_offsets(device, rotation); diff --git a/drivers/painter/st77xx/qp_st7789.c b/drivers/painter/st77xx/qp_st7789.c index 855a9cc0c8..b4e24886da 100644 --- a/drivers/painter/st77xx/qp_st7789.c +++ b/drivers/painter/st77xx/qp_st7789.c @@ -60,7 +60,9 @@ __attribute__((weak)) bool qp_st7789_init(painter_device_t device, painter_rotat ST77XX_CMD_DISPLAY_ON, 20, 0 }; // clang-format on - qp_comms_bulk_command_sequence(device, st7789_init_sequence, sizeof(st7789_init_sequence)); + if (!qp_comms_bulk_command_sequence(device, st7789_init_sequence, sizeof(st7789_init_sequence))) { + return false; + } // Configure the rotation (i.e. the ordering and direction of memory writes in GRAM) const uint8_t madctl[] = { @@ -69,7 +71,9 @@ __attribute__((weak)) bool qp_st7789_init(painter_device_t device, painter_rotat [QP_ROTATION_180] = ST77XX_MADCTL_RGB | ST77XX_MADCTL_MX | ST77XX_MADCTL_MY, [QP_ROTATION_270] = ST77XX_MADCTL_RGB | ST77XX_MADCTL_MV | ST77XX_MADCTL_MY, }; - qp_comms_command_databyte(device, ST77XX_SET_MADCTL, madctl[rotation]); + if (!qp_comms_command_databyte(device, ST77XX_SET_MADCTL, madctl[rotation])) { + return false; + } #ifndef ST7789_NO_AUTOMATIC_VIEWPORT_OFFSETS st7789_automatic_viewport_offsets(device, rotation); diff --git a/quantum/painter/qp_comms.c b/quantum/painter/qp_comms.c index 63667783e1..402165b119 100644 --- a/quantum/painter/qp_comms.c +++ b/quantum/painter/qp_comms.c @@ -49,15 +49,15 @@ uint32_t qp_comms_send(painter_device_t device, const void *data, uint32_t byte_ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Comms APIs that use a D/C pin -void qp_comms_command(painter_device_t device, uint8_t cmd) { +bool qp_comms_command(painter_device_t device, uint8_t cmd) { painter_driver_t * driver = (painter_driver_t *)device; painter_comms_with_command_vtable_t *comms_vtable = (painter_comms_with_command_vtable_t *)driver->comms_vtable; - comms_vtable->send_command(device, cmd); + return comms_vtable->send_command(device, cmd); } -void qp_comms_command_databyte(painter_device_t device, uint8_t cmd, uint8_t data) { +bool qp_comms_command_databyte(painter_device_t device, uint8_t cmd, uint8_t data) { qp_comms_command(device, cmd); - qp_comms_send(device, &data, sizeof(data)); + return qp_comms_send(device, &data, sizeof(data)); } uint32_t qp_comms_command_databuf(painter_device_t device, uint8_t cmd, const void *data, uint32_t byte_count) { @@ -65,8 +65,8 @@ uint32_t qp_comms_command_databuf(painter_device_t device, uint8_t cmd, const vo return qp_comms_send(device, data, byte_count); } -void qp_comms_bulk_command_sequence(painter_device_t device, const uint8_t *sequence, size_t sequence_len) { +bool qp_comms_bulk_command_sequence(painter_device_t device, const uint8_t *sequence, size_t sequence_len) { painter_driver_t * driver = (painter_driver_t *)device; painter_comms_with_command_vtable_t *comms_vtable = (painter_comms_with_command_vtable_t *)driver->comms_vtable; - comms_vtable->bulk_command_sequence(device, sequence, sequence_len); + return comms_vtable->bulk_command_sequence(device, sequence, sequence_len); } diff --git a/quantum/painter/qp_comms.h b/quantum/painter/qp_comms.h index 8fbf25c201..dc5892b1bb 100644 --- a/quantum/painter/qp_comms.h +++ b/quantum/painter/qp_comms.h @@ -19,7 +19,7 @@ uint32_t qp_comms_send(painter_device_t device, const void* data, uint32_t byte_ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Comms APIs that use a D/C pin -void qp_comms_command(painter_device_t device, uint8_t cmd); -void qp_comms_command_databyte(painter_device_t device, uint8_t cmd, uint8_t data); +bool qp_comms_command(painter_device_t device, uint8_t cmd); +bool qp_comms_command_databyte(painter_device_t device, uint8_t cmd, uint8_t data); uint32_t qp_comms_command_databuf(painter_device_t device, uint8_t cmd, const void* data, uint32_t byte_count); -void qp_comms_bulk_command_sequence(painter_device_t device, const uint8_t* sequence, size_t sequence_len); +bool qp_comms_bulk_command_sequence(painter_device_t device, const uint8_t* sequence, size_t sequence_len); diff --git a/quantum/painter/qp_internal_driver.h b/quantum/painter/qp_internal_driver.h index 69da966f8c..5b6efe2c83 100644 --- a/quantum/painter/qp_internal_driver.h +++ b/quantum/painter/qp_internal_driver.h @@ -36,7 +36,7 @@ typedef struct painter_driver_vtable_t { typedef bool (*painter_driver_comms_init_func)(painter_device_t device); typedef bool (*painter_driver_comms_start_func)(painter_device_t device); -typedef void (*painter_driver_comms_stop_func)(painter_device_t device); +typedef bool (*painter_driver_comms_stop_func)(painter_device_t device); typedef uint32_t (*painter_driver_comms_send_func)(painter_device_t device, const void *data, uint32_t byte_count); typedef struct painter_comms_vtable_t { @@ -46,8 +46,8 @@ typedef struct painter_comms_vtable_t { painter_driver_comms_send_func comms_send; } painter_comms_vtable_t; -typedef void (*painter_driver_comms_send_command_func)(painter_device_t device, uint8_t cmd); -typedef void (*painter_driver_comms_bulk_command_sequence)(painter_device_t device, const uint8_t *sequence, size_t sequence_len); +typedef bool (*painter_driver_comms_send_command_func)(painter_device_t device, uint8_t cmd); +typedef bool (*painter_driver_comms_bulk_command_sequence)(painter_device_t device, const uint8_t *sequence, size_t sequence_len); typedef struct painter_comms_with_command_vtable_t { painter_comms_vtable_t base; // must be first, so this object can be cast from the painter_comms_vtable_t* type From ed343ddad4832a0a48c8ad794e949a595dcf3cfb Mon Sep 17 00:00:00 2001 From: Cipulot <40441626+Cipulot@users.noreply.github.com> Date: Tue, 11 Nov 2025 21:21:50 +0900 Subject: [PATCH 97/99] VIA Keylog Change (#25504) * WIP * Update via.c temptive fix in formatting for lint errors. * Update via.c let's try this one, thanks mobile GitHub app to not showing spaces right. * Update quantum/via.c Co-authored-by: Joel Challis * Update quantum/via.c Co-authored-by: Joel Challis * Merge branch 'qmk:master' into via_keylog_change --- quantum/via.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/quantum/via.c b/quantum/via.c index 9446811af6..130ff74794 100644 --- a/quantum/via.c +++ b/quantum/via.c @@ -37,6 +37,10 @@ #include "version.h" // for QMK_BUILDDATE used in EEPROM magic #include "nvm_via.h" +#if defined(SECURE_ENABLE) +# include "secure.h" +#endif + #if defined(AUDIO_ENABLE) # include "audio.h" #endif @@ -322,8 +326,13 @@ void raw_hid_receive(uint8_t *data, uint8_t length) { uint8_t rows = 28 / ((MATRIX_COLS + 7) / 8); uint8_t i = 2; for (uint8_t row = 0; row < rows && row + offset < MATRIX_ROWS; row++) { -#ifdef VIA_INSECURE +#if defined(VIA_INSECURE) matrix_row_t value = matrix_get_row(row + offset); +#elif defined(SECURE_ENABLE) + matrix_row_t value = 0; + if (secure_is_unlocked()) { + value = matrix_get_row(row + offset); + } #else matrix_row_t value = 0; #endif From a58d2dd7c9d0fcd5d86a1d63c7429af934c18f4c Mon Sep 17 00:00:00 2001 From: "Ricardo (XenGi) Band" Date: Sat, 15 Nov 2025 18:39:35 +0100 Subject: [PATCH 98/99] wip --- keyboards/mkbd65/config.h | 19 +- keyboards/mkbd65/info.json | 16 -- keyboards/mkbd65/keyboard.json | 167 ++++++++++++++++++ keyboards/mkbd65/keymaps/ansi/README.md | 5 +- keyboards/mkbd65/keymaps/ansi/keymap.c | 1 + keyboards/mkbd65/keymaps/de/README.md | 5 +- keyboards/mkbd65/keymaps/en_us_intl/README.md | 5 +- keyboards/mkbd65/keymaps/iso/README.md | 1 + keyboards/mkbd65/rev0/mkbd65.c | 2 + keyboards/mkbd65/rev0/mkbd65.h | 2 - keyboards/mkbd65/rules.mk | 31 +++- 11 files changed, 219 insertions(+), 35 deletions(-) delete mode 100644 keyboards/mkbd65/info.json create mode 100644 keyboards/mkbd65/keyboard.json diff --git a/keyboards/mkbd65/config.h b/keyboards/mkbd65/config.h index 4ac3a7eaf5..4b3907c132 100644 --- a/keyboards/mkbd65/config.h +++ b/keyboards/mkbd65/config.h @@ -1,13 +1,12 @@ -// Copyright 2023 XenGi (@XenGi) +// Copyright 2023 XenGi // SPDX-License-Identifier: GPL-2.0-or-later -#pragma once +// optimize firmware +#undef LOCKING_SUPPORT_ENABLE +#undef LOCKING_RESYNC_ENABLE +#define LAYER_STATE_8BIT + +// disable features to save on code size +#define NO_ACTION_TAPPING +#define NO_ACTION_ONESHOT -// disable debugging -//#define NO_DEBUG -// disable printing/debugging using hid_listen -//#define NO_PRINT -// disable tap dance and other tapping features -//#define NO_ACTION_TAPPING -// disable one-shot modifiers -//#define NO_ACTION_ONESHOT diff --git a/keyboards/mkbd65/info.json b/keyboards/mkbd65/info.json deleted file mode 100644 index 7a2cd0c8f7..0000000000 --- a/keyboards/mkbd65/info.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "keyboard_name": "mkbd65", - "manufacturer": "XenGi", - "url": "https://mkbd65.xengi.de", - "maintainer": "XenGi", - "author": ["XenGi"], - "debounce": 5, - "diode_direction": "ROW2COL", - "bootmagic": { - "enabled": true, - "matrix": [0, 0] - }, - "tags": ["mobile", "65%"], - "description": "A mobile keyboard addon for modern smartphones. Fits any smartphones within some minimal size requirements. Supports any keyboard layout you want, as long as it doesn't need more keys.", - "short": "A mobile keyboard addon for modern smartphones." -} diff --git a/keyboards/mkbd65/keyboard.json b/keyboards/mkbd65/keyboard.json new file mode 100644 index 0000000000..3d1fe2ec2a --- /dev/null +++ b/keyboards/mkbd65/keyboard.json @@ -0,0 +1,167 @@ +{ + "manufacturer": "XenGi", + "keyboard_name": "mkbd65", + "maintainer": "XenGi", + "bootloader": "atmel-dfu", + "diode_direction": "ROW2COL", + "debounce": 5, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgb_matrix": false, + "rgblight": false + }, + "bootmagic": { + "enabled": true, + "matrix": [0, 0] + }, + "matrix_pins": { + "cols": ["D4", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0"], + "rows": ["D5", "D3", "D2", "D1", "D0"] + }, + "processor": "atmega32u4", + "url": "https://mkbd65.xengi.de", + "bootloader_instructions": "Press the button marked RESET on the back of the PCB", + "tags": ["mobile", "65%"], + "usb": { + "device_version": "0.0.1", + "pid": "0x4803", + "vid": "0x1209" + }, + "build": { + "lto": true + }, + "layouts": { + "LAYOUT": { + "layout_ansi": [ + { "matrix": [0, 0], "x": 0, "y": 0, "label": "Esc" }, + { "matrix": [0, 1], "x": 1, "y": 0, "label": "1" }, + { "matrix": [0, 2], "x": 2, "y": 0, "label": "2" }, + { "matrix": [0, 3], "x": 3, "y": 0, "label": "3" }, + { "matrix": [0, 4], "x": 4, "y": 0, "label": "4" }, + { "matrix": [0, 5], "x": 5, "y": 0, "label": "5" }, + { "matrix": [0, 6], "x": 6, "y": 0, "label": "6" }, + { "matrix": [0, 7], "x": 7, "y": 0, "label": "7" }, + { "matrix": [0, 8], "x": 8, "y": 0, "label": "8" }, + { "matrix": [0, 9], "x": 9, "y": 0, "label": "9" }, + { "matrix": [0, 10], "x": 10, "y": 0, "label": "0" }, + { "matrix": [0, 11], "x": 11, "y": 0, "w": 2, "label": "Backspace" }, + { "matrix": [1, 0], "x": 1, "y": 0, "label": "Q" }, + { "matrix": [1, 1], "x": 1, "y": 1, "label": "W" }, + { "matrix": [1, 2], "x": 1, "y": 2, "label": "E" }, + { "matrix": [1, 3], "x": 1, "y": 3, "label": "R" }, + { "matrix": [1, 4], "x": 1, "y": 4, "label": "T" }, + { "matrix": [1, 5], "x": 1, "y": 5, "label": "Y" }, + { "matrix": [1, 6], "x": 1, "y": 6, "label": "U" }, + { "matrix": [1, 7], "x": 1, "y": 7, "label": "I" }, + { "matrix": [1, 8], "x": 1, "y": 8, "label": "O" }, + { "matrix": [1, 9], "x": 1, "y": 9, "label": "P" }, + { "matrix": [1, 10], "x": 1, "y": 10, "label": "[" }, + { "matrix": [1, 11], "x": 1, "y": 11, "label": "]" }, + { "matrix": [1, 11], "x": 1, "y": 12, "label": "\\" }, + { "matrix": [2, 0], "x": 2, "y": 0, "label": "A" }, + { "matrix": [2, 1], "x": 2, "y": 1, "label": "S" }, + { "matrix": [2, 2], "x": 2, "y": 2, "label": "D" }, + { "matrix": [2, 3], "x": 2, "y": 3, "label": "F" }, + { "matrix": [2, 4], "x": 2, "y": 4, "label": "G" }, + { "matrix": [2, 5], "x": 2, "y": 5, "label": "H" }, + { "matrix": [2, 6], "x": 2, "y": 6, "label": "J" }, + { "matrix": [2, 7], "x": 2, "y": 7, "label": "K" }, + { "matrix": [2, 8], "x": 2, "y": 8, "label": "L" }, + { "matrix": [2, 9], "x": 2, "y": 9, "label": ";" }, + { "matrix": [2, 10], "x": 2, "y": 10, "label": "'" }, + { "matrix": [2, 11], "x": 2, "y": 11, "w": 2, "label": "Enter" }, + { "matrix": [3, 0], "x": 3, "y": 0, "label": "Z" }, + { "matrix": [3, 1], "x": 3, "y": 1, "label": "X" }, + { "matrix": [3, 2], "x": 3, "y": 2, "label": "C" }, + { "matrix": [3, 3], "x": 3, "y": 3, "label": "V" }, + { "matrix": [3, 4], "x": 3, "y": 4, "label": "B" }, + { "matrix": [3, 5], "x": 3, "y": 5, "label": "N" }, + { "matrix": [3, 6], "x": 3, "y": 6, "label": "M" }, + { "matrix": [3, 7], "x": 3, "y": 7, "label": "," }, + { "matrix": [3, 8], "x": 3, "y": 8, "label": "." }, + { "matrix": [3, 9], "x": 3, "y": 9, "label": "/" }, + { "matrix": [3, 10], "x": 3, "y": 10, "label": "Up" }, + { "matrix": [3, 11], "x": 3, "y": 11, "w": 2, "label": "ShiftR" }, + { "matrix": [4, 0], "x": 4, "y": 0, "label": "CtrlL" }, + { "matrix": [4, 1], "x": 4, "y": 1, "label": "Fn" }, + { "matrix": [4, 2], "x": 4, "y": 2, "label": "ShiftL" }, + { "matrix": [4, 3], "x": 4, "y": 3, "label": "Alt" }, + { "matrix": [4, 4], "x": 4, "y": 4, "w": 3, "label": "Space" }, + { "matrix": [4, 7], "x": 4, "y": 7, "label": "-" }, + { "matrix": [4, 8], "x": 4, "y": 8, "label": "=" }, + { "matrix": [4, 9], "x": 4, "y": 9, "label": "Left" }, + { "matrix": [4, 10], "x": 4, "y": 10, "label": "Down" }, + { "matrix": [4, 11], "x": 4, "y": 11, "label": "Right" }, + { "matrix": [4, 12], "x": 4, "y": 12, "label": "CtrlR" } + ], + "layout_iso": [ + { "matrix": [0, 0], "x": 0, "y": 0, "label": "Esc" }, + { "matrix": [0, 1], "x": 1, "y": 0, "label": "1" }, + { "matrix": [0, 2], "x": 2, "y": 0, "label": "2" }, + { "matrix": [0, 3], "x": 3, "y": 0, "label": "3" }, + { "matrix": [0, 4], "x": 4, "y": 0, "label": "4" }, + { "matrix": [0, 5], "x": 5, "y": 0, "label": "5" }, + { "matrix": [0, 6], "x": 6, "y": 0, "label": "6" }, + { "matrix": [0, 7], "x": 7, "y": 0, "label": "7" }, + { "matrix": [0, 8], "x": 8, "y": 0, "label": "8" }, + { "matrix": [0, 9], "x": 9, "y": 0, "label": "9" }, + { "matrix": [0, 10], "x": 10, "y": 0, "label": "0" }, + { "matrix": [0, 11], "x": 11, "y": 0, "w": 2, "label": "Backspace" }, + { "matrix": [1, 0], "x": 1, "y": 0, "label": "Q" }, + { "matrix": [1, 1], "x": 1, "y": 1, "label": "W" }, + { "matrix": [1, 2], "x": 1, "y": 2, "label": "E" }, + { "matrix": [1, 3], "x": 1, "y": 3, "label": "R" }, + { "matrix": [1, 4], "x": 1, "y": 4, "label": "T" }, + { "matrix": [1, 5], "x": 1, "y": 5, "label": "Y" }, + { "matrix": [1, 6], "x": 1, "y": 6, "label": "U" }, + { "matrix": [1, 7], "x": 1, "y": 7, "label": "I" }, + { "matrix": [1, 8], "x": 1, "y": 8, "label": "O" }, + { "matrix": [1, 9], "x": 1, "y": 9, "label": "P" }, + { "matrix": [1, 10], "x": 1, "y": 10, "label": "[" }, + { "matrix": [1, 11], "x": 1, "y": 11, "label": "]" }, + { "matrix": [2, 0], "x": 2, "y": 0, "label": "A" }, + { "matrix": [2, 1], "x": 2, "y": 1, "label": "S" }, + { "matrix": [2, 2], "x": 2, "y": 2, "label": "D" }, + { "matrix": [2, 3], "x": 2, "y": 3, "label": "F" }, + { "matrix": [2, 4], "x": 2, "y": 4, "label": "G" }, + { "matrix": [2, 5], "x": 2, "y": 5, "label": "H" }, + { "matrix": [2, 6], "x": 2, "y": 6, "label": "J" }, + { "matrix": [2, 7], "x": 2, "y": 7, "label": "K" }, + { "matrix": [2, 8], "x": 2, "y": 8, "label": "L" }, + { "matrix": [2, 9], "x": 2, "y": 9, "label": ";" }, + { "matrix": [2, 10], "x": 2, "y": 10, "label": "'" }, + { "matrix": [2, 11], "x": 2, "y": 11, "label": "\\" }, + { "matrix": [1, 12], "x": 1, "y": 12, "h": 2, "label": "Enter" }, + { "matrix": [3, 0], "x": 3, "y": 0, "label": "Z" }, + { "matrix": [3, 1], "x": 3, "y": 1, "label": "X" }, + { "matrix": [3, 2], "x": 3, "y": 2, "label": "C" }, + { "matrix": [3, 3], "x": 3, "y": 3, "label": "V" }, + { "matrix": [3, 4], "x": 3, "y": 4, "label": "B" }, + { "matrix": [3, 5], "x": 3, "y": 5, "label": "N" }, + { "matrix": [3, 6], "x": 3, "y": 6, "label": "M" }, + { "matrix": [3, 7], "x": 3, "y": 7, "label": "," }, + { "matrix": [3, 8], "x": 3, "y": 8, "label": "." }, + { "matrix": [3, 9], "x": 3, "y": 9, "label": "/" }, + { "matrix": [3, 10], "x": 3, "y": 10, "label": "Up" }, + { "matrix": [3, 11], "x": 3, "y": 11, "w": 2, "label": "ShiftR" }, + { "matrix": [4, 0], "x": 4, "y": 0, "label": "CtrlL" }, + { "matrix": [4, 1], "x": 4, "y": 1, "label": "Fn" }, + { "matrix": [4, 2], "x": 4, "y": 2, "label": "ShiftL" }, + { "matrix": [4, 3], "x": 4, "y": 3, "label": "Alt" }, + { "matrix": [4, 4], "x": 4, "y": 4, "w": 3, "label": "Space" }, + { "matrix": [4, 7], "x": 4, "y": 7, "label": "-" }, + { "matrix": [4, 8], "x": 4, "y": 8, "label": "=" }, + { "matrix": [4, 9], "x": 4, "y": 9, "label": "Left" }, + { "matrix": [4, 10], "x": 4, "y": 10, "label": "Down" }, + { "matrix": [4, 11], "x": 4, "y": 11, "label": "Right" }, + { "matrix": [4, 12], "x": 4, "y": 12, "label": "CtrlR" } + ] + } + } +} + diff --git a/keyboards/mkbd65/keymaps/ansi/README.md b/keyboards/mkbd65/keymaps/ansi/README.md index 96e8f7bb14..f68aaf41fc 100644 --- a/keyboards/mkbd65/keymaps/ansi/README.md +++ b/keyboards/mkbd65/keymaps/ansi/README.md @@ -39,7 +39,7 @@ This is the key matrix (no label means the key from layer 0 will be used): ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ ║ ║ ß ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ -║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ¿ ║ ║ ║ +║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ¿ ║ ║ ║ ╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ ║ ║ ║ ║░░░░║ ║ ║ ║ ║ ║ ║ ║ ╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ @@ -49,10 +49,11 @@ This is the key matrix (no label means the key from layer 0 will be used): ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ F11║ F12║ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ -║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ` ║ Super ║ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ` ║ Super ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║PgUp║ ║ ╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ ║ ║░░░░║ ║ ║ Tab ║ ║ ║Pos1║PgDn║ End║ ║ ╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ ``` + diff --git a/keyboards/mkbd65/keymaps/ansi/keymap.c b/keyboards/mkbd65/keymaps/ansi/keymap.c index fb5f196098..b023feab91 100644 --- a/keyboards/mkbd65/keymaps/ansi/keymap.c +++ b/keyboards/mkbd65/keymaps/ansi/keymap.c @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include QMK_KEYBOARD_H +#include "quantum.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_ansi( /* Base layer */ diff --git a/keyboards/mkbd65/keymaps/de/README.md b/keyboards/mkbd65/keymaps/de/README.md index f5c29d8e85..c37325f914 100644 --- a/keyboards/mkbd65/keymaps/de/README.md +++ b/keyboards/mkbd65/keymaps/de/README.md @@ -37,7 +37,7 @@ This is the key matrix (no label means the key from layer 0 will be used): ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ -║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ║ ║ | ║ ║ +║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ║ ║ | ║ ║ ╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╬════╣ ║ ║ ║ ║░░░░║ ║ \ ║ ║ ║ ║ ║ ║ ╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ @@ -47,10 +47,11 @@ This is the key matrix (no label means the key from layer 0 will be used): ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ F11║ F12║ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣Supr║ -║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ^ ║ ║ ║ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ^ ║ ║ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╣ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║PgUp║ ║ ║ ╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╬════╣ ║ ║░░░░║ ║ ║ Tab ║ ║ ║Pos1║PgDn║ End║ ║ ╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ ``` + diff --git a/keyboards/mkbd65/keymaps/en_us_intl/README.md b/keyboards/mkbd65/keymaps/en_us_intl/README.md index 96e8f7bb14..f68aaf41fc 100644 --- a/keyboards/mkbd65/keymaps/en_us_intl/README.md +++ b/keyboards/mkbd65/keymaps/en_us_intl/README.md @@ -39,7 +39,7 @@ This is the key matrix (no label means the key from layer 0 will be used): ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ ║ ║ ß ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ -║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ¿ ║ ║ ║ +║ ║ ║ ║ ║ ║ ║ µ ║ ║ ║ ¿ ║ ║ ║ ╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ ║ ║ ║ ║░░░░║ ║ ║ ║ ║ ║ ║ ║ ╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ @@ -49,10 +49,11 @@ This is the key matrix (no label means the key from layer 0 will be used): ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╦════╣ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ F11║ F12║ ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╩════╣ -║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ` ║ Super ║ +║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ` ║ Super ║ ╠════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬════╬═════════╣ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║PgUp║ ║ ╠════╬════╬════╬════╬════╩════╩════╬════╬════╬════╬════╬════╦════╣ ║ ║░░░░║ ║ ║ Tab ║ ║ ║Pos1║PgDn║ End║ ║ ╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ ``` + diff --git a/keyboards/mkbd65/keymaps/iso/README.md b/keyboards/mkbd65/keymaps/iso/README.md index beb5cc2783..9a5f9b176f 100644 --- a/keyboards/mkbd65/keymaps/iso/README.md +++ b/keyboards/mkbd65/keymaps/iso/README.md @@ -52,3 +52,4 @@ It's actually just ANSI but with an upright `Enter` key. ║Ctrl║░░░░║Shft║AltG║ Tab ║ ║ ` ║Pos1║PgDn║ End║Ctrl║ ╚════╩════╩════╩════╩══════════════╩════╩════╩════╩════╩════╩════╝ ``` + diff --git a/keyboards/mkbd65/rev0/mkbd65.c b/keyboards/mkbd65/rev0/mkbd65.c index baca6508d4..2cde260fa0 100644 --- a/keyboards/mkbd65/rev0/mkbd65.c +++ b/keyboards/mkbd65/rev0/mkbd65.c @@ -2,3 +2,5 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "mkbd65.h" +#include "quantum.h" + diff --git a/keyboards/mkbd65/rev0/mkbd65.h b/keyboards/mkbd65/rev0/mkbd65.h index aae0d388fa..798a87ce44 100644 --- a/keyboards/mkbd65/rev0/mkbd65.h +++ b/keyboards/mkbd65/rev0/mkbd65.h @@ -4,8 +4,6 @@ #ifndef MKBD65_H #define MKBD65_H -#include "quantum.h" - /* LAYOUT_ansi * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ * │ │ │ │ │ │ │ │ │ │ │ │ 2.0U │ diff --git a/keyboards/mkbd65/rules.mk b/keyboards/mkbd65/rules.mk index cc4a04ee68..da0535c8f2 100644 --- a/keyboards/mkbd65/rules.mk +++ b/keyboards/mkbd65/rules.mk @@ -1,6 +1,35 @@ +# build options +#LAYOUTS = [] + +# AVR MCU Options +MCU = atmega32u4 +F_CPU = 16000000 +ARCH = AVR8 +F_USB = $(F_CPU) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT +BOOTLOADER = atmel-dfu + +# Feature Options +MAGIC_ENABLE = no +COMBO_ENABLE = no +AUDIO_ENABLE = no +KEY_OVERRIDE_ENABLE = no +LEADER_ENABLE = no +MIDI_ENABLE = no +UNICODE_ENABLE = no +BLUETOOTH_ENABLE = no +SPLIT_KEYBOARD = no +MUSIC_ENABLE = no +SPACE_CADET_ENABLE = no +GRAVE_ESC_ENABLE = yes +AVR_USE_MINIMAL_PRINTF = yes +ENCODER_ENABLE = no + DEFAULT_FOLDER = rev1 # Enables Link Time Optimization (LTO) when compiling the keyboard. This makes the process take longer, but it can # significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable). LTO_ENABLE = yes -EXTRAKEY_ENABLE = yes # Audio control and System control +# Audio control and System control +EXTRAKEY_ENABLE = yes + From f91cd00de8ff373d616bcbc7e5935a3cc66333ad Mon Sep 17 00:00:00 2001 From: "Ricardo (XenGi) Band" Date: Sat, 15 Nov 2025 21:21:55 +0100 Subject: [PATCH 99/99] fix rev0 --- keyboards/mkbd65/rev0/info.json | 149 ------------------ keyboards/mkbd65/rev0/keyboard.json | 174 ++++++++++++++++++++++ keyboards/mkbd65/rev0/rules.mk | 2 - keyboards/mkbd65/rev1/info.json | 159 -------------------- keyboards/mkbd65/{ => rev1}/keyboard.json | 64 +++++--- keyboards/mkbd65/rules.mk | 16 -- 6 files changed, 216 insertions(+), 348 deletions(-) delete mode 100644 keyboards/mkbd65/rev0/info.json create mode 100644 keyboards/mkbd65/rev0/keyboard.json delete mode 100644 keyboards/mkbd65/rev1/info.json rename keyboards/mkbd65/{ => rev1}/keyboard.json (79%) diff --git a/keyboards/mkbd65/rev0/info.json b/keyboards/mkbd65/rev0/info.json deleted file mode 100644 index 5d2c940129..0000000000 --- a/keyboards/mkbd65/rev0/info.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "usb": { - "vid": "0x1209", - "pid": "0x4803", - "device_version": "0.0.0" - }, - "layouts": { - "LAYOUT_ansi": { - "layout": [ - {"x": 0, "y": 0, "label": "Esc", "matrix": [0, 0]}, - {"x": 1, "y": 0, "label": "1", "matrix": [0, 1]}, - {"x": 2, "y": 0, "label": "2", "matrix": [0, 2]}, - {"x": 3, "y": 0, "label": "3", "matrix": [0, 3]}, - {"x": 4, "y": 0, "label": "4", "matrix": [0, 4]}, - {"x": 5, "y": 0, "label": "5", "matrix": [0, 5]}, - {"x": 6, "y": 0, "label": "6", "matrix": [0, 6]}, - {"x": 7, "y": 0, "label": "7", "matrix": [0, 7]}, - {"x": 8, "y": 0, "label": "8", "matrix": [0, 8]}, - {"x": 9, "y": 0, "label": "9", "matrix": [0, 9]}, - {"x": 10, "y": 0, "label": "0", "matrix": [0, 10]}, - {"x": 11, "y": 0, "w": 2, "label": "Backspace", "matrix": [0, 11]}, - - {"x": 0, "y": 1, "label": "Q", "matrix": [1, 0]}, - {"x": 1, "y": 1, "label": "W", "matrix": [1, 1]}, - {"x": 2, "y": 1, "label": "E", "matrix": [1, 2]}, - {"x": 3, "y": 1, "label": "R", "matrix": [1, 3]}, - {"x": 4, "y": 1, "label": "T", "matrix": [1, 4]}, - {"x": 5, "y": 1, "label": "Y", "matrix": [1, 5]}, - {"x": 6, "y": 1, "label": "U", "matrix": [1, 6]}, - {"x": 7, "y": 1, "label": "I", "matrix": [1, 7]}, - {"x": 8, "y": 1, "label": "O", "matrix": [1, 8]}, - {"x": 9, "y": 1, "label": "P", "matrix": [1, 9]}, - {"x": 10, "y": 1, "label": "[", "matrix": [1, 10]}, - {"x": 11, "y": 1, "label": "]", "matrix": [1, 11]}, - {"x": 12, "y": 1, "label": "\\", "matrix": [1, 12]}, - - {"x": 0, "y": 2, "label": "A", "matrix": [2, 0]}, - {"x": 1, "y": 2, "label": "S", "matrix": [2, 1]}, - {"x": 2, "y": 2, "label": "D", "matrix": [2, 2]}, - {"x": 3, "y": 2, "label": "F", "matrix": [2, 3]}, - {"x": 4, "y": 2, "label": "G", "matrix": [2, 4]}, - {"x": 5, "y": 2, "label": "H", "matrix": [2, 5]}, - {"x": 6, "y": 2, "label": "J", "matrix": [2, 6]}, - {"x": 7, "y": 2, "label": "K", "matrix": [2, 7]}, - {"x": 8, "y": 2, "label": "L", "matrix": [2, 8]}, - {"x": 9, "y": 2, "label": ";", "matrix": [2, 9]}, - {"x": 10, "y": 2, "label": "'", "matrix": [2, 10]}, - {"x": 11, "y": 2, "w": 2, "label": "Enter", "matrix": [2, 11]}, - - {"x": 0, "y": 3, "label": "Z", "matrix": [3, 0]}, - {"x": 1, "y": 3, "label": "X", "matrix": [3, 1]}, - {"x": 2, "y": 3, "label": "C", "matrix": [3, 2]}, - {"x": 3, "y": 3, "label": "V", "matrix": [3, 3]}, - {"x": 4, "y": 3, "label": "B", "matrix": [3, 4]}, - {"x": 5, "y": 3, "label": "N", "matrix": [3, 5]}, - {"x": 6, "y": 3, "label": "M", "matrix": [3, 6]}, - {"x": 7, "y": 3, "label": ",", "matrix": [3, 7]}, - {"x": 8, "y": 3, "label": ".", "matrix": [3, 8]}, - {"x": 9, "y": 3, "label": "/", "matrix": [3, 9]}, - {"x": 10, "y": 3, "label": "Up", "matrix": [3, 10]}, - {"x": 11, "y": 3, "w": 2, "label": "RShift", "matrix": [3, 11]}, - - {"x": 0, "y": 4, "label": "LCtrl", "matrix": [4, 0]}, - {"x": 1, "y": 4, "label": "LShift", "matrix": [4, 1]}, - {"x": 2, "y": 4, "label": "Fn", "matrix": [4, 2]}, - {"x": 3, "y": 4, "label": "AltGr", "matrix": [4, 3]}, - {"x": 4, "y": 4, "w": 3, "label": "Space", "matrix": [4, 4]}, - {"x": 7, "y": 4, "label": "-", "matrix": [4, 7]}, - {"x": 8, "y": 4, "label": "=", "matrix": [4, 8]}, - {"x": 9, "y": 4, "label": "Left", "matrix": [4, 9]}, - {"x": 10, "y": 4, "label": "Down", "matrix": [4, 10]}, - {"x": 11, "y": 4, "label": "Right", "matrix": [4, 11]}, - {"x": 12, "y": 4, "label": "RCtrl", "matrix": [4, 12]} - ] - }, - "LAYOUT_iso": { - "layout": [ - {"x": 0, "y": 0, "label": "Esc", "matrix": [0, 0]}, - {"x": 1, "y": 0, "label": "1", "matrix": [0, 1]}, - {"x": 2, "y": 0, "label": "2", "matrix": [0, 2]}, - {"x": 3, "y": 0, "label": "3", "matrix": [0, 3]}, - {"x": 4, "y": 0, "label": "4", "matrix": [0, 4]}, - {"x": 5, "y": 0, "label": "5", "matrix": [0, 5]}, - {"x": 6, "y": 0, "label": "6", "matrix": [0, 6]}, - {"x": 7, "y": 0, "label": "7", "matrix": [0, 7]}, - {"x": 8, "y": 0, "label": "8", "matrix": [0, 8]}, - {"x": 9, "y": 0, "label": "9", "matrix": [0, 9]}, - {"x": 10, "y": 0, "label": "0", "matrix": [0, 10]}, - {"x": 11, "y": 0, "w": 2, "label": "Backspace", "matrix": [0, 11]}, - - {"x": 0, "y": 1, "label": "Q", "matrix": [1, 0]}, - {"x": 1, "y": 1, "label": "W", "matrix": [1, 1]}, - {"x": 2, "y": 1, "label": "E", "matrix": [1, 2]}, - {"x": 3, "y": 1, "label": "R", "matrix": [1, 3]}, - {"x": 4, "y": 1, "label": "T", "matrix": [1, 4]}, - {"x": 5, "y": 1, "label": "Y", "matrix": [1, 5]}, - {"x": 6, "y": 1, "label": "U", "matrix": [1, 6]}, - {"x": 7, "y": 1, "label": "I", "matrix": [1, 7]}, - {"x": 8, "y": 1, "label": "O", "matrix": [1, 8]}, - {"x": 9, "y": 1, "label": "P", "matrix": [1, 9]}, - {"x": 10, "y": 1, "label": "[", "matrix": [1, 10]}, - {"x": 11, "y": 1, "label": "]", "matrix": [1, 11]}, - - {"x": 0, "y": 2, "label": "A", "matrix": [2, 0]}, - {"x": 1, "y": 2, "label": "S", "matrix": [2, 1]}, - {"x": 2, "y": 2, "label": "D", "matrix": [2, 2]}, - {"x": 3, "y": 2, "label": "F", "matrix": [2, 3]}, - {"x": 4, "y": 2, "label": "G", "matrix": [2, 4]}, - {"x": 5, "y": 2, "label": "H", "matrix": [2, 5]}, - {"x": 6, "y": 2, "label": "J", "matrix": [2, 6]}, - {"x": 7, "y": 2, "label": "K", "matrix": [2, 7]}, - {"x": 8, "y": 2, "label": "L", "matrix": [2, 8]}, - {"x": 9, "y": 2, "label": ";", "matrix": [2, 9]}, - {"x": 10, "y": 2, "label": "'", "matrix": [2, 10]}, - {"x": 11, "y": 2, "label": "\\", "matrix": [2, 11]}, - {"x": 12, "y": 2, "h": 2, "label": "Enter", "matrix": [2, 12]}, - - {"x": 0, "y": 3, "label": "Z", "matrix": [3, 0]}, - {"x": 1, "y": 3, "label": "X", "matrix": [3, 1]}, - {"x": 2, "y": 3, "label": "C", "matrix": [3, 2]}, - {"x": 3, "y": 3, "label": "V", "matrix": [3, 3]}, - {"x": 4, "y": 3, "label": "B", "matrix": [3, 4]}, - {"x": 5, "y": 3, "label": "N", "matrix": [3, 5]}, - {"x": 6, "y": 3, "label": "M", "matrix": [3, 6]}, - {"x": 7, "y": 3, "label": ",", "matrix": [3, 7]}, - {"x": 8, "y": 3, "label": ".", "matrix": [3, 8]}, - {"x": 9, "y": 3, "label": "/", "matrix": [3, 9]}, - {"x": 10, "y": 3, "label": "Up", "matrix": [3, 10]}, - {"x": 11, "y": 3, "w": 2, "label": "RShift", "matrix": [3, 11]}, - - {"x": 0, "y": 4, "label": "LCtrl", "matrix": [4, 0]}, - {"x": 1, "y": 4, "label": "LShift", "matrix": [4, 1]}, - {"x": 2, "y": 4, "label": "Fn", "matrix": [4, 2]}, - {"x": 3, "y": 4, "label": "AltGr", "matrix": [4, 3]}, - {"x": 4, "y": 4, "w": 3, "label": "Space", "matrix": [4, 4]}, - {"x": 7, "y": 4, "label": "-", "matrix": [4, 7]}, - {"x": 8, "y": 4, "label": "=", "matrix": [4, 8]}, - {"x": 9, "y": 4, "label": "Left", "matrix": [4, 9]}, - {"x": 10, "y": 4, "label": "Down", "matrix": [4, 10]}, - {"x": 11, "y": 4, "label": "Right", "matrix": [4, 11]}, - {"x": 12, "y": 4, "label": "RCtrl", "matrix": [4, 12]} - ] - } - }, - "matrix_pins": { - "cols": ["D4", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0"], - "rows": ["D5", "D3", "D2", "D1", "D0"] - } -} diff --git a/keyboards/mkbd65/rev0/keyboard.json b/keyboards/mkbd65/rev0/keyboard.json new file mode 100644 index 0000000000..35269aaa5c --- /dev/null +++ b/keyboards/mkbd65/rev0/keyboard.json @@ -0,0 +1,174 @@ +{ + "manufacturer": "XenGi", + "keyboard_name": "mkbd65", + "maintainer": "XenGi", + "bootloader": "atmel-dfu", + "bootloader_instructions": "Press the button marked RESET on the back of the PCB", + "bootmagic": { + "enabled": true, + "matrix": [0, 0] + }, + "build": { + "lto": true + }, + "debounce": 5, + "diode_direction": "ROW2COL", + "encoder": { + "enabled": false + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgb_matrix": false, + "rgblight": false + }, + "matrix_pins": { + "cols": ["D4", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0"], + "rows": ["D5", "D3", "D2", "D1", "D0"] + }, + "processor": "atmega32u4", + "split": { + "enabled": false + }, + "tags": ["mobile", "65%"], + "url": "https://mkbd65.xengi.de", + "usb": { + "device_version": "0.0.1", + "pid": "0x4803", + "vid": "0x1209" + }, + "layouts": { + "LAYOUT_ansi": { + "layout": [ + {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "1", "matrix": [0, 1], "x": 1, "y": 0}, + {"label": "2", "matrix": [0, 2], "x": 2, "y": 0}, + {"label": "3", "matrix": [0, 3], "x": 3, "y": 0}, + {"label": "4", "matrix": [0, 4], "x": 4, "y": 0}, + {"label": "5", "matrix": [0, 5], "x": 5, "y": 0}, + {"label": "6", "matrix": [0, 6], "x": 6, "y": 0}, + {"label": "7", "matrix": [0, 7], "x": 7, "y": 0}, + {"label": "8", "matrix": [0, 8], "x": 8, "y": 0}, + {"label": "9", "matrix": [0, 9], "x": 9, "y": 0}, + {"label": "0", "matrix": [0, 10], "x": 10, "y": 0}, + {"label": "Backspace", "matrix": [0, 11], "x": 11, "y": 0, "w": 2}, + {"label": "Q", "matrix": [1, 0], "x": 1, "y": 0}, + {"label": "W", "matrix": [1, 1], "x": 1, "y": 1}, + {"label": "E", "matrix": [1, 2], "x": 1, "y": 2}, + {"label": "R", "matrix": [1, 3], "x": 1, "y": 3}, + {"label": "T", "matrix": [1, 4], "x": 1, "y": 4}, + {"label": "Y", "matrix": [1, 5], "x": 1, "y": 5}, + {"label": "U", "matrix": [1, 6], "x": 1, "y": 6}, + {"label": "I", "matrix": [1, 7], "x": 1, "y": 7}, + {"label": "O", "matrix": [1, 8], "x": 1, "y": 8}, + {"label": "P", "matrix": [1, 9], "x": 1, "y": 9}, + {"label": "[", "matrix": [1, 10], "x": 1, "y": 10}, + {"label": "]", "matrix": [1, 11], "x": 1, "y": 11}, + {"label": "\\", "matrix": [1, 12], "x": 1, "y": 12}, + {"label": "A", "matrix": [2, 0], "x": 2, "y": 0}, + {"label": "S", "matrix": [2, 1], "x": 2, "y": 1}, + {"label": "D", "matrix": [2, 2], "x": 2, "y": 2}, + {"label": "F", "matrix": [2, 3], "x": 2, "y": 3}, + {"label": "G", "matrix": [2, 4], "x": 2, "y": 4}, + {"label": "H", "matrix": [2, 5], "x": 2, "y": 5}, + {"label": "J", "matrix": [2, 6], "x": 2, "y": 6}, + {"label": "K", "matrix": [2, 7], "x": 2, "y": 7}, + {"label": "L", "matrix": [2, 8], "x": 2, "y": 8}, + {"label": ";", "matrix": [2, 9], "x": 2, "y": 9}, + {"label": "'", "matrix": [2, 10], "x": 2, "y": 10}, + {"label": "Enter", "matrix": [2, 11], "x": 2, "y": 11, "w": 2}, + {"label": "Z", "matrix": [3, 0], "x": 3, "y": 0}, + {"label": "X", "matrix": [3, 1], "x": 3, "y": 1}, + {"label": "C", "matrix": [3, 2], "x": 3, "y": 2}, + {"label": "V", "matrix": [3, 3], "x": 3, "y": 3}, + {"label": "B", "matrix": [3, 4], "x": 3, "y": 4}, + {"label": "N", "matrix": [3, 5], "x": 3, "y": 5}, + {"label": "M", "matrix": [3, 6], "x": 3, "y": 6}, + {"label": ",", "matrix": [3, 7], "x": 3, "y": 7}, + {"label": ".", "matrix": [3, 8], "x": 3, "y": 8}, + {"label": "/", "matrix": [3, 9], "x": 3, "y": 9}, + {"label": "Up", "matrix": [3, 10], "x": 3, "y": 10}, + {"label": "ShiftR", "matrix": [3, 11], "x": 3, "y": 11, "w": 2}, + {"label": "CtrlL", "matrix": [4, 0], "x": 4, "y": 0}, + {"label": "Fn", "matrix": [4, 1], "x": 4, "y": 1}, + {"label": "ShiftL", "matrix": [4, 2], "x": 4, "y": 2}, + {"label": "Alt", "matrix": [4, 3], "x": 4, "y": 3}, + {"label": "Space", "matrix": [4, 4], "x": 4, "y": 4, "w": 3}, + {"label": "-", "matrix": [4, 7], "x": 4, "y": 7}, + {"label": "=", "matrix": [4, 8], "x": 4, "y": 8}, + {"label": "Left", "matrix": [4, 9], "x": 4, "y": 9}, + {"label": "Down", "matrix": [4, 10], "x": 4, "y": 10}, + {"label": "Right", "matrix": [4, 11], "x": 4, "y": 11}, + {"label": "CtrlR", "matrix": [4, 12], "x": 4, "y": 12} + ] + }, + "LAYOUT_iso": { + "layout": [ + {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "1", "matrix": [0, 1], "x": 1, "y": 0}, + {"label": "2", "matrix": [0, 2], "x": 2, "y": 0}, + {"label": "3", "matrix": [0, 3], "x": 3, "y": 0}, + {"label": "4", "matrix": [0, 4], "x": 4, "y": 0}, + {"label": "5", "matrix": [0, 5], "x": 5, "y": 0}, + {"label": "6", "matrix": [0, 6], "x": 6, "y": 0}, + {"label": "7", "matrix": [0, 7], "x": 7, "y": 0}, + {"label": "8", "matrix": [0, 8], "x": 8, "y": 0}, + {"label": "9", "matrix": [0, 9], "x": 9, "y": 0}, + {"label": "0", "matrix": [0, 10], "x": 10, "y": 0}, + {"label": "Backspace", "matrix": [0, 11], "x": 11, "y": 0, "w": 2}, + {"label": "Q", "matrix": [1, 0], "x": 1, "y": 0}, + {"label": "W", "matrix": [1, 1], "x": 1, "y": 1}, + {"label": "E", "matrix": [1, 2], "x": 1, "y": 2}, + {"label": "R", "matrix": [1, 3], "x": 1, "y": 3}, + {"label": "T", "matrix": [1, 4], "x": 1, "y": 4}, + {"label": "Y", "matrix": [1, 5], "x": 1, "y": 5}, + {"label": "U", "matrix": [1, 6], "x": 1, "y": 6}, + {"label": "I", "matrix": [1, 7], "x": 1, "y": 7}, + {"label": "O", "matrix": [1, 8], "x": 1, "y": 8}, + {"label": "P", "matrix": [1, 9], "x": 1, "y": 9}, + {"label": "[", "matrix": [1, 10], "x": 1, "y": 10}, + {"label": "]", "matrix": [1, 11], "x": 1, "y": 11}, + {"label": "A", "matrix": [2, 0], "x": 2, "y": 0}, + {"label": "S", "matrix": [2, 1], "x": 2, "y": 1}, + {"label": "D", "matrix": [2, 2], "x": 2, "y": 2}, + {"label": "F", "matrix": [2, 3], "x": 2, "y": 3}, + {"label": "G", "matrix": [2, 4], "x": 2, "y": 4}, + {"label": "H", "matrix": [2, 5], "x": 2, "y": 5}, + {"label": "J", "matrix": [2, 6], "x": 2, "y": 6}, + {"label": "K", "matrix": [2, 7], "x": 2, "y": 7}, + {"label": "L", "matrix": [2, 8], "x": 2, "y": 8}, + {"label": ";", "matrix": [2, 9], "x": 2, "y": 9}, + {"label": "'", "matrix": [2, 10], "x": 2, "y": 10}, + {"label": "\\", "matrix": [2, 11], "x": 2, "y": 11}, + {"label": "Enter", "matrix": [1, 12], "x": 1, "y": 12, "h": 2}, + {"label": "Z", "matrix": [3, 0], "x": 3, "y": 0}, + {"label": "X", "matrix": [3, 1], "x": 3, "y": 1}, + {"label": "C", "matrix": [3, 2], "x": 3, "y": 2}, + {"label": "V", "matrix": [3, 3], "x": 3, "y": 3}, + {"label": "B", "matrix": [3, 4], "x": 3, "y": 4}, + {"label": "N", "matrix": [3, 5], "x": 3, "y": 5}, + {"label": "M", "matrix": [3, 6], "x": 3, "y": 6}, + {"label": ",", "matrix": [3, 7], "x": 3, "y": 7}, + {"label": ".", "matrix": [3, 8], "x": 3, "y": 8}, + {"label": "/", "matrix": [3, 9], "x": 3, "y": 9}, + {"label": "Up", "matrix": [3, 10], "x": 3, "y": 10}, + {"label": "ShiftR", "matrix": [3, 11], "x": 3, "y": 11, "w": 2}, + {"label": "CtrlL", "matrix": [4, 0], "x": 4, "y": 0}, + {"label": "Fn", "matrix": [4, 1], "x": 4, "y": 1}, + {"label": "ShiftL", "matrix": [4, 2], "x": 4, "y": 2}, + {"label": "Alt", "matrix": [4, 3], "x": 4, "y": 3}, + {"label": "Space", "matrix": [4, 4], "x": 4, "y": 4, "w": 3}, + {"label": "-", "matrix": [4, 7], "x": 4, "y": 7}, + {"label": "=", "matrix": [4, 8], "x": 4, "y": 8}, + {"label": "Left", "matrix": [4, 9], "x": 4, "y": 9}, + {"label": "Down", "matrix": [4, 10], "x": 4, "y": 10}, + {"label": "Right", "matrix": [4, 11], "x": 4, "y": 11}, + {"label": "CtrlR", "matrix": [4, 12], "x": 4, "y": 12} + ] + } + } +} \ No newline at end of file diff --git a/keyboards/mkbd65/rev0/rules.mk b/keyboards/mkbd65/rev0/rules.mk index 2d23977af0..de2da8afe1 100644 --- a/keyboards/mkbd65/rev0/rules.mk +++ b/keyboards/mkbd65/rev0/rules.mk @@ -1,6 +1,4 @@ -MCU = atmega32u4 F_CPU = 16000000 ARCH = AVR8 F_USB = $(F_CPU) OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT -BOOTLOADER = atmel-dfu diff --git a/keyboards/mkbd65/rev1/info.json b/keyboards/mkbd65/rev1/info.json deleted file mode 100644 index 42ed48f137..0000000000 --- a/keyboards/mkbd65/rev1/info.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "usb": { - "vid": "0x1209", - "pid": "0x4803", - "device_version": "1.0.0" - }, - "layouts": { - "LAYOUT_en_us_intl": { - "layout": [ - {"x": 0, "y": 0, "label": "Esc", "matrix": [0, 0]}, - {"x": 1, "y": 0, "label": "1", "matrix": [0, 1]}, - {"x": 2, "y": 0, "label": "2", "matrix": [0, 2]}, - {"x": 3, "y": 0, "label": "3", "matrix": [0, 3]}, - {"x": 4, "y": 0, "label": "4", "matrix": [0, 4]}, - {"x": 5, "y": 0, "label": "5", "matrix": [0, 5]}, - {"x": 6, "y": 0, "label": "6", "matrix": [0, 6]}, - {"x": 7, "y": 0, "label": "7", "matrix": [0, 7]}, - {"x": 8, "y": 0, "label": "8", "matrix": [0, 8]}, - {"x": 9, "y": 0, "label": "9", "matrix": [0, 9]}, - {"x": 10, "y": 0, "label": "0", "matrix": [0, 10]}, - {"x": 11, "y": 0, "label": "Backspace", "matrix": [0, 11]}, - {"x": 12, "y": 0, "label": "Backspace", "matrix": [0, 12]}, - - {"x": 0, "y": 1, "label": "Q", "matrix": [1, 0]}, - {"x": 1, "y": 1, "label": "W", "matrix": [1, 1]}, - {"x": 2, "y": 1, "label": "E", "matrix": [1, 2]}, - {"x": 3, "y": 1, "label": "R", "matrix": [1, 3]}, - {"x": 4, "y": 1, "label": "T", "matrix": [1, 4]}, - {"x": 5, "y": 1, "label": "Y", "matrix": [1, 5]}, - {"x": 6, "y": 1, "label": "U", "matrix": [1, 6]}, - {"x": 7, "y": 1, "label": "I", "matrix": [1, 7]}, - {"x": 8, "y": 1, "label": "O", "matrix": [1, 8]}, - {"x": 9, "y": 1, "label": "P", "matrix": [1, 9]}, - {"x": 10, "y": 1, "label": "[", "matrix": [1, 10]}, - {"x": 11, "y": 1, "label": "]", "matrix": [1, 11]}, - {"x": 12, "y": 1, "label": "\\", "matrix": [1, 12]}, - - {"x": 0, "y": 2, "label": "A", "matrix": [2, 0]}, - {"x": 1, "y": 2, "label": "S", "matrix": [2, 1]}, - {"x": 2, "y": 2, "label": "D", "matrix": [2, 2]}, - {"x": 3, "y": 2, "label": "F", "matrix": [2, 3]}, - {"x": 4, "y": 2, "label": "G", "matrix": [2, 4]}, - {"x": 5, "y": 2, "label": "H", "matrix": [2, 5]}, - {"x": 6, "y": 2, "label": "J", "matrix": [2, 6]}, - {"x": 7, "y": 2, "label": "K", "matrix": [2, 7]}, - {"x": 8, "y": 2, "label": "L", "matrix": [2, 8]}, - {"x": 9, "y": 2, "label": ";", "matrix": [2, 9]}, - {"x": 10, "y": 2, "label": "'", "matrix": [2, 10]}, - {"x": 11, "y": 2, "label": "Enter", "matrix": [2, 11]}, - {"x": 12, "y": 2, "label": "Enter", "matrix": [2, 12]}, - - {"x": 0, "y": 3, "label": "Z", "matrix": [3, 0]}, - {"x": 1, "y": 3, "label": "X", "matrix": [3, 1]}, - {"x": 2, "y": 3, "label": "C", "matrix": [3, 2]}, - {"x": 3, "y": 3, "label": "V", "matrix": [3, 3]}, - {"x": 4, "y": 3, "label": "B", "matrix": [3, 4]}, - {"x": 5, "y": 3, "label": "N", "matrix": [3, 5]}, - {"x": 6, "y": 3, "label": "M", "matrix": [3, 6]}, - {"x": 7, "y": 3, "label": ",", "matrix": [3, 7]}, - {"x": 8, "y": 3, "label": ".", "matrix": [3, 8]}, - {"x": 9, "y": 3, "label": "/", "matrix": [3, 9]}, - {"x": 10, "y": 3, "label": "Up", "matrix": [3, 10]}, - {"x": 11, "y": 3, "label": "RShift", "matrix": [3, 11]}, - {"x": 12, "y": 3, "label": "RShift", "matrix": [3, 12]}, - - {"x": 0, "y": 4, "label": "LCtrl", "matrix": [4, 0]}, - {"x": 1, "y": 4, "label": "LShift", "matrix": [4, 1]}, - {"x": 2, "y": 4, "label": "Fn", "matrix": [4, 2]}, - {"x": 3, "y": 4, "label": "AltGr", "matrix": [4, 3]}, - {"x": 4, "y": 4, "label": "Space", "matrix": [4, 4]}, - {"x": 5, "y": 4, "label": "Space", "matrix": [4, 5]}, - {"x": 6, "y": 4, "label": "Space", "matrix": [4, 6]}, - {"x": 7, "y": 4, "label": "-", "matrix": [4, 7]}, - {"x": 8, "y": 4, "label": "=", "matrix": [4, 8]}, - {"x": 9, "y": 4, "label": "Left", "matrix": [4, 9]}, - {"x": 10, "y": 4, "label": "Down", "matrix": [4, 10]}, - {"x": 11, "y": 4, "label": "Right", "matrix": [4, 11]}, - {"x": 12, "y": 4, "label": "RCtrl", "matrix": [4, 12]} - ] - }, - "LAYOUT_de": { - "layout": [ - {"x": 0, "y": 0, "label": "Esc", "matrix": [0, 0]}, - {"x": 1, "y": 0, "label": "1", "matrix": [0, 1]}, - {"x": 2, "y": 0, "label": "2", "matrix": [0, 2]}, - {"x": 3, "y": 0, "label": "3", "matrix": [0, 3]}, - {"x": 4, "y": 0, "label": "4", "matrix": [0, 4]}, - {"x": 5, "y": 0, "label": "5", "matrix": [0, 5]}, - {"x": 6, "y": 0, "label": "6", "matrix": [0, 6]}, - {"x": 7, "y": 0, "label": "7", "matrix": [0, 7]}, - {"x": 8, "y": 0, "label": "8", "matrix": [0, 8]}, - {"x": 9, "y": 0, "label": "9", "matrix": [0, 9]}, - {"x": 10, "y": 0, "label": "0", "matrix": [0, 10]}, - {"x": 11, "y": 0, "label": "Backspace", "matrix": [0, 11]}, - {"x": 12, "y": 0, "label": "Backspace", "matrix": [0, 12]}, - - {"x": 0, "y": 1, "label": "Q", "matrix": [1, 0]}, - {"x": 1, "y": 1, "label": "W", "matrix": [1, 1]}, - {"x": 2, "y": 1, "label": "E", "matrix": [1, 2]}, - {"x": 3, "y": 1, "label": "R", "matrix": [1, 3]}, - {"x": 4, "y": 1, "label": "T", "matrix": [1, 4]}, - {"x": 5, "y": 1, "label": "Z", "matrix": [1, 5]}, - {"x": 6, "y": 1, "label": "U", "matrix": [1, 6]}, - {"x": 7, "y": 1, "label": "I", "matrix": [1, 7]}, - {"x": 8, "y": 1, "label": "O", "matrix": [1, 8]}, - {"x": 9, "y": 1, "label": "P", "matrix": [1, 9]}, - {"x": 10, "y": 1, "label": "Ü", "matrix": [1, 10]}, - {"x": 11, "y": 1, "label": "+", "matrix": [1, 11]}, - {"x": 12, "y": 1, "label": "Enter", "matrix": [1, 12]}, - - {"x": 0, "y": 2, "label": "A", "matrix": [2, 0]}, - {"x": 1, "y": 2, "label": "S", "matrix": [2, 1]}, - {"x": 2, "y": 2, "label": "D", "matrix": [2, 2]}, - {"x": 3, "y": 2, "label": "F", "matrix": [2, 3]}, - {"x": 4, "y": 2, "label": "G", "matrix": [2, 4]}, - {"x": 5, "y": 2, "label": "H", "matrix": [2, 5]}, - {"x": 6, "y": 2, "label": "J", "matrix": [2, 6]}, - {"x": 7, "y": 2, "label": "K", "matrix": [2, 7]}, - {"x": 8, "y": 2, "label": "L", "matrix": [2, 8]}, - {"x": 9, "y": 2, "label": "Ö", "matrix": [2, 9]}, - {"x": 10, "y": 2, "label": "Ä", "matrix": [2, 10]}, - {"x": 11, "y": 2, "label": "#", "matrix": [2, 11]}, - {"x": 12, "y": 2, "label": "Enter", "matrix": [2, 12]}, - - {"x": 0, "y": 3, "label": "Y", "matrix": [3, 0]}, - {"x": 1, "y": 3, "label": "X", "matrix": [3, 1]}, - {"x": 2, "y": 3, "label": "C", "matrix": [3, 2]}, - {"x": 3, "y": 3, "label": "V", "matrix": [3, 3]}, - {"x": 4, "y": 3, "label": "B", "matrix": [3, 4]}, - {"x": 5, "y": 3, "label": "N", "matrix": [3, 5]}, - {"x": 6, "y": 3, "label": "M", "matrix": [3, 6]}, - {"x": 7, "y": 3, "label": ",", "matrix": [3, 7]}, - {"x": 8, "y": 3, "label": ".", "matrix": [3, 8]}, - {"x": 9, "y": 3, "label": "-", "matrix": [3, 9]}, - {"x": 10, "y": 3, "label": "Up", "matrix": [3, 10]}, - {"x": 11, "y": 3, "label": "<", "matrix": [3, 11]}, - {"x": 12, "y": 3, "label": "RShift", "matrix": [3, 12]}, - - {"x": 0, "y": 4, "label": "LCtrl", "matrix": [4, 0]}, - {"x": 1, "y": 4, "label": "LShift", "matrix": [4, 1]}, - {"x": 2, "y": 4, "label": "Fn", "matrix": [4, 2]}, - {"x": 3, "y": 4, "label": "AltGr", "matrix": [4, 3]}, - {"x": 4, "y": 4, "label": "Space", "matrix": [4, 4]}, - {"x": 5, "y": 4, "label": "Space", "matrix": [4, 5]}, - {"x": 6, "y": 4, "label": "Space", "matrix": [4, 6]}, - {"x": 7, "y": 4, "label": "ß", "matrix": [4, 7]}, - {"x": 8, "y": 4, "label": "´", "matrix": [4, 8]}, - {"x": 9, "y": 4, "label": "Left", "matrix": [4, 9]}, - {"x": 10, "y": 4, "label": "Down", "matrix": [4, 10]}, - {"x": 11, "y": 4, "label": "Right", "matrix": [4, 11]}, - {"x": 12, "y": 4, "label": "RCtrl", "matrix": [4, 12]} - ] - } - }, - "matrix_pins": { - "cols": ["A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "B2", "B10", "B11"], - "rows": ["B12", "B13", "B14", "B15", "A8"] - } -} diff --git a/keyboards/mkbd65/keyboard.json b/keyboards/mkbd65/rev1/keyboard.json similarity index 79% rename from keyboards/mkbd65/keyboard.json rename to keyboards/mkbd65/rev1/keyboard.json index 3d1fe2ec2a..2329e8bc52 100644 --- a/keyboards/mkbd65/keyboard.json +++ b/keyboards/mkbd65/rev1/keyboard.json @@ -20,15 +20,15 @@ "matrix": [0, 0] }, "matrix_pins": { - "cols": ["D4", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0"], - "rows": ["D5", "D3", "D2", "D1", "D0"] + "cols": ["A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "B0", "B1", "B2", "B10", "B11"], + "rows": ["B12", "B13", "B14", "B15", "A8"] }, "processor": "atmega32u4", "url": "https://mkbd65.xengi.de", "bootloader_instructions": "Press the button marked RESET on the back of the PCB", "tags": ["mobile", "65%"], "usb": { - "device_version": "0.0.1", + "device_version": "1.0.0", "pid": "0x4803", "vid": "0x1209" }, @@ -36,8 +36,8 @@ "lto": true }, "layouts": { - "LAYOUT": { - "layout_ansi": [ + "LAYOUT_ansi": { + "layout": [ { "matrix": [0, 0], "x": 0, "y": 0, "label": "Esc" }, { "matrix": [0, 1], "x": 1, "y": 0, "label": "1" }, { "matrix": [0, 2], "x": 2, "y": 0, "label": "2" }, @@ -49,7 +49,9 @@ { "matrix": [0, 8], "x": 8, "y": 0, "label": "8" }, { "matrix": [0, 9], "x": 9, "y": 0, "label": "9" }, { "matrix": [0, 10], "x": 10, "y": 0, "label": "0" }, - { "matrix": [0, 11], "x": 11, "y": 0, "w": 2, "label": "Backspace" }, + { "matrix": [0, 11], "x": 11, "y": 0, "label": "Backspace" }, + { "matrix": [0, 12], "x": 12, "y": 0, "label": "Backspace" }, + { "matrix": [1, 0], "x": 1, "y": 0, "label": "Q" }, { "matrix": [1, 1], "x": 1, "y": 1, "label": "W" }, { "matrix": [1, 2], "x": 1, "y": 2, "label": "E" }, @@ -62,7 +64,8 @@ { "matrix": [1, 9], "x": 1, "y": 9, "label": "P" }, { "matrix": [1, 10], "x": 1, "y": 10, "label": "[" }, { "matrix": [1, 11], "x": 1, "y": 11, "label": "]" }, - { "matrix": [1, 11], "x": 1, "y": 12, "label": "\\" }, + { "matrix": [1, 12], "x": 1, "y": 12, "label": "\\" }, + { "matrix": [2, 0], "x": 2, "y": 0, "label": "A" }, { "matrix": [2, 1], "x": 2, "y": 1, "label": "S" }, { "matrix": [2, 2], "x": 2, "y": 2, "label": "D" }, @@ -74,7 +77,9 @@ { "matrix": [2, 8], "x": 2, "y": 8, "label": "L" }, { "matrix": [2, 9], "x": 2, "y": 9, "label": ";" }, { "matrix": [2, 10], "x": 2, "y": 10, "label": "'" }, - { "matrix": [2, 11], "x": 2, "y": 11, "w": 2, "label": "Enter" }, + { "matrix": [2, 11], "x": 2, "y": 11, "label": "Enter" }, + { "matrix": [2, 12], "x": 2, "y": 12, "label": "Enter" }, + { "matrix": [3, 0], "x": 3, "y": 0, "label": "Z" }, { "matrix": [3, 1], "x": 3, "y": 1, "label": "X" }, { "matrix": [3, 2], "x": 3, "y": 2, "label": "C" }, @@ -86,20 +91,26 @@ { "matrix": [3, 8], "x": 3, "y": 8, "label": "." }, { "matrix": [3, 9], "x": 3, "y": 9, "label": "/" }, { "matrix": [3, 10], "x": 3, "y": 10, "label": "Up" }, - { "matrix": [3, 11], "x": 3, "y": 11, "w": 2, "label": "ShiftR" }, - { "matrix": [4, 0], "x": 4, "y": 0, "label": "CtrlL" }, + { "matrix": [3, 11], "x": 3, "y": 11, "w": 2, "label": "RShift" }, + { "matrix": [3, 12], "x": 3, "y": 11, "w": 2, "label": "RShift" }, + + { "matrix": [4, 0], "x": 4, "y": 0, "label": "LCtrl" }, { "matrix": [4, 1], "x": 4, "y": 1, "label": "Fn" }, - { "matrix": [4, 2], "x": 4, "y": 2, "label": "ShiftL" }, + { "matrix": [4, 2], "x": 4, "y": 2, "label": "LShift" }, { "matrix": [4, 3], "x": 4, "y": 3, "label": "Alt" }, - { "matrix": [4, 4], "x": 4, "y": 4, "w": 3, "label": "Space" }, + { "matrix": [4, 4], "x": 4, "y": 4, "label": "Space" }, + { "matrix": [4, 5], "x": 4, "y": 5, "label": "Space" }, + { "matrix": [4, 6], "x": 4, "y": 6, "label": "Space" }, { "matrix": [4, 7], "x": 4, "y": 7, "label": "-" }, { "matrix": [4, 8], "x": 4, "y": 8, "label": "=" }, { "matrix": [4, 9], "x": 4, "y": 9, "label": "Left" }, { "matrix": [4, 10], "x": 4, "y": 10, "label": "Down" }, { "matrix": [4, 11], "x": 4, "y": 11, "label": "Right" }, - { "matrix": [4, 12], "x": 4, "y": 12, "label": "CtrlR" } - ], - "layout_iso": [ + { "matrix": [4, 12], "x": 4, "y": 12, "label": "RCtrl" } + ] + }, + "LAYOUT_iso": { + "layout": [ { "matrix": [0, 0], "x": 0, "y": 0, "label": "Esc" }, { "matrix": [0, 1], "x": 1, "y": 0, "label": "1" }, { "matrix": [0, 2], "x": 2, "y": 0, "label": "2" }, @@ -111,7 +122,9 @@ { "matrix": [0, 8], "x": 8, "y": 0, "label": "8" }, { "matrix": [0, 9], "x": 9, "y": 0, "label": "9" }, { "matrix": [0, 10], "x": 10, "y": 0, "label": "0" }, - { "matrix": [0, 11], "x": 11, "y": 0, "w": 2, "label": "Backspace" }, + { "matrix": [0, 11], "x": 11, "y": 0, "label": "Backspace" }, + { "matrix": [0, 12], "x": 12, "y": 0, "label": "Backspace" }, + { "matrix": [1, 0], "x": 1, "y": 0, "label": "Q" }, { "matrix": [1, 1], "x": 1, "y": 1, "label": "W" }, { "matrix": [1, 2], "x": 1, "y": 2, "label": "E" }, @@ -124,6 +137,8 @@ { "matrix": [1, 9], "x": 1, "y": 9, "label": "P" }, { "matrix": [1, 10], "x": 1, "y": 10, "label": "[" }, { "matrix": [1, 11], "x": 1, "y": 11, "label": "]" }, + { "matrix": [1, 12], "x": 1, "y": 12, "label": "Enter" }, + { "matrix": [2, 0], "x": 2, "y": 0, "label": "A" }, { "matrix": [2, 1], "x": 2, "y": 1, "label": "S" }, { "matrix": [2, 2], "x": 2, "y": 2, "label": "D" }, @@ -136,7 +151,8 @@ { "matrix": [2, 9], "x": 2, "y": 9, "label": ";" }, { "matrix": [2, 10], "x": 2, "y": 10, "label": "'" }, { "matrix": [2, 11], "x": 2, "y": 11, "label": "\\" }, - { "matrix": [1, 12], "x": 1, "y": 12, "h": 2, "label": "Enter" }, + { "matrix": [2, 12], "x": 2, "y": 12, "label": "Enter" }, + { "matrix": [3, 0], "x": 3, "y": 0, "label": "Z" }, { "matrix": [3, 1], "x": 3, "y": 1, "label": "X" }, { "matrix": [3, 2], "x": 3, "y": 2, "label": "C" }, @@ -148,18 +164,22 @@ { "matrix": [3, 8], "x": 3, "y": 8, "label": "." }, { "matrix": [3, 9], "x": 3, "y": 9, "label": "/" }, { "matrix": [3, 10], "x": 3, "y": 10, "label": "Up" }, - { "matrix": [3, 11], "x": 3, "y": 11, "w": 2, "label": "ShiftR" }, - { "matrix": [4, 0], "x": 4, "y": 0, "label": "CtrlL" }, + { "matrix": [3, 11], "x": 3, "y": 11, "label": "RShift" }, + { "matrix": [3, 12], "x": 3, "y": 12, "label": "RShift" }, + + { "matrix": [4, 0], "x": 4, "y": 0, "label": "LCtrl" }, { "matrix": [4, 1], "x": 4, "y": 1, "label": "Fn" }, - { "matrix": [4, 2], "x": 4, "y": 2, "label": "ShiftL" }, + { "matrix": [4, 2], "x": 4, "y": 2, "label": "LShift" }, { "matrix": [4, 3], "x": 4, "y": 3, "label": "Alt" }, - { "matrix": [4, 4], "x": 4, "y": 4, "w": 3, "label": "Space" }, + { "matrix": [4, 4], "x": 4, "y": 4, "label": "Space" }, + { "matrix": [4, 5], "x": 4, "y": 5, "label": "Space" }, + { "matrix": [4, 6], "x": 4, "y": 6, "label": "Space" }, { "matrix": [4, 7], "x": 4, "y": 7, "label": "-" }, { "matrix": [4, 8], "x": 4, "y": 8, "label": "=" }, { "matrix": [4, 9], "x": 4, "y": 9, "label": "Left" }, { "matrix": [4, 10], "x": 4, "y": 10, "label": "Down" }, { "matrix": [4, 11], "x": 4, "y": 11, "label": "Right" }, - { "matrix": [4, 12], "x": 4, "y": 12, "label": "CtrlR" } + { "matrix": [4, 12], "x": 4, "y": 12, "label": "RCtrl" } ] } } diff --git a/keyboards/mkbd65/rules.mk b/keyboards/mkbd65/rules.mk index da0535c8f2..3287da9fbd 100644 --- a/keyboards/mkbd65/rules.mk +++ b/keyboards/mkbd65/rules.mk @@ -1,35 +1,19 @@ -# build options -#LAYOUTS = [] - # AVR MCU Options -MCU = atmega32u4 F_CPU = 16000000 ARCH = AVR8 F_USB = $(F_CPU) OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT -BOOTLOADER = atmel-dfu # Feature Options MAGIC_ENABLE = no -COMBO_ENABLE = no AUDIO_ENABLE = no KEY_OVERRIDE_ENABLE = no LEADER_ENABLE = no MIDI_ENABLE = no UNICODE_ENABLE = no BLUETOOTH_ENABLE = no -SPLIT_KEYBOARD = no MUSIC_ENABLE = no SPACE_CADET_ENABLE = no GRAVE_ESC_ENABLE = yes AVR_USE_MINIMAL_PRINTF = yes -ENCODER_ENABLE = no - -DEFAULT_FOLDER = rev1 -# Enables Link Time Optimization (LTO) when compiling the keyboard. This makes the process take longer, but it can -# significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable). -LTO_ENABLE = yes - -# Audio control and System control -EXTRAKEY_ENABLE = yes