summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/keebio/foldkb/rev2_1/config.h17
-rw-r--r--keyboards/keebio/foldkb/rev2_1/halconf.h10
-rw-r--r--keyboards/keebio/foldkb/rev2_1/keyboard.json279
-rw-r--r--keyboards/keebio/foldkb/rev2_1/keymaps/default/keymap.c21
-rw-r--r--keyboards/keebio/foldkb/rev2_1/mcuconf.h14
-rw-r--r--keyboards/keebio/foldkb/rev2_1/rev2_1.c29
6 files changed, 370 insertions, 0 deletions
diff --git a/keyboards/keebio/foldkb/rev2_1/config.h b/keyboards/keebio/foldkb/rev2_1/config.h
new file mode 100644
index 0000000000..d28027392d
--- /dev/null
+++ b/keyboards/keebio/foldkb/rev2_1/config.h
@@ -0,0 +1,17 @@
1// Copyright 2025 Keebio (@keebio)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6/* Defines for the split keyboard setup */
7#define SERIAL_USART_TX_PIN A9
8#define SERIAL_USART_RX_PIN A10
9#define SERIAL_USART_FULL_DUPLEX
10#define SERIAL_USART_PIN_SWAP
11
12#define USB_VBUS_PIN A7
13
14/* Defines for the RGB matrix */
15#define WS2812_PWM_DRIVER PWMD3
16#define WS2812_PWM_CHANNEL 3
17#define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM3_UP
diff --git a/keyboards/keebio/foldkb/rev2_1/halconf.h b/keyboards/keebio/foldkb/rev2_1/halconf.h
new file mode 100644
index 0000000000..ce1dfd06d7
--- /dev/null
+++ b/keyboards/keebio/foldkb/rev2_1/halconf.h
@@ -0,0 +1,10 @@
1// Copyright 2025 Keebio (@keebio)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#define HAL_USE_SERIAL TRUE
7
8#define HAL_USE_PWM TRUE
9
10#include_next <halconf.h>
diff --git a/keyboards/keebio/foldkb/rev2_1/keyboard.json b/keyboards/keebio/foldkb/rev2_1/keyboard.json
new file mode 100644
index 0000000000..fc2eafe431
--- /dev/null
+++ b/keyboards/keebio/foldkb/rev2_1/keyboard.json
@@ -0,0 +1,279 @@
1{
2 "keyboard_name": "FoldKB Rev. 2.1",
3 "bootloader": "stm32-dfu",
4 "diode_direction": "COL2ROW",
5 "encoder": {
6 "rotary": [
7 {"pin_a": "A4", "pin_b": "A3"}
8 ]
9 },
10 "features": {
11 "bootmagic": true,
12 "encoder": true,
13 "extrakey": true,
14 "mousekey": true,
15 "rgb_matrix": true
16 },
17 "matrix_pins": {
18 "cols": ["A6", "A15", "B3", "B4", "B5", "B6", "B7", "F0"],
19 "rows": ["A5", "A0", "A1", "A2", "F1"]
20 },
21 "processor": "STM32G431",
22 "rgb_matrix": {
23 "animations": {
24 "alphas_mods": true,
25 "band_pinwheel_sat": true,
26 "band_pinwheel_val": true,
27 "band_sat": true,
28 "band_spiral_sat": true,
29 "band_spiral_val": true,
30 "band_val": true,
31 "breathing": true,
32 "cycle_all": true,
33 "cycle_left_right": true,
34 "cycle_out_in": true,
35 "cycle_out_in_dual": true,
36 "cycle_pinwheel": true,
37 "cycle_spiral": true,
38 "cycle_up_down": true,
39 "digital_rain": true,
40 "dual_beacon": true,
41 "flower_blooming": true,
42 "gradient_left_right": true,
43 "gradient_up_down": true,
44 "hue_breathing": true,
45 "hue_pendulum": true,
46 "hue_wave": true,
47 "jellybean_raindrops": true,
48 "multisplash": true,
49 "pixel_flow": true,
50 "pixel_fractal": true,
51 "pixel_rain": true,
52 "rainbow_beacon": true,
53 "rainbow_moving_chevron": true,
54 "rainbow_pinwheels": true,
55 "raindrops": true,
56 "riverflow": true,
57 "solid_multisplash": true,
58 "solid_reactive": true,
59 "solid_reactive_cross": true,
60 "solid_reactive_multicross": true,
61 "solid_reactive_multinexus": true,
62 "solid_reactive_multiwide": true,
63 "solid_reactive_nexus": true,
64 "solid_reactive_simple": true,
65 "solid_reactive_wide": true,
66 "solid_splash": true,
67 "splash": true,
68 "starlight": true,
69 "starlight_dual_hue": true,
70 "starlight_dual_sat": true,
71 "starlight_smooth": true,
72 "typing_heatmap": true
73 },
74 "driver": "ws2812",
75 "layout": [
76 {"matrix": [0, 1], "x": 17, "y": 0, "flags": 4},
77 {"matrix": [0, 2], "x": 31, "y": 0, "flags": 4},
78 {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4},
79 {"matrix": [0, 4], "x": 59, "y": 0, "flags": 4},
80 {"matrix": [0, 5], "x": 72, "y": 0, "flags": 4},
81 {"matrix": [0, 6], "x": 86, "y": 0, "flags": 4},
82 {"matrix": [0, 7], "x": 100, "y": 0, "flags": 4},
83 {"matrix": [1, 7], "x": 100, "y": 16, "flags": 4},
84 {"matrix": [1, 6], "x": 86, "y": 16, "flags": 4},
85 {"matrix": [1, 5], "x": 72, "y": 16, "flags": 4},
86 {"matrix": [1, 4], "x": 59, "y": 16, "flags": 4},
87 {"matrix": [1, 3], "x": 45, "y": 16, "flags": 4},
88 {"matrix": [1, 2], "x": 28, "y": 16, "flags": 4},
89 {"matrix": [2, 2], "x": 26, "y": 32, "flags": 4},
90 {"matrix": [2, 3], "x": 45, "y": 32, "flags": 4},
91 {"matrix": [2, 4], "x": 59, "y": 32, "flags": 4},
92 {"matrix": [2, 5], "x": 72, "y": 32, "flags": 4},
93 {"matrix": [2, 6], "x": 86, "y": 32, "flags": 4},
94 {"matrix": [2, 7], "x": 100, "y": 32, "flags": 4},
95 {"matrix": [3, 7], "x": 100, "y": 48, "flags": 4},
96 {"matrix": [3, 6], "x": 86, "y": 48, "flags": 4},
97 {"matrix": [3, 5], "x": 72, "y": 48, "flags": 4},
98 {"matrix": [3, 4], "x": 59, "y": 48, "flags": 4},
99 {"matrix": [3, 3], "x": 45, "y": 48, "flags": 4},
100 {"matrix": [3, 2], "x": 22, "y": 48, "flags": 4},
101 {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
102 {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4},
103 {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4},
104 {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4},
105 {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4},
106 {"matrix": [4, 2], "x": 22, "y": 64, "flags": 4},
107 {"matrix": [4, 3], "x": 40, "y": 64, "flags": 4},
108 {"matrix": [4, 4], "x": 57, "y": 64, "flags": 4},
109 {"matrix": [4, 5], "x": 72, "y": 64, "flags": 4},
110 {"matrix": [4, 6], "x": 86, "y": 64, "flags": 4},
111 {"matrix": [4, 7], "x": 100, "y": 64, "flags": 4},
112 {"x": 93, "y": 48, "flags": 2},
113 {"x": 65, "y": 64, "flags": 2},
114 {"x": 31, "y": 64, "flags": 2},
115 {"x": 10, "y": 64, "flags": 2},
116 {"x": 0, "y": 24, "flags": 2},
117 {"x": 24, "y": 0, "flags": 2},
118 {"x": 65, "y": 0, "flags": 2},
119 {"x": 90, "y": 8, "flags": 2},
120 {"matrix": [5, 7], "x": 221, "y": 0, "flags": 4},
121 {"matrix": [5, 6], "x": 207, "y": 0, "flags": 4},
122 {"matrix": [5, 5], "x": 193, "y": 0, "flags": 4},
123 {"matrix": [5, 4], "x": 179, "y": 0, "flags": 4},
124 {"matrix": [5, 3], "x": 165, "y": 0, "flags": 4},
125 {"matrix": [5, 2], "x": 152, "y": 0, "flags": 4},
126 {"matrix": [5, 1], "x": 138, "y": 0, "flags": 4},
127 {"matrix": [5, 0], "x": 124, "y": 0, "flags": 4},
128 {"matrix": [6, 0], "x": 124, "y": 16, "flags": 4},
129 {"matrix": [6, 1], "x": 138, "y": 16, "flags": 4},
130 {"matrix": [6, 2], "x": 152, "y": 16, "flags": 4},
131 {"matrix": [6, 3], "x": 165, "y": 16, "flags": 4},
132 {"matrix": [6, 4], "x": 179, "y": 16, "flags": 4},
133 {"matrix": [6, 5], "x": 193, "y": 16, "flags": 4},
134 {"matrix": [6, 6], "x": 207, "y": 16, "flags": 4},
135 {"matrix": [6, 7], "x": 224, "y": 16, "flags": 4},
136 {"matrix": [7, 7], "x": 215, "y": 32, "flags": 4},
137 {"matrix": [7, 5], "x": 193, "y": 32, "flags": 4},
138 {"matrix": [7, 4], "x": 179, "y": 32, "flags": 4},
139 {"matrix": [7, 3], "x": 165, "y": 32, "flags": 4},
140 {"matrix": [7, 2], "x": 152, "y": 32, "flags": 4},
141 {"matrix": [7, 1], "x": 138, "y": 32, "flags": 4},
142 {"matrix": [7, 0], "x": 124, "y": 32, "flags": 4},
143 {"matrix": [8, 0], "x": 124, "y": 48, "flags": 4},
144 {"matrix": [8, 1], "x": 138, "y": 48, "flags": 4},
145 {"matrix": [8, 2], "x": 152, "y": 48, "flags": 4},
146 {"matrix": [8, 3], "x": 165, "y": 48, "flags": 4},
147 {"matrix": [8, 4], "x": 179, "y": 48, "flags": 4},
148 {"matrix": [8, 5], "x": 198, "y": 48, "flags": 4},
149 {"matrix": [8, 7], "x": 217, "y": 48, "flags": 4},
150 {"matrix": [9, 7], "x": 215, "y": 64, "flags": 4},
151 {"matrix": [9, 5], "x": 198, "y": 64, "flags": 4},
152 {"matrix": [9, 4], "x": 181, "y": 64, "flags": 4},
153 {"matrix": [9, 3], "x": 164, "y": 64, "flags": 4},
154 {"matrix": [9, 1], "x": 145, "y": 64, "flags": 4},
155 {"matrix": [9, 0], "x": 136, "y": 64, "flags": 4},
156 {"matrix": [9, 0], "x": 126, "y": 64, "flags": 4},
157 {"x": 121, "y": 56, "flags": 2},
158 {"x": 152, "y": 64, "flags": 2},
159 {"x": 207, "y": 64, "flags": 2},
160 {"x": 224, "y": 52, "flags": 2},
161 {"x": 224, "y": 12, "flags": 2},
162 {"x": 196, "y": 0, "flags": 2},
163 {"x": 159, "y": 0, "flags": 2},
164 {"x": 124, "y": 8, "flags": 2}
165 ],
166 "max_brightness": 120,
167 "sleep": true,
168 "split_count": [44, 45]
169 },
170 "split": {
171 "bootmagic": {
172 "matrix": [5, 7]
173 },
174 "enabled": true,
175 "handedness": {
176 "pin": "A8"
177 },
178 "matrix_pins": {
179 "right": {
180 "cols": ["A6", "A5", "A4", "A3", "A2", "B5", "B6", "B7"],
181 "rows": ["A15", "B3", "B4", "A0", "A1"]
182 }
183 },
184 "serial": {
185 "driver": "usart"
186 },
187 "transport": {
188 "sync": {
189 "matrix_state": true
190 }
191 }
192 },
193 "usb": {
194 "device_version": "2.0.0",
195 "pid": "0x2358"
196 },
197 "ws2812": {
198 "driver": "pwm",
199 "pin": "B0"
200 },
201 "layouts": {
202 "LAYOUT": {
203 "layout": [
204 {"matrix": [0, 0], "x": 0, "y": 0},
205 {"matrix": [0, 1], "x": 1.25, "y": 0},
206 {"matrix": [0, 2], "x": 2.25, "y": 0},
207 {"matrix": [0, 3], "x": 3.25, "y": 0},
208 {"matrix": [0, 4], "x": 4.25, "y": 0},
209 {"matrix": [0, 5], "x": 5.25, "y": 0},
210 {"matrix": [0, 6], "x": 6.25, "y": 0},
211 {"matrix": [0, 7], "x": 7.25, "y": 0},
212 {"matrix": [5, 0], "x": 9, "y": 0},
213 {"matrix": [5, 1], "x": 10, "y": 0},
214 {"matrix": [5, 2], "x": 11, "y": 0},
215 {"matrix": [5, 3], "x": 12, "y": 0},
216 {"matrix": [5, 4], "x": 13, "y": 0},
217 {"matrix": [5, 5], "x": 14, "y": 0},
218 {"matrix": [5, 6], "x": 15, "y": 0},
219 {"matrix": [5, 7], "x": 16, "y": 0},
220 {"matrix": [1, 0], "x": 0, "y": 1},
221 {"matrix": [1, 2], "x": 1.75, "y": 1, "w": 1.5},
222 {"matrix": [1, 3], "x": 3.25, "y": 1},
223 {"matrix": [1, 4], "x": 4.25, "y": 1},
224 {"matrix": [1, 5], "x": 5.25, "y": 1},
225 {"matrix": [1, 6], "x": 6.25, "y": 1},
226 {"matrix": [1, 7], "x": 7.25, "y": 1},
227 {"matrix": [6, 0], "x": 9, "y": 1},
228 {"matrix": [6, 1], "x": 10, "y": 1},
229 {"matrix": [6, 2], "x": 11, "y": 1},
230 {"matrix": [6, 3], "x": 12, "y": 1},
231 {"matrix": [6, 4], "x": 13, "y": 1},
232 {"matrix": [6, 5], "x": 14, "y": 1},
233 {"matrix": [6, 6], "x": 15, "y": 1},
234 {"matrix": [6, 7], "x": 16, "y": 1, "w": 1.5},
235 {"matrix": [2, 0], "x": 0, "y": 2},
236 {"matrix": [2, 2], "x": 1.5, "y": 2, "w": 1.75},
237 {"matrix": [2, 3], "x": 3.25, "y": 2},
238 {"matrix": [2, 4], "x": 4.25, "y": 2},
239 {"matrix": [2, 5], "x": 5.25, "y": 2},
240 {"matrix": [2, 6], "x": 6.25, "y": 2},
241 {"matrix": [2, 7], "x": 7.25, "y": 2},
242 {"matrix": [7, 0], "x": 9, "y": 2},
243 {"matrix": [7, 1], "x": 10, "y": 2},
244 {"matrix": [7, 2], "x": 11, "y": 2},
245 {"matrix": [7, 3], "x": 12, "y": 2},
246 {"matrix": [7, 4], "x": 13, "y": 2},
247 {"matrix": [7, 5], "x": 14, "y": 2},
248 {"matrix": [7, 7], "x": 15, "y": 2, "w": 2.25},
249 {"matrix": [3, 0], "x": 0, "y": 3},
250 {"matrix": [3, 2], "x": 1, "y": 3, "w": 2.25},
251 {"matrix": [3, 3], "x": 3.25, "y": 3},
252 {"matrix": [3, 4], "x": 4.25, "y": 3},
253 {"matrix": [3, 5], "x": 5.25, "y": 3},
254 {"matrix": [3, 6], "x": 6.25, "y": 3},
255 {"matrix": [3, 7], "x": 7.25, "y": 3},
256 {"matrix": [8, 0], "x": 9, "y": 3},
257 {"matrix": [8, 1], "x": 10, "y": 3},
258 {"matrix": [8, 2], "x": 11, "y": 3},
259 {"matrix": [8, 3], "x": 12, "y": 3},
260 {"matrix": [8, 4], "x": 13, "y": 3},
261 {"matrix": [8, 5], "x": 14, "y": 3, "w": 1.75},
262 {"matrix": [8, 7], "x": 15.75, "y": 3},
263 {"matrix": [4, 0], "x": 0, "y": 4},
264 {"matrix": [4, 2], "x": 1.5, "y": 4, "w": 1.25},
265 {"matrix": [4, 3], "x": 2.75, "y": 4, "w": 1.25},
266 {"matrix": [4, 4], "x": 4, "y": 4, "w": 1.25},
267 {"matrix": [4, 5], "x": 5.25, "y": 4},
268 {"matrix": [4, 6], "x": 6.25, "y": 4},
269 {"matrix": [4, 7], "x": 7.25, "y": 4},
270 {"matrix": [9, 0], "x": 9, "y": 4, "w": 1.25},
271 {"matrix": [9, 1], "x": 10.25, "y": 4, "w": 1.5},
272 {"matrix": [9, 3], "x": 11.75, "y": 4, "w": 1.25},
273 {"matrix": [9, 4], "x": 13, "y": 4, "w": 1.25},
274 {"matrix": [9, 5], "x": 14.25, "y": 4, "w": 1.25},
275 {"matrix": [9, 7], "x": 15.5, "y": 4, "w": 1.25}
276 ]
277 }
278 }
279}
diff --git a/keyboards/keebio/foldkb/rev2_1/keymaps/default/keymap.c b/keyboards/keebio/foldkb/rev2_1/keymaps/default/keymap.c
new file mode 100644
index 0000000000..bf3f325446
--- /dev/null
+++ b/keyboards/keebio/foldkb/rev2_1/keymaps/default/keymap.c
@@ -0,0 +1,21 @@
1// Copyright 2025 Keebio (@keebio)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include QMK_KEYBOARD_H
5
6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7 [0] = LAYOUT(
8 KC_MUTE, KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
9 KC_HOME, 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,
10 KC_END, 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,
11 KC_PGUP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
12 KC_PGDN, KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL
13 ),
14 [1] = LAYOUT(
15 KC_MUTE, QK_BOOT, KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, KC_DEL,
16 RM_TOGG, _______, RM_SATD, RM_SATU, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, _______,
17 RM_NEXT, _______, RM_VALD, RM_VALU, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______,
18 KC_VOLU, _______, RM_HUED, RM_HUEU, _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, _______,
19 KC_VOLD, _______, RM_SPDD, RM_SPDU, _______, _______, _______, _______, KC_0, _______, _______, _______, _______
20 ),
21};
diff --git a/keyboards/keebio/foldkb/rev2_1/mcuconf.h b/keyboards/keebio/foldkb/rev2_1/mcuconf.h
new file mode 100644
index 0000000000..77847f5b2c
--- /dev/null
+++ b/keyboards/keebio/foldkb/rev2_1/mcuconf.h
@@ -0,0 +1,14 @@
1// Copyright 2025 Keebio (@keebio)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#include_next <mcuconf.h>
7
8/* enable USART1, used for split comms */
9#undef STM32_SERIAL_USE_USART1
10#define STM32_SERIAL_USE_USART1 TRUE
11
12/* enable TIM3, used for RGB LED PWM driver */
13#undef STM32_PWM_USE_TIM3
14#define STM32_PWM_USE_TIM3 TRUE
diff --git a/keyboards/keebio/foldkb/rev2_1/rev2_1.c b/keyboards/keebio/foldkb/rev2_1/rev2_1.c
new file mode 100644
index 0000000000..0fc47b1483
--- /dev/null
+++ b/keyboards/keebio/foldkb/rev2_1/rev2_1.c
@@ -0,0 +1,29 @@
1// Copyright 2025 Keebio (@keebio)
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "quantum.h"
5
6void keyboard_pre_init_kb(void) {
7 // Disable the PD peripheral in pre-init because its pins are being used in the matrix:
8 PWR->CR3 |= PWR_CR3_UCPD_DBDIS;
9 // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions)
10 keyboard_pre_init_user();
11}
12
13bool encoder_update_kb(uint8_t index, bool clockwise) {
14 if (!encoder_update_user(index, clockwise)) { return false; }
15 if (index == 0) {
16 if (clockwise) {
17 tap_code(KC_VOLU);
18 } else {
19 tap_code(KC_VOLD);
20 }
21 } else if (index == 1) {
22 if (clockwise) {
23 tap_code(KC_PGDN);
24 } else {
25 tap_code(KC_PGUP);
26 }
27 }
28 return false;
29}