summaryrefslogtreecommitdiff
path: root/keyboards/bastardkb/charybdis/3x5
diff options
context:
space:
mode:
authorNick Brassel <nick@tzarc.org>2022-08-28 14:23:01 +1000
committerNick Brassel <nick@tzarc.org>2022-08-28 14:23:01 +1000
commit0a3f7e48690bb2b7b008300a54554979a55be19a (patch)
tree7499d52f20040ed7d5a56496ecb81ed114f80719 /keyboards/bastardkb/charybdis/3x5
parentfc0bf67f372c38f72c303cdec21b1d4afb5e8cb4 (diff)
parent9b5b0722555891ba94f240760ef3a6d4c870fd13 (diff)
Merge remote-tracking branch 'upstream/develop'
Diffstat (limited to 'keyboards/bastardkb/charybdis/3x5')
-rw-r--r--keyboards/bastardkb/charybdis/3x5/3x5.c8
-rw-r--r--keyboards/bastardkb/charybdis/3x5/blackpill/config.h62
-rw-r--r--keyboards/bastardkb/charybdis/3x5/blackpill/halconf.h29
-rw-r--r--keyboards/bastardkb/charybdis/3x5/blackpill/info.json6
-rw-r--r--keyboards/bastardkb/charybdis/3x5/blackpill/mcuconf.h61
-rw-r--r--keyboards/bastardkb/charybdis/3x5/blackpill/readme.md3
-rw-r--r--keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk41
-rw-r--r--keyboards/bastardkb/charybdis/3x5/config.h38
-rw-r--r--keyboards/bastardkb/charybdis/3x5/info.json5
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/README.md3
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/config.h166
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/keymap.c224
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/rules.mk10
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/default/keymap.c4
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/drashna/config.h6
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/via/config.h13
-rw-r--r--keyboards/bastardkb/charybdis/3x5/keymaps/via/keymap.c42
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v1/elitec/config.h42
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v1/elitec/info.json6
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v1/elitec/rules.mk (renamed from keyboards/bastardkb/charybdis/3x5/rules.mk)9
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/elitec/config.h36
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/elitec/info.json6
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/elitec/rules.mk37
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/splinky/config.h50
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/splinky/info.json6
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/splinky/mcuconf.h23
-rw-r--r--keyboards/bastardkb/charybdis/3x5/v2/splinky/rules.mk37
27 files changed, 895 insertions, 78 deletions
diff --git a/keyboards/bastardkb/charybdis/3x5/3x5.c b/keyboards/bastardkb/charybdis/3x5/3x5.c
index d896cf6923..7b10d322cd 100644
--- a/keyboards/bastardkb/charybdis/3x5/3x5.c
+++ b/keyboards/bastardkb/charybdis/3x5/3x5.c
@@ -33,6 +33,10 @@
* ╰────────────────────╯ ╰────────────────────╯
* 15 16 17 33 34 XX
* ╰────────────╯ ╰────────────╯
+ *
+ * Note: the LED config simulates 36 LEDs instead of the actual 35 to prevent
+ * confusion when testing LEDs during assembly when handedness is not set
+ * correctly. Those fake LEDs are bound to the physical top-left corner.
*/
led_config_t g_led_config = { {
/* Key Matrix to LED index. */
@@ -61,7 +65,7 @@ led_config_t g_led_config = { {
/* index=24 */ { 188, 42 }, { 188, 21 }, { 188, 0 },
/* index=27 */ { 170, 0 }, { 170, 21 }, { 170, 42 },
/* index=30 */ { 152, 0 }, { 152, 21 }, { 152, 42 },
- /* index=33 */ { 152, 64 }, { 134, 64 },
+ /* index=33 */ { 134, 64 }, { 152, 64 }, { 0, 0 },
}, {
/* LED index to flag. */
// Left split.
@@ -77,7 +81,7 @@ led_config_t g_led_config = { {
/* index=24 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
/* index=27 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
/* index=30 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
- /* index=33 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // Thumb cluster
+ /* index=33 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // Thumb cluster
} };
#endif
// clang-format on
diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/config.h b/keyboards/bastardkb/charybdis/3x5/blackpill/config.h
new file mode 100644
index 0000000000..ddd5e83318
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/blackpill/config.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2020 Christopher Courtney <drashna@live.com> (@drashna)
+ * Copyright 2021 Stefan Kerkmann (@KarlK90)
+ * Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Publicw 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* Key matrix configuration. */
+#define MATRIX_ROW_PINS \
+ { A2, B8, A8, B9 }
+#define MATRIX_COL_PINS \
+ { B1, B10, B3, B4, B5 }
+
+/* Handedness. */
+#define SPLIT_HAND_PIN A3 // High -> left, Low -> right.
+
+/* RGB settings. */
+#define RGB_DI_PIN A1
+#define WS2812_PWM_DRIVER PWMD2
+#define WS2812_PWM_CHANNEL 2
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_EXTERNAL_PULLUP
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM1
+#define WS2812_DMA_CHANNEL 3
+#define WS2812_PWM_TARGET_PERIOD 800000
+
+/* Serial configuration for split keyboard. */
+#define SERIAL_USART_TX_PIN A9
+
+/* CRC. */
+#define CRC8_USE_TABLE
+#define CRC8_OPTIMIZE_SPEED
+
+/* SPI config for EEPROM and pmw3360 sensor. */
+#define SPI_DRIVER SPID1
+#define SPI_SCK_PIN A5
+#define SPI_SCK_PAL_MODE 5
+#define SPI_MOSI_PIN A7
+#define SPI_MOSI_PAL_MODE 5
+#define SPI_MISO_PIN A6
+#define SPI_MISO_PAL_MODE 5
+
+/* EEPROM config. */
+#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN A4
+
+/* PMW3360 settings. */
+#define PMW33XX_CS_PIN B14
+#define PMW33XX_CS_DIVISOR 64
diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/halconf.h b/keyboards/bastardkb/charybdis/3x5/blackpill/halconf.h
new file mode 100644
index 0000000000..a89dff0cd3
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/blackpill/halconf.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2020 Nick Brassel (tzarc)
+ * Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+#define HAL_USE_SERIAL TRUE
+//#define HAL_USE_I2C TRUE
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+//#define HAL_USE_GPT TRUE
+
+#include_next "halconf.h"
diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/info.json b/keyboards/bastardkb/charybdis/3x5/blackpill/info.json
new file mode 100644
index 0000000000..1e347df9b2
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/blackpill/info.json
@@ -0,0 +1,6 @@
+{
+ "keyboard_name": "Charybdis Nano (3x5) Blackpill",
+ "usb": {
+ "device_version": "1.0.0",
+ },
+}
diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/mcuconf.h b/keyboards/bastardkb/charybdis/3x5/blackpill/mcuconf.h
new file mode 100644
index 0000000000..1615d1bf46
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/blackpill/mcuconf.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2020 Nick Brassel (tzarc)
+ * Copyright 2021 Stefan Kerkmann (@KarlK90)
+ * Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include_next "mcuconf.h"
+
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
+
+#undef STM32_I2C_I2C1_RX_DMA_STREAM
+#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#undef STM32_I2C_I2C1_TX_DMA_STREAM
+#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
+
+#undef STM32_PWM_USE_TIM2
+#define STM32_PWM_USE_TIM2 TRUE
+
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
+
+#undef STM32_SPI_USE_SPI1
+#define STM32_SPI_USE_SPI1 TRUE
+
+#undef STM32_SPI_SPI1_RX_DMA_STREAM
+#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0)
+#undef STM32_SPI_SPI1_TX_DMA_STREAM
+#define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3)
+
+#undef STM32_SERIAL_USE_USART1
+#define STM32_SERIAL_USE_USART1 TRUE
+
+// #undef STM32_SERIAL_USE_USART2
+// #define STM32_SERIAL_USE_USART2 TRUE
+
+// #undef STM32_UART_USART2_RX_DMA_STREAM
+// #define STM32_UART_USART2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
+// #undef STM32_UART_USART2_TX_DMA_STREAM
+// #define STM32_UART_USART2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+
+#undef STM32_GPT_USE_TIM4
+#define STM32_GPT_USE_TIM4 TRUE
+
+#undef STM32_ST_USE_TIMER
+#define STM32_ST_USE_TIMER 5
diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/readme.md b/keyboards/bastardkb/charybdis/3x5/blackpill/readme.md
new file mode 100644
index 0000000000..7ef08798b8
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/blackpill/readme.md
@@ -0,0 +1,3 @@
+# Charybdis Nano (3x5) BlackPill
+
+An ergonomic keyboard with integrated trackball, with BlackPill (STM32F411) mod.
diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk b/keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk
new file mode 100644
index 0000000000..0f732c2cbd
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk
@@ -0,0 +1,41 @@
+# MCU name
+MCU = STM32F411
+BOARD = BLACKPILL_STM32_F411
+
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+AUDIO_SUPPORTED = no # Audio is not supported
+RGB_MATRIX_SUPPORTED = yes # RGB matrix is supported and enabled by default
+RGBLIGHT_SUPPORTED = yes # RGB underglow is supported, but not enabled by default
+RGB_MATRIX_ENABLE = yes # Enable keyboard RGB matrix functionality
+RGB_MATRIX_DRIVER = WS2812
+
+# Charybdis nano is a split 3x5 keyboard with a maximum of 3 thumb keys (2 on
+# the trackball side).
+SPLIT_KEYBOARD = yes
+LAYOUTS = split_3x5_3 # Support community layout, in particular Manna-Harbour's Miryoku layout
+
+POINTING_DEVICE_ENABLE = yes # Enable trackball
+POINTING_DEVICE_DRIVER = pmw3360
+MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint
+KEYBOARD_SHARED_EP = yes
+
+EEPROM_DRIVER = spi
+WS2812_DRIVER = pwm
+SERIAL_DRIVER = usart
+
+DEBOUNCE_TYPE = asym_eager_defer_pk
diff --git a/keyboards/bastardkb/charybdis/3x5/config.h b/keyboards/bastardkb/charybdis/3x5/config.h
index 6d62caf5d2..6e3b8a7124 100644
--- a/keyboards/bastardkb/charybdis/3x5/config.h
+++ b/keyboards/bastardkb/charybdis/3x5/config.h
@@ -19,51 +19,21 @@
#pragma once
/* Key matrix configuration. */
-
-// Rows are doubled-up.
-#define MATRIX_ROWS 8
+#define MATRIX_ROWS 8 // Rows are doubled-up.
#define MATRIX_COLS 5
-// Wiring configuration for each half.
-#define MATRIX_ROW_PINS \
- { B7, C6, D4, B5 }
-#define MATRIX_COL_PINS \
- { C7, F0, D7, E6, B4 }
-
-#define MATRIX_ROW_PINS_RIGHT \
- { F0, C6, D4, B5 }
-#define MATRIX_COL_PINS_RIGHT \
- { C7, B7, D7, E6, B4 }
-
#define DIODE_DIRECTION ROW2COL
-/* Handedness. */
-#define MASTER_RIGHT
-
-/* Bootmagic Lite configuration. */
-#define BOOTMAGIC_LITE_ROW 0
-#define BOOTMAGIC_LITE_COLUMN 0
-#define BOOTMAGIC_LITE_ROW_RIGHT 4
-#define BOOTMAGIC_LITE_COLUMN_RIGHT 0
-
-/* serial.c configuration (for split keyboard) */
-#define SOFT_SERIAL_PIN D2
-
/* Set 0 if debouncing isn't needed. */
#define DEBOUNCE 5
-/* PMW3360 settings. */
-#define PMW3360_CS_PIN B0
-
-// Trackball angle adjustment.
+/* Trackball angle adjustment. */
#define ROTATIONAL_TRANSFORM_ANGLE -25
/* RGB settings. */
-
-#define RGB_DI_PIN D3
-#define RGBLED_NUM 35
+#define RGBLED_NUM 36
#define RGBLED_SPLIT \
- { 18, 17 }
+ { 18, 18 }
/* RGB matrix support. */
#ifdef RGB_MATRIX_ENABLE
diff --git a/keyboards/bastardkb/charybdis/3x5/info.json b/keyboards/bastardkb/charybdis/3x5/info.json
index 935b1f7249..41c80b457f 100644
--- a/keyboards/bastardkb/charybdis/3x5/info.json
+++ b/keyboards/bastardkb/charybdis/3x5/info.json
@@ -1,12 +1,9 @@
{
- "keyboard_name": "Charybdis Nano",
+ "url": "https://bastardkb.com/charybdis-nano",
"manufacturer": "Bastard Keyboards",
- "url": "https://www.bastardkb.com",
- "maintainer": "Quentin Lebastard",
"usb": {
"vid": "0xA8F8",
"pid": "0x1832",
- "device_version": "0.0.1"
},
"layouts": {
"LAYOUT_charybdis_3x5": {
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/README.md b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/README.md
new file mode 100644
index 0000000000..5d9f7fcd5f
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/README.md
@@ -0,0 +1,3 @@
+# Charybdis (3x5) @bstiq keymap
+
+Inspired from Miryoku, using home-rows.
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/config.h b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/config.h
new file mode 100644
index 0000000000..699a700063
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/config.h
@@ -0,0 +1,166 @@
+/**
+ * Copyright 2021 Quentin LEBASTARD <qlebastard@gmail.com>
+ * Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#ifdef VIA_ENABLE
+/* Via configuration. */
+# define DYNAMIC_KEYMAP_LAYER_COUNT 8
+#endif // VIA_ENABLE
+
+#ifndef __arm__
+/* Disable unused features. */
+# define NO_ACTION_ONESHOT
+#endif // __arm__
+
+/**
+ * Configure the global tapping term (default: 200ms).
+ * If you have a lot of accidental mod activations, crank up the tapping term.
+ *
+ * See docs.qmk.fm/using-qmk/software-features/tap_hold#tapping-term
+ */
+#ifndef TAPPING_TERM
+# define TAPPING_TERM 160
+#endif // TAPPING_TERM
+
+/**
+ * Enable rapid switch from tap to hold. Disable auto-repeat when pressing key
+ * twice, except for one-shot keys.
+ *
+ * See docs.qmk.fm/using-qmk/software-features/tap_hold#tapping-force-hold
+ */
+#define TAPPING_FORCE_HOLD
+
+/*
+ * Tap-or-Hold decision modes.
+ *
+ * Note that the following flags behave differently when combined (ie. when 2 or
+ * more are enabled).
+ *
+ * See bit.ly/tap-or-hold for a visual explanation of the following tap-or-hold
+ * decision modes.
+ */
+
+/**
+ * Faster tap-hold trigger.
+ *
+ * Without `PERMISSIVE_HOLD`, within `TAPPING_TERM`:
+ * Mod(a)🠗 e🠗 e🠕 Mod(a)🠕 ➞ ae
+ * With `PERMISSIVE_HOLD`, within `TAPPING_TERM`:
+ * Mod(a)🠗 e🠗 e🠕 Mod(a)🠕 ➞ Mod+e
+ *
+ * See docs.qmk.fm/using-qmk/software-features/tap_hold#permissive-hold
+ */
+#define PERMISSIVE_HOLD
+
+/**
+ * Prevent normal rollover on alphas from accidentally triggering mods.
+ *
+ * Ignores key presses that interrupt a mod-tap. Must-have for Home Row mod.
+ *
+ * Without `IGNORE_MOD_TAP_INTERRUPT`, within `TAPPING_TERM`:
+ * Mod(a)🠗 e🠗 Mod(a)🠕 e🠕 ➞ Mod+e
+ * With `IGNORE_MOD_TAP_INTERRUPT`, within `TAPPING_TERM`:
+ * Mod(a)🠗 e🠗 Mod(a)🠕 e🠕 ➞ ae
+ *
+ * See docs.qmk.fm/using-qmk/software-features/tap_hold#ignore-mod-tap-interrupt
+ */
+#define IGNORE_MOD_TAP_INTERRUPT
+
+/** Charybdis-specific features. */
+
+#ifdef POINTING_DEVICE_ENABLE
+// Automatically enable the pointer layer when moving the trackball. See also:
+// - `CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS`
+// - `CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD`
+// #define CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
+
+// Flip horizontal direction for drag-scroll.
+# define CHARYBDIS_DRAGSCROLL_REVERSE_X
+// #define CHARYBDIS_DRAGSCROLL_REVERSE_Y
+#endif // POINTING_DEVICE_ENABLE
+
+/** RGB Matrix. */
+
+#ifdef RGB_MATRIX_ENABLE
+# ifdef __arm__
+// Enable all animations on ARM boards since they have plenty of memory
+// available for it.
+# define ENABLE_RGB_MATRIX_ALPHAS_MODS
+# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+# define ENABLE_RGB_MATRIX_BAND_SAT
+# define ENABLE_RGB_MATRIX_BAND_VAL
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+# define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# define ENABLE_RGB_MATRIX_HUE_BREATHING
+# define ENABLE_RGB_MATRIX_HUE_PENDULUM
+# define ENABLE_RGB_MATRIX_HUE_WAVE
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_RGB_MATRIX_SPLASH
+# define ENABLE_RGB_MATRIX_MULTISPLASH
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH
+# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+# else
+// Disable control of RGB matrix by keycodes (must use firmware implementation
+// to control the feature).
+# define RGB_MATRIX_DISABLE_KEYCODES
+# endif
+
+// Limit maximum brightness to keep power consumption reasonable, and avoid
+// disconnects.
+# undef RGB_MATRIX_MAXIMUM_BRIGHTNESS
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 64
+
+// Rainbow swirl as startup mode.
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT
+
+// Slow swirl at startup.
+# define RGB_MATRIX_STARTUP_SPD 32
+
+// Startup values.
+# define RGB_MATRIX_STARTUP_HUE 0
+# define RGB_MATRIX_STARTUP_SAT 255
+# define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
+# define RGB_MATRIX_STARTUP_HSV RGB_MATRIX_STARTUP_HUE, RGB_MATRIX_STARTUP_SAT, RGB_MATRIX_STARTUP_VAL
+#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/keymap.c b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/keymap.c
new file mode 100644
index 0000000000..ca67dd690c
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/keymap.c
@@ -0,0 +1,224 @@
+/**
+ * Copyright 2021 Quentin LEBASTARD <qlebastard@gmail.com>
+ * Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+enum charybdis_keymap_bstiq_layers {
+ LAYER_BASE = 0,
+ LAYER_MBO,
+ LAYER_MEDIA,
+ LAYER_NAV,
+ LAYER_MOUSE,
+ LAYER_SYM,
+ LAYER_NUM,
+ LAYER_FUN,
+};
+
+// Automatically enable sniping when the mouse layer is on.
+#define CHARYBDIS_AUTO_SNIPING_ON_LAYER LAYER_MOUSE
+
+#define BSP_NAV LT(LAYER_NAV, KC_BSPC)
+#define ENT_MBO LT(LAYER_MBO, KC_ENT)
+#define TAB_MED LT(LAYER_MEDIA, KC_TAB)
+#define ESC_SYM LT(LAYER_SYM, KC_ESC)
+#define SPC_NUM LT(LAYER_NUM, KC_SPC)
+#define MOUSE(KC) LT(LAYER_MOUSE, KC)
+
+#define USR_RDO KC_AGAIN
+#define USR_PST S(KC_INS)
+#define USR_CPY C(KC_INS)
+#define USR_CUT S(KC_DEL)
+#define USR_UND KC_UNDO
+
+#define MS_L KC_MS_LEFT
+#define MS_R KC_MS_RIGHT
+#define MS_D KC_MS_DOWN
+#define MS_U KC_MS_UP
+
+#define WH_L KC_MS_WH_LEFT
+#define WH_R KC_MS_WH_RIGHT
+#define WH_D KC_MS_WH_DOWN
+#define WH_U KC_MS_WH_UP
+
+// clang-format off
+/** Convenience macro. */
+#define _KC_LAYOUT_wrapper( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \
+ ...) \
+ KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_##k06, KC_##k07, KC_##k08, KC_##k09, \
+ KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, \
+ KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_##k26, KC_##k27, KC_##k28, KC_##k29, \
+ __VA_ARGS__
+#define KC_LAYOUT_wrapper(...) _KC_LAYOUT_wrapper(__VA_ARGS__)
+
+/** Base layer with BÉPO layout. */
+#define LAYOUT_LAYER_BASE_BEPO KC_LAYOUT_wrapper( \
+ B, Z, P, O, QUOT, DOT, V, D, L, J, \
+ A, U, I, E, COMM, C, T, S, R, N, \
+ W, Y, X, SLSH, K, M, Q, G, H, F, \
+ BSP_NAV, ENT_MBO, TAB_MED, ESC_SYM, SPC_NUM)
+
+/** Convenience key shorthands. */
+#define U_NA KC_NO // Present but not available for use.
+#define U_NU KC_NO // Available but not used.
+
+/** Convenience row shorthands. */
+#define __________________RESET_L__________________ QK_BOOT, U_NA, U_NA, U_NA, U_NA
+#define __________________RESET_R__________________ U_NA, U_NA, U_NA, U_NA, QK_BOOT
+#define ______________HOME_ROW_GASC_L______________ KC_LGUI, KC_LALT, KC_LSFT, KC_LCTL, U_NA
+#define ______________HOME_ROW_ALGR_L______________ U_NA, KC_ALGR, U_NA, U_NA, U_NA
+#define ______________HOME_ROW_GASC_R______________ U_NA, KC_LCTL, KC_LSFT, KC_LALT, KC_LGUI
+#define ______________HOME_ROW_ALGR_R______________ U_NA, U_NA, U_NA, KC_ALGR, U_NA
+
+/** Layers. */
+
+// Buttons.
+#define LAYOUT_LAYER_MBO \
+ __________________RESET_L__________________, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
+ ______________HOME_ROW_GASC_L______________, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, \
+ KC_BTN3, KC_ALGR, KC_BTN2, KC_BTN1, U_NA, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, \
+ U_NA, U_NA, U_NA, KC_ENT, KC_DEL
+
+// Media.
+#define LAYOUT_LAYER_MEDIA \
+ __________________RESET_L__________________, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
+ ______________HOME_ROW_GASC_L______________, U_NU, MS_L, MS_D, MS_U, MS_R, \
+ ______________HOME_ROW_ALGR_L______________, U_NU, WH_L, WH_D, WH_U, WH_R, \
+ U_NA, U_NA, U_NA, KC_BTN1, KC_BTN3
+
+// Navigation.
+#define LAYOUT_LAYER_NAV \
+ __________________RESET_L__________________, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, \
+ ______________HOME_ROW_GASC_L______________, U_NU, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, \
+ ______________HOME_ROW_ALGR_L______________, U_NU, U_NU, U_NU, U_NU, U_NU, \
+ U_NA, U_NA, U_NA, KC_MSTP, KC_MPLY
+
+// Mouse.
+#define LAYOUT_LAYER_MOUSE \
+ S_D_MOD, USR_PST, USR_CPY, USR_CUT, USR_UND, USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, \
+ DPI_MOD, DRGSCRL, KC_LSFT, KC_LCTL, _______, U_NU, MS_L, MS_D, MS_U, MS_R, \
+ USR_RDO, USR_PST, USR_CPY, USR_CUT, USR_UND, U_NU, WH_L, WH_D, WH_U, WH_R, \
+ KC_BTN2, KC_BTN1, KC_BTN3, KC_BTN1, KC_BTN3
+
+// Symbols.
+#define LAYOUT_LAYER_SYM \
+ KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, __________________RESET_R__________________, \
+ KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, ______________HOME_ROW_GASC_R______________, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, ______________HOME_ROW_ALGR_R______________, \
+ KC_LPRN, KC_RPRN, KC_UNDS, U_NA, U_NA
+
+// Numerals.
+#define LAYOUT_LAYER_NUM \
+ KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, __________________RESET_R__________________, \
+ KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, ______________HOME_ROW_GASC_R______________, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, ______________HOME_ROW_ALGR_R______________, \
+ KC_DOT, KC_0, KC_MINS, U_NA, U_NA
+
+// Function keys.
+#define LAYOUT_LAYER_FUN \
+ KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, __________________RESET_R__________________, \
+ KC_F11, KC_F4, KC_F5, KC_F6, KC_SLCK, ______________HOME_ROW_GASC_R______________, \
+ KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUS, ______________HOME_ROW_ALGR_R______________,\
+ KC_APP, KC_SPC, KC_TAB, U_NA, U_NA
+
+/**
+ * Add Home Row mod to a layout.
+ *
+ * Expects a 10-key per row layout. Adds support for GASC (Gui, Alt, Shift, Ctl)
+ * home row. The layout passed in parameter must contain at least 20 keycodes.
+ *
+ * This is meant to be used with `LAYOUT_LAYER_BASE_BEPO` defined above, eg.:
+ *
+ * HOME_ROW_MOD_GASC(LAYOUT_LAYER_BASE_BEPO)
+ */
+#define _HOME_ROW_MOD_GASC( \
+ L00, L01, L02, L03, L04, R05, R06, R07, R08, R09, \
+ L10, L11, L12, L13, L14, R15, R16, R17, R18, R19, \
+ ...) \
+ L00, L01, L02, L03, L04, \
+ R05, R06, R07, R08, R09, \
+ LGUI_T(L10), LALT_T(L11), LSFT_T(L12), LCTL_T(L13), L14, \
+ R15, RCTL_T(R16), RSFT_T(R17), LALT_T(R18), RGUI_T(R19), \
+ __VA_ARGS__
+#define HOME_ROW_MOD_GASC(...) _HOME_ROW_MOD_GASC(__VA_ARGS__)
+
+/**
+ * Add mouse layer keys to a layout.
+ *
+ * Expects a 10-key per row layout. The layout passed in parameter must contain
+ * at least 30 keycodes.
+ *
+ * This is meant to be used with `LAYOUT_LAYER_BASE_BEPO` defined above, eg.:
+ *
+ * MOUSE_MOD(LAYOUT_LAYER_BASE_BEPO)
+ */
+#define _MOUSE_MOD( \
+ L00, L01, L02, L03, L04, R05, R06, R07, R08, R09, \
+ L10, L11, L12, L13, L14, R15, R16, R17, R18, R19, \
+ L20, L21, L22, L23, L24, R25, R26, R27, R28, R29, \
+ ...) \
+ L00, L01, L02, L03, L04, \
+ R05, R06, R07, R08, R09, \
+ L10, L11, L12, L13, L14, \
+ R15, R16, R17, R18, R19, \
+ MOUSE(L20), L21, L22, L23, L24, \
+ R25, R26, R27, R28, MOUSE(R29), \
+ __VA_ARGS__
+#define MOUSE_MOD(...) _MOUSE_MOD(__VA_ARGS__)
+
+#define LAYOUT_wrapper(...) LAYOUT_charybdis_3x5(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [LAYER_BASE] = LAYOUT_wrapper(
+ MOUSE_MOD(HOME_ROW_MOD_GASC(LAYOUT_LAYER_BASE_BEPO))
+ ),
+ [LAYER_MBO] = LAYOUT_wrapper(LAYOUT_LAYER_MBO),
+ [LAYER_MEDIA] = LAYOUT_wrapper(LAYOUT_LAYER_MEDIA),
+ [LAYER_NAV] = LAYOUT_wrapper(LAYOUT_LAYER_NAV),
+ [LAYER_MOUSE] = LAYOUT_wrapper(LAYOUT_LAYER_MOUSE),
+ [LAYER_SYM] = LAYOUT_wrapper(LAYOUT_LAYER_SYM),
+ [LAYER_NUM] = LAYOUT_wrapper(LAYOUT_LAYER_NUM),
+ [LAYER_FUN] = LAYOUT_wrapper(LAYOUT_LAYER_FUN),
+};
+// clang-format on
+
+#if defined(POINTING_DEVICE_ENABLE) && defined(CHARYBDIS_AUTO_SNIPING_ON_LAYER)
+layer_state_t layer_state_set_kb(layer_state_t state) {
+ state = layer_state_set_user(state);
+ charybdis_set_pointer_sniping_enabled(layer_state_cmp(state, CHARYBDIS_AUTO_SNIPING_ON_LAYER));
+ return state;
+}
+#endif // POINTING_DEVICE_ENABLE && CHARYBDIS_AUTO_SNIPING_ON_LAYER
+
+#ifdef RGB_MATRIX_ENABLE
+// Forward-declare this helper function since it is defined in rgb_matrix.c.
+void rgb_matrix_update_pwm_buffers(void);
+#endif
+
+void shutdown_user(void) {
+#ifdef RGBLIGHT_ENABLE
+ rgblight_enable_noeeprom();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+ rgblight_setrgb_red();
+#endif // RGBLIGHT_ENABLE
+#ifdef RGB_MATRIX_ENABLE
+ rgb_matrix_set_color_all(RGB_RED);
+ rgb_matrix_update_pwm_buffers();
+#endif // RGB_MATRIX_ENABLE
+}
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/rules.mk b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/rules.mk
new file mode 100644
index 0000000000..5d91064607
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/bstiq/rules.mk
@@ -0,0 +1,10 @@
+ifeq ($(MCU),atmega32u4)
+ # Space saving settings.
+ TAP_DANCE_ENABLE = no
+ COMBO_ENABLE = no
+ QMK_SETTINGS = no
+else ifeq ($(MCU),STM32F411)
+ EEPROM_DRIVER = vendor
+endif
+
+VIA_ENABLE = yes
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/default/keymap.c b/keyboards/bastardkb/charybdis/3x5/keymaps/default/keymap.c
index cb578aa8d6..148f026740 100644
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/default/keymap.c
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/default/keymap.c
@@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤
KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_PPLS, KC_4, KC_5, KC_6, KC_PMNS,
// ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤
- XXXXXXX, XXXXXXX, XXXXXXX, EEP_RST, QK_BOOT, KC_PAST, KC_1, KC_2, KC_3, KC_PSLS,
+ XXXXXXX, XXXXXXX, XXXXXXX, EEP_RST, QK_BOOT, KC_PAST, KC_1, KC_2, KC_3, KC_PSLS,
// ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯
XXXXXXX, XXXXXXX, _______, XXXXXXX, _______
// ╰───────────────────────────╯ ╰──────────────────╯
@@ -61,7 +61,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤
KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI,
// ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤
- KC_HOME, KC_PGUP, KC_PGDN, KC_END, XXXXXXX, QK_BOOT, EEP_RST, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_HOME, KC_PGUP, KC_PGDN, KC_END, XXXXXXX, QK_BOOT, EEP_RST, XXXXXXX, XXXXXXX, XXXXXXX,
// ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯
_______, _______, XXXXXXX, _______, XXXXXXX
// ╰───────────────────────────╯ ╰──────────────────╯
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/config.h b/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/config.h
index 0f08aee9ef..39204a3667 100644
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/config.h
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/config.h
@@ -98,10 +98,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define EXTERNAL_EEPROM_ADDRESS_SIZE 2
/* pmw3360 config */
-#undef PMW3360_CS_PIN
-#define PMW3360_CS_PIN B0
-#define PMW3360_SPI_MODE 3
-#define PMW3360_SPI_DIVISOR 64
+#undef PMW33XX_CS_PIN
+#define PMW33XX_CS_PIN B0
#define CHARYBDIS_MINIMUM_DEFAULT_DPI 1200
#define CHARYBDIS_DEFAULT_DPI_CONFIG_STEP 400
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/via/config.h b/keyboards/bastardkb/charybdis/3x5/keymaps/via/config.h
index f515d85334..d20131e9cf 100644
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/via/config.h
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/via/config.h
@@ -19,7 +19,7 @@
#ifdef VIA_ENABLE
/* VIA configuration. */
# define DYNAMIC_KEYMAP_LAYER_COUNT 7
-#endif // VIA_ENABLE
+#endif // VIA_ENABLE
/* Disable unused features. */
#define NO_ACTION_ONESHOT
@@ -33,7 +33,7 @@
* See docs.qmk.fm/using-qmk/software-features/tap_hold#tapping-term
*/
# define TAPPING_TERM 200
-#endif // TAPPING_TERM
+#endif // TAPPING_TERM
/**
* \brief Enable rapid switch from tap to hold.
@@ -84,16 +84,11 @@
/* Charybdis-specific features. */
#ifdef POINTING_DEVICE_ENABLE
-// Enable pointer acceleration, which increases the speed by ~2x for large
-// displacement, while maintaining 1x speed for slow movements. See also:
-// - `CHARYBDIS_POINTER_ACCELERATION_FACTOR`
-# define CHARYBDIS_POINTER_ACCELERATION_ENABLE
-
// Automatically enable the pointer layer when moving the trackball. See also:
// - `CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS`
// - `CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD`
// #define CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
-#endif // POINTING_DEVICE_ENABLE
+#endif // POINTING_DEVICE_ENABLE
/* RGB Matrix. */
@@ -115,4 +110,4 @@
# define RGB_MATRIX_STARTUP_SAT 255
# define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
# define RGB_MATRIX_STARTUP_HSV RGB_MATRIX_STARTUP_HUE, RGB_MATRIX_STARTUP_SAT, RGB_MATRIX_STARTUP_VAL
-#endif // RGB_MATRIX_ENABLE
+#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/via/keymap.c b/keyboards/bastardkb/charybdis/3x5/keymaps/via/keymap.c
index dc02ed34c6..b54c58cf0c 100644
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/via/keymap.c
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/via/keymap.c
@@ -18,7 +18,7 @@
#ifdef CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
# include "timer.h"
-#endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
+#endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
enum charybdis_keymap_layers {
LAYER_BASE = 0,
@@ -38,12 +38,12 @@ static uint16_t auto_pointer_layer_timer = 0;
# ifndef CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS
# define CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS 1000
-# endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS
+# endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS
# ifndef CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD
# define CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD 8
-# endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD
-#endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
+# endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_THRESHOLD
+#endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
#define ESC_MED LT(LAYER_MEDIA, KC_ESC)
#define SPC_NAV LT(LAYER_NAVIGATION, KC_SPC)
@@ -52,6 +52,13 @@ static uint16_t auto_pointer_layer_timer = 0;
#define BSP_NUM LT(LAYER_NUMERAL, KC_BSPC)
#define _L_PTR(KC) LT(LAYER_POINTER, KC)
+#ifndef POINTING_DEVICE_ENABLE
+# define DRGSCRL KC_NO
+# define DPI_MOD KC_NO
+# define S_D_MOD KC_NO
+# define SNIPING KC_NO
+#endif // !POINTING_DEVICE_ENABLE
+
// clang-format off
/** \brief QWERTY layout (3 rows, 10 columns). */
#define LAYOUT_LAYER_BASE \
@@ -98,14 +105,14 @@ static uint16_t auto_pointer_layer_timer = 0;
#define LAYOUT_LAYER_MEDIA \
XXXXXXX,RGB_RMOD, RGB_TOG, RGB_MOD, XXXXXXX, XXXXXXX,RGB_RMOD, RGB_TOG, RGB_MOD, XXXXXXX, \
KC_MPRV, KC_VOLD, KC_MUTE, KC_VOLU, KC_MNXT, KC_MPRV, KC_VOLD, KC_MUTE, KC_VOLU, KC_MNXT, \
- XXXXXXX, XXXXXXX, XXXXXXX, EEP_RST, QK_BOOT, QK_BOOT, EEP_RST, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, EEP_RST, QK_BOOT, QK_BOOT, EEP_RST, XXXXXXX, XXXXXXX, XXXXXXX, \
_______, KC_MPLY, KC_MSTP, KC_MSTP, KC_MPLY
/** \brief Mouse emulation and pointer functions. */
#define LAYOUT_LAYER_POINTER \
XXXXXXX, XXXXXXX, XXXXXXX, DPI_MOD, S_D_MOD, S_D_MOD, DPI_MOD, XXXXXXX, XXXXXXX, XXXXXXX, \
______________HOME_ROW_GACS_L______________, ______________HOME_ROW_GACS_R______________, \
- _______, DRGSCRL, SNIPING, EEP_RST, QK_BOOT, QK_BOOT, EEP_RST, SNIPING, DRGSCRL, _______, \
+ _______, DRGSCRL, SNIPING, EEP_RST, QK_BOOT, QK_BOOT, EEP_RST, SNIPING, DRGSCRL, _______, \
KC_BTN2, KC_BTN1, KC_BTN3, KC_BTN3, KC_BTN1
/**
@@ -217,36 +224,35 @@ report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
# ifdef RGB_MATRIX_ENABLE
rgb_matrix_mode_noeeprom(RGB_MATRIX_NONE);
rgb_matrix_sethsv_noeeprom(HSV_GREEN);
-# endif // RGB_MATRIX_ENABLE
+# endif // RGB_MATRIX_ENABLE
}
auto_pointer_layer_timer = timer_read();
}
return mouse_report;
}
-void matrix_scan_kb(void) {
+void matrix_scan_user(void) {
if (auto_pointer_layer_timer != 0 && TIMER_DIFF_16(timer_read(), auto_pointer_layer_timer) >= CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_TIMEOUT_MS) {
auto_pointer_layer_timer = 0;
layer_off(LAYER_POINTER);
# ifdef RGB_MATRIX_ENABLE
rgb_matrix_mode_noeeprom(RGB_MATRIX_STARTUP_MODE);
-# endif // RGB_MATRIX_ENABLE
+# endif // RGB_MATRIX_ENABLE
}
- matrix_scan_user();
}
-# endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
+# endif // CHARYBDIS_AUTO_POINTER_LAYER_TRIGGER_ENABLE
# ifdef CHARYBDIS_AUTO_SNIPING_ON_LAYER
-layer_state_t layer_state_set_kb(layer_state_t state) {
- state = layer_state_set_user(state);
+layer_state_t layer_state_set_user(layer_state_t state) {
charybdis_set_pointer_sniping_enabled(layer_state_cmp(state, CHARYBDIS_AUTO_SNIPING_ON_LAYER));
return state;
}
-# endif // CHARYBDIS_AUTO_SNIPING_ON_LAYER
-#endif // POINTING_DEVICE_ENABLE
+# endif // CHARYBDIS_AUTO_SNIPING_ON_LAYER
+#endif // POINTING_DEVICE_ENABLE
#ifdef RGB_MATRIX_ENABLE
-// Forward-declare this helper function since it is defined in rgb_matrix.c.
+// Forward-declare this helper function since it is defined in
+// rgb_matrix.c.
void rgb_matrix_update_pwm_buffers(void);
#endif
@@ -255,9 +261,9 @@ void shutdown_user(void) {
rgblight_enable_noeeprom();
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
rgblight_setrgb_red();
-#endif // RGBLIGHT_ENABLE
+#endif // RGBLIGHT_ENABLE
#ifdef RGB_MATRIX_ENABLE
rgb_matrix_set_color_all(RGB_RED);
rgb_matrix_update_pwm_buffers();
-#endif // RGB_MATRIX_ENABLE
+#endif // RGB_MATRIX_ENABLE
}
diff --git a/keyboards/bastardkb/charybdis/3x5/v1/elitec/config.h b/keyboards/bastardkb/charybdis/3x5/v1/elitec/config.h
new file mode 100644
index 0000000000..3e3d95174c
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/v1/elitec/config.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2020 Christopher Courtney <drashna@live.com> (@drashna)
+ * Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* Key matrix configuration. */
+#define MATRIX_ROW_PINS \
+ { B7, C6, D4, B5 }
+#define MATRIX_COL_PINS \
+ { C7, F0, D7, E6, B4 }
+
+#define MATRIX_ROW_PINS_RIGHT \
+ { F0, C6, D4, B5 }
+#define MATRIX_COL_PINS_RIGHT \
+ { C7, B7, D7, E6, B4 }
+
+/* Handedness. */
+#define MASTER_RIGHT
+
+/* serial.c configuration (for split keyboard). */
+#define SOFT_SERIAL_PIN D2
+
+/* RGB settings. */
+#define RGB_DI_PIN D3
+
+/* PMW3360 settings. */
+#define PMW33XX_CS_PIN B0
diff --git a/keyboards/bastardkb/charybdis/3x5/v1/elitec/info.json b/keyboards/bastardkb/charybdis/3x5/v1/elitec/info.json
new file mode 100644
index 0000000000..9071212f33
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/v1/elitec/info.json
@@ -0,0 +1,6 @@
+{
+ "keyboard_name": "Charybdis Nano (3x5) Elite-C",
+ "usb": {
+ "device_version": "1.0.0",
+ },
+}
diff --git a/keyboards/bastardkb/charybdis/3x5/rules.mk b/keyboards/bastardkb/charybdis/3x5/v1/elitec/rules.mk
index c5f3f0fb8c..22bd22652a 100644
--- a/keyboards/bastardkb/charybdis/3x5/rules.mk
+++ b/keyboards/bastardkb/charybdis/3x5/v1/elitec/rules.mk
@@ -23,10 +23,6 @@ RGBLIGHT_SUPPORTED = yes # RGB underglow is supported, but not enabled by def
RGB_MATRIX_ENABLE = yes # Enable keyboard RGB matrix functionality
RGB_MATRIX_DRIVER = WS2812
-# Enable link-time optimization by default. The Charybdis packs a lot of
-# features (RGB, Via, trackball) in a small atmega32u4 package.
-LTO_ENABLE = yes
-
# Charybdis nano is a split 3x5 keyboard with a maximum of 3 thumb keys (2 on
# the trackball side).
SPLIT_KEYBOARD = yes
@@ -34,5 +30,8 @@ LAYOUTS = split_3x5_3 # Support community layout, in particular Manna-Harbour's
POINTING_DEVICE_ENABLE = yes # Enable trackball
POINTING_DEVICE_DRIVER = pmw3360
-# https://qmk.fm/changes/2018-11-16-use-a-single-endpoint-for-hid-reports
MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint
+
+# Enable link-time optimization by default. The Charybdis packs a lot of
+# features (RGB, Via, trackball) in a small atmega32u4 package.
+LTO_ENABLE = yes
diff --git a/keyboards/bastardkb/charybdis/3x5/v2/elitec/config.h b/keyboards/bastardkb/charybdis/3x5/v2/elitec/config.h
new file mode 100644
index 0000000000..5c11fa3145
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/v2/elitec/config.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* Key matrix configuration. */
+#define MATRIX_ROW_PINS \
+ { F7, C6, D4, B5 }
+#define MATRIX_COL_PINS \
+ { F5, B6, D7, E6, B4 }
+
+/* Handedness. */
+#define MASTER_RIGHT
+
+/* serial.c configuration (for split keyboard). */
+#define SOFT_SERIAL_PIN D2
+
+/* RGB settings. */
+#define RGB_DI_PIN D3
+
+/* PMW3360 settings. */
+#define PMW33XX_CS_PIN F0
diff --git a/keyboards/bastardkb/charybdis/3x5/v2/elitec/info.json b/keyboards/bastardkb/charybdis/3x5/v2/elitec/info.json
new file mode 100644
index 0000000000..7c90e5d5a3
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/v2/elitec/info.json
@@ -0,0 +1,6 @@
+{
+ "keyboard_name": "Charybdis Nano (3x5) Elite-C",
+ "usb": {
+ "device_version": "2.0.0",
+ },
+}
diff --git a/keyboards/bastardkb/charybdis/3x5/v2/elitec/rules.mk b/keyboards/bastardkb/charybdis/3x5/v2/elitec/rules.mk
new file mode 100644
index 0000000000..22bd22652a
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/v2/elitec/rules.mk
@@ -0,0 +1,37 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+AUDIO_SUPPORTED = no # Audio is not supported
+RGB_MATRIX_SUPPORTED = yes # RGB matrix is supported and enabled by default
+RGBLIGHT_SUPPORTED = yes # RGB underglow is supported, but not enabled by default
+RGB_MATRIX_ENABLE = yes # Enable keyboard RGB matrix functionality
+RGB_MATRIX_DRIVER = WS2812
+
+# Charybdis nano is a split 3x5 keyboard with a maximum of 3 thumb keys (2 on
+# the trackball side).
+SPLIT_KEYBOARD = yes
+LAYOUTS = split_3x5_3 # Support community layout, in particular Manna-Harbour's Miryoku layout
+
+POINTING_DEVICE_ENABLE = yes # Enable trackball
+POINTING_DEVICE_DRIVER = pmw3360
+MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint
+
+# Enable link-time optimization by default. The Charybdis packs a lot of
+# features (RGB, Via, trackball) in a small atmega32u4 package.
+LTO_ENABLE = yes
diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky/config.h b/keyboards/bastardkb/charybdis/3x5/v2/splinky/config.h
new file mode 100644
index 0000000000..2929d3dd1e
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky/config.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* Key matrix configuration. */
+#define MATRIX_ROW_PINS \
+ { GP26, GP5, GP4, GP9 }
+#define MATRIX_COL_PINS \
+ { GP28, GP15, GP6, GP7, GP8 }
+
+/* Handedness. */
+#define MASTER_RIGHT
+
+// To use the handedness pin, resistors need to be installed on the adapter PCB.
+// If so, uncomment the following code, and undefine MASTER_RIGHT above.
+// #define SPLIT_HAND_PIN GP13
+// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left.
+
+/* serial.c configuration (for split keyboard). */
+#define SOFT_SERIAL_PIN GP1
+
+/* RGB settings. */
+#define RGB_DI_PIN GP0
+
+/* SPI & PMW3360 settings. */
+#define SPI_DRIVER SPID0
+#define SPI_SCK_PIN GP18
+#define SPI_MOSI_PIN GP19
+#define SPI_MISO_PIN GP20
+#define PMW33XX_CS_PIN GP14
+
+/* Reset. */
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky/info.json b/keyboards/bastardkb/charybdis/3x5/v2/splinky/info.json
new file mode 100644
index 0000000000..1aa1e8811d
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky/info.json
@@ -0,0 +1,6 @@
+{
+ "keyboard_name": "Charybdis Nano (3x5) Splinky",
+ "usb": {
+ "device_version": "2.0.0",
+ },
+}
diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky/mcuconf.h b/keyboards/bastardkb/charybdis/3x5/v2/splinky/mcuconf.h
new file mode 100644
index 0000000000..0fdd67c3a2
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky/mcuconf.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include_next "mcuconf.h"
+
+#undef RP_SPI_USE_SPI0
+#define RP_SPI_USE_SPI0 TRUE
diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky/rules.mk b/keyboards/bastardkb/charybdis/3x5/v2/splinky/rules.mk
new file mode 100644
index 0000000000..21a9506077
--- /dev/null
+++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky/rules.mk
@@ -0,0 +1,37 @@
+# MCU name
+MCU = RP2040
+
+# Bootloader selection
+BOOTLOADER = rp2040
+
+# RP2040-specific options
+ALLOW_WARNINGS = yes
+PICO_INTRINSICS_ENABLED = no # ATM Unsupported by ChibiOS.
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+AUDIO_SUPPORTED = no # Audio is not supported
+RGB_MATRIX_SUPPORTED = yes # RGB matrix is supported and enabled by default
+RGBLIGHT_SUPPORTED = yes # RGB underglow is supported, but not enabled by default
+RGB_MATRIX_ENABLE = yes # Enable keyboard RGB matrix functionality
+RGB_MATRIX_DRIVER = WS2812
+
+SPLIT_KEYBOARD = yes
+LAYOUTS = split_3x5_3
+
+POINTING_DEVICE_ENABLE = yes # Enable trackball
+POINTING_DEVICE_DRIVER = pmw3360
+
+SERIAL_DRIVER = vendor
+WS2812_DRIVER = vendor