Merge remote-tracking branch 'upstream/develop' into xap

This commit is contained in:
Nick Brassel 2023-01-25 11:24:52 +11:00
commit 33e8e63e74
No known key found for this signature in database
22 changed files with 512 additions and 177 deletions

View File

@ -43,7 +43,7 @@ While there are different strategies for doing the actual matrix detection, they
} }
``` ```
That datastructure is a direct representation of the matrix for a 4 row by 5 column numpad. When a key is pressed that key's position within the matrix will be returned as `1` instead of `0`. That datastructure is a direct representation of the matrix for a 5 row by 4 column numpad. When a key is pressed that key's position within the matrix will be returned as `1` instead of `0`.
Matrix Scanning runs many times per second. The exact rate varies but typically it runs at least 10 times per second to avoid perceptible lag. Matrix Scanning runs many times per second. The exact rate varies but typically it runs at least 10 times per second to avoid perceptible lag.

View File

@ -20,8 +20,8 @@
#define RGB_MATRIX_LED_COUNT 61 #define RGB_MATRIX_LED_COUNT 61
/* Limit animations to 62.5 FPS to avoid tearing. (1/.016 = 62.5 FPS). */ /* Limit animations to 25 FPS to avoid tearing. (1/.040 = 25 FPS). */
#define RGB_MATRIX_LED_FLUSH_LIMIT 16 #define RGB_MATRIX_LED_FLUSH_LIMIT 40
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_KEYPRESSES

View File

@ -0,0 +1,84 @@
/* Copyright 2023 MATTMCCA (@MATTMCCA)
* SPDX-License-Identifier: GPL-2.0-only
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
#ifdef RGB_MATRIX_ENABLE
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 1
#define WS2812_PWM_PAL_MODE 1 //TIM1_CH1N (AF1)
#define WS2812_PWM_COMPLEMENTARY_OUTPUT
#define WS2812_DMA_STREAM STM32_DMA1_STREAM6
#define WS2812_DMA_CHANNEL 7 //7 works, CxS[3:0] 0111 = TIM1_UP on Channel 6? (RM0394.pdf pg.298)
#define RGB_DI_PIN A7 // The pin connected to the data pin of the LEDs
#define RGB_MATRIX_LED_COUNT 61 // The number of LEDs connected
#define RGB_MATRIX_KEYPRESSES // reacts to keypresses
#define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS // enable framebuffer effects
#define ENABLE_RGB_MATRIX_SOLID_COLOR // Static single color
#define ENABLE_RGB_MATRIX_ALPHAS_MODS // Static dual hue, speed is hue for secondary hue
#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Static gradient top to bottom, speed controls how much gradient changes
#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Static gradient left to right, speed controls how much gradient changes
#define ENABLE_RGB_MATRIX_BREATHING // Single hue brightness cycling animation
#define ENABLE_RGB_MATRIX_BAND_SAT // Single hue band fading saturation scrolling left to right
#define ENABLE_RGB_MATRIX_BAND_VAL // Single hue band fading brightness scrolling left to right
#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Single hue 3 blade spinning pinwheel fades saturation
#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // Single hue 3 blade spinning pinwheel fades brightness
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT // Single hue spinning spiral fades saturation
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Single hue spinning spiral fades brightness
#define ENABLE_RGB_MATRIX_CYCLE_ALL // Full keyboard solid hue cycling through full gradient
#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // Full gradient scrolling left to right
#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN // Full gradient scrolling top to bottom
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN // Full gradient scrolling out to in
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Full dual gradients scrolling out to in
#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Full gradient Chevron shaped scrolling left to right
#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL // Full gradient spinning pinwheel around center of keyboard
#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL // Full gradient spinning spiral around center of keyboard
#define ENABLE_RGB_MATRIX_DUAL_BEACON // Full gradient spinning around center of keyboard
#define ENABLE_RGB_MATRIX_RAINBOW_BEACON // Full tighter gradient spinning around center of keyboard
#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Full dual gradients spinning two halfs of keyboard
#define ENABLE_RGB_MATRIX_RAINDROPS // Randomly changes a single key's hue
#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Randomly changes a single key's hue and saturation
#define ENABLE_RGB_MATRIX_HUE_BREATHING // Hue shifts up a slight amount at the same time, then shifts back
#define ENABLE_RGB_MATRIX_HUE_PENDULUM // Hue shifts up a slight amount in a wave to the right, then back to the left
#define ENABLE_RGB_MATRIX_HUE_WAVE // Hue shifts up a slight amount and then back down in a wave to the right
/* RGB_MATRIX_FRAMEBUFFER_EFFECTS) */
#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
/* RGB_MATRIX_KEYPRESSES) | defined(RGB_MATRIX_KEYRELEASES) */
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Pulses keys hit to hue & value then fades value out
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE // Static single hue, pulses keys hit to shifted hue then fades to current hue
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse near a single key hit then fades value out
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // Hue & value pulse near multiple key hits then fades value out
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Hue & value pulse the same column and row of a single key hit then fades value out
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Hue & value pulse the same column and row of multiple key hits then fades value out
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of a single key hit then fades value out
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multiple key hits then fades value out
#define ENABLE_RGB_MATRIX_SPLASH // Full gradient & value pulse away from a single key hit then fades value out
#define ENABLE_RGB_MATRIX_MULTISPLASH // Full gradient & value pulse away from multiple key hits then fades value out
#define ENABLE_RGB_MATRIX_SOLID_SPLASH // Hue & value pulse away from a single key hit then fades value out
#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH // Hue & value pulse away from multiple key hits then fades value out
#endif

View File

@ -0,0 +1,21 @@
/* Copyright 2023 MATTMCCA (@MATTMCCA)
* SPDX-License-Identifier: GPL-2.0-only
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
#define HAL_USE_PWM TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,160 @@
{
"manufacturer": "MATTMCCA",
"keyboard_name": "black_hellebore",
"maintainer": "MATTMCCA",
"bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["B15", "B14", "B13", "A9", "A2", "B1", "B9", "B7", "B5", "B4", "B0", "A8", "B6", "B3"],
"rows": ["A15", "B8", "A4", "A3", "B2"]
},
"processor": "STM32L412",
"url": "https://github.com/MATTMCCA/The-Black-Hellebore",
"usb": {
"device_version": "1.0.0",
"pid": "0x4467",
"vid": "0x3141"
},
"rgb_matrix": {
"layout": [
{ "flags": 4, "matrix": [0, 0] , "x": 7 , "y": 5 } ,
{ "flags": 4, "matrix": [0, 1] , "x": 22 , "y": 5 } ,
{ "flags": 4, "matrix": [0, 2] , "x": 37 , "y": 5 } ,
{ "flags": 4, "matrix": [0, 3] , "x": 52 , "y": 5 } ,
{ "flags": 4, "matrix": [0, 4] , "x": 67 , "y": 5 } ,
{ "flags": 4, "matrix": [0, 5] , "x": 82 , "y": 5 } ,
{ "flags": 4, "matrix": [0, 6] , "x": 97 , "y": 5 } ,
{ "flags": 4, "matrix": [0, 7] , "x": 112, "y": 5 } ,
{ "flags": 4, "matrix": [0, 8] , "x": 127, "y": 5 } ,
{ "flags": 4, "matrix": [0, 9] , "x": 142, "y": 5 } ,
{ "flags": 4, "matrix": [0, 10], "x": 157, "y": 5 } ,
{ "flags": 4, "matrix": [0, 11], "x": 172, "y": 5 } ,
{ "flags": 4, "matrix": [0, 12], "x": 187, "y": 5 } ,
{ "flags": 4, "matrix": [0, 13], "x": 209, "y": 5 } ,
{ "flags": 4, "matrix": [1, 13], "x": 213, "y": 17 },
{ "flags": 4, "matrix": [1, 12], "x": 194, "y": 17 },
{ "flags": 4, "matrix": [1, 11], "x": 179, "y": 17 },
{ "flags": 4, "matrix": [1, 10], "x": 164, "y": 17 },
{ "flags": 4, "matrix": [1, 9] , "x": 149, "y": 17 },
{ "flags": 4, "matrix": [1, 8] , "x": 134, "y": 17 },
{ "flags": 4, "matrix": [1, 7] , "x": 119, "y": 17 },
{ "flags": 4, "matrix": [1, 6] , "x": 104, "y": 17 },
{ "flags": 4, "matrix": [1, 5] , "x": 90 , "y": 17 },
{ "flags": 4, "matrix": [1, 4] , "x": 75 , "y": 17 },
{ "flags": 4, "matrix": [1, 3] , "x": 60 , "y": 17 },
{ "flags": 4, "matrix": [1, 2] , "x": 45 , "y": 17 },
{ "flags": 4, "matrix": [1, 1] , "x": 30 , "y": 17 },
{ "flags": 4, "matrix": [1, 0] , "x": 11 , "y": 17 },
{ "flags": 4, "matrix": [2, 0] , "x": 13 , "y": 29 },
{ "flags": 4, "matrix": [2, 1] , "x": 34 , "y": 29 },
{ "flags": 4, "matrix": [2, 2] , "x": 49 , "y": 29 },
{ "flags": 4, "matrix": [2, 3] , "x": 63 , "y": 29 },
{ "flags": 4, "matrix": [2, 4] , "x": 78 , "y": 29 },
{ "flags": 4, "matrix": [2, 5] , "x": 93 , "y": 29 },
{ "flags": 4, "matrix": [2, 6] , "x": 108, "y": 29 },
{ "flags": 4, "matrix": [2, 7] , "x": 123, "y": 29 },
{ "flags": 4, "matrix": [2, 8] , "x": 138, "y": 29 },
{ "flags": 4, "matrix": [2, 9] , "x": 153, "y": 29 },
{ "flags": 4, "matrix": [2, 10], "x": 168, "y": 29 },
{ "flags": 4, "matrix": [2, 11], "x": 183, "y": 29 },
{ "flags": 4, "matrix": [2, 13], "x": 207, "y": 29 },
{ "flags": 4, "matrix": [3, 13], "x": 203, "y": 41 },
{ "flags": 4, "matrix": [3, 10], "x": 175, "y": 41 },
{ "flags": 4, "matrix": [3, 9] , "x": 161, "y": 41 },
{ "flags": 4, "matrix": [3, 8] , "x": 146, "y": 41 },
{ "flags": 4, "matrix": [3, 7] , "x": 131, "y": 41 },
{ "flags": 4, "matrix": [3, 6] , "x": 116, "y": 41 },
{ "flags": 4, "matrix": [3, 5] , "x": 101, "y": 41 },
{ "flags": 4, "matrix": [3, 4] , "x": 86 , "y": 41 },
{ "flags": 4, "matrix": [3, 3] , "x": 71 , "y": 41 },
{ "flags": 4, "matrix": [3, 2] , "x": 56 , "y": 41 },
{ "flags": 4, "matrix": [3, 1] , "x": 41 , "y": 41 },
{ "flags": 4, "matrix": [3, 0] , "x": 17 , "y": 41 },
{ "flags": 4, "matrix": [4, 0] , "x": 9 , "y": 54 },
{ "flags": 4, "matrix": [4, 1] , "x": 28 , "y": 54 },
{ "flags": 4, "matrix": [4, 2] , "x": 47 , "y": 54 },
{ "flags": 4, "matrix": [4, 5] , "x": 103, "y": 54 },
{ "flags": 4, "matrix": [4, 9] , "x": 159, "y": 54 },
{ "flags": 4, "matrix": [4, 10], "x": 177, "y": 54 },
{ "flags": 4, "matrix": [4, 11], "x": 196, "y": 54 },
{ "flags": 4, "matrix": [4, 13], "x": 215, "y": 54 }
]
},
"layouts": {
"LAYOUT_60_ansi": {
"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], "w": 2 , "x": 13 , "y": 0 },
{ "matrix": [1, 0] , "w": 1.5 , "x": 0 , "y": 1 },
{ "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], "w": 1.5 , "x": 13.5 , "y": 1 },
{ "matrix": [2, 0] , "w": 1.75 , "x": 0 , "y": 2 },
{ "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], "w": 2.25 , "x": 12.75, "y": 2 },
{ "matrix": [3, 0] , "w": 2.25 , "x": 0 , "y": 3 },
{ "matrix": [3, 1] , "x": 2.25 , "y": 3 },
{ "matrix": [3, 2] , "x": 3.25 , "y": 3 },
{ "matrix": [3, 3] , "x": 4.25 , "y": 3 },
{ "matrix": [3, 4] , "x": 5.25 , "y": 3 },
{ "matrix": [3, 5] , "x": 6.25 , "y": 3 },
{ "matrix": [3, 6] , "x": 7.25 , "y": 3 },
{ "matrix": [3, 7] , "x": 8.25 , "y": 3 },
{ "matrix": [3, 8] , "x": 9.25 , "y": 3 },
{ "matrix": [3, 9] , "x": 10.25, "y": 3 },
{ "matrix": [3, 10] , "x": 11.25, "y": 3 },
{ "matrix": [3, 13], "w": 2.75 , "x": 12.25, "y": 3 },
{ "matrix": [4, 0] , "w": 1.25 , "x": 0 , "y": 4 },
{ "matrix": [4, 1] , "w": 1.25 , "x": 1.25 , "y": 4 },
{ "matrix": [4, 2] , "w": 1.25 , "x": 2.5 , "y": 4 },
{ "matrix": [4, 5] , "w": 6.25 , "x": 3.75 , "y": 4 },
{ "matrix": [4, 9] , "w": 1.25 , "x": 10 , "y": 4 },
{ "matrix": [4, 10], "w": 1.25 , "x": 11.25, "y": 4 },
{ "matrix": [4, 11], "w": 1.25 , "x": 12.5 , "y": 4 },
{ "matrix": [4, 13], "w": 1.25 , "x": 13.75, "y": 4 }
]
}
}
}

View File

@ -0,0 +1,28 @@
/* Copyright 2023 MATTMCCA (@MATTMCCA)
* SPDX-License-Identifier: GPL-2.0-only
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi(
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_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, KC_RGUI, KC_APP, KC_RCTL
)
};

View File

@ -0,0 +1,53 @@
/* Copyright 2023 MATTMCCA (@MATTMCCA)
* SPDX-License-Identifier: GPL-2.0-only
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi(
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_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, KC_RGUI, KC_APP, KC_RCTL
),
[1] = LAYOUT_60_ansi(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT_60_ansi(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT_60_ansi(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@ -0,0 +1,25 @@
/* Copyright 2023 MATTMCCA (@MATTMCCA)
* SPDX-License-Identifier: GPL-2.0-only
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef STM32_PWM_USE_ADVANCED
#define STM32_PWM_USE_ADVANCED TRUE
#undef STM32_PWM_USE_TIM1
#define STM32_PWM_USE_TIM1 TRUE

View File

@ -0,0 +1,24 @@
# The Black Hellebore
* Keyboard Maintainer: [MATTMCCA](https://github.com/MATTMCCA)
* Hardware Supported: *https://github.com/MATTMCCA/The-Black-Hellebore*
* Hardware Availability: *https://github.com/MATTMCCA/The-Black-Hellebore*
Make example for this keyboard (after setting up your build environment):
make black_hellebore:default
Flashing example for this keyboard:
make black_hellebore: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

View File

@ -0,0 +1,2 @@
RGB_MATRIX_DRIVER = WS2812
WS2812_DRIVER = pwm

View File

@ -15,7 +15,7 @@
}, },
"encoder": { "encoder": {
"rotary": [ "rotary": [
{ "pin_a": "F0", "pin_b": "F1" } { "pin_a": "F4", "pin_b": "F5" }
] ]
} }
} }

View File

@ -23,7 +23,7 @@ enum {
TD_ESC_WINDOWS_EMOJI TD_ESC_WINDOWS_EMOJI
}; };
void td_esc_spotlight_emoji (qk_tap_dance_state_t *state, void *user_data) { void td_esc_spotlight_emoji (tap_dance_state_t *state, void *user_data) {
if (state->count == 1) { if (state->count == 1) {
tap_code(KC_ESC); tap_code(KC_ESC);
} else if (state->count == 2) { } else if (state->count == 2) {
@ -33,7 +33,7 @@ void td_esc_spotlight_emoji (qk_tap_dance_state_t *state, void *user_data) {
} }
} }
void td_esc_windows_emoji (qk_tap_dance_state_t *state, void *user_data) { void td_esc_windows_emoji (tap_dance_state_t *state, void *user_data) {
if (state->count == 1) { if (state->count == 1) {
tap_code(KC_ESC); tap_code(KC_ESC);
} else if (state->count == 2) { } else if (state->count == 2) {
@ -44,7 +44,7 @@ void td_esc_windows_emoji (qk_tap_dance_state_t *state, void *user_data) {
}; };
// Tap Dance definitions // Tap Dance definitions
qk_tap_dance_action_t tap_dance_actions[] = { tap_dance_action_t tap_dance_actions[] = {
[TD_ESC_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN(td_esc_spotlight_emoji), [TD_ESC_SPOTLIGHT_EMOJI] = ACTION_TAP_DANCE_FN(td_esc_spotlight_emoji),
[TD_ESC_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN(td_esc_windows_emoji) [TD_ESC_WINDOWS_EMOJI] = ACTION_TAP_DANCE_FN(td_esc_windows_emoji)
}; };

View File

@ -26,6 +26,17 @@ const matrix_row_t matrix_mask[] = {
#ifdef DIP_SWITCH_ENABLE #ifdef DIP_SWITCH_ENABLE
bool dip_switch_update_kb(uint8_t index, bool active) {
if (!dip_switch_update_user(index, active)) { return false;}
if (index == 0) {
default_layer_set(1UL << (active ? 1 : 0));
}
return true;
}
#endif // DIP_SWITCH_ENABLE
#if defined(RGB_MATRIX_ENABLE) && defined(CAPS_LOCK_LED_INDEX)
bool process_record_kb(uint16_t keycode, keyrecord_t *record) { bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) { return false; } if (!process_record_user(keycode, record)) { return false; }
switch (keycode) { switch (keycode) {

View File

@ -48,7 +48,6 @@ enum preonic_keycodes {
#define LT_LOWER_SPC LT(_LOWER, KC_SPC) #define LT_LOWER_SPC LT(_LOWER, KC_SPC)
#define LM_COMP_LALT LM(_COMPOSITOR, MOD_LALT) #define LM_COMP_LALT LM(_COMPOSITOR, MOD_LALT)
#define LM_COMP_LALT_LSFT LM(_COMPOSITOR, MOD_LALT | MOD_LSFT)
#define KO_LAYER_MASK_EXCEPT(layer) ((~0) & ~(1 << layer)) #define KO_LAYER_MASK_EXCEPT(layer) ((~0) & ~(1 << layer))
@ -142,24 +141,24 @@ const key_override_t **key_overrides = (const key_override_t *[]){
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty /* Qwerty
* ,------------------------------------------------------------------------------------------------------------------------------------. * ,----------------------------------------------------------------------------------------------------------.
* | Caps Lock | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Leader | * | Caps Lock | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Leader |
* |--------------+--------------------+------+------+------+------+-----------+------+------+------+--------------------+--------------| * |--------------+-------+------+------+------+------+-----------+------+------+------+-------+--------------|
* | Ctrl | Q | W | E | R | T | Y/Copy | U/Ü | I | O/Ö | P/Paste | Ctrl | * | Ctrl | Q | W | E | R | T | Y/Copy | U/Ü | I | O/Ö |P/Paste| Ctrl |
* |--------------+--------------------+------+------+------+------+-----------+------+------+------+--------------------+--------------| * |--------------+-------+------+------+------+------+-----------+------+------+------+-------+--------------|
* | Shift/Esc | A/Ä | S/ß | D | F | G | H | J | K | L | ' | Shift/Enter | * | Shift/Esc | A/Ä | S/ß | D | F | G | H | J | K | L | ' | Shift/Enter |
* |--------------+--------------------+------+------+------+------+-----------+------+------+------+--------------------+--------------| * |--------------+-------+------+------+------+------+-----------+------+------+------+-------+--------------|
* |Compositor+Alt| Z |X/Cut | C | V | B | N | M | , | . | / |Compositor+Alt| * | Alt | Z |X/Cut | C | V | B | N | M | , | . | / | Alt |
* |--------------+--------------------+------+------+------+------+-----------+------+------+------+--------------------+--------------| * |--------------+-------+------+------+------+------+-----------+------+------+------+-------+--------------|
* | |Compositor+Alt+Shift| | |Raise |Lower |Lower/Space|Raise | | |Compositor+Alt+Shift| Manage | * | Mouse | | | |Raise |Lower |Lower/Space|Raise | | | | Manage |
* `------------------------------------------------------------------------------------------------------------------------------------' * `----------------------------------------------------------------------------------------------------------'
*/ */
[_QWERTY] = LAYOUT_preonic_grid( [_QWERTY] = LAYOUT_preonic_grid(
KC_CAPS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LEAD, KC_CAPS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LEAD,
KC_LCTL, KC_Q, KC_W, KC_E, KC_R, KC_T, LT_COPY_Y, LT_UE_U, KC_I, LT_OE_O, LT_PASTE_P, KC_RCTL, KC_LCTL, KC_Q, KC_W, KC_E, KC_R, KC_T, LT_COPY_Y, LT_UE_U, KC_I, LT_OE_O, LT_PASTE_P, KC_RCTL,
MOD_TAP_LSFT_ESC, LT_AE_A, LT_SZ_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, MOD_TAP_LSFT_ENT, MOD_TAP_LSFT_ESC, LT_AE_A, LT_SZ_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, MOD_TAP_LSFT_ENT,
LM_COMP_LALT, KC_Z, LT_CUT_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LM_COMP_LALT, LM_COMP_LALT, KC_Z, LT_CUT_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LM_COMP_LALT,
_______, LM_COMP_LALT_LSFT, _______, _______, RAISE, LOWER, LT_LOWER_SPC, RAISE, _______, _______, _______, MANAGE TG(_MOUSE), _______, _______, _______, RAISE, LOWER, LT_LOWER_SPC, RAISE, _______, _______, _______, MANAGE
), ),
/* Lower /* Lower
* ,-----------------------------------------------------------------------------------. * ,-----------------------------------------------------------------------------------.
@ -203,7 +202,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
), ),
/* Mouse /* Mouse
* ,-------------------------------------------------------------------------------------------------------------------------------------------------------. * ,-------------------------------------------------------------------------------------------------------------------------------------------------------.
* | Caps Lock | | | | | | | | | | | Leader | * | | | | | | | | | | | | |
* |--------------+-------+--------------+--------------+--------------+--------------+-----------+-----------+---------+------------+------+--------------| * |--------------+-------+--------------+--------------+--------------+--------------+-----------+-----------+---------+------------+------+--------------|
* | | | | | | |Wheel Left |Wheel Down |Wheel Up |Wheel Right | | Ctrl | * | | | | | | |Wheel Left |Wheel Down |Wheel Up |Wheel Right | | Ctrl |
* |--------------+-------+--------------+--------------+--------------+--------------+-----------+-----------+---------+------------+------+--------------| * |--------------+-------+--------------+--------------+--------------+--------------+-----------+-----------+---------+------------+------+--------------|
@ -211,15 +210,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------------+-------+--------------+--------------+--------------+--------------+-----------+-----------+---------+------------+------+--------------| * |--------------+-------+--------------+--------------+--------------+--------------+-----------+-----------+---------+------------+------+--------------|
* |Compositor+Alt| | | | | | | | | | |Compositor+Alt| * |Compositor+Alt| | | | | | | | | | |Compositor+Alt|
* |--------------+-------+--------------+--------------+--------------+--------------+-----------+-----------+---------+------------+------+--------------| * |--------------+-------+--------------+--------------+--------------+--------------+-----------+-----------+---------+------------+------+--------------|
* | | | |Accelaration 2|Accelaration 1|Accelaration 0| | | | | | | * |Mouse | | |Accelaration 2|Accelaration 1|Accelaration 0| | | | | | |
* `-------------------------------------------------------------------------------------------------------------------------------------------------------' * `-------------------------------------------------------------------------------------------------------------------------------------------------------'
*/ */
[_MOUSE] = LAYOUT_preonic_grid( [_MOUSE] = LAYOUT_preonic_grid(
_______, 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_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_UP, KC_MS_WH_RIGHT, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_UP, KC_MS_WH_RIGHT, XXXXXXX, _______,
XXXXXXX, XXXXXXX, KC_MS_BTN3, KC_MS_BTN2, KC_MS_BTN1, XXXXXXX, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_BTN3, KC_MS_BTN2, KC_MS_BTN1, XXXXXXX, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, 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_MS_ACCEL2, KC_MS_ACCEL1, KC_MS_ACCEL0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX _______, XXXXXXX, XXXXXXX, KC_MS_ACCEL2, KC_MS_ACCEL1, KC_MS_ACCEL0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
), ),
/* Manage /* Manage
* ,---------------------------------------------------------------------------------------. * ,---------------------------------------------------------------------------------------.
@ -247,7 +246,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+------+------+------+------+------| * |------+------+------+------+------+------+------+------+------+------+------+------|
* | | Q | W | E | R | T | Y | U | I | O | P | | * | | Q | W | E | R | T | Y | U | I | O | P | |
* |------+------+------+------+------+-------------+------+------+------+------+------| * |------+------+------+------+------+-------------+------+------+------+------+------|
* | | A | S | D | F | G | H | J | K | L | ' |Enter | * |Shift | A | S | D | F | G | H | J | K | L | ' |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------| * |------+------+------+------+------+------+------+------+------+------+------+------|
* | | Z | X | C | V | B | N | M | , | . | / | | * | | Z | X | C | V | B | N | M | , | . | / | |
* |------+------+------+------+------+------+------+------+------+------+------+------| * |------+------+------+------+------+------+------+------+------+------+------+------|
@ -255,11 +254,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------' * `-----------------------------------------------------------------------------------'
*/ */
[_COMPOSITOR] = LAYOUT_preonic_grid( [_COMPOSITOR] = LAYOUT_preonic_grid(
XXXXXXX, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, XXXXXXX, XXXXXXX, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, XXXXXXX,
XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, XXXXXXX, XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, XXXXXXX,
XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, _______, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, _______,
XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
) )
}; };
@ -396,11 +395,6 @@ static inline void leader_bindings(void) {
SEQ_ONE_KEY(KC_P) { SEQ_ONE_KEY(KC_P) {
tap_code16(C(S(KC_V))); tap_code16(C(S(KC_V)));
} }
/* Toggle mouse layer. */
SEQ_ONE_KEY(KC_CAPS) {
layer_invert(_MOUSE);
}
} }
} }

View File

@ -34,23 +34,6 @@ enum layers { _BASE = 0, _NAV, _SYM, _FUNCTION, _ADJUST };
// produces the key `tap` when tapped (i.e. pressed and released). // produces the key `tap` when tapped (i.e. pressed and released).
// clang-format off // clang-format off
#define LAYOUT_via( \
L00, L01, L02, L03, L04, L05, LE0, LE1, RE0, RE1, R06, R07, R08, R09, R10, R11, \
L12, L13, L14, L15, L16, L17, R18, R19, R20, R21, R22, R23, \
L24, L25, L26, L27, L28, L29, L30, L31, R32, R33, R34, R35, R36, R37, R38, R39, \
L40, L41, L42, L43, L44, R45, R46, R47, R48, R49 \
) \
{ \
{ LE0, LE1, L05, L04, L03, L02, L01, L00 }, \
{ RE0, RE1, L17, L16, L15, L14, L13, L12 }, \
{ L31, L30, L29, L28, L27, L26, L25, L24 }, \
{ L44, L43, L42, L41, L40, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, R06, R07, R08, R09, R10, R11 }, \
{ KC_NO, KC_NO, R18, R19, R20, R21, R22, R23 }, \
{ R32, R33, R34, R35, R36, R37, R38, R39 }, \
{ R45, R46, R47, R48, R49, KC_NO, KC_NO, KC_NO }, \
}
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* /*
* Base Layer: QWERTY * Base Layer: QWERTY
@ -66,8 +49,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | Enter| | | | | | | | | * | | | Enter| | | | | | | | |
* `----------------------------------' `----------------------------------' * `----------------------------------' `----------------------------------'
*/ */
[_BASE] = LAYOUT_via( [_BASE] = LAYOUT(
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_VOLD, KC_VOLU, KC_PGDN, KC_PGUP, KC_Y, KC_U , KC_I , KC_O , KC_P , 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_BSPC,
CTL_ESC , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H, KC_J , KC_K , KC_L ,KC_SCLN,CTL_QUOT, CTL_ESC , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H, KC_J , KC_K , KC_L ,KC_SCLN,CTL_QUOT,
KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_LBRC,KC_CAPS, FKEYS , KC_RBRC, KC_N, KC_M ,KC_COMM, KC_DOT ,KC_SLSH, KC_RSFT, KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_LBRC,KC_CAPS, FKEYS , KC_RBRC, KC_N, KC_M ,KC_COMM, KC_DOT ,KC_SLSH, KC_RSFT,
ADJUST , KC_LGUI, ALT_ENT, KC_SPC , NAV , SYM , KC_SPC ,KC_RALT, KC_RGUI, KC_APP ADJUST , KC_LGUI, ALT_ENT, KC_SPC , NAV , SYM , KC_SPC ,KC_RALT, KC_RGUI, KC_APP
@ -87,10 +70,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | * | | | | | | | | | | | |
* `----------------------------------' `----------------------------------' * `----------------------------------' `----------------------------------'
*/ */
[_NAV] = LAYOUT_via( [_NAV] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_VOLU, KC_DEL, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_VOLU, KC_DEL,
_______, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_VOLD, KC_INS, _______, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_VOLD, KC_INS,
_______, _______, _______, _______, _______, _______, _______, KC_SCRL, _______, _______,KC_PAUSE, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_PSCR, _______, _______, _______, _______, _______, _______, _______, KC_SCRL, _______, _______, KC_PAUSE, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_PSCR,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
), ),
@ -108,8 +91,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | * | | | | | | | | | | | |
* `----------------------------------' `----------------------------------' * `----------------------------------' `----------------------------------'
*/ */
[_SYM] = LAYOUT_via( [_SYM] = LAYOUT(
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , _______, _______, _______, _______, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_EQL , KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_EQL ,
KC_TILD , KC_EXLM, KC_AT , KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS, KC_TILD , KC_EXLM, KC_AT , KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS,
KC_PIPE , KC_BSLS, KC_COLN, KC_SCLN, KC_MINS, KC_NUBS, KC_LBRC, _______, _______, KC_RBRC, KC_NUHS, KC_UNDS, KC_COMM, KC_DOT, KC_SLSH, KC_QUES, KC_PIPE , KC_BSLS, KC_COLN, KC_SCLN, KC_MINS, KC_NUBS, KC_LBRC, _______, _______, KC_RBRC, KC_NUHS, KC_UNDS, KC_COMM, KC_DOT, KC_SLSH, KC_QUES,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
@ -129,8 +112,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | * | | | | | | | | | | | |
* `----------------------------------' `----------------------------------' * `----------------------------------' `----------------------------------'
*/ */
[_FUNCTION] = LAYOUT_via( [_FUNCTION] = LAYOUT(
_______, KC_F9 , KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F9 , KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______,
_______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , _______, _______, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, _______, _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , _______, _______, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, _______,
_______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
@ -150,100 +133,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | * | | | | | | | | | | | |
* `----------------------------------' `----------------------------------' * `----------------------------------' `----------------------------------'
*/ */
[_ADJUST] = LAYOUT_via( [_ADJUST] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SAI, RGB_HUI, RGB_VAI, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_SAI, RGB_HUI, RGB_VAI, RGB_MOD, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_HUD, RGB_VAD, RGB_RMOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_HUD, RGB_VAD, RGB_RMOD, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
), )
}; };
// clang-format on // clang-format on
#ifdef ENCODER_ENABLE #ifdef ENCODER_MAP_ENABLE
static uint8_t encoder_state[2] = {0}; const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
static keypos_t encoder_ccw[2] = {{0, 0}, {0, 1}}; [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
static keypos_t encoder_cw[2] = {{1, 0}, {1, 1}}; [1] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
[2] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
void encoder_action_unregister(void) { [3] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
for (int index = 0; index < 2; ++index) { [4] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
if (encoder_state[index]) {
keyevent_t encoder_event = (keyevent_t){.key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], .pressed = false, .time = (timer_read() | 1)};
encoder_state[index] = 0;
action_exec(encoder_event);
}
}
}
void encoder_action_register(uint8_t index, bool clockwise) {
keyevent_t encoder_event = (keyevent_t){.key = clockwise ? encoder_cw[index] : encoder_ccw[index], .pressed = true, .time = (timer_read() | 1)};
encoder_state[index] = (clockwise ^ 1) | (clockwise << 1);
action_exec(encoder_event);
}
void matrix_scan_user(void) { encoder_action_unregister(); }
bool encoder_update_user(uint8_t index, bool clockwise) {
encoder_action_register(index, clockwise);
return false;
}; };
#endif #endif
#ifdef OLED_ENABLE
bool oled_task_user(void) {
if (is_keyboard_master()) {
// QMK Logo and version information
// clang-format off
static const char PROGMEM qmk_logo[] = {
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0};
// clang-format on
oled_write_P(qmk_logo, false);
oled_write_P(PSTR("Kyria rev1.0 w/ VIA\n\n"), false);
// Host Keyboard Layer Status
oled_write_P(PSTR("Layer: "), false);
switch (get_highest_layer(layer_state | default_layer_state)) {
case 0:
oled_write_P(PSTR("Base\n"), false);
break;
case 1:
oled_write_P(PSTR("Nav\n"), false);
break;
case 2:
oled_write_P(PSTR("Sym\n"), false);
break;
case 3:
oled_write_P(PSTR("Function\n"), false);
break;
case 4:
oled_write_P(PSTR("Adjust\n"), false);
break;
}
// Host Keyboard LED Status
led_t led_usb_state = host_keyboard_led_state();
oled_write_P(led_usb_state.num_lock ? PSTR("NUMLCK ") : PSTR(" "), false);
oled_write_P(led_usb_state.caps_lock ? PSTR("CAPLCK ") : PSTR(" "), false);
oled_write_P(led_usb_state.scroll_lock ? PSTR("SCRLCK ") : PSTR(" "), false);
} else {
// clang-format off
static const char PROGMEM kyria_logo[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,192,224,240,112,120, 56, 60, 28, 30, 14, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 14, 14, 14, 30, 28, 60, 56,120,112,240,224,192,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,192,224,240,124, 62, 31, 15, 7, 3, 1,128,192,224,240,120, 56, 60, 28, 30, 14, 14, 7, 7,135,231,127, 31,255,255, 31,127,231,135, 7, 7, 14, 14, 30, 28, 60, 56,120,240,224,192,128, 1, 3, 7, 15, 31, 62,124,240,224,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0,240,252,255, 31, 7, 1, 0, 0,192,240,252,254,255,247,243,177,176, 48, 48, 48, 48, 48, 48, 48,120,254,135, 1, 0, 0,255,255, 0, 0, 1,135,254,120, 48, 48, 48, 48, 48, 48, 48,176,177,243,247,255,254,252,240,192, 0, 0, 1, 7, 31,255,252,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,255,255,255, 0, 0, 0, 0, 0,254,255,255, 1, 1, 7, 30,120,225,129,131,131,134,134,140,140,152,152,177,183,254,248,224,255,255,224,248,254,183,177,152,152,140,140,134,134,131,131,129,225,120, 30, 7, 1, 1,255,255,254, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0,255,255, 0, 0,192,192, 48, 48, 0, 0,240,240, 0, 0, 0, 0, 0, 0,240,240, 0, 0,240,240,192,192, 48, 48, 48, 48,192,192, 0, 0, 48, 48,243,243, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,192,192, 0, 0, 0, 0, 0,
0, 0, 0,255,255,255, 0, 0, 0, 0, 0,127,255,255,128,128,224,120, 30,135,129,193,193, 97, 97, 49, 49, 25, 25,141,237,127, 31, 7,255,255, 7, 31,127,237,141, 25, 25, 49, 49, 97, 97,193,193,129,135, 30,120,224,128,128,255,255,127, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0, 63, 63, 3, 3, 12, 12, 48, 48, 0, 0, 0, 0, 51, 51, 51, 51, 51, 51, 15, 15, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 63, 63, 48, 48, 0, 0, 12, 12, 51, 51, 51, 51, 51, 51, 63, 63, 0, 0, 0, 0, 0,
0, 0, 0, 0, 15, 63,255,248,224,128, 0, 0, 3, 15, 63,127,255,239,207,141, 13, 12, 12, 12, 12, 12, 12, 12, 30,127,225,128, 0, 0,255,255, 0, 0,128,225,127, 30, 12, 12, 12, 12, 12, 12, 12, 13,141,207,239,255,127, 63, 15, 3, 0, 0,128,224,248,255, 63, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 62,124,248,240,224,192,128, 1, 3, 7, 15, 30, 28, 60, 56,120,112,112,224,224,225,231,254,248,255,255,248,254,231,225,224,224,112,112,120, 56, 60, 28, 30, 15, 7, 3, 1,128,192,224,240,248,124, 62, 15, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 7, 15, 14, 30, 28, 60, 56,120,112,112,112,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,112,112,112,120, 56, 60, 28, 30, 14, 15, 7, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
// clang-format on
oled_write_raw_P(kyria_logo, sizeof(kyria_logo));
}
return false;
}
#endif

View File

@ -1,10 +1,10 @@
OLED_ENABLE = yes OLED_ENABLE = yes
OLED_DRIVER = SSD1306 # Enables the use of OLED displays OLED_DRIVER = SSD1306 # Enables the use of OLED displays
ENCODER_ENABLE = yes # Enables the use of one or more encoders ENCODER_ENABLE = yes # Enables the use of one or more encoders
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
VIA_ENABLE = yes VIA_ENABLE = yes
NKRO_ENABLE = yes NKRO_ENABLE = yes
KEY_LOCK_ENABLE = no KEY_LOCK_ENABLE = no
SPACE_CADET_ENABLE = no SPACE_CADET_ENABLE = no
MAGIC_ENABLE = no MAGIC_ENABLE = no
GRAVE_ESCAPE_ENABLE = no GRAVE_ESCAPE_ENABLE = no
ENCODER_MAP_ENABLE = yes

View File

@ -34,7 +34,7 @@ def bux(cli):
@B _y ]# ,c vUWNWWPsfsssN9WyccnckAfUfWb0DR0&R5RRRddq2_ `@D`jr@2U@#c3@1@Qc- B@ @B _y ]# ,c vUWNWWPsfsssN9WyccnckAfUfWb0DR0&R5RRRddq2_ `@D`jr@2U@#c3@1@Qc- B@
@B !7! .r]` }AE0RdRqNd9dNR9fUIzzosPqqAddNNdER9EE9dPy! BQ!zy@iU@.Q@@y@8x- B@ @B !7! .r]` }AE0RdRqNd9dNR9fUIzzosPqqAddNNdER9EE9dPy! BQ!zy@iU@.Q@@y@8x- B@
@B :****>. '7adddDdR&gRNdRbd&dNNbbRdNdd5NdRRD0RSf}- .k0&EW`xR .8Q=NRRx B@ @B :****>. '7adddDdR&gRNdRbd&dNNbbRdNdd5NdRRD0RSf}- .k0&EW`xR .8Q=NRRx B@
@B =**-rx*r}r~}" ;n2jkzsf3N3zsKsP5dddRddddRddNNqPzy\" '~****" B@ @B =**-rx*r}r~}" ;n2jkzsf3N3zsKsP5dddRddddRddNNqPzy\\" '~****" B@
@B :!!~!;=~r>:*_ `:^vxikylulKfHkyjzzozoIoklix|^!-` B@ @B :!!~!;=~r>:*_ `:^vxikylulKfHkyjzzozoIoklix|^!-` B@
@B ```'-_""::::!:_-.`` B@ @B ```'-_""::::!:_-.`` B@
@B `- .` B@ @B `- .` B@

View File

@ -1,10 +1,13 @@
// Copyright 2022 Stefan Kerkmann (@KarlK90) // Copyright 2022 Stefan Kerkmann (@KarlK90)
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#include "quantum.h"
#include "ws2812.h" #include "ws2812.h"
#include "hardware/pio.h" #include "hardware/timer.h"
#include "hardware/clocks.h" #include "hardware/clocks.h"
// Keep this exact include order otherwise we run into naming conflicts between
// pico-sdk and rp2040.h which we don't control.
#include "quantum.h"
#include "hardware/pio.h"
#if !defined(MCU_RP) #if !defined(MCU_RP)
# error PIO Driver is only available for Raspberry Pi 2040 MCUs! # error PIO Driver is only available for Raspberry Pi 2040 MCUs!
@ -132,7 +135,7 @@ static uint32_t RP_DMA_MODE_WS2812;
static int STATE_MACHINE = -1; static int STATE_MACHINE = -1;
static SEMAPHORE_DECL(TRANSFER_COUNTER, 1); static SEMAPHORE_DECL(TRANSFER_COUNTER, 1);
static rtcnt_t LAST_TRANSFER; static absolute_time_t LAST_TRANSFER;
/** /**
* @brief Convert RGBW value into WS2812 compatible 32-bit data word. * @brief Convert RGBW value into WS2812 compatible 32-bit data word.
@ -161,7 +164,7 @@ static void ws2812_dma_callback(void* p, uint32_t ct) {
// Convert from ns to us // Convert from ns to us
time_to_completion /= 1000; time_to_completion /= 1000;
LAST_TRANSFER = chSysGetRealtimeCounterX() + time_to_completion + WS2812_TRST_US; update_us_since_boot(&LAST_TRANSFER, time_us_64() + time_to_completion + WS2812_TRST_US);
osalSysLockFromISR(); osalSysLockFromISR();
chSemSignalI(&TRANSFER_COUNTER); chSemSignalI(&TRANSFER_COUNTER);
@ -256,8 +259,7 @@ static inline void sync_ws2812_transfer(void) {
} }
// Busy wait until last transfer has finished // Busy wait until last transfer has finished
while (unlikely(!timer_expired32(chSysGetRealtimeCounterX(), LAST_TRANSFER))) { busy_wait_until(LAST_TRANSFER);
}
} }
void ws2812_setleds(LED_TYPE* ledarray, uint16_t leds) { void ws2812_setleds(LED_TYPE* ledarray, uint16_t leds) {

View File

@ -25,6 +25,7 @@ PICOSDKROOT := $(TOP_DIR)/lib/pico-sdk
PICOSDKSRC = $(PICOSDKROOT)/src/rp2_common/hardware_clocks/clocks.c \ PICOSDKSRC = $(PICOSDKROOT)/src/rp2_common/hardware_clocks/clocks.c \
$(PICOSDKROOT)/src/rp2_common/hardware_pll/pll.c \ $(PICOSDKROOT)/src/rp2_common/hardware_pll/pll.c \
$(PICOSDKROOT)/src/rp2_common/hardware_pio/pio.c \ $(PICOSDKROOT)/src/rp2_common/hardware_pio/pio.c \
$(PICOSDKROOT)/src/rp2_common/hardware_timer/timer.c \
$(PICOSDKROOT)/src/rp2_common/hardware_flash/flash.c \ $(PICOSDKROOT)/src/rp2_common/hardware_flash/flash.c \
$(PICOSDKROOT)/src/rp2_common/hardware_gpio/gpio.c \ $(PICOSDKROOT)/src/rp2_common/hardware_gpio/gpio.c \
$(PICOSDKROOT)/src/rp2_common/hardware_claim/claim.c \ $(PICOSDKROOT)/src/rp2_common/hardware_claim/claim.c \
@ -44,6 +45,7 @@ PICOSDKINC = $(CHIBIOS)//os/various/pico_bindings/dumb/include \
$(PICOSDKROOT)/src/rp2_common/hardware_pll/include \ $(PICOSDKROOT)/src/rp2_common/hardware_pll/include \
$(PICOSDKROOT)/src/rp2_common/hardware_pio/include \ $(PICOSDKROOT)/src/rp2_common/hardware_pio/include \
$(PICOSDKROOT)/src/rp2_common/hardware_sync/include \ $(PICOSDKROOT)/src/rp2_common/hardware_sync/include \
$(PICOSDKROOT)/src/rp2_common/hardware_timer/include \
$(PICOSDKROOT)/src/rp2_common/hardware_resets/include \ $(PICOSDKROOT)/src/rp2_common/hardware_resets/include \
$(PICOSDKROOT)/src/rp2_common/hardware_watchdog/include \ $(PICOSDKROOT)/src/rp2_common/hardware_watchdog/include \
$(PICOSDKROOT)/src/rp2_common/hardware_xosc/include \ $(PICOSDKROOT)/src/rp2_common/hardware_xosc/include \

View File

@ -11,44 +11,58 @@
#include "keymap_introspection.h" #include "keymap_introspection.h"
#define NUM_KEYMAP_LAYERS ((uint8_t)(sizeof(keymaps) / ((MATRIX_ROWS) * (MATRIX_COLS) * sizeof(uint16_t)))) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Key mapping
uint8_t keymap_layer_count(void) { #define NUM_KEYMAP_LAYERS_RAW ((uint8_t)(sizeof(keymaps) / ((MATRIX_ROWS) * (MATRIX_COLS) * sizeof(uint16_t))))
return NUM_KEYMAP_LAYERS;
uint8_t keymap_layer_count_raw(void) {
return NUM_KEYMAP_LAYERS_RAW;
}
__attribute__((weak)) uint8_t keymap_layer_count(void) {
return keymap_layer_count_raw();
} }
#ifdef DYNAMIC_KEYMAP_ENABLE #ifdef DYNAMIC_KEYMAP_ENABLE
_Static_assert(NUM_KEYMAP_LAYERS <= MAX_LAYER, "Number of keymap layers exceeds maximum set by DYNAMIC_KEYMAP_LAYER_COUNT"); _Static_assert(NUM_KEYMAP_LAYERS_RAW <= MAX_LAYER, "Number of keymap layers exceeds maximum set by DYNAMIC_KEYMAP_LAYER_COUNT");
#else #else
_Static_assert(NUM_KEYMAP_LAYERS <= MAX_LAYER, "Number of keymap layers exceeds maximum set by LAYER_STATE_(8|16|32)BIT"); _Static_assert(NUM_KEYMAP_LAYERS_RAW <= MAX_LAYER, "Number of keymap layers exceeds maximum set by LAYER_STATE_(8|16|32)BIT");
#endif #endif
uint16_t keycode_at_keymap_location_raw(uint8_t layer_num, uint8_t row, uint8_t column) { uint16_t keycode_at_keymap_location_raw(uint8_t layer_num, uint8_t row, uint8_t column) {
if (layer_num < NUM_KEYMAP_LAYERS && row < MATRIX_ROWS && column < MATRIX_COLS) { if (layer_num < NUM_KEYMAP_LAYERS_RAW && row < MATRIX_ROWS && column < MATRIX_COLS) {
return pgm_read_word(&keymaps[layer_num][row][column]); return pgm_read_word(&keymaps[layer_num][row][column]);
} }
return KC_TRANSPARENT; return KC_TRNS;
} }
__attribute__((weak)) uint16_t keycode_at_keymap_location(uint8_t layer_num, uint8_t row, uint8_t column) { __attribute__((weak)) uint16_t keycode_at_keymap_location(uint8_t layer_num, uint8_t row, uint8_t column) {
return keycode_at_keymap_location_raw(layer_num, row, column); return keycode_at_keymap_location_raw(layer_num, row, column);
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Encoder mapping
#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) #if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)
# define NUM_ENCODERMAP_LAYERS ((uint8_t)(sizeof(encoder_map) / ((NUM_ENCODERS) * (2) * sizeof(uint16_t)))) # define NUM_ENCODERMAP_LAYERS_RAW ((uint8_t)(sizeof(encoder_map) / ((NUM_ENCODERS) * (2) * sizeof(uint16_t))))
uint8_t encodermap_layer_count(void) { uint8_t encodermap_layer_count_raw(void) {
return NUM_ENCODERMAP_LAYERS; return NUM_ENCODERMAP_LAYERS_RAW;
} }
_Static_assert(NUM_KEYMAP_LAYERS == NUM_ENCODERMAP_LAYERS, "Number of encoder_map layers doesn't match the number of keymap layers"); __attribute__((weak)) uint8_t encodermap_layer_count(void) {
return encodermap_layer_count_raw();
}
_Static_assert(NUM_KEYMAP_LAYERS_RAW == NUM_ENCODERMAP_LAYERS_RAW, "Number of encoder_map layers doesn't match the number of keymap layers");
uint16_t keycode_at_encodermap_location_raw(uint8_t layer_num, uint8_t encoder_idx, bool clockwise) { uint16_t keycode_at_encodermap_location_raw(uint8_t layer_num, uint8_t encoder_idx, bool clockwise) {
if (layer_num < NUM_ENCODERMAP_LAYERS && encoder_idx < NUM_ENCODERS) { if (layer_num < NUM_ENCODERMAP_LAYERS_RAW && encoder_idx < NUM_ENCODERS) {
return pgm_read_word(&encoder_map[layer_num][encoder_idx][clockwise ? 0 : 1]); return pgm_read_word(&encoder_map[layer_num][encoder_idx][clockwise ? 0 : 1]);
} }
return KC_TRANSPARENT; return KC_TRNS;
} }
__attribute__((weak)) uint16_t keycode_at_encodermap_location(uint8_t layer_num, uint8_t encoder_idx, bool clockwise) { __attribute__((weak)) uint16_t keycode_at_encodermap_location(uint8_t layer_num, uint8_t encoder_idx, bool clockwise) {

View File

@ -4,7 +4,12 @@
#include <stdint.h> #include <stdint.h>
// Get the number of layers defined in the keymap ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Key mapping
// Get the number of layers defined in the keymap, stored in firmware rather than any other persistent storage
uint8_t keymap_layer_count_raw(void);
// Get the number of layers defined in the keymap, potentially stored dynamically
uint8_t keymap_layer_count(void); uint8_t keymap_layer_count(void);
// Get the keycode for the keymap location, stored in firmware rather than any other persistent storage // Get the keycode for the keymap location, stored in firmware rather than any other persistent storage
@ -12,9 +17,14 @@ uint16_t keycode_at_keymap_location_raw(uint8_t layer_num, uint8_t row, uint8_t
// Get the keycode for the keymap location, potentially stored dynamically // Get the keycode for the keymap location, potentially stored dynamically
uint16_t keycode_at_keymap_location(uint8_t layer_num, uint8_t row, uint8_t column); uint16_t keycode_at_keymap_location(uint8_t layer_num, uint8_t row, uint8_t column);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Encoder mapping
#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) #if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)
// Get the number of layers defined in the encoder map // Get the number of layers defined in the encoder map, stored in firmware rather than any other persistent storage
uint8_t encodermap_layer_count_raw(void);
// Get the number of layers defined in the encoder map, potentially stored dynamically
uint8_t encodermap_layer_count(void); uint8_t encodermap_layer_count(void);
// Get the keycode for the encoder mapping location, stored in firmware rather than any other persistent storage // Get the keycode for the encoder mapping location, stored in firmware rather than any other persistent storage