aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoris Wachsmuth <52176899+PercyJW-2@users.noreply.github.com>2021-10-12 03:09:25 +0200
committerGitHub <noreply@github.com>2021-10-11 18:09:25 -0700
commit8385ab32d056dae61546279c9d778dd1a20eaada (patch)
tree7e8aa3b35dabc1ebb13dedb6b441fc0ab0b5f9eb
parente33ccc556f594e1335e003ac2e8fe84154bfa16e (diff)
downloadqmk_firmware-8385ab32d056dae61546279c9d778dd1a20eaada.tar.gz
qmk_firmware-8385ab32d056dae61546279c9d778dd1a20eaada.zip
[Keyboard] Add Split65 to keyboards/handwired (#13264)
Co-authored-by: Drashna Jaelre <drashna@live.com> Co-authored-by: Ryan <fauxpark@gmail.com> Co-authored-by: Joris Wachsmuth <jwachsmuth@techfak.uni-bielefeld.de>
-rw-r--r--keyboards/handwired/split65/info.json93
-rw-r--r--keyboards/handwired/split65/keymaps/default/keymap.c65
-rw-r--r--keyboards/handwired/split65/keymaps/via/keymap.c65
-rw-r--r--keyboards/handwired/split65/keymaps/via/rules.mk1
-rw-r--r--keyboards/handwired/split65/promicro/config.h53
-rw-r--r--keyboards/handwired/split65/promicro/promicro.c16
-rw-r--r--keyboards/handwired/split65/promicro/promicro.h38
-rw-r--r--keyboards/handwired/split65/promicro/rules.mk23
-rw-r--r--keyboards/handwired/split65/readme.md25
-rw-r--r--keyboards/handwired/split65/split65.c130
-rw-r--r--keyboards/handwired/split65/split65.h24
-rw-r--r--keyboards/handwired/split65/stm32/config.h60
-rw-r--r--keyboards/handwired/split65/stm32/halconf.h21
-rw-r--r--keyboards/handwired/split65/stm32/rules.mk25
-rw-r--r--keyboards/handwired/split65/stm32/stm32.c16
-rw-r--r--keyboards/handwired/split65/stm32/stm32.h38
16 files changed, 693 insertions, 0 deletions
diff --git a/keyboards/handwired/split65/info.json b/keyboards/handwired/split65/info.json
new file mode 100644
index 000000000..543fc9c39
--- /dev/null
+++ b/keyboards/handwired/split65/info.json
@@ -0,0 +1,93 @@
1{
2 "keyboard_name": "split65",
3 "url": "https://github.com/PercyJW-2/Split65",
4 "maintainer": "PercyJW-2",
5 "layouts": {
6 "LAYOUT": {
7 "layout": [
8 {"label":"\u00ac", "x":0, "y":0},
9 {"label":"!", "x":1, "y":0},
10 {"label":"\"", "x":2, "y":0},
11 {"label":"\u00a3", "x":3, "y":0},
12 {"label":"$", "x":4, "y":0},
13
14 {"label":"%", "x":5, "y":0},
15 {"label":"^", "x":6, "y":0},
16 {"label":"&", "x":7, "y":0},
17 {"label":"*", "x":8, "y":0},
18 {"label":"(", "x":9, "y":0},
19
20 {"label":")", "x":10, "y":0},
21 {"label":"_", "x":11, "y":0},
22 {"label":"+", "x":12, "y":0},
23 {"label":"Backspace", "x":13, "y":0, "w":2},
24 {"x":15, "y":0},
25
26 {"label":"Tab", "x":0, "y":1, "w":1.5},
27 {"label":"Q", "x":1.5, "y":1},
28 {"label":"W", "x":2.5, "y":1},
29 {"label":"E", "x":3.5, "y":1},
30 {"label":"R", "x":4.5, "y":1},
31
32 {"label":"T", "x":5.5, "y":1},
33 {"label":"Y", "x":6.5, "y":1},
34 {"label":"U", "x":7.5, "y":1},
35 {"label":"I", "x":8.5, "y":1},
36 {"label":"O", "x":9.5, "y":1},
37
38 {"label":"P", "x":10.5, "y":1},
39 {"label":"{", "x":11.5, "y":1},
40 {"label":"}", "x":12.5, "y":1},
41 {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2},
42 {"x":15, "y":1},
43
44 {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
45 {"label":"A", "x":1.75, "y":2},
46 {"label":"S", "x":2.75, "y":2},
47 {"label":"D", "x":3.75, "y":2},
48 {"label":"F", "x":4.75, "y":2},
49
50 {"label":"G", "x":5.75, "y":2},
51 {"label":"H", "x":6.75, "y":2},
52 {"label":"J", "x":7.75, "y":2},
53 {"label":"K", "x":8.75, "y":2},
54 {"label":"L", "x":9.75, "y":2},
55
56 {"label":":", "x":10.75, "y":2},
57 {"label":"@", "x":11.75, "y":2},
58 {"label":"~", "x":12.75, "y":2},
59 {"x":15, "y":2},
60 {"label":"Shift", "x":0, "y":3, "w":1.25},
61
62 {"label":"|", "x":1.25, "y":3},
63 {"label":"Z", "x":2.25, "y":3},
64 {"label":"X", "x":3.25, "y":3},
65 {"label":"C", "x":4.25, "y":3},
66 {"label":"V", "x":5.25, "y":3},
67
68 {"label":"B", "x":6.25, "y":3},
69 {"label":"N", "x":7.25, "y":3},
70 {"label":"M", "x":8.25, "y":3},
71 {"label":"<", "x":9.25, "y":3},
72 {"label":">", "x":10.25, "y":3},
73
74 {"label":"?", "x":11.25, "y":3},
75 {"label":"Shift", "x":12.25, "y":3, "w":1.75},
76 {"label":"UP", "x":14, "y":3},
77 {"x":15, "y":3},
78 {"label":"Ctrl", "x":0, "y":4, "w":1.25},
79
80 {"label":"Win", "x":1.25, "y":4, "w":1.25},
81 {"label":"Alt", "x":2.5, "y":4, "w":1.25},
82 {"x":3.75, "y":4, "w":3},
83 {"x":6.75, "y":4, "w":3.25},
84 {"label":"AltGr", "x":10, "y":4},
85
86 {"label":"Win", "x":11, "y":4},
87 {"label":"Menu", "x":12, "y":4},
88 {"label":"LEFT", "x":13, "y":4},
89 {"label":"DOWN", "x":14, "y":4},
90 {"label":"RIGHT", "x":15, "y":4}]
91 }
92 }
93}
diff --git a/keyboards/handwired/split65/keymaps/default/keymap.c b/keyboards/handwired/split65/keymaps/default/keymap.c
new file mode 100644
index 000000000..acb9b679e
--- /dev/null
+++ b/keyboards/handwired/split65/keymaps/default/keymap.c
@@ -0,0 +1,65 @@
1/* Copyright 2020-2021 PercyJW-2 <joris.wachsmuth@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18enum layer_names {
19 _QWERTY,
20 _LOWER,
21 _RAISE,
22 _ADJUST,
23};
24
25#define LOWER MO(_LOWER)
26#define RAISE MO(_RAISE)
27
28const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
29
30 [_QWERTY] = LAYOUT(
31 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
32 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_DEL,
33 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
34 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
35 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_ENT, KC_RALT, LOWER, RAISE, KC_LEFT, KC_DOWN, KC_RGHT
36 ),
37
38 [_LOWER] = LAYOUT(
39 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
40 _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
41 _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
42 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
43 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
44 ),
45
46 [_RAISE] = LAYOUT(
47 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
48 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
49 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
50 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
51 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
52 ),
53
54 [_ADJUST] = LAYOUT(
55 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
56 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
57 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
58 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
59 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
60 )
61};
62
63layer_state_t layer_state_set_user(layer_state_t state) {
64 return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
65}
diff --git a/keyboards/handwired/split65/keymaps/via/keymap.c b/keyboards/handwired/split65/keymaps/via/keymap.c
new file mode 100644
index 000000000..acb9b679e
--- /dev/null
+++ b/keyboards/handwired/split65/keymaps/via/keymap.c
@@ -0,0 +1,65 @@
1/* Copyright 2020-2021 PercyJW-2 <joris.wachsmuth@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18enum layer_names {
19 _QWERTY,
20 _LOWER,
21 _RAISE,
22 _ADJUST,
23};
24
25#define LOWER MO(_LOWER)
26#define RAISE MO(_RAISE)
27
28const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
29
30 [_QWERTY] = LAYOUT(
31 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
32 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_DEL,
33 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
34 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
35 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_ENT, KC_RALT, LOWER, RAISE, KC_LEFT, KC_DOWN, KC_RGHT
36 ),
37
38 [_LOWER] = LAYOUT(
39 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
40 _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
41 _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
42 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
43 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
44 ),
45
46 [_RAISE] = LAYOUT(
47 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
48 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
49 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
50 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
51 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
52 ),
53
54 [_ADJUST] = LAYOUT(
55 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
56 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
57 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
58 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
59 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
60 )
61};
62
63layer_state_t layer_state_set_user(layer_state_t state) {
64 return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
65}
diff --git a/keyboards/handwired/split65/keymaps/via/rules.mk b/keyboards/handwired/split65/keymaps/via/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/handwired/split65/keymaps/via/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes
diff --git a/keyboards/handwired/split65/promicro/config.h b/keyboards/handwired/split65/promicro/config.h
new file mode 100644
index 000000000..824dc7640
--- /dev/null
+++ b/keyboards/handwired/split65/promicro/config.h
@@ -0,0 +1,53 @@
1/* Copyright 2020-2021 PercyJW-2 <joris.wachsmuth@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18
19#include "config_common.h"
20
21// USB Device descriptor parameter
22#define VENDOR_ID 0x4A57 // JW
23#define PRODUCT_ID 0x0000 // first keeb
24#define DEVICE_VER 0x0000 // first revision
25#define MANUFACTURER percyjw
26#define PRODUCT split65
27
28// Matrix Assignments
29#define MATRIX_ROWS 10 //Rows are doubled-up
30#define MATRIX_COLS 8
31
32#define MATRIX_COL_PINS {F4, F5, F6, F7, B1, B3, B2, B6}
33#define MATRIX_ROW_PINS {D4, C6, D7, E6, B4}
34
35// COL2ROW, ROW2COL
36#define DIODE_DIRECTION COL2ROW
37
38#define MATRIX_IO_DELAY 5
39
40// Split Keyboard specifics
41#define SOFT_SERIAL_PIN D3
42#define SELECT_SOFT_SERIAL_SPEED 1
43
44// Debounce to reduce unintended double-presses use 0 if not needed
45#define DEBOUNCE 5
46
47// Feature diable options
48//#define NO_DEBUG
49//#define NO_PRINT
50#define NO_ACTION_MACRO
51#define NO_ACTION_FUNCTION
52
53#define OLED_DISPLAY_128X64
diff --git a/keyboards/handwired/split65/promicro/promicro.c b/keyboards/handwired/split65/promicro/promicro.c
new file mode 100644
index 000000000..2f7e1ebab
--- /dev/null
+++ b/keyboards/handwired/split65/promicro/promicro.c
@@ -0,0 +1,16 @@
1/* Copyright 2020-2021 PercyJW-2 <joris.wachsmuth@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "promicro.h"
diff --git a/keyboards/handwired/split65/promicro/promicro.h b/keyboards/handwired/split65/promicro/promicro.h
new file mode 100644
index 000000000..204f0b88d
--- /dev/null
+++ b/keyboards/handwired/split65/promicro/promicro.h
@@ -0,0 +1,38 @@
1/* Copyright 2020-2021 PercyJW-2 <joris.wachsmuth@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include "split65.h"
19
20#define LAYOUT( \
21 L00, L01, L02, L03, L04, L05, L06, R07, R06, R05, R04, R03, R02, R01, R00, \
22 L10, L11, L12, L13, L14, L15, R17, R16, R15, R14, R13, R12, R11, R10, \
23 L20, L21, L22, L23, L24, L25, R47, R27, R26, R25, R24, R23, R22, R21, R20, \
24 L30, L31, L32, L33, L34, L35, L36, R37, R36, R35, R34, R33, R32, R31, R30, \
25 L40, L41, L42, L43, R46, R45, R44, R43, R42, R41, R40 \
26 ) \
27 { \
28 {L00, L01, L02, L03, L04, L05, L06, KC_NO}, \
29 {L10, L11, L12, L13, L14, L15, KC_NO, KC_NO}, \
30 {L20, L21, L22, L23, L24, L25, KC_NO, KC_NO}, \
31 {L30, L31, L32, L33, L34, L35, L36, KC_NO}, \
32 {L40, L41, L42, KC_NO, L43, KC_NO, KC_NO, KC_NO}, \
33 {R00, R01, R02, R03, R04, R05, R06, R07}, \
34 {R10, R11, R12, R13, R14, R15, R16, R17}, \
35 {R20, R21, R22, R23, R24, R25, R26, R27}, \
36 {R30, R31, R32, R33, R34, R35, R36, R37}, \
37 {R40, R41, R42, R43, R44, R45, R46, R47} \
38 }
diff --git a/keyboards/handwired/split65/promicro/rules.mk b/keyboards/handwired/split65/promicro/rules.mk
new file mode 100644
index 000000000..bb95fcf67
--- /dev/null
+++ b/keyboards/handwired/split65/promicro/rules.mk
@@ -0,0 +1,23 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = caterina
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
11MOUSEKEY_ENABLE = no # Mouse keys
12EXTRAKEY_ENABLE = no # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration
15# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
16SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
17# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18NKRO_ENABLE = no # USB Nkey Rollover
19BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
20RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
21AUDIO_ENABLE = no # Audio output
22OLED_ENABLE = yes
23SPLIT_KEYBOARD = yes
diff --git a/keyboards/handwired/split65/readme.md b/keyboards/handwired/split65/readme.md
new file mode 100644
index 000000000..39dda3c3a
--- /dev/null
+++ b/keyboards/handwired/split65/readme.md
@@ -0,0 +1,25 @@
1# Split65
2
3An split 65% keyboard with two OLEDs
4
5* Keyboard Maintainer: [Percy-JW2](https://github.com/PercyJW-2)
6* Hardware Supported: ProMicro and compatibles, Proton C
7* Hardware Availability: [Repository](https://github.com/PercyJW-2/Split65)
8
9Make example for this keyboard with an ProMicro:
10
11 make handwired/split65/promicro:default
12
13Make example for this keyboard with an Proton C:
14
15 make handwired/split65/stm32:default
16
17Example for flashing this keyboard with an ProMicro
18
19 make handwired/split65/promicro:default:flash
20
21Example for flashing this keyboard with an Proton C
22
23 make handwired/split65/stm32:default:flash
24
25See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/split65/split65.c b/keyboards/handwired/split65/split65.c
new file mode 100644
index 000000000..3b1dcadda
--- /dev/null
+++ b/keyboards/handwired/split65/split65.c
@@ -0,0 +1,130 @@
1/* Copyright 2020-2021 PercyJW-2 <joris.wachsmuth@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "split65.h"
17
18// OLED Code inspired by https://github.com/qmk/qmk_firmware/blob/master/keyboards/splitkb/kyria/rev1/rev1.c
19
20#ifdef OLED_ENABLE
21__attribute__((weak)) oled_rotation_t oled_init_user(oled_rotation_t rotation) {
22 return OLED_ROTATION_180;
23}
24
25__attribute__((weak)) void oled_task_user(void) {
26 if (is_keyboard_master()) {
27 static const char PROGMEM qmk_logo[] = {
28 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
29 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
30 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0};
31
32 oled_write_P(qmk_logo, false);
33
34 oled_write_P(PSTR("Split65\n\n"), false);
35
36 // Host Keyboard Layer Status
37 oled_write_P(PSTR("Layer: "), false);
38 switch (get_highest_layer(layer_state)) {
39 case 0:
40 oled_write_P(PSTR("Default\n"), false);
41 break;
42 case 1:
43 oled_write_P(PSTR("Lower\n"), false);
44 break;
45 case 2:
46 oled_write_P(PSTR("Raise\n"), false);
47 break;
48 case 3:
49 oled_write_P(PSTR("Adjust\n"), false);
50 break;
51 default:
52 oled_write_P(PSTR("Undefined\n"), false);
53 }
54
55 // Host Keyboard LED Status
56 led_t led_state = host_keyboard_led_state();
57 oled_write_P(led_state.num_lock ? PSTR("NUMLCK ") : PSTR(" "), false);
58 oled_write_P(led_state.caps_lock ? PSTR("CAPLCK ") : PSTR(" "), false);
59 oled_write_P(led_state.scroll_lock ? PSTR("SCRLCK ") : PSTR(" "), false);
60 } else {
61 static const char PROGMEM split65_logo[] = {
62 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
63 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
64 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
66 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
67 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
69 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
70 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
71 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
72 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
75 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
79 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80,
84 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
86 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xfe, 0xff, 0xff, 0xef, 0xc7, 0xc7, 0x87,
87 0x87, 0x87, 0x87, 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
88 0x07, 0x07, 0x07, 0x07, 0xdf, 0xff, 0xfe, 0xfe, 0xfc, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
89 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
90 0xff, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x07,
91 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0xf0, 0xfc, 0xfe, 0xfe, 0x9f, 0xcf, 0xc7, 0xc7, 0xc3, 0xc3,
92 0xc7, 0x87, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xef, 0xc7, 0xc7, 0xc7, 0xc7,
93 0xc7, 0xc7, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0xc1, 0x81, 0x81,
95 0x81, 0x01, 0x05, 0x0d, 0x0d, 0x0c, 0x9c, 0xfc, 0xfc, 0xfc, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01,
96 0xf9, 0xf9, 0xf9, 0xf9, 0x19, 0x19, 0x19, 0x19, 0x1d, 0x0c, 0x0c, 0x0c, 0x01, 0x01, 0x01, 0x01,
97 0x01, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x01, 0x01,
98 0x01, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0xf8, 0xfc,
99 0xfc, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x7d, 0xfd, 0xfd, 0xf9, 0xfd,
100 0x01, 0x01, 0x01, 0x00, 0x88, 0xfc, 0xfc, 0xfc, 0xf9, 0x01, 0x01, 0x01, 0x81, 0x81, 0x81, 0x01,
101 0x01, 0x01, 0x01, 0x01, 0x80, 0xfc, 0xfc, 0xfc, 0xfc, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x07,
103 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
104 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105 0x00, 0x03, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00,
106 0x00, 0x03, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
107 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07,
108 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x07,
109 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
111 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
112 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
119 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
125 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
126 };
127 oled_write_raw_P(split65_logo, sizeof(split65_logo));
128 }
129}
130#endif
diff --git a/keyboards/handwired/split65/split65.h b/keyboards/handwired/split65/split65.h
new file mode 100644
index 000000000..7f60ab0bd
--- /dev/null
+++ b/keyboards/handwired/split65/split65.h
@@ -0,0 +1,24 @@
1/* Copyright 2020-2021 PercyJW-2 <joris.wachsmuth@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include "quantum.h"
19
20#if defined(KEYBOARD_handwired_split65_stm32)
21 #include "stm32.h"
22#elif defined(KEYBOARD_handwired_split65_promicro)
23 #include "promicro.h"
24#endif
diff --git a/keyboards/handwired/split65/stm32/config.h b/keyboards/handwired/split65/stm32/config.h
new file mode 100644
index 000000000..28df96442
--- /dev/null
+++ b/keyboards/handwired/split65/stm32/config.h
@@ -0,0 +1,60 @@
1/* Copyright 2020-2021 PercyJW-2 <joris.wachsmuth@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include "config_common.h"
19
20// USB Device descriptor parameter
21#define VENDOR_ID 0x4A57 // JW
22#define PRODUCT_ID 0x0000 // first keeb
23#define DEVICE_VER 0x0000 // first revision
24#define MANUFACTURER percyjw
25#define PRODUCT split65
26
27// Audio
28#define AUDIO_PIN A5
29#define AUDIO_PIN_ALT A4
30#define AUDIO_PIN_ALT_AS_NEGATIVE
31
32// Matrix Assignments
33#define MATRIX_ROWS 10 //Rows are doubled-up
34#define MATRIX_COLS 8
35
36#define MATRIX_COL_PINS {A2, A1, A0, B8, B13, B14, B15, B9}
37#define MATRIX_ROW_PINS {B5, B4, B3, B2, B1}
38
39// COL2ROW, ROW2COL
40#define DIODE_DIRECTION COL2ROW
41
42#define MATRIX_IO_DELAY 5
43
44// Split Keyboard specifics
45#define SOFT_SERIAL_PIN A9
46#define SELECT_SOFT_SERIAL_SPEED 1
47#define SERIAL_USART_DRIVER SD1
48#define SERIAL_USART_TX_PAL_MODE 7
49#define SERIAL_USART_TIMEOUT 100
50
51// Debounce to reduce unintended double-presses use 0 if not needed
52#define DEBOUNCE 5
53
54// Feature diable options
55//#define NO_DEBUG
56//#define NO_PRINT
57#define NO_ACTION_MACRO
58#define NO_ACTION_FUNCTION
59
60#define OLED_DISPLAY_128X64
diff --git a/keyboards/handwired/split65/stm32/halconf.h b/keyboards/handwired/split65/stm32/halconf.h
new file mode 100644
index 000000000..f3bfd154d
--- /dev/null
+++ b/keyboards/handwired/split65/stm32/halconf.h
@@ -0,0 +1,21 @@
1/* Copyright 2020 QMK
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#define HAL_USE_SERIAL TRUE
20
21#include_next <halconf.h>
diff --git a/keyboards/handwired/split65/stm32/rules.mk b/keyboards/handwired/split65/stm32/rules.mk
new file mode 100644
index 000000000..cb54c352f
--- /dev/null
+++ b/keyboards/handwired/split65/stm32/rules.mk
@@ -0,0 +1,25 @@
1# MCU name
2MCU = STM32F303
3BOARD = QMK_PROTON_C
4
5# Bootloader selection
6BOOTLOADER = stm32-dfu
7
8# Build Options
9# change yes to no to disable
10#
11BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
12MOUSEKEY_ENABLE = no # Mouse keys
13EXTRAKEY_ENABLE = no # Audio control and System control
14CONSOLE_ENABLE = no # Console for debug
15COMMAND_ENABLE = no # Commands for debug and configuration
16# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
19NKRO_ENABLE = no # USB Nkey Rollover
20BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
21RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
22AUDIO_ENABLE = yes # Audio output
23OLED_ENABLE = yes
24SPLIT_KEYBOARD = yes
25SERIAL_DRIVER = usart
diff --git a/keyboards/handwired/split65/stm32/stm32.c b/keyboards/handwired/split65/stm32/stm32.c
new file mode 100644
index 000000000..2fa511206
--- /dev/null
+++ b/keyboards/handwired/split65/stm32/stm32.c
@@ -0,0 +1,16 @@
1/* Copyright 2020-2021 PercyJW-2 <joris.wachsmuth@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "stm32.h"
diff --git a/keyboards/handwired/split65/stm32/stm32.h b/keyboards/handwired/split65/stm32/stm32.h
new file mode 100644
index 000000000..27f03b3e2
--- /dev/null
+++ b/keyboards/handwired/split65/stm32/stm32.h
@@ -0,0 +1,38 @@
1/* Copyright 2020-2021 PercyJW-2 <joris.wachsmuth@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include "split65.h"
19
20#define LAYOUT( \
21 L00, L01, L02, L03, L04, L05, L06, R07, R06, R05, R04, R03, R02, R01, R00, \
22 L10, L11, L12, L13, L14, L15, R17, R16, R15, R14, R13, R12, R11, R10, \
23 L20, L21, L22, L23, L24, L25, R47, R27, R26, R25, R24, R23, R22, R21, R20, \
24 L30, L31, L32, L33, L34, L35, L36, R37, R36, R35, R34, R33, R32, R31, R30, \
25 L40, L41, L42, L43, R46, R45, R44, R43, R42, R41, R40 \
26 ) \
27 { \
28 {L00, L01, L02, L03, L04, L05, L06, KC_NO}, \
29 {L10, L11, L12, L13, L14, L15, KC_NO, KC_NO}, \
30 {L20, L21, L22, L23, L24, L25, KC_NO, KC_NO}, \
31 {L30, L31, L32, L33, L34, L35, L36, KC_NO}, \
32 {L40, L41, L42, KC_NO, L43, KC_NO, KC_NO, KC_NO}, \
33 {R00, R01, R02, R03, R04, R05, R06, R07}, \
34 {R10, R11, R12, R13, R14, R15, R16, R17}, \
35 {R20, R21, R22, R23, R24, R25, R26, R27}, \
36 {R30, R31, R32, R33, R34, R35, R36, R37}, \
37 {R40, R41, R42, R43, R44, R45, R46, R47} \
38 }