From 3d3c2e1d3fd3b3ca063491c8f623143db56dada7 Mon Sep 17 00:00:00 2001
From: Alvaro Muente <40742045+alvaromuente@users.noreply.github.com>
Date: Fri, 11 Sep 2020 02:03:49 -0500
Subject: [PATCH 001/178] Add VIA support for JJ40 (#10263)
* via support
* Removing backspaces from jj40 keymap.c
* Updating jj40/via/rules.mk
---
keyboards/jj40/keymaps/via/keymap.c | 93 +++++++++++++++++++++++++++++
keyboards/jj40/keymaps/via/rules.mk | 4 ++
2 files changed, 97 insertions(+)
create mode 100644 keyboards/jj40/keymaps/via/keymap.c
create mode 100755 keyboards/jj40/keymaps/via/rules.mk
diff --git a/keyboards/jj40/keymaps/via/keymap.c b/keyboards/jj40/keymaps/via/keymap.c
new file mode 100644
index 000000000000..0e0e469abc2e
--- /dev/null
+++ b/keyboards/jj40/keymaps/via/keymap.c
@@ -0,0 +1,93 @@
+/* Copyright 2019
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+#define LOWER FN_MO13
+#define RAISE FN_MO23
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[0] = LAYOUT_planck_mit(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ _______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[1] = LAYOUT_planck_mit(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[2] = LAYOUT_planck_mit(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[3] = LAYOUT_planck_mit(
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
+ _______, _______, BL_TOGG, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+};
diff --git a/keyboards/jj40/keymaps/via/rules.mk b/keyboards/jj40/keymaps/via/rules.mk
new file mode 100755
index 000000000000..58ecfdf5c2be
--- /dev/null
+++ b/keyboards/jj40/keymaps/via/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
+
+RGBLIGHT_ENABLE = yes
From 6de4a53c7cb9a0d2dc4cbbe5dcbf19604daca465 Mon Sep 17 00:00:00 2001
From: yulei
Date: Fri, 11 Sep 2020 17:28:23 +0800
Subject: [PATCH 002/178] [Keyboard] added SQUARE.X by iNETT Studio (#10066)
* added SQUARE.X keyboard from the iNETT Studio
* split to two sub directories
* Apply suggestions from code review
* Update keyboards/inett_studio/sqx/universal/universal.h
* Apply suggestions from code review
* update the matrix control keycodes settings
* use the offical macro to the rgb matrix control
* fixed led position issue
* Apply suggestions from code review
* removed the redundant #endif
* update default keymap
* Apply suggestions from code review
* add license header
---
keyboards/inett_studio/sqx/hotswap/config.h | 72 +++++++
keyboards/inett_studio/sqx/hotswap/hotswap.c | 191 +++++++++++++++++
keyboards/inett_studio/sqx/hotswap/hotswap.h | 66 ++++++
keyboards/inett_studio/sqx/hotswap/info.json | 12 ++
.../sqx/hotswap/keymaps/default/keymap.c | 34 +++
.../sqx/hotswap/keymaps/via/keymap.c | 48 +++++
.../sqx/hotswap/keymaps/via/rules.mk | 1 +
keyboards/inett_studio/sqx/hotswap/readme.md | 13 ++
keyboards/inett_studio/sqx/hotswap/rules.mk | 27 +++
keyboards/inett_studio/sqx/universal/config.h | 72 +++++++
.../inett_studio/sqx/universal/info.json | 27 +++
.../sqx/universal/keymaps/default/keymap.c | 34 +++
.../sqx/universal/keymaps/via/keymap.c | 48 +++++
.../sqx/universal/keymaps/via/rules.mk | 1 +
.../inett_studio/sqx/universal/readme.md | 13 ++
keyboards/inett_studio/sqx/universal/rules.mk | 25 +++
.../inett_studio/sqx/universal/universal.c | 194 ++++++++++++++++++
.../inett_studio/sqx/universal/universal.h | 141 +++++++++++++
18 files changed, 1019 insertions(+)
create mode 100644 keyboards/inett_studio/sqx/hotswap/config.h
create mode 100644 keyboards/inett_studio/sqx/hotswap/hotswap.c
create mode 100644 keyboards/inett_studio/sqx/hotswap/hotswap.h
create mode 100644 keyboards/inett_studio/sqx/hotswap/info.json
create mode 100644 keyboards/inett_studio/sqx/hotswap/keymaps/default/keymap.c
create mode 100644 keyboards/inett_studio/sqx/hotswap/keymaps/via/keymap.c
create mode 100644 keyboards/inett_studio/sqx/hotswap/keymaps/via/rules.mk
create mode 100644 keyboards/inett_studio/sqx/hotswap/readme.md
create mode 100644 keyboards/inett_studio/sqx/hotswap/rules.mk
create mode 100644 keyboards/inett_studio/sqx/universal/config.h
create mode 100644 keyboards/inett_studio/sqx/universal/info.json
create mode 100644 keyboards/inett_studio/sqx/universal/keymaps/default/keymap.c
create mode 100644 keyboards/inett_studio/sqx/universal/keymaps/via/keymap.c
create mode 100644 keyboards/inett_studio/sqx/universal/keymaps/via/rules.mk
create mode 100644 keyboards/inett_studio/sqx/universal/readme.md
create mode 100644 keyboards/inett_studio/sqx/universal/rules.mk
create mode 100644 keyboards/inett_studio/sqx/universal/universal.c
create mode 100644 keyboards/inett_studio/sqx/universal/universal.h
diff --git a/keyboards/inett_studio/sqx/hotswap/config.h b/keyboards/inett_studio/sqx/hotswap/config.h
new file mode 100644
index 000000000000..a59ad3e7e3f6
--- /dev/null
+++ b/keyboards/inett_studio/sqx/hotswap/config.h
@@ -0,0 +1,72 @@
+/**
+ * config.h
+ *
+ Copyright 2020 astro
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+ */
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x694E //'iN'
+#define PRODUCT_ID 0x5336 //'S6'
+#define DEVICE_VER 0x0001
+#define MANUFACTURER iNETT Studio
+#define PRODUCT SQUARE.X
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+#define MATRIX_ROW_PINS { F0, F1, F4, B7, D6}
+#define MATRIX_COL_PINS { C7, C6, B6, B5, B4, F7, F6, F5, E6, B0, D2, D4, D5, D3 }
+#define UNUSED_PINS
+#define DIODE_DIRECTION ROW2COL
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+
+//rgb light setting
+#define RGBLIGHT_LIMIT_VAL 128
+#define RGBLED_NUM 18
+#define RGB_DI_PIN D7
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+//rgb matrix setting
+#define DRIVER_1_LED_TOTAL 33
+#define DRIVER_2_LED_TOTAL 31
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110111
+#define DRIVER_COUNT 2
+#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+
+#if defined(RGB_MATRIX_ENABLE) && defined(RGBLIGHT_ENABLE)
+ #define RGB_MATRIX_DISABLE_KEYCODES
+#endif
diff --git a/keyboards/inett_studio/sqx/hotswap/hotswap.c b/keyboards/inett_studio/sqx/hotswap/hotswap.c
new file mode 100644
index 000000000000..773b0b0b0a78
--- /dev/null
+++ b/keyboards/inett_studio/sqx/hotswap/hotswap.c
@@ -0,0 +1,191 @@
+/**
+ * @file hotswap.c
+ *
+ Copyright 2020 astro
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+ */
+
+#include "hotswap.h"
+
+#ifdef RGB_MATRIX_ENABLE
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+// left CA
+ {0, C1_1, C3_2, C4_2},
+ {0, C1_2, C2_2, C4_3},
+ {0, C1_3, C2_3, C3_3},
+ {0, C1_4, C2_4, C3_4},
+ {0, C1_5, C2_5, C3_5},
+ {0, C1_6, C2_6, C3_6},
+ {0, C1_7, C2_7, C3_7},
+ {0, C1_8, C2_8, C3_8},
+
+ //{0, C5_1, C4_1, C6_1},
+ //{0, C5_8, C4_8, C6_8},
+
+ {0, C9_1, C8_1, C7_1},
+ {0, C9_2, C8_2, C7_2},
+ //{0, C9_3, C8_3, C7_3},
+ {0, C9_4, C8_4, C7_4},
+ {0, C9_5, C8_5, C7_5},
+ {0, C9_6, C8_6, C7_6},
+ {0, C9_7, C8_7, C6_6},
+ {0, C9_8, C7_7, C6_7},
+// left CB
+ {0, C1_9, C3_10, C4_10},
+ {0, C1_10, C2_10, C4_11},
+ {0, C1_11, C2_11, C3_11},
+ {0, C1_12, C2_12, C3_12},
+ {0, C1_13, C2_13, C3_13},
+ {0, C1_14, C2_14, C3_14},
+ {0, C1_15, C2_15, C3_15},
+ {0, C1_16, C2_16, C3_16},
+
+ {0, C5_9, C4_9, C6_9},
+ {0, C5_16, C4_16, C6_16},
+
+ {0, C9_9, C8_9, C7_9},
+ {0, C9_10, C8_10, C7_10},
+ {0, C9_11, C8_11, C7_11},
+ {0, C9_12, C8_12, C7_12},
+ {0, C9_13, C8_13, C7_13},
+ {0, C9_14, C8_14, C7_14},
+ {0, C9_15, C8_15, C6_14},
+ {0, C9_16, C7_15, C6_15},
+
+// right CA
+ {1, C1_1, C3_2, C4_2},
+ {1, C1_2, C2_2, C4_3},
+ {1, C1_3, C2_3, C3_3},
+ {1, C1_4, C2_4, C3_4},
+ {1, C1_5, C2_5, C3_5},
+ {1, C1_6, C2_6, C3_6},
+ {1, C1_7, C2_7, C3_7},
+ {1, C1_8, C2_8, C3_8},
+
+ //{1, C5_1, C4_1, C6_1},
+ //{1, C5_8, C4_8, C6_8},
+
+ {1, C9_1, C8_1, C7_1},
+ {1, C9_2, C8_2, C7_2},
+ {1, C9_3, C8_3, C7_3},
+ {1, C9_4, C8_4, C7_4},
+ {1, C9_5, C8_5, C7_5},
+ {1, C9_6, C8_6, C7_6},
+ {1, C9_7, C8_7, C6_6},
+ {1, C9_8, C7_7, C6_7},
+// right CB
+ {1, C1_9, C3_10, C4_10},
+ {1, C1_10, C2_10, C4_11},
+ {1, C1_11, C2_11, C3_11},
+ {1, C1_12, C2_12, C3_12},
+ {1, C1_13, C2_13, C3_13},
+ //{1, C1_14, C2_14, C3_14},
+ {1, C1_15, C2_15, C3_15},
+ {1, C1_16, C2_16, C3_16},
+
+ //{1, C5_9, C4_9, C6_9},
+ //{1, C5_16, C4_16, C6_16},
+
+ {1, C9_9, C8_9, C7_9},
+ {1, C9_10, C8_10, C7_10},
+ {1, C9_11, C8_11, C7_11},
+ {1, C9_12, C8_12, C7_12},
+ {1, C9_13, C8_13, C7_13},
+ {1, C9_14, C8_14, C7_14},
+ {1, C9_15, C8_15, C6_14},
+ {1, C9_16, C7_15, C6_15},
+};
+
+led_config_t g_led_config = {
+ {
+ { 18, 19, 20, 21, 22, 23, 24, 16, 17, 36, 37, 38, 39, 40},
+ { 26, 27, 28, 29, 30, 31, 25, 48, 41, 42, 43, 44, 45, 46},
+ { 8, 7, 0, 32, 33, 34, 35, 49, 50, 51, 52, 53, NO_LED, 47},
+ { 9, NO_LED, 10, 1, 2, 3, 4, 5, 56, 55, 57, 58, 59, 54},
+ { 14, 13, 12, 11, NO_LED, NO_LED, 6, 15, NO_LED, NO_LED, 60, 61, 62, 63},
+ },
+ {
+ { 48, 32},{ 48, 48},{ 64, 48},{ 80, 48},{ 96, 48},{112, 48},{112, 64},{ 32, 32},
+ { 16, 32},{ 16, 48}, { 32, 48},{ 64, 64},{ 40, 64},{ 20, 64},{ 0, 64},
+
+ { 0, 0},{ 16, 0},{ 32, 0},{ 48, 0},{ 64, 0},{ 80, 0},{ 96, 0},{ 96, 16},
+ { 0, 16},{ 16, 16},
+ { 32, 16},{ 48, 16},{ 64, 16},{ 80, 16},{ 64, 32},{ 80, 32},{ 96, 32},{112, 32},
+
+ {112, 0},{128, 0},{144, 0},{160, 0},{176, 0},{192, 0},{208, 0},{224, 0},
+ {128, 16},{144, 16},{160, 16},{176, 16},{192, 16},{216, 16},{216, 32},{112, 16},
+
+ {128, 32},{144, 32},{160, 32},{176, 32},{192, 32}, {224, 48},{144, 48},
+ {128, 48},{160, 48},{176, 48},{192, 48},{160, 64},{180, 64},{200, 64},{224, 64}
+ },
+ {
+ 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 1, 4, 1, 1, 1, 1,
+
+ 1, 4, 4, 4, 4, 4, 4, 4,
+ 1, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+
+ 4, 4, 4, 4, 4, 4, 1, 1,
+ 4, 4, 4, 4, 4, 1, 1, 4,
+
+ 4, 4, 4, 4, 4, 1, 4,
+ 4, 4, 4, 1, 1, 1, 1, 1,
+ }
+};
+
+#endif //RGB_MATRIX_ENABLE
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+#if defined(RGB_MATRIX_DISABLE_KEYCODES)
+ case RGB_MATRIX_TOGGLE: // toggle rgb matrix
+ rgb_matrix_toggle();
+ return false;
+ case RGB_MATRIX_STEP:
+ rgb_matrix_step();
+ return false;
+ case RGB_MATRIX_INC_HUE:
+ rgb_matrix_increase_hue();
+ return false;
+ case RGB_MATRIX_DEC_HUE:
+ rgb_matrix_decrease_hue();
+ return false;
+ case RGB_MATRIX_INC_SAT:
+ rgb_matrix_increase_sat();
+ return false;
+ case RGB_MATRIX_DEC_SAT:
+ rgb_matrix_decrease_sat();
+ return false;
+ case RGB_MATRIX_INC_VAL:
+ rgb_matrix_increase_val();
+ return false;
+ case RGB_MATRIX_DEC_VAL:
+ rgb_matrix_decrease_val();
+ return false;
+#endif
+ default:
+ break;
+ }
+ }
+ return true;
+}
diff --git a/keyboards/inett_studio/sqx/hotswap/hotswap.h b/keyboards/inett_studio/sqx/hotswap/hotswap.h
new file mode 100644
index 000000000000..b879f7aaaf89
--- /dev/null
+++ b/keyboards/inett_studio/sqx/hotswap/hotswap.h
@@ -0,0 +1,66 @@
+/**
+ * @file hotswap.h
+ *
+ Copyright 2020 astro
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+ */
+#pragma once
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT_60_tsangan_hhkb( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
+ k40, k42, k43, k47, k49, k4a, k4b \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
+ {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_NO, k2e}, \
+ {k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+ {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, k07, KC_NO, KC_NO, KC_NO, k49, k4a, k4b} \
+}
+
+#if defined(RGB_MATRIX_DISABLE_KEYCODES)
+# ifndef RGB_MATRIX_TOGGLE
+# define RGB_MATRIX_TOGGLE KC_F16
+# endif
+# ifndef RGB_MATRIX_STEP
+# define RGB_MATRIX_STEP KC_F17
+# endif
+# ifndef RGB_MATRIX_INC_HUE
+# define RGB_MATRIX_INC_HUE KC_F18
+# endif
+# ifndef RGB_MATRIX_DEC_HUE
+# define RGB_MATRIX_DEC_HUE KC_F19
+# endif
+# ifndef RGB_MATRIX_INC_SAT
+# define RGB_MATRIX_INC_SAT KC_F20
+# endif
+# ifndef RGB_MATRIX_DEC_SAT
+# define RGB_MATRIX_DEC_SAT KC_F21
+# endif
+# ifndef RGB_MATRIX_INC_VAL
+# define RGB_MATRIX_INC_VAL KC_F22
+# endif
+# ifndef RGB_MATRIX_DEC_VAL
+# define RGB_MATRIX_DEC_VAL KC_F23
+# endif
+#endif
diff --git a/keyboards/inett_studio/sqx/hotswap/info.json b/keyboards/inett_studio/sqx/hotswap/info.json
new file mode 100644
index 000000000000..7180422c3de4
--- /dev/null
+++ b/keyboards/inett_studio/sqx/hotswap/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "sqx",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_tsangan_hhkb": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.5}, {"x":1.5, "y":4}, {"x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"x":11, "y":4, "w":1.5}, {"x":12.5, "y":4}, {"x":13.5, "y":4, "w":1.5}]
+ }
+ }
+ }
diff --git a/keyboards/inett_studio/sqx/hotswap/keymaps/default/keymap.c b/keyboards/inett_studio/sqx/hotswap/keymaps/default/keymap.c
new file mode 100644
index 000000000000..0e814cc98cb9
--- /dev/null
+++ b/keyboards/inett_studio/sqx/hotswap/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/*
+Copyright 2020 astro
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_tsangan_hhkb(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_DEL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1),KC_RCTL),
+
+ [1] = LAYOUT_60_tsangan_hhkb(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______,KC_PSCR,
+ RESET, RGB_TOG,RGB_MOD,_______, KC_F16, KC_F17,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,
+ _______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,KC_HOME, KC_END,_______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______,_______,_______, _______, _______,_______,_______),
+};
diff --git a/keyboards/inett_studio/sqx/hotswap/keymaps/via/keymap.c b/keyboards/inett_studio/sqx/hotswap/keymaps/via/keymap.c
new file mode 100644
index 000000000000..d9258169fa66
--- /dev/null
+++ b/keyboards/inett_studio/sqx/hotswap/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
+/*
+Copyright 2020 astro
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_tsangan_hhkb(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_DEL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, TG(1),KC_RCTL),
+
+ [1] = LAYOUT_60_tsangan_hhkb(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______,KC_PSCR,
+ RESET, RGB_TOG,RGB_MOD,_______, KC_F16, KC_F17,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,
+ _______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,KC_HOME, KC_END,_______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______,_______,_______, _______, _______, TG(0),_______),
+
+ [2] = LAYOUT_60_tsangan_hhkb(
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______,_______,_______, _______, _______, TG(0),_______),
+
+ [3] = LAYOUT_60_tsangan_hhkb(
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______,_______,_______, _______, _______, TG(0),_______),
+};
diff --git a/keyboards/inett_studio/sqx/hotswap/keymaps/via/rules.mk b/keyboards/inett_studio/sqx/hotswap/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/inett_studio/sqx/hotswap/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/inett_studio/sqx/hotswap/readme.md b/keyboards/inett_studio/sqx/hotswap/readme.md
new file mode 100644
index 000000000000..faf5cc6a6ef4
--- /dev/null
+++ b/keyboards/inett_studio/sqx/hotswap/readme.md
@@ -0,0 +1,13 @@
+# iNETT Studio SQUARE.X hotswap
+
+A 60% keyboard from the iNETT Studio's SQUARE series.
+
+* Keyboard Maintainer: [astro](https://github.com/yulei)
+* Hardware Supported: SQUARE.X hotswap
+* Hardware Availability: [Geekhack Group Buy](https://geekhack.org/index.php?topic=107062.0)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make inett_studio/sqx/hotswap:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/inett_studio/sqx/hotswap/rules.mk b/keyboards/inett_studio/sqx/hotswap/rules.mk
new file mode 100644
index 000000000000..80968787d512
--- /dev/null
+++ b/keyboards/inett_studio/sqx/hotswap/rules.mk
@@ -0,0 +1,27 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+RGB_MATRIX_ENABLE = yes # Use RGB per key light
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
+LTO_ENABLE = yes # Reducing firmware size
+
+LAYOUTS = 60_tsangan_hhkb
diff --git a/keyboards/inett_studio/sqx/universal/config.h b/keyboards/inett_studio/sqx/universal/config.h
new file mode 100644
index 000000000000..a4a5b42c4d6e
--- /dev/null
+++ b/keyboards/inett_studio/sqx/universal/config.h
@@ -0,0 +1,72 @@
+/**
+ * config.h
+ *
+ Copyright 2020 astro
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+ */
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x694E //'iN'
+#define PRODUCT_ID 0x5336 //'S6'
+#define DEVICE_VER 0x0001
+#define MANUFACTURER iNETT Studio
+#define PRODUCT SQUARE.X
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+#define MATRIX_ROW_PINS { F0, F1, F4, B7, D6}
+#define MATRIX_COL_PINS { C7, C6, B6, B5, B4, F7, F6, F5, E6, B0, D2, D4, D5, D3 }
+#define UNUSED_PINS
+#define DIODE_DIRECTION ROW2COL
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+
+//rgb light setting
+#define RGBLIGHT_LIMIT_VAL 128
+#define RGBLED_NUM 18
+#define RGB_DI_PIN D7
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+//rgb matrix setting
+#define DRIVER_1_LED_TOTAL 36
+#define DRIVER_2_LED_TOTAL 36
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110111
+#define DRIVER_COUNT 2
+#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
+
+#if defined(RGB_MATRIX_ENABLE) && defined(RGBLIGHT_ENABLE)
+# define RGB_MATRIX_DISABLE_KEYCODES
+#endif
diff --git a/keyboards/inett_studio/sqx/universal/info.json b/keyboards/inett_studio/sqx/universal/info.json
new file mode 100644
index 000000000000..d0956b68028b
--- /dev/null
+++ b/keyboards/inett_studio/sqx/universal/info.json
@@ -0,0 +1,27 @@
+{
+ "keyboard_name": "sqx",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi_tsangan_split_rshift": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Win", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
+ },
+ "LAYOUT_60_ansi": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Win", "x":12.5, "y":4}]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2}, {"x":13.75, "y":1, "w":1.25, "h":2}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":2.75}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.5}, {"x":1.5, "y":4}, {"x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"x":11, "y":4, "w":1.5}, {"x":12.5, "y":4}, {"x":13.5, "y":4, "w":1.5}]
+ }
+ }
+ }
diff --git a/keyboards/inett_studio/sqx/universal/keymaps/default/keymap.c b/keyboards/inett_studio/sqx/universal/keymaps/default/keymap.c
new file mode 100644
index 000000000000..bd2869e247d6
--- /dev/null
+++ b/keyboards/inett_studio/sqx/universal/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/*
+Copyright 2020 astro
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_DEL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(1),KC_RCTL),
+
+ [1] = LAYOUT_60_ansi_split_bs_rshift(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______,KC_PSCR,
+ RESET, RGB_TOG,RGB_MOD,_______, KC_F16, KC_F17,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,
+ _______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,KC_HOME, KC_END,_______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______,_______,_______, _______, _______,_______,TG(0),_______),
+};
diff --git a/keyboards/inett_studio/sqx/universal/keymaps/via/keymap.c b/keyboards/inett_studio/sqx/universal/keymaps/via/keymap.c
new file mode 100644
index 000000000000..c58090d9d724
--- /dev/null
+++ b/keyboards/inett_studio/sqx/universal/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
+/*
+Copyright 2020 astro
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_DEL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(1),KC_RCTL),
+
+ [1] = LAYOUT_60_ansi_split_bs_rshift(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______,KC_PSCR,
+ RESET, RGB_TOG,RGB_MOD,_______, KC_F16, KC_F17,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,
+ _______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,KC_HOME, KC_END,_______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______,_______,_______, _______, _______,_______, TG(0),_______),
+
+ [2] = LAYOUT_60_ansi_split_bs_rshift(
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______,_______,_______, _______, _______,_______, TG(0),_______),
+
+ [3] = LAYOUT_60_ansi_split_bs_rshift(
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______,_______,_______, _______, _______,_______, TG(0),_______),
+};
diff --git a/keyboards/inett_studio/sqx/universal/keymaps/via/rules.mk b/keyboards/inett_studio/sqx/universal/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/inett_studio/sqx/universal/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/inett_studio/sqx/universal/readme.md b/keyboards/inett_studio/sqx/universal/readme.md
new file mode 100644
index 000000000000..0a09b9c7dd25
--- /dev/null
+++ b/keyboards/inett_studio/sqx/universal/readme.md
@@ -0,0 +1,13 @@
+# iNETT Studio SQUARE.X universal
+
+A 60% keyboard from the iNETT Studio's SQUARE series.
+
+* Keyboard Maintainer: [astro](https://github.com/yulei)
+* Hardware Supported: SQUARE.X universal
+* Hardware Availability: [Geekhack Group Buy](https://geekhack.org/index.php?topic=107062.0)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make inett_studio/sqx/universal:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/inett_studio/sqx/universal/rules.mk b/keyboards/inett_studio/sqx/universal/rules.mk
new file mode 100644
index 000000000000..cf3a64ba9fec
--- /dev/null
+++ b/keyboards/inett_studio/sqx/universal/rules.mk
@@ -0,0 +1,25 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+RGB_MATRIX_ENABLE = yes # Use RGB per key light
+
+LTO_ENABLE = yes # Reducing firmware size
+
+LAYOUTS = 60_ansi 60_hhkb 60_iso 60_ansi_split_bs_rshift 60_tsangan_hhkb
diff --git a/keyboards/inett_studio/sqx/universal/universal.c b/keyboards/inett_studio/sqx/universal/universal.c
new file mode 100644
index 000000000000..f0f7f88f7a53
--- /dev/null
+++ b/keyboards/inett_studio/sqx/universal/universal.c
@@ -0,0 +1,194 @@
+/**
+ * @file universal.c
+ *
+ Copyright 2020 astro
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+ */
+
+#include "universal.h"
+
+#ifdef RGB_MATRIX_ENABLE
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+// left CA
+ {0, C1_1, C3_2, C4_2},
+ {0, C1_2, C2_2, C4_3},
+ {0, C1_3, C2_3, C3_3},
+ {0, C1_4, C2_4, C3_4},
+ {0, C1_5, C2_5, C3_5},
+ {0, C1_6, C2_6, C3_6},
+ {0, C1_7, C2_7, C3_7},
+ {0, C1_8, C2_8, C3_8},
+
+ {0, C5_1, C4_1, C6_1},
+ {0, C5_8, C4_8, C6_8},
+
+ {0, C9_1, C8_1, C7_1},
+ {0, C9_2, C8_2, C7_2},
+ {0, C9_3, C8_3, C7_3},
+ {0, C9_4, C8_4, C7_4},
+ {0, C9_5, C8_5, C7_5},
+ {0, C9_6, C8_6, C7_6},
+ {0, C9_7, C8_7, C6_6},
+ {0, C9_8, C7_7, C6_7},
+// left CB
+ {0, C1_9, C3_10, C4_10},
+ {0, C1_10, C2_10, C4_11},
+ {0, C1_11, C2_11, C3_11},
+ {0, C1_12, C2_12, C3_12},
+ {0, C1_13, C2_13, C3_13},
+ {0, C1_14, C2_14, C3_14},
+ {0, C1_15, C2_15, C3_15},
+ {0, C1_16, C2_16, C3_16},
+
+ {0, C5_9, C4_9, C6_9},
+ {0, C5_16, C4_16, C6_16},
+
+ {0, C9_9, C8_9, C7_9},
+ {0, C9_10, C8_10, C7_10},
+ {0, C9_11, C8_11, C7_11},
+ {0, C9_12, C8_12, C7_12},
+ {0, C9_13, C8_13, C7_13},
+ {0, C9_14, C8_14, C7_14},
+ {0, C9_15, C8_15, C6_14},
+ {0, C9_16, C7_15, C6_15},
+
+// right CA
+ {1, C1_1, C3_2, C4_2},
+ {1, C1_2, C2_2, C4_3},
+ {1, C1_3, C2_3, C3_3},
+ {1, C1_4, C2_4, C3_4},
+ {1, C1_5, C2_5, C3_5},
+ {1, C1_6, C2_6, C3_6},
+ {1, C1_7, C2_7, C3_7},
+ {1, C1_8, C2_8, C3_8},
+
+ {1, C5_1, C4_1, C6_1},
+ {1, C5_8, C4_8, C6_8},
+
+ {1, C9_1, C8_1, C7_1},
+ {1, C9_2, C8_2, C7_2},
+ {1, C9_3, C8_3, C7_3},
+ {1, C9_4, C8_4, C7_4},
+ {1, C9_5, C8_5, C7_5},
+ {1, C9_6, C8_6, C7_6},
+ {1, C9_7, C8_7, C6_6},
+ {1, C9_8, C7_7, C6_7},
+// right CB
+ {1, C1_9, C3_10, C4_10},
+ {1, C1_10, C2_10, C4_11},
+ {1, C1_11, C2_11, C3_11},
+ {1, C1_12, C2_12, C3_12},
+ {1, C1_13, C2_13, C3_13},
+ {1, C1_14, C2_14, C3_14},
+ {1, C1_15, C2_15, C3_15},
+ {1, C1_16, C2_16, C3_16},
+
+ {1, C5_9, C4_9, C6_9},
+ {1, C5_16, C4_16, C6_16},
+
+ {1, C9_9, C8_9, C7_9},
+ {1, C9_10, C8_10, C7_10},
+ {1, C9_11, C8_11, C7_11},
+ {1, C9_12, C8_12, C7_12},
+ {1, C9_13, C8_13, C7_13},
+ {1, C9_14, C8_14, C7_14},
+ {1, C9_15, C8_15, C6_14},
+ {1, C9_16, C7_15, C6_15},
+};
+
+led_config_t g_led_config = {
+ {
+ { 0, 1, 2, 3, 4, 5, 6, 36, 37, 38, 39, 40, 41, 42},
+ { 8, 9, 10, 11, 12, 13, 7, 45, 46, 47, 48, 49, 50, 51},
+ { 26,27, 18, 14, 15, 16, 17, 54, 55, 56, 57, 58, 59, 53},
+ { 29,30, 31, 19, 20, 21, 22, 23, 62, 63, 64, 65, 66, 61},
+ { 35,34, 33, NO_LED, NO_LED, NO_LED, 24, 44, NO_LED, NO_LED, 68, 69, 70, 71},
+ },
+ {
+ { 32, 32},{ 48, 48},{ 64, 48},{ 80, 48},{ 96, 48},{112, 48},{ 96, 64},{ 96, 64},
+ { 0, 32},{ 16, 32},
+ { 0, 48},{ 0, 48},{ 16, 48},{ 32, 48},{ 64, 64},{ 32, 64},{ 16, 64},{ 0, 64},
+ { 0, 0},{ 16, 0},{ 32, 0},{ 48, 0},{ 64, 0},{ 80, 0},{ 96, 0},{ 96, 16},
+ { 0, 16},{ 16, 16},
+ { 32, 16},{ 48, 16},{ 64, 16},{ 80, 16},{ 48, 32},{ 64, 32},{ 80, 32},{ 96, 32},
+
+ {128, 0},{144, 0},{160, 0},{176, 0},{192, 0},{208, 0},{216, 0},{224, 0},
+ {112, 0},{128, 16},
+ {144, 16},{160, 16},{176, 16},{192, 16},{208, 16},{224, 16},{224, 32},{216, 32},
+ {128, 32},{144, 32},{160, 32},{176, 32},{192, 32},{208, 32},{208, 48},{224, 48},
+ {128, 48},{144, 48},
+ {160, 48},{176, 48},{192, 48},{142, 64},{160, 64},{176, 64},{208, 64},{224, 64}
+ },
+ {
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 4,
+ 4, 4, 1, 1, 1, 4, 4, 4,
+
+ 1, 4, 4, 4, 4, 4, 4, 4,
+ 1, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+
+ 4, 4, 4, 4, 4, 4, 1, 1,
+ 4, 4,
+ 4, 4, 4, 4, 4, 1, 1, 1,
+
+ 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4,
+ 4, 4, 4, 4, 1, 1, 1, 1,
+ }
+};
+#endif //RGB_MATRIX_ENABLE
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+#if defined(RGB_MATRIX_DISABLE_KEYCODES)
+ case RGB_MATRIX_TOGGLE: // toggle rgb matrix
+ rgb_matrix_toggle();
+ return false;
+ case RGB_MATRIX_STEP:
+ rgb_matrix_step();
+ return false;
+ case RGB_MATRIX_INC_HUE:
+ rgb_matrix_increase_hue();
+ return false;
+ case RGB_MATRIX_DEC_HUE:
+ rgb_matrix_decrease_hue();
+ return false;
+ case RGB_MATRIX_INC_SAT:
+ rgb_matrix_increase_sat();
+ return false;
+ case RGB_MATRIX_DEC_SAT:
+ rgb_matrix_decrease_sat();
+ return false;
+ case RGB_MATRIX_INC_VAL:
+ rgb_matrix_increase_val();
+ return false;
+ case RGB_MATRIX_DEC_VAL:
+ rgb_matrix_decrease_val();
+ return false;
+#endif
+ default:
+ break;
+ }
+ }
+ return true;
+}
diff --git a/keyboards/inett_studio/sqx/universal/universal.h b/keyboards/inett_studio/sqx/universal/universal.h
new file mode 100644
index 000000000000..b2df37ecc4be
--- /dev/null
+++ b/keyboards/inett_studio/sqx/universal/universal.h
@@ -0,0 +1,141 @@
+/**
+ * @file universal.h
+ *
+ Copyright 2020 astro
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+ */
+#pragma once
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT_60_ansi( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
+ k40, k42, k43, k47, k48, k49, k4a, k4b \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k08, k09, k0a, k0b, k0c, KC_NO, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
+ {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_NO, k2e}, \
+ {k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NO}, \
+ {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, k07, KC_NO, KC_NO, k48, k49, k4a, k4b} \
+}
+
+#define LAYOUT_60_iso( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
+ k40, k42, k43, k47, k48, k49, k4a, k4b \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k08, k09, k0a, k0b, k0c, KC_NO, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, KC_NO}, \
+ {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, KC_NO}, \
+ {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, k07, KC_NO, KC_NO, k48, k49, k4a, k4b} \
+}
+
+#define LAYOUT_60_ansi_tsangan_split_rshift( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
+ k40, k42, k43, k47, k49, k4a, k4b \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k08, k09, k0a, k0b, k0c, KC_NO, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
+ {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_NO, k2e}, \
+ {k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+ {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, k07, KC_NO, KC_NO, KC_NO, k49, k4a, k4b} \
+}
+
+#define LAYOUT_60_hhkb( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
+ k42, k43, k47, k49, k4a \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
+ {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_NO, k2e}, \
+ {k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+ {KC_NO, k42, k43, KC_NO, KC_NO, KC_NO, k47, k07, KC_NO, KC_NO, KC_NO, k49, k4a, KC_NO} \
+}
+#define LAYOUT_60_tsangan_hhkb( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
+ k40, k42, k43, k47, k49, k4a, k4b \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
+ {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_NO, k2e}, \
+ {k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+ {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, k07, KC_NO, KC_NO, KC_NO, k49, k4a, k4b} \
+}
+
+#define LAYOUT_60_ansi_split_bs_rshift( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
+ k40, k42, k43, k47, k48, k49, k4a, k4b \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
+ {k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_NO, k2e}, \
+ {k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+ {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, k07, KC_NO, KC_NO, k48, k49, k4a, k4b} \
+}
+
+
+#if defined(RGB_MATRIX_DISABLE_KEYCODES)
+# ifndef RGB_MATRIX_TOGGLE
+# define RGB_MATRIX_TOGGLE KC_F16
+# endif
+# ifndef RGB_MATRIX_STEP
+# define RGB_MATRIX_STEP KC_F17
+# endif
+# ifndef RGB_MATRIX_INC_HUE
+# define RGB_MATRIX_INC_HUE KC_F18
+# endif
+# ifndef RGB_MATRIX_DEC_HUE
+# define RGB_MATRIX_DEC_HUE KC_F19
+# endif
+# ifndef RGB_MATRIX_INC_SAT
+# define RGB_MATRIX_INC_SAT KC_F20
+# endif
+# ifndef RGB_MATRIX_DEC_SAT
+# define RGB_MATRIX_DEC_SAT KC_F21
+# endif
+# ifndef RGB_MATRIX_INC_VAL
+# define RGB_MATRIX_INC_VAL KC_F22
+# endif
+# ifndef RGB_MATRIX_DEC_VAL
+# define RGB_MATRIX_DEC_VAL KC_F23
+# endif
+#endif
From 58d7e9fa0ebe90ab26812970a7473aec91f9f31a Mon Sep 17 00:00:00 2001
From: hidenori
Date: Sat, 12 Sep 2020 05:06:38 +0900
Subject: [PATCH 003/178] [Keymap] Added ToyoshimaHidenori's keymap for
Ergodash mini (#10228)
* Add ToyoshimaHidenori's keymap
* Remove some dead code and characters
* Change the folder name from uppercase to lowercase
* Remove uppercase folder
---
.../mini/keymaps/toyoshimahidenori/config.h | 33 ++++
.../mini/keymaps/toyoshimahidenori/keymap.c | 141 ++++++++++++++++++
.../mini/keymaps/toyoshimahidenori/readme.md | 62 ++++++++
.../mini/keymaps/toyoshimahidenori/rules.mk | 3 +
4 files changed, 239 insertions(+)
create mode 100644 keyboards/ergodash/mini/keymaps/toyoshimahidenori/config.h
create mode 100644 keyboards/ergodash/mini/keymaps/toyoshimahidenori/keymap.c
create mode 100644 keyboards/ergodash/mini/keymaps/toyoshimahidenori/readme.md
create mode 100644 keyboards/ergodash/mini/keymaps/toyoshimahidenori/rules.mk
diff --git a/keyboards/ergodash/mini/keymaps/toyoshimahidenori/config.h b/keyboards/ergodash/mini/keymaps/toyoshimahidenori/config.h
new file mode 100644
index 000000000000..df04873a97ec
--- /dev/null
+++ b/keyboards/ergodash/mini/keymaps/toyoshimahidenori/config.h
@@ -0,0 +1,33 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
diff --git a/keyboards/ergodash/mini/keymaps/toyoshimahidenori/keymap.c b/keyboards/ergodash/mini/keymaps/toyoshimahidenori/keymap.c
new file mode 100644
index 000000000000..7224af7a0051
--- /dev/null
+++ b/keyboards/ergodash/mini/keymaps/toyoshimahidenori/keymap.c
@@ -0,0 +1,141 @@
+/* Copyright 2020 Toyoshima Hidenori
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+};
+
+#define EISU LALT(KC_GRV)
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ * | TAB | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+ * | Ctrl | A | S | D | F | G | [ | | ] | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | GUI | | GUI | N | M | , | . | / | Shift|
+ * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+ * | Ctrl | ESC | ALt | ESC |||||||| Shift| Raise| Space|||||||| enter| Lower| Bcspc|||||||| Left | Down | Up | Right|
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ */
+ [_QWERTY] = LAYOUT(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, KC_EQL , KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI, KC_RGUI, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_ESC, KC_LALT, KC_ESC, KC_LSFT, RAISE, KC_SPC, KC_ENT, LOWER, KC_BSPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ /* Lower
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ * | ~ | 1 | 2 | 3 | 4 | 5 | _ | | + | 6 | 7 | 8 | 9 | 0 | | |
+ * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+ * | Ctrl | ^ | & | * | ( | ) | { | | } | Left | Down | Up | Right| : | " |
+ * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+ * | Shift| ! | @ | # | $ | % | GUI | | GUI | - | = | < | > | ? | Shift|
+ * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+ * | Ctrl | ESC | ALt | EISU |||||||| kana | Raise| Space|||||||| Enter| Lower|Delete|||||||| Home |PageDn|PageUp| End |
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ */
+ [_LOWER] = LAYOUT(
+ KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_UNDS, KC_PLUS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PIPE,
+ KC_LCTL, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_COLN, KC_DQT ,
+ KC_LSFT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_LGUI, KC_RGUI, KC_MINS, KC_EQL, KC_LT, KC_GT, KC_QUES, KC_RSFT,
+ KC_LCTL, KC_ESC, KC_LALT, KC_LANG2, KC_LANG1,RAISE, KC_SPC, KC_ENT, LOWER, KC_DEL, KC_HOME,KC_PGDN, KC_PGUP, KC_END
+ ),
+
+ /* Raise
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | _ | | + | 6 | 7 | 8 | 9 | 0 | | |
+ * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+ * | Ctrl | ^ | & | * | ( | ) | { | | } | Left | Down | Up | Right| : | " |
+ * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+ * | Shift| ! | @ | # | $ | % | GUI | | GUI | _ | + | < | > | ? | Shift|
+ * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+ * | Ctrl | ESC | ALt | EISU |||||||| kana | Raise| Space|||||||| Enter| Lower|Delete|||||||| Home |PageDn|PageUp| End |
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ */
+ [_RAISE] = LAYOUT(
+ KC_GRV , KC_1, KC_2, KC_3, KC_4, KC_5, KC_UNDS, KC_PLUS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PIPE,
+ KC_LCTL, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_COLN, KC_DQT ,
+ KC_LSFT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_LGUI, KC_RGUI, KC_UNDS, KC_PLUS, KC_LT, KC_GT, KC_QUES, KC_RSFT,
+ KC_LCTL, KC_ESC, KC_LALT, KC_LANG2, KC_LANG1,RAISE, KC_SPC, KC_ENT, LOWER, KC_DEL, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+ ),
+
+ /* Adjust
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ * | | Reset|RGB ON| MODE| HUE-| HUE+| | | | SAT-| SAT+| VAL-| VAL+| | |
+ * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+ * | | | | |||||||| | | |||||||| | | |||||||| | | | |
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ */
+ [_ADJUST] = LAYOUT(
+ _______, RESET , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI,_______, _______, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______,
+ _______, _______, BL_TOGG, BL_BRTG, BL_INC , BL_DEC ,_______, _______, _______, _______, _______, _______, _______, _______,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6 ,_______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, _______, _______,_______,_______, _______,_______, _______, _______, _______, _______, _______
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/ergodash/mini/keymaps/toyoshimahidenori/readme.md b/keyboards/ergodash/mini/keymaps/toyoshimahidenori/readme.md
new file mode 100644
index 000000000000..ebc13043a7e0
--- /dev/null
+++ b/keyboards/ergodash/mini/keymaps/toyoshimahidenori/readme.md
@@ -0,0 +1,62 @@
+# ToyoshimaHidenori's keymap for Ergodash mini
+
+This is the ToyoshimaHidenori's keymap configuration for Ergodash mini.
+There are four layers, QWERTY(default), LOWER, RAISE and ADJSUT.
+
+## Layers
+
+### Qwerty
+
+```
+,----------------------------------------------------------------------------------------------------------------------.
+| TAB | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ |
+|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+| Ctrl | A | S | D | F | G | [ | | ] | H | J | K | L | ; | ' |
+|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+| Shift| Z | X | C | V | B | GUI | | GUI | N | M | , | . | / | Shift|
+|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+| Ctrl | ESC | ALt | ESC |||||||| Shift| Raise| Space|||||||| enter| Lower| Bcspc|||||||| Left | Down | Up | Right|
+,----------------------------------------------------------------------------------------------------------------------.
+```
+
+### Lower
+
+```
+,----------------------------------------------------------------------------------------------------------------------.
+| ~ | 1 | 2 | 3 | 4 | 5 | _ | | + | 6 | 7 | 8 | 9 | 0 | | |
+|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+| Ctrl | ^ | & | * | ( | ) | { | | } | Left | Down | Up | Right| : | " |
+|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+| Shift| ! | @ | # | $ | % | GUI | | GUI | - | = | < | > | ? | Shift|
+|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+| Ctrl | ESC | ALt | EISU |||||||| kana | Raise| Space|||||||| Enter| Lower|Delete|||||||| Home |PageDn|PageUp| End |
+,----------------------------------------------------------------------------------------------------------------------.
+```
+
+### Raise
+
+```
+,----------------------------------------------------------------------------------------------------------------------.
+| ` | 1 | 2 | 3 | 4 | 5 | _ | | + | 6 | 7 | 8 | 9 | 0 | | |
+|------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+| Ctrl | ^ | & | * | ( | ) | { | | } | Left | Down | Up | Right| : | " |
+|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+| Shift| ! | @ | # | $ | % | GUI | | GUI | _ | + | < | > | ? | Shift|
+|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+| Ctrl | ESC | ALt | EISU |||||||| kana | Raise| Space|||||||| Enter| Lower|Delete|||||||| Home |PageDn|PageUp| End |
+,----------------------------------------------------------------------------------------------------------------------.
+```
+
+### Adjust
+
+```
+,----------------------------------------------------------------------------------------------------------------------.
+| | Reset|RGB ON| MODE| HUE-| HUE+| | | | SAT-| SAT+| VAL-| VAL+| | |
+|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+| | | | | | | | | | | |
+|------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+| F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 |
+|-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+| | | | |||||||| | | |||||||| | | |||||||| | | | |
+,----------------------------------------------------------------------------------------------------------------------.
+```
diff --git a/keyboards/ergodash/mini/keymaps/toyoshimahidenori/rules.mk b/keyboards/ergodash/mini/keymaps/toyoshimahidenori/rules.mk
new file mode 100644
index 000000000000..11b62b9bffeb
--- /dev/null
+++ b/keyboards/ergodash/mini/keymaps/toyoshimahidenori/rules.mk
@@ -0,0 +1,3 @@
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+AUDIO_ENABLE = no
From d8d65bbf5f81dd075438e4ce89bda135ebf8f2b9 Mon Sep 17 00:00:00 2001
From: Takeshi ISHII <2170248+mtei@users.noreply.github.com>
Date: Sat, 12 Sep 2020 05:10:30 +0900
Subject: [PATCH 004/178] [Docs] Update Japanese translation of
feature_split_keyboard.md (#10283)
Apply #10242 changes to ja/feature_split_keyboard.md
---
docs/ja/feature_split_keyboard.md | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/docs/ja/feature_split_keyboard.md b/docs/ja/feature_split_keyboard.md
index 1efc98e40f9e..3bdf96d1c7d1 100644
--- a/docs/ja/feature_split_keyboard.md
+++ b/docs/ja/feature_split_keyboard.md
@@ -1,8 +1,8 @@
# 分割キーボード
QMK ファームウェアリポジトリの多くのキーボードは、"分割"キーボードです。それらは2つのコントローラを使います — 1つは USB に接続し、もう1つは TRRS または同様のケーブルを介してシリアルまたは I2C 接続で接続します。
@@ -53,11 +53,12 @@ QMK ファームウェアには、任意のキーボードで使用可能な一
### シリアル配線
-2つの Pro Micro 間で GND、Vcc、D0 (別名 PDO あるいは pin 3) を TRS/TRRS ケーブルの3本のワイヤで接続します。
+2つの Pro Micro 間で GND、Vcc、D0/D1/D2/D3 (別名 PD0/PD1/PD2/PD3) を TRS/TRRS ケーブルの3本のワイヤで接続します。
?> ここで使われるピンは実際には以下の `SOFT_SERIAL_PIN` によって設定されることに注意してください。
-![シリアル配線](https://i.imgur.com/C3D1GAQ.png)
+
+
### I2C 配線
@@ -65,7 +66,7 @@ QMK ファームウェアには、任意のキーボードで使用可能な一
プルアップ抵抗はキーボードの左右どちら側にも配置することができます。もし各側を単独で使いたい場合は、4つの抵抗を使い、両側にプルアップ抵抗を配置することもできます。
-![I2C 配線](https://i.imgur.com/Hbzhc6E.png)
+
## ファームウェア設定
From c82865efabb4153ca67a804a1ed746dab3073b8d Mon Sep 17 00:00:00 2001
From: Ben
Date: Sat, 12 Sep 2020 03:19:05 +0200
Subject: [PATCH 005/178] Add VIA keymap for Plaid-Pad (#10057)
* Add via keymap for Plaid-Pad
- Add VIA support for the Plaid-Pad
- Changes Vendor ID and Product ID (to follow VIA's guidelines)
* Add extra encoder pads for rev1.1
* Change Product Id from pp to PP (hex value)
* improved readme
- detailed informations about rotary encoder, bootloader and firmware
* Improved encoder informations in via keymap
* Improved encoder infos and code in default keymap
* add revision folder for rev1 and rev1.1
* change encoder assignment for defaul a via keymap
* Update keyboards/keycapsss/plaid_pad/config.h
* change revision number
* Update keyboards/keycapsss/plaid_pad/rules.mk
* Update keyboards/keycapsss/plaid_pad/rules.mk
* Update keyboards/keycapsss/plaid_pad/rules.mk
* Update keyboards/keycapsss/plaid_pad/rules.mk
* Update keyboards/keycapsss/plaid_pad/readme.md
* add license to header of *.h and *.c files
* remove the list of alternate bootloaders
- due to the pr checklist
* Update keyboards/keycapsss/plaid_pad/rules.mk
---
keyboards/keycapsss/plaid_pad/config.h | 28 +++--
.../plaid_pad/keymaps/default/config.h | 16 +++
.../plaid_pad/keymaps/default/keymap.c | 41 +++++--
.../plaid_pad/keymaps/default/readme.md | 13 ---
.../keycapsss/plaid_pad/keymaps/via/keymap.c | 100 ++++++++++++++++++
.../keycapsss/plaid_pad/keymaps/via/rules.mk | 4 +
keyboards/keycapsss/plaid_pad/plaid_pad.c | 16 +++
keyboards/keycapsss/plaid_pad/plaid_pad.h | 16 +++
keyboards/keycapsss/plaid_pad/readme.md | 54 ++++++++--
keyboards/keycapsss/plaid_pad/rev1/config.h | 25 +++++
keyboards/keycapsss/plaid_pad/rev1/rev1.c | 17 +++
keyboards/keycapsss/plaid_pad/rev1/rev1.h | 19 ++++
keyboards/keycapsss/plaid_pad/rev1/rules.mk | 1 +
keyboards/keycapsss/plaid_pad/rev2/config.h | 25 +++++
keyboards/keycapsss/plaid_pad/rev2/rev2.c | 17 +++
keyboards/keycapsss/plaid_pad/rev2/rev2.h | 19 ++++
keyboards/keycapsss/plaid_pad/rev2/rules.mk | 1 +
keyboards/keycapsss/plaid_pad/rules.mk | 23 ++--
18 files changed, 383 insertions(+), 52 deletions(-)
delete mode 100644 keyboards/keycapsss/plaid_pad/keymaps/default/readme.md
create mode 100644 keyboards/keycapsss/plaid_pad/keymaps/via/keymap.c
create mode 100644 keyboards/keycapsss/plaid_pad/keymaps/via/rules.mk
create mode 100644 keyboards/keycapsss/plaid_pad/rev1/config.h
create mode 100644 keyboards/keycapsss/plaid_pad/rev1/rev1.c
create mode 100644 keyboards/keycapsss/plaid_pad/rev1/rev1.h
create mode 100644 keyboards/keycapsss/plaid_pad/rev1/rules.mk
create mode 100644 keyboards/keycapsss/plaid_pad/rev2/config.h
create mode 100644 keyboards/keycapsss/plaid_pad/rev2/rev2.c
create mode 100644 keyboards/keycapsss/plaid_pad/rev2/rev2.h
create mode 100644 keyboards/keycapsss/plaid_pad/rev2/rules.mk
diff --git a/keyboards/keycapsss/plaid_pad/config.h b/keyboards/keycapsss/plaid_pad/config.h
index f456bf84410d..d52a51ccdc72 100644
--- a/keyboards/keycapsss/plaid_pad/config.h
+++ b/keyboards/keycapsss/plaid_pad/config.h
@@ -1,14 +1,27 @@
+/* Copyright 2020 Ben Roesner (keycapsss.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0xAF12
-#define DEVICE_VER 0x0001
+#define VENDOR_ID 0x7983
+#define PRODUCT_ID 0x5050 // "PP"
#define MANUFACTURER Keycapsss
-#define PRODUCT Plaid-Pad
-#define DESCRIPTION 4x4 numpad with through hole components
/* key matrix size */
#define MATRIX_ROWS 4
@@ -16,11 +29,6 @@
#define MATRIX_ROW_PINS { C0, C1, C2, C3 }
#define MATRIX_COL_PINS { B0, D7, D6, D5 }
-#define UNUSED_PINS { B3, B4, B5, D4}
-
-#define ENCODERS_PAD_A { D1, B2 }
-#define ENCODERS_PAD_B { D0, B1 }
-
#define ENCODER_RESOLUTION 4
diff --git a/keyboards/keycapsss/plaid_pad/keymaps/default/config.h b/keyboards/keycapsss/plaid_pad/keymaps/default/config.h
index 271f48d0011b..fb4c0f5e25b7 100644
--- a/keyboards/keycapsss/plaid_pad/keymaps/default/config.h
+++ b/keyboards/keycapsss/plaid_pad/keymaps/default/config.h
@@ -1,3 +1,19 @@
+/* Copyright 2020 Ben Roesner (keycapsss.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
#pragma once
// place overrides here
diff --git a/keyboards/keycapsss/plaid_pad/keymaps/default/keymap.c b/keyboards/keycapsss/plaid_pad/keymaps/default/keymap.c
index 7de3be5bd3d5..59031c91d267 100644
--- a/keyboards/keycapsss/plaid_pad/keymaps/default/keymap.c
+++ b/keyboards/keycapsss/plaid_pad/keymaps/default/keymap.c
@@ -28,17 +28,46 @@ void keyboard_post_init_user(void) {
}
void encoder_update_user(uint8_t index, bool clockwise) {
- if (index == 0) { // First encoder - top left
+/*
+Rev1.1 Rev1
+,-----------------------, ,-----------------------,
+| E1 | E2 | E3 | E4 | | E1 | | | E2 |
+|-----+-----+-----+-----| |-----+-----+-----+-----|
+| | | | E3 | | | | | |
+|-----+-----+-----+-----| |-----+-----+-----+-----|
+| | | | E2 | | | | | |
+|-----+-----+-----+-----| |-----+-----+-----+-----|
+| | | | E1 | | | | | |
+`-----------------------' `-----------------------'
+ */
+
+ // First encoder (E1)
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_F17);
+ } else {
+ tap_code(KC_F18);
+ }
+ // Second encoder (E2)
+ } else if (index == 1) {
+ if (clockwise) {
+ tap_code(KC_F19);
+ } else {
+ tap_code(KC_F20);
+ }
+ // Third encoder (E3)
+ } else if (index == 2) {
if (clockwise) {
- tap_code(KC_RIGHT);
+ tap_code(KC_F21);
} else {
- tap_code(KC_LEFT);
+ tap_code(KC_F22);
}
- } else if (index == 1) { // Second encoder - top right
+ // Forth encoder (E4)
+ } else if (index == 3) {
if (clockwise) {
- tap_code(KC_UP);
+ tap_code(KC_F23);
} else {
- tap_code(KC_DOWN);
+ tap_code(KC_F24);
}
}
}
diff --git a/keyboards/keycapsss/plaid_pad/keymaps/default/readme.md b/keyboards/keycapsss/plaid_pad/keymaps/default/readme.md
deleted file mode 100644
index ccbea5f86521..000000000000
--- a/keyboards/keycapsss/plaid_pad/keymaps/default/readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-# Default Plaid-Pad Layout
-
-This is the default layout for the plaid pad.
-The upper left (7) and right (/) switch, can be replaced by a rotary encoder.
-Encoders with built-in switch are supported and map to the original keys (7) and (/).
-
-The upper left encoder performs a tap on "Right Arrow" (KC_RIGHT) and "Left Arrow" (KC_LEFT) when rotated clockwise and counter-clockwise in the respective direction for each step of the encoder.
-
-The upper right encoder performs a tap on "Up Arrow" (KC_UP) and "Down Arrow" (KC_DOWN) when rotated clockwise and counter-clockwise in the respective direction for each step of the encoder.
-
diff --git a/keyboards/keycapsss/plaid_pad/keymaps/via/keymap.c b/keyboards/keycapsss/plaid_pad/keymaps/via/keymap.c
new file mode 100644
index 000000000000..1b1d59e3e999
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/keymaps/via/keymap.c
@@ -0,0 +1,100 @@
+/* Copyright 2020 Ben Roesner (keycapsss.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ * ,-----------------------,
+ * | 7 | 8 | 9 | / |
+ * |-----+-----+-----+-----|
+ * | 4 | 5 | 6 | * |
+ * |-----+-----+-----+-----|
+ * | 1 | 2 | 3 | - |
+ * |-----+-----+-----+-----|
+ * | 0 | . | = | + |
+ * `-----------------------'
+ */
+ [0] = LAYOUT_ortho_4x4(
+ KC_P7, KC_P8, KC_P9, KC_PSLS,
+ KC_P4, KC_P5, KC_P6, KC_PAST,
+ KC_P1, KC_P2, KC_P3, KC_PMNS,
+ KC_P0, KC_PDOT, KC_PEQL, KC_PPLS ),
+ [1] = LAYOUT_ortho_4x4(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ),
+ [2] = LAYOUT_ortho_4x4(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ),
+ [3] = LAYOUT_ortho_4x4(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ),
+};
+
+// Set LED1 state during powerup
+void keyboard_post_init_user(void) {
+ writePinHigh(LED_RED);
+}
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+/*
+Rev1.1 Rev1
+,-----------------------, ,-----------------------,
+| E1 | E2 | E3 | E4 | | E1 | | | E2 |
+|-----+-----+-----+-----| |-----+-----+-----+-----|
+| | | | E3 | | | | | |
+|-----+-----+-----+-----| |-----+-----+-----+-----|
+| | | | E2 | | | | | |
+|-----+-----+-----+-----| |-----+-----+-----+-----|
+| | | | E1 | | | | | |
+`-----------------------' `-----------------------'
+ */
+
+ // First encoder (E1)
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_F17);
+ } else {
+ tap_code(KC_F18);
+ }
+ // Second encoder (E2)
+ } else if (index == 1) {
+ if (clockwise) {
+ tap_code(KC_F19);
+ } else {
+ tap_code(KC_F20);
+ }
+ // Third encoder (E3)
+ } else if (index == 2) {
+ if (clockwise) {
+ tap_code(KC_F21);
+ } else {
+ tap_code(KC_F22);
+ }
+ // Forth encoder (E4)
+ } else if (index == 3) {
+ if (clockwise) {
+ tap_code(KC_F23);
+ } else {
+ tap_code(KC_F24);
+ }
+ }
+}
diff --git a/keyboards/keycapsss/plaid_pad/keymaps/via/rules.mk b/keyboards/keycapsss/plaid_pad/keymaps/via/rules.mk
new file mode 100644
index 000000000000..00c11acccda3
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/keymaps/via/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
+EXTRAKEY_ENABLE = no
+MOUSEKEY_ENABLE = no
diff --git a/keyboards/keycapsss/plaid_pad/plaid_pad.c b/keyboards/keycapsss/plaid_pad/plaid_pad.c
index befddf42a994..127b80a5f902 100644
--- a/keyboards/keycapsss/plaid_pad/plaid_pad.c
+++ b/keyboards/keycapsss/plaid_pad/plaid_pad.c
@@ -1 +1,17 @@
+/* Copyright 2020 Ben Roesner (keycapsss.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
#include "plaid_pad.h"
diff --git a/keyboards/keycapsss/plaid_pad/plaid_pad.h b/keyboards/keycapsss/plaid_pad/plaid_pad.h
index fae9b132a873..4ac26bf45caf 100644
--- a/keyboards/keycapsss/plaid_pad/plaid_pad.h
+++ b/keyboards/keycapsss/plaid_pad/plaid_pad.h
@@ -1,3 +1,19 @@
+/* Copyright 2020 Ben Roesner (keycapsss.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
#pragma once
#include "quantum.h"
diff --git a/keyboards/keycapsss/plaid_pad/readme.md b/keyboards/keycapsss/plaid_pad/readme.md
index 76b4fa8e8e9e..e8a8044a2a28 100644
--- a/keyboards/keycapsss/plaid_pad/readme.md
+++ b/keyboards/keycapsss/plaid_pad/readme.md
@@ -2,24 +2,66 @@
-A 4x4 numpad with only through hole components.
-It's a great companion to the Plaid keyboard by [hsgw](https://github.com/hsgw/) and heavily inspired by it.
+A 4x4 numpad/macro pad with only through hole components. It supports up to 4 rotary encoder. The positions for the encoder are interchangeable with keyboard switches.
+
+Below you can see the possible positions for the 4 rotary encoder (Rev1 only 2).
+*If you place a encoder in the top left corner (E1), you can't use another encoder in the lower right corner.*
+```
+Rev1.1 Rev1
+,-----------------------, ,-----------------------,
+| E1 | E2 | E3 | E4 | | E1 | | | E2 |
+|-----+-----+-----+-----| |-----+-----+-----+-----|
+| | | | E3 | | | | | |
+|-----+-----+-----+-----| |-----+-----+-----+-----|
+| | | | E2 | | | | | |
+|-----+-----+-----+-----| |-----+-----+-----+-----|
+| | | | E1 | | | | | |
+`-----------------------' `-----------------------'
+```
+
+- Encoder E1 performs a tap on `KC_F17` and `KC_F18`.
+- Encoder E2 performs a tap on `KC_F19` and `KC_F20`.
+- Encoder E3 performs a tap on `KC_F21` and `KC_F22`.
+- Encoder E4 performs a tap on `KC_F23` and `KC_F24`.
+*The F17-F24 keys are intended to be customized via [Karabiner-Elements (OSX)](https://github.com/pqrs-org/Karabiner-Elements), or [AutoHotkey](https://github.com/Lexikos/AutoHotkey_L) (WIN)*
+
+It's a great companion to the Plaid keyboard by [hsgw](https://github.com/hsgw/) and heavily inspired by it.
* Keyboard Maintainer: BenRoe [GitHub](https://github.com/BenRoe) / [Twitter](https://twitter.com/keycapsss)
* Hardware Supported: ATmega328P with VUSB ([see Bootloader section](#Bootloader))
* Hardware Availability: [Keycapsss.com](https://keycapsss.com)
-Make example for this keyboard (after setting up your build environment):
+## QMK Firmware
+_Bootloader and Firmware ([default keymap](https://github.com/qmk/qmk_firmware/tree/master/keyboards/keycapsss/plaid_pad)) are already on the ATmega328P chip._
+
+Make example for this keyboard (after [setting up your build environment](https://docs.qmk.fm/#/getting_started_build_tools)):
make keycapsss/plaid_pad:default
+ // or
+ qmk compile -kb keycapsss/plaid_pad -km default
Flashing example for this keyboard:
make keycapsss/plaid_pad:default:flash
+ // or
+ qmk flash -kb keycapsss/plaid_pad -km default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
-- same usbasploader as Plaid ([Instruction](https://github.com/hsgw/plaid/blob/master/doc/en/bootloader.md), [Repository](https://github.com/hsgw/USBaspLoader/tree/plaid))
+- same `usbasploader` as used for Plaid ([Instructions](https://github.com/hsgw/plaid/blob/master/doc/en/bootloader.md), [Repository](https://github.com/hsgw/USBaspLoader/tree/plaid))
----
+### Enter bootloader mode (to flash a new firmware)
+- Plug in the USB cable
+- Push and hold RESET switch
+- Push and hold BOOT switch
+- Release RESET switch
+- Release BOOT switch
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+or an alternative method:
+- Unplug the USB cable
+- Hold down the BOOT switch
+- Plug in the USB cable
+- Release the BOOT switch
+
+If you succeed to enter bootloader mode, you can see usbasp in device manager, or `*** USBAsp device connected` in [QMK Toolbox](https://github.com/qmk/qmk_toolbox).
diff --git a/keyboards/keycapsss/plaid_pad/rev1/config.h b/keyboards/keycapsss/plaid_pad/rev1/config.h
new file mode 100644
index 000000000000..eeb56503af52
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/rev1/config.h
@@ -0,0 +1,25 @@
+/* Copyright 2020 Ben Roesner (keycapsss.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define PRODUCT Plaid-Pad Rev1
+#define DEVICE_VER 0x0001
+
+#define UNUSED_PINS { B3, B4, B5, D4}
+
+#define ENCODERS_PAD_A { D1, B2 }
+#define ENCODERS_PAD_B { D0, B1 }
diff --git a/keyboards/keycapsss/plaid_pad/rev1/rev1.c b/keyboards/keycapsss/plaid_pad/rev1/rev1.c
new file mode 100644
index 000000000000..7d21ede28681
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/rev1/rev1.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 Ben Roesner (keycapsss.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "rev1.h"
diff --git a/keyboards/keycapsss/plaid_pad/rev1/rev1.h b/keyboards/keycapsss/plaid_pad/rev1/rev1.h
new file mode 100644
index 000000000000..4a42622ba526
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/rev1/rev1.h
@@ -0,0 +1,19 @@
+/* Copyright 2020 Ben Roesner (keycapsss.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include "plaid_pad.h"
diff --git a/keyboards/keycapsss/plaid_pad/rev1/rules.mk b/keyboards/keycapsss/plaid_pad/rev1/rules.mk
new file mode 100644
index 000000000000..5af1ba85367f
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/rev1/rules.mk
@@ -0,0 +1 @@
+ENCODER_ENABLE = yes
diff --git a/keyboards/keycapsss/plaid_pad/rev2/config.h b/keyboards/keycapsss/plaid_pad/rev2/config.h
new file mode 100644
index 000000000000..1f1277711931
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/rev2/config.h
@@ -0,0 +1,25 @@
+/* Copyright 2020 Ben Roesner (keycapsss.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define PRODUCT Plaid-Pad Rev2
+#define DEVICE_VER 0x0002
+
+#define UNUSED_PINS { }
+
+#define ENCODERS_PAD_A { D1, B2, B4, D4 }
+#define ENCODERS_PAD_B { D0, B1, B3, B5 }
diff --git a/keyboards/keycapsss/plaid_pad/rev2/rev2.c b/keyboards/keycapsss/plaid_pad/rev2/rev2.c
new file mode 100644
index 000000000000..7a830676bef5
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/rev2/rev2.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 Ben Roesner (keycapsss.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "rev2.h"
diff --git a/keyboards/keycapsss/plaid_pad/rev2/rev2.h b/keyboards/keycapsss/plaid_pad/rev2/rev2.h
new file mode 100644
index 000000000000..4a42622ba526
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/rev2/rev2.h
@@ -0,0 +1,19 @@
+/* Copyright 2020 Ben Roesner (keycapsss.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include "plaid_pad.h"
diff --git a/keyboards/keycapsss/plaid_pad/rev2/rules.mk b/keyboards/keycapsss/plaid_pad/rev2/rules.mk
new file mode 100644
index 000000000000..5af1ba85367f
--- /dev/null
+++ b/keyboards/keycapsss/plaid_pad/rev2/rules.mk
@@ -0,0 +1 @@
+ENCODER_ENABLE = yes
diff --git a/keyboards/keycapsss/plaid_pad/rules.mk b/keyboards/keycapsss/plaid_pad/rules.mk
index 08ad3555d6a0..d4485d939f47 100644
--- a/keyboards/keycapsss/plaid_pad/rules.mk
+++ b/keyboards/keycapsss/plaid_pad/rules.mk
@@ -2,19 +2,12 @@
MCU = atmega328p
# Bootloader selection
-# Teensy halfkay
-# Pro Micro caterina
-# Atmel DFU atmel-dfu
-# LUFA DFU lufa-dfu
-# QMK DFU qmk-dfu
-# ATmega32A bootloadHID
-# ATmega328P USBasp
BOOTLOADER = USBasp
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
@@ -23,15 +16,11 @@ COMMAND_ENABLE = no # Commands for debug and configuration
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-MIDI_ENABLE = no # MIDI support
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = no # Audio output on port C6
-FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
-HD44780_ENABLE = no # Enable support for HD44780 based LCDs
-ENCODER_ENABLE = yes
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
LAYOUTS = ortho_4x4
-LAYOUTS_HAS_RGB = no
+
+DEFAULT_FOLDER = keycapsss/plaid_pad/rev1
From 7141de19d98be604587f269a2dc9a85b0a211e6f Mon Sep 17 00:00:00 2001
From: TheLibra23 <32517360+TheLibra23@users.noreply.github.com>
Date: Sat, 12 Sep 2020 15:55:52 +0800
Subject: [PATCH 006/178] added VIA keymap for Keebio Viterbi (#10168)
* added via keymap
* replaced PRODUCT_ID 0x1157 with PRODUCT_ID 0x2157
replaced product id to distinguish rev2 from rev1.
bakingpy gave me permission through discord chat.
* Update keyboards/keebio/viterbi/keymaps/via/keymap.c
* Update keyboards/keebio/viterbi/keymaps/via/rules.mk
* made a simplier keymap.c for via folder
Based from the default keymap, removed unnecessary codes.
---
keyboards/keebio/viterbi/keymaps/via/keymap.c | 38 +++++++++++++++++++
keyboards/keebio/viterbi/keymaps/via/rules.mk | 2 +
2 files changed, 40 insertions(+)
create mode 100644 keyboards/keebio/viterbi/keymaps/via/keymap.c
create mode 100644 keyboards/keebio/viterbi/keymaps/via/rules.mk
diff --git a/keyboards/keebio/viterbi/keymaps/via/keymap.c b/keyboards/keebio/viterbi/keymaps/via/keymap.c
new file mode 100644
index 000000000000..6360202ee016
--- /dev/null
+++ b/keyboards/keebio/viterbi/keymaps/via/keymap.c
@@ -0,0 +1,38 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+ LAYOUT_ortho_5x14(
+ KC_INS, KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC, KC_DEL ,
+ KC_MINS, 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_EQL, KC_ESC , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT ,
+ KC_PGUP, KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_HOME, KC_END ,
+ KC_PGDN, MO(3) , KC_LCTL, KC_LALT, KC_LGUI, MO(1) , KC_SPC , KC_SPC , MO(2) , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_BSLS
+ ),
+
+ LAYOUT_ortho_5x14(
+ _______, KC_TILD, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 ,
+ KC_UNDS, _______, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR,
+ KC_PLUS, _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______,
+ _______, _______, KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, KC_MUTE
+ ),
+
+ LAYOUT_ortho_5x14(
+ _______, KC_TILD, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 ,
+ KC_UNDS, _______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_LCBR, KC_RCBR,
+ KC_PLUS, _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_MINS, KC_EQL , KC_LBRC, KC_RBRC, _______, _______,
+ _______, _______, KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_NUHS, KC_NUBS, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, KC_MUTE
+ ),
+
+ LAYOUT_ortho_5x14(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
+ _______, _______, RESET , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, KC_DEL, _______,
+ _______, _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/keebio/viterbi/keymaps/via/rules.mk b/keyboards/keebio/viterbi/keymaps/via/rules.mk
new file mode 100644
index 000000000000..36b7ba9cbc98
--- /dev/null
+++ b/keyboards/keebio/viterbi/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
From e4d46a1c00f60fa97d779f0c468c502416d29f02 Mon Sep 17 00:00:00 2001
From: binepad <69730862+binepad@users.noreply.github.com>
Date: Sat, 12 Sep 2020 15:41:30 +0530
Subject: [PATCH 007/178] [Keyboard] add binepad/bn003 (#10276)
* ADD BINEPAD/BN003
* Update keyboards/binepad/bn003/config.h
* Update keyboards/binepad/bn003/config.h
* Update keyboards/binepad/bn003/rules.mk
* Update keyboards/binepad/bn003/keymaps/via/keymap.c
* Update readme.md
added macro pad info
* Update keyboards/binepad/bn003/readme.md
* Update keyboards/binepad/bn003/bn003.c
* Update keyboards/binepad/bn003/config.h
* Update keyboards/binepad/bn003/config.h
* Update keyboards/binepad/bn003/info.json
* Update keyboards/binepad/bn003/rules.mk
* Update keyboards/binepad/bn003/rules.mk
* Update keyboards/binepad/bn003/rules.mk
* Update bn003.c
* Update keyboards/binepad/bn003/readme.md
* Update keyboards/binepad/bn003/rules.mk
* Update keyboards/binepad/bn003/config.h
* Update keyboards/binepad/bn003/keymaps/via/rules.mk
* Update keyboards/binepad/bn003/rules.mk
---
keyboards/binepad/bn003/bn003.c | 16 ++++
keyboards/binepad/bn003/bn003.h | 23 +++++
keyboards/binepad/bn003/config.h | 89 +++++++++++++++++++
keyboards/binepad/bn003/info.json | 28 ++++++
.../binepad/bn003/keymaps/default/keymap.c | 19 ++++
.../binepad/bn003/keymaps/default/readme.md | 1 +
keyboards/binepad/bn003/keymaps/via/keymap.c | 24 +++++
keyboards/binepad/bn003/keymaps/via/rules.mk | 1 +
keyboards/binepad/bn003/readme.md | 15 ++++
keyboards/binepad/bn003/rules.mk | 22 +++++
10 files changed, 238 insertions(+)
create mode 100644 keyboards/binepad/bn003/bn003.c
create mode 100644 keyboards/binepad/bn003/bn003.h
create mode 100644 keyboards/binepad/bn003/config.h
create mode 100644 keyboards/binepad/bn003/info.json
create mode 100644 keyboards/binepad/bn003/keymaps/default/keymap.c
create mode 100644 keyboards/binepad/bn003/keymaps/default/readme.md
create mode 100644 keyboards/binepad/bn003/keymaps/via/keymap.c
create mode 100644 keyboards/binepad/bn003/keymaps/via/rules.mk
create mode 100644 keyboards/binepad/bn003/readme.md
create mode 100644 keyboards/binepad/bn003/rules.mk
diff --git a/keyboards/binepad/bn003/bn003.c b/keyboards/binepad/bn003/bn003.c
new file mode 100644
index 000000000000..80a6d384c09c
--- /dev/null
+++ b/keyboards/binepad/bn003/bn003.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 BINEPAD
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "bn003.h"
diff --git a/keyboards/binepad/bn003/bn003.h b/keyboards/binepad/bn003/bn003.h
new file mode 100644
index 000000000000..15311b534813
--- /dev/null
+++ b/keyboards/binepad/bn003/bn003.h
@@ -0,0 +1,23 @@
+/* Copyright 2020 BINEPAD
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02 \
+) { \
+ { K00, K01, K02 } \
+}
+
diff --git a/keyboards/binepad/bn003/config.h b/keyboards/binepad/bn003/config.h
new file mode 100644
index 000000000000..de5fb533a098
--- /dev/null
+++ b/keyboards/binepad/bn003/config.h
@@ -0,0 +1,89 @@
+/* Copyright 2020 BINEPAD
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4249 // Binepad
+#define PRODUCT_ID 0x4287
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Binepad
+#define PRODUCT BN003
+
+/* Key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 3
+
+#define MATRIX_ROW_PINS { C6 }
+#define MATRIX_COL_PINS { B4, B5, B6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
diff --git a/keyboards/binepad/bn003/info.json b/keyboards/binepad/bn003/info.json
new file mode 100644
index 000000000000..fdf7e3fbb969
--- /dev/null
+++ b/keyboards/binepad/bn003/info.json
@@ -0,0 +1,28 @@
+{
+ "keyboard_name": "BN003",
+ "url": "https://binepad.com",
+ "maintainer": "binepad",
+ "width": 3,
+ "height": 1,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {
+ "label": "K0",
+ "x": 0,
+ "y": 0
+ },
+ {
+ "label": "K1",
+ "x": 1,
+ "y": 0
+ },
+ {
+ "label": "K2",
+ "x": 2,
+ "y": 0
+ }
+ ]
+ }
+ }
+}
diff --git a/keyboards/binepad/bn003/keymaps/default/keymap.c b/keyboards/binepad/bn003/keymaps/default/keymap.c
new file mode 100644
index 000000000000..8e73f05bb447
--- /dev/null
+++ b/keyboards/binepad/bn003/keymaps/default/keymap.c
@@ -0,0 +1,19 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_0,
+ KC_1,
+ KC_2
+ ),
+ [1] = LAYOUT(
+ KC_NO,
+ KC_NO,
+ KC_NO
+ ),
+ [2] = LAYOUT(
+ KC_NO,
+ KC_NO,
+ KC_NO
+ )
+};
diff --git a/keyboards/binepad/bn003/keymaps/default/readme.md b/keyboards/binepad/bn003/keymaps/default/readme.md
new file mode 100644
index 000000000000..be0a7d956eaa
--- /dev/null
+++ b/keyboards/binepad/bn003/keymaps/default/readme.md
@@ -0,0 +1 @@
+# bn003 - Default layout
diff --git a/keyboards/binepad/bn003/keymaps/via/keymap.c b/keyboards/binepad/bn003/keymaps/via/keymap.c
new file mode 100644
index 000000000000..e0ffb3f80b19
--- /dev/null
+++ b/keyboards/binepad/bn003/keymaps/via/keymap.c
@@ -0,0 +1,24 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_0,
+ KC_1,
+ KC_2
+ ),
+ [1] = LAYOUT(
+ KC_NO,
+ KC_NO,
+ KC_NO
+ ),
+ [2] = LAYOUT(
+ KC_NO,
+ KC_NO,
+ KC_NO
+ ),
+ [3] = LAYOUT(
+ KC_NO,
+ KC_NO,
+ KC_NO
+ )
+};
diff --git a/keyboards/binepad/bn003/keymaps/via/rules.mk b/keyboards/binepad/bn003/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/binepad/bn003/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/binepad/bn003/readme.md b/keyboards/binepad/bn003/readme.md
new file mode 100644
index 000000000000..daf406dbefc5
--- /dev/null
+++ b/keyboards/binepad/bn003/readme.md
@@ -0,0 +1,15 @@
+# BINEPAD BN003
+
+![BINEPAD BN003](https://imgur.com/q8JPcNEl.jpg)
+
+A 3% macropad.
+
+* Keyboard Maintainer: [BINEPAD]
+* Hardware Supported: BN003 PCB (ATmega32U4)
+* Hardware Availability: [Interest Check](https://www.binepad.com/bn003)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make binepad/bn003:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/binepad/bn003/rules.mk b/keyboards/binepad/bn003/rules.mk
new file mode 100644
index 000000000000..7b15ae06513f
--- /dev/null
+++ b/keyboards/binepad/bn003/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
From 9e99a9b98c2e57ce5a4ada41446e8555bc05b1ad Mon Sep 17 00:00:00 2001
From: Darren Meehan
Date: Sat, 12 Sep 2020 20:40:31 +0100
Subject: [PATCH 008/178] Remove use of sudo in lily58 make docs (#10301)
---
keyboards/lily58/readme.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/keyboards/lily58/readme.md b/keyboards/lily58/readme.md
index cbf0c1eeb02a..1aedab6e1796 100644
--- a/keyboards/lily58/readme.md
+++ b/keyboards/lily58/readme.md
@@ -10,6 +10,6 @@ Hardware Availability: [PCB & Case Data](https://github.com/kata0510/Lily58)
Make example for this keyboard (after setting up your build environment):
- sudo make lily58:default
+ make lily58:default
-See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
\ No newline at end of file
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
From 2b9f200a2a0f0430e80df75b8a4d5757e6ca0374 Mon Sep 17 00:00:00 2001
From: Frans de Jonge
Date: Sun, 13 Sep 2020 03:17:47 +0200
Subject: [PATCH 009/178] [fix] dfu-programmer <0.7 doesn't support --force
flag (#10292)
Fixes .
---
tmk_core/avr.mk | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk
index 3cb34dc66503..336a83e9d314 100644
--- a/tmk_core/avr.mk
+++ b/tmk_core/avr.mk
@@ -122,13 +122,14 @@ define EXEC_DFU
if [ "$(1)" ]; then \
$(DFU_PROGRAMMER) $(MCU) flash --force --eeprom $(QUANTUM_PATH)/split_common/$(1);\
fi; \
+ $(DFU_PROGRAMMER) $(MCU) flash --force $(BUILD_DIR)/$(TARGET).hex;\
else \
$(DFU_PROGRAMMER) $(MCU) erase; \
if [ "$(1)" ]; then \
$(DFU_PROGRAMMER) $(MCU) flash-eeprom $(QUANTUM_PATH)/split_common/$(1);\
fi; \
+ $(DFU_PROGRAMMER) $(MCU) flash $(BUILD_DIR)/$(TARGET).hex;\
fi; \
- $(DFU_PROGRAMMER) $(MCU) flash --force $(BUILD_DIR)/$(TARGET).hex;\
$(DFU_PROGRAMMER) $(MCU) reset
endef
From 6499eb6a3c512ded96443649d66274ce1064df0f Mon Sep 17 00:00:00 2001
From: undermark5 <31358071+undermark5@users.noreply.github.com>
Date: Sun, 13 Sep 2020 08:28:30 -0500
Subject: [PATCH 010/178] Fixed typo in vscode docs (#10303)
.vscode/c_cpp_properies.json -> .vscode/c_cpp_properties.json
---
docs/other_vscode.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/other_vscode.md b/docs/other_vscode.md
index d98b96bdf189..d132afaab6e7 100644
--- a/docs/other_vscode.md
+++ b/docs/other_vscode.md
@@ -48,7 +48,7 @@ This part is super simple. However, there is some configuration that we need to
### Configuring VS Code
-First, we need to set up IntelliSense. This isn't strictly required, but it will make your life a LOT easier. To do this, we need to create the `.vscode/c_cpp_properies.json` file in the QMK Firmware folder, You can do this all manually, but I've done most of the work already.
+First, we need to set up IntelliSense. This isn't strictly required, but it will make your life a LOT easier. To do this, we need to create the `.vscode/c_cpp_properties.json` file in the QMK Firmware folder, You can do this all manually, but I've done most of the work already.
Grab [this file](https://gist.github.com/drashna/48e2c49ce877be592a1650f91f8473e8) and save it. You may need to edit this file, if you didn't install MSYS2 to the default location, or are using WSL/LxSS.
From 02551ae4991d818adb824fe39a82437281ee5306 Mon Sep 17 00:00:00 2001
From: LSChyi
Date: Mon, 14 Sep 2020 18:33:43 +0800
Subject: [PATCH 011/178] [Keyboard] add Phoenix keyboard (#10256)
* setup keyboard
* fit v1 board setting
* remove unused def and add ergodox_pretty
* add user hooks
* add ergodox_pretty to info
* apply suggestions
* use default split usb timeout
---
keyboards/phoenix/chconf.h | 714 +++++++++++++++++++++
keyboards/phoenix/config.h | 50 ++
keyboards/phoenix/halconf.h | 525 +++++++++++++++
keyboards/phoenix/info.json | 58 ++
keyboards/phoenix/keymaps/default/keymap.c | 129 ++++
keyboards/phoenix/mcuconf.h | 253 ++++++++
keyboards/phoenix/phoenix.c | 85 +++
keyboards/phoenix/phoenix.h | 94 +++
keyboards/phoenix/readme.md | 15 +
keyboards/phoenix/rules.mk | 48 ++
10 files changed, 1971 insertions(+)
create mode 100644 keyboards/phoenix/chconf.h
create mode 100644 keyboards/phoenix/config.h
create mode 100644 keyboards/phoenix/halconf.h
create mode 100644 keyboards/phoenix/info.json
create mode 100644 keyboards/phoenix/keymaps/default/keymap.c
create mode 100644 keyboards/phoenix/mcuconf.h
create mode 100644 keyboards/phoenix/phoenix.c
create mode 100644 keyboards/phoenix/phoenix.h
create mode 100644 keyboards/phoenix/readme.md
create mode 100644 keyboards/phoenix/rules.mk
diff --git a/keyboards/phoenix/chconf.h b/keyboards/phoenix/chconf.h
new file mode 100644
index 000000000000..7dc4f84a8a00
--- /dev/null
+++ b/keyboards/phoenix/chconf.h
@@ -0,0 +1,714 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file rt/templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+#define _CHIBIOS_RT_CONF_VER_6_0_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#if !defined(CH_CFG_ST_RESOLUTION)
+#define CH_CFG_ST_RESOLUTION 32
+#endif
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#if !defined(CH_CFG_ST_FREQUENCY)
+#define CH_CFG_ST_FREQUENCY 10000
+#endif
+
+/**
+ * @brief Time intervals data size.
+ * @note Allowed values are 16, 32 or 64 bits.
+ */
+#if !defined(CH_CFG_INTERVALS_SIZE)
+#define CH_CFG_INTERVALS_SIZE 32
+#endif
+
+/**
+ * @brief Time types data size.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#if !defined(CH_CFG_TIME_TYPES_SIZE)
+#define CH_CFG_TIME_TYPES_SIZE 32
+#endif
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#if !defined(CH_CFG_ST_TIMEDELTA)
+#define CH_CFG_ST_TIMEDELTA 2
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#if !defined(CH_CFG_TIME_QUANTUM)
+#define CH_CFG_TIME_QUANTUM 0
+#endif
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#if !defined(CH_CFG_MEMCORE_SIZE)
+#define CH_CFG_MEMCORE_SIZE 0
+#endif
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#if !defined(CH_CFG_NO_IDLE_THREAD)
+#define CH_CFG_NO_IDLE_THREAD FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_OPTIMIZE_SPEED)
+#define CH_CFG_OPTIMIZE_SPEED TRUE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_TM)
+#define CH_CFG_USE_TM TRUE
+#endif
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_REGISTRY)
+#define CH_CFG_USE_REGISTRY TRUE
+#endif
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_WAITEXIT)
+#define CH_CFG_USE_WAITEXIT TRUE
+#endif
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_SEMAPHORES)
+#define CH_CFG_USE_SEMAPHORES TRUE
+#endif
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY)
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+#endif
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MUTEXES)
+#define CH_CFG_USE_MUTEXES TRUE
+#endif
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#if !defined(CH_CFG_USE_MUTEXES_RECURSIVE)
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+#endif
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#if !defined(CH_CFG_USE_CONDVARS)
+#define CH_CFG_USE_CONDVARS TRUE
+#endif
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#if !defined(CH_CFG_USE_CONDVARS_TIMEOUT)
+#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
+#endif
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_EVENTS)
+#define CH_CFG_USE_EVENTS TRUE
+#endif
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#if !defined(CH_CFG_USE_EVENTS_TIMEOUT)
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+#endif
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MESSAGES)
+#define CH_CFG_USE_MESSAGES TRUE
+#endif
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#if !defined(CH_CFG_USE_MESSAGES_PRIORITY)
+#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
+#endif
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#if !defined(CH_CFG_USE_MAILBOXES)
+#define CH_CFG_USE_MAILBOXES TRUE
+#endif
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MEMCORE)
+#define CH_CFG_USE_MEMCORE TRUE
+#endif
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#if !defined(CH_CFG_USE_HEAP)
+#define CH_CFG_USE_HEAP TRUE
+#endif
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MEMPOOLS)
+#define CH_CFG_USE_MEMPOOLS TRUE
+#endif
+
+/**
+ * @brief Objects FIFOs APIs.
+ * @details If enabled then the objects FIFOs APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_OBJ_FIFOS)
+#define CH_CFG_USE_OBJ_FIFOS TRUE
+#endif
+
+/**
+ * @brief Pipes APIs.
+ * @details If enabled then the pipes APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_PIPES)
+#define CH_CFG_USE_PIPES TRUE
+#endif
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#if !defined(CH_CFG_USE_DYNAMIC)
+#define CH_CFG_USE_DYNAMIC TRUE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Objects factory options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Objects Factory APIs.
+ * @details If enabled then the objects factory APIs are included in the
+ * kernel.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_CFG_USE_FACTORY)
+#define CH_CFG_USE_FACTORY TRUE
+#endif
+
+/**
+ * @brief Maximum length for object names.
+ * @details If the specified length is zero then the name is stored by
+ * pointer but this could have unintended side effects.
+ */
+#if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH)
+#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8
+#endif
+
+/**
+ * @brief Enables the registry of generic objects.
+ */
+#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY)
+#define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE
+#endif
+
+/**
+ * @brief Enables factory for generic buffers.
+ */
+#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS)
+#define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE
+#endif
+
+/**
+ * @brief Enables factory for semaphores.
+ */
+#if !defined(CH_CFG_FACTORY_SEMAPHORES)
+#define CH_CFG_FACTORY_SEMAPHORES TRUE
+#endif
+
+/**
+ * @brief Enables factory for mailboxes.
+ */
+#if !defined(CH_CFG_FACTORY_MAILBOXES)
+#define CH_CFG_FACTORY_MAILBOXES TRUE
+#endif
+
+/**
+ * @brief Enables factory for objects FIFOs.
+ */
+#if !defined(CH_CFG_FACTORY_OBJ_FIFOS)
+#define CH_CFG_FACTORY_OBJ_FIFOS TRUE
+#endif
+
+/**
+ * @brief Enables factory for Pipes.
+ */
+#if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__)
+#define CH_CFG_FACTORY_PIPES TRUE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_STATISTICS)
+#define CH_DBG_STATISTICS FALSE
+#endif
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_SYSTEM_STATE_CHECK)
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+#endif
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_ENABLE_CHECKS)
+#define CH_DBG_ENABLE_CHECKS FALSE
+#endif
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_ENABLE_ASSERTS)
+#define CH_DBG_ENABLE_ASSERTS FALSE
+#endif
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#if !defined(CH_DBG_TRACE_MASK)
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+#endif
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#if !defined(CH_DBG_TRACE_BUFFER_SIZE)
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+#endif
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#if !defined(CH_DBG_ENABLE_STACK_CHECK)
+#define CH_DBG_ENABLE_STACK_CHECK FALSE
+#endif
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_FILL_THREADS)
+#define CH_DBG_FILL_THREADS FALSE
+#endif
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#if !defined(CH_DBG_THREADS_PROFILING)
+#define CH_DBG_THREADS_PROFILING FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System structure extension.
+ * @details User fields added to the end of the @p ch_system_t structure.
+ */
+#define CH_CFG_SYSTEM_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief System initialization hook.
+ * @details User initialization code added to the @p chSysInit() function
+ * just before interrupts are enabled globally.
+ */
+#define CH_CFG_SYSTEM_INIT_HOOK() { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p _thread_init() function.
+ *
+ * @note It is invoked from within @p _thread_init() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/phoenix/config.h b/keyboards/phoenix/config.h
new file mode 100644
index 000000000000..81fc3677ffcc
--- /dev/null
+++ b/keyboards/phoenix/config.h
@@ -0,0 +1,50 @@
+
+/* Copyright 2019
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x456B
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER ErgoKB
+#define PRODUCT Phoenix
+
+/* key matrix size */
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 7
+
+#define MOUSEKEY_INTERVAL 10
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_DELAY 0
+
+#define DIODE_DIRECTION ROW2COL
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+#define MATRIX_ROW_PINS { B1, B0, A7, A6, A5, B7 }
+#define MATRIX_COL_PINS { B10, B12, B13, B14, B15, A8, A10 }
+
+#define HAL_USE_SERIAL TRUE
+#define SPLIT_HAND_PIN B9
+#define SOFT_SERIAL_PIN A9
+#define SERIAL_USART_DRIVER SD1
+#define SERIAL_USART_TX_PAL_MODE 7
diff --git a/keyboards/phoenix/halconf.h b/keyboards/phoenix/halconf.h
new file mode 100644
index 000000000000..a8db392aaa6c
--- /dev/null
+++ b/keyboards/phoenix/halconf.h
@@ -0,0 +1,525 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef HALCONF_H
+#define HALCONF_H
+
+#define _CHIBIOS_HAL_CONF_
+#define _CHIBIOS_HAL_CONF_VER_7_0_
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the cryptographic subsystem.
+ */
+#if !defined(HAL_USE_CRY) || defined(__DOXYGEN__)
+#define HAL_USE_CRY FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT FALSE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C FALSE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM FALSE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB FALSE
+#endif
+
+/**
+ * @brief Enables the SIO subsystem.
+ */
+#if !defined(HAL_USE_SIO) || defined(__DOXYGEN__)
+#define HAL_USE_SIO FALSE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the TRNG subsystem.
+ */
+#if !defined(HAL_USE_TRNG) || defined(__DOXYGEN__)
+#define HAL_USE_TRNG FALSE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/**
+ * @brief Enables the WSPI subsystem.
+ */
+#if !defined(HAL_USE_WSPI) || defined(__DOXYGEN__)
+#define HAL_USE_WSPI FALSE
+#endif
+
+/*===========================================================================*/
+/* PAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(PAL_USE_CALLBACKS) || defined(__DOXYGEN__)
+#define PAL_USE_CALLBACKS FALSE
+#endif
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(PAL_USE_WAIT) || defined(__DOXYGEN__)
+#define PAL_USE_WAIT FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/**
+ * @brief Enforces the driver to use direct callbacks rather than OSAL events.
+ */
+#if !defined(CAN_ENFORCE_USE_CALLBACKS) || defined(__DOXYGEN__)
+#define CAN_ENFORCE_USE_CALLBACKS FALSE
+#endif
+
+/*===========================================================================*/
+/* CRY driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the SW fall-back of the cryptographic driver.
+ * @details When enabled, this option, activates a fall-back software
+ * implementation for algorithms not supported by the underlying
+ * hardware.
+ * @note Fall-back implementations may not be present for all algorithms.
+ */
+#if !defined(HAL_CRY_USE_FALLBACK) || defined(__DOXYGEN__)
+#define HAL_CRY_USE_FALLBACK FALSE
+#endif
+
+/**
+ * @brief Makes the driver forcibly use the fall-back implementations.
+ */
+#if !defined(HAL_CRY_ENFORCE_FALLBACK) || defined(__DOXYGEN__)
+#define HAL_CRY_ENFORCE_FALLBACK FALSE
+#endif
+
+/*===========================================================================*/
+/* DAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(DAC_USE_WAIT) || defined(__DOXYGEN__)
+#define DAC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p dacAcquireBus() and @p dacReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(DAC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define DAC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the zero-copy API.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY FALSE
+#endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/**
+ * @brief OCR initialization constant for V20 cards.
+ */
+#if !defined(SDC_INIT_OCR_V20) || defined(__DOXYGEN__)
+#define SDC_INIT_OCR_V20 0x50FF8000U
+#endif
+
+/**
+ * @brief OCR initialization constant for non-V20 cards.
+ */
+#if !defined(SDC_INIT_OCR) || defined(__DOXYGEN__)
+#define SDC_INIT_OCR 0x80100000U
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 16 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 256 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 256
+#endif
+
+/**
+ * @brief Serial over USB number of buffers.
+ * @note The default is 2 buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_NUMBER 2
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables circular transfers APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_CIRCULAR) || defined(__DOXYGEN__)
+#define SPI_USE_CIRCULAR FALSE
+#endif
+
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/**
+ * @brief Handling method for SPI CS line.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_SELECT_MODE) || defined(__DOXYGEN__)
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+#endif
+
+/*===========================================================================*/
+/* UART driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
+#define UART_USE_WAIT FALSE
+#endif
+
+/**
+ * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define UART_USE_MUTUAL_EXCLUSION FALSE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+/*===========================================================================*/
+/* WSPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(WSPI_USE_WAIT) || defined(__DOXYGEN__)
+#define WSPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p wspiAcquireBus() and @p wspiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(WSPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define WSPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+#endif /* HALCONF_H */
+
+/** @} */
diff --git a/keyboards/phoenix/info.json b/keyboards/phoenix/info.json
new file mode 100644
index 000000000000..f1275b9de613
--- /dev/null
+++ b/keyboards/phoenix/info.json
@@ -0,0 +1,58 @@
+{
+ "keyboard_name": "Phoenix",
+ "url": "ergokb.tw",
+ "maintainer": "ErgoKB via lschyi",
+ "manufacturer": "ErgoKB",
+ "width": 17,
+ "height": 8,
+
+ "layouts": {
+ "LAYOUT_ergodox": {
+ "layout": [
+ {"x":0, "y":0.375, "w":1.5}, {"x":1.5, "y":0.375}, {"x":2.5, "y":0.125}, {"x":3.5, "y":0}, {"x":4.5, "y":0.125}, {"x":5.5, "y":0.25}, {"x":6.5, "y":0.25},
+ {"x":0, "y":1.375, "w":1.5}, {"x":1.5, "y":1.375}, {"x":2.5, "y":1.125}, {"x":3.5, "y":1}, {"x":4.5, "y":1.125}, {"x":5.5, "y":1.25}, {"x":6.5, "y":1.25, "h":1.5},
+ {"x":0, "y":2.375, "w":1.5}, {"x":1.5, "y":2.375}, {"x":2.5, "y":2.125}, {"x":3.5, "y":2}, {"x":4.5, "y":2.125}, {"x":5.5, "y":2.25},
+ {"x":0, "y":3.375, "w":1.5}, {"x":1.5, "y":3.375}, {"x":2.5, "y":3.125}, {"x":3.5, "y":3}, {"x":4.5, "y":3.125}, {"x":5.5, "y":3.25}, {"x":6.5, "y":2.75, "h":1.5},
+ {"x":0.5, "y":4.375}, {"x":1.5, "y":4.375}, {"x":2.5, "y":4.125}, {"x":3.5, "y":4}, {"x":4.5, "y":4.125},
+
+ {"x":6, "y":5}, {"x":7, "y":5},
+ {"x":7, "y":6},
+ {"x":5, "y":6, "h":2}, {"x":6, "y":6, "h":2}, {"x":7, "y":7},
+
+
+ {"x":9.5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.375, "w":1.5},
+ {"x":9.5, "y":1.25, "h":1.5}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.375, "w":1.5},
+ {"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.375, "w":1.5},
+ {"x":9.5, "y":2.75, "h":1.5}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.375, "w":1.5},
+ {"x":11.5, "y":4.125}, {"x":12.5, "y":4}, {"x":13.5, "y":4.125}, {"x":14.5, "y":4.375}, {"x":15.5, "y":4.375},
+
+
+ {"x":9, "y":5}, {"x":10, "y":5},
+ {"x":9, "y":6},
+ {"x":9, "y":7}, {"x":10, "y":6, "h":2}, {"x":11, "y":6, "h":2}
+ ]
+ },
+ "LAYOUT_ergodox_pretty": {
+ "layout": [
+ {"x":0, "y":0.375, "w":1.5}, {"x":1.5, "y":0.375}, {"x":2.5, "y":0.125}, {"x":3.5, "y":0}, {"x":4.5, "y":0.125}, {"x":5.5, "y":0.25}, {"x":6.5, "y":0.25},
+ {"x":9.5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.375, "w":1.5},
+
+ {"x":0, "y":1.375, "w":1.5}, {"x":1.5, "y":1.375}, {"x":2.5, "y":1.125}, {"x":3.5, "y":1}, {"x":4.5, "y":1.125}, {"x":5.5, "y":1.25}, {"x":6.5, "y":1.25, "h":1.5},
+ {"x":9.5, "y":1.25, "h":1.5}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.375, "w":1.5},
+
+ {"x":0, "y":2.375, "w":1.5}, {"x":1.5, "y":2.375}, {"x":2.5, "y":2.125}, {"x":3.5, "y":2}, {"x":4.5, "y":2.125}, {"x":5.5, "y":2.25},
+ {"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.375, "w":1.5},
+
+ {"x":0, "y":3.375, "w":1.5}, {"x":1.5, "y":3.375}, {"x":2.5, "y":3.125}, {"x":3.5, "y":3}, {"x":4.5, "y":3.125}, {"x":5.5, "y":3.25}, {"x":6.5, "y":2.75, "h":1.5},
+ {"x":9.5, "y":2.75, "h":1.5}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.375, "w":1.5},
+
+ {"x":0.5, "y":4.375}, {"x":1.5, "y":4.375}, {"x":2.5, "y":4.125}, {"x":3.5, "y":4}, {"x":4.5, "y":4.125},
+ {"x":11.5, "y":4.125}, {"x":12.5, "y":4}, {"x":13.5, "y":4.125}, {"x":14.5, "y":4.375}, {"x":15.5, "y":4.375},
+
+ {"x":6, "y":5}, {"x":7, "y":5}, {"x":9, "y":5}, {"x":10, "y":5},
+ {"x":7, "y":6}, {"x":9, "y":6},
+ {"x":5, "y":6, "h":2}, {"x":6, "y":6, "h":2}, {"x":7, "y":7}, {"x":9, "y":7}, {"x":10, "y":6, "h":2}, {"x":11, "y":6, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/phoenix/keymaps/default/keymap.c b/keyboards/phoenix/keymaps/default/keymap.c
new file mode 100644
index 000000000000..909e1dbb6057
--- /dev/null
+++ b/keyboards/phoenix/keymaps/default/keymap.c
@@ -0,0 +1,129 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ BASE, // default layer
+ ARROW, // arrows
+ MOUSE, // mouse keys
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | ~ | | EQL | 6 | 7 | 8 | 9 | 0 | DEL |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | TAB | Q | W | E | R | T | LCTL | | EQL | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | LCTL | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
+ * |--------+------+------+------+------+------| LSFT | | MIN |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | MUTE |TG(2) | LSFT | LCTL | LALT | | EQL | MIN | [ | ] | TG(1) |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,---------------.
+ * | VOLD | VOL_U| | F10 | F12 |
+ * ,------|------|------| |------+--------+------.
+ * | | | LCTL | | F11 | | |
+ * | Space| LGUI |------| |------| MO(1) |Enter |
+ * | | | LSFT | | ESC | | |
+ * `--------------------' `----------------------'
+ */
+[BASE] = LAYOUT_ergodox(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LCTL,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LSFT,
+ KC_MUTE, TG(2), KC_LSFT, KC_LCTL, KC_LALT,
+ KC_VOLD, KC_VOLU,
+ KC_LCTL,
+ KC_SPC, KC_LGUI, KC_LSFT,
+
+ KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_EQL, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_MINS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, TG(1),
+ KC_F10, KC_F12,
+ KC_F11,
+ KC_ESC, MO(1), KC_ENT),
+
+/* Keymap 1: Arrow layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | PgDn | PgUp | | [ | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | ~ | |------| |------| LEFT | DOWN | UP |RIGHT |Backsp| ] |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,---------------.
+ * | | | | | |
+ * ,------|------|------| |------+--------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `----------------------'
+ */
+[ARROW] = LAYOUT_ergodox(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TILD, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, KC_LBRC, KC_TRNS,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_BSPC, KC_RBRC,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS),
+
+/* Keymap 2: Mouse layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | WH_U | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | WH_L | WH_D | WH_R | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,---------------.
+ * | | | | | |
+ * ,------|------|------| |------+--------+------.
+ * | | | | | | | |
+ * | BTN1 | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `----------------------'
+ */
+[MOUSE] = LAYOUT_ergodox(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_BTN1, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/phoenix/mcuconf.h b/keyboards/phoenix/mcuconf.h
new file mode 100644
index 000000000000..7758cf476887
--- /dev/null
+++ b/keyboards/phoenix/mcuconf.h
@@ -0,0 +1,253 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef MCUCONF_H
+#define MCUCONF_H
+
+/*
+ * STM32F4xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#define STM32F4xx_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_HSI_ENABLED TRUE
+#define STM32_LSI_ENABLED TRUE
+#define STM32_HSE_ENABLED TRUE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_CLOCK48_REQUIRED TRUE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSE
+#define STM32_PLLM_VALUE 25
+#define STM32_PLLN_VALUE 336
+#define STM32_PLLP_VALUE 4
+#define STM32_PLLQ_VALUE 7
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE1 STM32_PPRE1_DIV4
+#define STM32_PPRE2 STM32_PPRE2_DIV2
+#define STM32_RTCSEL STM32_RTCSEL_LSI
+#define STM32_RTCPRE_VALUE 8
+#define STM32_MCO1SEL STM32_MCO1SEL_HSI
+#define STM32_MCO1PRE STM32_MCO1PRE_DIV1
+#define STM32_MCO2SEL STM32_MCO2SEL_SYSCLK
+#define STM32_MCO2PRE STM32_MCO2PRE_DIV5
+#define STM32_I2SSRC STM32_I2SSRC_CKIN
+#define STM32_PLLI2SN_VALUE 192
+#define STM32_PLLI2SR_VALUE 5
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+#define STM32_BKPRAM_ENABLE FALSE
+
+/*
+ * IRQ system settings.
+ */
+#define STM32_IRQ_EXTI0_PRIORITY 6
+#define STM32_IRQ_EXTI1_PRIORITY 6
+#define STM32_IRQ_EXTI2_PRIORITY 6
+#define STM32_IRQ_EXTI3_PRIORITY 6
+#define STM32_IRQ_EXTI4_PRIORITY 6
+#define STM32_IRQ_EXTI5_9_PRIORITY 6
+#define STM32_IRQ_EXTI10_15_PRIORITY 6
+#define STM32_IRQ_EXTI16_PRIORITY 6
+#define STM32_IRQ_EXTI17_PRIORITY 15
+#define STM32_IRQ_EXTI18_PRIORITY 6
+#define STM32_IRQ_EXTI19_PRIORITY 6
+#define STM32_IRQ_EXTI20_PRIORITY 6
+#define STM32_IRQ_EXTI21_PRIORITY 15
+#define STM32_IRQ_EXTI22_PRIORITY 15
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_ADCPRE ADC_CCR_ADCPRE_DIV4
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_STREAM STM32_DMA_STREAM_ID(2, 4)
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_IRQ_PRIORITY 6
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 6
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM4 FALSE
+#define STM32_GPT_USE_TIM5 FALSE
+#define STM32_GPT_USE_TIM9 FALSE
+#define STM32_GPT_USE_TIM11 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 7
+#define STM32_GPT_TIM2_IRQ_PRIORITY 7
+#define STM32_GPT_TIM3_IRQ_PRIORITY 7
+#define STM32_GPT_TIM4_IRQ_PRIORITY 7
+#define STM32_GPT_TIM5_IRQ_PRIORITY 7
+#define STM32_GPT_TIM9_IRQ_PRIORITY 7
+#define STM32_GPT_TIM11_IRQ_PRIORITY 7
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 FALSE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_USE_I2C3 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
+#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
+#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_I2C_I2C1_IRQ_PRIORITY 5
+#define STM32_I2C_I2C2_IRQ_PRIORITY 5
+#define STM32_I2C_I2C3_IRQ_PRIORITY 5
+#define STM32_I2C_I2C1_DMA_PRIORITY 3
+#define STM32_I2C_I2C2_DMA_PRIORITY 3
+#define STM32_I2C_I2C3_DMA_PRIORITY 3
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * I2S driver system settings.
+ */
+#define STM32_I2S_USE_SPI2 FALSE
+#define STM32_I2S_USE_SPI3 FALSE
+#define STM32_I2S_SPI2_IRQ_PRIORITY 10
+#define STM32_I2S_SPI3_IRQ_PRIORITY 10
+#define STM32_I2S_SPI2_DMA_PRIORITY 1
+#define STM32_I2S_SPI3_DMA_PRIORITY 1
+#define STM32_I2S_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
+#define STM32_I2S_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_I2S_SPI3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#define STM32_I2S_SPI3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_I2S_DMA_ERROR_HOOK(i2sp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_USE_TIM4 FALSE
+#define STM32_ICU_USE_TIM5 FALSE
+#define STM32_ICU_USE_TIM9 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 7
+#define STM32_ICU_TIM2_IRQ_PRIORITY 7
+#define STM32_ICU_TIM3_IRQ_PRIORITY 7
+#define STM32_ICU_TIM4_IRQ_PRIORITY 7
+#define STM32_ICU_TIM5_IRQ_PRIORITY 7
+#define STM32_ICU_TIM9_IRQ_PRIORITY 7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 FALSE
+#define STM32_PWM_USE_TIM4 FALSE
+#define STM32_PWM_USE_TIM5 FALSE
+#define STM32_PWM_USE_TIM9 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 7
+#define STM32_PWM_TIM2_IRQ_PRIORITY 7
+#define STM32_PWM_TIM3_IRQ_PRIORITY 7
+#define STM32_PWM_TIM4_IRQ_PRIORITY 7
+#define STM32_PWM_TIM5_IRQ_PRIORITY 7
+#define STM32_PWM_TIM9_IRQ_PRIORITY 7
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 TRUE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USE_USART6 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 12
+#define STM32_SERIAL_USART2_PRIORITY 12
+#define STM32_SERIAL_USART6_PRIORITY 12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 FALSE
+#define STM32_SPI_USE_SPI3 FALSE
+#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0)
+#define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3)
+#define STM32_SPI_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
+#define STM32_SPI_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_SPI_SPI3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#define STM32_SPI_SPI3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI3_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 10
+#define STM32_SPI_SPI2_IRQ_PRIORITY 10
+#define STM32_SPI_SPI3_IRQ_PRIORITY 10
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 8
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USE_USART6 FALSE
+#define STM32_UART_USART1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
+#define STM32_UART_USART1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
+#define STM32_UART_USART2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
+#define STM32_UART_USART2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#define STM32_UART_USART6_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 2)
+#define STM32_UART_USART6_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
+#define STM32_UART_USART1_IRQ_PRIORITY 12
+#define STM32_UART_USART2_IRQ_PRIORITY 12
+#define STM32_UART_USART6_IRQ_PRIORITY 12
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_USART6_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_OTG1 TRUE
+#define STM32_USB_OTG1_IRQ_PRIORITY 14
+#define STM32_USB_OTG1_RX_FIFO_SIZE 512
+#define STM32_USB_OTG_THREAD_PRIO NORMALPRIO+1
+#define STM32_USB_OTG_THREAD_STACK_SIZE 128
+#define STM32_USB_OTGFIFO_FILL_BASEPRI 0
+
+/*
+ * WDG driver system settings.
+ */
+#define STM32_WDG_USE_IWDG FALSE
+
+#endif /* MCUCONF_H */
diff --git a/keyboards/phoenix/phoenix.c b/keyboards/phoenix/phoenix.c
new file mode 100644
index 000000000000..e79b35b1591f
--- /dev/null
+++ b/keyboards/phoenix/phoenix.c
@@ -0,0 +1,85 @@
+#include "hal.h"
+#include "usb_main.h"
+#include "phoenix.h"
+
+void bootmagic_lite(void) {
+ matrix_scan();
+ wait_ms(5);
+ matrix_scan();
+
+ if ((matrix_get_row(0) & 1) || (matrix_get_row(6) & 1)) {
+ palSetPadMode(GPIOB, 8, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOB, 5, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOB, 6, PAL_MODE_OUTPUT_PUSHPULL);
+ led1_off();
+ led2_off();
+ led3_off();
+
+ led3_on();
+ wait_ms(50);
+ led2_on();
+ wait_ms(50);
+ led1_on();
+ wait_ms(50);
+
+ led3_off();
+ wait_ms(50);
+ led2_off();
+ wait_ms(50);
+ led1_off();
+ wait_ms(50);
+
+ bootloader_jump();
+ }
+}
+
+void keyboard_pre_init_kb(void) {
+ palSetPadMode(GPIOB, 8, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOB, 5, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOB, 6, PAL_MODE_OUTPUT_PUSHPULL);
+ led1_off();
+ led2_off();
+ led3_off();
+
+ keyboard_pre_init_user();
+}
+
+void keyboard_post_init_kb(void) {
+ led1_on();
+ wait_ms(50);
+ led2_on();
+ wait_ms(50);
+ led3_on();
+ wait_ms(50);
+
+ led1_off();
+ wait_ms(50);
+ led2_off();
+ wait_ms(50);
+ led3_off();
+ wait_ms(50);
+
+ keyboard_post_init_user();
+}
+
+void manipulate_led(uint32_t led, bool on) {
+ switch (led) {
+ case 1:
+ on ? led1_on() : led1_off();
+ case 2:
+ on ? led2_on() : led2_off();
+ case 3:
+ on ? led3_on() : led3_off();
+ }
+}
+
+
+layer_state_t layer_state_set_kb(uint32_t state) {
+ state = layer_state_set_user(state);
+
+ uint8_t layer = get_highest_layer(state);
+ manipulate_led(1, layer & 1);
+ manipulate_led(2, layer >> 1 & 1);
+ manipulate_led(3, layer >> 2 & 1);
+ return state;
+}
diff --git a/keyboards/phoenix/phoenix.h b/keyboards/phoenix/phoenix.h
new file mode 100644
index 000000000000..bd8e4a30ab4e
--- /dev/null
+++ b/keyboards/phoenix/phoenix.h
@@ -0,0 +1,94 @@
+/* Copyright 2019
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+inline void led_pin_on(uint8_t pin) { palSetPad(GPIOB, pin); };
+inline void led_pin_off(uint8_t pin) { palClearPad(GPIOB, pin); };
+
+inline void led1_on(void) { led_pin_on(8); };
+inline void led2_on(void) { led_pin_on(5); };
+inline void led3_on(void) { led_pin_on(6); };
+
+inline void led1_off(void) { led_pin_off(8); };
+inline void led2_off(void) { led_pin_off(5); };
+inline void led3_off(void) { led_pin_off(6); };
+
+#define LAYOUT_ergodox( \
+ k00,k01,k02,k03,k04,k05,k06, \
+ k10,k11,k12,k13,k14,k15,k16, \
+ k20,k21,k22,k23,k24,k25, \
+ k30,k31,k32,k33,k34,k35,k36, \
+ k40,k41,k42,k43,k44, \
+ k55,k56, \
+ k54, \
+ k53,k52,k51, \
+ \
+ k07,k08,k09,k0A,k0B,k0C,k0D, \
+ k17,k18,k19,k1A,k1B,k1C,k1D, \
+ k28,k29,k2A,k2B,k2C,k2D, \
+ k37,k38,k39,k3A,k3B,k3C,k3D, \
+ k49,k4A,k4B,k4C,k4D, \
+ k57,k58, \
+ k59, \
+ k5C,k5B,k5A ) \
+ \
+ /* matrix positions */ \
+ { \
+ { k00, k01, k02, k03, k04, k05, k06 }, \
+ { k10, k11, k12, k13, k14, k15, k16 }, \
+ { k20, k21, k22, k23, k24, k25 }, \
+ { k30, k31, k32, k33, k34, k35, k36 }, \
+ { k40, k41, k42, k43, k44 }, \
+ { k53, k52, k51, k55, k56, k54 }, \
+ \
+ { k0D, k0C, k0B, k0A, k09, k08, k07 }, \
+ { k1D, k1C, k1B, k1A, k19, k18, k17 }, \
+ { k2D, k2C, k2B, k2A, k29, k28 }, \
+ { k3D, k3C, k3B, k3A, k39, k38, k37 }, \
+ { k4D, k4C, k4B, k4A, k49 }, \
+ { k5A, k5B, k5C, k58, k57, k59 }, \
+ }
+
+/* ---------- LEFT HAND ----------- ---------- RIGHT HAND ---------- */
+#define LAYOUT_ergodox_pretty( \
+ L00,L01,L02,L03,L04,L05,L06, R00,R01,R02,R03,R04,R05,R06, \
+ L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16, \
+ L20,L21,L22,L23,L24,L25, R21,R22,R23,R24,R25,R26, \
+ L30,L31,L32,L33,L34,L35,L36, R30,R31,R32,R33,R34,R35,R36, \
+ L40,L41,L42,L43,L44, R42,R43,R44,R45,R46, \
+ L55,L56, R50,R51, \
+ L54, R52, \
+ L53,L52,L51, R55,R54,R53 ) \
+ \
+ /* matrix positions */ \
+ { \
+ { L00, L10, L02, L03, L04, L05, L06 },\
+ { L10, L11, L12, L13, L14, L15, L16 },\
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35, L36 },\
+ { L40, L41, L42, L43, L44 }, \
+ { L53, L52, L51, L55, L56, L54 }, \
+ \
+ { R00, R01, R02, R03, R04, R05, R06 },\
+ { R10, R11, R12, R13, R14, R15, R16 },\
+ { R20, R21, R22, R23, R24, R25 }, \
+ { R30, R31, R32, R33, R34, R35, R36 },\
+ { R40, R41, R42, R43, R44 }, \
+ { R53, R54, R55, R51, R50, R52 }, \
+ }
diff --git a/keyboards/phoenix/readme.md b/keyboards/phoenix/readme.md
new file mode 100644
index 000000000000..a39f52359b7b
--- /dev/null
+++ b/keyboards/phoenix/readme.md
@@ -0,0 +1,15 @@
+# Phoenix
+
+![Phoenix](https://imgur.com/adJiuMHl.jpg)
+
+A reborn version of Ergodox with several improved features. [More info on ErgoKB](https://www.ergokb.tw/)
+
+* Keyboard Maintainer: [lschyi](https://github.com/lschyi)
+* Hardware Supported: Phoenix Mechanical Keyboard PCB
+* Hardware Availability: [ErgoKB](https://www.ergokb.tw/products/phoenix/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make phoenix:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/phoenix/rules.mk b/keyboards/phoenix/rules.mk
new file mode 100644
index 000000000000..6c6c8446ab6c
--- /dev/null
+++ b/keyboards/phoenix/rules.mk
@@ -0,0 +1,48 @@
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+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
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend, do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+NKRO_ENABLE = yes # USB Nkey Rollover, if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+STENO_ENABLE = no
+SPLIT_KEYBOARD = yes
+SERIAL_DRIVER = usart
+KEYBOARD_SHARED_EP = yes
+
+## chip/board settings
+# the next two should match the directories in
+# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F4xx
+# linker script to use
+# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
+# or /ld/
+MCU_LDSCRIPT = STM32F401xC
+# startup code to use
+# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f4xx
+# it should exist either in /os/hal/boards/
+# or /boards
+BOARD = BLACKPILL_STM32_F401
+# Cortex version
+# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
+MCU = cortex-m4
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+USE_FPU = yes
+# Address of the booloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+DFU_SUFFIX_ARGS = -v 0483 -p df11
+
+OPT_DEFS += -DSTM32_DMA_REQUIRED=TRUE
From b58f9ef1e29c1de848f8896078111e55d6d62a65 Mon Sep 17 00:00:00 2001
From: Nick Blyumberg
Date: Mon, 14 Sep 2020 21:15:25 -0400
Subject: [PATCH 012/178] [Keymap] Hub16 AutoHotKey Companion (#10159)
* Hub16 AutoHotKey Companion
* Revised after PR comments by Drashna
* Update keyboards/hub16/keymaps/ahk_companion/readme.md
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/hub16/keymaps/ahk_companion/readme.md
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/hub16/keymaps/ahk_companion/readme.md
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/hub16/keymaps/ahk_companion/readme.md
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/hub16/keymaps/ahk_companion/readme.md
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/hub16/keymaps/ahk_companion/keymap.c
Co-authored-by: Drashna Jaelre
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-authored-by: Drashna Jaelre
---
.../keymaps/ahk_companion/ahk_companion.ahk | 104 +++++++++++
.../hub16/keymaps/ahk_companion/config.h | 57 ++++++
.../hub16/keymaps/ahk_companion/keymap.c | 168 ++++++++++++++++++
.../hub16/keymaps/ahk_companion/readme.md | 71 ++++++++
.../hub16/keymaps/ahk_companion/rules.mk | 3 +
5 files changed, 403 insertions(+)
create mode 100644 keyboards/hub16/keymaps/ahk_companion/ahk_companion.ahk
create mode 100644 keyboards/hub16/keymaps/ahk_companion/config.h
create mode 100644 keyboards/hub16/keymaps/ahk_companion/keymap.c
create mode 100644 keyboards/hub16/keymaps/ahk_companion/readme.md
create mode 100755 keyboards/hub16/keymaps/ahk_companion/rules.mk
diff --git a/keyboards/hub16/keymaps/ahk_companion/ahk_companion.ahk b/keyboards/hub16/keymaps/ahk_companion/ahk_companion.ahk
new file mode 100644
index 000000000000..becab49e5cc5
--- /dev/null
+++ b/keyboards/hub16/keymaps/ahk_companion/ahk_companion.ahk
@@ -0,0 +1,104 @@
+#Persistent
+#SingleInstance force
+
+;=================================================================
+; Macro Pad Shortcuts ;
+;=================================================================
+
+;=================================================================
+; Layer 0
+;;=================================================================
+;Row 1
+
+F13::Send a
+F14::Send b
+F15::Send c
+F16::Send d
+
+;Row 2
+
+F17::Send e
+F18::Send f
+F19::Send g
+F20::Send h
+
+;Row 3
+
+F21::Send i
+F22::Send j
+F23::Send k
+F24::Send l
+
+
+;=================================================================
+; Layer 1
+;;=================================================================
+;Row 1
+
+!F13::Send m
+!F14::Send n
+!F15::Send o
+!F16::Send p
+
+;Row 2
+
+!F17::Send q
+!F18::Send r
+!F19::Send s
+!F20::Send t
+
+;Row 3
+
+!F21::Send u
+!F22::Send v
+!F23::Send w
+!F24::Send x
+
+
+;=================================================================
+; Layer 2
+;;=================================================================
+;Row 1
+
++F13::Send y
++F14::Send z
++F15::Send A
++F16::Send B
+
+;Row 2
+
++F17::Send C
++F18::Send D
++F19::Send E
++F20::Send F
+
+;Row 3
+
++F21::Send G
++F22::Send H
++F23::Send I
++F24::Send J
+
+;=================================================================
+; Layer 3
+;;=================================================================
+;Row 1
+
+^F13::Send K
+^F14::Send L
+^F15::Send M
+^F16::Send N
+
+;Row 2
+
+^F17::Send O
+^F18::Send P
+^F19::Send Q
+^F20::Send R
+
+;Row 3
+
+^F21::Send S
+^F22::Send T
+^F23::Send U
+^F24::Send V
diff --git a/keyboards/hub16/keymaps/ahk_companion/config.h b/keyboards/hub16/keymaps/ahk_companion/config.h
new file mode 100644
index 000000000000..aa9e081c7560
--- /dev/null
+++ b/keyboards/hub16/keymaps/ahk_companion/config.h
@@ -0,0 +1,57 @@
+/*
+Copyright 2019 Josh Johnson
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 20
+
+// Time out one shot layers after 3 seconds
+#define ONESHOT_TIMEOUT 3000
+
+// Undef and redefine default brightness to half of 255
+#undef RGBLIGHT_LIMIT_VAL
+#define RGBLIGHT_LIMIT_VAL 255
+
+//Define a preview timeout for RGB reviews
+#define PREVIEW_TIMEOUT 5000
+
+// Enable Light Layers implementation
+#define RGBLIGHT_LAYERS
+// Allow Light Layers to override RGB off configuration
+#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF
diff --git a/keyboards/hub16/keymaps/ahk_companion/keymap.c b/keyboards/hub16/keymaps/ahk_companion/keymap.c
new file mode 100644
index 000000000000..bbc2ac09a112
--- /dev/null
+++ b/keyboards/hub16/keymaps/ahk_companion/keymap.c
@@ -0,0 +1,168 @@
+/*
+Copyright 2019 Josh Johnson
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
+static uint32_t rgb_preview_timer = 0;
+#endif
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ //Layer 0 - Base Layer (F13 to F24, and One Shot Layer 1,2,3 or Toggle Layer 4)
+ [0] = LAYOUT(
+ KC_MPLY, KC_MUTE,
+ KC_F13, KC_F14, KC_F15, KC_F16,
+ KC_F17, KC_F18, KC_F19, KC_F20,
+ KC_F21, KC_F22, KC_F23, KC_F24,
+ OSL(1), OSL(2), OSL(3), TG(4) //Transparent to let you go between layers
+ ),
+
+ [1] = LAYOUT(
+ KC_MPLY, KC_MUTE,
+ LALT(KC_F13), LALT(KC_F14), LALT(KC_F15), LALT(KC_F16),
+ LALT(KC_F17), LALT(KC_F18), LALT(KC_F19), LALT(KC_F20),
+ LALT(KC_F21), LALT(KC_F22), LALT(KC_F23), LALT(KC_F24),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
+ ),
+
+ //Layer 2 - Shift + Function Key Layer
+ [2] = LAYOUT(
+ KC_MPLY, KC_MUTE,
+ LSFT(KC_F13), LSFT(KC_F14), LSFT(KC_F15), LSFT(KC_F16),
+ LSFT(KC_F17), LSFT(KC_F18), LSFT(KC_F19), LSFT(KC_F20),
+ LSFT(KC_F21), LSFT(KC_F22), LSFT(KC_F23), LSFT(KC_F24),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
+ ),
+
+ //Layer 3 - Control + Function Key
+ [3] = LAYOUT(
+ KC_MPLY, KC_MUTE,
+ LCTL(KC_F13), LCTL(KC_F14), LCTL(KC_F15), LCTL(KC_F16),
+ LCTL(KC_F17), LCTL(KC_F18), LCTL(KC_F19), LCTL(KC_F20),
+ LCTL(KC_F21), LCTL(KC_F22), LCTL(KC_F23), LCTL(KC_F24),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
+ ),
+
+ //Layer 4 - Multimedia
+ [4] = LAYOUT(
+ KC_MPLY, KC_MUTE,
+ KC_MPRV, KC_MPLY, KC_U, KC_K,
+ KC_NO, KC_NO, KC_ENT, KC_X,
+ KC_NO, RESET, LSFT(KC_HASH), KC_J,
+ TG(5), KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
+ ),
+
+ //Layer 5 - Keyboard Lights, Programming and Special Functions
+ [5] = LAYOUT(
+ KC_MPLY, KC_MUTE,
+ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI,
+ RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD,
+ RGB_TOG, EEP_RST, RESET, KC_LSHIFT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
+ ),
+};
+
+const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0,16,HSV_ORANGE}
+ );
+const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0,16,HSV_GREEN}
+ );
+const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0,16,HSV_RED}
+ );
+const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0,16,HSV_BLUE}
+ );
+const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0,16,HSV_WHITE}
+ );
+const rgblight_segment_t PROGMEM my_layer5_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0,16,HSV_TEAL}
+ );
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
+ my_layer0_layer,
+ my_layer1_layer,
+ my_layer2_layer,
+ my_layer3_layer,
+ my_layer4_layer,
+ my_layer5_layer
+ );
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) { /* Left Encoder */
+ if (clockwise) {
+ tap_code(KC_MPRV);
+ } else {
+ tap_code(KC_MNXT);
+ }
+ } else if (index == 1) { /* Right Encoder */
+ if (clockwise) {
+ tap_code(KC_VOLD);
+ } else {
+ tap_code(KC_VOLU);
+ }
+ }
+}
+void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
+ // Allow for a preview of changes when modifying RGB
+# if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
+ switch (keycode) {
+ case RGB_TOG ... VLK_TOG:
+ for (uint8_t i = 0; i < RGBLIGHT_MAX_LAYERS; i++) {
+ rgblight_set_layer_state(i, false);
+ }
+ rgb_preview_timer = timer_read32();
+ break;
+ }
+# endif
+ return;
+}
+
+//Set the appropriate layer color
+layer_state_t layer_state_set_user(layer_state_t state) {
+ rgblight_set_layer_state(1, layer_state_cmp(state, 1));
+ rgblight_set_layer_state(2, layer_state_cmp(state, 2));
+ rgblight_set_layer_state(3, layer_state_cmp(state, 3));
+ rgblight_set_layer_state(4, layer_state_cmp(state, 4));
+ rgblight_set_layer_state(5, layer_state_cmp(state, 5));
+ return state;
+}
+
+void keyboard_post_init_user(void) {
+ //Enable the LED layers
+ rgblight_layers = my_rgb_layers;
+ layer_state_set_user(layer_state);
+}
+
+void matrix_scan_user(void) {
+# if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
+ // Allow preview for
+ if (rgb_preview_timer && TIMER_DIFF_32(timer_read32(), rgb_preview_timer) > PREVIEW_TIMEOUT) {
+ rgb_preview_timer = 0;
+ default_layer_state_set_user(default_layer_state);
+ layer_state_set_user(layer_state);
+ led_update_user((led_t) host_keyboard_leds());
+ }
+# endif
+}
+
+//EEPROM Reset Function
+void eeconfig_init_user(void) {
+ rgblight_enable(); // Enable RGB by default
+ rgblight_sethsv_orange(); // Set it to orange by default
+}
diff --git a/keyboards/hub16/keymaps/ahk_companion/readme.md b/keyboards/hub16/keymaps/ahk_companion/readme.md
new file mode 100644
index 000000000000..6e8f9f2d2a25
--- /dev/null
+++ b/keyboards/hub16/keymaps/ahk_companion/readme.md
@@ -0,0 +1,71 @@
+# AutoHotKey Companion
+
+## Overview
+AutoHotKey Companion Keymap for Hub16 macropad is designed be a quick and easy way to get started with AutoHotKey and to provide a foundation for customizing your own macropad. I upgraded to the Super16 from a Super16 because it kept the RGB underglow lights for an easy way (RGB) to identify what layer I was on with a quick glance or peripheral vision and added 2 rotary encoders and a USB 2.0 hub with USB-C ports. The F13 to F24 keys were selected as they are rarely used so you won't run into conflicts with existing application shortcuts and AutoHotKey recognizes them without any issues. *Note:* MacOS does not support/recognize F21 to F24 so these would need to be remapped for Mac users.
+
+Same functionality can be accomplished with other similar applications on the host system like Keyboard Maestro, AutoIt, etc.
+
+* AutoHotKey(Windows)
+* AutoIT (Windows)
+* Keyboard Maestro(Mac)
+* AutoKey(Linux)
+
+This keymap allows for a total of 48 Function/Macro keys that are accessible within 2 sequential key presses (or more when extended with your own code and additional layers)
+
+## Encoders
+Encoder functionality was made based on my needs but it can be remapped as desired by changing the keycodes.
+
+Left Encoder:
+ * Counter clockwise: Previous Multimedia
+ * Clockwise: Next Multimedia
+ * Click: Play/Pause
+
+ Right Encoder:
+ * Counter clockwise: Volume Down
+ * Clockwise: Volume Up
+ * Click: Mute/Unmute
+
+## Alternate Implementations
+I chose to use QMK OSL (One Shot Layer) functionality to avoid having to hold a key while selecting the next key and to have my layers always go back to the default layer as the starting point. This also helps me avoid having to cognitively remember what layer I am on.
+
+If persistent behavior is prefered, OSL can be swapped for TG which will toggle the layer on/off with a key press instead of clearing the layer once the Function key is pressed. This is useful if a layer contains several keys that need to be used in sequence. I also added a OSL timeout of 3 seconds, so that if the key is not pressed within 3 seconds the layer will go back to default. This can be adjusted in the config.h file by increasing 3000 to a desired value: `#define ONESHOT_TIMEOUT 3000`
+
+
+
+
+## Layers
+
+While the first 5 layers are accessible with only 1 key press at most, the 5th (less frequently used) layer is accessed by first going to the 4th layer, which makes the TG(5) button available on the bottom left. Space for additional 2 more layer toggles is available on the 2 middle buttons on the bottom row. Please refer to the layer diagrams.
+
+
+* Layer 0 (Base Layer) - the default layer and functions like sending the F13 to F24 keys along with the bottom row to activate another 4 layers.
+
+ ![Image of Base Layer ](https://i.imgur.com/0LhityX.png)
+
+* Layer 1 (Alt Layer) - Equivalent to Alt+Fxx key being pressed
+
+ ![Image of Layer 1 ](https://i.imgur.com/ZblqLZt.png)
+
+* Layer 2 (Shift Layer) - Equivalent to Shift+Fxx key being pressed
+
+ ![Image of Layer 2 ](https://i.imgur.com/ZQHwLC0.png)
+
+* Layer 3 (Control Layer) - Equivalent to Ctrl+Fxx key being pressed
+
+ ![Image of Layer 3 ](https://i.imgur.com/JkM8bqV.png)
+
+* Layer 4 (Config Layer) - Layer for multimedia. You can replace the KC_TRNS on this layer in keymap.c to TG(x) to enable additional layers.
+
+ ![Image of Layer 4 ](https://i.imgur.com/srDp5Lv.png)
+
+* Layer 5 (RGB Control/QMK) - RGB control layer and Quantum functions (Reset, EEPROM Reset, )
+
+ ![Image of Layer 5 ](https://i.imgur.com/Os3n8dx.png)
+
+## Host Configuration
+
+Once the keymap has been flashed to the Super16, you can download the accompanying AutoHotKey file or create your own and have it start automatically either via a Windows Task or another way. Using AutoHotKey allows adjustment of functionality of the buttons without the need to change your map and reflash the macropad every time.
+Starting the AHK file can be done either by:
+* Creating a Windows Task
+* Adding the AHK to the startup folder
+* Launch manually
diff --git a/keyboards/hub16/keymaps/ahk_companion/rules.mk b/keyboards/hub16/keymaps/ahk_companion/rules.mk
new file mode 100755
index 000000000000..022a3eeeed0d
--- /dev/null
+++ b/keyboards/hub16/keymaps/ahk_companion/rules.mk
@@ -0,0 +1,3 @@
+TAP_DANCE_ENABLE = no # Support for tap dancing
+
+
From 0050033acaec3eaccb972d9d87ef64b713b3e7f2 Mon Sep 17 00:00:00 2001
From: Lasse Bjerre
Date: Tue, 15 Sep 2020 03:41:30 +0200
Subject: [PATCH 013/178] Add ISO layouts for YMD75 (#10244)
* Update rev2.h
* Update info.json
* Create keymap.c
* Add ISO layout to rev1
* Removed redundant keycount
* Add fix for rev1 board + additional key
* Updated default iso keymap
* Add layout with 1.5u keys to the right of spacebar
* Fixed rev2 rwkl and added default layout
---
keyboards/ymd75/info.json | 177 ++++++++++++++++++
keyboards/ymd75/keymaps/default_iso/keymap.c | 36 ++++
.../ymd75/keymaps/default_iso_rwkl/keymap.c | 36 ++++
keyboards/ymd75/rev1/rev1.h | 64 +++++--
keyboards/ymd75/rev2/rev2.h | 32 ++++
5 files changed, 331 insertions(+), 14 deletions(-)
create mode 100644 keyboards/ymd75/keymaps/default_iso/keymap.c
create mode 100644 keyboards/ymd75/keymaps/default_iso_rwkl/keymap.c
diff --git a/keyboards/ymd75/info.json b/keyboards/ymd75/info.json
index a0610afa3f62..64412dd2fcc2 100644
--- a/keyboards/ymd75/info.json
+++ b/keyboards/ymd75/info.json
@@ -7,6 +7,183 @@
"layouts": {
"LAYOUT": {
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0}, {"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"PrtSc", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Fn", "x":15, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Home", "x":15, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"End", "x":15, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"label":"Enter", "x":12.75, "y":3, "w":2.25}, {"label":"Page Up", "x":15, "y":3}, {"label":"Shift", "x":0, "y":4, "w":2.25}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"Page Down", "x":15, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"GUI", "x":1.25, "y":5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5, "w":1.25}, {"x":3.75, "y":5, "w":6.25}, {"label":"Alt", "x":10, "y":5}, {"label":"Fn", "x":11, "y":5}, {"label":"Ctrl", "x":12, "y":5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}]
+ },
+ "LAYOUT_75_iso": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":1, "y":0},
+ {"label":"F2", "x":2, "y":0},
+ {"label":"F3", "x":3, "y":0},
+ {"label":"F4", "x":4, "y":0},
+ {"label":"F5", "x":5, "y":0},
+ {"label":"F6", "x":6, "y":0},
+ {"label":"F7", "x":7, "y":0},
+ {"label":"F8", "x":8, "y":0},
+ {"label":"F9", "x":9, "y":0},
+ {"label":"F10", "x":10, "y":0},
+ {"label":"F11", "x":11, "y":0},
+ {"label":"F12", "x":12, "y":0},
+ {"label":"PrtSc", "x":13, "y":0},
+ {"label":"Pause", "x":14, "y":0},
+ {"label":"Delete", "x":15, "y":0},
+ {"label":"~", "x":0, "y":1},
+ {"label":"1", "x":1, "y":1},
+ {"label":"2", "x":2, "y":1},
+ {"label":"3", "x":3, "y":1},
+ {"label":"4", "x":4, "y":1},
+ {"label":"5", "x":5, "y":1},
+ {"label":"6", "x":6, "y":1},
+ {"label":"7", "x":7, "y":1},
+ {"label":"8", "x":8, "y":1},
+ {"label":"9", "x":9, "y":1},
+ {"label":"0", "x":10, "y":1},
+ {"label":"_", "x":11, "y":1},
+ {"label":"+", "x":12, "y":1},
+ {"label":"Backspace", "x":13, "y":1, "w":2},
+ {"label":"Home", "x":15, "y":1},
+ {"label":"Tab", "x":0, "y":2, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2},
+ {"label":"W", "x":2.5, "y":2},
+ {"label":"E", "x":3.5, "y":2},
+ {"label":"R", "x":4.5, "y":2},
+ {"label":"T", "x":5.5, "y":2},
+ {"label":"Y", "x":6.5, "y":2},
+ {"label":"U", "x":7.5, "y":2},
+ {"label":"I", "x":8.5, "y":2},
+ {"label":"O", "x":9.5, "y":2},
+ {"label":"P", "x":10.5, "y":2},
+ {"label":"{", "x":11.5, "y":2},
+ {"label":"}", "x":12.5, "y":2},
+ {"label":"Page Up", "x":15, "y":2},
+ {"label":"Caps Lock", "x":0, "y":3, "w":1.75},
+ {"label":"A", "x":1.75, "y":3},
+ {"label":"S", "x":2.75, "y":3},
+ {"label":"D", "x":3.75, "y":3},
+ {"label":"F", "x":4.75, "y":3},
+ {"label":"G", "x":5.75, "y":3},
+ {"label":"H", "x":6.75, "y":3},
+ {"label":"J", "x":7.75, "y":3},
+ {"label":"K", "x":8.75, "y":3},
+ {"label":"L", "x":9.75, "y":3},
+ {"label":":", "x":10.75, "y":3},
+ {"label":"@", "x":11.75, "y":3},
+ {"label":"~", "x":12.75, "y":3},
+ {"label":"Enter", "x":13.75, "y":2, "w":1.25, "h":2},
+ {"label":"Page Down", "x":15, "y":3},
+ {"label":"Shift", "x":0, "y":4, "w":1.25},
+ {"label":"|", "x":1.25, "y":4},
+ {"label":"Z", "x":2.25, "y":4},
+ {"label":"X", "x":3.25, "y":4},
+ {"label":"C", "x":4.25, "y":4},
+ {"label":"V", "x":5.25, "y":4},
+ {"label":"B", "x":6.25, "y":4},
+ {"label":"N", "x":7.25, "y":4},
+ {"label":"M", "x":8.25, "y":4},
+ {"label":"<", "x":9.25, "y":4},
+ {"label":">", "x":10.25, "y":4},
+ {"label":"?", "x":11.25, "y":4},
+ {"label":"Shift", "x":12.25, "y":4, "w":1.75},
+ {"label":"Up", "x":14, "y":4},
+ {"label":"End", "x":15, "y":4},
+ {"label":"Ctrl", "x":0, "y":5, "w":1.25},
+ {"label":"Win", "x":1.25, "y":5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5, "w":6.25},
+ {"label":"AltGr", "x":10, "y":5},
+ {"label":"Menu", "x":11, "y":5},
+ {"label":"Ctrl", "x":12, "y":5},
+ {"label":"Left", "x":13, "y":5},
+ {"label":"Down", "x":14, "y":5},
+ {"label":"Right", "x":15, "y":5}
+ ]
+ },
+ "LAYOUT_75_iso_rwkl": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":1, "y":0},
+ {"label":"F2", "x":2, "y":0},
+ {"label":"F3", "x":3, "y":0},
+ {"label":"F4", "x":4, "y":0},
+ {"label":"F5", "x":5, "y":0},
+ {"label":"F6", "x":6, "y":0},
+ {"label":"F7", "x":7, "y":0},
+ {"label":"F8", "x":8, "y":0},
+ {"label":"F9", "x":9, "y":0},
+ {"label":"F10", "x":10, "y":0},
+ {"label":"F11", "x":11, "y":0},
+ {"label":"F12", "x":12, "y":0},
+ {"label":"PrtSc", "x":13, "y":0},
+ {"label":"Pause", "x":14, "y":0},
+ {"label":"Delete", "x":15, "y":0},
+ {"label":"~", "x":0, "y":1},
+ {"label":"1", "x":1, "y":1},
+ {"label":"2", "x":2, "y":1},
+ {"label":"3", "x":3, "y":1},
+ {"label":"4", "x":4, "y":1},
+ {"label":"5", "x":5, "y":1},
+ {"label":"6", "x":6, "y":1},
+ {"label":"7", "x":7, "y":1},
+ {"label":"8", "x":8, "y":1},
+ {"label":"9", "x":9, "y":1},
+ {"label":"0", "x":10, "y":1},
+ {"label":"_", "x":11, "y":1},
+ {"label":"+", "x":12, "y":1},
+ {"label":"Backspace", "x":13, "y":1, "w":2},
+ {"label":"Home", "x":15, "y":1},
+ {"label":"Tab", "x":0, "y":2, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2},
+ {"label":"W", "x":2.5, "y":2},
+ {"label":"E", "x":3.5, "y":2},
+ {"label":"R", "x":4.5, "y":2},
+ {"label":"T", "x":5.5, "y":2},
+ {"label":"Y", "x":6.5, "y":2},
+ {"label":"U", "x":7.5, "y":2},
+ {"label":"I", "x":8.5, "y":2},
+ {"label":"O", "x":9.5, "y":2},
+ {"label":"P", "x":10.5, "y":2},
+ {"label":"{", "x":11.5, "y":2},
+ {"label":"}", "x":12.5, "y":2},
+ {"label":"Page Up", "x":15, "y":2},
+ {"label":"Caps Lock", "x":0, "y":3, "w":1.75},
+ {"label":"A", "x":1.75, "y":3},
+ {"label":"S", "x":2.75, "y":3},
+ {"label":"D", "x":3.75, "y":3},
+ {"label":"F", "x":4.75, "y":3},
+ {"label":"G", "x":5.75, "y":3},
+ {"label":"H", "x":6.75, "y":3},
+ {"label":"J", "x":7.75, "y":3},
+ {"label":"K", "x":8.75, "y":3},
+ {"label":"L", "x":9.75, "y":3},
+ {"label":":", "x":10.75, "y":3},
+ {"label":"@", "x":11.75, "y":3},
+ {"label":"~", "x":12.75, "y":3},
+ {"label":"Enter", "x":13.75, "y":2, "w":1.25, "h":2},
+ {"label":"Page Down", "x":15, "y":3},
+ {"label":"Shift", "x":0, "y":4, "w":1.25},
+ {"label":"|", "x":1.25, "y":4},
+ {"label":"Z", "x":2.25, "y":4},
+ {"label":"X", "x":3.25, "y":4},
+ {"label":"C", "x":4.25, "y":4},
+ {"label":"V", "x":5.25, "y":4},
+ {"label":"B", "x":6.25, "y":4},
+ {"label":"N", "x":7.25, "y":4},
+ {"label":"M", "x":8.25, "y":4},
+ {"label":"<", "x":9.25, "y":4},
+ {"label":">", "x":10.25, "y":4},
+ {"label":"?", "x":11.25, "y":4},
+ {"label":"Shift", "x":12.25, "y":4, "w":1.75},
+ {"label":"Up", "x":14, "y":4},
+ {"label":"End", "x":15, "y":4},
+ {"label":"Ctrl", "x":0, "y":5, "w":1.25},
+ {"label":"Win", "x":1.25, "y":5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5, "w":6.25},
+ {"label":"AltGr", "x":10, "y":5, "w":1.5},
+ {"label":"Ctrl", "x":11.5, "y":5, "w":1.5},
+ {"label":"Left", "x":13, "y":5},
+ {"label":"Down", "x":14, "y":5},
+ {"label":"Right", "x":15, "y":5}
+ ]
}
}
}
diff --git a/keyboards/ymd75/keymaps/default_iso/keymap.c b/keyboards/ymd75/keymaps/default_iso/keymap.c
new file mode 100644
index 000000000000..86af81e22016
--- /dev/null
+++ b/keyboards/ymd75/keymaps/default_iso/keymap.c
@@ -0,0 +1,36 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_75_iso(
+ /* ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, KC_DEL,
+ /* ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┴─────────┼─────────┤ */
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_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_NUHS, KC_ENT, KC_PGUP,
+ /* ├───────────┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴─────────┴─┬─────────┼─────────┤ */
+ 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,
+ /* ├───────────┼─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴───────┬─┴───────┬─┴───────┬─────────┼─────────┼─────────┤ */
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ /* └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ */
+ ),
+
+ [1] = LAYOUT_75_iso(
+ /* ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MPRV, KC_MNXT,
+ /* ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┴─────────┼─────────┤ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
+ /* ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┼─────────┤ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD,
+ /* ├──────────────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬ ├─────────┤ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ /* ├───────────┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴─────────┴─┬─────────┼─────────┤ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ /* ├───────────┼─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴───────┬─┴───────┬─┴───────┬─────────┼─────────┼─────────┤ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ /* └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ */
+ )
+};
diff --git a/keyboards/ymd75/keymaps/default_iso_rwkl/keymap.c b/keyboards/ymd75/keymaps/default_iso_rwkl/keymap.c
new file mode 100644
index 000000000000..0db1c8d288d3
--- /dev/null
+++ b/keyboards/ymd75/keymaps/default_iso_rwkl/keymap.c
@@ -0,0 +1,36 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_75_iso_rwkl(
+ /* ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_DEL, KC_HOME,
+ /* ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┴─────────┼─────────┤ */
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END,
+ /* ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┼─────────┤ */
+ 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_PGUP,
+ /* ├──────────────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬ ├─────────┤ */
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
+ /* ├───────────┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴─────────┴─┬─────────┼─────────┤ */
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ /* ├───────────┼─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴─────────┴──┬──────┴───────┬─────────┼─────────┼─────────┤ */
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ /* └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴──────────────┴──────────────┴─────────┴─────────┴─────────┘ */
+ ),
+
+ [1] = LAYOUT_75_iso_rwkl(
+ /* ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MPRV, KC_MNXT,
+ /* ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┴─────────┼─────────┤ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ /* ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┼─────────┤ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
+ /* ├──────────────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬ ├─────────┤ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD,
+ /* ├───────────┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴─────────┴─┬─────────┼─────────┤ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ /* ├───────────┼─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴─────────┴──┬──────┴───────┬─────────┼─────────┼─────────┤ */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ /* └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴──────────────┴──────────────┴─────────┴─────────┴─────────┘ */
+ )
+};
diff --git a/keyboards/ymd75/rev1/rev1.h b/keyboards/ymd75/rev1/rev1.h
index 0a426ffa5718..d88e8fb802a0 100644
--- a/keyboards/ymd75/rev1/rev1.h
+++ b/keyboards/ymd75/rev1/rev1.h
@@ -21,19 +21,55 @@ along with this program. If not, see .
#include "quantum.h"
#define LAYOUT( \
-K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, \
-K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, \
-K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, \
-K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KD2, KE0, \
-K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, \
-K00, K10, K20, K56, K57, KB0, KC0, K96, K76, K66 \
+ K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, \
+ K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, \
+ K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, \
+ K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KD2, KE0, \
+ K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, \
+ K00, K10, K20, K56, K57, KB0, KC0, K96, K76, K66 \
){ \
-{ K00, K10, K20, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB0, KC0, KD0, KC_NO }, \
-{ K01, K11, K21, K31, K41, K51, KC_NO, KC_NO, KC_NO, KC_NO, KA1, KB1, KC_NO, KD1, KE1 }, \
-{ K02, K12, K22, K32, K42, K52, KC_NO, KC_NO, KC_NO, KC_NO, KA2, KB2, KC_NO, KD2, KE2 }, \
-{ K03, K13, K23, K33, K43, K53, KC_NO, KC_NO, KC_NO, KC_NO, KA3, KB3, KC3, KD3, KC_NO }, \
-{ K04, K14, K24, K34, K44, K54, KC_NO, KC_NO, KC_NO, KC_NO, KA4, KB4, KC4, KC_NO, KE4 }, \
-{ K05, KC_NO, K25, K35, K45, K55, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB5, KC5, KD5, KE5 }, \
-{ K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6, KE6 }, \
-{ K07, K17, K27, K37, K47, K57, K67, K77, KE0, KC_NO, KA7, KB7, KC7, KD7, KE7 } \
+ { K00, K10, K20, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB0, KC0, KD0, KC_NO }, \
+ { K01, K11, K21, K31, K41, K51, KC_NO, KC_NO, KC_NO, KC_NO, KA1, KB1, KC_NO, KD1, KE1 }, \
+ { K02, K12, K22, K32, K42, K52, KC_NO, KC_NO, KC_NO, KC_NO, KA2, KB2, KC_NO, KD2, KE2 }, \
+ { K03, K13, K23, K33, K43, K53, KC_NO, KC_NO, KC_NO, KC_NO, KA3, KB3, KC3, KD3, KC_NO }, \
+ { K04, K14, K24, K34, K44, K54, KC_NO, KC_NO, KC_NO, KC_NO, KA4, KB4, KC4, KC_NO, KE4 }, \
+ { K05, KC_NO, K25, K35, K45, K55, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB5, KC5, KD5, KE5 }, \
+ { K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6, KE6 }, \
+ { K07, K17, K27, K37, K47, K57, K67, K77, KE0, KC_NO, KA7, KB7, KC7, KD7, KE7 } \
+}
+
+#define LAYOUT_75_iso( \
+ K50, K52, K53, K54, K55, K60, K6A, K7A, K70, K5B, K5C, K5D, K5E, K1D, K1E, K2E, \
+ K40, K41, K42, K43, K44, K45, K61, K6B, K7B, K71, K4A, K4B, K4C, K4E, K0D, \
+ K30, K31, K32, K33, K34, K35, K62, K6C, K7C, K72, K3A, K3B, K3C, K76, \
+ K20, K21, K22, K23, K24, K25, K63, K6D, K7D, K73, K2A, K2B, K2C, K2D, K0E, \
+ K10, K03, K11, K12, K13, K14, K15, K64, K6E, K7E, K74, K1A, K1B, K68, K77, \
+ K00, K01, K02, K65, K75, K0B, K0C, K69, K67, K66 \
+){ \
+ { K00, K01, K02, K03, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0B, K0C, K0D, KC_NO }, \
+ { K10, K11, K12, K13, K14, K15, KC_NO, KC_NO, KC_NO, KC_NO, K1A, K1B, KC_NO, K1D, K1E }, \
+ { K20, K21, K22, K23, K24, K25, KC_NO, KC_NO, KC_NO, KC_NO, K2A, K2B, K2C, K2D, K2E }, \
+ { K30, K31, K32, K33, K34, K35, KC_NO, KC_NO, KC_NO, KC_NO, K3A, K3B, K3C, KC_NO, KC_NO }, \
+ { K40, K41, K42, K43, K44, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, KC_NO, K4E }, \
+ { K50, KC_NO, K52, K53, K54, K55, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K5B, K5C, K5D, K5E }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K6C, K6D, K6E }, \
+ { K70, K71, K72, K73, K74, K75, K76, K77, K0E, KC_NO, K7A, K7B, K7C, K7D, K7E } \
+}
+
+#define LAYOUT_75_iso_rwkl( \
+ K50, K52, K53, K54, K55, K60, K6A, K7A, K70, K5B, K5C, K5D, K5E, K1D, K1E, K2E, \
+ K40, K41, K42, K43, K44, K45, K61, K6B, K7B, K71, K4A, K4B, K4C, K4E, K0D, \
+ K30, K31, K32, K33, K34, K35, K62, K6C, K7C, K72, K3A, K3B, K3C, K76, \
+ K20, K21, K22, K23, K24, K25, K63, K6D, K7D, K73, K2A, K2B, K2C, K2D, K0E, \
+ K10, K03, K11, K12, K13, K14, K15, K64, K6E, K7E, K74, K1A, K1B, K68, K77, \
+ K00, K01, K02, K65, K75, K0C, K69, K67, K66 \
+){ \
+ { K00, K01, K02, K03, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0C, K0D, KC_NO }, \
+ { K10, K11, K12, K13, K14, K15, KC_NO, KC_NO, KC_NO, KC_NO, K1A, K1B, KC_NO, K1D, K1E }, \
+ { K20, K21, K22, K23, K24, K25, KC_NO, KC_NO, KC_NO, KC_NO, K2A, K2B, K2C, K2D, K2E }, \
+ { K30, K31, K32, K33, K34, K35, KC_NO, KC_NO, KC_NO, KC_NO, K3A, K3B, K3C, KC_NO, KC_NO }, \
+ { K40, K41, K42, K43, K44, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, KC_NO, K4E }, \
+ { K50, KC_NO, K52, K53, K54, K55, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K5B, K5C, K5D, K5E }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K6C, K6D, K6E }, \
+ { K70, K71, K72, K73, K74, K75, K76, K77, K0E, KC_NO, K7A, K7B, K7C, K7D, K7E } \
}
diff --git a/keyboards/ymd75/rev2/rev2.h b/keyboards/ymd75/rev2/rev2.h
index b2dd7b8e1cd4..85e07c57669b 100644
--- a/keyboards/ymd75/rev2/rev2.h
+++ b/keyboards/ymd75/rev2/rev2.h
@@ -16,3 +16,35 @@
{ K400, KC_NO, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414 }, \
{ K500, K501, K502, KC_NO, KC_NO, K505, K506, K507, K508, K509, K510, K511, KC_NO, K513, K514 } \
}
+
+#define LAYOUT_75_iso( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K514, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K513, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, \
+ K500, K501, K502, K505, K506, K507, K508, K509, K510, K511 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO, K214 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414 }, \
+ { K500, K501, K502, KC_NO, KC_NO, K505, K506, K507, K508, K509, K510, K511, KC_NO, K513, K514 } \
+}
+
+#define LAYOUT_75_iso_rwkl( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K514, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K513, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, \
+ K500, K501, K502, K505, K506, K508, K509, K510, K511 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO, K214 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414 }, \
+ { K500, K501, K502, KC_NO, KC_NO, K505, K506, KC_NO, K508, K509, K510, K511, KC_NO, K513, K514 } \
+}
From 06d4c0a3968f3f0ae0fc5deb36cb4b8de44b1428 Mon Sep 17 00:00:00 2001
From: vattern
Date: Tue, 15 Sep 2020 08:57:55 +0100
Subject: [PATCH 014/178] [Keyboard] add Stoutgat v2; move Stoutgat v1 (#10233)
* initial add
* stoutgat working
* Ready for release
* Ready for release
* Ready for release
* Ready for release
* Ready for release
* fix typos
* update flash instructions in readme
* update copyright
* Update keyboards/tkw/stoutgatv2/keymaps/default/keymap.c
* Apply suggestions from code review
* Fix typo
* Update lib/vusb
* Update keyboards/tkw/stoutgatv2/rules.mk
* Update desc add v2
* Add ANSI
* Move to v1 and v2 folders
* fix typo
* fix v1 readme
* Fix copypasta from v1 keymap
* fix missing trailing slash
* Delete keymap.json
* Apply suggestions from code review
Fixed layout and removed erroneous keymap.json
---
.../{stoutgat => tkw/stoutgat/v1}/config.h | 0
.../{stoutgat => tkw/stoutgat/v1}/info.json | 0
.../stoutgat/v1}/keymaps/default/keymap.c | 0
.../stoutgat/v1}/keymaps/default/readme.md | 0
.../{stoutgat => tkw/stoutgat/v1}/readme.md | 2 +-
.../{stoutgat => tkw/stoutgat/v1}/rules.mk | 0
.../stoutgat.c => tkw/stoutgat/v1/v1.c} | 0
.../stoutgat.h => tkw/stoutgat/v1/v1.h} | 0
keyboards/tkw/stoutgat/v2/config.h | 69 ++
keyboards/tkw/stoutgat/v2/f411/chconf.h | 714 ++++++++++++++++++
keyboards/tkw/stoutgat/v2/f411/halconf.h | 525 +++++++++++++
keyboards/tkw/stoutgat/v2/f411/mcuconf.h | 253 +++++++
keyboards/tkw/stoutgat/v2/f411/rules.mk | 27 +
keyboards/tkw/stoutgat/v2/info.json | 89 +++
.../tkw/stoutgat/v2/keymaps/ansi/keymap.c | 72 ++
.../tkw/stoutgat/v2/keymaps/default/keymap.c | 79 ++
keyboards/tkw/stoutgat/v2/readme.md | 15 +
keyboards/tkw/stoutgat/v2/rules.mk | 24 +
keyboards/tkw/stoutgat/v2/v2.c | 16 +
keyboards/tkw/stoutgat/v2/v2.h | 75 ++
20 files changed, 1959 insertions(+), 1 deletion(-)
rename keyboards/{stoutgat => tkw/stoutgat/v1}/config.h (100%)
rename keyboards/{stoutgat => tkw/stoutgat/v1}/info.json (100%)
rename keyboards/{stoutgat => tkw/stoutgat/v1}/keymaps/default/keymap.c (100%)
rename keyboards/{stoutgat => tkw/stoutgat/v1}/keymaps/default/readme.md (100%)
rename keyboards/{stoutgat => tkw/stoutgat/v1}/readme.md (95%)
rename keyboards/{stoutgat => tkw/stoutgat/v1}/rules.mk (100%)
rename keyboards/{stoutgat/stoutgat.c => tkw/stoutgat/v1/v1.c} (100%)
rename keyboards/{stoutgat/stoutgat.h => tkw/stoutgat/v1/v1.h} (100%)
create mode 100644 keyboards/tkw/stoutgat/v2/config.h
create mode 100644 keyboards/tkw/stoutgat/v2/f411/chconf.h
create mode 100644 keyboards/tkw/stoutgat/v2/f411/halconf.h
create mode 100644 keyboards/tkw/stoutgat/v2/f411/mcuconf.h
create mode 100644 keyboards/tkw/stoutgat/v2/f411/rules.mk
create mode 100644 keyboards/tkw/stoutgat/v2/info.json
create mode 100644 keyboards/tkw/stoutgat/v2/keymaps/ansi/keymap.c
create mode 100644 keyboards/tkw/stoutgat/v2/keymaps/default/keymap.c
create mode 100644 keyboards/tkw/stoutgat/v2/readme.md
create mode 100644 keyboards/tkw/stoutgat/v2/rules.mk
create mode 100644 keyboards/tkw/stoutgat/v2/v2.c
create mode 100644 keyboards/tkw/stoutgat/v2/v2.h
diff --git a/keyboards/stoutgat/config.h b/keyboards/tkw/stoutgat/v1/config.h
similarity index 100%
rename from keyboards/stoutgat/config.h
rename to keyboards/tkw/stoutgat/v1/config.h
diff --git a/keyboards/stoutgat/info.json b/keyboards/tkw/stoutgat/v1/info.json
similarity index 100%
rename from keyboards/stoutgat/info.json
rename to keyboards/tkw/stoutgat/v1/info.json
diff --git a/keyboards/stoutgat/keymaps/default/keymap.c b/keyboards/tkw/stoutgat/v1/keymaps/default/keymap.c
similarity index 100%
rename from keyboards/stoutgat/keymaps/default/keymap.c
rename to keyboards/tkw/stoutgat/v1/keymaps/default/keymap.c
diff --git a/keyboards/stoutgat/keymaps/default/readme.md b/keyboards/tkw/stoutgat/v1/keymaps/default/readme.md
similarity index 100%
rename from keyboards/stoutgat/keymaps/default/readme.md
rename to keyboards/tkw/stoutgat/v1/keymaps/default/readme.md
diff --git a/keyboards/stoutgat/readme.md b/keyboards/tkw/stoutgat/v1/readme.md
similarity index 95%
rename from keyboards/stoutgat/readme.md
rename to keyboards/tkw/stoutgat/v1/readme.md
index 13953e231908..0904b5127170 100644
--- a/keyboards/stoutgat/readme.md
+++ b/keyboards/tkw/stoutgat/v1/readme.md
@@ -11,6 +11,6 @@ Inspired by the cftkb Discipline.
Make example for this keyboard (after setting up your build environment):
- make stoutgat:default
+ make tkw/stoutgat/v1:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/stoutgat/rules.mk b/keyboards/tkw/stoutgat/v1/rules.mk
similarity index 100%
rename from keyboards/stoutgat/rules.mk
rename to keyboards/tkw/stoutgat/v1/rules.mk
diff --git a/keyboards/stoutgat/stoutgat.c b/keyboards/tkw/stoutgat/v1/v1.c
similarity index 100%
rename from keyboards/stoutgat/stoutgat.c
rename to keyboards/tkw/stoutgat/v1/v1.c
diff --git a/keyboards/stoutgat/stoutgat.h b/keyboards/tkw/stoutgat/v1/v1.h
similarity index 100%
rename from keyboards/stoutgat/stoutgat.h
rename to keyboards/tkw/stoutgat/v1/v1.h
diff --git a/keyboards/tkw/stoutgat/v2/config.h b/keyboards/tkw/stoutgat/v2/config.h
new file mode 100644
index 000000000000..1c0a66f3c684
--- /dev/null
+++ b/keyboards/tkw/stoutgat/v2/config.h
@@ -0,0 +1,69 @@
+/* Copyright 2020 Thys de Wet
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x7811
+#define DEVICE_VER 0x0002
+#define MANUFACTURER TKW
+#define PRODUCT Stoutgat v2 65%
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+
+
+#define MATRIX_COL_PINS { B0, A7, A6, A5, A4, A3, A1, A0, C15, C14, C13, A15, B3, B4, B5}
+#define MATRIX_ROW_PINS { B6, A2, B7, B9, B8 }
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define MATRIX_IO_DELAY 5
+#define TAP_CODE_DELAY 10
+
+#define ENCODERS_PAD_A { B14, B12}
+#define ENCODERS_PAD_B { B15, B13 }
+
+#define RGB_DI_PIN B1
+#define RGBLED_NUM 13
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_ANIMATIONS
+
+#define WS2812_PWM_DRIVER PWMD3
+#define WS2812_PWM_CHANNEL 4
+#define WS2812_PWM_PAL_MODE 2
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM2
+#define WS2812_DMA_CHANNEL 5
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* disable these deprecated features by default */
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+
+/* Bootmagic Lite key configuration */
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/tkw/stoutgat/v2/f411/chconf.h b/keyboards/tkw/stoutgat/v2/f411/chconf.h
new file mode 100644
index 000000000000..0b8b69b0e02c
--- /dev/null
+++ b/keyboards/tkw/stoutgat/v2/f411/chconf.h
@@ -0,0 +1,714 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file rt/templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+#define _CHIBIOS_RT_CONF_VER_6_0_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#if !defined(CH_CFG_ST_RESOLUTION)
+#define CH_CFG_ST_RESOLUTION 32
+#endif
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#if !defined(CH_CFG_ST_FREQUENCY)
+#define CH_CFG_ST_FREQUENCY 100000
+#endif
+
+/**
+ * @brief Time intervals data size.
+ * @note Allowed values are 16, 32 or 64 bits.
+ */
+#if !defined(CH_CFG_INTERVALS_SIZE)
+#define CH_CFG_INTERVALS_SIZE 32
+#endif
+
+/**
+ * @brief Time types data size.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#if !defined(CH_CFG_TIME_TYPES_SIZE)
+#define CH_CFG_TIME_TYPES_SIZE 32
+#endif
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#if !defined(CH_CFG_ST_TIMEDELTA)
+#define CH_CFG_ST_TIMEDELTA 2
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#if !defined(CH_CFG_TIME_QUANTUM)
+#define CH_CFG_TIME_QUANTUM 0
+#endif
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#if !defined(CH_CFG_MEMCORE_SIZE)
+#define CH_CFG_MEMCORE_SIZE 0
+#endif
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#if !defined(CH_CFG_NO_IDLE_THREAD)
+#define CH_CFG_NO_IDLE_THREAD FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_OPTIMIZE_SPEED)
+#define CH_CFG_OPTIMIZE_SPEED TRUE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_TM)
+#define CH_CFG_USE_TM TRUE
+#endif
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_REGISTRY)
+#define CH_CFG_USE_REGISTRY TRUE
+#endif
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_WAITEXIT)
+#define CH_CFG_USE_WAITEXIT TRUE
+#endif
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_SEMAPHORES)
+#define CH_CFG_USE_SEMAPHORES TRUE
+#endif
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY)
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+#endif
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MUTEXES)
+#define CH_CFG_USE_MUTEXES TRUE
+#endif
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#if !defined(CH_CFG_USE_MUTEXES_RECURSIVE)
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+#endif
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#if !defined(CH_CFG_USE_CONDVARS)
+#define CH_CFG_USE_CONDVARS TRUE
+#endif
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#if !defined(CH_CFG_USE_CONDVARS_TIMEOUT)
+#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
+#endif
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_EVENTS)
+#define CH_CFG_USE_EVENTS TRUE
+#endif
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#if !defined(CH_CFG_USE_EVENTS_TIMEOUT)
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+#endif
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MESSAGES)
+#define CH_CFG_USE_MESSAGES TRUE
+#endif
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#if !defined(CH_CFG_USE_MESSAGES_PRIORITY)
+#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
+#endif
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#if !defined(CH_CFG_USE_MAILBOXES)
+#define CH_CFG_USE_MAILBOXES TRUE
+#endif
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MEMCORE)
+#define CH_CFG_USE_MEMCORE TRUE
+#endif
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#if !defined(CH_CFG_USE_HEAP)
+#define CH_CFG_USE_HEAP TRUE
+#endif
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MEMPOOLS)
+#define CH_CFG_USE_MEMPOOLS TRUE
+#endif
+
+/**
+ * @brief Objects FIFOs APIs.
+ * @details If enabled then the objects FIFOs APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_OBJ_FIFOS)
+#define CH_CFG_USE_OBJ_FIFOS TRUE
+#endif
+
+/**
+ * @brief Pipes APIs.
+ * @details If enabled then the pipes APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_PIPES)
+#define CH_CFG_USE_PIPES TRUE
+#endif
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#if !defined(CH_CFG_USE_DYNAMIC)
+#define CH_CFG_USE_DYNAMIC TRUE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Objects factory options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Objects Factory APIs.
+ * @details If enabled then the objects factory APIs are included in the
+ * kernel.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_CFG_USE_FACTORY)
+#define CH_CFG_USE_FACTORY TRUE
+#endif
+
+/**
+ * @brief Maximum length for object names.
+ * @details If the specified length is zero then the name is stored by
+ * pointer but this could have unintended side effects.
+ */
+#if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH)
+#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8
+#endif
+
+/**
+ * @brief Enables the registry of generic objects.
+ */
+#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY)
+#define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE
+#endif
+
+/**
+ * @brief Enables factory for generic buffers.
+ */
+#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS)
+#define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE
+#endif
+
+/**
+ * @brief Enables factory for semaphores.
+ */
+#if !defined(CH_CFG_FACTORY_SEMAPHORES)
+#define CH_CFG_FACTORY_SEMAPHORES TRUE
+#endif
+
+/**
+ * @brief Enables factory for mailboxes.
+ */
+#if !defined(CH_CFG_FACTORY_MAILBOXES)
+#define CH_CFG_FACTORY_MAILBOXES TRUE
+#endif
+
+/**
+ * @brief Enables factory for objects FIFOs.
+ */
+#if !defined(CH_CFG_FACTORY_OBJ_FIFOS)
+#define CH_CFG_FACTORY_OBJ_FIFOS TRUE
+#endif
+
+/**
+ * @brief Enables factory for Pipes.
+ */
+#if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__)
+#define CH_CFG_FACTORY_PIPES TRUE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_STATISTICS)
+#define CH_DBG_STATISTICS FALSE
+#endif
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_SYSTEM_STATE_CHECK)
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+#endif
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_ENABLE_CHECKS)
+#define CH_DBG_ENABLE_CHECKS FALSE
+#endif
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_ENABLE_ASSERTS)
+#define CH_DBG_ENABLE_ASSERTS FALSE
+#endif
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#if !defined(CH_DBG_TRACE_MASK)
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+#endif
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#if !defined(CH_DBG_TRACE_BUFFER_SIZE)
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+#endif
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#if !defined(CH_DBG_ENABLE_STACK_CHECK)
+#define CH_DBG_ENABLE_STACK_CHECK FALSE
+#endif
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_FILL_THREADS)
+#define CH_DBG_FILL_THREADS FALSE
+#endif
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#if !defined(CH_DBG_THREADS_PROFILING)
+#define CH_DBG_THREADS_PROFILING FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System structure extension.
+ * @details User fields added to the end of the @p ch_system_t structure.
+ */
+#define CH_CFG_SYSTEM_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief System initialization hook.
+ * @details User initialization code added to the @p chSysInit() function
+ * just before interrupts are enabled globally.
+ */
+#define CH_CFG_SYSTEM_INIT_HOOK() { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p _thread_init() function.
+ *
+ * @note It is invoked from within @p _thread_init() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/tkw/stoutgat/v2/f411/halconf.h b/keyboards/tkw/stoutgat/v2/f411/halconf.h
new file mode 100644
index 000000000000..1f8df5dbbd55
--- /dev/null
+++ b/keyboards/tkw/stoutgat/v2/f411/halconf.h
@@ -0,0 +1,525 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef HALCONF_H
+#define HALCONF_H
+
+#define _CHIBIOS_HAL_CONF_
+#define _CHIBIOS_HAL_CONF_VER_7_0_
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the cryptographic subsystem.
+ */
+#if !defined(HAL_USE_CRY) || defined(__DOXYGEN__)
+#define HAL_USE_CRY FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT FALSE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C FALSE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM TRUE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL TRUE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB FALSE
+#endif
+
+/**
+ * @brief Enables the SIO subsystem.
+ */
+#if !defined(HAL_USE_SIO) || defined(__DOXYGEN__)
+#define HAL_USE_SIO FALSE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the TRNG subsystem.
+ */
+#if !defined(HAL_USE_TRNG) || defined(__DOXYGEN__)
+#define HAL_USE_TRNG FALSE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/**
+ * @brief Enables the WSPI subsystem.
+ */
+#if !defined(HAL_USE_WSPI) || defined(__DOXYGEN__)
+#define HAL_USE_WSPI FALSE
+#endif
+
+/*===========================================================================*/
+/* PAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(PAL_USE_CALLBACKS) || defined(__DOXYGEN__)
+#define PAL_USE_CALLBACKS FALSE
+#endif
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(PAL_USE_WAIT) || defined(__DOXYGEN__)
+#define PAL_USE_WAIT FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/**
+ * @brief Enforces the driver to use direct callbacks rather than OSAL events.
+ */
+#if !defined(CAN_ENFORCE_USE_CALLBACKS) || defined(__DOXYGEN__)
+#define CAN_ENFORCE_USE_CALLBACKS FALSE
+#endif
+
+/*===========================================================================*/
+/* CRY driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the SW fall-back of the cryptographic driver.
+ * @details When enabled, this option, activates a fall-back software
+ * implementation for algorithms not supported by the underlying
+ * hardware.
+ * @note Fall-back implementations may not be present for all algorithms.
+ */
+#if !defined(HAL_CRY_USE_FALLBACK) || defined(__DOXYGEN__)
+#define HAL_CRY_USE_FALLBACK FALSE
+#endif
+
+/**
+ * @brief Makes the driver forcibly use the fall-back implementations.
+ */
+#if !defined(HAL_CRY_ENFORCE_FALLBACK) || defined(__DOXYGEN__)
+#define HAL_CRY_ENFORCE_FALLBACK FALSE
+#endif
+
+/*===========================================================================*/
+/* DAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(DAC_USE_WAIT) || defined(__DOXYGEN__)
+#define DAC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p dacAcquireBus() and @p dacReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(DAC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define DAC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the zero-copy API.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY FALSE
+#endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/**
+ * @brief OCR initialization constant for V20 cards.
+ */
+#if !defined(SDC_INIT_OCR_V20) || defined(__DOXYGEN__)
+#define SDC_INIT_OCR_V20 0x50FF8000U
+#endif
+
+/**
+ * @brief OCR initialization constant for non-V20 cards.
+ */
+#if !defined(SDC_INIT_OCR) || defined(__DOXYGEN__)
+#define SDC_INIT_OCR 0x80100000U
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 16 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 256 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 256
+#endif
+
+/**
+ * @brief Serial over USB number of buffers.
+ * @note The default is 2 buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_NUMBER 2
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables circular transfers APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_CIRCULAR) || defined(__DOXYGEN__)
+#define SPI_USE_CIRCULAR FALSE
+#endif
+
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/**
+ * @brief Handling method for SPI CS line.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_SELECT_MODE) || defined(__DOXYGEN__)
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+#endif
+
+/*===========================================================================*/
+/* UART driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
+#define UART_USE_WAIT FALSE
+#endif
+
+/**
+ * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define UART_USE_MUTUAL_EXCLUSION FALSE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+/*===========================================================================*/
+/* WSPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(WSPI_USE_WAIT) || defined(__DOXYGEN__)
+#define WSPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p wspiAcquireBus() and @p wspiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(WSPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define WSPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+#endif /* HALCONF_H */
+
+/** @} */
diff --git a/keyboards/tkw/stoutgat/v2/f411/mcuconf.h b/keyboards/tkw/stoutgat/v2/f411/mcuconf.h
new file mode 100644
index 000000000000..f3a017731c4a
--- /dev/null
+++ b/keyboards/tkw/stoutgat/v2/f411/mcuconf.h
@@ -0,0 +1,253 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef MCUCONF_H
+#define MCUCONF_H
+
+/*
+ * STM32F4xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#define STM32F4xx_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_HSI_ENABLED TRUE
+#define STM32_LSI_ENABLED TRUE
+#define STM32_HSE_ENABLED TRUE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_CLOCK48_REQUIRED TRUE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSE
+#define STM32_PLLM_VALUE 25
+#define STM32_PLLN_VALUE 384
+#define STM32_PLLP_VALUE 4
+#define STM32_PLLQ_VALUE 8
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE1 STM32_PPRE1_DIV4
+#define STM32_PPRE2 STM32_PPRE2_DIV2
+#define STM32_RTCSEL STM32_RTCSEL_LSI
+#define STM32_RTCPRE_VALUE 8
+#define STM32_MCO1SEL STM32_MCO1SEL_HSI
+#define STM32_MCO1PRE STM32_MCO1PRE_DIV1
+#define STM32_MCO2SEL STM32_MCO2SEL_SYSCLK
+#define STM32_MCO2PRE STM32_MCO2PRE_DIV5
+#define STM32_I2SSRC STM32_I2SSRC_CKIN
+#define STM32_PLLI2SN_VALUE 192
+#define STM32_PLLI2SR_VALUE 5
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+#define STM32_BKPRAM_ENABLE FALSE
+
+/*
+ * IRQ system settings.
+ */
+#define STM32_IRQ_EXTI0_PRIORITY 6
+#define STM32_IRQ_EXTI1_PRIORITY 6
+#define STM32_IRQ_EXTI2_PRIORITY 6
+#define STM32_IRQ_EXTI3_PRIORITY 6
+#define STM32_IRQ_EXTI4_PRIORITY 6
+#define STM32_IRQ_EXTI5_9_PRIORITY 6
+#define STM32_IRQ_EXTI10_15_PRIORITY 6
+#define STM32_IRQ_EXTI16_PRIORITY 6
+#define STM32_IRQ_EXTI17_PRIORITY 15
+#define STM32_IRQ_EXTI18_PRIORITY 6
+#define STM32_IRQ_EXTI19_PRIORITY 6
+#define STM32_IRQ_EXTI20_PRIORITY 6
+#define STM32_IRQ_EXTI21_PRIORITY 15
+#define STM32_IRQ_EXTI22_PRIORITY 15
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_ADCPRE ADC_CCR_ADCPRE_DIV4
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_STREAM STM32_DMA_STREAM_ID(2, 4)
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_IRQ_PRIORITY 6
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 6
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM4 FALSE
+#define STM32_GPT_USE_TIM5 FALSE
+#define STM32_GPT_USE_TIM9 FALSE
+#define STM32_GPT_USE_TIM11 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 7
+#define STM32_GPT_TIM2_IRQ_PRIORITY 7
+#define STM32_GPT_TIM3_IRQ_PRIORITY 7
+#define STM32_GPT_TIM4_IRQ_PRIORITY 7
+#define STM32_GPT_TIM5_IRQ_PRIORITY 7
+#define STM32_GPT_TIM9_IRQ_PRIORITY 7
+#define STM32_GPT_TIM11_IRQ_PRIORITY 7
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 FALSE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_USE_I2C3 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
+#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
+#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_I2C_I2C1_IRQ_PRIORITY 5
+#define STM32_I2C_I2C2_IRQ_PRIORITY 5
+#define STM32_I2C_I2C3_IRQ_PRIORITY 5
+#define STM32_I2C_I2C1_DMA_PRIORITY 3
+#define STM32_I2C_I2C2_DMA_PRIORITY 3
+#define STM32_I2C_I2C3_DMA_PRIORITY 3
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * I2S driver system settings.
+ */
+#define STM32_I2S_USE_SPI2 FALSE
+#define STM32_I2S_USE_SPI3 FALSE
+#define STM32_I2S_SPI2_IRQ_PRIORITY 10
+#define STM32_I2S_SPI3_IRQ_PRIORITY 10
+#define STM32_I2S_SPI2_DMA_PRIORITY 1
+#define STM32_I2S_SPI3_DMA_PRIORITY 1
+#define STM32_I2S_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
+#define STM32_I2S_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_I2S_SPI3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#define STM32_I2S_SPI3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_I2S_DMA_ERROR_HOOK(i2sp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_USE_TIM4 FALSE
+#define STM32_ICU_USE_TIM5 FALSE
+#define STM32_ICU_USE_TIM9 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 7
+#define STM32_ICU_TIM2_IRQ_PRIORITY 7
+#define STM32_ICU_TIM3_IRQ_PRIORITY 7
+#define STM32_ICU_TIM4_IRQ_PRIORITY 7
+#define STM32_ICU_TIM5_IRQ_PRIORITY 7
+#define STM32_ICU_TIM9_IRQ_PRIORITY 7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 TRUE
+#define STM32_PWM_USE_TIM4 FALSE
+#define STM32_PWM_USE_TIM5 FALSE
+#define STM32_PWM_USE_TIM9 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 7
+#define STM32_PWM_TIM2_IRQ_PRIORITY 7
+#define STM32_PWM_TIM3_IRQ_PRIORITY 7
+#define STM32_PWM_TIM4_IRQ_PRIORITY 7
+#define STM32_PWM_TIM5_IRQ_PRIORITY 7
+#define STM32_PWM_TIM9_IRQ_PRIORITY 7
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 TRUE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USE_USART6 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 12
+#define STM32_SERIAL_USART2_PRIORITY 12
+#define STM32_SERIAL_USART6_PRIORITY 12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 FALSE
+#define STM32_SPI_USE_SPI3 FALSE
+#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0)
+#define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3)
+#define STM32_SPI_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
+#define STM32_SPI_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_SPI_SPI3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#define STM32_SPI_SPI3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI3_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 10
+#define STM32_SPI_SPI2_IRQ_PRIORITY 10
+#define STM32_SPI_SPI3_IRQ_PRIORITY 10
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 8
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USE_USART6 FALSE
+#define STM32_UART_USART1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
+#define STM32_UART_USART1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
+#define STM32_UART_USART2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
+#define STM32_UART_USART2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#define STM32_UART_USART6_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 2)
+#define STM32_UART_USART6_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
+#define STM32_UART_USART1_IRQ_PRIORITY 12
+#define STM32_UART_USART2_IRQ_PRIORITY 12
+#define STM32_UART_USART6_IRQ_PRIORITY 12
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_USART6_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_OTG1 TRUE
+#define STM32_USB_OTG1_IRQ_PRIORITY 14
+#define STM32_USB_OTG1_RX_FIFO_SIZE 512
+#define STM32_USB_OTG_THREAD_PRIO NORMALPRIO+1
+#define STM32_USB_OTG_THREAD_STACK_SIZE 128
+#define STM32_USB_OTGFIFO_FILL_BASEPRI 0
+
+/*
+ * WDG driver system settings.
+ */
+#define STM32_WDG_USE_IWDG FALSE
+
+#endif /* MCUCONF_H */
diff --git a/keyboards/tkw/stoutgat/v2/f411/rules.mk b/keyboards/tkw/stoutgat/v2/f411/rules.mk
new file mode 100644
index 000000000000..61add3aed53b
--- /dev/null
+++ b/keyboards/tkw/stoutgat/v2/f411/rules.mk
@@ -0,0 +1,27 @@
+## chip/board settings
+# the next two should match the directories in
+# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F4xx
+# linker script to use
+# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
+# or /ld/
+MCU_LDSCRIPT = STM32F411xE
+# startup code to use
+# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f4xx
+# it should exist either in /os/hal/boards/
+# or /boards
+BOARD = BLACKPILL_STM32_F411
+# Cortex version
+# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
+MCU = cortex-m4
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+USE_FPU = yes
+# Address of the booloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+DFU_SUFFIX_ARGS = -v 0483 -p df11
diff --git a/keyboards/tkw/stoutgat/v2/info.json b/keyboards/tkw/stoutgat/v2/info.json
new file mode 100644
index 000000000000..48288096b151
--- /dev/null
+++ b/keyboards/tkw/stoutgat/v2/info.json
@@ -0,0 +1,89 @@
+{
+ "keyboard_name": "stoutgat/v2",
+ "url": "https://github.com/vattern/stoutgatv2",
+ "maintainer": "vattern",
+ "manufacturer": "tkw",
+ "width": 17.25,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_encoder": {
+ "layout": [
+ {"x": 1.25, "y": 0},
+ {"x": 2.25, "y": 0},
+ {"x": 3.25, "y": 0},
+ {"x": 4.25, "y": 0},
+ {"x": 5.25, "y": 0},
+ {"x": 6.25, "y": 0},
+ {"x": 7.25, "y": 0},
+ {"x": 8.25, "y": 0},
+ {"x": 9.25, "y": 0},
+ {"x": 10.25, "y": 0},
+ {"x": 11.25, "y": 0},
+ {"x": 12.25, "y": 0},
+ {"x": 13.25, "y": 0},
+ {"x": 14.25, "y": 0, "w": 2},
+ {"x": 16.25, "y": 0},
+
+ {"x": 1.25, "y": 1, "w": 1.5},
+ {"x": 2.75, "y": 1},
+ {"x": 3.75, "y": 1},
+ {"x": 4.75, "y": 1},
+ {"x": 5.75, "y": 1},
+ {"x": 6.75, "y": 1},
+ {"x": 7.75, "y": 1},
+ {"x": 8.75, "y": 1},
+ {"x": 9.75, "y": 1},
+ {"x": 10.75, "y": 1},
+ {"x": 11.75, "y": 1},
+ {"x": 12.75, "y": 1},
+ {"x": 13.75, "y": 1},
+ {"x": 16.25, "y": 1},
+
+ {"x": 1.25, "y": 2, "w": 1.75},
+ {"x": 3.0, "y": 2},
+ {"x": 4.0, "y": 2},
+ {"x": 5.0, "y": 2},
+ {"x": 6.0, "y": 2},
+ {"x": 7.0, "y": 2},
+ {"x": 8.0, "y": 2},
+ {"x": 9.0, "y": 2},
+ {"x": 10.0, "y": 2},
+ {"x": 11.0, "y": 2},
+ {"x": 12.0, "y": 2},
+ {"x": 13.0, "y": 2},
+ {"x": 14.0, "y": 2},
+ {"x": 15.0, "y": 1, "w": 1.25, "h": 2},
+ {"x": 16.25, "y": 2},
+
+ {"x": 0, "y": 3},
+
+ {"x": 1.25, "y": 3, "w": 1.25},
+ {"x": 2.5, "y": 3},
+ {"x": 3.5, "y": 3},
+ {"x": 4.5, "y": 3},
+ {"x": 5.5, "y": 3},
+ {"x": 6.5, "y": 3},
+ {"x": 7.5, "y": 3},
+ {"x": 8.5, "y": 3},
+ {"x": 9.5, "y": 3},
+ {"x": 10.5, "y": 3},
+ {"x": 11.5, "y": 3},
+ {"x": 12.5, "y": 3},
+ {"x": 13.5, "y": 3, "w": 1.75},
+ {"x": 15.25, "y": 3},
+ {"x": 16.25, "y": 3},
+
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 1.25},
+ {"x": 5.0, "y": 4, "w": 6.25},
+ {"x": 11.25, "y": 4},
+ {"x": 12.25, "y": 4},
+ {"x": 13.25, "y": 4},
+ {"x": 14.25, "y": 4},
+ {"x": 15.25, "y": 4},
+ {"x": 16.25, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/tkw/stoutgat/v2/keymaps/ansi/keymap.c b/keyboards/tkw/stoutgat/v2/keymaps/ansi/keymap.c
new file mode 100644
index 000000000000..618d336cdb92
--- /dev/null
+++ b/keyboards/tkw/stoutgat/v2/keymaps/ansi/keymap.c
@@ -0,0 +1,72 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _BL,
+ _FL,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_blocker(
+ 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_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_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, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_65_ansi_blocker(
+ /* esc 1 2 3 4 5 6 7 8 9 0 - = bkspc `~ */
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, RESET,
+ /* tab Q W E R T Y U I O P [ ] \ delete*/
+ RGB_MOD, RGB_VAI, RGB_SAI, RGB_HUI, RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS, KC_TRNS, KC_TRNS,
+ /* caps A S D F G H J K L ; ' enter pg up*/
+ RGB_TOG, RGB_VAD, RGB_SAD, RGB_HUD, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME,
+ /* shift Z X C V B N M , . / shift up pg dn*/
+ KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_RSFT, KC_VOLU, KC_END,
+ /* ctrl win alt space alt fn ctrl left down right*/
+ KC_LCTL, KC_LGUI, KC_LALT, KC_TRNS, KC_RALT, KC_TRNS, KC_TRNS, KC_VOLD, KC_TRNS)
+};
+
+#ifdef ENCODER_ENABLE
+void encoder_update_user(uint8_t index, bool clockwise){
+
+ if (index == 0) {
+ switch (get_highest_layer(layer_state)) {
+ case _BL:
+ // Move whole words. Hold shift to select while moving.
+ if (clockwise) {
+ tap_code16(C(KC_RGHT));
+ } else {
+ tap_code16(C(KC_LEFT));
+ }
+ break;
+ default:
+ // History scrubbing. For Adobe products, hold shift while moving
+ // backward to go forward instead.
+ if (clockwise) {
+ tap_code16(C(KC_Z));
+ } else {
+ tap_code16(C(KC_Y));
+ }
+ break;
+ }
+ } else if (index == 1) {
+ switch (get_highest_layer(layer_state)) {
+ case _BL:
+ // Scrolling with PageUp and PgDn.
+ if (clockwise) {
+ tap_code16(KC_PGDN);
+ } else {
+ tap_code16(KC_PGUP);
+ }
+ break;
+ default:
+ if (clockwise) {
+ tap_code16(A(KC_TAB));
+ } else {
+ tap_code16(A(S(KC_TAB)));
+ }
+ break;
+ }
+ }
+}
+#endif
diff --git a/keyboards/tkw/stoutgat/v2/keymaps/default/keymap.c b/keyboards/tkw/stoutgat/v2/keymaps/default/keymap.c
new file mode 100644
index 000000000000..c794c9c64327
--- /dev/null
+++ b/keyboards/tkw/stoutgat/v2/keymaps/default/keymap.c
@@ -0,0 +1,79 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _BL,
+ _FL,
+};
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_encoder(
+ 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_GRV,
+ 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,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
+ KC_MPLY, 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,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_encoder(
+ /* esc 1 2 3 4 5 6 7 8 9 0 - = bkspc `~ */
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, RESET,
+ /* tab Q W E R T Y U I O P [ ] delete */
+ RGB_MOD, RGB_VAI, RGB_SAI, RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS, KC_TRNS,
+ /* caps A S D F G H J K L ; ' # enter pg up */
+ RGB_TOG, RGB_VAD, RGB_SAD, RGB_HUD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_HOME,
+ /* shift \ Z X C V B N M , . / shift up pg dn */
+ KC_MPLY, KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_RSFT, KC_VOLU, KC_END,
+ /* ctrl win alt space alt fn ctrl left down right */
+ KC_LCTL, KC_LGUI, KC_LALT, KC_TRNS, KC_RALT, KC_TRNS, KC_RCTL, KC_TRNS, KC_VOLD, KC_TRNS
+ )
+};
+
+
+
+
+#ifdef ENCODER_ENABLE
+void encoder_update_user(uint8_t index, bool clockwise){
+
+ if (index == 0) {
+ switch (get_highest_layer(layer_state)) {
+ case _BL:
+ // Move whole words. Hold shift to select while moving.
+ if (clockwise) {
+ tap_code16(C(KC_RGHT));
+ } else {
+ tap_code16(C(KC_LEFT));
+ }
+ break;
+ default:
+ // History scrubbing. For Adobe products, hold shift while moving
+ // backward to go forward instead.
+ if (clockwise) {
+ tap_code16(C(KC_Z));
+ } else {
+ tap_code16(C(KC_Y));
+ }
+ break;
+ }
+ } else if (index == 1) {
+ switch (get_highest_layer(layer_state)) {
+ case _BL:
+ // Scrolling with PageUp and PgDn.
+ if (clockwise) {
+ tap_code16(KC_PGDN);
+ } else {
+ tap_code16(KC_PGUP);
+ }
+ break;
+ default:
+ if (clockwise) {
+ tap_code16(A(KC_TAB));
+ } else {
+ tap_code16(A(S(KC_TAB)));
+ }
+ break;
+ }
+ }
+}
+#endif
diff --git a/keyboards/tkw/stoutgat/v2/readme.md b/keyboards/tkw/stoutgat/v2/readme.md
new file mode 100644
index 000000000000..192fca3d16f3
--- /dev/null
+++ b/keyboards/tkw/stoutgat/v2/readme.md
@@ -0,0 +1,15 @@
+# stoutgat v2
+
+![stoutgatv2](https://i.imgur.com/CCiP2Ffl.jpg)
+
+ARM 65% mechanical keyboard with RGB underglow and dual encoders.
+
+* Keyboard Maintainer: [vattern](https://github.com/vattern)
+* Hardware Supported: f411 blackpill
+* Hardware Availability: [stoutgatv2](https://github.com/vattern/stoutgatv2)
+
+Make example for this keyboard (after setting up your build environment):
+
+ qmk flash -kb tkw/stoutgat/v2 -km default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/tkw/stoutgat/v2/rules.mk b/keyboards/tkw/stoutgat/v2/rules.mk
new file mode 100644
index 000000000000..587a17780a63
--- /dev/null
+++ b/keyboards/tkw/stoutgat/v2/rules.mk
@@ -0,0 +1,24 @@
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+KEYBOARD_SHARED_EP = yes # Free up some extra endpoints - needed if console+mouse+extra
+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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+ENCODER_ENABLE = yes # Enable rotary encoder support
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
+WS2812_DRIVER = pwm
+OPT_DEFS += -DSTM32_DMA_REQUIRED=TRUE
+
+DEFAULT_FOLDER = tkw/stoutgat/v2/f411
+LAYOUTS = 65_iso 65_ansi
diff --git a/keyboards/tkw/stoutgat/v2/v2.c b/keyboards/tkw/stoutgat/v2/v2.c
new file mode 100644
index 000000000000..030f056abf2a
--- /dev/null
+++ b/keyboards/tkw/stoutgat/v2/v2.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 Thys de Wet
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "v2.h"
diff --git a/keyboards/tkw/stoutgat/v2/v2.h b/keyboards/tkw/stoutgat/v2/v2.h
new file mode 100644
index 000000000000..ff44742ff564
--- /dev/null
+++ b/keyboards/tkw/stoutgat/v2/v2.h
@@ -0,0 +1,75 @@
+/* Copyright 2020 Thys de Wet
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#define _x_ KC_NO
+
+#include "quantum.h"
+
+#define LAYOUT_encoder( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K1D, K2E, \
+ K44, K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K46, K49, K4A, K4B, K4C, K4D, K4E \
+) { \
+{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, _x_, K2E }, \
+{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+{ K40, K41, K42, _x_, K44, _x_, K46, _x_, _x_, K49, K4A, K4B, K4C, K4D, K4E } \
+}
+#define LAYOUT_65_iso( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K1D, K2E, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K46, K49, K4A, K4B, K4C, K4D, K4E \
+) { \
+{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, _x_, K2E }, \
+{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+{ K40, K41, K42, _x_, _x_, _x_, K46, _x_, _x_, K49, K4A, K4B, K4C, K4D, K4E } \
+}
+
+#define LAYOUT_65_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K46, K49, K4A, K4B, K4C, K4D, K4E \
+) { \
+{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, _x_, K2D, K2E }, \
+{ K30, _x_, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+{ K40, K41, K42, _x_, _x_, _x_, K46, _x_, _x_, K49, K4A, K4B, K4C, K4D, K4E} \
+}
+
+#define LAYOUT_65_ansi_blocker( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K46, K49, K4B, K4C, K4D, K4E \
+) { \
+{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, _x_, K2E }, \
+{ K30, _x_, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+{ K40, K41, K42, _x_, _x_, _x_, K46, _x_, _x_, K49, _x_, K4B, K4C, K4D, K4E} \
+}
From 97122d203bf443eda8ff63865223cc96bcc695f4 Mon Sep 17 00:00:00 2001
From: Xelus22 <17491233+Xelus22@users.noreply.github.com>
Date: Wed, 16 Sep 2020 16:16:01 +1000
Subject: [PATCH 015/178] [Core] DYNAMIC_KEYMAP_EEPROM_MAX_ADDR check (#10315)
* add error check
* remove quotes
* update error message
Co-authored-by: Ryan
Co-authored-by: Ryan
---
quantum/dynamic_keymap.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/quantum/dynamic_keymap.c b/quantum/dynamic_keymap.c
index 27ee6a284055..0608b469c088 100644
--- a/quantum/dynamic_keymap.c
+++ b/quantum/dynamic_keymap.c
@@ -42,6 +42,11 @@
# endif
#endif
+// Due to usage of uint16_t check for max 65535
+#if DYNAMIC_KEYMAP_EEPROM_MAX_ADDR > 65535
+# error DYNAMIC_KEYMAP_EEPROM_MAX_ADDR must be less than 65536
+#endif
+
// If DYNAMIC_KEYMAP_EEPROM_ADDR not explicitly defined in config.h,
// default it start after VIA_EEPROM_CUSTOM_ADDR+VIA_EEPROM_CUSTOM_SIZE
#ifndef DYNAMIC_KEYMAP_EEPROM_ADDR
From 424eeb8af738697e05446c0949099416955df226 Mon Sep 17 00:00:00 2001
From: Adam Gwilliam
Date: Wed, 16 Sep 2020 18:57:09 -0500
Subject: [PATCH 016/178] add VIA support for boardsource/5x12 (#10236)
* add via support for boardsource/5x12
* make product id for 5x12 unique (there is already an 0x0512) by setting it to 0x5012
* un-swap the readme's for 3x4 and 5x12
* Update keyboards/boardsource/5x12/config.h
update vendor id
* Update keyboards/boardsource/5x12/keymaps/via/keymap.c
use correct number of layers for VIA
* update product id to use same pattern as others
* Update keyboards/boardsource/5x12/keymaps/via/readme.md
* Update keyboards/boardsource/5x12/keymaps/via/readme.md
---
keyboards/boardsource/5x12/config.h | 4 +-
.../boardsource/5x12/keymaps/via/keymap.c | 46 +++++++++++++++++++
.../boardsource/5x12/keymaps/via/readme.md | 5 ++
.../boardsource/5x12/keymaps/via/rules.mk | 1 +
4 files changed, 54 insertions(+), 2 deletions(-)
create mode 100644 keyboards/boardsource/5x12/keymaps/via/keymap.c
create mode 100644 keyboards/boardsource/5x12/keymaps/via/readme.md
create mode 100644 keyboards/boardsource/5x12/keymaps/via/rules.mk
diff --git a/keyboards/boardsource/5x12/config.h b/keyboards/boardsource/5x12/config.h
index 1cd7101589aa..05a8ce2b0612 100644
--- a/keyboards/boardsource/5x12/config.h
+++ b/keyboards/boardsource/5x12/config.h
@@ -3,8 +3,8 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xF7E0
-#define PRODUCT_ID 0x0412
+#define VENDOR_ID 0x4273 // "Bs" - Boardsource
+#define PRODUCT_ID 0x0512
#define DEVICE_VER 0x0000
#define MANUFACTURER Boardsource
#define PRODUCT 5x12
diff --git a/keyboards/boardsource/5x12/keymaps/via/keymap.c b/keyboards/boardsource/5x12/keymaps/via/keymap.c
new file mode 100644
index 000000000000..5b97e9951da4
--- /dev/null
+++ b/keyboards/boardsource/5x12/keymaps/via/keymap.c
@@ -0,0 +1,46 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _MAIN,
+ _RAISE,
+ _LOWER,
+};
+
+// Readability keycodes
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_MAIN] = LAYOUT_ortho_5x12(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ KC_PIPE, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ [_RAISE] = LAYOUT_ortho_5x12(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ _______, KC_4, KC_5, KC_6, KC_PLUS, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
+ KC_ENT, KC_7, KC_8, KC_9, KC_MINS, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_MUTE, _______, KC_BSLS,
+ RESET, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ [_LOWER] = LAYOUT_ortho_5x12(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RESET, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+ [3] = LAYOUT_ortho_5x12(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ )
+
+};
diff --git a/keyboards/boardsource/5x12/keymaps/via/readme.md b/keyboards/boardsource/5x12/keymaps/via/readme.md
new file mode 100644
index 000000000000..d088e0a64cf1
--- /dev/null
+++ b/keyboards/boardsource/5x12/keymaps/via/readme.md
@@ -0,0 +1,5 @@
+# The via keymap for boardsource 5x12 ortholinear keyboard
+
+This folder contains the [VIA](https://caniusevia.com/) configuration for the boardsource 5x12 ortholinear keyboard
+
+Maintained by: [gwillad](https://github.com/gwillad)
diff --git a/keyboards/boardsource/5x12/keymaps/via/rules.mk b/keyboards/boardsource/5x12/keymaps/via/rules.mk
new file mode 100644
index 000000000000..036bd6d1c3ec
--- /dev/null
+++ b/keyboards/boardsource/5x12/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
From e9b3a12c6e43444f5f6a6e3f63b5e4ece80740eb Mon Sep 17 00:00:00 2001
From: Joel Challis
Date: Thu, 17 Sep 2020 01:42:24 +0100
Subject: [PATCH 017/178] Fix ssd1306 compilation on avr-gcc 10 (#9267)
---
drivers/avr/ssd1306.c | 2 ++
drivers/avr/ssd1306.h | 2 +-
keyboards/claw44/ssd1306.c | 2 ++
keyboards/claw44/ssd1306.h | 2 +-
keyboards/comet46/ssd1306.c | 2 ++
keyboards/comet46/ssd1306.h | 2 +-
keyboards/crkbd/ssd1306.c | 2 ++
keyboards/crkbd/ssd1306.h | 2 +-
keyboards/helix/local_drivers/ssd1306.c | 2 ++
keyboards/helix/local_drivers/ssd1306.h | 2 +-
keyboards/yosino58/ssd1306.c | 2 ++
keyboards/yosino58/ssd1306.h | 2 +-
12 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/drivers/avr/ssd1306.c b/drivers/avr/ssd1306.c
index 205f749502b8..1a09a2bcb789 100644
--- a/drivers/avr/ssd1306.c
+++ b/drivers/avr/ssd1306.c
@@ -11,6 +11,8 @@
# include "sendchar.h"
# include "timer.h"
+struct CharacterMatrix display;
+
// Set this to 1 to help diagnose early startup problems
// when testing power-on with ble. Turn it off otherwise,
// as the latency of printing most of the debug info messes
diff --git a/drivers/avr/ssd1306.h b/drivers/avr/ssd1306.h
index 9669d1b7e77e..9131afcf6122 100644
--- a/drivers/avr/ssd1306.h
+++ b/drivers/avr/ssd1306.h
@@ -66,7 +66,7 @@ struct CharacterMatrix {
bool dirty;
};
-struct CharacterMatrix display;
+extern struct CharacterMatrix display;
bool iota_gfx_init(void);
void iota_gfx_task(void);
diff --git a/keyboards/claw44/ssd1306.c b/keyboards/claw44/ssd1306.c
index e04a431357c3..7dea1cc176f0 100644
--- a/keyboards/claw44/ssd1306.c
+++ b/keyboards/claw44/ssd1306.c
@@ -10,6 +10,8 @@
#include "sendchar.h"
#include "timer.h"
+struct CharacterMatrix display;
+
extern const unsigned char font[] PROGMEM;
// Set this to 1 to help diagnose early startup problems
diff --git a/keyboards/claw44/ssd1306.h b/keyboards/claw44/ssd1306.h
index 0ca093093a17..11a3cc67f449 100644
--- a/keyboards/claw44/ssd1306.h
+++ b/keyboards/claw44/ssd1306.h
@@ -65,7 +65,7 @@ struct CharacterMatrix {
bool dirty;
};
-struct CharacterMatrix display;
+extern struct CharacterMatrix display;
bool iota_gfx_init(bool rotate);
void iota_gfx_task(void);
diff --git a/keyboards/comet46/ssd1306.c b/keyboards/comet46/ssd1306.c
index abbed4a49fb9..4bd2d80bc4d4 100644
--- a/keyboards/comet46/ssd1306.c
+++ b/keyboards/comet46/ssd1306.c
@@ -10,6 +10,8 @@
#include "sendchar.h"
#include "timer.h"
+struct CharacterMatrix display;
+
extern const unsigned char font[] PROGMEM;
// Set this to 1 to help diagnose early startup problems
diff --git a/keyboards/comet46/ssd1306.h b/keyboards/comet46/ssd1306.h
index 0ca093093a17..11a3cc67f449 100644
--- a/keyboards/comet46/ssd1306.h
+++ b/keyboards/comet46/ssd1306.h
@@ -65,7 +65,7 @@ struct CharacterMatrix {
bool dirty;
};
-struct CharacterMatrix display;
+extern struct CharacterMatrix display;
bool iota_gfx_init(bool rotate);
void iota_gfx_task(void);
diff --git a/keyboards/crkbd/ssd1306.c b/keyboards/crkbd/ssd1306.c
index b2676f386f24..4ec8a9a00f0a 100644
--- a/keyboards/crkbd/ssd1306.c
+++ b/keyboards/crkbd/ssd1306.c
@@ -10,6 +10,8 @@
#include "sendchar.h"
#include "timer.h"
+struct CharacterMatrix display;
+
extern const unsigned char font[] PROGMEM;
#ifndef OLED_BLANK_CHAR
diff --git a/keyboards/crkbd/ssd1306.h b/keyboards/crkbd/ssd1306.h
index 0ca093093a17..11a3cc67f449 100644
--- a/keyboards/crkbd/ssd1306.h
+++ b/keyboards/crkbd/ssd1306.h
@@ -65,7 +65,7 @@ struct CharacterMatrix {
bool dirty;
};
-struct CharacterMatrix display;
+extern struct CharacterMatrix display;
bool iota_gfx_init(bool rotate);
void iota_gfx_task(void);
diff --git a/keyboards/helix/local_drivers/ssd1306.c b/keyboards/helix/local_drivers/ssd1306.c
index 00b2fb0eec36..c6fc4b78544f 100644
--- a/keyboards/helix/local_drivers/ssd1306.c
+++ b/keyboards/helix/local_drivers/ssd1306.c
@@ -16,6 +16,8 @@
#include "sendchar.h"
#include "timer.h"
+struct CharacterMatrix display;
+
// Set this to 1 to help diagnose early startup problems
// when testing power-on with ble. Turn it off otherwise,
// as the latency of printing most of the debug info messes
diff --git a/keyboards/helix/local_drivers/ssd1306.h b/keyboards/helix/local_drivers/ssd1306.h
index f9f91c6fedf5..bcb30f88595d 100644
--- a/keyboards/helix/local_drivers/ssd1306.h
+++ b/keyboards/helix/local_drivers/ssd1306.h
@@ -66,7 +66,7 @@ struct CharacterMatrix {
bool dirty;
};
-struct CharacterMatrix display;
+extern struct CharacterMatrix display;
bool iota_gfx_init(bool rotate);
void iota_gfx_task(void);
diff --git a/keyboards/yosino58/ssd1306.c b/keyboards/yosino58/ssd1306.c
index ff6ba210d1fb..abd9de2f7a08 100644
--- a/keyboards/yosino58/ssd1306.c
+++ b/keyboards/yosino58/ssd1306.c
@@ -10,6 +10,8 @@
#include "sendchar.h"
#include "timer.h"
+struct CharacterMatrix display;
+
extern const unsigned char font[] PROGMEM;
// Set this to 1 to help diagnose early startup problems
diff --git a/keyboards/yosino58/ssd1306.h b/keyboards/yosino58/ssd1306.h
index acaf6217ef05..35e4c144cc7b 100644
--- a/keyboards/yosino58/ssd1306.h
+++ b/keyboards/yosino58/ssd1306.h
@@ -70,7 +70,7 @@ struct CharacterMatrix {
bool dirty;
};
-struct CharacterMatrix display;
+extern struct CharacterMatrix display;
bool iota_gfx_init(bool rotate);
void iota_gfx_task(void);
From 410d09675a58f1890c24068066bb8eace21c2416 Mon Sep 17 00:00:00 2001
From: Joel Challis
Date: Thu, 17 Sep 2020 01:45:07 +0100
Subject: [PATCH 018/178] Fix TWIlib compilation on avr-gcc 10 (#9273)
---
keyboards/lfkeyboards/TWIlib.c | 13 +++++++++++++
keyboards/lfkeyboards/TWIlib.h | 12 +-----------
keyboards/meira/TWIlib.c | 13 +++++++++++++
keyboards/meira/TWIlib.h | 12 +-----------
4 files changed, 28 insertions(+), 22 deletions(-)
diff --git a/keyboards/lfkeyboards/TWIlib.c b/keyboards/lfkeyboards/TWIlib.c
index abb12cc87ace..dc4fbf016bbf 100644
--- a/keyboards/lfkeyboards/TWIlib.c
+++ b/keyboards/lfkeyboards/TWIlib.c
@@ -11,6 +11,19 @@
#include "util/delay.h"
#include "print.h"
+// Global transmit buffer
+volatile uint8_t *TWITransmitBuffer;
+// Global receive buffer
+volatile uint8_t TWIReceiveBuffer[RXMAXBUFLEN];
+// Buffer indexes
+volatile int TXBuffIndex; // Index of the transmit buffer. Is volatile, can change at any time.
+int RXBuffIndex; // Current index in the receive buffer
+// Buffer lengths
+int TXBuffLen; // The total length of the transmit buffer
+int RXBuffLen; // The total number of bytes to read (should be less than RXMAXBUFFLEN)
+
+TWIInfoStruct TWIInfo;
+
void TWIInit()
{
TWIInfo.mode = Ready;
diff --git a/keyboards/lfkeyboards/TWIlib.h b/keyboards/lfkeyboards/TWIlib.h
index 6db3cc9513e0..8ba261c6e554 100644
--- a/keyboards/lfkeyboards/TWIlib.h
+++ b/keyboards/lfkeyboards/TWIlib.h
@@ -16,16 +16,6 @@
#define TXMAXBUFLEN 20
// Receive buffer length
#define RXMAXBUFLEN 20
-// Global transmit buffer
-volatile uint8_t *TWITransmitBuffer;
-// Global receive buffer
-volatile uint8_t TWIReceiveBuffer[RXMAXBUFLEN];
-// Buffer indexes
-volatile int TXBuffIndex; // Index of the transmit buffer. Is volatile, can change at any time.
-int RXBuffIndex; // Current index in the receive buffer
-// Buffer lengths
-int TXBuffLen; // The total length of the transmit buffer
-int RXBuffLen; // The total number of bytes to read (should be less than RXMAXBUFFLEN)
typedef enum {
Ready,
@@ -42,8 +32,8 @@ typedef enum {
uint8_t errorCode;
uint8_t repStart;
}TWIInfoStruct;
-TWIInfoStruct TWIInfo;
+extern TWIInfoStruct TWIInfo;
// TWI Status Codes
#define TWI_START_SENT 0x08 // Start sent
diff --git a/keyboards/meira/TWIlib.c b/keyboards/meira/TWIlib.c
index 8e0c974381f1..4091429b4efe 100755
--- a/keyboards/meira/TWIlib.c
+++ b/keyboards/meira/TWIlib.c
@@ -11,6 +11,19 @@
#include "util/delay.h"
#include "print.h"
+// Global transmit buffer
+volatile uint8_t *TWITransmitBuffer;
+// Global receive buffer
+volatile uint8_t TWIReceiveBuffer[RXMAXBUFLEN];
+// Buffer indexes
+volatile int TXBuffIndex; // Index of the transmit buffer. Is volatile, can change at any time.
+int RXBuffIndex; // Current index in the receive buffer
+// Buffer lengths
+int TXBuffLen; // The total length of the transmit buffer
+int RXBuffLen; // The total number of bytes to read (should be less than RXMAXBUFFLEN)
+
+TWIInfoStruct TWIInfo;
+
void TWIInit()
{
TWIInfo.mode = Ready;
diff --git a/keyboards/meira/TWIlib.h b/keyboards/meira/TWIlib.h
index 6db3cc9513e0..8ba261c6e554 100755
--- a/keyboards/meira/TWIlib.h
+++ b/keyboards/meira/TWIlib.h
@@ -16,16 +16,6 @@
#define TXMAXBUFLEN 20
// Receive buffer length
#define RXMAXBUFLEN 20
-// Global transmit buffer
-volatile uint8_t *TWITransmitBuffer;
-// Global receive buffer
-volatile uint8_t TWIReceiveBuffer[RXMAXBUFLEN];
-// Buffer indexes
-volatile int TXBuffIndex; // Index of the transmit buffer. Is volatile, can change at any time.
-int RXBuffIndex; // Current index in the receive buffer
-// Buffer lengths
-int TXBuffLen; // The total length of the transmit buffer
-int RXBuffLen; // The total number of bytes to read (should be less than RXMAXBUFFLEN)
typedef enum {
Ready,
@@ -42,8 +32,8 @@ typedef enum {
uint8_t errorCode;
uint8_t repStart;
}TWIInfoStruct;
-TWIInfoStruct TWIInfo;
+extern TWIInfoStruct TWIInfo;
// TWI Status Codes
#define TWI_START_SENT 0x08 // Start sent
From f650b03fb77530eb6aa7eab541f6a28c98e0ced6 Mon Sep 17 00:00:00 2001
From: Dan White
Date: Wed, 16 Sep 2020 22:03:28 -0600
Subject: [PATCH 019/178] [Keymap] Badger keymaps/userspace (#10239)
* Badger keymaps
* bug fix - linter
* code review feedback and ortholinear bugs
* cleanup
* backing out suspect bug after doing additional research
* code review feedback
* code review feedback
* changing default badger keymap and small bugfix
---
.../1up60hte/keymaps/badger/keymap.c | 59 +++++++
keyboards/1upkeyboards/1up60rgb/1up60rgb.h | 30 ++++
keyboards/1upkeyboards/1up60rgb/info.json | 56 ++++++-
.../1up60rgb/keymaps/badger/keymap.c | 59 +++++++
.../clueboard/66/keymaps/badger/keymap.c | 53 ++++++
.../dz60rgb_ansi/keymaps/badger/keymap.c | 60 +++++++
keyboards/planck/keymaps/badger/keymap.c | 60 +++++++
keyboards/preonic/keymaps/badger/keymap.c | 74 +++++++++
keyboards/preonic/keymaps/badger/readme.md | 21 +++
users/badger/README.md | 31 ++++
users/badger/badger.c | 49 ++++++
users/badger/badger.h | 109 +++++++++++++
users/badger/ortho.c | 151 ++++++++++++++++++
users/badger/ortho.h | 58 +++++++
users/badger/rules.mk | 2 +
15 files changed, 867 insertions(+), 5 deletions(-)
create mode 100644 keyboards/1upkeyboards/1up60hte/keymaps/badger/keymap.c
create mode 100644 keyboards/1upkeyboards/1up60rgb/keymaps/badger/keymap.c
create mode 100644 keyboards/clueboard/66/keymaps/badger/keymap.c
create mode 100644 keyboards/dztech/dz60rgb_ansi/keymaps/badger/keymap.c
create mode 100644 keyboards/planck/keymaps/badger/keymap.c
create mode 100644 keyboards/preonic/keymaps/badger/keymap.c
create mode 100644 keyboards/preonic/keymaps/badger/readme.md
create mode 100644 users/badger/README.md
create mode 100644 users/badger/badger.c
create mode 100644 users/badger/badger.h
create mode 100644 users/badger/ortho.c
create mode 100644 users/badger/ortho.h
create mode 100644 users/badger/rules.mk
diff --git a/keyboards/1upkeyboards/1up60hte/keymaps/badger/keymap.c b/keyboards/1upkeyboards/1up60hte/keymaps/badger/keymap.c
new file mode 100644
index 000000000000..8e64c543d524
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60hte/keymaps/badger/keymap.c
@@ -0,0 +1,59 @@
+/*
+Copyright 2020 Dan White
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "badger.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY_MAC] = LAYOUT_tsangan(\
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
+ 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, \
+ MOVE_MAC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, CFG_MAC, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, ADJUST, KC_RALT, KC_RGUI),
+
+ [_MOVE_MAC] = LAYOUT_tsangan(\
+ MAC_FRC, MM_LEFT, MM_RGHT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_0, IJ_TOP, IJ_BOTT, _______, _______, \
+ KC_BACK, IJ_STEP, IJ_INTO, IJ_OUT, IJ_RUN, IJ_STOP, _______, WD_BACK, KC_HOME, KC_END, WD_FRWD, IJ_BACK, IJ_FWD, KC_NEXT, \
+ _______, MM_LH, MM_MAX, MM_RH, IJ_FIND, IJ_IMPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CM_RIGHT, CM_DOWN, _______, \
+ _______, MM_UH, MM_BH, MAC_CPY, MAC_PST, IJ_IMPH, _______, IJ_REN, IJ_IMPL, IJ_DECL, IJ_USAG, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______),
+
+ [_QWERTY_LINUX] = LAYOUT_tsangan(\
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
+ 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, \
+ MOVE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, CFG_LNX, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, ADJUST, KC_RALT, KC_RGUI),
+
+ [_MOVE_LINUX] = LAYOUT_tsangan(\
+ KC_GRV, VD_1, VD_2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, \
+ KC_BACK, WM_VD1, WM_UH, WM_VD2, RESET, KC_MSTP, KC_MPLY, KC_PGUP, KC_HOME, KC_END, KC_PGDN, _______, _______, KC_NEXT, \
+ _______, WM_LH, WM_MAX, WM_RH, WD_FRWD, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CS_RIGHT, CS_DOWN, _______, \
+ _______, WM_VD3, WM_BH, OS_COPY, OS_PAST, WD_BACK, KC_MNXT, KC_MUTE, KC_WBAK, KC_WFWD, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______),
+
+ [_ADJUST] = LAYOUT_tsangan(\
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, \
+ _______, _______, _______, _______, KC_WREF, KC_MSTP, KC_MPLY, KC_PGUP, _______, _______, KC_PGDN, KC_VOLD, KC_VOLU, KC_INS, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, KC_CAPS, _______, KC_MPRV, KC_MNXT, KC_MUTE, KC_WBAK, KC_WFWD, KC_WSCH, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______),
+
+ [_CONFIG] = LAYOUT_tsangan(\
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, \
+ _______, NK_ON, NK_OFF, EEP_RST, RESET, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \
+ _______, GE_SWAP, GE_NORM, DEBUG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_SPI, RGB_M_B, _______, _______, RGB_TOG, _______, \
+ _______, DF_1, DF_2, _______, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_SPD, RGB_M_K, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______)
+};
diff --git a/keyboards/1upkeyboards/1up60rgb/1up60rgb.h b/keyboards/1upkeyboards/1up60rgb/1up60rgb.h
index 61d064abb7a2..5ee6c12bcf5b 100644
--- a/keyboards/1upkeyboards/1up60rgb/1up60rgb.h
+++ b/keyboards/1upkeyboards/1up60rgb/1up60rgb.h
@@ -33,6 +33,21 @@
{ k40, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, k4A, k4B, XXX, k4D, k4E } \
}
+/* ANSI-Tsangan variant, with split right shift key */
+#define LAYOUT_60_ansi_tsangan_split_rshift( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2E, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, k3E, \
+ k40, k41, k43, k46, k4B, k4D, k4E \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0D }, \
+ { k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E }, \
+ { k20, XXX, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2E, XXX }, \
+ { k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, XXX, k3D, k3E }, \
+ { k40, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, XXX, k4B, XXX, k4D, k4E } \
+}
+
/* ISO variant. Remove useless ANSI keys */
#define LAYOUT_60_iso( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, \
@@ -63,6 +78,21 @@
{ k40, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, k4A, k4B, XXX, k4D, k4E } \
}
+/* ANSI Variant */
+#define LAYOUT_60_ansi_split_rshift( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2E, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, k3E, \
+ k40, k41, k43, k46, k4A, k4B, k4D, k4E \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0D }, \
+ { k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E }, \
+ { k20, XXX, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2E, XXX }, \
+ { k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, XXX, k3D, k3E }, \
+ { k40, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, k4A, k4B, XXX, k4D, k4E } \
+}
+
/* HHKB Variant */
#define LAYOUT_60_hhkb( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, \
diff --git a/keyboards/1upkeyboards/1up60rgb/info.json b/keyboards/1upkeyboards/1up60rgb/info.json
index 2185f0bb1910..9f6ed62189ff 100644
--- a/keyboards/1upkeyboards/1up60rgb/info.json
+++ b/keyboards/1upkeyboards/1up60rgb/info.json
@@ -6,22 +6,68 @@
"height": 5,
"layouts": {
"LAYOUT_all": {
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ "layout": [
+ {"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25},
+ {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
},
"LAYOUT_60_ansi": {
- "layout": [{"x":0, "y":0, "label":"~"}, {"x":1, "y":0, "label":"!"}, {"x":2, "y":0, "label":"@"}, {"x":3, "y":0, "label":"#"}, {"x":4, "y":0, "label":"$"}, {"x":5, "y":0, "label":"%"}, {"x":6, "y":0, "label":"^"}, {"x":7, "y":0, "label":"&"}, {"x":8, "y":0, "label":"*"}, {"x":9, "y":0, "label":"("}, {"x":10, "y":0, "label":")"}, {"x":11, "y":0, "label":"_"}, {"x":12, "y":0, "label":"+"}, {"x":13, "y":0, "label":"Backspace", "w":2}, {"x":0, "y":1, "label":"Tab", "w":1.5}, {"x":1.5, "y":1, "label":"Q"}, {"x":2.5, "y":1, "label":"W"}, {"x":3.5, "y":1, "label":"E"}, {"x":4.5, "y":1, "label":"R"}, {"x":5.5, "y":1, "label":"T"}, {"x":6.5, "y":1, "label":"Y"}, {"x":7.5, "y":1, "label":"U"}, {"x":8.5, "y":1, "label":"I"}, {"x":9.5, "y":1, "label":"O"}, {"x":10.5, "y":1, "label":"P"}, {"x":11.5, "y":1, "label":"{"}, {"x":12.5, "y":1, "label":"}"}, {"x":13.5, "y":1, "label":"|", "w":1.5}, {"x":0, "y":2, "label":"Caps Lock", "w":1.75}, {"x":1.75, "y":2, "label":"A"}, {"x":2.75, "y":2, "label":"S"}, {"x":3.75, "y":2, "label":"D"}, {"x":4.75, "y":2, "label":"F"}, {"x":5.75, "y":2, "label":"G"}, {"x":6.75, "y":2, "label":"H"}, {"x":7.75, "y":2, "label":"J"}, {"x":8.75, "y":2, "label":"K"}, {"x":9.75, "y":2, "label":"L"}, {"x":10.75, "y":2, "label":":"}, {"x":11.75, "y":2, "label":"\""}, {"x":12.75, "y":2, "label":"Enter", "w":2.25}, {"x":0, "y":3, "label":"Shift", "w":2.25}, {"x":2.25, "y":3, "label":"Z"}, {"x":3.25, "y":3, "label":"X"}, {"x":4.25, "y":3, "label":"C"}, {"x":5.25, "y":3, "label":"V"}, {"x":6.25, "y":3, "label":"B"}, {"x":7.25, "y":3, "label":"N"}, {"x":8.25, "y":3, "label":"M"}, {"x":9.25, "y":3, "label":"<"}, {"x":10.25, "y":3, "label":">"}, {"x":11.25, "y":3, "label":"?"}, {"x":12.25, "y":3, "label":"Shift", "w":2.75}, {"x":0, "y":4, "label":"Ctrl", "w":1.25}, {"x":1.25, "y":4, "label":"Win", "w":1.25}, {"x":2.5, "y":4, "label":"Alt", "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "label":"Alt", "w":1.25}, {"x":11.25, "y":4, "label":"Win", "w":1.25}, {"x":12.5, "y":4, "label":"Menu", "w":1.25}, {"x":13.75, "y":4, "label":"Ctrl", "w":1.25}]
+ "layout": [
+ {"x":0, "y":0, "label":"~"}, {"x":1, "y":0, "label":"!"}, {"x":2, "y":0, "label":"@"}, {"x":3, "y":0, "label":"#"}, {"x":4, "y":0, "label":"$"}, {"x":5, "y":0, "label":"%"}, {"x":6, "y":0, "label":"^"}, {"x":7, "y":0, "label":"&"}, {"x":8, "y":0, "label":"*"}, {"x":9, "y":0, "label":"("}, {"x":10, "y":0, "label":")"}, {"x":11, "y":0, "label":"_"}, {"x":12, "y":0, "label":"+"}, {"x":13, "y":0, "label":"Backspace", "w":2},
+ {"x":0, "y":1, "label":"Tab", "w":1.5}, {"x":1.5, "y":1, "label":"Q"}, {"x":2.5, "y":1, "label":"W"}, {"x":3.5, "y":1, "label":"E"}, {"x":4.5, "y":1, "label":"R"}, {"x":5.5, "y":1, "label":"T"}, {"x":6.5, "y":1, "label":"Y"}, {"x":7.5, "y":1, "label":"U"}, {"x":8.5, "y":1, "label":"I"}, {"x":9.5, "y":1, "label":"O"}, {"x":10.5, "y":1, "label":"P"}, {"x":11.5, "y":1, "label":"{"}, {"x":12.5, "y":1, "label":"}"}, {"x":13.5, "y":1, "label":"|", "w":1.5},
+ {"x":0, "y":2, "label":"Caps Lock", "w":1.75}, {"x":1.75, "y":2, "label":"A"}, {"x":2.75, "y":2, "label":"S"}, {"x":3.75, "y":2, "label":"D"}, {"x":4.75, "y":2, "label":"F"}, {"x":5.75, "y":2, "label":"G"}, {"x":6.75, "y":2, "label":"H"}, {"x":7.75, "y":2, "label":"J"}, {"x":8.75, "y":2, "label":"K"}, {"x":9.75, "y":2, "label":"L"}, {"x":10.75, "y":2, "label":":"}, {"x":11.75, "y":2, "label":"\""}, {"x":12.75, "y":2, "label":"Enter", "w":2.25},
+ {"x":0, "y":3, "label":"Shift", "w":2.25}, {"x":2.25, "y":3, "label":"Z"}, {"x":3.25, "y":3, "label":"X"}, {"x":4.25, "y":3, "label":"C"}, {"x":5.25, "y":3, "label":"V"}, {"x":6.25, "y":3, "label":"B"}, {"x":7.25, "y":3, "label":"N"}, {"x":8.25, "y":3, "label":"M"}, {"x":9.25, "y":3, "label":"<"}, {"x":10.25, "y":3, "label":">"}, {"x":11.25, "y":3, "label":"?"}, {"x":12.25, "y":3, "label":"Shift", "w":2.75},
+ {"x":0, "y":4, "label":"Ctrl", "w":1.25}, {"x":1.25, "y":4, "label":"Win", "w":1.25}, {"x":2.5, "y":4, "label":"Alt", "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "label":"Alt", "w":1.25}, {"x":11.25, "y":4, "label":"Win", "w":1.25}, {"x":12.5, "y":4, "label":"Menu", "w":1.25}, {"x":13.75, "y":4, "label":"Ctrl", "w":1.25}]
},
"LAYOUT_60_iso": {
- "layout": [{"label":"\u00ac", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"\u00a3", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ "layout": [
+ {"label":"\u00ac", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"\u00a3", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2},
+ {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
},
"LAYOUT_60_ansi_split_bs_rshift": {
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":6}, {"label":"Alt", "x":10, "y":4, "w":1.5}, {"label":"Win", "x":11.5, "y":4}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
+ "layout": [
+ {"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":6}, {"label":"Alt", "x":10, "y":4, "w":1.5}, {"label":"Win", "x":11.5, "y":4}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
},
+
+ "LAYOUT_60_ansi_split_rshift": {
+ "layout": [
+ {"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0, "w":2},
+ {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Esc", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Alt", "x":1.25, "y":4, "w": 1.25}, {"label":"Gui", "x":2.5, "y":4, "w":1.25}, {"label": "Space", "x":3.75, "y":4, "w":6.25}, {"label":"Fn", "x":10, "y":4, "w":1.25}, {"label":"Gui", "x":11.25, "y":4, "w": 1.25}, {"label":"Alt", "x":12.5, "y":4, "w": 1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
+ },
+
+ "LAYOUT_60_ansi_tsangan_split_rshift": {
+ "layout": [
+ {"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label": "Bksp", "x":13, "y":0, "w":2},
+ {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Esc", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label": "Alt Gr", "x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Alt", "x":1.5, "y":4}, {"label":"GUI", "x":2.5, "y":4, "w":1.5}, {"label":"space", "x":4, "y":4, "w":7}, {"label":"Fn", "x":11, "y":4, "w":1.5}, {"label":"Alt", "x":12.5, "y":4}, {"label":"GUI", "x":13.5, "y":4, "w": 1.5}
+ ]
+ },
+
"LAYOUT_60_hhkb": {
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Delete", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}]
+ "layout": [
+ {"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Delete", "x":13.5, "y":1, "w":1.5},
+ {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3},
+ {"label":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}]
}
}
}
diff --git a/keyboards/1upkeyboards/1up60rgb/keymaps/badger/keymap.c b/keyboards/1upkeyboards/1up60rgb/keymaps/badger/keymap.c
new file mode 100644
index 000000000000..5229657bc6bd
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60rgb/keymaps/badger/keymap.c
@@ -0,0 +1,59 @@
+/*
+Copyright 2020 Dan White
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "badger.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY_MAC] = LAYOUT_60_ansi_tsangan_split_rshift(\
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ MOVE_MAC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, CFG_MAC, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, ADJUST, KC_RALT, KC_RGUI),
+
+ [_MOVE_MAC] = LAYOUT_60_ansi_tsangan_split_rshift(\
+ MAC_FRC, MM_LEFT, MM_RGHT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_0, IJ_TOP, IJ_BOTT, KC_DEL, \
+ KC_BACK, IJ_STEP, IJ_INTO, IJ_OUT, IJ_RUN, IJ_STOP, _______, WD_BACK, KC_HOME, KC_END, WD_FRWD, IJ_BACK, IJ_FWD, KC_NEXT, \
+ _______, MM_LH, MM_MAX, MM_RH, IJ_FIND, IJ_IMPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CM_RIGHT, CM_DOWN, _______, \
+ _______, MM_UH, MM_BH, MAC_CPY, MAC_PST, IJ_IMPH, _______, IJ_REN, IJ_IMPL, IJ_DECL, IJ_USAG, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______),
+
+ [_QWERTY_LINUX] = LAYOUT_60_ansi_tsangan_split_rshift(\
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ MOVE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, CFG_LNX, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, ADJUST, KC_LALT, KC_RGUI),
+
+ [_MOVE_LINUX] = LAYOUT_60_ansi_tsangan_split_rshift(\
+ KC_GRV, VD_1, VD_2, VD_3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ KC_BACK, WM_VD1, WM_UH, WM_VD2, RESET, KC_MSTP, KC_MPLY, KC_PGUP, KC_HOME, KC_END, KC_PGDN, _______, _______, KC_NEXT, \
+ _______, WM_LH, WM_MAX, WM_RH, WD_FRWD, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CS_RIGHT, CS_DOWN, _______, \
+ _______, WM_VD3, WM_BH, OS_COPY, OS_PAST, WD_BACK, KC_MNXT, KC_MUTE, KC_WBAK, KC_WFWD, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______),
+
+ [_ADJUST] = LAYOUT_60_ansi_tsangan_split_rshift(\
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ _______, _______, _______, _______, KC_WREF, KC_MSTP, KC_MPLY, KC_PGUP, _______, _______, KC_PGDN, KC_VOLD, KC_VOLU, KC_INS, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, DF_1, DF_2, KC_CAPS, _______, KC_MPRV, KC_MNXT, KC_MUTE, KC_WBAK, KC_WFWD, KC_WSCH, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______),
+
+ [_CONFIG] = LAYOUT_60_ansi_tsangan_split_rshift(\
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ _______, NK_ON, NK_OFF, EEP_RST, RESET, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \
+ _______, GE_SWAP, GE_NORM, DEBUG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_SPI, RGB_M_B, _______, _______, RGB_TOG, _______, \
+ _______, LAG_SWP, LAG_NRM, _______, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_SPD, RGB_M_K, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______)
+};
+
diff --git a/keyboards/clueboard/66/keymaps/badger/keymap.c b/keyboards/clueboard/66/keymaps/badger/keymap.c
new file mode 100644
index 000000000000..74fec0b58e67
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/badger/keymap.c
@@ -0,0 +1,53 @@
+/*
+Copyright 2020 Dan White
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "badger.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY_LINUX] = LAYOUT_66_ansi(\
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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, KC_END, \
+ MOVE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, ADJUST, KC_RGUI, KC_LALT, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_MOVE_LINUX] = LAYOUT_66_ansi(\
+ KC_ESC, VD_1, VD_2, VD_3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, IJ_UP, IJ_DOWN, KC_DEL, KC_PGUP, \
+ _______, IJ_STEP, IJ_INTO, IJ_OUT, IJ_RUN, IJ_STOP, IJ_OUT, KC_PGUP, KC_HOME, KC_END, KC_PGDN, IJ_BACK, IJ_FWD, KC_INS, KC_PGDN, \
+ _______, WM_LH, WM_UH, WM_RH, WD_FRWD, MAC_POP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CS_RIGHT, CS_DOWN, _______, \
+ _______, MM_UH, MM_BH, MAC_CPY, MAC_PST, WD_BACK, KC_MNXT, IJ_REN, IJ_IMPL, IJ_DECL, IJ_USAG, _______, KC_BRIU, \
+ _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_BRID, KC_END),
+
+ [_QWERTY_MAC] = LAYOUT_66_ansi(\
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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, KC_END, \
+ MOVE_MAC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, ADJUST, KC_RGUI, KC_LALT, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_MOVE_MAC] = LAYOUT_66_ansi(\
+ KC_ESC, M_VD1, M_VD2, M_VD3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, IJ_UP, IJ_DOWN, KC_DEL, KC_PGUP, \
+ _______, IJ_STEP, IJ_INTO, IJ_OUT, IJ_RUN, IJ_STOP, IJ_OUT, KC_PGUP, KC_HOME, KC_END, KC_PGDN, IJ_BACK, IJ_FWD, KC_INS, KC_PGDN, \
+ _______, MM_LH, MM_MAX, MM_RH, WD_FRWD, MAC_POP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CM_RIGHT, CM_DOWN, _______, \
+ _______, MM_UH, MM_BH, MAC_CPY, MAC_PST, WD_BACK, KC_MNXT, IJ_REN, IJ_IMPL, IJ_DECL, IJ_USAG, _______, KC_BRIU, \
+ _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_BRID, KC_END),
+
+ [_ADJUST] = LAYOUT_66_ansi(\
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_VOLU, \
+ _______, NK_ON, NK_OFF, EEP_RST, RESET, KC_MSTP, KC_MPLY, KC_PGUP, KC_HOME, KC_END, KC_PGDN, AG_SWAP, AG_NORM, KC_INS, KC_VOLD, \
+ _______, GE_SWAP, GE_NORM, DEBUG, AG_SWAP, AG_NORM, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, \
+ _______, DF_1, DF_2, KC_CAPS, _______, KC_MPRV, KC_MNXT, KC_MUTE, KC_WBAK, KC_WFWD, _______, _______, KC_BRIU, \
+ _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_BRID, KC_END)
+};
+
diff --git a/keyboards/dztech/dz60rgb_ansi/keymaps/badger/keymap.c b/keyboards/dztech/dz60rgb_ansi/keymaps/badger/keymap.c
new file mode 100644
index 000000000000..1d2144d7f427
--- /dev/null
+++ b/keyboards/dztech/dz60rgb_ansi/keymaps/badger/keymap.c
@@ -0,0 +1,60 @@
+/*
+Copyright 2020 Dan White
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "badger.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY_MAC] = LAYOUT_60_ansi(\
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ MOVE_MAC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, ADJUST, KC_RGUI, KC_RALT, MAC_POP),
+
+ [_MOVE_MAC] = LAYOUT_60_ansi(\
+ MAC_FRC, MM_LEFT, MM_RGHT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_0, IJ_TOP, IJ_BOTT, KC_DEL, \
+ KC_BACK, IJ_STEP, IJ_INTO, IJ_OUT, IJ_RUN, IJ_STOP, _______, WD_BACK, KC_HOME, KC_END, WD_FRWD, IJ_BACK, IJ_FWD, KC_NEXT, \
+ _______, MM_LH, MM_MAX, MM_RH, IJ_FIND, IJ_IMPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CM_RIGHT, CM_DOWN, _______, \
+ _______, MM_UH, MM_BH, MAC_CPY, MAC_PST, IJ_IMPH, _______, IJ_REN, IJ_IMPL, IJ_DECL, IJ_USAG, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [_QWERTY_LINUX] = LAYOUT_60_ansi(\
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ MOVE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, ADJUST, KC_LALT, KC_RGUI, KC_RCTL),
+
+ [_MOVE_LINUX] = LAYOUT_60_ansi(\
+ KC_GRV, VD_1, VD_2, VD_3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ KC_BACK, WM_VD1, WM_UH, WM_VD2, RESET, KC_MSTP, KC_MPLY, KC_PGUP, KC_HOME, KC_END, KC_PGDN, _______, _______, KC_NEXT, \
+ _______, WM_LH, WM_MAX, WM_RH, WD_FRWD, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CS_RIGHT, CS_DOWN, _______, \
+ _______, WM_VD3, WM_BH, OS_COPY, OS_PAST, WD_BACK, KC_MNXT, KC_MUTE, KC_WBAK, KC_WFWD, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [_ADJUST] = LAYOUT_60_ansi(\
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ _______, _______, _______, _______, KC_WREF, KC_MSTP, KC_MPLY, KC_PGUP, _______, _______, KC_PGDN, KC_VOLD, KC_VOLU, KC_INS, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, DF_1, DF_2, KC_CAPS, _______, KC_MPRV, KC_MNXT, KC_MUTE, KC_WBAK, KC_WFWD, KC_WSCH, _______, \
+ _______, _______, _______, _______, _______, _______, _______, MO(_CONFIG)),
+
+ [_CONFIG] = LAYOUT_60_ansi(\
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ _______, NK_ON, NK_OFF, EEP_RST, RESET, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \
+ _______, GE_SWAP, GE_NORM, DEBUG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_SPI, RGB_M_B, _______, _______, RGB_TOG, _______, \
+ _______, LAG_SWP, LAG_NRM, _______, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_SPD, RGB_M_K, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______)
+};
+
diff --git a/keyboards/planck/keymaps/badger/keymap.c b/keyboards/planck/keymaps/badger/keymap.c
new file mode 100644
index 000000000000..332142519027
--- /dev/null
+++ b/keyboards/planck/keymaps/badger/keymap.c
@@ -0,0 +1,60 @@
+/*
+Copyright 2020 Dan White
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "ortho.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY_MAC_ORTHO] = LAYOUT_ortho_4x12(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, \
+ MOMAC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
+ KC_LCTL, KC_LALT, KC_LGUI, RAISE, P_ADJ, KC_SPC, LOWER, KC_NO, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC),
+
+ [_MOVE_MAC_ORTHO] = LAYOUT_ortho_4x12(
+ KC_BACK, IJ_STEP, IJ_INTO, IJ_OUT, IJ_RUN, IJ_STOP, _______, WD_BACK, KC_HOME, KC_END, WD_FRWD, KC_NEXT, \
+ _______, MM_LH, MM_MAX, MM_RH, IJ_FIND, IJ_IMPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CM_RIGHT, CM_DOWN, \
+ _______, MM_UH, MM_BH, MAC_CPY, MAC_PST, IJ_IMPH, _______, IJ_REN, IJ_IMPL, IJ_DECL, IJ_USAG, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [_QWERTY_LINUX_ORTHO] = LAYOUT_ortho_4x12(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, \
+ MOLNX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
+ KC_LCTL, KC_LALT, KC_LGUI, RAISE, P_ADJ, KC_SPC, LOWER, KC_NO, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC),
+
+ [_MOVE_LINUX_ORTHO] = LAYOUT_ortho_4x12(
+ _______, WM_VD1, WM_UH, WM_VD2, KC_MAC1, KC_MSTP, KC_MPLY, KC_PGUP, KC_HOME, KC_END, KC_PGDN, KC_INS, \
+ _______, WM_LH, WM_MAX, WM_RH, KC_MAC2, KC_PSCR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CS_RIGHT, CS_DOWN, \
+ _______, WM_VD3, WM_BH, OS_COPY, OS_PAST, KC_MPRV, KC_MNXT, KC_MUTE, KC_WBAK, KC_WFWD, KC_WSCH, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [_RAISE] = LAYOUT_ortho_4x12(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DQUO, \
+ _______, KC_UNDO, KC_CUT, OS_COPY, OS_PAST, KC_MPRV, KC_MNXT, KC_MUTE, KC_LT, KC_GT, KC_QUES, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [_LOWER] = LAYOUT_ortho_4x12(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, \
+ _______, KC_4, KC_5, KC_6, KC_PMNS, KC_PSCR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_SCLN, KC_QUOT, \
+ _______, KC_1, KC_2, KC_3, KC_PPLS, KC_NO, KC_NO, KC_WHOM, KC_WBAK, KC_WFWD, KC_WSCH, _______, \
+ _______, KC_0, KC_DOT, KC_ENT, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [_ADJUST] = LAYOUT_ortho_4x12(
+ _______, NK_ON, NK_OFF, EEP_RST, RESET, KC_MSTP, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN2, KC_INS, \
+ _______, GE_SWAP, GE_NORM, DEBUG, AG_SWAP, AG_NORM, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_BTN1, _______, \
+ _______, KC_LYRC, KC_FIRST, KC_CAPS, KC_NO, KC_MPRV, KC_MNXT, KC_MUTE, KC_ACL0, KC_ACL1, KC_ACL2, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+};
diff --git a/keyboards/preonic/keymaps/badger/keymap.c b/keyboards/preonic/keymaps/badger/keymap.c
new file mode 100644
index 000000000000..495cf28c455a
--- /dev/null
+++ b/keyboards/preonic/keymaps/badger/keymap.c
@@ -0,0 +1,74 @@
+/*
+Copyright 2020 Dan White
+
+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 .
+*/
+
+// if not REV3, just compile the default keymaps
+#ifndef REV3_CONFIG_H
+#include "../default/keymap.c"
+#else
+
+#include "ortho.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY_MAC_ORTHO] = LAYOUT_preonic_2x2u(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, \
+ MOMAC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
+ KC_LCTL, KC_LALT, KC_LGUI, RAISE, P_ADJ, KC_SPC, LOWER, KC_RGUI, KC_RALT, MAC_POP),
+
+ [_MOVE_MAC_ORTHO] = LAYOUT_preonic_2x2u(
+ MAC_FRC, MM_LEFT, MM_RGHT, IJ_TOP, IJ_BOTT, _______, _______, IJ_UP, IJ_DOWN, IJ_BACK, IJ_FWD, KC_BSPC, \
+ KC_BACK, IJ_STEP, IJ_INTO, IJ_OUT, IJ_RUN, IJ_STOP, _______, WD_BACK, KC_HOME, KC_END, WD_FRWD, KC_NEXT, \
+ _______, MM_LH, MM_MAX, MM_RH, IJ_FIND, IJ_IMPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CM_RIGHT, CM_DOWN, \
+ _______, MM_UH, MM_BH, MAC_CPY, MAC_PST, IJ_IMPH, _______, IJ_REN, IJ_IMPL, IJ_DECL, IJ_USAG, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [_QWERTY_LINUX_ORTHO] = LAYOUT_preonic_2x2u(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, \
+ MOLNX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, RAISE, P_ADJ, KC_SPC, LOWER, KC_RALT, KC_RGUI, OS_POP),
+
+ [_MOVE_LINUX_ORTHO] = LAYOUT_preonic_2x2u(
+ KC_ESC, VD_1, VD_2, VD_3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, \
+ _______, WM_VD1, WM_UH, WM_VD2, KC_MAC1, KC_MSTP, KC_MPLY, KC_PGUP, KC_HOME, KC_END, KC_PGDN, KC_INS, \
+ _______, WM_LH, WM_MAX, WM_RH, KC_MAC2, KC_PSCR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, CS_RIGHT, CS_DOWN, \
+ _______, WM_VD3, WM_BH, OS_COPY, OS_PAST, KC_MPRV, KC_MNXT, KC_MUTE, KC_WBAK, KC_WFWD, KC_WSCH, _______, \
+ _______, KC_LCTL, KC_LALT, KC_LGUI, _______, _______, _______, _______, _______, _______),
+
+ [_RAISE] = LAYOUT_preonic_2x2u(
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, \
+ _______, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_AGIN, KC_STOP, KC_MENU, KC_FIND, KC_MPLY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_COLN, KC_DQUO, \
+ _______, KC_UNDO, KC_CUT, OS_COPY, OS_PAST, KC_MPRV, KC_MNXT, KC_MUTE, KC_LT, KC_GT, KC_QUES, KC_TRNS, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [_LOWER] = LAYOUT_preonic_2x2u(
+ KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ _______, KC_7, KC_8, KC_9, KC_PMNS, KC_VOLD, KC_VOLU, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_4, KC_5, KC_6, KC_PPLS, KC_PSCR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_SCLN, KC_QUOT, \
+ _______, KC_1, KC_2, KC_3, KC_PAST, KC_NO, KC_NO, KC_WHOM, KC_WBAK, KC_WFWD, KC_WSCH, _______, \
+ _______, KC_0, KC_DOT, KC_ENT, _______, _______, _______, _______, _______, _______),
+
+ [_ADJUST_ORTHO] = LAYOUT_preonic_2x2u(
+ KC_ESC, AU_ON, AU_OFF, CK_TOGG, CK_UP, CK_DOWN, CK_RST, MU_ON, MU_OFF, MU_TOG, MU_MOD, KC_DEL, \
+ _______, NK_ON, NK_OFF, EEP_RST, RESET, KC_MSTP, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN2, KC_INS, \
+ _______, GE_SWAP, GE_NORM, DEBUG, AG_SWAP, AG_NORM, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_BTN1, _______, \
+ _______, KC_LYRC, KC_FIRST, KC_CAPS, KC_NO, KC_MPRV, KC_MNXT, KC_MUTE, KC_ACL0, KC_ACL1, KC_ACL2, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+};
+
+#endif
diff --git a/keyboards/preonic/keymaps/badger/readme.md b/keyboards/preonic/keymaps/badger/readme.md
new file mode 100644
index 000000000000..5e16979605ea
--- /dev/null
+++ b/keyboards/preonic/keymaps/badger/readme.md
@@ -0,0 +1,21 @@
+# A QWERTY-centric preonic layout by [BlueTufa](https://github.com/BlueTufa)
+
+## Layouts
+
+### QWERTY
+Standard QWERTY layer, but ESC maps to MOVE layer when held down. Dedicated modifier for Adjust layer and a dedicated OS action key.
+### RAISE layer
+Access to function keys and shifted characters not on Preonic layout. Effort is taken to keep Function keys aligned with corresponding number. Some OS action keys are available in this layer.
+
+### LOWER layer
+Numpad behavior and access to characters not present on Preonic layout.
+
+### MOVE layer
+OS-specific convenience shortcuts. Macros are used to make it easier to adapt these to other operating systems.
+Window move and resize, and option to move to a specific virtual desktop.
+
+### ADJUST layer
+The first row is focused on audio config.
+Take advantage of the mouse movement keys, as well as toggling common keyboard config settings.
+Flash settings are accessed here as well.
+
diff --git a/users/badger/README.md b/users/badger/README.md
new file mode 100644
index 000000000000..fca1028a59f0
--- /dev/null
+++ b/users/badger/README.md
@@ -0,0 +1,31 @@
+# A multi-OS keyboard layout with support for both Linux (KDE) and MacOS-specific QWERTY layouts for many 60-ish% keyboards (
+
+## Author: [BlueTufa](https://github.com/BlueTufa)
+
+> Supported Keyboards: 1up RGB and HTE, Clueboard 66, dztech 60 RGB, and partial support for Preonic and Planck ortholinear keyboards.
+
+## Layouts
+
+### QWERTY
+Default layer: Standard QWERTY layer with CAPS lock mapped to ESC. ESC is a Layer toggle, when held down it maps to KDE-specific MOVE layer. Dedicated Function key for ADJUST layer. I also take advantage of the AG_SWAP when using this keyboard on Linux, which swaps between ALT and GUI on both sides.
+
+Mac layer: Mostly the same as the default layer, except that the ESC key maps to a MacOS specific set of MOVE layer shortcuts. These leverage a piece of software called Rectangle, which makes up for some of the tiling shortcomings of MacOS.
+
+### MOVE layer
+OS-specific convenience shortcuts. Macros are defined to make it easier to adapt these to other operating systems. The macros also help maintain the spacing that helps with the readability of the layers in source control.
+
+The main goal of the MOVE layer is to manage window move and resize, and jump to a specific virtual desktop. The other function is to expose VIM-style move keys as arrow keys to other applications. Some keys from ADJUST layer are also redefined here.
+
+Care was taken to keep the tiling and virtual desktop shortcuts as similar as possible between Linux and MacOS in this MOVE layer. The most notable difference is that I haven't found a good way to do corner tiling in Linux the way that it's supported in MacOS Rectangle.
+
+REMINDER: The 9-key left-hand pattern requires the installation of the MacOS rectangle app:
+
+```bash
+brew cask install rectangle
+```
+
+### ADJUST layer
+Access to function keys as well as media controls and keyboard settings. Some useful OS action keys are defined here as well.
+
+### Config layer
+Access to Quantum keyboard controls as well as RGB configuration. If audio is supported it would belong in this layer as well.
diff --git a/users/badger/badger.c b/users/badger/badger.c
new file mode 100644
index 000000000000..455184061046
--- /dev/null
+++ b/users/badger/badger.c
@@ -0,0 +1,49 @@
+/*
+Copyright 2020 Dan White
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "badger.h"
+
+bool _capsLockState;
+
+__attribute__ ((weak))
+void keyboard_post_init_user(void) {
+ _capsLockState = false;
+}
+
+__attribute__ ((weak))
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case CS_RIGHT:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LALT(SS_TAP(X_B)SS_TAP(X_ENTER)));
+ return false;
+ }
+ break;
+ case CS_DOWN:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LALT(SS_TAP(X_V)SS_TAP(X_ENTER)));
+ return false;
+ }
+ break;
+ case KC_CAPS:
+ if (record->event.pressed) {
+ _capsLockState = !_capsLockState;
+ return true;
+ }
+ break;
+ default:
+ return true;
+ }
+ return true;
+}
diff --git a/users/badger/badger.h b/users/badger/badger.h
new file mode 100644
index 000000000000..bb2dcd0bd3a8
--- /dev/null
+++ b/users/badger/badger.h
@@ -0,0 +1,109 @@
+/*
+Copyright 2020 Dan White
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#pragma once
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY_MAC,
+ _MOVE_MAC,
+ _QWERTY_LINUX,
+ _MOVE_LINUX,
+ _ADJUST,
+ _CONFIG
+};
+
+enum CustomKeys {
+ CS_RIGHT = SAFE_RANGE,
+ CS_DOWN
+};
+
+#define OS_POP LCTL(KC_F10)
+#define MAC_POP LCTL(KC_UP)
+#define MAC_FRC LGUI(LALT(KC_ESC))
+#define OS_COPY LSFT(LCTL(KC_C))
+#define OS_PAST LSFT(LCTL(KC_V))
+#define MAC_PST LGUI(KC_V)
+#define MAC_CPY LGUI(KC_C)
+#define KC_BACK LCTL(LSFT(KC_LBRC))
+#define KC_NEXT LCTL(LSFT(KC_RBRC))
+
+#define MOVE LT(_MOVE_LINUX, KC_ESC)
+#define MOVE_MAC LT(_MOVE_MAC, KC_ESC)
+#define ADJUST MO(_ADJUST)
+#define CFG_MAC LT(_CONFIG, MAC_POP)
+#define CFG_LNX LT(_CONFIG, OS_POP)
+
+#define WD_BACK LALT(KC_LEFT)
+#define WD_FRWD LALT(KC_RIGHT)
+
+#define VD_1 LCTL(KC_F1)
+#define VD_2 LCTL(KC_F2)
+#define VD_3 LCTL(KC_F3)
+
+#define WM_UH LGUI(KC_UP)
+#define WM_BH LGUI(KC_DOWN)
+#define WM_LH LGUI(KC_LEFT)
+#define WM_RH LGUI(KC_RIGHT)
+#define WM_MAX LGUI(KC_PGUP)
+
+#define CM_RIGHT LGUI(KC_D)
+#define CM_DOWN LGUI(LSFT(KC_D))
+
+/* THESE are not defaults in KDE and must be set manually */
+#define WM_VD1 HYPR(KC_1)
+#define WM_VD2 HYPR(KC_2)
+#define WM_VD3 HYPR(KC_3)
+
+/* IntelliJ / JetBrains shortcuts with Mac keymap */
+#define IJ_BACK LGUI(LALT(KC_LEFT))
+#define IJ_FWD LGUI(LALT(KC_RIGHT))
+#define IJ_UP LGUI(LALT(KC_UP))
+#define IJ_DOWN LGUI(LALT(KC_DOWN))
+#define IJ_IMPL LGUI(LALT(KC_B))
+#define IJ_DECL LGUI(KC_B)
+#define IJ_REN LSFT(KC_F6)
+#define IJ_USAG LALT(KC_F7)
+#define IJ_RUN KC_F9
+#define IJ_STEP KC_F8
+#define IJ_INTO LSFT(KC_F7)
+#define IJ_OUT LSFT(KC_F8)
+#define IJ_STOP LGUI(KC_F2)
+#define IJ_IMPS LCTL(LALT(LSFT(KC_EQUAL)))
+#define IJ_IMPH LCTL(LALT(LSFT(KC_MINUS)))
+#define IJ_TOP LGUI(KC_HOME)
+#define IJ_BOTT LGUI(KC_END)
+#define IJ_FIND LGUI(LSFT(KC_F))
+
+/* MacOS virtual desktop shortcuts */
+#define M_VD1 LCTL(KC_1)
+#define M_VD2 LCTL(KC_2)
+#define M_VD3 LCTL(KC_3)
+
+/* rectangle shortcuts */
+#define MM_ULCN LCTL(LGUI(KC_LEFT))
+#define MM_URCN LCTL(LGUI(KC_RIGHT))
+#define MM_LLCN LCTL(LSFT(LGUI(KC_LEFT)))
+#define MM_LRCN LCTL(LSFT(LGUI(KC_RIGHT)))
+#define MM_MAX LALT(LGUI(KC_F))
+#define MM_LH HYPR(KC_LBRC)
+#define MM_RH HYPR(KC_RBRC)
+#define MM_UH LALT(LGUI(KC_UP))
+#define MM_BH LALT(LGUI(KC_DOWN))
+#define MM_LEFT LCTL(LALT(LGUI(KC_LEFT)))
+#define MM_RGHT LCTL(LALT(LGUI(KC_RIGHT)))
+
+#define DF_1 DF(_QWERTY_MAC)
+#define DF_2 DF(_QWERTY_LINUX)
diff --git a/users/badger/ortho.c b/users/badger/ortho.c
new file mode 100644
index 000000000000..ff84e1706f06
--- /dev/null
+++ b/users/badger/ortho.c
@@ -0,0 +1,151 @@
+/*
+Copyright 2020 Dan White
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "ortho.h"
+#include "badger.h"
+
+int _currentLayer;
+bool _capsLock;
+
+#ifdef AUDIO_ENABLE
+float capsOnSong[][2] = SONG(CAPS_ON);
+float capsOffSong[][2] = SONG(CAPS_OFF);
+float defaultLayerSong[][2] = SONG(QWERTY_LAYER_SONG);
+float moveLayerSong[][2] = SONG(MOVE_LAYER_SONG);
+float macLayerSong[][2] = SONG(MAC_LAYER_SONG);
+float raiseLayerSong[][2] = SONG(RAISE_LAYER_SONG);
+float lowerLayerSong[][2] = SONG(LOWER_LAYER_SONG);
+float agSwapSong[][2] = SONG(LONG_AG_SWAP);
+float agNormSong[][2] = SONG(LONG_AG_NORM);
+#endif
+
+__attribute__ ((weak))
+void keyboard_post_init_user(void) {
+ _capsLock = false;
+ _currentLayer = _QWERTY_MAC_ORTHO;
+ layer_on(_currentLayer);
+}
+
+__attribute__ ((weak))
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ dprintf("Key event recorded. KEYCODE: %u , event: %u\n", keycode, record->event.pressed);
+ switch (keycode) {
+ case CS_RIGHT:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LALT(SS_TAP(X_B)SS_TAP(X_ENTER)));
+ return false;
+ }
+ break;
+ case CS_DOWN:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LALT(SS_TAP(X_V)SS_TAP(X_ENTER)));
+ return false;
+ }
+ break;
+ case KC_CAPS:
+ if (record->event.pressed) {
+ dprintf("CAPS_LOCK state: %u\n", _capsLock);
+ _capsLock = !_capsLock;
+ #ifdef AUDIO_ENABLE
+ _capsLock ? PLAY_SONG(capsOnSong) : PLAY_SONG(capsOffSong);
+ #endif
+ return true;
+ }
+ break;
+ case AG_SWAP:
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(agSwapSong);
+ #endif
+ return true;
+ break;
+ case AG_NORM:
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(agNormSong);
+ #endif
+ return true;
+ break;
+ case KC_MAC2:
+ if (record->event.pressed) {
+ SEND_STRING("ll\n");
+ return false;
+ }
+ break;
+ case KC_MAC1:
+ if (record->event.pressed) {
+ SEND_STRING("open https://www.reddit.com/r/mechanicalkeyboards\n");
+ return false;
+ }
+ break;
+ case KC_FIRST:
+ if (record->event.pressed) {
+ // don't turn off the QWERTY layer
+ if (_currentLayer != _QWERTY_MAC_ORTHO) {
+ layer_off(_currentLayer);
+ }
+ _currentLayer = _QWERTY_MAC_ORTHO;
+ layer_on(_currentLayer);
+ playSongForLayer(_currentLayer);
+ return false;
+ }
+ break;
+ case KC_LYRC:
+ if (record->event.pressed) {
+ dprintf("LYR CYCLE pressed %u, CURRENT_LAYER: %u\n", keycode, _currentLayer);
+ // don't turn off the QWERTY layer or the ADJUST layer
+ if (_currentLayer != _QWERTY_MAC_ORTHO) {
+ layer_off(_currentLayer);
+ }
+ // don't lock the ADJUST layer
+ // since this key is accessible via the ADJUST
+ // layer, as it will require tricky state management
+ if (++_currentLayer == _ADJUST_ORTHO) {
+ _currentLayer = _QWERTY_MAC_ORTHO;
+ } else {
+ layer_on(_currentLayer);
+ }
+
+ playSongForLayer(_currentLayer);
+ return false;
+ }
+ break;
+ }
+ return true;
+}
+
+void playSongForLayer(int currentLayer) {
+ #ifdef AUDIO_ENABLE
+ switch (currentLayer) {
+ case _QWERTY_LINUX:
+ PLAY_SONG(defaultLayerSong);
+ break;
+ case _MOVE_LINUX:
+ PLAY_SONG(moveLayerSong);
+ break;
+ case _QWERTY_MAC:
+ PLAY_SONG(macLayerSong);
+ break;
+ case _MOVE_MAC:
+ PLAY_SONG(moveLayerSong);
+ break;
+ case _RAISE:
+ PLAY_SONG(raiseLayerSong);
+ break;
+ case _LOWER:
+ PLAY_SONG(lowerLayerSong);
+ break;
+ default:
+ break;
+ }
+ #endif
+}
\ No newline at end of file
diff --git a/users/badger/ortho.h b/users/badger/ortho.h
new file mode 100644
index 000000000000..207f2e2822ec
--- /dev/null
+++ b/users/badger/ortho.h
@@ -0,0 +1,58 @@
+/*
+Copyright 2020 Dan White
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#pragma once
+
+#include "badger.h"
+
+enum OrthoLayers {
+ _QWERTY_MAC_ORTHO,
+ _MOVE_MAC_ORTHO,
+ _QWERTY_LINUX_ORTHO,
+ _MOVE_LINUX_ORTHO,
+ _RAISE,
+ _LOWER,
+ _ADJUST_ORTHO
+};
+
+enum OrthoKeys {
+ KC_MAC1 = CS_DOWN + 1,
+ KC_MAC2,
+ KC_LYRC,
+ KC_FIRST
+};
+
+#define P_ADJ LT(_ADJUST_ORTHO, KC_BSPC)
+#define RAISE MO(_RAISE)
+#define LOWER MO(_LOWER)
+#define MOMAC LT(_MOVE_MAC_ORTHO, KC_ESC)
+#define MOLNX LT(_MOVE_LINUX_ORTHO, KC_ESC)
+
+void playSongForLayer(int currentLayer);
+
+#ifdef AUDIO_ENABLE
+#define QWERTY_LAYER_SONG H__NOTE(_G6), H__NOTE(_D6), Q__NOTE(_A5), Q__NOTE(_E5),
+#define MAC_LAYER_SONG H__NOTE(_E5), H__NOTE(_A5), Q__NOTE(_D6), Q__NOTE(_G6), \
+ ED_NOTE(_E7), E__NOTE(_CS7), E__NOTE(_E6), E__NOTE(_A6), M__NOTE(_CS7, 20),
+#define LONG_AG_SWAP Q__NOTE(_G5), Q__NOTE(_D6), Q__NOTE(_A6), Q__NOTE(_E7), \
+ SD_NOTE(_B5), SD_NOTE(_A5), SD_NOTE(_B5), SD_NOTE(_A5),
+#define LONG_AG_NORM Q__NOTE(_DS4), Q__NOTE(_DS4), B__NOTE(_C5),
+#define MOVE_LAYER_SONG E__NOTE(_GS6), E__NOTE(_A6), S__NOTE(_REST), ED_NOTE(_E7), \
+ S__NOTE(_REST), ED_NOTE(_GS7),
+#define RAISE_LAYER_SONG W__NOTE(_BF5), Q__NOTE(_A5), W__NOTE(_BF5), Q__NOTE(_A5), W__NOTE(_E6), Q__NOTE(_B5),
+#define LOWER_LAYER_SONG Q__NOTE(_DS4), E__NOTE(_DS4), E__NOTE(_DS6), Q__NOTE(_DS5), \
+ E__NOTE(_DS5), E__NOTE(_DS6), Q__NOTE(_E5), E__NOTE(_E5), E__NOTE(_DS6), Q__NOTE(_DS5),
+#define CAPS_ON W__NOTE(_E5), Q__NOTE(_BF5), W__NOTE(_E5), Q__NOTE(_BF5), W__NOTE(_E5), Q__NOTE(_BF5),
+#define CAPS_OFF W__NOTE(_E5), Q__NOTE(_BF5),
+#endif
diff --git a/users/badger/rules.mk b/users/badger/rules.mk
new file mode 100644
index 000000000000..4f1507b8f318
--- /dev/null
+++ b/users/badger/rules.mk
@@ -0,0 +1,2 @@
+SRC += badger.c
+SRC += ortho.c
From f37a134f712891db64b1391a250b0d752206f520 Mon Sep 17 00:00:00 2001
From: Drashna Jaelre
Date: Thu, 17 Sep 2020 00:41:55 -0700
Subject: [PATCH 020/178] [Keyboard] Convert Corne Keyboard to Split Common
(#6001)
* [Keyboard] Convert Corne Keyboard to Split Common
* Add VIA Support
* Makes sure that ol(e)d and new OLED implementation can't coexist
* Add licensing header to files
* Add changes based on feedback from foostan
* Fixes
---
keyboards/crkbd/config.h | 54 ++-
keyboards/crkbd/crkbd.c | 26 +-
keyboards/crkbd/crkbd.h | 21 +-
keyboards/crkbd/keymaps/default/keymap.c | 18 +
keyboards/crkbd/keymaps/oled_sample/config.h | 48 +++
keyboards/crkbd/keymaps/oled_sample/keymap.c | 208 ++++++++++
keyboards/crkbd/keymaps/oled_sample/rules.mk | 7 +
keyboards/crkbd/rev1/common/common.c | 21 +
keyboards/crkbd/rev1/common/common.h | 24 ++
keyboards/crkbd/rev1/common/config.h | 30 ++
.../crkbd/rev1/common/keymaps/via/config.h | 46 +++
.../crkbd/rev1/common/keymaps/via/keymap.c | 193 ++++++++++
.../crkbd/rev1/common/keymaps/via/rules.mk | 5 +
keyboards/crkbd/rev1/common/rules.mk | 2 +
keyboards/crkbd/rev1/common/ssd1306.c | 360 ++++++++++++++++++
keyboards/crkbd/rev1/config.h | 61 +--
keyboards/crkbd/rev1/legacy/config.h | 23 ++
keyboards/crkbd/{ => rev1/legacy}/i2c.c | 2 +-
keyboards/crkbd/{ => rev1/legacy}/i2c.h | 0
keyboards/crkbd/rev1/legacy/legacy.c | 19 +
keyboards/crkbd/rev1/legacy/legacy.h | 21 +
keyboards/crkbd/rev1/{ => legacy}/matrix.c | 0
keyboards/crkbd/rev1/legacy/post_config.h | 27 ++
keyboards/crkbd/rev1/legacy/rules.mk | 7 +
keyboards/crkbd/{ => rev1/legacy}/serial.c | 0
keyboards/crkbd/{ => rev1/legacy}/serial.h | 0
keyboards/crkbd/rev1/legacy/serial_config.h | 22 ++
.../rev1/legacy/serial_config_simpleapi.h | 23 ++
.../crkbd/rev1/{ => legacy}/split_scomm.c | 18 +
.../crkbd/rev1/{ => legacy}/split_scomm.h | 18 +
.../crkbd/rev1/{ => legacy}/split_util.c | 22 +-
keyboards/crkbd/rev1/legacy/split_util.h | 37 ++
keyboards/crkbd/{ => rev1/legacy}/ssd1306.c | 12 +-
keyboards/crkbd/rev1/rev1.c | 32 +-
keyboards/crkbd/rev1/rev1.h | 42 +-
keyboards/crkbd/rev1/rules.mk | 6 +-
keyboards/crkbd/rev1/serial_config.h | 4 -
.../crkbd/rev1/serial_config_simpleapi.h | 5 -
keyboards/crkbd/rev1/split_util.h | 19 -
keyboards/crkbd/{ => rev1}/ssd1306.h | 0
keyboards/crkbd/rules.mk | 8 +-
41 files changed, 1359 insertions(+), 132 deletions(-)
create mode 100644 keyboards/crkbd/keymaps/oled_sample/config.h
create mode 100644 keyboards/crkbd/keymaps/oled_sample/keymap.c
create mode 100644 keyboards/crkbd/keymaps/oled_sample/rules.mk
create mode 100644 keyboards/crkbd/rev1/common/common.c
create mode 100644 keyboards/crkbd/rev1/common/common.h
create mode 100644 keyboards/crkbd/rev1/common/config.h
create mode 100644 keyboards/crkbd/rev1/common/keymaps/via/config.h
create mode 100644 keyboards/crkbd/rev1/common/keymaps/via/keymap.c
create mode 100644 keyboards/crkbd/rev1/common/keymaps/via/rules.mk
create mode 100644 keyboards/crkbd/rev1/common/rules.mk
create mode 100644 keyboards/crkbd/rev1/common/ssd1306.c
create mode 100644 keyboards/crkbd/rev1/legacy/config.h
rename keyboards/crkbd/{ => rev1/legacy}/i2c.c (98%)
rename keyboards/crkbd/{ => rev1/legacy}/i2c.h (100%)
create mode 100644 keyboards/crkbd/rev1/legacy/legacy.c
create mode 100644 keyboards/crkbd/rev1/legacy/legacy.h
rename keyboards/crkbd/rev1/{ => legacy}/matrix.c (100%)
create mode 100644 keyboards/crkbd/rev1/legacy/post_config.h
create mode 100644 keyboards/crkbd/rev1/legacy/rules.mk
rename keyboards/crkbd/{ => rev1/legacy}/serial.c (100%)
rename keyboards/crkbd/{ => rev1/legacy}/serial.h (100%)
create mode 100644 keyboards/crkbd/rev1/legacy/serial_config.h
create mode 100644 keyboards/crkbd/rev1/legacy/serial_config_simpleapi.h
rename keyboards/crkbd/rev1/{ => legacy}/split_scomm.c (79%)
rename keyboards/crkbd/rev1/{ => legacy}/split_scomm.h (51%)
rename keyboards/crkbd/rev1/{ => legacy}/split_util.c (76%)
create mode 100644 keyboards/crkbd/rev1/legacy/split_util.h
rename keyboards/crkbd/{ => rev1/legacy}/ssd1306.c (99%)
delete mode 100644 keyboards/crkbd/rev1/serial_config.h
delete mode 100644 keyboards/crkbd/rev1/serial_config_simpleapi.h
delete mode 100644 keyboards/crkbd/rev1/split_util.h
rename keyboards/crkbd/{ => rev1}/ssd1306.h (100%)
diff --git a/keyboards/crkbd/config.h b/keyboards/crkbd/config.h
index fb1cdf3962a1..a2dd710714b7 100644
--- a/keyboards/crkbd/config.h
+++ b/keyboards/crkbd/config.h
@@ -1,6 +1,6 @@
/*
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,9 +19,55 @@ along with this program. If not, see .
#pragma once
#include "config_common.h"
-#include
-#define USE_I2C
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4653
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER foostan
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+#define MATRIX_ROW_PINS { D4, C6, D7, E6 }
+
+// wiring of each half
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
+// #define MATRIX_COL_PINS { B2, B3, B1, F7, F6, F5, F4 } //uncomment this line and comment line above if you need to reverse left-to-right key order
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
#define USE_SERIAL
#define NO_ACTION_MACRO
diff --git a/keyboards/crkbd/crkbd.c b/keyboards/crkbd/crkbd.c
index 7417ad604788..af0ef8a345b6 100644
--- a/keyboards/crkbd/crkbd.c
+++ b/keyboards/crkbd/crkbd.c
@@ -1,9 +1,19 @@
-#include "crkbd.h"
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
-#ifdef SSD1306OLED
- return process_record_gfx(keycode,record) && process_record_user(keycode, record);
-#else
- return process_record_user(keycode, record);
-#endif
-}
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "crkbd.h"
diff --git a/keyboards/crkbd/crkbd.h b/keyboards/crkbd/crkbd.h
index 73f2a3f07462..4ba9397043da 100644
--- a/keyboards/crkbd/crkbd.h
+++ b/keyboards/crkbd/crkbd.h
@@ -1,5 +1,24 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
#pragma once
#ifdef KEYBOARD_crkbd_rev1
- #include "rev1.h"
+# include "rev1.h"
#endif
+
+#include "quantum.h"
diff --git a/keyboards/crkbd/keymaps/default/keymap.c b/keyboards/crkbd/keymaps/default/keymap.c
index 4dd0be899274..a3a9d9535102 100644
--- a/keyboards/crkbd/keymaps/default/keymap.c
+++ b/keyboards/crkbd/keymaps/default/keymap.c
@@ -1,3 +1,21 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
#include QMK_KEYBOARD_H
diff --git a/keyboards/crkbd/keymaps/oled_sample/config.h b/keyboards/crkbd/keymaps/oled_sample/config.h
new file mode 100644
index 000000000000..41568c5916bc
--- /dev/null
+++ b/keyboards/crkbd/keymaps/oled_sample/config.h
@@ -0,0 +1,48 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+
+
+#pragma once
+
+//#define USE_MATRIX_I2C
+#ifdef KEYBOARD_crkbd_rev1_common
+# undef USE_I2C
+# define USE_SERIAL
+#endif
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 100
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+#define OLED_FONT_H "keyboards/crkbd/lib/glcdfont.c"
diff --git a/keyboards/crkbd/keymaps/oled_sample/keymap.c b/keyboards/crkbd/keymaps/oled_sample/keymap.c
new file mode 100644
index 000000000000..f2d5770b63e7
--- /dev/null
+++ b/keyboards/crkbd/keymaps/oled_sample/keymap.c
@@ -0,0 +1,208 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum crkbd_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+
+#define RAISE MO(_RAISE)
+#define LOWER MO(_LOWER)
+#define CTLTB CTL_T(KC_TAB)
+#define GUIEI GUI_T(KC_LANG2)
+#define ALTKN ALT_T(KC_LANG1)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ CTLTB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ GUIEI, LOWER, KC_SPC, KC_ENT, RAISE, ALTKN
+ ),
+
+ [_LOWER] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ CTLTB, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX,
+ KC_LSFT, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX,
+ GUIEI, LOWER, KC_SPC, KC_ENT, RAISE, ALTKN
+ ),
+
+ [_RAISE] = LAYOUT(
+ KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ CTLTB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,
+ GUIEI, LOWER, KC_SPC, KC_ENT, RAISE, ALTKN
+
+ ),
+
+ [_ADJUST] = LAYOUT(
+ RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ GUIEI, LOWER, KC_SPC, KC_ENT, RAISE, ALTKN
+ )
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
+ return state;
+}
+
+
+#ifdef OLED_DRIVER_ENABLE
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ if (is_keyboard_master()) {
+ return OLED_ROTATION_270;
+ } else {
+ return rotation;
+ }
+}
+
+void render_crkbd_logo(void) {
+ static const char PROGMEM crkbd_logo[] = {
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
+ 0};
+ oled_write_P(crkbd_logo, false);
+}
+
+# define KEYLOG_LEN 5
+char keylog_str[KEYLOG_LEN] = {};
+uint8_t keylogs_str_idx = 0;
+uint16_t log_timer = 0;
+
+const char code_to_name[60] = {
+ ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
+ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
+ 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
+ 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
+ '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
+
+void add_keylog(uint16_t keycode) {
+ if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) {
+ keycode = keycode & 0xFF;
+ }
+
+ for (uint8_t i = KEYLOG_LEN - 1; i > 0; i--) {
+ keylog_str[i] = keylog_str[i - 1];
+ }
+ if (keycode < 60) {
+ keylog_str[0] = code_to_name[keycode];
+ }
+ keylog_str[KEYLOG_LEN - 1] = 0;
+
+ log_timer = timer_read();
+}
+
+void update_log(void) {
+ if (timer_elapsed(log_timer) > 750) {
+ add_keylog(0);
+ }
+}
+
+void render_keylogger_status(void) {
+ oled_write_P(PSTR("KLogr"), false);
+ oled_write(keylog_str, false);
+}
+
+void render_default_layer_state(void) {
+ oled_write_P(PSTR("Lyout"), false);
+ switch (get_highest_layer(default_layer_state)) {
+ case _QWERTY:
+ oled_write_P(PSTR(" QRTY"), false);
+ break;
+ }
+}
+
+void render_layer_state(void) {
+ oled_write_P(PSTR("LAYER"), false);
+ oled_write_P(PSTR("Lower"), layer_state_is(_LOWER));
+ oled_write_P(PSTR("Raise"), layer_state_is(_RAISE));
+}
+
+void render_keylock_status(uint8_t led_usb_state) {
+ oled_write_P(PSTR("Lock:"), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("N"), led_usb_state & (1 << USB_LED_NUM_LOCK));
+ oled_write_P(PSTR("C"), led_usb_state & (1 << USB_LED_CAPS_LOCK));
+ oled_write_ln_P(PSTR("S"), led_usb_state & (1 << USB_LED_SCROLL_LOCK));
+}
+
+void render_mod_status(uint8_t modifiers) {
+ oled_write_P(PSTR("Mods:"), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR("S"), (modifiers & MOD_MASK_SHIFT));
+ oled_write_P(PSTR("C"), (modifiers & MOD_MASK_CTRL));
+ oled_write_P(PSTR("A"), (modifiers & MOD_MASK_ALT));
+ oled_write_P(PSTR("G"), (modifiers & MOD_MASK_GUI));
+}
+
+void render_bootmagic_status(void) {
+ /* Show Ctrl-Gui Swap options */
+ static const char PROGMEM logo[][2][3] = {
+ {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
+ {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
+ };
+ oled_write_P(PSTR("BTMGK"), false);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(logo[0][0], !keymap_config.swap_lctl_lgui);
+ oled_write_P(logo[1][0], keymap_config.swap_lctl_lgui);
+ oled_write_P(PSTR(" "), false);
+ oled_write_P(logo[0][1], !keymap_config.swap_lctl_lgui);
+ oled_write_P(logo[1][1], keymap_config.swap_lctl_lgui);
+ oled_write_P(PSTR(" NKRO"), keymap_config.nkro);
+}
+
+void render_status_main(void) {
+ /* Show Keyboard Layout */
+ render_default_layer_state();
+ render_keylock_status(host_keyboard_leds());
+ render_mod_status(get_mods());
+ render_bootmagic_status();
+
+ render_keylogger_status();
+}
+
+void oled_task_user(void) {
+ update_log();
+ if (is_master) {
+ render_status_main(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
+ } else {
+ render_crkbd_logo();
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ add_keylog(keycode);
+ }
+ return true;
+}
+#endif
diff --git a/keyboards/crkbd/keymaps/oled_sample/rules.mk b/keyboards/crkbd/keymaps/oled_sample/rules.mk
new file mode 100644
index 000000000000..fb480bba88c9
--- /dev/null
+++ b/keyboards/crkbd/keymaps/oled_sample/rules.mk
@@ -0,0 +1,7 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+OLED_DRIVER_ENABLE = yes
diff --git a/keyboards/crkbd/rev1/common/common.c b/keyboards/crkbd/rev1/common/common.c
new file mode 100644
index 000000000000..5ea7347de884
--- /dev/null
+++ b/keyboards/crkbd/rev1/common/common.c
@@ -0,0 +1,21 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "common.h"
+
+uint8_t is_master;
diff --git a/keyboards/crkbd/rev1/common/common.h b/keyboards/crkbd/rev1/common/common.h
new file mode 100644
index 000000000000..af1795f48086
--- /dev/null
+++ b/keyboards/crkbd/rev1/common/common.h
@@ -0,0 +1,24 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "rev1.h"
+
+#define has_usb() is_keyboard_master()
+extern uint8_t is_master;
diff --git a/keyboards/crkbd/rev1/common/config.h b/keyboards/crkbd/rev1/common/config.h
new file mode 100644
index 000000000000..12f5f7576649
--- /dev/null
+++ b/keyboards/crkbd/rev1/common/config.h
@@ -0,0 +1,30 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#define PRODUCT Corne Keyboard Rev.1 (Split Common)
+
+#define USE_SERIAL
+#define SOFT_SERIAL_PIN D2
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_MATRIX_SPLIT { 27, 27 }
+#endif
+
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/crkbd/rev1/common/keymaps/via/config.h b/keyboards/crkbd/rev1/common/keymaps/via/config.h
new file mode 100644
index 000000000000..aa2d45e56d43
--- /dev/null
+++ b/keyboards/crkbd/rev1/common/keymaps/via/config.h
@@ -0,0 +1,46 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+
+
+#pragma once
+
+//#define USE_MATRIX_I2C
+#ifdef KEYBOARD_crkbd_rev1_legacy
+# undef USE_I2C
+# define USE_SERIAL
+#endif
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define USE_SERIAL_PD2
+
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+#define OLED_FONT_H "keyboards/crkbd/lib/glcdfont.c"
diff --git a/keyboards/crkbd/rev1/common/keymaps/via/keymap.c b/keyboards/crkbd/rev1/common/keymaps/via/keymap.c
new file mode 100644
index 000000000000..a3b2e52ce556
--- /dev/null
+++ b/keyboards/crkbd/rev1/common/keymaps/via/keymap.c
@@ -0,0 +1,193 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_3x6_3( \
+ //,-----------------------------------------------------. ,-----------------------------------------------------.
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ESC,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LGUI, FN_MO13, KC_SPC, KC_ENT, FN_MO23, KC_RALT
+ //`--------------------------' `--------------------------'
+
+ ),
+
+ [1] = LAYOUT_split_3x6_3( \
+ //,-----------------------------------------------------. ,-----------------------------------------------------.
+ KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT\
+ //`--------------------------' `--------------------------'
+ ),
+
+ [2] = LAYOUT_split_3x6_3( \
+ //,-----------------------------------------------------. ,-----------------------------------------------------.
+ KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT
+ //`--------------------------' `--------------------------'
+ ),
+
+ [3] = LAYOUT_split_3x6_3( \
+ //,-----------------------------------------------------. ,-----------------------------------------------------.
+ RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT\
+ //`--------------------------' `--------------------------'
+ )
+};
+
+#ifdef OLED_DRIVER_ENABLE
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ if (!is_master) {
+ return OLED_ROTATION_180; // flips the display 180 degrees if offhand
+ }
+ return rotation;
+}
+
+#define L_BASE 0
+#define L_LOWER 2
+#define L_RAISE 4
+#define L_ADJUST 8
+
+void oled_render_layer_state(void) {
+ oled_write_P("Layer: ", false);
+ switch (layer_state) {
+ case L_BASE:
+ oled_write_ln_P("Default", false);
+ break;
+ case L_LOWER:
+ oled_write_ln_P("Lower", false);
+ break;
+ case L_RAISE:
+ oled_write_ln_P("Raise", false);
+ break;
+ case L_ADJUST:
+ case L_ADJUST|L_LOWER:
+ case L_ADJUST|L_RAISE:
+ case L_ADJUST|L_LOWER|L_RAISE:
+ oled_write_ln_P("Adjust", false);
+ break;
+ }
+}
+
+
+char keylog_str[24] = {};
+char keylogs_str[21] = {};
+int keylogs_str_idx = 0;
+
+const char code_to_name[60] = {
+ ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
+ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
+ 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
+ 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
+ '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
+
+void set_keylog(uint16_t keycode, keyrecord_t *record) {
+ char name = ' ';
+ if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) ||
+ (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; }
+ if (keycode < 60) {
+ name = code_to_name[keycode];
+ }
+
+ // update keylog
+ snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
+ record->event.key.row, record->event.key.col,
+ keycode, name);
+
+ // update keylogs
+ if (keylogs_str_idx == sizeof(keylogs_str) - 1) {
+ keylogs_str_idx = 0;
+ for (int i = 0; i < sizeof(keylogs_str) - 1; i++) {
+ keylogs_str[i] = ' ';
+ }
+ }
+
+ keylogs_str[keylogs_str_idx] = name;
+ keylogs_str_idx++;
+}
+
+void oled_render_keylog(void) {
+ oled_write(keylog_str, false);
+}
+void oled_render_keylogs(void) {
+ oled_write(keylogs_str, false);
+}
+
+void render_bootmagic_status(bool status) {
+ /* Show Ctrl-Gui Swap options */
+ static const char PROGMEM logo[][2][3] = {
+ {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
+ {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
+ };
+ if (status) {
+ oled_write_ln_P(logo[0][0], false);
+ oled_write_ln_P(logo[0][1], false);
+ } else {
+ oled_write_ln_P(logo[1][0], false);
+ oled_write_ln_P(logo[1][1], false);
+ }
+}
+
+void oled_render_logo(void) {
+ static const char PROGMEM crkbd_logo[] = {
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
+ 0};
+ oled_write_P(crkbd_logo, false);
+}
+
+void oled_task_user(void) {
+ if (is_master) {
+ oled_render_layer_state();
+ oled_render_keylog();
+ // oled_render_keylogs();
+ // oled_renger_bootmagic_icon(keymap_config.swap_lalt_lgui);
+ } else {
+ oled_render_logo();
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ set_keylog(keycode, record);
+ // set_timelog();
+ }
+ return true;
+}
+#endif // OLED_DRIVER_ENABLE
diff --git a/keyboards/crkbd/rev1/common/keymaps/via/rules.mk b/keyboards/crkbd/rev1/common/keymaps/via/rules.mk
new file mode 100644
index 000000000000..93b2afed4470
--- /dev/null
+++ b/keyboards/crkbd/rev1/common/keymaps/via/rules.mk
@@ -0,0 +1,5 @@
+MOUSEKEY_ENABLE = no # Mouse keys
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+VIA_ENABLE = yes # Enable VIA
+OLED_DRIVER_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/crkbd/rev1/common/rules.mk b/keyboards/crkbd/rev1/common/rules.mk
new file mode 100644
index 000000000000..0b8106e3f295
--- /dev/null
+++ b/keyboards/crkbd/rev1/common/rules.mk
@@ -0,0 +1,2 @@
+SPLIT_KEYBOARD = yes
+SPLIT_TRANSPORT = mirror # for when Split Mirroring drops, it will maintain mirroring functionality
diff --git a/keyboards/crkbd/rev1/common/ssd1306.c b/keyboards/crkbd/rev1/common/ssd1306.c
new file mode 100644
index 000000000000..4a889da6738f
--- /dev/null
+++ b/keyboards/crkbd/rev1/common/ssd1306.c
@@ -0,0 +1,360 @@
+#ifdef SSD1306OLED
+
+#include "ssd1306.h"
+#include "i2c_master.h"
+#include
+#include "print.h"
+#ifdef ADAFRUIT_BLE_ENABLE
+#include "adafruit_ble.h"
+#endif
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#endif
+#include "sendchar.h"
+#include "timer.h"
+
+struct CharacterMatrix display;
+
+extern const unsigned char font[] PROGMEM;
+
+#ifndef OLED_BLANK_CHAR
+#define OLED_BLANK_CHAR ' '
+#endif
+
+#ifndef OLED_BITS_FILTER
+#define OLED_BITS_FILTER
+#endif
+
+// Set this to 1 to help diagnose early startup problems
+// when testing power-on with ble. Turn it off otherwise,
+// as the latency of printing most of the debug info messes
+// with the matrix scan, causing keys to drop.
+#define DEBUG_TO_SCREEN 0
+
+//static uint16_t last_battery_update;
+//static uint32_t vbat;
+//#define BatteryUpdateInterval 10000 /* milliseconds */
+
+// 'last_flush' is declared as uint16_t,
+// so this must be less than 65535
+#ifndef ScreenOffInterval
+#define ScreenOffInterval 60000 /* milliseconds */
+#endif
+
+#if DEBUG_TO_SCREEN
+static uint8_t displaying;
+#endif
+static uint16_t last_flush;
+
+static bool force_dirty = true;
+
+// Write command sequence.
+// Returns true on success.
+static inline bool _send_cmd1(uint8_t cmd) {
+ bool res = false;
+
+ if (i2c_start(SSD1306_ADDRESS, 100)) {
+ xprintf("failed to start write to %d\n", SSD1306_ADDRESS);
+ goto done;
+ }
+
+ if (i2c_write(0x0 /* command byte follows */, 100)) {
+ print("failed to write control byte\n");
+
+ goto done;
+ }
+
+ if (i2c_write(cmd, 100)) {
+ xprintf("failed to write command %d\n", cmd);
+ goto done;
+ }
+ res = true;
+done:
+ i2c_stop();
+ return res;
+}
+
+#define send_cmd1(c) if (!_send_cmd1(c)) {goto done;}
+#define send_cmds(c) if (!_send_cmds(c,sizeof(c))) {goto done;}
+#define cmd1(X) X
+#define cmd2(X,Y) X,Y
+#define cmd3(X,Y,Z) X,Y,Z
+
+static bool _send_cmds(const uint8_t* p,uint8_t sz) {
+ for(uint8_t i=sz;i;i--) {
+ send_cmd1( pgm_read_byte(p++) );
+ }
+ return true;
+done:
+ return false;
+}
+
+#define SEND_CMDS(...) {static const uint8_t _cmds[] PROGMEM = { __VA_ARGS__,0 };send_cmds(_cmds);}
+
+static void clear_display(void) {
+ matrix_clear(&display);
+
+ // Clear all of the display bits (there can be random noise
+ // in the RAM on startup)
+ SEND_CMDS(
+ cmd3(PageAddr, 0, (DisplayHeight / 8) - 1),
+ cmd3(ColumnAddr, 0, DisplayWidth - 1)
+ );
+
+ if (i2c_start(SSD1306_ADDRESS, 100)) {
+ goto done;
+ }
+ if (i2c_write(0x40, 100)) {
+ // Data mode
+ goto done;
+ }
+ for (uint8_t row = MatrixRows;row; row--) {
+ for (uint8_t col = DisplayWidth; col; col--) {
+ i2c_write(0, 100);
+ }
+ }
+
+ display.dirty = false;
+
+done:
+ i2c_stop();
+}
+
+#if DEBUG_TO_SCREEN
+#undef sendchar
+static int8_t capture_sendchar(uint8_t c) {
+ sendchar(c);
+ iota_gfx_write_char(c);
+
+ if (!displaying) {
+ iota_gfx_flush();
+ }
+ return 0;
+}
+#endif
+
+bool iota_gfx_init(bool rotate) {
+ bool success = false;
+
+ i2c_init();
+ SEND_CMDS(
+ cmd1(DisplayOff),
+ cmd2(SetDisplayClockDiv, 0x80),
+ cmd2(SetMultiPlex, DisplayHeight - 1),
+ cmd2(SetDisplayOffset, 0),
+ cmd1(SetStartLine | 0x0),
+ cmd2(SetChargePump, 0x14 /* Enable */),
+ cmd2(SetMemoryMode, 0 /* horizontal addressing */)
+ );
+
+ if(rotate){
+ // the following Flip the display orientation 180 degrees
+ SEND_CMDS(
+ cmd1(SegRemap),
+ cmd1(ComScanInc)
+ );
+ }else{
+ // Flips the display orientation 0 degrees
+ SEND_CMDS(
+ cmd1(SegRemap | 0x1),
+ cmd1(ComScanDec)
+ );
+ }
+
+ SEND_CMDS(
+#ifdef SSD1306_128X64
+ cmd2(SetComPins, 0x12),
+#else
+ cmd2(SetComPins, 0x2),
+#endif
+ cmd2(SetContrast, 0x8f),
+ cmd2(SetPreCharge, 0xf1),
+ cmd2(SetVComDetect, 0x40),
+ cmd1(DisplayAllOnResume),
+ cmd1(NormalDisplay),
+ cmd1(DeActivateScroll),
+ cmd1(DisplayOn),
+
+ cmd2(SetContrast, 0) // Dim
+ );
+
+ clear_display();
+
+ success = true;
+
+ iota_gfx_flush();
+
+#if DEBUG_TO_SCREEN
+ print_set_sendchar(capture_sendchar);
+#endif
+
+done:
+ return success;
+}
+
+bool iota_gfx_off(void) {
+ bool success = false;
+
+ send_cmd1(DisplayOff);
+ success = true;
+
+done:
+ return success;
+}
+
+bool iota_gfx_on(void) {
+ bool success = false;
+
+ send_cmd1(DisplayOn);
+ success = true;
+
+done:
+ return success;
+}
+
+void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
+ *matrix->cursor = c;
+ ++matrix->cursor;
+
+ if (matrix->cursor - &matrix->display[0][0] == sizeof(matrix->display)) {
+ // We went off the end; scroll the display upwards by one line
+ memmove(&matrix->display[0], &matrix->display[1],
+ MatrixCols * (MatrixRows - 1));
+ matrix->cursor = &matrix->display[MatrixRows - 1][0];
+ memset(matrix->cursor, OLED_BLANK_CHAR, MatrixCols);
+ }
+}
+
+void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) {
+ matrix->dirty = true;
+
+ if (c == '\n') {
+ // Clear to end of line from the cursor and then move to the
+ // start of the next line
+ uint8_t cursor_col = (matrix->cursor - &matrix->display[0][0]) % MatrixCols;
+
+ while (cursor_col++ < MatrixCols) {
+ matrix_write_char_inner(matrix, OLED_BLANK_CHAR);
+ }
+ return;
+ }
+
+ matrix_write_char_inner(matrix, c);
+}
+
+void iota_gfx_write_char(uint8_t c) {
+ matrix_write_char(&display, c);
+}
+
+void matrix_write(struct CharacterMatrix *matrix, const char *data) {
+ while (*data) {
+ matrix_write_char(matrix, *data);
+ ++data;
+ }
+}
+
+void matrix_write_ln(struct CharacterMatrix *matrix, const char *data) {
+ matrix_write(matrix, data);
+ matrix_write(matrix, "\n");
+}
+
+void iota_gfx_write(const char *data) {
+ matrix_write(&display, data);
+}
+
+void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
+ while (true) {
+ uint8_t c = pgm_read_byte(data);
+ if (c == 0) {
+ return;
+ }
+ matrix_write_char(matrix, c);
+ ++data;
+ }
+}
+
+void iota_gfx_write_P(const char *data) {
+ matrix_write_P(&display, data);
+}
+
+void matrix_clear(struct CharacterMatrix *matrix) {
+ memset(matrix->display, OLED_BLANK_CHAR, sizeof(matrix->display));
+ matrix->cursor = &matrix->display[0][0];
+ matrix->dirty = true;
+}
+
+void iota_gfx_clear_screen(void) {
+ matrix_clear(&display);
+}
+
+void matrix_render(struct CharacterMatrix *matrix) {
+ last_flush = timer_read();
+ iota_gfx_on();
+#if DEBUG_TO_SCREEN
+ ++displaying;
+#endif
+
+ // Move to the home position
+ SEND_CMDS(
+ cmd3(PageAddr, 0, MatrixRows - 1),
+ cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1)
+ );
+
+ if (i2c_write(SSD1306_ADDRESS, 100)) {
+ goto done;
+ }
+ if (i2c_write(0x40, 100)) {
+ // Data mode
+ goto done;
+ }
+
+ for (uint8_t row = 0; row < MatrixRows; ++row) {
+ for (uint8_t col = 0; col < MatrixCols; ++col) {
+ const uint8_t *glyph = font + (matrix->display[row][col] * FontWidth);
+
+ for (uint8_t glyphCol = 0; glyphCol < FontWidth; ++glyphCol) {
+ uint8_t colBits = pgm_read_byte(glyph + glyphCol);
+ i2c_write(colBits OLED_BITS_FILTER, 100);
+ }
+
+ // 1 column of space between chars (it's not included in the glyph)
+ //i2c_master_write(0);
+ }
+ }
+
+ matrix->dirty = false;
+
+done:
+ i2c_stop();
+#if DEBUG_TO_SCREEN
+ --displaying;
+#endif
+}
+
+void iota_gfx_flush(void) {
+ matrix_render(&display);
+}
+
+__attribute__ ((weak))
+void iota_gfx_task_user(void) {
+}
+
+void iota_gfx_task(void) {
+ iota_gfx_task_user();
+
+ if (display.dirty|| force_dirty) {
+ iota_gfx_flush();
+ force_dirty = false;
+ }
+
+ if (ScreenOffInterval !=0 && timer_elapsed(last_flush) > ScreenOffInterval) {
+ iota_gfx_off();
+ }
+}
+
+bool process_record_gfx(uint16_t keycode, keyrecord_t *record) {
+ force_dirty = true;
+ return true;
+}
+
+#endif
diff --git a/keyboards/crkbd/rev1/config.h b/keyboards/crkbd/rev1/config.h
index f7f278f2c0f6..60bd379724eb 100644
--- a/keyboards/crkbd/rev1/config.h
+++ b/keyboards/crkbd/rev1/config.h
@@ -1,6 +1,6 @@
/*
-Copyright 2012 Jun Wako
-Copyright 2015 Jack Humbert
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,64 +18,15 @@ along with this program. If not, see .
#pragma once
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x3060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER foostan
-#define PRODUCT Corne Keyboard (crkbd)
-#define DESCRIPTION A split keyboard with 3x6 vertically staggered keys and 3 thumb keys
-
-/* key matrix size */
-// Rows are doubled-up
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 6
-#define MATRIX_ROW_PINS { D4, C6, D7, E6 }
-
-// wiring of each half
-#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
-// #define MATRIX_COL_PINS { B2, B3, B1, F7, F6, F5, F4 } //uncomment this line and comment line above if you need to reverse left-to-right key order
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-// #define BACKLIGHT_LEVELS 3
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-//#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-//#define LOCKING_RESYNC_ENABLE
-
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
#ifdef RGBLIGHT_ENABLE
-#define RGBLED_NUM 12 // Number of LEDs
+# define RGBLED_NUM 12 // Number of LEDs
+# define RGBLIGHT_SPLIT
#endif
#ifdef RGB_MATRIX_ENABLE
-#define RGBLED_NUM 54 // Number of LEDs
-#define DRIVER_LED_TOTAL RGBLED_NUM
+# define RGBLED_NUM 54 // Number of LEDs
+# define DRIVER_LED_TOTAL RGBLED_NUM
#endif
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-// #define NO_DEBUG
-
-/* disable print */
-// #define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
diff --git a/keyboards/crkbd/rev1/legacy/config.h b/keyboards/crkbd/rev1/legacy/config.h
new file mode 100644
index 000000000000..9e3676414c96
--- /dev/null
+++ b/keyboards/crkbd/rev1/legacy/config.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include
+
+#define PRODUCT Corne Keyboard Rev.1 (Legacy Split)
diff --git a/keyboards/crkbd/i2c.c b/keyboards/crkbd/rev1/legacy/i2c.c
similarity index 98%
rename from keyboards/crkbd/i2c.c
rename to keyboards/crkbd/rev1/legacy/i2c.c
index 4bee5c639829..7b45c3f86664 100644
--- a/keyboards/crkbd/i2c.c
+++ b/keyboards/crkbd/rev1/legacy/i2c.c
@@ -6,7 +6,7 @@
#include
#include "i2c.h"
-#ifdef USE_I2C
+#if defined(USE_I2C) || defined(USE_MATRIX_I2C)
// Limits the amount of we wait for any one i2c transaction.
// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
diff --git a/keyboards/crkbd/i2c.h b/keyboards/crkbd/rev1/legacy/i2c.h
similarity index 100%
rename from keyboards/crkbd/i2c.h
rename to keyboards/crkbd/rev1/legacy/i2c.h
diff --git a/keyboards/crkbd/rev1/legacy/legacy.c b/keyboards/crkbd/rev1/legacy/legacy.c
new file mode 100644
index 000000000000..595ff1eaf748
--- /dev/null
+++ b/keyboards/crkbd/rev1/legacy/legacy.c
@@ -0,0 +1,19 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "legacy.h"
diff --git a/keyboards/crkbd/rev1/legacy/legacy.h b/keyboards/crkbd/rev1/legacy/legacy.h
new file mode 100644
index 000000000000..6c6308e592c9
--- /dev/null
+++ b/keyboards/crkbd/rev1/legacy/legacy.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "rev1.h"
diff --git a/keyboards/crkbd/rev1/matrix.c b/keyboards/crkbd/rev1/legacy/matrix.c
similarity index 100%
rename from keyboards/crkbd/rev1/matrix.c
rename to keyboards/crkbd/rev1/legacy/matrix.c
diff --git a/keyboards/crkbd/rev1/legacy/post_config.h b/keyboards/crkbd/rev1/legacy/post_config.h
new file mode 100644
index 000000000000..b3d6346cc8cf
--- /dev/null
+++ b/keyboards/crkbd/rev1/legacy/post_config.h
@@ -0,0 +1,27 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#ifdef SSD1306OLED
+# define USE_I2C
+#endif
+
+#if defined(OLED_DRIVER_ENABLE) && (defined(USE_I2C) || defined(USE_MATRIX_I2C))
+# error Cannot use both legacy i2c driver and new i2c_master driver at the same time. Undefine USE_I2C and/or USE_MATRIX_I2C
+#endif
diff --git a/keyboards/crkbd/rev1/legacy/rules.mk b/keyboards/crkbd/rev1/legacy/rules.mk
new file mode 100644
index 000000000000..2bef242977ae
--- /dev/null
+++ b/keyboards/crkbd/rev1/legacy/rules.mk
@@ -0,0 +1,7 @@
+CUSTOM_MATRIX = yes
+
+SRC += matrix.c \
+ split_util.c \
+ split_scomm.c
+
+QUANTUM_LIB_SRC += i2c.c serial.c
diff --git a/keyboards/crkbd/serial.c b/keyboards/crkbd/rev1/legacy/serial.c
similarity index 100%
rename from keyboards/crkbd/serial.c
rename to keyboards/crkbd/rev1/legacy/serial.c
diff --git a/keyboards/crkbd/serial.h b/keyboards/crkbd/rev1/legacy/serial.h
similarity index 100%
rename from keyboards/crkbd/serial.h
rename to keyboards/crkbd/rev1/legacy/serial.h
diff --git a/keyboards/crkbd/rev1/legacy/serial_config.h b/keyboards/crkbd/rev1/legacy/serial_config.h
new file mode 100644
index 000000000000..40d11d4de298
--- /dev/null
+++ b/keyboards/crkbd/rev1/legacy/serial_config.h
@@ -0,0 +1,22 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#ifndef SOFT_SERIAL_PIN
+#define SOFT_SERIAL_PIN D2
+#define SERIAL_USE_MULTI_TRANSACTION
+#endif
diff --git a/keyboards/crkbd/rev1/legacy/serial_config_simpleapi.h b/keyboards/crkbd/rev1/legacy/serial_config_simpleapi.h
new file mode 100644
index 000000000000..bd152ddda34b
--- /dev/null
+++ b/keyboards/crkbd/rev1/legacy/serial_config_simpleapi.h
@@ -0,0 +1,23 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#undef SERIAL_USE_MULTI_TRANSACTION
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
diff --git a/keyboards/crkbd/rev1/split_scomm.c b/keyboards/crkbd/rev1/legacy/split_scomm.c
similarity index 79%
rename from keyboards/crkbd/rev1/split_scomm.c
rename to keyboards/crkbd/rev1/legacy/split_scomm.c
index 12b00f6840f6..c14bb32a4343 100644
--- a/keyboards/crkbd/rev1/split_scomm.c
+++ b/keyboards/crkbd/rev1/legacy/split_scomm.c
@@ -1,3 +1,21 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
#ifdef USE_SERIAL
#ifdef SERIAL_USE_MULTI_TRANSACTION
/* --- USE flexible API (using multi-type transaction function) --- */
diff --git a/keyboards/crkbd/rev1/split_scomm.h b/keyboards/crkbd/rev1/legacy/split_scomm.h
similarity index 51%
rename from keyboards/crkbd/rev1/split_scomm.h
rename to keyboards/crkbd/rev1/legacy/split_scomm.h
index 873d8939d81f..47f0ca1b9d16 100644
--- a/keyboards/crkbd/rev1/split_scomm.h
+++ b/keyboards/crkbd/rev1/legacy/split_scomm.h
@@ -1,3 +1,21 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
#ifndef SPLIT_COMM_H
#define SPLIT_COMM_H
diff --git a/keyboards/crkbd/rev1/split_util.c b/keyboards/crkbd/rev1/legacy/split_util.c
similarity index 76%
rename from keyboards/crkbd/rev1/split_util.c
rename to keyboards/crkbd/rev1/legacy/split_util.c
index b642a734cc52..d0fee04ad648 100644
--- a/keyboards/crkbd/rev1/split_util.c
+++ b/keyboards/crkbd/rev1/legacy/split_util.c
@@ -1,3 +1,21 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
#include
#include
#include
@@ -14,7 +32,7 @@
#endif
#ifdef USE_MATRIX_I2C
-# include "i2c.h"
+# include "i2c_master.h"
#else
# include "split_scomm.h"
#endif
@@ -81,7 +99,7 @@ __attribute__((weak)) bool has_usb(void) {
static void keyboard_master_setup(void) {
#ifdef USE_MATRIX_I2C
- i2c_master_init();
+ i2c_init();
#else
serial_master_init();
#endif
diff --git a/keyboards/crkbd/rev1/legacy/split_util.h b/keyboards/crkbd/rev1/legacy/split_util.h
new file mode 100644
index 000000000000..414763bff268
--- /dev/null
+++ b/keyboards/crkbd/rev1/legacy/split_util.h
@@ -0,0 +1,37 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#ifndef SPLIT_KEYBOARD_UTIL_H
+#define SPLIT_KEYBOARD_UTIL_H
+
+#include
+#include "eeconfig.h"
+
+#define SLAVE_I2C_ADDRESS 0x32
+
+extern volatile bool isLeftHand;
+
+// slave version of matix scan, defined in matrix.c
+void matrix_slave_scan(void);
+
+void split_keyboard_setup(void);
+bool has_usb(void);
+
+void matrix_master_OLED_init (void);
+
+#endif
diff --git a/keyboards/crkbd/ssd1306.c b/keyboards/crkbd/rev1/legacy/ssd1306.c
similarity index 99%
rename from keyboards/crkbd/ssd1306.c
rename to keyboards/crkbd/rev1/legacy/ssd1306.c
index 4ec8a9a00f0a..b04b7e15c1ad 100644
--- a/keyboards/crkbd/ssd1306.c
+++ b/keyboards/crkbd/rev1/legacy/ssd1306.c
@@ -134,7 +134,7 @@ bool iota_gfx_init(bool rotate) {
bool success = false;
i2c_master_init();
- SEND_CMDS(
+ SEND_CMDS(
cmd1(DisplayOff),
cmd2(SetDisplayClockDiv, 0x80),
cmd2(SetMultiPlex, DisplayHeight - 1),
@@ -146,19 +146,19 @@ bool iota_gfx_init(bool rotate) {
if(rotate){
// the following Flip the display orientation 180 degrees
- SEND_CMDS(
+ SEND_CMDS(
cmd1(SegRemap),
cmd1(ComScanInc)
);
}else{
// Flips the display orientation 0 degrees
- SEND_CMDS(
+ SEND_CMDS(
cmd1(SegRemap | 0x1),
cmd1(ComScanDec)
);
}
- SEND_CMDS(
+ SEND_CMDS(
#ifdef SSD1306_128X64
cmd2(SetComPins, 0x12),
#else
@@ -171,10 +171,10 @@ bool iota_gfx_init(bool rotate) {
cmd1(NormalDisplay),
cmd1(DeActivateScroll),
cmd1(DisplayOn),
-
+
cmd2(SetContrast, 0) // Dim
);
-
+
clear_display();
success = true;
diff --git a/keyboards/crkbd/rev1/rev1.c b/keyboards/crkbd/rev1/rev1.c
index b26292af5bfd..5e4e6560f00b 100644
--- a/keyboards/crkbd/rev1/rev1.c
+++ b/keyboards/crkbd/rev1/rev1.c
@@ -1,4 +1,21 @@
-#include "crkbd.h"
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "rev1.h"
#ifdef RGB_MATRIX_ENABLE
@@ -68,11 +85,12 @@ led_config_t g_led_config = { {
} };
#endif
-__attribute__((weak))
-void matrix_init_user(void) {}
-
void matrix_init_kb(void) {
+#ifdef KEYBOARD_crkbd_rev1_common
+ is_master = (uint8_t)is_keyboard_master();
+#endif
+
#ifdef RGB_MATRIX_ENABLE
if (!isLeftHand) {
g_led_config = (led_config_t){ {
@@ -107,3 +125,9 @@ void matrix_init_kb(void) {
#endif
matrix_init_user();
}
+
+#ifdef SSD1306OLED
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ return process_record_gfx(keycode,record) && process_record_user(keycode, record);
+}
+#endif
diff --git a/keyboards/crkbd/rev1/rev1.h b/keyboards/crkbd/rev1/rev1.h
index 2244b87f177b..ce88068e64af 100644
--- a/keyboards/crkbd/rev1/rev1.h
+++ b/keyboards/crkbd/rev1/rev1.h
@@ -1,25 +1,41 @@
+/*
+Copyright 2019 @foostan
+Copyright 2020 Drashna Jaelre <@drashna>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
#pragma once
+extern uint8_t is_master;
+
#include "crkbd.h"
+#if defined(KEYBOARD_crkbd_rev1_legacy)
+# include "legacy.h"
+#elif defined(KEYBOARD_crkbd_rev1_common)
+# include "common.h"
+#endif
#include "quantum.h"
-
+#include "split_util.h"
#ifdef PROTOCOL_LUFA
- #include "lufa.h"
- #include "split_util.h"
+# include "lufa.h"
#endif
-
#ifdef SSD1306OLED
- #include "ssd1306.h"
+# include "ssd1306.h"
#endif
-#ifdef USE_I2C
- #include
- #ifdef __AVR__
- #include
- #include
- #endif
-#endif
// clang-format off
#define LAYOUT_split_3x6_3( \
@@ -62,7 +78,7 @@
L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
L30, L31, L32, R30, R31, R32 \
) \
- LAYOUT( \
+ LAYOUT_split_3x6_3( \
KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
diff --git a/keyboards/crkbd/rev1/rules.mk b/keyboards/crkbd/rev1/rules.mk
index 21cee6bcf719..6bc5a5b03890 100644
--- a/keyboards/crkbd/rev1/rules.mk
+++ b/keyboards/crkbd/rev1/rules.mk
@@ -1,5 +1,3 @@
-SRC += matrix.c \
- split_util.c \
- split_scomm.c
+LIB_SRC += ssd1306.c
-LAYOUTS = split_3x5_3 split_3x6_3
+DEFAULT_FOLDER = crkbd/rev1/legacy
diff --git a/keyboards/crkbd/rev1/serial_config.h b/keyboards/crkbd/rev1/serial_config.h
deleted file mode 100644
index 4fab8e8ddfcf..000000000000
--- a/keyboards/crkbd/rev1/serial_config.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifndef SOFT_SERIAL_PIN
-#define SOFT_SERIAL_PIN D2
-#define SERIAL_USE_MULTI_TRANSACTION
-#endif
diff --git a/keyboards/crkbd/rev1/serial_config_simpleapi.h b/keyboards/crkbd/rev1/serial_config_simpleapi.h
deleted file mode 100644
index 0e1dd9e4acb2..000000000000
--- a/keyboards/crkbd/rev1/serial_config_simpleapi.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#pragma once
-
-#undef SERIAL_USE_MULTI_TRANSACTION
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
diff --git a/keyboards/crkbd/rev1/split_util.h b/keyboards/crkbd/rev1/split_util.h
deleted file mode 100644
index 687ca19bd3e5..000000000000
--- a/keyboards/crkbd/rev1/split_util.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef SPLIT_KEYBOARD_UTIL_H
-#define SPLIT_KEYBOARD_UTIL_H
-
-#include
-#include "eeconfig.h"
-
-#define SLAVE_I2C_ADDRESS 0x32
-
-extern volatile bool isLeftHand;
-
-// slave version of matix scan, defined in matrix.c
-void matrix_slave_scan(void);
-
-void split_keyboard_setup(void);
-bool has_usb(void);
-
-void matrix_master_OLED_init (void);
-
-#endif
diff --git a/keyboards/crkbd/ssd1306.h b/keyboards/crkbd/rev1/ssd1306.h
similarity index 100%
rename from keyboards/crkbd/ssd1306.h
rename to keyboards/crkbd/rev1/ssd1306.h
diff --git a/keyboards/crkbd/rules.mk b/keyboards/crkbd/rules.mk
index 16d05b589d62..30de5b388db2 100644
--- a/keyboards/crkbd/rules.mk
+++ b/keyboards/crkbd/rules.mk
@@ -31,12 +31,8 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-CUSTOM_MATRIX = yes
-QUANTUM_LIB_SRC += i2c.c \
- serial.c
-SRC += ssd1306.c
-
# if firmware size over limit, try this option
# CFLAGS += -flto
+LAYOUTS = split_3x5_3 split_3x6_3
-DEFAULT_FOLDER = crkbd/rev1
+DEFAULT_FOLDER = crkbd/rev1/legacy
From bc15c4f4ab81c1e2950dfc1c38cf86dc626573c9 Mon Sep 17 00:00:00 2001
From: TJ
Date: Thu, 17 Sep 2020 12:45:42 -0500
Subject: [PATCH 021/178] Update led_conf_t example (#10327)
---
docs/feature_rgb_matrix.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md
index a8fad59a191a..b70a5fcba082 100644
--- a/docs/feature_rgb_matrix.md
+++ b/docs/feature_rgb_matrix.md
@@ -129,7 +129,7 @@ Configure the hardware via your `config.h`:
From this point forward the configuration is the same for all the drivers. The `led_config_t` struct provides a key electrical matrix to led index lookup table, what the physical position of each LED is on the board, and what type of key or usage the LED if the LED represents. Here is a brief example:
```c
-const led_config_t g_led_config = { {
+led_config_t g_led_config = { {
// Key Matrix to LED Index
{ 5, NO_LED, NO_LED, 0 },
{ NO_LED, NO_LED, NO_LED, NO_LED },
From bc010d62cab9a632d6338218e648aa37a8814c1d Mon Sep 17 00:00:00 2001
From: umi <57262844+umi-umi@users.noreply.github.com>
Date: Fri, 18 Sep 2020 04:04:07 +0900
Subject: [PATCH 022/178] [Docs] Japanese translation of docs/tap_hold.md
(#10017)
* add tap_hold.md translation
* update based on comment
* update based on comment
* update based on comment
---
docs/ja/tap_hold.md | 195 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 195 insertions(+)
create mode 100644 docs/ja/tap_hold.md
diff --git a/docs/ja/tap_hold.md b/docs/ja/tap_hold.md
new file mode 100644
index 000000000000..a0f08976283c
--- /dev/null
+++ b/docs/ja/tap_hold.md
@@ -0,0 +1,195 @@
+# タップホールド設定オプション
+
+
+
+タップホールドオプションは素晴らしいものですが、問題が無いわけではありません。デフォルト設定を適切なものにしようとしましたが、一部の人にとってまだ問題を引き起こすかもしれません。
+
+次のオプションによりタップホールドキーの挙動を変更することができます。
+
+## タッピング時間
+
+以下の機能の全ての核心は、タッピング時間の設定です。これにより、何をタップとし、何をホールドとするかが決まります。これが自然に感じられるぴったりのタイミングは、キーボードごと、スイッチごと、あるいはキーごとに異ることもありえます。
+
+`config.h` に以下の設定を追加することで、この時間を全体的に設定することができます:
+
+```c
+#define TAPPING_TERM 200
+```
+
+この設定はミリ秒で定義され、デフォルトは 200ms です。これは大多数の人にとっての適切な平均値です。
+
+この機能をより細かく制御するために、以下を `config.h` に追加することができます:
+```c
+#define TAPPING_TERM_PER_KEY
+```
+
+そして、以下の関数をキーマップに追加します:
+
+```c
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SFT_T(KC_SPC):
+ return TAPPING_TERM + 1250;
+ case LT(1, KC_GRV):
+ return 130;
+ default:
+ return TAPPING_TERM;
+ }
+}
+```
+
+
+## 許容ホールド
+
+[PR#1359](https://github.com/qmk/qmk_firmware/pull/1359/) 以降、新しい `config.h` オプションがあります:
+
+```c
+#define PERMISSIVE_HOLD
+```
+
+これは高速なタイピストや高い `TAPPING_TERM` 設定に対して、タップとホールドキー(モッドタップのような)の動作を向上させます。
+
+モッドタップキーを押し、他のキーをタップ(押して放す)して、モッドタップキーを放すという動作の全てをタッピング時間内に行うと、両方のキーの「タッピング」機能が出力されます。
+
+例えば:
+
+- `SFT_T(KC_A)` を押す
+- `KC_X` を押す
+- `KC_X` を放す
+- `SFT_T(KC_A)` を放す
+
+通常、これら全てを `TAPPING_TERM` (デフォルト: 200ms) 内で行うと、ファームウェアとホストシステムによって `ax` として登録されます。許容ホールドを有効にすると、別のキーがタップされた場合にモッドタップキーを修飾キーと見なすように処理を変更し、 `X` (`SHIFT`+`x`) と登録されます。
+
+?> `モッドタップ割り込みの無視`を有効にしている場合、これにより両方の動きが変更されます。通常のキーには、最初のキーが最初に放された場合、あるいは両方のキーが `TAPPING_TERM` より長くホールドされた場合に、修飾キーが追加されます。
+
+この機能をより細かく制御するために、以下を `config.h` に追加することができます:
+
+```c
+#define PERMISSIVE_HOLD_PER_KEY
+```
+
+そして、以下の関数をキーマップに追加します:
+
+```c
+bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LT(1, KC_BSPC):
+ return true;
+ default:
+ return false;
+ }
+}
+```
+
+## モッドタップ割り込みの無視
+
+この設定を有効にするには、これを `config.h` に追加してください:
+
+```c
+#define IGNORE_MOD_TAP_INTERRUPT
+```
+
+許容ホールドと同様に、これは高速なタイピストのためのファームウェアの処理方法を変更します。モッドタップキーを押し、他のキーを押し、モッドタップキーを放し、通常のキーを放すと、通常は両方のキーの「タッピング」機能が出力されます。これはローリングコンボキーには望ましくないかもしれません。
+
+`モッドタップ割り込みの無視`を設定するには、両方のキーを `TAPPING_TERM` の間ホールドすると、(その修飾キーの)ホールド機能を実行する必要があります。
+
+例えば:
+
+- `SFT_T(KC_A)` を押す
+- `KC_X` を押す
+- `SFT_T(KC_A)` を放す
+- `KC_X` を放す
+
+通常、これは `X` (`SHIFT`+`x`) を送信します。`モッドタップ割り込みの無視` を有効にすると、ホールドアクションを登録するには、両方のキーを `TAPPING_TERM` の間ホールドする必要があります。この場合、素早いタップは `ax` を送信しますが、両方をホールドすると、`X` (`SHIFT`+`x`) を出力します。
+
+
+?> __注意__: これはモディファイアにのみ関係し、レイヤー切り替えキーには関係しません。
+
+?> `許容ホールド`を有効にすると、これは両方がどのように動作するかを変更します。通常のキーには、最初のキーが最初に放された場合、あるいは両方のキーが `TAPPING_TERM` より長くホールドされた場合に、修飾キーが追加されます。
+
+この機能をより細かく制御するために、以下を `config.h` に追加することができます:
+
+```c
+#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY
+```
+
+そして、以下の関数をキーマップに追加します:
+
+```c
+bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SFT_T(KC_SPC):
+ return true;
+ default:
+ return false;
+ }
+}
+```
+
+## タッピング強制ホールド
+
+`タッピング強制ホールド` を有効にするには、以下を `config.h` に追加します:
+
+```c
+#define TAPPING_FORCE_HOLD
+```
+
+タップの後でユーザがキーをホールドすると、これは修飾キーをホールドするかわりにタップされたキーを繰り返します。これにより、タップされたキーのために自動繰り返しを使うことができます。
+
+例:
+
+- SFT_T(KC_A) を押す
+- SFT_T(KC_A) を放す
+- SFT_T(KC_A) を押す
+- タッピング時間より長く待ちます...
+- SFT_T(KC_A) を放す
+
+デフォルトの設定では、最初に放したときに `a` が送信され、2回目の押下で `a` が送信され、コンピュータに自動リピート機能を作動させることができます。
+
+`TAPPING_FORCE_HOLD` を使うと、2回目の押下は Shift として解釈され、それをタップして使った後ですぐに修飾キーとして使うことができます。
+
+!> `TAPPING_FORCE_HOLD` はタッピングトグル(`TT` レイヤーキーコード、ワンショットタッピングトグルなど)を使うものをすべて破壊します。
+
+この機能をより細かく制御するために、以下を `config.h` に追加することができます:
+
+```c
+#define TAPPING_FORCE_HOLD_PER_KEY
+```
+
+そして、以下の関数をキーマップに追加します:
+
+```c
+bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LT(1, KC_BSPC):
+ return true;
+ default:
+ return false;
+ }
+}
+```
+
+## レトロタッピング
+
+`レトロタッピング`を有効にするには、以下を `config.h` に追加してください:
+
+```c
+#define RETRO_TAPPING
+```
+
+他のキーを押さずにデュアルファンクションキーを押して放しても何も起こりません。レトロタッピングを有効にすると、他のキーを押さずにキーを放すと、元のキーコードがタッピング時間外であっても送信されます。
+
+例えば、他のキーを押すことなく `LT(2, KC_SPACE)` を押したり放したりしても何も起こりません。これを有効にすると、代わりに `KC_SPACE` を送信します。
+
+## キー別の関数にキーレコードを含めるのはなぜですか?
+
+「キー別」の関数全てにキーレコードを含んでいることに気付いたかもしれません。そしてなぜそうしたのか不思議に思っているかもしれません。
+
+まぁ、それは単純に本当にカスタマイズのためです。ただし、具体的には、それはキーボードの配線方法によって異なります。例えば、各行が実際にキーボードのマトリックスの1行を使っている場合、キーコード全体をチェックする代わりに、`if (record->event.row == 3)` を使うほうが簡単かもしれません。これは、ホームキー行でタップホールドタイプのキーを使っている人にとって特に便利です。そのため、通常のタイピングを妨げないように微調整することができるのではないでしょうか。
+
+## `*_kb` や `*_user` 関数が無いのはなぜですか?
+
+QMK にある他の多くの関数とは異なり、quantum あるいはキーボードレベルの関数を持つ必要はありません (または理由さえありません)。ここではユーザレベルの関数だけが有用なため、そのようにマークする必要はありません。
From abec529e62ed200313af0629377f8bc60ec83367 Mon Sep 17 00:00:00 2001
From: spotpuff <32026605+spotpuff@users.noreply.github.com>
Date: Thu, 17 Sep 2020 17:55:19 -0400
Subject: [PATCH 023/178] [Keymap] coppertop and spotpuff keymaps for DZ60
(#10216)
* initial keymap commit
* Keymap for coppertop commit
* removed define for layers/kc_no/kc_trns
* Modified keymap to remove definitions and add layer enum
* initial keymap commit
* Keymap for coppertop commit
* removed define for layers/kc_no/kc_trns
* Modified keymap to remove definitions and add layer enum
* Changed KC_NO and KC_TRNS to 7X and 7_
* Fixed spacing on keymaps
* TMO50: use layer_state_set_kb at keyboard level (#10150)
* Change TMO to use layer_state_set_kb as is customary at the keyboard level.
This also factors out `process_indicator_led` to a separate method.
* [Keymap] update dz60:mrsendyyk (#10160)
Update DZ60 Personal readme.md and keymap.c
* Update readme.md
* Update keymap.c
* Update keymap.c
* Update readme.md
* Update readme.md
* Update readme.md
* Update keymap.c
* Update readme.md
* Update
* Update readme.md
* Update keymap.c
* Update readme.md
* [Keyboard] YMDK NP21 refactor (#10181)
* [Keyboard] 1upkeyboards/1up60rgb: fix broken Enter (#10188)
The recent change to unnest macros put the enter on the wrong matrix key. On the 1uprgb, the ANSI and ISO enters share the same cell as does the ANSI and ISO backslash.
* no idea what this is
* Update keyboards/dz60/keymaps/coppertop/keymap.c
* Update keyboards/dz60/keymaps/coppertop/keymap.c
* Update keyboards/dz60/keymaps/coppertop/keymap.c
* Update keyboards/dz60/keymaps/spotpuff/keymap.c
* Update keyboards/dz60/keymaps/spotpuff/keymap.c
* Update keyboards/dz60/keymaps/spotpuff/keymap.c
* Added Trns labels to keymap comments.
* Revert "no idea what this is"
This reverts commit dd950f9eb3bad365961d2aa6c97c9dfbdd6219db.
* Reverted dd950f9eb3bad365961d2aa6c97c9dfbdd6219db
* fix vusb submodule
* Update keyboards/dz60/keymaps/coppertop/rules.mk
* Update keyboards/dz60/keymaps/spotpuff/rules.mk
* Update users/spotpuff/rules.mk
* Added GNU copyright license text
---
keyboards/dz60/keymaps/coppertop/keymap.c | 95 +++++++++++++++++++++++
keyboards/dz60/keymaps/coppertop/rules.mk | 1 +
keyboards/dz60/keymaps/spotpuff/keymap.c | 95 +++++++++++++++++++++++
keyboards/dz60/keymaps/spotpuff/rules.mk | 1 +
users/spotpuff/rules.mk | 1 +
5 files changed, 193 insertions(+)
create mode 100644 keyboards/dz60/keymaps/coppertop/keymap.c
create mode 100644 keyboards/dz60/keymaps/coppertop/rules.mk
create mode 100644 keyboards/dz60/keymaps/spotpuff/keymap.c
create mode 100644 keyboards/dz60/keymaps/spotpuff/rules.mk
create mode 100644 users/spotpuff/rules.mk
diff --git a/keyboards/dz60/keymaps/coppertop/keymap.c b/keyboards/dz60/keymaps/coppertop/keymap.c
new file mode 100644
index 000000000000..8586f920f9d8
--- /dev/null
+++ b/keyboards/dz60/keymaps/coppertop/keymap.c
@@ -0,0 +1,95 @@
+ /* Copyright 2020 Philip Chan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+//Layers
+enum layer_names {
+ _QWERTY,
+ _FN,
+ _MEDIA,
+};
+
+//Custom Keymap Definitions
+#define KC_CAD LALT(LCTL(KC_DEL))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty Base layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BSpc| Del |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+ * |-----------------------------------------------------------------------------------------+
+ * | `/_Media| A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / |Home | Up |End |
+ * |-----------------------------------------------------------------------------------------+
+ * | LCtrl | LGui | LAlt | Space | Fn | Space | F7 | F10 |Left |Down |Right|
+ * `----------------------------------------------------------------------------------------'
+ */
+
+ [_QWERTY] = LAYOUT_directional(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ 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,
+ LT(_MEDIA,KC_GRV), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_HOME, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN), KC_SPC, KC_F7, KC_F10, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+/* F-Key/Lighting/whatever layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F0 | F11 | F12 | | Ins |
+ * |-----------------------------------------------------------------------------------------+
+ * | |R_Tog|R_HUI|R_SAI|R_VAI| | | | | | | | | KC_CAD |
+ * |-----------------------------------------------------------------------------------------+
+ * | Caps | |R_HUD|R_SAD| | | | | | | SLCK|PAUSE| Print Screen|
+ * |-----------------------------------------------------------------------------------------+
+ * | |R_M_P|R_M_B|R_M_R|R_M_SW|R_M_S|R_M_K|R_M_X|R_M_G| | |PgUp |BLUP |PgDn |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | |BLTog|BLDN |BLInc|
+ * `----------------------------------------------------------------------------------------'
+ */
+
+ [_FN] = LAYOUT_directional(
+ XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_INS,
+ XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_CAD,
+ KC_CAPS, XXXXXXX, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLCK, KC_PAUS, KC_PSCR,
+ _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, XXXXXXX, XXXXXXX, KC_PGUP, BL_INC, KC_PGDN,
+ _______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, BL_TOGG, BL_DEC, BL_STEP
+ ),
+
+/* SFX/Multimedia/Numpad layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | | | | | | | | | / | * | - | = | |Trns |Trns |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | Prev | Play| Next| | | 7 | 8 | 9 | + | | | RESET |
+ * |-----------------------------------------------------------------------------------------+
+ * | | |Mute | VUp | VDn | | | 4 | 5 | 6 | + | | Trns |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | 1 | 2 | 3 |NumEN| | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | Trns | Trns | Trns | Trns | | 0 | . | | | | |
+ * `----------------------------------------------------------------------------------------'
+ */
+
+ [_MEDIA] = LAYOUT_directional(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSLS, KC_PAST, KC_PMNS, KC_PEQL, XXXXXXX, _______, _______,
+ XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_PPLS, XXXXXXX, XXXXXXX, RESET,
+ _______, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, KC_P4, KC_P5, KC_P6, KC_PPLS, XXXXXXX, _______,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P1, KC_P2, KC_P3, KC_PENT, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, _______, _______, _______, _______, KC_P0, KC_PDOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ )
+};
diff --git a/keyboards/dz60/keymaps/coppertop/rules.mk b/keyboards/dz60/keymaps/coppertop/rules.mk
new file mode 100644
index 000000000000..27905483738a
--- /dev/null
+++ b/keyboards/dz60/keymaps/coppertop/rules.mk
@@ -0,0 +1 @@
+BOOTMAGIC_ENABLE = no
diff --git a/keyboards/dz60/keymaps/spotpuff/keymap.c b/keyboards/dz60/keymaps/spotpuff/keymap.c
new file mode 100644
index 000000000000..edbe635e39a4
--- /dev/null
+++ b/keyboards/dz60/keymaps/spotpuff/keymap.c
@@ -0,0 +1,95 @@
+ /* Copyright 2020 Philip Chan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+//Layers
+enum layer_names {
+ _QWERTY,
+ _FN,
+ _MEDIA,
+};
+
+//Custom Keymap Definitions
+#define KC_CAD LALT(LCTL(KC_DEL))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty Base layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BSpc| Del |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+ * |-----------------------------------------------------------------------------------------+
+ * | `/_Media| A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / |PgUp | Up |PgDn |
+ * |-----------------------------------------------------------------------------------------+
+ * | LCtrl | LGui | LAlt | Space | Fn | Space |Home | End |Left |Down |Right|
+ * `----------------------------------------------------------------------------------------'
+ */
+
+ [_QWERTY] = LAYOUT_directional(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ 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,
+ LT(_MEDIA,KC_GRV), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_PGUP, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN), KC_SPC, KC_HOME, KC_END, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+/* F-Key/Lighting/whatever layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F0 | F11 | F12 | | Ins |
+ * |-----------------------------------------------------------------------------------------+
+ * | |R_Tog|R_HUI|R_SAI|R_VAI| | | | | | | | | KC_CAD |
+ * |-----------------------------------------------------------------------------------------+
+ * | Caps | |R_HUD|R_SAD| | | | | | | SLCK|PAUSE| Print Screen|
+ * |-----------------------------------------------------------------------------------------+
+ * | Trns |R_M_P|R_M_B|R_M_R|R_M_SW|R_M_S|R_M_K|R_M_X|R_M_G| | | |BLUP | |
+ * |-----------------------------------------------------------------------------------------+
+ * | Trns | Trns | Trns | | Trns | | | |BLTog|BLDN |BLInc|
+ * `----------------------------------------------------------------------------------------'
+ */
+
+ [_FN] = LAYOUT_directional(
+ XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_INS,
+ XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_CAD,
+ KC_CAPS, XXXXXXX, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLCK, KC_PAUS, KC_PSCR,
+ _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, XXXXXXX, XXXXXXX, XXXXXXX, BL_INC, XXXXXXX,
+ _______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, BL_TOGG, BL_DEC, BL_STEP
+ ),
+
+/* SFX/Multimedia/Numpad layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | | | | | | |NumLk| | / | * | - | = | |Trns |Trns |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | Prev | Play| Next| | | 7 | 8 | 9 | + | | | RESET |
+ * |-----------------------------------------------------------------------------------------+
+ * | Trns | |Mute | VUp | VDn | | | 4 | 5 | 6 | + | | Trns |
+ * |-----------------------------------------------------------------------------------------+
+ * | Trns | | | | | | | 1 | 2 | 3 |NumEN| | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | Trns | Trns | Trns | Trns | Trns | 0 | . | | | | |
+ * `----------------------------------------------------------------------------------------'
+ */
+
+ [_MEDIA] = LAYOUT_directional(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NLCK, XXXXXXX, KC_PSLS, KC_PAST, KC_PMNS, KC_PEQL, XXXXXXX, _______, _______,
+ XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_PPLS, XXXXXXX, XXXXXXX, RESET,
+ _______, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, KC_P4, KC_P5, KC_P6, KC_PPLS, XXXXXXX, _______,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P1, KC_P2, KC_P3, KC_PENT, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, _______, _______, _______, _______, KC_P0, KC_PDOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ )
+};
diff --git a/keyboards/dz60/keymaps/spotpuff/rules.mk b/keyboards/dz60/keymaps/spotpuff/rules.mk
new file mode 100644
index 000000000000..27905483738a
--- /dev/null
+++ b/keyboards/dz60/keymaps/spotpuff/rules.mk
@@ -0,0 +1 @@
+BOOTMAGIC_ENABLE = no
diff --git a/users/spotpuff/rules.mk b/users/spotpuff/rules.mk
new file mode 100644
index 000000000000..27905483738a
--- /dev/null
+++ b/users/spotpuff/rules.mk
@@ -0,0 +1 @@
+BOOTMAGIC_ENABLE = no
From b846480d5a83171e85dba48422b42aa95e29d31a Mon Sep 17 00:00:00 2001
From: David Cuthbert
Date: Thu, 17 Sep 2020 15:14:39 -0700
Subject: [PATCH 024/178] Output an error message if
LINK_TIME_OPTIMIZATION_ENABLE is set but LTO_ENABLE is not (#10217)
* Output an error message if LINK_TIME_OPTIMIZATION_ENABLE is set but LTO_ENABLE is not.
* Update common.mk
Specify that LINK_TIME_OPTIMZATION_ENABLE has been renamed, not deprecated.
---
tmk_core/common.mk | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tmk_core/common.mk b/tmk_core/common.mk
index 3c9de33c9940..c60a1c405254 100644
--- a/tmk_core/common.mk
+++ b/tmk_core/common.mk
@@ -161,6 +161,8 @@ ifeq ($(strip $(LTO_ENABLE)), yes)
EXTRAFLAGS += -flto
TMK_COMMON_DEFS += -DLTO_ENABLE
TMK_COMMON_DEFS += -DLINK_TIME_OPTIMIZATON_ENABLE
+else ifdef LINK_TIME_OPTIMIZATION_ENABLE
+ $(error The LINK_TIME_OPTIMIZATION_ENABLE flag has been renamed to LTO_ENABLE.)
endif
# Search Path
From f079dd90ed88fd29b7e5bbdd3496742f3afeff4e Mon Sep 17 00:00:00 2001
From: holtenc
Date: Thu, 17 Sep 2020 22:17:22 -0500
Subject: [PATCH 025/178] Meridian initial commit (#10196)
* Meridian initial commit
* requested changes
* Update keyboards/primekb/meridian/config.h
Co-authored-by: Ryan
* Update keyboards/primekb/meridian/rules.mk
Co-authored-by: Ryan
* made requested changes
* Update meridian.c
* Update keyboards/primekb/meridian/readme.md
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-authored-by: Ryan
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
---
keyboards/primekb/meridian/chconf.h | 714 ++++++++++++++++++
keyboards/primekb/meridian/config.h | 46 ++
keyboards/primekb/meridian/halconf.h | 525 +++++++++++++
keyboards/primekb/meridian/info.json | 15 +
.../primekb/meridian/keymaps/default/keymap.c | 35 +
.../primekb/meridian/keymaps/via/keymap.c | 49 ++
.../primekb/meridian/keymaps/via/rules.mk | 1 +
keyboards/primekb/meridian/mcuconf.h | 176 +++++
keyboards/primekb/meridian/meridian.c | 68 ++
keyboards/primekb/meridian/meridian.h | 52 ++
keyboards/primekb/meridian/readme.md | 12 +
keyboards/primekb/meridian/rules.mk | 23 +
12 files changed, 1716 insertions(+)
create mode 100644 keyboards/primekb/meridian/chconf.h
create mode 100644 keyboards/primekb/meridian/config.h
create mode 100644 keyboards/primekb/meridian/halconf.h
create mode 100644 keyboards/primekb/meridian/info.json
create mode 100644 keyboards/primekb/meridian/keymaps/default/keymap.c
create mode 100644 keyboards/primekb/meridian/keymaps/via/keymap.c
create mode 100644 keyboards/primekb/meridian/keymaps/via/rules.mk
create mode 100644 keyboards/primekb/meridian/mcuconf.h
create mode 100644 keyboards/primekb/meridian/meridian.c
create mode 100644 keyboards/primekb/meridian/meridian.h
create mode 100644 keyboards/primekb/meridian/readme.md
create mode 100644 keyboards/primekb/meridian/rules.mk
diff --git a/keyboards/primekb/meridian/chconf.h b/keyboards/primekb/meridian/chconf.h
new file mode 100644
index 000000000000..03f63da36a88
--- /dev/null
+++ b/keyboards/primekb/meridian/chconf.h
@@ -0,0 +1,714 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file rt/templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+#define _CHIBIOS_RT_CONF_VER_6_0_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#if !defined(CH_CFG_ST_RESOLUTION)
+#define CH_CFG_ST_RESOLUTION 32
+#endif
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#if !defined(CH_CFG_ST_FREQUENCY)
+#define CH_CFG_ST_FREQUENCY 10000
+#endif
+
+/**
+ * @brief Time intervals data size.
+ * @note Allowed values are 16, 32 or 64 bits.
+ */
+#if !defined(CH_CFG_INTERVALS_SIZE)
+#define CH_CFG_INTERVALS_SIZE 32
+#endif
+
+/**
+ * @brief Time types data size.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#if !defined(CH_CFG_TIME_TYPES_SIZE)
+#define CH_CFG_TIME_TYPES_SIZE 32
+#endif
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#if !defined(CH_CFG_ST_TIMEDELTA)
+#define CH_CFG_ST_TIMEDELTA 2
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#if !defined(CH_CFG_TIME_QUANTUM)
+#define CH_CFG_TIME_QUANTUM 0
+#endif
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#if !defined(CH_CFG_MEMCORE_SIZE)
+#define CH_CFG_MEMCORE_SIZE 0
+#endif
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#if !defined(CH_CFG_NO_IDLE_THREAD)
+#define CH_CFG_NO_IDLE_THREAD FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_OPTIMIZE_SPEED)
+#define CH_CFG_OPTIMIZE_SPEED FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_TM)
+#define CH_CFG_USE_TM FALSE
+#endif
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_REGISTRY)
+#define CH_CFG_USE_REGISTRY TRUE
+#endif
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_WAITEXIT)
+#define CH_CFG_USE_WAITEXIT TRUE
+#endif
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_SEMAPHORES)
+#define CH_CFG_USE_SEMAPHORES TRUE
+#endif
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY)
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+#endif
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MUTEXES)
+#define CH_CFG_USE_MUTEXES TRUE
+#endif
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#if !defined(CH_CFG_USE_MUTEXES_RECURSIVE)
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+#endif
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#if !defined(CH_CFG_USE_CONDVARS)
+#define CH_CFG_USE_CONDVARS TRUE
+#endif
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#if !defined(CH_CFG_USE_CONDVARS_TIMEOUT)
+#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
+#endif
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_EVENTS)
+#define CH_CFG_USE_EVENTS TRUE
+#endif
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#if !defined(CH_CFG_USE_EVENTS_TIMEOUT)
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+#endif
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MESSAGES)
+#define CH_CFG_USE_MESSAGES TRUE
+#endif
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#if !defined(CH_CFG_USE_MESSAGES_PRIORITY)
+#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
+#endif
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#if !defined(CH_CFG_USE_MAILBOXES)
+#define CH_CFG_USE_MAILBOXES TRUE
+#endif
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MEMCORE)
+#define CH_CFG_USE_MEMCORE TRUE
+#endif
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#if !defined(CH_CFG_USE_HEAP)
+#define CH_CFG_USE_HEAP FALSE
+#endif
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_MEMPOOLS)
+#define CH_CFG_USE_MEMPOOLS FALSE
+#endif
+
+/**
+ * @brief Objects FIFOs APIs.
+ * @details If enabled then the objects FIFOs APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_OBJ_FIFOS)
+#define CH_CFG_USE_OBJ_FIFOS FALSE
+#endif
+
+/**
+ * @brief Pipes APIs.
+ * @details If enabled then the pipes APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_CFG_USE_PIPES)
+#define CH_CFG_USE_PIPES FALSE
+#endif
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#if !defined(CH_CFG_USE_DYNAMIC)
+#define CH_CFG_USE_DYNAMIC FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Objects factory options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Objects Factory APIs.
+ * @details If enabled then the objects factory APIs are included in the
+ * kernel.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_CFG_USE_FACTORY)
+#define CH_CFG_USE_FACTORY FALSE
+#endif
+
+/**
+ * @brief Maximum length for object names.
+ * @details If the specified length is zero then the name is stored by
+ * pointer but this could have unintended side effects.
+ */
+#if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH)
+#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8
+#endif
+
+/**
+ * @brief Enables the registry of generic objects.
+ */
+#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY)
+#define CH_CFG_FACTORY_OBJECTS_REGISTRY FALSE
+#endif
+
+/**
+ * @brief Enables factory for generic buffers.
+ */
+#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS)
+#define CH_CFG_FACTORY_GENERIC_BUFFERS FALSE
+#endif
+
+/**
+ * @brief Enables factory for semaphores.
+ */
+#if !defined(CH_CFG_FACTORY_SEMAPHORES)
+#define CH_CFG_FACTORY_SEMAPHORES FALSE
+#endif
+
+/**
+ * @brief Enables factory for mailboxes.
+ */
+#if !defined(CH_CFG_FACTORY_MAILBOXES)
+#define CH_CFG_FACTORY_MAILBOXES FALSE
+#endif
+
+/**
+ * @brief Enables factory for objects FIFOs.
+ */
+#if !defined(CH_CFG_FACTORY_OBJ_FIFOS)
+#define CH_CFG_FACTORY_OBJ_FIFOS FALSE
+#endif
+
+/**
+ * @brief Enables factory for Pipes.
+ */
+#if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__)
+#define CH_CFG_FACTORY_PIPES FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_STATISTICS)
+#define CH_DBG_STATISTICS FALSE
+#endif
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_SYSTEM_STATE_CHECK)
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+#endif
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_ENABLE_CHECKS)
+#define CH_DBG_ENABLE_CHECKS FALSE
+#endif
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_ENABLE_ASSERTS)
+#define CH_DBG_ENABLE_ASSERTS FALSE
+#endif
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#if !defined(CH_DBG_TRACE_MASK)
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+#endif
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#if !defined(CH_DBG_TRACE_BUFFER_SIZE)
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+#endif
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#if !defined(CH_DBG_ENABLE_STACK_CHECK)
+#define CH_DBG_ENABLE_STACK_CHECK FALSE
+#endif
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_FILL_THREADS)
+#define CH_DBG_FILL_THREADS FALSE
+#endif
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#if !defined(CH_DBG_THREADS_PROFILING)
+#define CH_DBG_THREADS_PROFILING FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System structure extension.
+ * @details User fields added to the end of the @p ch_system_t structure.
+ */
+#define CH_CFG_SYSTEM_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief System initialization hook.
+ * @details User initialization code added to the @p chSysInit() function
+ * just before interrupts are enabled globally.
+ */
+#define CH_CFG_SYSTEM_INIT_HOOK() { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p _thread_init() function.
+ *
+ * @note It is invoked from within @p _thread_init() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/primekb/meridian/config.h b/keyboards/primekb/meridian/config.h
new file mode 100644
index 000000000000..9194023abb33
--- /dev/null
+++ b/keyboards/primekb/meridian/config.h
@@ -0,0 +1,46 @@
+/*
+Copyright 2020 Holten Campbell
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x5052
+#define PRODUCT_ID 0x004D
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Prime Keyboards
+#define PRODUCT Meridian
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+#define MATRIX_COL_PINS { B11, B10, B2, B1, B0, A7, B9, B8, B7, B6, B5, B4, B3, A15 }
+#define MATRIX_ROW_PINS { A6, A5, A4, A3, A2 }
+#define DIODE_DIRECTION COL2ROW
+
+#define RGB_DI_PIN B15
+#define RGBLED_NUM 3
+#define WS2812_SPI SPID2
+#define WS2812_SPI_MOSI_PAL_MODE 0
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/primekb/meridian/halconf.h b/keyboards/primekb/meridian/halconf.h
new file mode 100644
index 000000000000..adb1a907154b
--- /dev/null
+++ b/keyboards/primekb/meridian/halconf.h
@@ -0,0 +1,525 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef HALCONF_H
+#define HALCONF_H
+
+#define _CHIBIOS_HAL_CONF_
+#define _CHIBIOS_HAL_CONF_VER_7_0_
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the cryptographic subsystem.
+ */
+#if !defined(HAL_USE_CRY) || defined(__DOXYGEN__)
+#define HAL_USE_CRY FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT FALSE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C TRUE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM TRUE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB FALSE
+#endif
+
+/**
+ * @brief Enables the SIO subsystem.
+ */
+#if !defined(HAL_USE_SIO) || defined(__DOXYGEN__)
+#define HAL_USE_SIO FALSE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI TRUE
+#endif
+
+/**
+ * @brief Enables the TRNG subsystem.
+ */
+#if !defined(HAL_USE_TRNG) || defined(__DOXYGEN__)
+#define HAL_USE_TRNG FALSE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/**
+ * @brief Enables the WSPI subsystem.
+ */
+#if !defined(HAL_USE_WSPI) || defined(__DOXYGEN__)
+#define HAL_USE_WSPI FALSE
+#endif
+
+/*===========================================================================*/
+/* PAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(PAL_USE_CALLBACKS) || defined(__DOXYGEN__)
+#define PAL_USE_CALLBACKS FALSE
+#endif
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(PAL_USE_WAIT) || defined(__DOXYGEN__)
+#define PAL_USE_WAIT FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/**
+ * @brief Enforces the driver to use direct callbacks rather than OSAL events.
+ */
+#if !defined(CAN_ENFORCE_USE_CALLBACKS) || defined(__DOXYGEN__)
+#define CAN_ENFORCE_USE_CALLBACKS FALSE
+#endif
+
+/*===========================================================================*/
+/* CRY driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the SW fall-back of the cryptographic driver.
+ * @details When enabled, this option, activates a fall-back software
+ * implementation for algorithms not supported by the underlying
+ * hardware.
+ * @note Fall-back implementations may not be present for all algorithms.
+ */
+#if !defined(HAL_CRY_USE_FALLBACK) || defined(__DOXYGEN__)
+#define HAL_CRY_USE_FALLBACK FALSE
+#endif
+
+/**
+ * @brief Makes the driver forcibly use the fall-back implementations.
+ */
+#if !defined(HAL_CRY_ENFORCE_FALLBACK) || defined(__DOXYGEN__)
+#define HAL_CRY_ENFORCE_FALLBACK FALSE
+#endif
+
+/*===========================================================================*/
+/* DAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(DAC_USE_WAIT) || defined(__DOXYGEN__)
+#define DAC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p dacAcquireBus() and @p dacReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(DAC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define DAC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the zero-copy API.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY FALSE
+#endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/**
+ * @brief OCR initialization constant for V20 cards.
+ */
+#if !defined(SDC_INIT_OCR_V20) || defined(__DOXYGEN__)
+#define SDC_INIT_OCR_V20 0x50FF8000U
+#endif
+
+/**
+ * @brief OCR initialization constant for non-V20 cards.
+ */
+#if !defined(SDC_INIT_OCR) || defined(__DOXYGEN__)
+#define SDC_INIT_OCR 0x80100000U
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 16 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 256 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 1
+#endif
+
+/**
+ * @brief Serial over USB number of buffers.
+ * @note The default is 2 buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_NUMBER 2
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables circular transfers APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_CIRCULAR) || defined(__DOXYGEN__)
+#define SPI_USE_CIRCULAR FALSE
+#endif
+
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/**
+ * @brief Handling method for SPI CS line.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_SELECT_MODE) || defined(__DOXYGEN__)
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+#endif
+
+/*===========================================================================*/
+/* UART driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
+#define UART_USE_WAIT FALSE
+#endif
+
+/**
+ * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define UART_USE_MUTUAL_EXCLUSION FALSE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+/*===========================================================================*/
+/* WSPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(WSPI_USE_WAIT) || defined(__DOXYGEN__)
+#define WSPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p wspiAcquireBus() and @p wspiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(WSPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define WSPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+#endif /* HALCONF_H */
+
+/** @} */
diff --git a/keyboards/primekb/meridian/info.json b/keyboards/primekb/meridian/info.json
new file mode 100644
index 000000000000..3397ae500a99
--- /dev/null
+++ b/keyboards/primekb/meridian/info.json
@@ -0,0 +1,15 @@
+{
+ "keyboard_name": "Meridian",
+ "url": "https://www.primekb.com",
+ "maintainer": "holtenc",
+ "width": 16.5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_unified_bs_rshift": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":8.5, "y":0}, {"label":"*", "x":9.5, "y":0}, {"label":"(", "x":10.5, "y":0}, {"label":")", "x":11.5, "y":0}, {"label":"_", "x":12.5, "y":0}, {"label":"+", "x":13.5, "y":0}, {"label":"Backspace", "x":14.5, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":8, "y":1}, {"label":"U", "x":9, "y":1}, {"label":"I", "x":10, "y":1}, {"label":"O", "x":11, "y":1}, {"label":"P", "x":12, "y":1}, {"label":"{", "x":13, "y":1}, {"label":"}", "x":14, "y":1}, {"label":"|", "x":15, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":8.25, "y":2}, {"label":"J", "x":9.25, "y":2}, {"label":"K", "x":10.25, "y":2}, {"label":"L", "x":11.25, "y":2}, {"label":":", "x":12.25, "y":2}, {"label":"\"", "x":13.25, "y":2}, {"label":"Enter", "x":14.25, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"B", "x":7.75, "y":3}, {"label":"N", "x":8.75, "y":3}, {"label":"M", "x":9.75, "y":3}, {"label":"<", "x":10.75, "y":3}, {"label":">", "x":11.75, "y":3}, {"label":"?", "x":12.75, "y":3}, {"label":"Shift", "x":13.75, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":3.75, "y":4, "w":1.25}, {"x":5, "y":4, "w":2.25}, {"x":7.75, "y":4, "w":2.75}, {"label":"Alt", "x":10.5, "y":4, "w":1.25}, {"label":"Win", "x":12.75, "y":4, "w":1.25}, {"label":"Menu", "x":14, "y":4, "w":1.25}, {"label":"Ctrl", "x":15.25, "y":4, "w":1.25}]
+ },
+ "LAYOUT_split_bs_rshift": {
+ "layout":[{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":8.5, "y":0}, {"label":"*", "x":9.5, "y":0}, {"label":"(", "x":10.5, "y":0}, {"label":")", "x":11.5, "y":0}, {"label":"_", "x":12.5, "y":0}, {"label":"+", "x":13.5, "y":0}, {"label":"Del", "x":14.5, "y":0}, {"label":"Backspace", "x":15.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":8, "y":1}, {"label":"U", "x":9, "y":1}, {"label":"I", "x":10, "y":1}, {"label":"O", "x":11, "y":1}, {"label":"P", "x":12, "y":1}, {"label":"{", "x":13, "y":1}, {"label":"}", "x":14, "y":1}, {"label":"|", "x":15, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":8.25, "y":2}, {"label":"J", "x":9.25, "y":2}, {"label":"K", "x":10.25, "y":2}, {"label":"L", "x":11.25, "y":2}, {"label":":", "x":12.25, "y":2}, {"label":"\"", "x":13.25, "y":2}, {"label":"Enter", "x":14.25, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"B", "x":7.75, "y":3}, {"label":"N", "x":8.75, "y":3}, {"label":"M", "x":9.75, "y":3}, {"label":"<", "x":10.75, "y":3}, {"label":">", "x":11.75, "y":3}, {"label":"?", "x":12.75, "y":3}, {"label":"Shift", "x":13.75, "y":3, "w":1.75}, {"label":"Fn", "x":15.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":3.75, "y":4, "w":1.25}, {"x":5, "y":4, "w":2.25}, {"x":7.75, "y":4, "w":2.75}, {"label":"Alt", "x":10.5, "y":4, "w":1.25}, {"label":"Win", "x":12.75, "y":4, "w":1.25}, {"label":"Menu", "x":14, "y":4, "w":1.25}, {"label":"Ctrl", "x":15.25, "y":4, "w":1.25}]
+ }
+ }
+}
diff --git a/keyboards/primekb/meridian/keymaps/default/keymap.c b/keyboards/primekb/meridian/keymaps/default/keymap.c
new file mode 100644
index 000000000000..2ea91eeb133d
--- /dev/null
+++ b/keyboards/primekb/meridian/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+/*
+Copyright 2020 Holten Campbell
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_bs_rshift(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RGUI, KC_RCTL
+ ),
+ [1] = LAYOUT_split_bs_rshift(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_BSPC,
+ _______, _______, KC_PGUP, _______, _______, _______, _______, _______, KC_UP, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______,
+ _______, KC_HOME, KC_PGDN, KC_END, _______, KC_VOLD, KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/primekb/meridian/keymaps/via/keymap.c b/keyboards/primekb/meridian/keymaps/via/keymap.c
new file mode 100644
index 000000000000..9c314d657c51
--- /dev/null
+++ b/keyboards/primekb/meridian/keymaps/via/keymap.c
@@ -0,0 +1,49 @@
+/*
+Copyright 2020 Holten Campbell
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_bs_rshift(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_RGUI, KC_RCTL
+ ),
+ [1] = LAYOUT_split_bs_rshift(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_BSPC,
+ _______, _______, KC_PGUP, _______, _______, _______, _______, _______, KC_UP, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______,
+ _______, KC_HOME, KC_PGDN, KC_END, _______, KC_VOLD, KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_split_bs_rshift(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT_split_bs_rshift(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/primekb/meridian/keymaps/via/rules.mk b/keyboards/primekb/meridian/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/primekb/meridian/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/primekb/meridian/mcuconf.h b/keyboards/primekb/meridian/mcuconf.h
new file mode 100644
index 000000000000..048eb4df650d
--- /dev/null
+++ b/keyboards/primekb/meridian/mcuconf.h
@@ -0,0 +1,176 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+/*
+ * STM32F0xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 3...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#define STM32F0xx_MCUCONF
+// #define STM32F070xB
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+#define STM32_HSI_ENABLED TRUE
+#define STM32_HSI14_ENABLED TRUE
+#define STM32_HSI48_ENABLED FALSE
+#define STM32_LSI_ENABLED TRUE
+#define STM32_HSE_ENABLED FALSE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSI_DIV2
+#define STM32_PREDIV_VALUE 1
+#define STM32_PLLMUL_VALUE 12
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE STM32_PPRE_DIV1
+#define STM32_ADCSW STM32_ADCSW_HSI14
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_ADCSW STM32_ADCSW_HSI14
+#define STM32_USBSW STM32_USBSW_HSI48
+#define STM32_CECSW STM32_CECSW_HSI
+#define STM32_I2C1SW STM32_I2C1SW_HSI
+#define STM32_USART1SW STM32_USART1SW_PCLK
+#define STM32_RTCSEL STM32_RTCSEL_LSI
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_IRQ_PRIORITY 2
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_1_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI2_3_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI4_15_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 3
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM14 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 2
+#define STM32_GPT_TIM2_IRQ_PRIORITY 2
+#define STM32_GPT_TIM3_IRQ_PRIORITY 2
+#define STM32_GPT_TIM14_IRQ_PRIORITY 2
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 TRUE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_IRQ_PRIORITY 3
+#define STM32_I2C_I2C2_IRQ_PRIORITY 3
+#define STM32_I2C_USE_DMA TRUE
+#define STM32_I2C_I2C1_DMA_PRIORITY 1
+#define STM32_I2C_I2C2_DMA_PRIORITY 1
+#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 3
+#define STM32_ICU_TIM2_IRQ_PRIORITY 3
+#define STM32_ICU_TIM3_IRQ_PRIORITY 3
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 TRUE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 3
+#define STM32_PWM_TIM2_IRQ_PRIORITY 3
+#define STM32_PWM_TIM3_IRQ_PRIORITY 3
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 3
+#define STM32_SERIAL_USART2_PRIORITY 3
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 TRUE
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 2
+#define STM32_SPI_SPI2_IRQ_PRIORITY 2
+#define STM32_SPI_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_SPI_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 2
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY 3
+#define STM32_UART_USART2_IRQ_PRIORITY 3
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 3
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/primekb/meridian/meridian.c b/keyboards/primekb/meridian/meridian.c
new file mode 100644
index 000000000000..8d94faf9eab9
--- /dev/null
+++ b/keyboards/primekb/meridian/meridian.c
@@ -0,0 +1,68 @@
+/*
+Copyright 2020 Holten Campbell
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "meridian.h"
+
+//Initialize B12 for in-switch caps lock
+void keyboard_pre_init_kb(void){
+ setPinOutput(B12);
+ keyboard_pre_init_user();
+}
+
+//Initialize all RGB indicators to 'off'
+__attribute__((weak))
+void keyboard_post_init_user(void) {
+ rgblight_setrgb_at(0, 0, 0, 0); // [..., 0] = top LED
+ rgblight_setrgb_at(0, 0, 0, 1); // [..., 1] = middle LED
+ rgblight_setrgb_at(0, 0, 0, 2); // [..., 2] = bottom LED
+}
+
+//Indicator light function
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if (res) {
+ // writePin(B12, !led_state.caps_lock); //Un-comment this line to enable in-switch capslock indicator
+ if (led_state.caps_lock) {
+ rgblight_setrgb_at(0, 255, 0, 0); //green
+ } else {
+ rgblight_setrgb_at(0, 0, 0, 0);
+ }
+ if (led_state.num_lock) {
+ rgblight_setrgb_at(0, 0, 255, 1); //blue
+ } else {
+ rgblight_setrgb_at(0, 0, 0, 1);
+ }
+ if (led_state.scroll_lock) {
+ rgblight_setrgb_at(255, 0, 0, 2); //red
+ } else {
+ rgblight_setrgb_at(0, 0, 0, 2);
+ }
+}
+ return res;
+}
+
+//Below is an exmaple of layer indication using one of the RGB indicatiors. As configured, uses the bottom indicator (2) to light up red when layer 1 is in use.
+/*
+layer_state_t layer_state_set_kb(layer_state_t state) {
+ if (get_highest_layer(state) == 1) {
+ rgblight_setrgb_at(255, 0, 0, 2);
+ } else {
+ rgblight_setrgb_at(0, 0, 0, 2);
+ }
+ return state;
+}
+*/
diff --git a/keyboards/primekb/meridian/meridian.h b/keyboards/primekb/meridian/meridian.h
new file mode 100644
index 000000000000..e6a155ddec9c
--- /dev/null
+++ b/keyboards/primekb/meridian/meridian.h
@@ -0,0 +1,52 @@
+/*
+Copyright 2020 Holten Campbell
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#define K_NO KC_NO
+
+#define LAYOUT_unified_bs_rshift( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
+ K400, K401, K402, K404, K407, K409, K411, K412, K413 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K_NO, K213 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K_NO}, \
+ { K400, K401, K402, K_NO, K404, K_NO, K_NO, K407, K_NO, K409, K_NO, K411, K412, K413 } \
+}
+
+#define LAYOUT_split_bs_rshift( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K212, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \
+ K400, K401, K402, K404, K407, K409, K411, K412, K413 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \
+ { K400, K401, K402, K_NO, K404, K_NO, K_NO, K407, K_NO, K409, K_NO, K411, K412, K413 } \
+}
diff --git a/keyboards/primekb/meridian/readme.md b/keyboards/primekb/meridian/readme.md
new file mode 100644
index 000000000000..0e3339a59743
--- /dev/null
+++ b/keyboards/primekb/meridian/readme.md
@@ -0,0 +1,12 @@
+# ai03 x PrimeKB Meridian
+
+![Meridian](https://i.imgur.com/c90ZTJJl.jpg)
+
+* Keyboard Maintainer: [Holten Campbell](https://github.com/holtenc)
+* Hardware Supported: STM32F072CBT6
+
+Make example for this keyboard (after setting up your build environment):
+
+ make primekb/meridian:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/primekb/meridian/rules.mk b/keyboards/primekb/meridian/rules.mk
new file mode 100644
index 000000000000..9e2f958bee89
--- /dev/null
+++ b/keyboards/primekb/meridian/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = STM32F072
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+WS2812_DRIVER = spi
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
From 9eeb6048ff507185e3e788f0288c8341c5c14ce2 Mon Sep 17 00:00:00 2001
From: yossiyossy <70216843+yossiyossy@users.noreply.github.com>
Date: Sat, 19 Sep 2020 04:01:43 +0900
Subject: [PATCH 026/178] [Keyboard] Add maJIStic keyboard (#10258)
* add maJIStic
* fix for format
* fix directory name
* rm old directory of maJIStic
* fix for comment
* ISO/JIS Enter move to the home row.
---
keyboards/majistic/config.h | 57 ++++++++++++++
keyboards/majistic/info.json | 78 ++++++++++++++++++++
keyboards/majistic/keymaps/default/config.h | 17 +++++
keyboards/majistic/keymaps/default/keymap.c | 45 +++++++++++
keyboards/majistic/keymaps/default/readme.md | 1 +
keyboards/majistic/majistic.c | 17 +++++
keyboards/majistic/majistic.h | 47 ++++++++++++
keyboards/majistic/readme.md | 15 ++++
keyboards/majistic/rules.mk | 24 ++++++
9 files changed, 301 insertions(+)
create mode 100644 keyboards/majistic/config.h
create mode 100644 keyboards/majistic/info.json
create mode 100644 keyboards/majistic/keymaps/default/config.h
create mode 100644 keyboards/majistic/keymaps/default/keymap.c
create mode 100644 keyboards/majistic/keymaps/default/readme.md
create mode 100644 keyboards/majistic/majistic.c
create mode 100644 keyboards/majistic/majistic.h
create mode 100644 keyboards/majistic/readme.md
create mode 100644 keyboards/majistic/rules.mk
diff --git a/keyboards/majistic/config.h b/keyboards/majistic/config.h
new file mode 100644
index 000000000000..4ced5dd890f1
--- /dev/null
+++ b/keyboards/majistic/config.h
@@ -0,0 +1,57 @@
+
+/*
+Copyright 2020 yossiyossy
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6E55
+#define DEVICE_VER 0x0001
+#define MANUFACTURER yossiyossy
+#define PRODUCT maJIStic
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 8
+
+#define MATRIX_ROW_PINS { F6, F7, B1, B3, B2 }
+#define MATRIX_COL_PINS { D4, C6, D7, E6, B4, B5, F4, F5 } // F4, F5 is dummy
+#define MATRIX_ROW_PINS_RIGHT { D4, C6, D7, E6, B4 }
+#define MATRIX_COL_PINS_RIGHT { B6, B2, B3, B1, F7, F6, F5, F4 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D2 // or D1, D2, D3, E6
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* disable these deprecated features by default */
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
diff --git a/keyboards/majistic/info.json b/keyboards/majistic/info.json
new file mode 100644
index 000000000000..2ae92678823c
--- /dev/null
+++ b/keyboards/majistic/info.json
@@ -0,0 +1,78 @@
+{
+ "keyboard_name": "maJIStic",
+ "url": "https://github.com/yossiyossy/maJIStic",
+ "maintainer": "yossiyossy",
+ "width": 15.5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"1", "x":0, "y":0, "w":1.5},
+ {"label":"2", "x":1.5, "y":0},
+ {"label":"3", "x":2.5, "y":0},
+ {"label":"4", "x":3.5, "y":0},
+ {"label":"5", "x":4.5, "y":0},
+ {"label":"6", "x":5.5, "y":0},
+ {"label":"7", "x":7.5, "y":0},
+ {"label":"8", "x":8.5, "y":0},
+ {"label":"9", "x":9.5, "y":0},
+ {"label":"0", "x":10.5, "y":0},
+ {"label":"-", "x":11.5, "y":0},
+ {"label":"^", "x":12.5, "y":0},
+ {"label":"\\", "x":13.5, "y":0},
+ {"label":"BS", "x":14.5, "y":0},
+ {"label":"Tab", "x":0, "y":1},
+ {"label":"Q", "x":1, "y":1},
+ {"label":"W", "x":2, "y":1},
+ {"label":"E", "x":3, "y":1},
+ {"label":"R", "x":4, "y":1},
+ {"label":"T", "x":5, "y":1},
+ {"label":"Y", "x":7, "y":1},
+ {"label":"U", "x":8, "y":1},
+ {"label":"I", "x":9, "y":1},
+ {"label":"O", "x":10, "y":1},
+ {"label":"P", "x":11, "y":1},
+ {"label":"@", "x":12, "y":1},
+ {"label":"[", "x":13, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.25},
+ {"label":"A", "x":1.25, "y":2},
+ {"label":"S", "x":2.25, "y":2},
+ {"label":"D", "x":3.25, "y":2},
+ {"label":"F", "x":4.25, "y":2},
+ {"label":"G", "x":5.25, "y":2},
+ {"label":"H", "x":7.25, "y":2},
+ {"label":"J", "x":8.25, "y":2},
+ {"label":"K", "x":9.25, "y":2},
+ {"label":"L", "x":10.25, "y":2},
+ {"label":";", "x":11.25, "y":2},
+ {"label":":", "x":12.25, "y":2},
+ {"label":"]", "x":13.25, "y":2},
+ {"label":"Enter", "x":14.25, "y":1, "w":1.25, "h":2},
+ {"label":"Shift", "x":0, "y":3, "w":1.75},
+ {"label":"Z", "x":1.75, "y":3},
+ {"label":"X", "x":2.75, "y":3},
+ {"label":"C", "x":3.75, "y":3},
+ {"label":"V", "x":4.75, "y":3},
+ {"label":"B", "x":5.75, "y":3},
+ {"label":"N", "x":7.75, "y":3},
+ {"label":"M", "x":8.75, "y":3},
+ {"label":",", "x":9.75, "y":3},
+ {"label":".", "x":10.75, "y":3},
+ {"label":"/", "x":11.75, "y":3},
+ {"label":"up", "x":12.75, "y":3},
+ {"label":"Shift", "x":13.75, "y":3, "w":1.75},
+ {"label":"Ctrl", "x":0, "y":4},
+ {"label":"Alt", "x":1, "y":4},
+ {"label":"command", "x":2, "y":4, "w":1.25},
+ {"label":"EISU", "x":3.25, "y":4, "w":1.25},
+ {"label":"", "x":4.5, "y":4, "w":1.75},
+ {"label":"", "x":7.25, "y":4, "w":1.5},
+ {"label":"KANA", "x":8.75, "y":4, "w":1.5},
+ {"label":"command", "x":10.25, "y":4, "w":1.5},
+ {"label":"left", "x":11.75, "y":4},
+ {"label":"down", "x":12.75, "y":4},
+ {"label":"right", "x":13.75, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/majistic/keymaps/default/config.h b/keyboards/majistic/keymaps/default/config.h
new file mode 100644
index 000000000000..4db5715cbacc
--- /dev/null
+++ b/keyboards/majistic/keymaps/default/config.h
@@ -0,0 +1,17 @@
+/* Copyright 2020 yossiyossy
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
diff --git a/keyboards/majistic/keymaps/default/keymap.c b/keyboards/majistic/keymaps/default/keymap.c
new file mode 100644
index 000000000000..e26a631d719d
--- /dev/null
+++ b/keyboards/majistic/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/* Copyright 2020 yossiyossy
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+#include "keymap_jp.h"
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _LOWER,
+};
+
+enum custom_keycodes {
+ L_SPC = SAFE_RANGE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT(
+ JP_1, JP_2, JP_3, JP_4, JP_5, JP_6, JP_7, JP_8, JP_9, JP_0, JP_MINS, JP_CIRC, JP_YEN, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, JP_LBRC, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_SCLN, JP_COLN, JP_RBRC, KC_ENT , \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, KC_UP, KC_RSFT, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_LANG2, LT(_LOWER, KC_SPC), LT(_LOWER, KC_SPC), KC_LANG1, KC_RGUI, KC_LEFT, KC_DOWN, KC_RIGHT \
+ ),
+ [_LOWER] = LAYOUT(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, \
+ KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, JP_UNDS, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BRMU, KC_VOLU, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_BRMD, KC_VOLD, _______ \
+ ),
+};
diff --git a/keyboards/majistic/keymaps/default/readme.md b/keyboards/majistic/keymaps/default/readme.md
new file mode 100644
index 000000000000..65ee11cd798e
--- /dev/null
+++ b/keyboards/majistic/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for maJIStic
diff --git a/keyboards/majistic/majistic.c b/keyboards/majistic/majistic.c
new file mode 100644
index 000000000000..7ceba7cf2899
--- /dev/null
+++ b/keyboards/majistic/majistic.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 yossiyossy
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "majistic.h"
diff --git a/keyboards/majistic/majistic.h b/keyboards/majistic/majistic.h
new file mode 100644
index 000000000000..77c4a4912146
--- /dev/null
+++ b/keyboards/majistic/majistic.h
@@ -0,0 +1,47 @@
+/* Copyright 2020 yossiyossy
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+#define LAYOUT(\
+ l00, l01, l02, l03, l04, l05, r00, r01, r02, r03, r04, r05, r06, r07, \
+ l10, l11, l12, l13, l14, l15, r10, r11, r12, r13, r14, r15, r16, \
+ l20, l21, l22, l23, l24, l25, r20, r21, r22, r23, r24, r25, r26, r17, \
+ l30, l31, l32, l33, l34, l35, r30, r31, r32, r33, r34, r35, r36, \
+ l40, l41, l42, l43, l44, r40, r41, r42, r43, r44, r45 \
+) {\
+ { l00, l01, l02, l03, l04, l05, KC_NO, KC_NO }, \
+ { l10, l11, l12, l13, l14, l15, KC_NO, KC_NO }, \
+ { l20, l21, l22, l23, l24, l25, KC_NO, KC_NO}, \
+ { l30, l31, l32, l33, l34, l35, KC_NO, KC_NO}, \
+ { l40, l41, l42, l43, l44, KC_NO, KC_NO, KC_NO}, \
+ { r00, r01, r02, r03, r04, r05, r06, r07 }, \
+ { r10, r11, r12, r13, r14, r15, r16, r17 }, \
+ { r20, r21, r22, r23, r24, r25, r26, KC_NO }, \
+ { r30, r31, r32, r33, r34, r35, r36, KC_NO }, \
+ { r40, r41, r42, r43, r44, r45, KC_NO, KC_NO } \
+}
diff --git a/keyboards/majistic/readme.md b/keyboards/majistic/readme.md
new file mode 100644
index 000000000000..05916af4e5f7
--- /dev/null
+++ b/keyboards/majistic/readme.md
@@ -0,0 +1,15 @@
+# maJIStic
+
+![maJIStic](https://raw.githubusercontent.com/yossiyossy/maJIStic/master/images/main_image.jpg)
+
+maJIStic is a split, JIS, magic keyboard like, hot-swappable keybaord!
+
+* Keyboard Maintainer: [yossiyossy](https://github.com/yossiyossy)
+* Hardware Supported: [pcb](https://github.com/yossiyossy/maJIStic/tree/master/pcb), [case](https://github.com/yossiyossy/maJIStic/tree/master/case/dxf)
+* Hardware Availability: [booth](https://yossiyossy.booth.pm/items/2325429)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make majistic:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/majistic/rules.mk b/keyboards/majistic/rules.mk
new file mode 100644
index 000000000000..2440fc903d5d
--- /dev/null
+++ b/keyboards/majistic/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
+SPLIT_KEYBOARD = yes
From a21e487fbc8bf81d66f32224477f0db52b34a3f3 Mon Sep 17 00:00:00 2001
From: fauxpark
Date: Fri, 10 Jul 2020 13:15:37 +1000
Subject: [PATCH 027/178] Consolidate udev rules into a single file
---
docs/faq_build.md | 123 ++++++++++++++++------------------------------
1 file changed, 43 insertions(+), 80 deletions(-)
diff --git a/docs/faq_build.md b/docs/faq_build.md
index e2d0f9b27a53..990ebe3aff51 100644
--- a/docs/faq_build.md
+++ b/docs/faq_build.md
@@ -13,63 +13,66 @@ An example of using `sudo`, when your controller is ATMega32u4:
or just:
- $ sudo make ::dfu
+ $ sudo make ::flash
Note that running `make` with `sudo` is generally ***not*** a good idea, and you should use one of the former methods, if possible.
### Linux `udev` Rules
-On Linux, you'll need proper privileges to access the MCU. You can either use
-`sudo` when flashing firmware, or place these files in `/etc/udev/rules.d/`. Once added run the following:
-```console
-sudo udevadm control --reload-rules
-sudo udevadm trigger
-```
-**/etc/udev/rules.d/50-atmel-dfu.rules:**
-```
-# Atmel ATMega32U4
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", TAG+="uaccess", RUN{builtin}+="uaccess"
-# Atmel USBKEY AT90USB1287
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", TAG+="uaccess", RUN{builtin}+="uaccess"
-# Atmel ATMega32U2
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", TAG+="uaccess", RUN{builtin}+="uaccess"
+On Linux, you'll need proper privileges to communicate with the bootloader device. You can either use `sudo` when flashing firmware, or place this file in `/etc/udev/rules.d/`:
+
+**/etc/udev/rules.d/50-qmk.rules:**
```
+# Atmel DFU
+# ATmega16U2
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FEF", TAG+="uaccess", RUN{builtin}+="uaccess"
+# ATmega32U2
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF0", TAG+="uaccess", RUN{builtin}+="uaccess"
+# ATmega16U4
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF3", TAG+="uaccess", RUN{builtin}+="uaccess"
+# ATmega32U4
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF4", TAG+="uaccess", RUN{builtin}+="uaccess"
+# AT90USB128
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF9", TAG+="uaccess", RUN{builtin}+="uaccess"
+# AT90USB128
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FFB", TAG+="uaccess", RUN{builtin}+="uaccess"
-**/etc/udev/rules.d/54-input-club-keyboard.rules:**
+# Input Club
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1C11", ATTRS{idProduct}=="B007", TAG+="uaccess", RUN{builtin}+="uaccess"
-```
-# Input Club keyboard bootloader
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", ATTRS{idProduct}=="b007", TAG+="uaccess", RUN{builtin}+="uaccess"
-```
+# STM32duino
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1EAF", ATTRS{idProduct}=="0003", TAG+="uaccess", RUN{builtin}+="uaccess"
+# STM32 DFU
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="DF11", TAG+="uaccess", RUN{builtin}+="uaccess"
+
+# BootloadHID
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="16C0", ATTRS{idProduct}=="05DF", TAG+="uaccess", RUN{builtin}+="uaccess"
+
+# USBAspLoader
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="16C0", ATTRS{idProduct}=="05DC", TAG+="uaccess", RUN{builtin}+="uaccess"
-**/etc/udev/rules.d/55-caterina.rules:**
-```
# ModemManager should ignore the following devices
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9205", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9203", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
+# Atmel SAM-BA (Massdrop)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB" ATTRS{idProduct}=="6124" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
+# Caterina
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="2A03" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
```
-**Note:** With older (before 1.12) ModemManager, filtering only works when not in strict mode, the following commands can update that settings:
-```console
-printf '[Service]\nExecStart=\nExecStart=/usr/sbin/ModemManager --filter-policy=default' | sudo tee /etc/systemd/system/ModemManager.service.d/policy.conf
-sudo systemctl daemon-reload
-sudo systemctl restart ModemManager
-```
+Once added, run the following:
-**/etc/udev/rules.d/56-dfu-util.rules:**
```
-# stm32duino
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", TAG+="uaccess", RUN{builtin}+="uaccess"
-# Generic stm32
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", TAG+="uaccess", RUN{builtin}+="uaccess"
+sudo udevadm control --reload-rules
+sudo udevadm trigger
```
-**/etc/udev/rules.d/57-bootloadhid.rules:**
+**Note:** With older versions of ModemManager (< 1.12), filtering only works when not in strict mode. The following commands can update that setting:
+
```
-# bootloadHID
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", TAG+="uaccess", RUN{builtin}+="uaccess"
+printf '[Service]\nExecStart=\nExecStart=/usr/sbin/ModemManager --filter-policy=default' | sudo tee /etc/systemd/system/ModemManager.service.d/policy.conf
+sudo systemctl daemon-reload
+sudo systemctl restart ModemManager
```
### Serial device is not detected in bootloader mode on Linux
@@ -96,46 +99,6 @@ You can buy a really unique VID:PID here. I don't think you need this for person
- http://www.obdev.at/products/vusb/license.html
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
-## BOOTLOADER_SIZE for AVR
-Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong comment.
-
-```
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 2048
-# Atmel DFU loader 4096 (TMK Alt Controller)
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=2048
-```
-
-## `avr-gcc: internal compiler error: Abort trap: 6 (program cc1)` on MacOS
-
-This is an issue with updating on brew, causing symlinks that avr-gcc depend on getting mangled.
-
-The solution is to remove and reinstall all affected modules.
-
-```
-brew rm avr-gcc avr-gcc@8 dfu-programmer dfu-util gcc-arm-none-eabi arm-gcc-bin@8 avrdude qmk
-brew install qmk/qmk/qmk
-brew link --force avr-gcc@8
-brew link --force arm-gcc-bin@8
-```
-
-### `avr-gcc` and LUFA
-
-If you updated your `avr-gcc` and you see errors involving LUFA, for example:
-
-`lib/lufa/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h:380:5: error: 'const' attribute on function returning 'void'`
-
-For now, you need to rollback `avr-gcc` to 8 in Homebrew.
-
-```
-brew uninstall --force avr-gcc
-brew install avr-gcc@8
-brew link --force avr-gcc@8
-```
-
### I just flashed my keyboard and it does nothing/keypresses don't register - it's also ARM (rev6 planck, clueboard 60, hs60v2, etc...) (Feb 2019)
Due to how EEPROM works on ARM based chips, saved settings may no longer be valid. This affects the default layers, and *may*, under certain circumstances we are still figuring out, make the keyboard unusable. Resetting the EEPROM will correct this.
From 07e37c857c76154325774d56af53d94d99016cff Mon Sep 17 00:00:00 2001
From: fauxpark
Date: Sat, 11 Jul 2020 12:37:01 +1000
Subject: [PATCH 028/178] Update rules in doctor.py
---
docs/faq_build.md | 4 ++--
lib/python/qmk/cli/doctor.py | 33 ++++++++++++++++++++++++---------
2 files changed, 26 insertions(+), 11 deletions(-)
diff --git a/docs/faq_build.md b/docs/faq_build.md
index 990ebe3aff51..41a11bb58d54 100644
--- a/docs/faq_build.md
+++ b/docs/faq_build.md
@@ -32,7 +32,7 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF0", TAG+="uacc
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF3", TAG+="uaccess", RUN{builtin}+="uaccess"
# ATmega32U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF4", TAG+="uaccess", RUN{builtin}+="uaccess"
-# AT90USB128
+# AT90USB64
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF9", TAG+="uaccess", RUN{builtin}+="uaccess"
# AT90USB128
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FFB", TAG+="uaccess", RUN{builtin}+="uaccess"
@@ -54,7 +54,7 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="16C0", ATTRS{idProduct}=="05DC", TAG+="uacc
# ModemManager should ignore the following devices
# Atmel SAM-BA (Massdrop)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB" ATTRS{idProduct}=="6124" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
-# Caterina
+# Caterina (Pro Micro)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2A03" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py
index 4d7ba52181da..46a2180b22d4 100755
--- a/lib/python/qmk/cli/doctor.py
+++ b/lib/python/qmk/cli/doctor.py
@@ -149,15 +149,30 @@ def check_udev_rules():
ok = True
udev_dir = Path("/etc/udev/rules.d/")
desired_rules = {
- 'dfu': {_udev_rule("03eb", "2ff4"), _udev_rule("03eb", "2ffb"), _udev_rule("03eb", "2ff0")},
- 'input_club': {_udev_rule("1c11", "b007")},
- 'stm32': {_udev_rule("1eaf", "0003"), _udev_rule("0483", "df11")},
- 'bootloadhid': {_udev_rule("16c0", "05df")},
- 'caterina': {
- _udev_rule("2341", "0036", 'ENV{ID_MM_DEVICE_IGNORE}="1"'),
- _udev_rule("1b4f", "9205", 'ENV{ID_MM_DEVICE_IGNORE}="1"'),
- _udev_rule("1b4f", "9203", 'ENV{ID_MM_DEVICE_IGNORE}="1"'),
- _udev_rule("2a03", "0036", 'ENV{ID_MM_DEVICE_IGNORE}="1"')
+ 'qmk': {
+ # Atmel DFU
+ _udev_rule("03EB", "2FEF"), # ATmega16U2
+ _udev_rule("03EB", "2FF0"), # ATmega32U2
+ _udev_rule("03EB", "2FF3"), # ATmega16U4
+ _udev_rule("03EB", "2FF4"), # ATmega32U4
+ _udev_rule("03EB", "2FF9"), # AT90USB64
+ _udev_rule("03EB", "2FFB"), # AT90USB128
+ # Kiibohd bootloader
+ _udev_rule("1C11", "B007"),
+ # STM32duino
+ _udev_rule("1EAF", "0003"),
+ # STM32 DFU
+ _udev_rule("0483", "DF11"),
+ # BootloadHID
+ _udev_rule("16C0", "05DF"),
+ # USBAspLoader
+ _udev_rule("16C0", "05DC"),
+ # Atmel SAM-Ba (Massdrop)
+ _udev_rule("03EB", "6124"),
+ # Caterina (Pro Micro)
+ _udev_rule("1B4F", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Sparkfun
+ _udev_rule("2341", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Arduino SA
+ _udev_rule("2A03", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"') # dog hunter AG
}
}
From 510138f525a5ba216a170a0e0e94a4cf940a0c67 Mon Sep 17 00:00:00 2001
From: fauxpark
Date: Sat, 11 Jul 2020 12:52:36 +1000
Subject: [PATCH 029/178] Simplify doctor rule checking
---
lib/python/qmk/cli/doctor.py | 67 +++++++++++++++++-------------------
1 file changed, 32 insertions(+), 35 deletions(-)
diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py
index 46a2180b22d4..81b27216ef72 100755
--- a/lib/python/qmk/cli/doctor.py
+++ b/lib/python/qmk/cli/doctor.py
@@ -149,31 +149,29 @@ def check_udev_rules():
ok = True
udev_dir = Path("/etc/udev/rules.d/")
desired_rules = {
- 'qmk': {
- # Atmel DFU
- _udev_rule("03EB", "2FEF"), # ATmega16U2
- _udev_rule("03EB", "2FF0"), # ATmega32U2
- _udev_rule("03EB", "2FF3"), # ATmega16U4
- _udev_rule("03EB", "2FF4"), # ATmega32U4
- _udev_rule("03EB", "2FF9"), # AT90USB64
- _udev_rule("03EB", "2FFB"), # AT90USB128
- # Kiibohd bootloader
- _udev_rule("1C11", "B007"),
- # STM32duino
- _udev_rule("1EAF", "0003"),
- # STM32 DFU
- _udev_rule("0483", "DF11"),
- # BootloadHID
- _udev_rule("16C0", "05DF"),
- # USBAspLoader
- _udev_rule("16C0", "05DC"),
- # Atmel SAM-Ba (Massdrop)
- _udev_rule("03EB", "6124"),
- # Caterina (Pro Micro)
- _udev_rule("1B4F", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Sparkfun
- _udev_rule("2341", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Arduino SA
- _udev_rule("2A03", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"') # dog hunter AG
- }
+ # Atmel DFU
+ _udev_rule("03EB", "2FEF"), # ATmega16U2
+ _udev_rule("03EB", "2FF0"), # ATmega32U2
+ _udev_rule("03EB", "2FF3"), # ATmega16U4
+ _udev_rule("03EB", "2FF4"), # ATmega32U4
+ _udev_rule("03EB", "2FF9"), # AT90USB64
+ _udev_rule("03EB", "2FFB"), # AT90USB128
+ # Kiibohd bootloader
+ _udev_rule("1C11", "B007"),
+ # STM32duino
+ _udev_rule("1EAF", "0003"),
+ # STM32 DFU
+ _udev_rule("0483", "DF11"),
+ # BootloadHID
+ _udev_rule("16C0", "05DF"),
+ # USBAspLoader
+ _udev_rule("16C0", "05DC"),
+ # Atmel SAM-Ba (Massdrop)
+ _udev_rule("03EB", "6124"),
+ # Caterina (Pro Micro)
+ _udev_rule("1B4F", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Sparkfun
+ _udev_rule("2341", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Arduino SA
+ _udev_rule("2A03", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"') # dog hunter AG
}
# These rules are no longer recommended, only use them to check for their presence.
@@ -197,18 +195,17 @@ def check_udev_rules():
current_rules.add(line)
# Check if the desired rules are among the currently present rules
- for bootloader, rules in desired_rules.items():
+ for rules in desired_rules.items():
# For caterina, check if ModemManager is running
- if bootloader == "caterina":
- if check_modem_manager():
- ok = False
- cli.log.warn("{bg_yellow}Detected ModemManager without the necessary udev rules. Please either disable it or set the appropriate udev rules if you are using a Pro Micro.")
+ if check_modem_manager():
+ ok = False
+ cli.log.warn("{bg_yellow}Detected ModemManager without the necessary udev rules. Please either disable it or set the appropriate udev rules if you are using a Pro Micro.")
if not rules.issubset(current_rules):
- deprecated_rule = deprecated_rules.get(bootloader)
- if deprecated_rule and deprecated_rule.issubset(current_rules):
- cli.log.warn("{bg_yellow}Found old, deprecated udev rules for '%s' boards. The new rules on https://docs.qmk.fm/#/faq_build?id=linux-udev-rules offer better security with the same functionality.", bootloader)
- else:
- cli.log.warn("{bg_yellow}Missing udev rules for '%s' boards. You'll need to use `sudo` in order to flash them.", bootloader)
+ for bootloader, rules in deprecated_rules.items():
+ if deprecated_rule and deprecated_rule.issubset(current_rules):
+ cli.log.warn("{bg_yellow}Found old, deprecated udev rules for '%s' boards. The new rules on https://docs.qmk.fm/#/faq_build?id=linux-udev-rules offer better security with the same functionality.", bootloader)
+ else:
+ cli.log.warn("{bg_yellow}Missing udev rules for '%s' boards. You'll need to use `sudo` in order to flash them.", bootloader)
return ok
From eee6dd35446542c40c0f2a7827d9754aefd248e9 Mon Sep 17 00:00:00 2001
From: fauxpark
Date: Sat, 11 Jul 2020 21:05:26 +1000
Subject: [PATCH 030/178] Fix errors
---
lib/python/qmk/cli/doctor.py | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py
index 81b27216ef72..89ac7c82a0c9 100755
--- a/lib/python/qmk/cli/doctor.py
+++ b/lib/python/qmk/cli/doctor.py
@@ -150,12 +150,12 @@ def check_udev_rules():
udev_dir = Path("/etc/udev/rules.d/")
desired_rules = {
# Atmel DFU
- _udev_rule("03EB", "2FEF"), # ATmega16U2
- _udev_rule("03EB", "2FF0"), # ATmega32U2
- _udev_rule("03EB", "2FF3"), # ATmega16U4
- _udev_rule("03EB", "2FF4"), # ATmega32U4
- _udev_rule("03EB", "2FF9"), # AT90USB64
- _udev_rule("03EB", "2FFB"), # AT90USB128
+ _udev_rule("03EB", "2FEF"), # ATmega16U2
+ _udev_rule("03EB", "2FF0"), # ATmega32U2
+ _udev_rule("03EB", "2FF3"), # ATmega16U4
+ _udev_rule("03EB", "2FF4"), # ATmega32U4
+ _udev_rule("03EB", "2FF9"), # AT90USB64
+ _udev_rule("03EB", "2FFB"), # AT90USB128
# Kiibohd bootloader
_udev_rule("1C11", "B007"),
# STM32duino
@@ -169,9 +169,9 @@ def check_udev_rules():
# Atmel SAM-Ba (Massdrop)
_udev_rule("03EB", "6124"),
# Caterina (Pro Micro)
- _udev_rule("1B4F", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Sparkfun
- _udev_rule("2341", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Arduino SA
- _udev_rule("2A03", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"') # dog hunter AG
+ _udev_rule("1B4F", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Sparkfun
+ _udev_rule("2341", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Arduino SA
+ _udev_rule("2A03", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"') # dog hunter AG
}
# These rules are no longer recommended, only use them to check for their presence.
@@ -201,8 +201,8 @@ def check_udev_rules():
ok = False
cli.log.warn("{bg_yellow}Detected ModemManager without the necessary udev rules. Please either disable it or set the appropriate udev rules if you are using a Pro Micro.")
if not rules.issubset(current_rules):
- for bootloader, rules in deprecated_rules.items():
- if deprecated_rule and deprecated_rule.issubset(current_rules):
+ for bootloader, rule in deprecated_rules.items():
+ if rule and rule.issubset(current_rules):
cli.log.warn("{bg_yellow}Found old, deprecated udev rules for '%s' boards. The new rules on https://docs.qmk.fm/#/faq_build?id=linux-udev-rules offer better security with the same functionality.", bootloader)
else:
cli.log.warn("{bg_yellow}Missing udev rules for '%s' boards. You'll need to use `sudo` in order to flash them.", bootloader)
From 72b1ff5899763cf76b1cc1669c684fbc45cee7c4 Mon Sep 17 00:00:00 2001
From: fauxpark
Date: Mon, 13 Jul 2020 01:24:28 +1000
Subject: [PATCH 031/178] Add TMK "FEED" VID to list of deprecated udev rules
---
docs/faq_debug.md | 14 --------------
lib/python/qmk/cli/doctor.py | 1 +
2 files changed, 1 insertion(+), 14 deletions(-)
diff --git a/docs/faq_debug.md b/docs/faq_debug.md
index 08c84fe4fd3d..7d5473678b3c 100644
--- a/docs/faq_debug.md
+++ b/docs/faq_debug.md
@@ -31,20 +31,6 @@ Check:
- try using 'print' function instead of debug print. See **common/print.h**.
- disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).
-## Linux or UNIX Like System Requires Super User Privilege
-Just use 'sudo' to execute *hid_listen* with privilege.
-```
-$ sudo hid_listen
-```
-
-Or add an *udev rule* for TMK devices with placing a file in rules directory. The directory may vary on each system.
-
-File: /etc/udev/rules.d/52-tmk-keyboard.rules(in case of Ubuntu)
-```
-# tmk keyboard products https://github.com/tmk/tmk_keyboard
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
-```
-
***
# Miscellaneous
diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py
index 89ac7c82a0c9..1bfec6349bf8 100755
--- a/lib/python/qmk/cli/doctor.py
+++ b/lib/python/qmk/cli/doctor.py
@@ -181,6 +181,7 @@ def check_udev_rules():
'stm32': {_deprecated_udev_rule("1eaf", "0003"), _deprecated_udev_rule("0483", "df11")},
'bootloadhid': {_deprecated_udev_rule("16c0", "05df")},
'caterina': {'ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"', 'ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"'}
+ 'tmk': {_deprecated_udev_rule("feed")}
}
if udev_dir.exists():
From 7921c5d9b8d5726a916a89e01e7aa92d82fed067 Mon Sep 17 00:00:00 2001
From: fauxpark
Date: Mon, 13 Jul 2020 01:26:46 +1000
Subject: [PATCH 032/178] A comma would be nice
---
lib/python/qmk/cli/doctor.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py
index 1bfec6349bf8..a431a160ccdb 100755
--- a/lib/python/qmk/cli/doctor.py
+++ b/lib/python/qmk/cli/doctor.py
@@ -180,7 +180,7 @@ def check_udev_rules():
'input_club': {_deprecated_udev_rule("1c11")},
'stm32': {_deprecated_udev_rule("1eaf", "0003"), _deprecated_udev_rule("0483", "df11")},
'bootloadhid': {_deprecated_udev_rule("16c0", "05df")},
- 'caterina': {'ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"', 'ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"'}
+ 'caterina': {'ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"', 'ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"'},
'tmk': {_deprecated_udev_rule("feed")}
}
From 4bee445c2f086a31e34135c2a08cf4fbfe7daf94 Mon Sep 17 00:00:00 2001
From: fauxpark
Date: Mon, 13 Jul 2020 01:33:43 +1000
Subject: [PATCH 033/178] Split rules back up into bootloaders
---
lib/python/qmk/cli/doctor.py | 75 ++++++++++++++++++++----------------
1 file changed, 41 insertions(+), 34 deletions(-)
diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py
index a431a160ccdb..dac1533ac61c 100755
--- a/lib/python/qmk/cli/doctor.py
+++ b/lib/python/qmk/cli/doctor.py
@@ -149,35 +149,41 @@ def check_udev_rules():
ok = True
udev_dir = Path("/etc/udev/rules.d/")
desired_rules = {
- # Atmel DFU
- _udev_rule("03EB", "2FEF"), # ATmega16U2
- _udev_rule("03EB", "2FF0"), # ATmega32U2
- _udev_rule("03EB", "2FF3"), # ATmega16U4
- _udev_rule("03EB", "2FF4"), # ATmega32U4
- _udev_rule("03EB", "2FF9"), # AT90USB64
- _udev_rule("03EB", "2FFB"), # AT90USB128
- # Kiibohd bootloader
- _udev_rule("1C11", "B007"),
- # STM32duino
- _udev_rule("1EAF", "0003"),
- # STM32 DFU
- _udev_rule("0483", "DF11"),
- # BootloadHID
- _udev_rule("16C0", "05DF"),
- # USBAspLoader
- _udev_rule("16C0", "05DC"),
- # Atmel SAM-Ba (Massdrop)
- _udev_rule("03EB", "6124"),
- # Caterina (Pro Micro)
- _udev_rule("1B4F", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Sparkfun
- _udev_rule("2341", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Arduino SA
- _udev_rule("2A03", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"') # dog hunter AG
+ 'atmel-dfu': {
+ _udev_rule("03EB", "2FEF"), # ATmega16U2
+ _udev_rule("03EB", "2FF0"), # ATmega32U2
+ _udev_rule("03EB", "2FF3"), # ATmega16U4
+ _udev_rule("03EB", "2FF4"), # ATmega32U4
+ _udev_rule("03EB", "2FF9"), # AT90USB64
+ _udev_rule("03EB", "2FFB") # AT90USB128
+ },
+ 'kiibohd': {
+ _udev_rule("1C11", "B007")
+ },
+ 'stm32': {
+ _udev_rule("1EAF", "0003"), # STM32duino
+ _udev_rule("0483", "DF11") # STM32 DFU
+ },
+ 'bootloadhid': {
+ _udev_rule("16C0", "05DF")
+ },
+ 'usbasploader': {
+ _udev_rule("16C0", "05DC")
+ },
+ 'massdrop': {
+ _udev_rule("03EB", "6124")
+ },
+ 'caterina': {
+ _udev_rule("1B4F", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Sparkfun
+ _udev_rule("2341", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Arduino SA
+ _udev_rule("2A03", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"') # dog hunter AG
+ }
}
# These rules are no longer recommended, only use them to check for their presence.
deprecated_rules = {
- 'dfu': {_deprecated_udev_rule("03eb", "2ff4"), _deprecated_udev_rule("03eb", "2ffb"), _deprecated_udev_rule("03eb", "2ff0")},
- 'input_club': {_deprecated_udev_rule("1c11")},
+ 'atmel-dfu': {_deprecated_udev_rule("03eb", "2ff4"), _deprecated_udev_rule("03eb", "2ffb"), _deprecated_udev_rule("03eb", "2ff0")},
+ 'kiibohd': {_deprecated_udev_rule("1c11")},
'stm32': {_deprecated_udev_rule("1eaf", "0003"), _deprecated_udev_rule("0483", "df11")},
'bootloadhid': {_deprecated_udev_rule("16c0", "05df")},
'caterina': {'ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"', 'ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"'},
@@ -196,17 +202,18 @@ def check_udev_rules():
current_rules.add(line)
# Check if the desired rules are among the currently present rules
- for rules in desired_rules.items():
+ for bootloader, rules in desired_rules.items():
# For caterina, check if ModemManager is running
- if check_modem_manager():
- ok = False
- cli.log.warn("{bg_yellow}Detected ModemManager without the necessary udev rules. Please either disable it or set the appropriate udev rules if you are using a Pro Micro.")
+ if bootloader == "caterina":
+ if check_modem_manager():
+ ok = False
+ cli.log.warn("{bg_yellow}Detected ModemManager without the necessary udev rules. Please either disable it or set the appropriate udev rules if you are using a Pro Micro.")
if not rules.issubset(current_rules):
- for bootloader, rule in deprecated_rules.items():
- if rule and rule.issubset(current_rules):
- cli.log.warn("{bg_yellow}Found old, deprecated udev rules for '%s' boards. The new rules on https://docs.qmk.fm/#/faq_build?id=linux-udev-rules offer better security with the same functionality.", bootloader)
- else:
- cli.log.warn("{bg_yellow}Missing udev rules for '%s' boards. You'll need to use `sudo` in order to flash them.", bootloader)
+ deprecated_rule = deprecated_rules.get(bootloader)
+ if deprecated_rule and deprecated_rule.issubset(current_rules):
+ cli.log.warn("{bg_yellow}Found old, deprecated udev rules for '%s' boards. The new rules on https://docs.qmk.fm/#/faq_build?id=linux-udev-rules offer better security with the same functionality.", bootloader)
+ else:
+ cli.log.warn("{bg_yellow}Missing udev rules for '%s' boards. You'll need to use `sudo` in order to flash them.", bootloader)
return ok
From ef1b050b32b7a6ec5037489503caa92a527f6ab3 Mon Sep 17 00:00:00 2001
From: fauxpark
Date: Mon, 13 Jul 2020 01:37:31 +1000
Subject: [PATCH 034/178] Link to docs page in "missing" case
---
lib/python/qmk/cli/doctor.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py
index dac1533ac61c..beb884a36f50 100755
--- a/lib/python/qmk/cli/doctor.py
+++ b/lib/python/qmk/cli/doctor.py
@@ -213,7 +213,7 @@ def check_udev_rules():
if deprecated_rule and deprecated_rule.issubset(current_rules):
cli.log.warn("{bg_yellow}Found old, deprecated udev rules for '%s' boards. The new rules on https://docs.qmk.fm/#/faq_build?id=linux-udev-rules offer better security with the same functionality.", bootloader)
else:
- cli.log.warn("{bg_yellow}Missing udev rules for '%s' boards. You'll need to use `sudo` in order to flash them.", bootloader)
+ cli.log.warn("{bg_yellow}Missing udev rules for '%s' boards. See https://docs.qmk.fm/#/faq_build?id=linux-udev-rules for more details.", bootloader)
return ok
From c2a0cebf8b8e42323d913c5c4b536578c07e0864 Mon Sep 17 00:00:00 2001
From: fauxpark
Date: Thu, 27 Aug 2020 13:13:30 +1000
Subject: [PATCH 035/178] Add Pololu VID
---
docs/faq_build.md | 8 +++++---
lib/python/qmk/cli/doctor.py | 4 +++-
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/docs/faq_build.md b/docs/faq_build.md
index 41a11bb58d54..7429446f29de 100644
--- a/docs/faq_build.md
+++ b/docs/faq_build.md
@@ -55,9 +55,11 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="16C0", ATTRS{idProduct}=="05DC", TAG+="uacc
# Atmel SAM-BA (Massdrop)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB" ATTRS{idProduct}=="6124" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
# Caterina (Pro Micro)
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="2A03" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Spark Fun Electronics
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1FFB" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Pololu Electronics
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Arduino SA
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="239A" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Adafruit Industries LLC
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="2A03" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # dog hunter AG
```
Once added, run the following:
diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py
index beb884a36f50..c1284bb898c0 100755
--- a/lib/python/qmk/cli/doctor.py
+++ b/lib/python/qmk/cli/doctor.py
@@ -174,8 +174,10 @@ def check_udev_rules():
_udev_rule("03EB", "6124")
},
'caterina': {
- _udev_rule("1B4F", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Sparkfun
+ _udev_rule("1B4F", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Spark Fun Electronics
+ _udev_rule("1FFB", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Pololu Electronics
_udev_rule("2341", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Arduino SA
+ _udev_rule("239A", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Adafruit Industries LLC
_udev_rule("2A03", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"') # dog hunter AG
}
}
From a0305f5e7e1ffc19ef2dba077d000915f2fdf35b Mon Sep 17 00:00:00 2001
From: fauxpark
Date: Sat, 19 Sep 2020 05:40:25 +1000
Subject: [PATCH 036/178] Be more specific about Caterina devices, and add
LilyPad PID
---
docs/faq_build.md | 42 ++++++++++++++++++++----------------
lib/python/qmk/cli/doctor.py | 21 +++++++++++++-----
2 files changed, 40 insertions(+), 23 deletions(-)
diff --git a/docs/faq_build.md b/docs/faq_build.md
index 7429446f29de..131844a2b76c 100644
--- a/docs/faq_build.md
+++ b/docs/faq_build.md
@@ -24,18 +24,12 @@ On Linux, you'll need proper privileges to communicate with the bootloader devic
**/etc/udev/rules.d/50-qmk.rules:**
```
# Atmel DFU
-# ATmega16U2
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FEF", TAG+="uaccess", RUN{builtin}+="uaccess"
-# ATmega32U2
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF0", TAG+="uaccess", RUN{builtin}+="uaccess"
-# ATmega16U4
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF3", TAG+="uaccess", RUN{builtin}+="uaccess"
-# ATmega32U4
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF4", TAG+="uaccess", RUN{builtin}+="uaccess"
-# AT90USB64
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF9", TAG+="uaccess", RUN{builtin}+="uaccess"
-# AT90USB128
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FFB", TAG+="uaccess", RUN{builtin}+="uaccess"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FEF", TAG+="uaccess", RUN{builtin}+="uaccess" # ATmega16U2
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF0", TAG+="uaccess", RUN{builtin}+="uaccess" # ATmega32U2
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF3", TAG+="uaccess", RUN{builtin}+="uaccess" # ATmega16U4
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF4", TAG+="uaccess", RUN{builtin}+="uaccess" # ATmega32U4
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FF9", TAG+="uaccess", RUN{builtin}+="uaccess" # AT90USB64
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="2FFB", TAG+="uaccess", RUN{builtin}+="uaccess" # AT90USB128
# Input Club
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1C11", ATTRS{idProduct}=="B007", TAG+="uaccess", RUN{builtin}+="uaccess"
@@ -53,13 +47,25 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="16C0", ATTRS{idProduct}=="05DC", TAG+="uacc
# ModemManager should ignore the following devices
# Atmel SAM-BA (Massdrop)
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB" ATTRS{idProduct}=="6124" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03EB", ATTRS{idProduct}=="6124", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
+
# Caterina (Pro Micro)
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Spark Fun Electronics
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="1FFB" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Pololu Electronics
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Arduino SA
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="239A" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Adafruit Industries LLC
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="2A03" TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # dog hunter AG
+# Spark Fun Electronics
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F", ATTRS{idProduct}=="9203", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Pro Micro 3V3/8MHz
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F", ATTRS{idProduct}=="9205", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Pro Micro 5V/16MHz
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1B4F", ATTRS{idProduct}=="9207", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # LilyPad 3V3/8MHz (and some Pro Micro clones)
+# Pololu Electronics
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1FFB", ATTRS{idProduct}=="0101", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # A-Star 32U4
+# Arduino SA
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Leonardo
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0037", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Micro
+# Adafruit Industries LLC
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="239A", ATTRS{idProduct}=="000C", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Feather 32U4
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="239A", ATTRS{idProduct}=="000D", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # ItsyBitsy 32U4 3V3/8MHz
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="239A", ATTRS{idProduct}=="000E", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # ItsyBitsy 32U4 5V/16MHz
+# dog hunter AG
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="2A03", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Leonardo
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="2A03", ATTRS{idProduct}=="0037", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" # Micro
```
Once added, run the following:
diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py
index c1284bb898c0..57ac0835b3e8 100755
--- a/lib/python/qmk/cli/doctor.py
+++ b/lib/python/qmk/cli/doctor.py
@@ -174,11 +174,22 @@ def check_udev_rules():
_udev_rule("03EB", "6124")
},
'caterina': {
- _udev_rule("1B4F", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Spark Fun Electronics
- _udev_rule("1FFB", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Pololu Electronics
- _udev_rule("2341", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Arduino SA
- _udev_rule("239A", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Adafruit Industries LLC
- _udev_rule("2A03", None, 'ENV{ID_MM_DEVICE_IGNORE}="1"') # dog hunter AG
+ # Spark Fun Electronics
+ _udev_rule("1B4F", "9203", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Pro Micro 3V3/8MHz
+ _udev_rule("1B4F", "9205", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Pro Micro 5V/16MHz
+ _udev_rule("1B4F", "9207", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # LilyPad 3V3/8MHz (and some Pro Micro clones)
+ # Pololu Electronics
+ _udev_rule("1FFB", "0101", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # A-Star 32U4
+ # Arduino SA
+ _udev_rule("2341", "0036", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Leonardo
+ _udev_rule("2341", "0037", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Micro
+ # Adafruit Industries LLC
+ _udev_rule("239A", "000C", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Feather 32U4
+ _udev_rule("239A", "000D", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # ItsyBitsy 32U4 3V3/8MHz
+ _udev_rule("239A", "000E", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # ItsyBitsy 32U4 5V/16MHz
+ # dog hunter AG
+ _udev_rule("2A03", "0036", 'ENV{ID_MM_DEVICE_IGNORE}="1"'), # Leonardo
+ _udev_rule("2A03", "0037", 'ENV{ID_MM_DEVICE_IGNORE}="1"') # Micro
}
}
From ccbbf1638947f90caa425ae792be71e6383569c6 Mon Sep 17 00:00:00 2001
From: Rys Sommefeldt
Date: Sat, 19 Sep 2020 01:56:38 +0100
Subject: [PATCH 037/178] Matrix Noah 6.25U bottom row plus personal keymap
using it (#10134)
* 6.25U bottom row ISO layout for Matrix Noah
* Personal map for Matrix Noah using new 6.25U bottom row ISO
* Switch to 65_iso_blocker and add that to info.json
* Switch to 65_iso_blocker for the new layout
* Fix whitespace issues
---
keyboards/matrix/noah/info.json | 3 ++
keyboards/matrix/noah/keymaps/rys/keymap.c | 59 ++++++++++++++++++++++
keyboards/matrix/noah/noah.h | 14 +++++
keyboards/matrix/noah/rules.mk | 2 +
4 files changed, 78 insertions(+)
create mode 100644 keyboards/matrix/noah/keymaps/rys/keymap.c
diff --git a/keyboards/matrix/noah/info.json b/keyboards/matrix/noah/info.json
index f35bbd5808ec..69fc0fccfcb3 100644
--- a/keyboards/matrix/noah/info.json
+++ b/keyboards/matrix/noah/info.json
@@ -1426,6 +1426,9 @@
"y": 4
}
]
+ },
+ "LAYOUT_65_iso_blocker": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":15, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2}, {"x":13.75, "y":1, "w":1.25, "h":2}, {"x":15, "y":2}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
}
}
}
diff --git a/keyboards/matrix/noah/keymaps/rys/keymap.c b/keyboards/matrix/noah/keymaps/rys/keymap.c
new file mode 100644
index 000000000000..73ee8e1fec5c
--- /dev/null
+++ b/keyboards/matrix/noah/keymaps/rys/keymap.c
@@ -0,0 +1,59 @@
+/* Copyright 2020 Rys Sommefeldt
+ *
+ * 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 i s distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_iso_blocker(
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ ` │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │Del│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent├───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │PUp│
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │PDn│
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │LCtl│LGUI│LAlt│ Spaaaaaaace │RAlt│ L1 │ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
+ 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,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
+ 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,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_65_iso_blocker(
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │RST│ F1│ F2│ F3│ F4│ F5│ F6│ F7│ F8│ F9│F10│F11│F12│ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ TOG │PLN│MOD│HU+│HU-│SA+│SA-│VA+│VA-│ │ │ │ │ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ ├───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
+ RGB_TOG, RGB_M_P, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/matrix/noah/noah.h b/keyboards/matrix/noah/noah.h
index 5d0da798dbea..15810c70638f 100644
--- a/keyboards/matrix/noah/noah.h
+++ b/keyboards/matrix/noah/noah.h
@@ -48,6 +48,20 @@
{k40, k41, k42,KC_NO,k43,KC_NO,KC_NO, k45, k46, k47, k48, k1e, k2e, k3e, k0f} \
}
+#define LAYOUT_65_iso_blocker( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k0f, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48 \
+) { \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c,KC_NO, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,KC_NO, KC_NO}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, KC_NO}, \
+ {k40, k41, k42,KC_NO,k43,KC_NO,k44, k45, k46, k47, k48, k1e, k2e, k3e, k0f} \
+}
+
#define LAYOUT_default_splitspace( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
diff --git a/keyboards/matrix/noah/rules.mk b/keyboards/matrix/noah/rules.mk
index 80854e67e1fc..094364e11bc1 100644
--- a/keyboards/matrix/noah/rules.mk
+++ b/keyboards/matrix/noah/rules.mk
@@ -52,3 +52,5 @@ RGBLIGHT_CUSTOM_DRIVER = yes
CUSTOM_MATRIX = yes
# project specific files
SRC += ws2812.c matrix.c
+
+LAYOUTS = 65_iso_blocker
From b0024470ed347271e29b2de4d0442f855a26345c Mon Sep 17 00:00:00 2001
From: 4pplet <4pplet@protonmail.com>
Date: Sat, 19 Sep 2020 04:31:44 +0200
Subject: [PATCH 038/178] [Keyboard] 4pplet keyboards (#10251)
* added 4pplet keyboards
added 4pplet keyboards
* Update keyboards/4pplet/aekiso60_rev_a/aekiso60_rev_a.h
Co-Authored-By: Ryan
* Update keyboards/4pplet/aekiso60_rev_a/config.h
Co-Authored-By: Ryan
* Update keyboards/4pplet/aekiso60_rev_a/config.h
Co-Authored-By: Ryan
* Update keyboards/4pplet/waffling60_rev_a/config.h
Co-Authored-By: Ryan
* Update keyboards/4pplet/aekiso60_rev_a/rules.mk
Co-Authored-By: Ryan
* Update keyboards/4pplet/aekiso60_rev_a/rules.mk
Co-Authored-By: Ryan
* Update keyboards/4pplet/waffling60_rev_a/rules.mk
Co-Authored-By: Ryan
* Update keyboards/4pplet/waffling60_rev_a/rules.mk
Co-Authored-By: Ryan
* Update keyboards/4pplet/steezy60_rev_a/config.h
Co-Authored-By: Ryan
* Delete info.json
* Delete info.json
* Delete info.json
* removed VIA_ENABLE
* Update config.h
* Update rules.mk
* Update steezy60_rev_a.h
* Update config.h
* Removed VIA_ENABLE
* Update keyboards/4pplet/steezy60_rev_a/rules.mk
Co-Authored-By: Ryan
* Removed VIA_ENABLE
* Update config.h
* Update config.h
* Update config.h
* adding fauxpark suggestion
* Update keyboards/4pplet/aekiso60_rev_a/config.h
Co-Authored-By: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/4pplet/aekiso60_rev_a/rules.mk
Co-Authored-By: James Young <18669334+noroadsleft@users.noreply.github.com>
* some updates recommended by noroadsleft, still work in progress
some updates recommended by noroadsleft, still work in progress
* made directorys for revisions per noroadsleft suggestion
made directorys for revisions per noroadsleft suggestion
* renamed keyboard_pre_init_user to keyboard_pre_init_kb
* Update keyboards/4pplet/aekiso60/rev_a/config.h
Co-Authored-By: Drashna Jaelre
* Update keyboards/4pplet/waffling60/rev_a/rev_a.c
Co-Authored-By: Drashna Jaelre
* Update keyboards/4pplet/waffling60/rev_a/rev_a.c
Co-Authored-By: Drashna Jaelre
* started working on refactoring led function for waffling60
* removed LED functionality
* Update keyboards/wilba_tech/zeal60/rules.mk
Co-authored-by: Drashna Jaelre
* Update keyboards/wilba_tech/zeal60/rules.mk
Co-authored-by: Ryan
* Update keyboards/4pplet/waffling60/rev_a/rules.mk
Co-authored-by: Ryan
* Update keyboards/4pplet/steezy60/rev_a/rules.mk
Co-authored-by: Ryan
* Update keyboards/4pplet/aekiso60/keymaps/via/keymap.c
Co-authored-by: Ryan
* Update keyboards/4pplet/aekiso60/rev_a/rules.mk
Co-authored-by: Ryan
* Update config.h
added debounce to prevent stuttering with some switches
* Update README.md
* Adding masterwork classy_tkl
* Update keyboards/masterwork/classy_tkl/rev_a/rev_a.c
Co-authored-by: Drashna Jaelre
* Update keyboards/masterwork/classy_tkl/rev_a/rules.mk
Co-authored-by: Drashna Jaelre
* Update keyboards/masterwork/classy_tkl/rev_a/rules.mk
Co-authored-by: Drashna Jaelre
* Update rev_a.c
* Update rev_a.c
* updated name from masterwork to masterworks
* Update keyboards/masterworks/classy_tkl/info.json
Co-authored-by: Drashna Jaelre
* Update keyboards/masterworks/classy_tkl/info.json
Co-authored-by: Drashna Jaelre
* Update keyboards/masterworks/classy_tkl/info.json
Co-authored-by: Drashna Jaelre
* added license header to keymap
* Update keyboards/masterworks/classy_tkl/info.json
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/masterworks/classy_tkl/rev_a/config.h
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/masterworks/classy_tkl/rev_a/rev_a.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/masterworks/classy_tkl/rev_a/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/masterworks/classy_tkl/rev_a/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/masterworks/classy_tkl/readme.md
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/masterworks/classy_tkl/rev_a/rev_a.h
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/masterworks/classy_tkl/readme.md
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-authored-by: Ryan
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-authored-by: Drashna Jaelre
---
keyboards/masterworks/classy_tkl/info.json | 279 ++++++++++++++++++
.../classy_tkl/keymaps/default/config.h | 19 ++
.../classy_tkl/keymaps/default/keymap.c | 29 ++
.../classy_tkl/keymaps/default/readme.md | 1 +
.../keymaps/default_tkl_ansi_wkl/config.h | 19 ++
.../keymaps/default_tkl_ansi_wkl/keymap.c | 29 ++
.../keymaps/default_tkl_ansi_wkl/readme.md | 1 +
.../keymaps/default_tkl_iso_wkl/config.h | 19 ++
.../keymaps/default_tkl_iso_wkl/keymap.c | 29 ++
.../keymaps/default_tkl_iso_wkl/readme.md | 1 +
.../classy_tkl/keymaps/via/keymap.c | 50 ++++
.../classy_tkl/keymaps/via/rules.mk | 1 +
keyboards/masterworks/classy_tkl/readme.md | 15 +
.../masterworks/classy_tkl/rev_a/config.h | 58 ++++
.../masterworks/classy_tkl/rev_a/rev_a.c | 42 +++
.../masterworks/classy_tkl/rev_a/rev_a.h | 79 +++++
.../masterworks/classy_tkl/rev_a/rules.mk | 26 ++
17 files changed, 697 insertions(+)
create mode 100644 keyboards/masterworks/classy_tkl/info.json
create mode 100644 keyboards/masterworks/classy_tkl/keymaps/default/config.h
create mode 100644 keyboards/masterworks/classy_tkl/keymaps/default/keymap.c
create mode 100644 keyboards/masterworks/classy_tkl/keymaps/default/readme.md
create mode 100644 keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/config.h
create mode 100644 keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/keymap.c
create mode 100644 keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/readme.md
create mode 100644 keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/config.h
create mode 100644 keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/keymap.c
create mode 100644 keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/readme.md
create mode 100644 keyboards/masterworks/classy_tkl/keymaps/via/keymap.c
create mode 100644 keyboards/masterworks/classy_tkl/keymaps/via/rules.mk
create mode 100644 keyboards/masterworks/classy_tkl/readme.md
create mode 100644 keyboards/masterworks/classy_tkl/rev_a/config.h
create mode 100644 keyboards/masterworks/classy_tkl/rev_a/rev_a.c
create mode 100644 keyboards/masterworks/classy_tkl/rev_a/rev_a.h
create mode 100644 keyboards/masterworks/classy_tkl/rev_a/rules.mk
diff --git a/keyboards/masterworks/classy_tkl/info.json b/keyboards/masterworks/classy_tkl/info.json
new file mode 100644
index 000000000000..5cf93dfbd94e
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/info.json
@@ -0,0 +1,279 @@
+{
+ "keyboard_name": "Classy TKL",
+ "url": "https://geekhack.org/index.php?topic=105933",
+ "maintainer": "qmk",
+ "width": 18.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "label": "Esc", "x": 0, "y": 0 },
+ { "label": "F1", "x": 2, "y": 0 },
+ { "label": "F2", "x": 3, "y": 0 },
+ { "label": "F3", "x": 4, "y": 0 },
+ { "label": "F4", "x": 5, "y": 0 },
+ { "label": "F5", "x": 6.5, "y": 0 },
+ { "label": "F6", "x": 7.5, "y": 0 },
+ { "label": "F7", "x": 8.5, "y": 0 },
+ { "label": "F8", "x": 9.5, "y": 0 },
+ { "label": "F9", "x": 11, "y": 0 },
+ { "label": "F10", "x": 12, "y": 0 },
+ { "label": "F11", "x": 13, "y": 0 },
+ { "label": "F12", "x": 14, "y": 0 },
+ { "label": "PrtSc", "x": 15.25, "y": 0 },
+ { "label": "Scroll Lock", "x": 16.25, "y": 0 },
+ { "label": "Pause", "x": 17.25, "y": 0 },
+ { "label": "~", "x": 0, "y": 1.5 },
+ { "label": "!", "x": 1, "y": 1.5 },
+ { "label": "@", "x": 2, "y": 1.5 },
+ { "label": "#", "x": 3, "y": 1.5 },
+ { "label": "$", "x": 4, "y": 1.5 },
+ { "label": "%", "x": 5, "y": 1.5 },
+ { "label": "^", "x": 6, "y": 1.5 },
+ { "label": "&", "x": 7, "y": 1.5 },
+ { "label": "*", "x": 8, "y": 1.5 },
+ { "label": "(", "x": 9, "y": 1.5 },
+ { "label": ")", "x": 10, "y": 1.5 },
+ { "label": "_", "x": 11, "y": 1.5 },
+ { "label": "+", "x": 12, "y": 1.5 },
+ { "label": "Backspace", "x": 13, "y": 1.5 },
+ { "label": "Backspace2", "x": 14, "y": 1.5 },
+ { "label": "Insert", "x": 15.25, "y": 1.5 },
+ { "label": "Home", "x": 16.25, "y": 1.5 },
+ { "label": "PgUp", "x": 17.25, "y": 1.5 },
+ { "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 },
+ { "label": "Q", "x": 1.5, "y": 2.5 },
+ { "label": "W", "x": 2.5, "y": 2.5 },
+ { "label": "E", "x": 3.5, "y": 2.5 },
+ { "label": "R", "x": 4.5, "y": 2.5 },
+ { "label": "T", "x": 5.5, "y": 2.5 },
+ { "label": "Y", "x": 6.5, "y": 2.5 },
+ { "label": "U", "x": 7.5, "y": 2.5 },
+ { "label": "I", "x": 8.5, "y": 2.5 },
+ { "label": "O", "x": 9.5, "y": 2.5 },
+ { "label": "P", "x": 10.5, "y": 2.5 },
+ { "label": "{", "x": 11.5, "y": 2.5 },
+ { "label": "}", "x": 12.5, "y": 2.5 },
+ { "label": "|", "x": 13.5, "y": 2.5, "w": 1.5 },
+ { "label": "Delete", "x": 15.25, "y": 2.5 },
+ { "label": "End", "x": 16.25, "y": 2.5 },
+ { "label": "PgDn", "x": 17.25, "y": 2.5 },
+ { "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 },
+ { "label": "A", "x": 1.75, "y": 3.5 },
+ { "label": "S", "x": 2.75, "y": 3.5 },
+ { "label": "D", "x": 3.75, "y": 3.5 },
+ { "label": "F", "x": 4.75, "y": 3.5 },
+ { "label": "G", "x": 5.75, "y": 3.5 },
+ { "label": "H", "x": 6.75, "y": 3.5 },
+ { "label": "J", "x": 7.75, "y": 3.5 },
+ { "label": "K", "x": 8.75, "y": 3.5 },
+ { "label": "L", "x": 9.75, "y": 3.5 },
+ { "label": ":", "x": 10.75, "y": 3.5 },
+ { "label": "\"", "x": 11.75, "y": 3.5 },
+ { "label": "Enter", "x": 12.75, "y": 3.5, "w": 2.25 },
+ { "label": "Shift", "x": 0, "y": 4.5, "w": 1.25 },
+ { "label": "|", "x": 1.25, "y": 4.5 },
+ { "label": "Z", "x": 2.25, "y": 4.5 },
+ { "label": "X", "x": 3.25, "y": 4.5 },
+ { "label": "C", "x": 4.25, "y": 4.5 },
+ { "label": "V", "x": 5.25, "y": 4.5 },
+ { "label": "B", "x": 6.25, "y": 4.5 },
+ { "label": "N", "x": 7.25, "y": 4.5 },
+ { "label": "M", "x": 8.25, "y": 4.5 },
+ { "label": "<", "x": 9.25, "y": 4.5 },
+ { "label": ">", "x": 10.25, "y": 4.5 },
+ { "label": "?", "x": 11.25, "y": 4.5 },
+ { "label": "Shift", "x": 12.25, "y": 4.5, "w": 1.75 },
+ { "label": "Shift2", "x": 14, "y": 4.5, "w": 1 },
+ { "label": "Up", "x": 16.25, "y": 4.5 },
+ { "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.5 },
+ { "label": "Win", "x": 1.5, "y": 5.5, "w": 1 },
+ { "label": "Alt", "x": 2.5, "y": 5.5, "w": 1.5 },
+ { "label": "Space", "x": 4, "y": 5.5, "w": 7 },
+ { "label": "Alt", "x": 11, "y": 5.5, "w": 1.5 },
+ { "label": "Win", "x": 12.5, "y": 5.5, "w": 1 },
+ { "label": "Ctrl", "x": 13.5, "y": 5.5, "w": 1.5 },
+ { "label": "Left", "x": 15.25, "y": 5.5 },
+ { "label": "Down", "x": 16.25, "y": 5.5 },
+ { "label": "Right", "x": 17.25, "y": 5.5 }
+ ]
+ },
+ "LAYOUT_tkl_ansi_wkl": {
+ "layout": [
+ { "label": "Esc", "x": 0, "y": 0 },
+ { "label": "F1", "x": 2, "y": 0 },
+ { "label": "F2", "x": 3, "y": 0 },
+ { "label": "F3", "x": 4, "y": 0 },
+ { "label": "F4", "x": 5, "y": 0 },
+ { "label": "F5", "x": 6.5, "y": 0 },
+ { "label": "F6", "x": 7.5, "y": 0 },
+ { "label": "F7", "x": 8.5, "y": 0 },
+ { "label": "F8", "x": 9.5, "y": 0 },
+ { "label": "F9", "x": 11, "y": 0 },
+ { "label": "F10", "x": 12, "y": 0 },
+ { "label": "F11", "x": 13, "y": 0 },
+ { "label": "F12", "x": 14, "y": 0 },
+ { "label": "PrtSc", "x": 15.25, "y": 0 },
+ { "label": "Scroll Lock", "x": 16.25, "y": 0 },
+ { "label": "Pause", "x": 17.25, "y": 0 },
+ { "label": "~", "x": 0, "y": 1.5 },
+ { "label": "!", "x": 1, "y": 1.5 },
+ { "label": "@", "x": 2, "y": 1.5 },
+ { "label": "#", "x": 3, "y": 1.5 },
+ { "label": "$", "x": 4, "y": 1.5 },
+ { "label": "%", "x": 5, "y": 1.5 },
+ { "label": "^", "x": 6, "y": 1.5 },
+ { "label": "&", "x": 7, "y": 1.5 },
+ { "label": "*", "x": 8, "y": 1.5 },
+ { "label": "(", "x": 9, "y": 1.5 },
+ { "label": ")", "x": 10, "y": 1.5 },
+ { "label": "_", "x": 11, "y": 1.5 },
+ { "label": "+", "x": 12, "y": 1.5 },
+ { "label": "Backspace", "x": 13, "y": 1.5, "w": 2 },
+ { "label": "Insert", "x": 15.25, "y": 1.5 },
+ { "label": "Home", "x": 16.25, "y": 1.5 },
+ { "label": "PgUp", "x": 17.25, "y": 1.5 },
+ { "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 },
+ { "label": "Q", "x": 1.5, "y": 2.5 },
+ { "label": "W", "x": 2.5, "y": 2.5 },
+ { "label": "E", "x": 3.5, "y": 2.5 },
+ { "label": "R", "x": 4.5, "y": 2.5 },
+ { "label": "T", "x": 5.5, "y": 2.5 },
+ { "label": "Y", "x": 6.5, "y": 2.5 },
+ { "label": "U", "x": 7.5, "y": 2.5 },
+ { "label": "I", "x": 8.5, "y": 2.5 },
+ { "label": "O", "x": 9.5, "y": 2.5 },
+ { "label": "P", "x": 10.5, "y": 2.5 },
+ { "label": "{", "x": 11.5, "y": 2.5 },
+ { "label": "}", "x": 12.5, "y": 2.5 },
+ { "label": "|", "x": 13.5, "y": 2.5, "w": 1.5 },
+ { "label": "Delete", "x": 15.25, "y": 2.5 },
+ { "label": "End", "x": 16.25, "y": 2.5 },
+ { "label": "PgDn", "x": 17.25, "y": 2.5 },
+ { "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 },
+ { "label": "A", "x": 1.75, "y": 3.5 },
+ { "label": "S", "x": 2.75, "y": 3.5 },
+ { "label": "D", "x": 3.75, "y": 3.5 },
+ { "label": "F", "x": 4.75, "y": 3.5 },
+ { "label": "G", "x": 5.75, "y": 3.5 },
+ { "label": "H", "x": 6.75, "y": 3.5 },
+ { "label": "J", "x": 7.75, "y": 3.5 },
+ { "label": "K", "x": 8.75, "y": 3.5 },
+ { "label": "L", "x": 9.75, "y": 3.5 },
+ { "label": ":", "x": 10.75, "y": 3.5 },
+ { "label": "\"", "x": 11.75, "y": 3.5 },
+ { "label": "Enter", "x": 12.75, "y": 3.5, "w": 2.25 },
+ { "label": "Shift", "x": 0, "y": 4.5, "w": 2.25 },
+ { "label": "Z", "x": 2.25, "y": 4.5 },
+ { "label": "X", "x": 3.25, "y": 4.5 },
+ { "label": "C", "x": 4.25, "y": 4.5 },
+ { "label": "V", "x": 5.25, "y": 4.5 },
+ { "label": "B", "x": 6.25, "y": 4.5 },
+ { "label": "N", "x": 7.25, "y": 4.5 },
+ { "label": "M", "x": 8.25, "y": 4.5 },
+ { "label": "<", "x": 9.25, "y": 4.5 },
+ { "label": ">", "x": 10.25, "y": 4.5 },
+ { "label": "?", "x": 11.25, "y": 4.5 },
+ { "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 },
+ { "label": "Up", "x": 16.25, "y": 4.5 },
+ { "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.5 },
+ { "label": "Alt", "x": 2.5, "y": 5.5, "w": 1.5 },
+ { "label": "Space", "x": 4, "y": 5.5, "w": 7 },
+ { "label": "Alt", "x": 11, "y": 5.5, "w": 1.5 },
+ { "label": "Ctrl", "x": 13.5, "y": 5.5, "w": 1.5 },
+ { "label": "Left", "x": 15.25, "y": 5.5 },
+ { "label": "Down", "x": 16.25, "y": 5.5 },
+ { "label": "Right", "x": 17.25, "y": 5.5 }
+ ]
+ },
+ "LAYOUT_tkl_iso_wkl": {
+ "layout": [
+ { "label": "Esc", "x": 0, "y": 0 },
+ { "label": "F1", "x": 2, "y": 0 },
+ { "label": "F2", "x": 3, "y": 0 },
+ { "label": "F3", "x": 4, "y": 0 },
+ { "label": "F4", "x": 5, "y": 0 },
+ { "label": "F5", "x": 6.5, "y": 0 },
+ { "label": "F6", "x": 7.5, "y": 0 },
+ { "label": "F7", "x": 8.5, "y": 0 },
+ { "label": "F8", "x": 9.5, "y": 0 },
+ { "label": "F9", "x": 11, "y": 0 },
+ { "label": "F10", "x": 12, "y": 0 },
+ { "label": "F11", "x": 13, "y": 0 },
+ { "label": "F12", "x": 14, "y": 0 },
+ { "label": "PrtSc", "x": 15.25, "y": 0 },
+ { "label": "Scroll Lock", "x": 16.25, "y": 0 },
+ { "label": "Pause", "x": 17.25, "y": 0 },
+ { "label": "\u00ac", "x": 0, "y": 1.5 },
+ { "label": "!", "x": 1, "y": 1.5 },
+ { "label": "\"", "x": 2, "y": 1.5 },
+ { "label": "\u00a3", "x": 3, "y": 1.5 },
+ { "label": "$", "x": 4, "y": 1.5 },
+ { "label": "%", "x": 5, "y": 1.5 },
+ { "label": "^", "x": 6, "y": 1.5 },
+ { "label": "&", "x": 7, "y": 1.5 },
+ { "label": "*", "x": 8, "y": 1.5 },
+ { "label": "(", "x": 9, "y": 1.5 },
+ { "label": ")", "x": 10, "y": 1.5 },
+ { "label": "_", "x": 11, "y": 1.5 },
+ { "label": "+", "x": 12, "y": 1.5 },
+ { "label": "Backspace", "x": 13, "y": 1.5, "w": 2 },
+ { "label": "Insert", "x": 15.25, "y": 1.5 },
+ { "label": "Home", "x": 16.25, "y": 1.5 },
+ { "label": "PgUp", "x": 17.25, "y": 1.5 },
+ { "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 },
+ { "label": "Q", "x": 1.5, "y": 2.5 },
+ { "label": "W", "x": 2.5, "y": 2.5 },
+ { "label": "E", "x": 3.5, "y": 2.5 },
+ { "label": "R", "x": 4.5, "y": 2.5 },
+ { "label": "T", "x": 5.5, "y": 2.5 },
+ { "label": "Y", "x": 6.5, "y": 2.5 },
+ { "label": "U", "x": 7.5, "y": 2.5 },
+ { "label": "I", "x": 8.5, "y": 2.5 },
+ { "label": "O", "x": 9.5, "y": 2.5 },
+ { "label": "P", "x": 10.5, "y": 2.5 },
+ { "label": "{", "x": 11.5, "y": 2.5 },
+ { "label": "}", "x": 12.5, "y": 2.5 },
+ { "label": "Delete", "x": 15.25, "y": 2.5 },
+ { "label": "End", "x": 16.25, "y": 2.5 },
+ { "label": "PgDn", "x": 17.25, "y": 2.5 },
+ { "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 },
+ { "label": "A", "x": 1.75, "y": 3.5 },
+ { "label": "S", "x": 2.75, "y": 3.5 },
+ { "label": "D", "x": 3.75, "y": 3.5 },
+ { "label": "F", "x": 4.75, "y": 3.5 },
+ { "label": "G", "x": 5.75, "y": 3.5 },
+ { "label": "H", "x": 6.75, "y": 3.5 },
+ { "label": "J", "x": 7.75, "y": 3.5 },
+ { "label": "K", "x": 8.75, "y": 3.5 },
+ { "label": "L", "x": 9.75, "y": 3.5 },
+ { "label": ":", "x": 10.75, "y": 3.5 },
+ { "label": "@", "x": 11.75, "y": 3.5 },
+ { "label": "~", "x": 12.75, "y": 3.5 },
+ { "label": "Enter", "x": 13.75, "y": 2.5, "w": 1.25, "h": 2 },
+ { "label": "Shift", "x": 0, "y": 4.5, "w": 1.25 },
+ { "label": "|", "x": 1.25, "y": 4.5 },
+ { "label": "Z", "x": 2.25, "y": 4.5 },
+ { "label": "X", "x": 3.25, "y": 4.5 },
+ { "label": "C", "x": 4.25, "y": 4.5 },
+ { "label": "V", "x": 5.25, "y": 4.5 },
+ { "label": "B", "x": 6.25, "y": 4.5 },
+ { "label": "N", "x": 7.25, "y": 4.5 },
+ { "label": "M", "x": 8.25, "y": 4.5 },
+ { "label": "<", "x": 9.25, "y": 4.5 },
+ { "label": ">", "x": 10.25, "y": 4.5 },
+ { "label": "?", "x": 11.25, "y": 4.5 },
+ { "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 },
+ { "label": "Up", "x": 16.25, "y": 4.5 },
+ { "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.5 },
+ { "label": "Alt", "x": 2.5, "y": 5.5, "w": 1.5 },
+ { "label": "Space", "x": 4, "y": 5.5, "w": 7 },
+ { "label": "AltGr", "x": 11, "y": 5.5, "w": 1.5 },
+ { "label": "Ctrl", "x": 13.5, "y": 5.5, "w": 1.5 },
+ { "label": "Left", "x": 15.25, "y": 5.5 },
+ { "label": "Down", "x": 16.25, "y": 5.5 },
+ { "label": "Right", "x": 17.25, "y": 5.5 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default/config.h b/keyboards/masterworks/classy_tkl/keymaps/default/config.h
new file mode 100644
index 000000000000..e328e5a3b04c
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2020 Mathias Andersson
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default/keymap.c b/keyboards/masterworks/classy_tkl/keymaps/default/keymap.c
new file mode 100644
index 000000000000..a87656059c68
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+/*
+Copyright 2020 Mathias Andersson
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, KC_INS , KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, KC_UP,
+ KC_LCTL, KC_NO, KC_LALT, KC_SPC, KC_RALT, KC_NO, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
+// clang-format on
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default/readme.md b/keyboards/masterworks/classy_tkl/keymaps/default/readme.md
new file mode 100644
index 000000000000..72b4eb54a072
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default winkeyless ANSI keymap for the Classy TKL
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/config.h b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/config.h
new file mode 100644
index 000000000000..e328e5a3b04c
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2020 Mathias Andersson
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/keymap.c b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/keymap.c
new file mode 100644
index 000000000000..bb7b256fdadd
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/keymap.c
@@ -0,0 +1,29 @@
+/*
+Copyright 2020 Mathias Andersson
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_ansi_wkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS , KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
+// clang-format on
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/readme.md b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/readme.md
new file mode 100644
index 000000000000..72b4eb54a072
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_ansi_wkl/readme.md
@@ -0,0 +1 @@
+# The default winkeyless ANSI keymap for the Classy TKL
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/config.h b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/config.h
new file mode 100644
index 000000000000..e328e5a3b04c
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2020 Mathias Andersson
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/keymap.c b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/keymap.c
new file mode 100644
index 000000000000..1456ee02a204
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/keymap.c
@@ -0,0 +1,29 @@
+/*
+Copyright 2020 Mathias Andersson
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_iso_wkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS , KC_HOME, KC_PGUP,
+ KC_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 , KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
+// clang-format on
diff --git a/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/readme.md b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/readme.md
new file mode 100644
index 000000000000..a4b8c86b1dcd
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/default_tkl_iso_wkl/readme.md
@@ -0,0 +1 @@
+# The default winkeyless ISO keymap for the Classy TKL
diff --git a/keyboards/masterworks/classy_tkl/keymaps/via/keymap.c b/keyboards/masterworks/classy_tkl/keymaps/via/keymap.c
new file mode 100644
index 000000000000..c26f147eacd5
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/via/keymap.c
@@ -0,0 +1,50 @@
+/*
+Copyright 2020 Mathias Andersson
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC, KC_INS , KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, KC_UP,
+ KC_LCTL, KC_NO, KC_LALT, KC_SPC, KC_RALT, KC_NO, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+ [1] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ [3] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+// clang-format on
diff --git a/keyboards/masterworks/classy_tkl/keymaps/via/rules.mk b/keyboards/masterworks/classy_tkl/keymaps/via/rules.mk
new file mode 100644
index 000000000000..1e5b99807cb7
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/masterworks/classy_tkl/readme.md b/keyboards/masterworks/classy_tkl/readme.md
new file mode 100644
index 000000000000..0557ed7f4c4c
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/readme.md
@@ -0,0 +1,15 @@
+# Classy TKL
+
+![Classy TKL](https://i.imgur.com/p1dxfYKl.jpg)
+
+A short description of the keyboard/project
+
+* Keyboard Maintainer: [Mathias Andersson](https://github.com/wraul)
+* Hardware Supported: [Classy TKL PCB](https://github.com/4pplet/classyTKL)
+* Hardware Availability: https://geekhack.org/index.php?topic=105933
+
+Make example for this keyboard (after setting up your build environment):
+
+ make masterworks/classy_tkl:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/masterworks/classy_tkl/rev_a/config.h b/keyboards/masterworks/classy_tkl/rev_a/config.h
new file mode 100644
index 000000000000..0821b1dfcec8
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/rev_a/config.h
@@ -0,0 +1,58 @@
+/*
+Copyright 2020 Mathias Andersson
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4D57 // "MW" = Masterworks
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Masterworks
+#define PRODUCT Classy TKL
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 17
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+#define MATRIX_ROW_PINS \
+ { C7, F0, F1, F4, F5, F6 }
+#define MATRIX_COL_PINS \
+ { B4, D7, D6, D4, C6, D5, D3, D2, D1, D0, B7, B3, B2, B1, B0, E6, F7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/masterworks/classy_tkl/rev_a/rev_a.c b/keyboards/masterworks/classy_tkl/rev_a/rev_a.c
new file mode 100644
index 000000000000..58c0393db7e3
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/rev_a/rev_a.c
@@ -0,0 +1,42 @@
+/* Copyright 2020 Mathias Andersson
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "rev_a.h"
+
+#define CAPS_PIN B5
+#define SCROLL_PIN B6
+
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ setPinOutput(CAPS_PIN);
+ setPinOutput(SCROLL_PIN);
+
+ matrix_init_user();
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ writePin(CAPS_PIN, led_state.caps_lock);
+ writePin(SCROLL_PIN, led_state.scroll_lock);
+ }
+ return res;
+}
diff --git a/keyboards/masterworks/classy_tkl/rev_a/rev_a.h b/keyboards/masterworks/classy_tkl/rev_a/rev_a.h
new file mode 100644
index 000000000000..73e68b598d07
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/rev_a/rev_a.h
@@ -0,0 +1,79 @@
+/* Copyright 2020 Mathias Andersson
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+// clang-format off
+#define LAYOUT_all( \
+ k00, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k0G, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k3D, k1E, k1F, k1G, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4F, \
+ k50, k52, k53, k57, k5B, k5C, k5D, k5E, k5F, k5G \
+) \
+{ \
+ { k00, KC_NO, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k0G }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, KC_NO, KC_NO, KC_NO }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, KC_NO, k4F, KC_NO }, \
+ { k50, KC_NO, k52, k53, KC_NO, KC_NO, KC_NO, k57, KC_NO, KC_NO, KC_NO, k5B, k5C, k5D, k5E, k5F, k5G }, \
+}
+
+#define LAYOUT_tkl_ansi_wkl( \
+ k00, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k0G, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k3D, k1E, k1F, k1G, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, \
+ k40, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4F, \
+ k50, k53, k57, k5B, k5D, k5E, k5F, k5G \
+) \
+{ \
+ { k00, KC_NO, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k0G }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, KC_NO, k1E, k1F, k1G }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, KC_NO, KC_NO, KC_NO }, \
+ { k40, KC_NO, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, KC_NO, KC_NO, k4F, KC_NO }, \
+ { k50, KC_NO, KC_NO, k53, KC_NO, KC_NO, KC_NO, k57, KC_NO, KC_NO, KC_NO, k5B, KC_NO, k5D, k5E, k5F, k5G }, \
+}
+
+#define LAYOUT_tkl_iso_wkl( \
+ k00, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k0G, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k3D, k1E, k1F, k1G, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2E, k2F, k2G, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k2D, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4F, \
+ k50, k53, k57, k5B, k5D, k5E, k5F, k5G \
+) \
+{ \
+ { k00, KC_NO, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k0G }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, KC_NO, k1E, k1F, k1G }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, KC_NO, KC_NO, KC_NO }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, KC_NO, KC_NO, k4F, KC_NO }, \
+ { k50, KC_NO, KC_NO, k53, KC_NO, KC_NO, KC_NO, k57, KC_NO, KC_NO, KC_NO, k5B, KC_NO, k5D, k5E, k5F, k5G }, \
+}
+// clang-format on
diff --git a/keyboards/masterworks/classy_tkl/rev_a/rules.mk b/keyboards/masterworks/classy_tkl/rev_a/rules.mk
new file mode 100644
index 000000000000..34bcd87a4aaa
--- /dev/null
+++ b/keyboards/masterworks/classy_tkl/rev_a/rules.mk
@@ -0,0 +1,26 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
+# Supported layouts
+LAYOUTS = tkl_ansi_wkl tkl_iso_wkl
From 0140baf7e0b041df841f8782743344a4ebe4ebe1 Mon Sep 17 00:00:00 2001
From: Ryan
Date: Sat, 19 Sep 2020 13:00:18 +1000
Subject: [PATCH 039/178] Add STM32F401/F411 to mcu_selection.mk (#10278)
* Reorder STM32 MCUs
* Add STM32F4xx to mcu_selection.mk
* Set MCU for phoenix and tkw/stoutgat/v2/f411
---
.../handwired/onekey/blackpill_f401/rules.mk | 30 +----
.../handwired/onekey/blackpill_f411/rules.mk | 30 +----
keyboards/handwired/riblee_f401/rules.mk | 32 +----
keyboards/matrix/m20add/rules.mk | 27 +---
keyboards/matrix/noah/rules.mk | 27 +---
keyboards/phoenix/rules.mk | 34 +----
keyboards/tkw/stoutgat/v2/f411/rules.mk | 30 +----
keyboards/zvecr/zv48/f401/rules.mk | 30 +----
keyboards/zvecr/zv48/f411/rules.mk | 30 +----
quantum/mcu_selection.mk | 126 +++++++++++++-----
10 files changed, 131 insertions(+), 265 deletions(-)
diff --git a/keyboards/handwired/onekey/blackpill_f401/rules.mk b/keyboards/handwired/onekey/blackpill_f401/rules.mk
index 609262049cad..6eb37a581d61 100644
--- a/keyboards/handwired/onekey/blackpill_f401/rules.mk
+++ b/keyboards/handwired/onekey/blackpill_f401/rules.mk
@@ -1,30 +1,8 @@
-## chip/board settings
-# the next two should match the directories in
-# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-# linker script to use
-# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
-# or /ld/
-MCU_LDSCRIPT = STM32F401xC
-# startup code to use
-# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-# it should exist either in /os/hal/boards/
-# or /boards
-BOARD = BLACKPILL_STM32_F401
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m4
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-USE_FPU = yes
-# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+# MCU name
+MCU = STM32F401
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# Address of the bootloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
# Build Options
# change yes to no to disable
diff --git a/keyboards/handwired/onekey/blackpill_f411/rules.mk b/keyboards/handwired/onekey/blackpill_f411/rules.mk
index f2e0f2b4f956..7cf886431fb7 100644
--- a/keyboards/handwired/onekey/blackpill_f411/rules.mk
+++ b/keyboards/handwired/onekey/blackpill_f411/rules.mk
@@ -1,30 +1,8 @@
-## chip/board settings
-# the next two should match the directories in
-# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-# linker script to use
-# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
-# or /ld/
-MCU_LDSCRIPT = STM32F411xE
-# startup code to use
-# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-# it should exist either in /os/hal/boards/
-# or /boards
-BOARD = BLACKPILL_STM32_F411
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m4
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-USE_FPU = yes
-# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+# MCU name
+MCU = STM32F411
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# Address of the bootloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
# Build Options
# change yes to no to disable
diff --git a/keyboards/handwired/riblee_f401/rules.mk b/keyboards/handwired/riblee_f401/rules.mk
index eab426a375cd..2cb1d380e116 100644
--- a/keyboards/handwired/riblee_f401/rules.mk
+++ b/keyboards/handwired/riblee_f401/rules.mk
@@ -1,30 +1,8 @@
-## chip/board settings
-# the next two should match the directories in
-# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-# linker script to use
-# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
-# or /ld/
-MCU_LDSCRIPT = STM32F401xC
-# startup code to use
-# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-# it should exist either in /os/hal/boards/
-# or /boards
-BOARD = BLACKPILL_STM32_F401
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m4
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-USE_FPU = yes
-# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+# MCU name
+MCU = STM32F401
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# Address of the bootloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
# Build Options
# change yes to no to disable
@@ -43,4 +21,4 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
BACKLIGHT_DRIVER = software
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no # Enable Bluetooth
-AUDIO_ENABLE = no # Audio output
\ No newline at end of file
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/matrix/m20add/rules.mk b/keyboards/matrix/m20add/rules.mk
index 6dba153932cb..fb97c1d3c8f2 100644
--- a/keyboards/matrix/m20add/rules.mk
+++ b/keyboards/matrix/m20add/rules.mk
@@ -1,38 +1,15 @@
-## chip/board settings
-# - the next two should match the directories in
-# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
+# MCU name
+MCU = STM32F411
# Linker script to use
# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
# or /ld/
MCU_LDSCRIPT = m20add_boot
-# Startup code to use
-# - it should exist in /os/common/startup/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-
# Board: it should exist either in /os/hal/boards/
# or /boards
BOARD = m20add_bd
-# Cortex version
-MCU = cortex-m4
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-
-USE_FPU = yes
-
-# Vector table for application
-# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
-OPT_DEFS =
-
-# Options to pass to dfu-util when flashing
-#DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-#DFU_SUFFIX_ARGS = -p DF11 -v 0483
-
# Build Options
# comment out to disable the options.
#
diff --git a/keyboards/matrix/noah/rules.mk b/keyboards/matrix/noah/rules.mk
index 094364e11bc1..19e432d2a0e2 100644
--- a/keyboards/matrix/noah/rules.mk
+++ b/keyboards/matrix/noah/rules.mk
@@ -1,38 +1,15 @@
-## chip/board settings
-# - the next two should match the directories in
-# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
+# MCU name
+MCU = STM32F411
# Linker script to use
# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
# or /ld/
MCU_LDSCRIPT = noah_boot
-# Startup code to use
-# - it should exist in /os/common/startup/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-
# Board: it should exist either in /os/hal/boards/
# or /boards
BOARD = noah_bd
-# Cortex version
-MCU = cortex-m4
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-
-USE_FPU = yes
-
-# Vector table for application
-# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
-OPT_DEFS =
-
-# Options to pass to dfu-util when flashing
-#DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-#DFU_SUFFIX_ARGS = -p DF11 -v 0483
-
# Build Options
# comment out to disable the options.
#
diff --git a/keyboards/phoenix/rules.mk b/keyboards/phoenix/rules.mk
index 6c6c8446ab6c..968c6548c05d 100644
--- a/keyboards/phoenix/rules.mk
+++ b/keyboards/phoenix/rules.mk
@@ -1,3 +1,9 @@
+# MCU name
+MCU = STM32F401
+
+# Address of the bootloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+
# Build Options
# change yes to no to disable
#
@@ -17,32 +23,4 @@ SPLIT_KEYBOARD = yes
SERIAL_DRIVER = usart
KEYBOARD_SHARED_EP = yes
-## chip/board settings
-# the next two should match the directories in
-# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-# linker script to use
-# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
-# or /ld/
-MCU_LDSCRIPT = STM32F401xC
-# startup code to use
-# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-# it should exist either in /os/hal/boards/
-# or /boards
-BOARD = BLACKPILL_STM32_F401
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m4
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-USE_FPU = yes
-# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
-
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
-
OPT_DEFS += -DSTM32_DMA_REQUIRED=TRUE
diff --git a/keyboards/tkw/stoutgat/v2/f411/rules.mk b/keyboards/tkw/stoutgat/v2/f411/rules.mk
index 61add3aed53b..4f7f52e62bf9 100644
--- a/keyboards/tkw/stoutgat/v2/f411/rules.mk
+++ b/keyboards/tkw/stoutgat/v2/f411/rules.mk
@@ -1,27 +1,5 @@
-## chip/board settings
-# the next two should match the directories in
-# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-# linker script to use
-# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
-# or /ld/
-MCU_LDSCRIPT = STM32F411xE
-# startup code to use
-# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-# it should exist either in /os/hal/boards/
-# or /boards
-BOARD = BLACKPILL_STM32_F411
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m4
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-USE_FPU = yes
-# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+# MCU name
+MCU = STM32F411
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# Address of the bootloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
diff --git a/keyboards/zvecr/zv48/f401/rules.mk b/keyboards/zvecr/zv48/f401/rules.mk
index e41d5ef7a2ea..950442af96fb 100644
--- a/keyboards/zvecr/zv48/f401/rules.mk
+++ b/keyboards/zvecr/zv48/f401/rules.mk
@@ -1,27 +1,5 @@
-## chip/board settings
-# the next two should match the directories in
-# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-# linker script to use
-# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
-# or /ld/
-MCU_LDSCRIPT = STM32F401xC
-# startup code to use
-# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-# it should exist either in /os/hal/boards/
-# or /boards
-BOARD = BLACKPILL_STM32_F401
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m4
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-USE_FPU = yes
-# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+# MCU name
+MCU = STM32F401
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# Address of the bootloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
diff --git a/keyboards/zvecr/zv48/f411/rules.mk b/keyboards/zvecr/zv48/f411/rules.mk
index 61add3aed53b..4f7f52e62bf9 100644
--- a/keyboards/zvecr/zv48/f411/rules.mk
+++ b/keyboards/zvecr/zv48/f411/rules.mk
@@ -1,27 +1,5 @@
-## chip/board settings
-# the next two should match the directories in
-# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-# linker script to use
-# it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
-# or /ld/
-MCU_LDSCRIPT = STM32F411xE
-# startup code to use
-# is should exist in /os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-# it should exist either in /os/hal/boards/
-# or /boards
-BOARD = BLACKPILL_STM32_F411
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m4
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-USE_FPU = yes
-# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
+# MCU name
+MCU = STM32F411
-# Options to pass to dfu-util when flashing
-DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
-DFU_SUFFIX_ARGS = -v 0483 -p df11
+# Address of the bootloader in system memory
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
diff --git a/quantum/mcu_selection.mk b/quantum/mcu_selection.mk
index 33a0cabc84e5..6ec5dff5f512 100644
--- a/quantum/mcu_selection.mk
+++ b/quantum/mcu_selection.mk
@@ -82,37 +82,37 @@ ifneq ($(findstring MK20DX256, $(MCU)),)
BOARD ?= PJRC_TEENSY_3_1
endif
-ifneq ($(findstring STM32F303, $(MCU)),)
+ifneq ($(findstring STM32F042, $(MCU)),)
# Cortex version
- MCU = cortex-m4
+ MCU = cortex-m0
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
- ARMV = 7
+ ARMV = 6
## chip/board settings
# - the next two should match the directories in
# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
MCU_FAMILY = STM32
- MCU_SERIES = STM32F3xx
+ MCU_SERIES = STM32F0xx
# Linker script to use
# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
# or /ld/
- MCU_LDSCRIPT ?= STM32F303xC
+ MCU_LDSCRIPT ?= STM32F042x6
# Startup code to use
# - it should exist in /os/common/startup/ARMCMx/compilers/GCC/mk/
- MCU_STARTUP ?= stm32f3xx
+ MCU_STARTUP ?= stm32f0xx
# Board: it should exist either in /os/hal/boards/,
# /boards/, or drivers/boards/
- BOARD ?= GENERIC_STM32_F303XC
+ BOARD ?= GENERIC_STM32_F042X6
- USE_FPU ?= yes
+ USE_FPU ?= no
# Options to pass to dfu-util when flashing
- DFU_ARGS ?= -d 0483:df11 -a 0 -s 0x08000000:leave
- DFU_SUFFIX_ARGS ?= -v 0483 -p df11
+ DFU_ARGS ?= -d 0483:DF11 -a 0 -s 0x08000000:leave
+ DFU_SUFFIX_ARGS ?= -v 0483 -p DF11
endif
ifneq ($(findstring STM32F072, $(MCU)),)
@@ -144,46 +144,46 @@ ifneq ($(findstring STM32F072, $(MCU)),)
USE_FPU ?= no
# Options to pass to dfu-util when flashing
- DFU_ARGS ?= -d 0483:df11 -a 0 -s 0x08000000:leave
- DFU_SUFFIX_ARGS ?= -v 0483 -p df11
+ DFU_ARGS ?= -d 0483:DF11 -a 0 -s 0x08000000:leave
+ DFU_SUFFIX_ARGS ?= -v 0483 -p DF11
endif
-ifneq ($(findstring STM32F042, $(MCU)),)
+ifneq ($(findstring STM32F103, $(MCU)),)
# Cortex version
- MCU = cortex-m0
+ MCU = cortex-m3
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
- ARMV = 6
+ ARMV = 7
## chip/board settings
# - the next two should match the directories in
# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
MCU_FAMILY = STM32
- MCU_SERIES = STM32F0xx
+ MCU_SERIES = STM32F1xx
# Linker script to use
# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
# or /ld/
- MCU_LDSCRIPT ?= STM32F042x6
+ MCU_LDSCRIPT ?= STM32F103x8
# Startup code to use
# - it should exist in /os/common/startup/ARMCMx/compilers/GCC/mk/
- MCU_STARTUP ?= stm32f0xx
+ MCU_STARTUP ?= stm32f1xx
# Board: it should exist either in /os/hal/boards/,
# /boards/, or drivers/boards/
- BOARD ?= GENERIC_STM32_F042X6
+ BOARD ?= GENERIC_STM32_F103
USE_FPU ?= no
# Options to pass to dfu-util when flashing
- DFU_ARGS ?= -d 0483:df11 -a 0 -s 0x08000000:leave
- DFU_SUFFIX_ARGS ?= -v 0483 -p df11
+ DFU_ARGS ?= -d 0483:DF11 -a 0 -s 0x08000000:leave
+ DFU_SUFFIX_ARGS ?= -v 0483 -p DF11
endif
-ifneq ($(findstring STM32F103, $(MCU)),)
+ifneq ($(findstring STM32F303, $(MCU)),)
# Cortex version
- MCU = cortex-m3
+ MCU = cortex-m4
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
ARMV = 7
@@ -192,26 +192,92 @@ ifneq ($(findstring STM32F103, $(MCU)),)
# - the next two should match the directories in
# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
MCU_FAMILY = STM32
- MCU_SERIES = STM32F1xx
+ MCU_SERIES = STM32F3xx
# Linker script to use
# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
# or /ld/
- MCU_LDSCRIPT ?= STM32F103x8
+ MCU_LDSCRIPT ?= STM32F303xC
# Startup code to use
# - it should exist in /os/common/startup/ARMCMx/compilers/GCC/mk/
- MCU_STARTUP ?= stm32f1xx
+ MCU_STARTUP ?= stm32f3xx
# Board: it should exist either in /os/hal/boards/,
# /boards/, or drivers/boards/
- BOARD ?= GENERIC_STM32_F103
+ BOARD ?= GENERIC_STM32_F303XC
- USE_FPU ?= no
+ USE_FPU ?= yes
+
+ # Options to pass to dfu-util when flashing
+ DFU_ARGS ?= -d 0483:DF11 -a 0 -s 0x08000000:leave
+ DFU_SUFFIX_ARGS ?= -v 0483 -p DF11
+endif
+
+ifneq ($(findstring STM32F401, $(MCU)),)
+ # Cortex version
+ MCU = cortex-m4
+
+ # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ ARMV = 7
+
+ ## chip/board settings
+ # - the next two should match the directories in
+ # /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+ MCU_FAMILY = STM32
+ MCU_SERIES = STM32F4xx
+
+ # Linker script to use
+ # - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
+ # or /ld/
+ MCU_LDSCRIPT ?= STM32F401xC
+
+ # Startup code to use
+ # - it should exist in /os/common/startup/ARMCMx/compilers/GCC/mk/
+ MCU_STARTUP ?= stm32f4xx
+
+ # Board: it should exist either in /os/hal/boards/,
+ # /boards/, or drivers/boards/
+ BOARD ?= BLACKPILL_STM32_F401
+
+ USE_FPU ?= yes
+
+ # Options to pass to dfu-util when flashing
+ DFU_ARGS ?= -d 0483:DF11 -a 0 -s 0x08000000:leave
+ DFU_SUFFIX_ARGS ?= -v 0483 -p DF11
+endif
+
+ifneq ($(findstring STM32F411, $(MCU)),)
+ # Cortex version
+ MCU = cortex-m4
+
+ # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ ARMV = 7
+
+ ## chip/board settings
+ # - the next two should match the directories in
+ # /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+ MCU_FAMILY = STM32
+ MCU_SERIES = STM32F4xx
+
+ # Linker script to use
+ # - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
+ # or /ld/
+ MCU_LDSCRIPT ?= STM32F411xE
+
+ # Startup code to use
+ # - it should exist in /os/common/startup/ARMCMx/compilers/GCC/mk/
+ MCU_STARTUP ?= stm32f4xx
+
+ # Board: it should exist either in /os/hal/boards/,
+ # /boards/, or drivers/boards/
+ BOARD ?= BLACKPILL_STM32_F411
+
+ USE_FPU ?= yes
# Options to pass to dfu-util when flashing
- DFU_ARGS ?= -d 0483:df11 -a 0 -s 0x08000000:leave
- DFU_SUFFIX_ARGS ?= -v 0483 -p df11
+ DFU_ARGS ?= -d 0483:DF11 -a 0 -s 0x08000000:leave
+ DFU_SUFFIX_ARGS ?= -v 0483 -p DF11
endif
ifneq (,$(filter $(MCU),atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb1286))
From bbfb709a6a5d6429166f7b9b60610613fb647ca5 Mon Sep 17 00:00:00 2001
From: Ryan
Date: Sat, 19 Sep 2020 13:48:02 +1000
Subject: [PATCH 040/178] Add STM32F401/F411 to ARM_PROCESSORS (#10362)
---
lib/python/qmk/constants.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/python/qmk/constants.py b/lib/python/qmk/constants.py
index 36a20adf4be1..0a4708e4ce76 100644
--- a/lib/python/qmk/constants.py
+++ b/lib/python/qmk/constants.py
@@ -9,7 +9,7 @@
MAX_KEYBOARD_SUBFOLDERS = 5
# Supported processor types
-ARM_PROCESSORS = 'cortex-m0', 'cortex-m0plus', 'cortex-m3', 'cortex-m4', 'MKL26Z64', 'MK20DX128', 'MK20DX256', 'STM32F042', 'STM32F072', 'STM32F103', 'STM32F303'
+ARM_PROCESSORS = 'cortex-m0', 'cortex-m0plus', 'cortex-m3', 'cortex-m4', 'MKL26Z64', 'MK20DX128', 'MK20DX256', 'STM32F042', 'STM32F072', 'STM32F103', 'STM32F303', 'STM32F401', 'STM32F411'
AVR_PROCESSORS = 'at90usb1286', 'at90usb646', 'atmega16u2', 'atmega328p', 'atmega32a', 'atmega32u2', 'atmega32u4', None
ALL_PROCESSORS = ARM_PROCESSORS + AVR_PROCESSORS
VUSB_PROCESSORS = 'atmega328p', 'atmega32a', 'atmega328', 'attiny85'
From a0efe932394492ddd79212c2e652306aae9cf72d Mon Sep 17 00:00:00 2001
From: Baris Tosun
Date: Sat, 19 Sep 2020 05:54:08 +0200
Subject: [PATCH 041/178] Refactored the Katana60 folders under a rominronin
parent folder (#10255)
* refactored the Katana60 folders under a rominronin parent folder
* Update keyboards/rominronin/katana60/info.json
removed 'keyboard_folder' line
* Update keyboards/rominronin/katana60/info.json
removed 'key_count' line
* Update keyboards/rominronin/katana60_rev2/config.h
removed '#define DESCRIPTION' line
* Update keyboards/rominronin/katana60_rev2/rules.mk
Removed more attributes
* Update keyboards/rominronin/katana60_rev2/rules.mk
removed 'FAUXCLICKY_ENABLE' line
* Update keyboards/rominronin/katana60_rev2/rules.mk
Updated some comments
* Update keyboards/rominronin/katana60_rev2/config.h
Removed redundant comments
* Update keyboards/rominronin/katana60_rev2/config.h
removed redundant comments
* Update keyboards/rominronin/katana60_rev2/config.h
removed redundant comments
* Update keyboards/rominronin/katana60/keymaps/default/keymap.c
Fixed a non-standard keycode
* Update keyboards/rominronin/katana60/keymaps/rominronin/keymap.c
Removed deprecated code
* Update keyboards/rominronin/katana60/rules.mk
removed redundant comments
* Update keyboards/rominronin/katana60_rev2/katana60_rev2.c
removed redundant code
* Update keyboards/rominronin/katana60_rev2/keymaps/rominronin_7u/keymap.c
removed redundant code
* Update keyboards/rominronin/katana60_rev2/rules.mk
removed redundant comments
* Update keyboards/rominronin/katana60_rev2/rules.mk
updated some comments
* Update keyboards/rominronin/katana60_rev2/rules.mk
removed redundant code
* Update keyboards/rominronin/katana60_rev2/keymaps/rominronin_7u/keymap.c
optimised the layers definition
* Update keyboards/rominronin/katana60/rules.mk
removed redundant code
* added the info.json file for every Tsuka60 layout
* updated the info.json file details
* removed broken keymap file, updated other files
* updated the Katana60 rev2 info.json file
* split katana60 into revisions
* assign unique Vendor/Product ID pairings
* modernize codebase
#pragma once on included files; rules.mk templating
* fix rev2 layout macros
* updated the keymaps for correct automated building.
* updated the default layout file
* updated default rominronin 7u layout file
* Update keyboards/rominronin/katana60/rev1/readme.md
resized an image
* Update keyboards/rominronin/katana60/rev2/readme.md
resized an image
* remove dead space from rev2 info.json file
---
keyboards/katana60/info.json | 13 -
keyboards/katana60/readme.md | 17 -
.../katana60/rev1}/config.h | 89 +--
keyboards/rominronin/katana60/rev1/info.json | 83 +++
.../katana60/rev1}/keymaps/colemak/config.h | 0
.../katana60/rev1}/keymaps/colemak/keymap.c | 2 +-
.../katana60/rev1}/keymaps/colemak/readme.md | 0
.../katana60/rev1}/keymaps/default/config.h | 0
.../katana60/rev1}/keymaps/default/keymap.c | 0
.../katana60/rev1}/keymaps/default/readme.md | 0
.../rev1}/keymaps/josefadamcik/config.h | 0
.../rev1}/keymaps/josefadamcik/keymap.c | 0
.../rev1}/keymaps/josefadamcik/readme.md | 0
.../katana60/rev1}/keymaps/msiu/config.h | 0
.../katana60/rev1}/keymaps/msiu/keymap.c | 0
.../katana60/rev1}/keymaps/msiu/readme.md | 0
.../rev1}/keymaps/rominronin/config.h | 0
.../rev1}/keymaps/rominronin/keymap.c | 3 +-
.../rev1}/keymaps/rominronin/readme.md | 0
keyboards/rominronin/katana60/rev1/readme.md | 17 +
.../katana60/rev1/rev1.c} | 29 +-
.../katana60/rev1/rev1.h} | 5 +-
.../katana60/rev1}/rules.mk | 19 +-
keyboards/rominronin/katana60/rev2/config.h | 105 ++++
keyboards/rominronin/katana60/rev2/info.json | 579 ++++++++++++++++++
.../katana60/rev2/keymaps/default/config.h | 19 +
.../katana60/rev2/keymaps/default/keymap.c | 71 +++
.../katana60/rev2/keymaps/default/readme.md | 1 +
.../rev2/keymaps/rominronin_7u/config.h | 19 +
.../rev2/keymaps/rominronin_7u/keymap.c | 79 +++
.../rev2/keymaps/rominronin_7u/readme.md | 1 +
keyboards/rominronin/katana60/rev2/readme.md | 17 +
keyboards/rominronin/katana60/rev2/rev2.c | 16 +
keyboards/rominronin/katana60/rev2/rev2.h | 238 +++++++
keyboards/rominronin/katana60/rev2/rules.mk | 22 +
35 files changed, 1281 insertions(+), 163 deletions(-)
delete mode 100644 keyboards/katana60/info.json
delete mode 100644 keyboards/katana60/readme.md
rename keyboards/{katana60 => rominronin/katana60/rev1}/config.h (54%)
create mode 100644 keyboards/rominronin/katana60/rev1/info.json
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/colemak/config.h (100%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/colemak/keymap.c (99%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/colemak/readme.md (100%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/default/config.h (100%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/default/keymap.c (100%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/default/readme.md (100%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/josefadamcik/config.h (100%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/josefadamcik/keymap.c (100%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/josefadamcik/readme.md (100%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/msiu/config.h (100%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/msiu/keymap.c (100%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/msiu/readme.md (100%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/rominronin/config.h (100%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/rominronin/keymap.c (99%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/keymaps/rominronin/readme.md (100%)
create mode 100644 keyboards/rominronin/katana60/rev1/readme.md
rename keyboards/{katana60/katana60.c => rominronin/katana60/rev1/rev1.c} (51%)
rename keyboards/{katana60/katana60.h => rominronin/katana60/rev1/rev1.h} (97%)
rename keyboards/{katana60 => rominronin/katana60/rev1}/rules.mk (56%)
create mode 100644 keyboards/rominronin/katana60/rev2/config.h
create mode 100644 keyboards/rominronin/katana60/rev2/info.json
create mode 100644 keyboards/rominronin/katana60/rev2/keymaps/default/config.h
create mode 100644 keyboards/rominronin/katana60/rev2/keymaps/default/keymap.c
create mode 100644 keyboards/rominronin/katana60/rev2/keymaps/default/readme.md
create mode 100644 keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/config.h
create mode 100644 keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c
create mode 100644 keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md
create mode 100644 keyboards/rominronin/katana60/rev2/readme.md
create mode 100644 keyboards/rominronin/katana60/rev2/rev2.c
create mode 100644 keyboards/rominronin/katana60/rev2/rev2.h
create mode 100644 keyboards/rominronin/katana60/rev2/rules.mk
diff --git a/keyboards/katana60/info.json b/keyboards/katana60/info.json
deleted file mode 100644
index bbb868103495..000000000000
--- a/keyboards/katana60/info.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "keyboard_name": "Katana60",
- "url": "",
- "maintainer": "qmk",
- "width": 15,
- "height": 5,
- "layouts": {
- "LAYOUT": {
- "key_count": 70,
- "layout": [{"label":"k40", "x":0, "y":0}, {"label":"k41", "x":1, "y":0}, {"label":"k42", "x":2, "y":0}, {"label":"k43", "x":3, "y":0}, {"label":"k44", "x":4, "y":0}, {"label":"k45", "x":5, "y":0}, {"label":"k46", "x":6, "y":0}, {"label":"k47", "x":7, "y":0}, {"label":"k48", "x":8, "y":0}, {"label":"k49", "x":9, "y":0}, {"label":"k4a", "x":10, "y":0}, {"label":"k4b", "x":11, "y":0}, {"label":"k4c", "x":12, "y":0}, {"label":"k4d", "x":13, "y":0}, {"label":"k4e", "x":14, "y":0}, {"label":"k30", "x":0, "y":1, "w":1.5}, {"label":"k31", "x":1.5, "y":1}, {"label":"k32", "x":2.5, "y":1}, {"label":"k33", "x":3.5, "y":1}, {"label":"k34", "x":4.5, "y":1}, {"label":"k35", "x":5.5, "y":1}, {"label":"k36", "x":6.5, "y":1}, {"label":"k37", "x":7.5, "y":1}, {"label":"k38", "x":8.5, "y":1}, {"label":"k39", "x":9.5, "y":1}, {"label":"k3a", "x":10.5, "y":1}, {"label":"k3b", "x":11.5, "y":1}, {"label":"k3c", "x":12.5, "y":1}, {"label":"k3d", "x":13.5, "y":1, "w":1.5}, {"label":"k20", "x":0, "y":2, "w":1.25}, {"label":"k21", "x":1.25, "y":2}, {"label":"k22", "x":2.25, "y":2}, {"label":"k23", "x":3.25, "y":2}, {"label":"k24", "x":4.25, "y":2}, {"label":"k25", "x":5.25, "y":2}, {"label":"k26", "x":6.25, "y":2}, {"label":"k27", "x":7.75, "y":2}, {"label":"k28", "x":8.75, "y":2}, {"label":"k29", "x":9.75, "y":2}, {"label":"k2a", "x":10.75, "y":2}, {"label":"k2b", "x":11.75, "y":2}, {"label":"k2c", "x":12.75, "y":2}, {"label":"k2d", "x":13.75, "y":2, "w":1.25}, {"label":"k10", "x":0, "y":3}, {"label":"k11", "x":1, "y":3}, {"label":"k12", "x":2, "y":3}, {"label":"k13", "x":3, "y":3}, {"label":"k14", "x":4, "y":3}, {"label":"k15", "x":5, "y":3}, {"label":"k16", "x":6, "y":3}, {"label":"k17", "x":7, "y":3}, {"label":"k18", "x":8, "y":3}, {"label":"k19", "x":9, "y":3}, {"label":"k1a", "x":10, "y":3}, {"label":"k1b", "x":11, "y":3}, {"label":"k1c", "x":12, "y":3}, {"label":"k1d", "x":13, "y":3}, {"label":"k1e", "x":14, "y":3}, {"label":"k00", "x":0, "y":4}, {"label":"k01", "x":1, "y":4, "w":1.25}, {"label":"k02", "x":2.25, "y":4, "w":1.25}, {"label":"k03", "x":3.5, "y":4, "w":1.25}, {"label":"k04", "x":4.75, "y":4, "w":2.25}, {"label":"k05", "x":7, "y":4}, {"label":"k06", "x":8, "y":4, "w":2}, {"label":"k09", "x":10, "y":4}, {"label":"k0a", "x":11, "y":4}, {"label":"k0b", "x":12, "y":4}, {"label":"k0c", "x":13, "y":4}, {"label":"k0d", "x":14, "y":4}]
- }
- }
-}
diff --git a/keyboards/katana60/readme.md b/keyboards/katana60/readme.md
deleted file mode 100644
index 5e1c7d39060c..000000000000
--- a/keyboards/katana60/readme.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Katana60
-
-![Katana60](https://i.imgur.com/xVkODOu.jpg)
-
-A 60% keyboard with a symmetrical staggered layout, sold by CandyKeys.com.
-
-Keyboard Maintainer: [Baris Tosun](https://github.com/rominronin)
-Hardware Supported: Katana60 PCB v1, Teensy 2.0
-Hardware Availability: [CandyKeys.com](https://CandyKeys.com)
-
-Make example for this keyboard (after setting up your build environment):
-
- make katana60:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
-
-There is also ongoing discussion for the extend layer, at the [Colemak Forum](https://forum.colemak.com/topic/2327-developing-an-extend-layer-for-the-katana60/)
\ No newline at end of file
diff --git a/keyboards/katana60/config.h b/keyboards/rominronin/katana60/rev1/config.h
similarity index 54%
rename from keyboards/katana60/config.h
rename to keyboards/rominronin/katana60/rev1/config.h
index 3385ddb9cb7b..fe10d1a533d7 100644
--- a/keyboards/katana60/config.h
+++ b/keyboards/rominronin/katana60/rev1/config.h
@@ -15,18 +15,16 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
+#define VENDOR_ID 0x7272 // "rr" - rominronin
+#define PRODUCT_ID 0x0C2C
#define DEVICE_VER 0x0001
#define MANUFACTURER RominRonin CandyKeys
-#define PRODUCT Katana60
-#define DESCRIPTION QMK keyboard firmware for Katana60
+#define PRODUCT Katana60 rev1
/* key matrix size */
#define MATRIX_ROWS 5
@@ -49,18 +47,12 @@ along with this program. If not, see .
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION ROW2COL
-// #define BACKLIGHT_PIN B7
-// #define BACKLIGHT_BREATHING
-// #define BACKLIGHT_LEVELS 3
-
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
-/* number of backlight levels */
-
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -92,56 +84,8 @@ along with this program. If not, see .
*/
//#define FORCE_NKRO
-/*
- * Magic Key Options
- *
- * Magic keys are hotkey commands that allow control over firmware functions of
- * the keyboard. They are best used in combination with the HID Listen program,
- * found here: https://www.pjrc.com/teensy/hid_listen.html
- *
- * The options below allow the magic key functionality to be changed. This is
- * useful if your keyboard/keypad is missing keys and you want magic key support.
- *
- */
-
#define TAPPING_TERM 200
-/* control how magic key switches layers */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
-
-/* override magic key keymap */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
-//#define MAGIC_KEY_HELP1 H
-//#define MAGIC_KEY_HELP2 SLASH
-//#define MAGIC_KEY_DEBUG D
-//#define MAGIC_KEY_DEBUG_MATRIX X
-//#define MAGIC_KEY_DEBUG_KBD K
-//#define MAGIC_KEY_DEBUG_MOUSE M
-//#define MAGIC_KEY_VERSION V
-//#define MAGIC_KEY_STATUS S
-//#define MAGIC_KEY_CONSOLE C
-//#define MAGIC_KEY_LAYER0_ALT1 ESC
-//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
-//#define MAGIC_KEY_LAYER0 0
-//#define MAGIC_KEY_LAYER1 1
-//#define MAGIC_KEY_LAYER2 2
-//#define MAGIC_KEY_LAYER3 3
-//#define MAGIC_KEY_LAYER4 4
-//#define MAGIC_KEY_LAYER5 5
-//#define MAGIC_KEY_LAYER6 6
-//#define MAGIC_KEY_LAYER7 7
-//#define MAGIC_KEY_LAYER8 8
-//#define MAGIC_KEY_LAYER9 9
-//#define MAGIC_KEY_BOOTLOADER PAUSE
-//#define MAGIC_KEY_LOCK CAPS
-//#define MAGIC_KEY_EEPROM E
-//#define MAGIC_KEY_NKRO N
-//#define MAGIC_KEY_SLEEP_LED Z
-
/*
* Feature disable options
* These options are also useful to firmware size reduction.
@@ -159,28 +103,3 @@ along with this program. If not, see .
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-/*
- * MIDI options
- */
-
-/* Prevent use of disabled MIDI features in the keymap */
-//#define MIDI_ENABLE_STRICT 1
-
-/* enable basic MIDI features:
- - MIDI notes can be sent when in Music mode is on
-*/
-//#define MIDI_BASIC
-
-/* enable advanced MIDI features:
- - MIDI notes can be added to the keymap
- - Octave shift and transpose
- - Virtual sustain, portamento, and modulation wheel
- - etc.
-*/
-//#define MIDI_ADVANCED
-
-/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
-//#define MIDI_TONE_KEYCODE_OCTAVES 1
-
-#endif
diff --git a/keyboards/rominronin/katana60/rev1/info.json b/keyboards/rominronin/katana60/rev1/info.json
new file mode 100644
index 000000000000..fa0aa93d67ba
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev1/info.json
@@ -0,0 +1,83 @@
+{
+ "keyboard_name": "Katana60 rev1",
+ "url": "",
+ "maintainer": "rominronin",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"k40", "x":0, "y":0},
+ {"label":"k41", "x":1, "y":0},
+ {"label":"k42", "x":2, "y":0},
+ {"label":"k43", "x":3, "y":0},
+ {"label":"k44", "x":4, "y":0},
+ {"label":"k45", "x":5, "y":0},
+ {"label":"k46", "x":6, "y":0},
+ {"label":"k47", "x":7, "y":0},
+ {"label":"k48", "x":8, "y":0},
+ {"label":"k49", "x":9, "y":0},
+ {"label":"k4a", "x":10, "y":0},
+ {"label":"k4b", "x":11, "y":0},
+ {"label":"k4c", "x":12, "y":0},
+ {"label":"k4d", "x":13, "y":0},
+ {"label":"k4e", "x":14, "y":0},
+ {"label":"k30", "x":0, "y":1, "w":1.5},
+ {"label":"k31", "x":1.5, "y":1},
+ {"label":"k32", "x":2.5, "y":1},
+ {"label":"k33", "x":3.5, "y":1},
+ {"label":"k34", "x":4.5, "y":1},
+ {"label":"k35", "x":5.5, "y":1},
+ {"label":"k36", "x":6.5, "y":1},
+ {"label":"k37", "x":7.5, "y":1},
+ {"label":"k38", "x":8.5, "y":1},
+ {"label":"k39", "x":9.5, "y":1},
+ {"label":"k3a", "x":10.5, "y":1},
+ {"label":"k3b", "x":11.5, "y":1},
+ {"label":"k3c", "x":12.5, "y":1},
+ {"label":"k3d", "x":13.5, "y":1, "w":1.5},
+ {"label":"k20", "x":0, "y":2, "w":1.25},
+ {"label":"k21", "x":1.25, "y":2},
+ {"label":"k22", "x":2.25, "y":2},
+ {"label":"k23", "x":3.25, "y":2},
+ {"label":"k24", "x":4.25, "y":2},
+ {"label":"k25", "x":5.25, "y":2},
+ {"label":"k26", "x":6.25, "y":2},
+ {"label":"k27", "x":7.75, "y":2},
+ {"label":"k28", "x":8.75, "y":2},
+ {"label":"k29", "x":9.75, "y":2},
+ {"label":"k2a", "x":10.75, "y":2},
+ {"label":"k2b", "x":11.75, "y":2},
+ {"label":"k2c", "x":12.75, "y":2},
+ {"label":"k2d", "x":13.75, "y":2, "w":1.25},
+ {"label":"k10", "x":0, "y":3},
+ {"label":"k11", "x":1, "y":3},
+ {"label":"k12", "x":2, "y":3},
+ {"label":"k13", "x":3, "y":3},
+ {"label":"k14", "x":4, "y":3},
+ {"label":"k15", "x":5, "y":3},
+ {"label":"k16", "x":6, "y":3},
+ {"label":"k17", "x":7, "y":3},
+ {"label":"k18", "x":8, "y":3},
+ {"label":"k19", "x":9, "y":3},
+ {"label":"k1a", "x":10, "y":3},
+ {"label":"k1b", "x":11, "y":3},
+ {"label":"k1c", "x":12, "y":3},
+ {"label":"k1d", "x":13, "y":3},
+ {"label":"k1e", "x":14, "y":3},
+ {"label":"k00", "x":0, "y":4},
+ {"label":"k01", "x":1, "y":4, "w":1.25},
+ {"label":"k02", "x":2.25, "y":4, "w":1.25},
+ {"label":"k03", "x":3.5, "y":4, "w":1.25},
+ {"label":"k04", "x":4.75, "y":4, "w":2.25},
+ {"label":"k05", "x":7, "y":4},
+ {"label":"k06", "x":8, "y":4, "w":2},
+ {"label":"k09", "x":10, "y":4},
+ {"label":"k0a", "x":11, "y":4},
+ {"label":"k0b", "x":12, "y":4},
+ {"label":"k0c", "x":13, "y":4},
+ {"label":"k0d", "x":14, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/katana60/keymaps/colemak/config.h b/keyboards/rominronin/katana60/rev1/keymaps/colemak/config.h
similarity index 100%
rename from keyboards/katana60/keymaps/colemak/config.h
rename to keyboards/rominronin/katana60/rev1/keymaps/colemak/config.h
diff --git a/keyboards/katana60/keymaps/colemak/keymap.c b/keyboards/rominronin/katana60/rev1/keymaps/colemak/keymap.c
similarity index 99%
rename from keyboards/katana60/keymaps/colemak/keymap.c
rename to keyboards/rominronin/katana60/rev1/keymaps/colemak/keymap.c
index b0ed04185435..91128bd5c43f 100644
--- a/keyboards/katana60/keymaps/colemak/keymap.c
+++ b/keyboards/rominronin/katana60/rev1/keymaps/colemak/keymap.c
@@ -34,7 +34,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT( /* Base */
- KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(1), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_PLUS,
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(1), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
MO(3), KC_A, KC_R, KC_S, KC_T, KC_D, KC_HOME, KC_PGUP, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_DEL, KC_PGDN, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
diff --git a/keyboards/katana60/keymaps/colemak/readme.md b/keyboards/rominronin/katana60/rev1/keymaps/colemak/readme.md
similarity index 100%
rename from keyboards/katana60/keymaps/colemak/readme.md
rename to keyboards/rominronin/katana60/rev1/keymaps/colemak/readme.md
diff --git a/keyboards/katana60/keymaps/default/config.h b/keyboards/rominronin/katana60/rev1/keymaps/default/config.h
similarity index 100%
rename from keyboards/katana60/keymaps/default/config.h
rename to keyboards/rominronin/katana60/rev1/keymaps/default/config.h
diff --git a/keyboards/katana60/keymaps/default/keymap.c b/keyboards/rominronin/katana60/rev1/keymaps/default/keymap.c
similarity index 100%
rename from keyboards/katana60/keymaps/default/keymap.c
rename to keyboards/rominronin/katana60/rev1/keymaps/default/keymap.c
diff --git a/keyboards/katana60/keymaps/default/readme.md b/keyboards/rominronin/katana60/rev1/keymaps/default/readme.md
similarity index 100%
rename from keyboards/katana60/keymaps/default/readme.md
rename to keyboards/rominronin/katana60/rev1/keymaps/default/readme.md
diff --git a/keyboards/katana60/keymaps/josefadamcik/config.h b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/config.h
similarity index 100%
rename from keyboards/katana60/keymaps/josefadamcik/config.h
rename to keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/config.h
diff --git a/keyboards/katana60/keymaps/josefadamcik/keymap.c b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/keymap.c
similarity index 100%
rename from keyboards/katana60/keymaps/josefadamcik/keymap.c
rename to keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/keymap.c
diff --git a/keyboards/katana60/keymaps/josefadamcik/readme.md b/keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/readme.md
similarity index 100%
rename from keyboards/katana60/keymaps/josefadamcik/readme.md
rename to keyboards/rominronin/katana60/rev1/keymaps/josefadamcik/readme.md
diff --git a/keyboards/katana60/keymaps/msiu/config.h b/keyboards/rominronin/katana60/rev1/keymaps/msiu/config.h
similarity index 100%
rename from keyboards/katana60/keymaps/msiu/config.h
rename to keyboards/rominronin/katana60/rev1/keymaps/msiu/config.h
diff --git a/keyboards/katana60/keymaps/msiu/keymap.c b/keyboards/rominronin/katana60/rev1/keymaps/msiu/keymap.c
similarity index 100%
rename from keyboards/katana60/keymaps/msiu/keymap.c
rename to keyboards/rominronin/katana60/rev1/keymaps/msiu/keymap.c
diff --git a/keyboards/katana60/keymaps/msiu/readme.md b/keyboards/rominronin/katana60/rev1/keymaps/msiu/readme.md
similarity index 100%
rename from keyboards/katana60/keymaps/msiu/readme.md
rename to keyboards/rominronin/katana60/rev1/keymaps/msiu/readme.md
diff --git a/keyboards/katana60/keymaps/rominronin/config.h b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/config.h
similarity index 100%
rename from keyboards/katana60/keymaps/rominronin/config.h
rename to keyboards/rominronin/katana60/rev1/keymaps/rominronin/config.h
diff --git a/keyboards/katana60/keymaps/rominronin/keymap.c b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/keymap.c
similarity index 99%
rename from keyboards/katana60/keymaps/rominronin/keymap.c
rename to keyboards/rominronin/katana60/rev1/keymaps/rominronin/keymap.c
index 754b552b24e0..5666dba9d569 100644
--- a/keyboards/katana60/keymaps/rominronin/keymap.c
+++ b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/keymap.c
@@ -34,7 +34,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT( /* Base */
- KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(1), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_PLUS,
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(1), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_BSPC,
MO(3), KC_A, KC_R, KC_S, KC_T, KC_G, KC_HOME, KC_PGUP, KC_M, KC_N, KC_E, KC_I, KC_O, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_END, KC_DEL, KC_PGDN, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
@@ -64,6 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
+
void matrix_init_user(void) {
}
diff --git a/keyboards/katana60/keymaps/rominronin/readme.md b/keyboards/rominronin/katana60/rev1/keymaps/rominronin/readme.md
similarity index 100%
rename from keyboards/katana60/keymaps/rominronin/readme.md
rename to keyboards/rominronin/katana60/rev1/keymaps/rominronin/readme.md
diff --git a/keyboards/rominronin/katana60/rev1/readme.md b/keyboards/rominronin/katana60/rev1/readme.md
new file mode 100644
index 000000000000..d41548b18d71
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev1/readme.md
@@ -0,0 +1,17 @@
+# Katana60 rev1
+
+![Katana60 rev1](https://i.imgur.com/xVkODOul.jpg)
+
+A 60% keyboard with a symmetrical staggered layout, sold by CandyKeys.com.
+
+Keyboard Maintainer: [Baris Tosun](https://github.com/rominronin)
+Hardware Supported: Katana60 PCB rev1
+Hardware Availability: the rev1 is no longer available, the rev2 can be found at [candykeys.com](https://candykeys.com/product/katana60-pcb-V2)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rominronin/katana60/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+There is also ongoing discussion for the extend layer, at the [Colemak Forum](https://forum.colemak.com/topic/2327-developing-an-extend-layer-for-the-katana60/)
diff --git a/keyboards/katana60/katana60.c b/keyboards/rominronin/katana60/rev1/rev1.c
similarity index 51%
rename from keyboards/katana60/katana60.c
rename to keyboards/rominronin/katana60/rev1/rev1.c
index e8d4fef1936d..e57ae2bbcbab 100644
--- a/keyboards/katana60/katana60.c
+++ b/keyboards/rominronin/katana60/rev1/rev1.c
@@ -13,31 +13,4 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-#include "katana60.h"
-
-void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
-
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
-
- matrix_scan_user();
-}
-
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
- // put your per-action keyboard code here
- // runs for every action, just before processing by the firmware
-
- return process_record_user(keycode, record);
-}
-
-void led_set_kb(uint8_t usb_led) {
- // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
-
- led_set_user(usb_led);
-}
+#include "rev1.h"
diff --git a/keyboards/katana60/katana60.h b/keyboards/rominronin/katana60/rev1/rev1.h
similarity index 97%
rename from keyboards/katana60/katana60.h
rename to keyboards/rominronin/katana60/rev1/rev1.h
index 904ba56210a3..52926cc35e00 100644
--- a/keyboards/katana60/katana60.h
+++ b/keyboards/rominronin/katana60/rev1/rev1.h
@@ -13,8 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-#ifndef KATANA60_H
-#define KATANA60_H
+#pragma once
#include "quantum.h"
@@ -36,5 +35,3 @@
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, KC_NO }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d, k4e }, \
}
-
-#endif
diff --git a/keyboards/katana60/rules.mk b/keyboards/rominronin/katana60/rev1/rules.mk
similarity index 56%
rename from keyboards/katana60/rules.mk
rename to keyboards/rominronin/katana60/rev1/rules.mk
index e41c168c4fc3..7b69908b1ba9 100644
--- a/keyboards/katana60/rules.mk
+++ b/keyboards/rominronin/katana60/rev1/rules.mk
@@ -2,19 +2,12 @@
MCU = atmega32u4
# Bootloader selection
-# Teensy halfkay
-# Pro Micro caterina
-# Atmel DFU atmel-dfu
-# LUFA DFU lufa-dfu
-# QMK DFU qmk-dfu
-# ATmega32A bootloadHID
-# ATmega328P USBasp
BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
@@ -23,9 +16,7 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
-MIDI_ENABLE = no # MIDI support
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = no # Audio output on port C6
-FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/rominronin/katana60/rev2/config.h b/keyboards/rominronin/katana60/rev2/config.h
new file mode 100644
index 000000000000..7eff68a7f492
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/config.h
@@ -0,0 +1,105 @@
+/*
+Copyright 2019 rominronin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x7272 // "rr" - rominronin
+#define PRODUCT_ID 0xF03B
+#define DEVICE_VER 0x0001
+#define MANUFACTURER RominRonin CandyKeys
+#define PRODUCT Katana60 rev2
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+#define MATRIX_ROW_PINS { B0, E6, D5, B4, B5 }
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7, C6, B6, D6, D4, D3, D2, D1, D0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+#define TAPPING_TERM 200
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/rominronin/katana60/rev2/info.json b/keyboards/rominronin/katana60/rev2/info.json
new file mode 100644
index 000000000000..bc31ae64910b
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/info.json
@@ -0,0 +1,579 @@
+{
+ "keyboard_name": "Katana60 rev2",
+ "url": "https://candykeys.com/product/katana60-pcb-V2",
+ "maintainer": "rominronin",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_7u_a": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k41","x":0,"y":4,"w":1.5},
+ {"label":"k42","x":1.5,"y":4},
+ {"label":"k43","x":2.5,"y":4,"w":1.5},
+ {"label":"k47","x":4,"y":4,"w":7},
+ {"label":"k4b","x":11,"y":4},
+ {"label":"k4c","x":12,"y":4},
+ {"label":"k4d","x":13,"y":4},
+ {"label":"k4e","x":14,"y":4}
+ ]
+ },
+ "LAYOUT_7u_b": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k41","x":0,"y":4,"w":1.5},
+ {"label":"k42","x":1.5,"y":4},
+ {"label":"k43","x":2.5,"y":4,"w":1.5},
+ {"label":"k47","x":4,"y":4,"w":7},
+ {"label":"k17","x":11,"y":4,"w":1.5},
+ {"label":"k27","x":12.5,"y":4},
+ {"label":"k48","x":13.5,"y":4,"w":1.5}
+ ]
+ },
+ "LAYOUT_1_a": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k40","x":0,"y":4},
+ {"label":"k41","x":1,"y":4,"w":1.25},
+ {"label":"k42","x":2.25,"y":4,"w":1.25},
+ {"label":"k43","x":3.5,"y":4,"w":1.25},
+ {"label":"k44","x":4.75,"y":4,"w":2.25},
+ {"label":"k47","x":7,"y":4},
+ {"label":"k49","x":8,"y":4,"w":2},
+ {"label":"k4a","x":10,"y":4},
+ {"label":"k4b","x":11,"y":4},
+ {"label":"k4c","x":12,"y":4},
+ {"label":"k4d","x":13,"y":4},
+ {"label":"k4e","x":14,"y":4}
+ ]
+ },
+ "LAYOUT_1_b": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k40","x":0,"y":4},
+ {"label":"k41","x":1,"y":4,"w":1.25},
+ {"label":"k42","x":2.25,"y":4,"w":1.25},
+ {"label":"k43","x":3.5,"y":4,"w":1.25},
+ {"label":"k44","x":4.75,"y":4,"w":2.25},
+ {"label":"k47","x":7,"y":4},
+ {"label":"k49","x":8,"y":4,"w":2.75},
+ {"label":"k17","x":10.75,"y":4,"w":2},
+ {"label":"k48","x":12.75,"y":4,"w":2.25}
+ ]
+ },
+ "LAYOUT_1_c": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k40","x":0,"y":4},
+ {"label":"k41","x":1,"y":4,"w":1.25},
+ {"label":"k42","x":2.25,"y":4,"w":1.25},
+ {"label":"k43","x":3.5,"y":4,"w":1.25},
+ {"label":"k44","x":4.75,"y":4,"w":2.25},
+ {"label":"k47","x":7,"y":4},
+ {"label":"k49","x":8,"y":4,"w":2},
+ {"label":"k45","x":10,"y":4,"w":1.5},
+ {"label":"k27","x":11.5,"y":4,"w":1.25},
+ {"label":"k48","x":12.75,"y":4,"w":2.25}
+ ]
+ },
+ "LAYOUT_2_a": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k41","x":0,"y":4,"w":1.5},
+ {"label":"k42","x":1.5,"y":4,"w":1.25},
+ {"label":"k43","x":2.75,"y":4,"w":1.5},
+ {"label":"k44","x":4.25,"y":4,"w":2.75},
+ {"label":"k47","x":7,"y":4},
+ {"label":"k49","x":8,"y":4,"w":2},
+ {"label":"k4a","x":10,"y":4},
+ {"label":"k4b","x":11,"y":4},
+ {"label":"k4c","x":12,"y":4},
+ {"label":"k4d","x":13,"y":4},
+ {"label":"k4e","x":14,"y":4}
+ ]
+ },
+ "LAYOUT_2_b": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k41","x":0,"y":4,"w":1.5},
+ {"label":"k42","x":1.5,"y":4,"w":1.25},
+ {"label":"k43","x":2.75,"y":4,"w":1.5},
+ {"label":"k44","x":4.25,"y":4,"w":2.75},
+ {"label":"k47","x":7,"y":4},
+ {"label":"k49","x":8,"y":4,"w":2.75},
+ {"label":"k17","x":10.75,"y":4,"w":2},
+ {"label":"k48","x":12.75,"y":4,"w":2.25}
+ ]
+ },
+ "LAYOUT_2_c": {
+ "layout": [
+ {"label":"k00","x":0,"y":0},
+ {"label":"k01","x":1,"y":0},
+ {"label":"k02","x":2,"y":0},
+ {"label":"k03","x":3,"y":0},
+ {"label":"k04","x":4,"y":0},
+ {"label":"k05","x":5,"y":0},
+ {"label":"k06","x":6,"y":0},
+ {"label":"k07","x":7,"y":0},
+ {"label":"k08","x":8,"y":0},
+ {"label":"k09","x":9,"y":0},
+ {"label":"k0a","x":10,"y":0},
+ {"label":"k0b","x":11,"y":0},
+ {"label":"k0c","x":12,"y":0},
+ {"label":"k0d","x":13,"y":0},
+ {"label":"k0e","x":14,"y":0},
+ {"label":"k10","x":0,"y":1,"w":1.5},
+ {"label":"k11","x":1.5,"y":1},
+ {"label":"k12","x":2.5,"y":1},
+ {"label":"k13","x":3.5,"y":1},
+ {"label":"k14","x":4.5,"y":1},
+ {"label":"k15","x":5.5,"y":1},
+ {"label":"k16","x":6.5,"y":1},
+ {"label":"k18","x":7.5,"y":1},
+ {"label":"k19","x":8.5,"y":1},
+ {"label":"k1a","x":9.5,"y":1},
+ {"label":"k1b","x":10.5,"y":1},
+ {"label":"k1c","x":11.5,"y":1},
+ {"label":"k1d","x":12.5,"y":1},
+ {"label":"k1e","x":13.5,"y":1,"w":1.5},
+ {"label":"k20","x":0,"y":2,"w":1.25},
+ {"label":"k21","x":1.25,"y":2},
+ {"label":"k22","x":2.25,"y":2},
+ {"label":"k23","x":3.25,"y":2},
+ {"label":"k24","x":4.25,"y":2},
+ {"label":"k25","x":5.25,"y":2},
+ {"label":"k26","x":6.25,"y":2},
+ {"label":"k28","x":7.75,"y":2},
+ {"label":"k29","x":8.75,"y":2},
+ {"label":"k2a","x":9.75,"y":2},
+ {"label":"k2b","x":10.75,"y":2},
+ {"label":"k2c","x":11.75,"y":2},
+ {"label":"k2d","x":12.75,"y":2},
+ {"label":"k2e","x":13.75,"y":2,"w":1.25},
+ {"label":"k30","x":0,"y":3},
+ {"label":"k31","x":1,"y":3},
+ {"label":"k32","x":2,"y":3},
+ {"label":"k33","x":3,"y":3},
+ {"label":"k34","x":4,"y":3},
+ {"label":"k35","x":5,"y":3},
+ {"label":"k36","x":6,"y":3},
+ {"label":"k37","x":7,"y":3},
+ {"label":"k38","x":8,"y":3},
+ {"label":"k39","x":9,"y":3},
+ {"label":"k3a","x":10,"y":3},
+ {"label":"k3b","x":11,"y":3},
+ {"label":"k3c","x":12,"y":3},
+ {"label":"k3d","x":13,"y":3},
+ {"label":"k3e","x":14,"y":3},
+ {"label":"k41","x":0,"y":4,"w":1.5},
+ {"label":"k42","x":1.5,"y":4,"w":1.25},
+ {"label":"k43","x":2.75,"y":4,"w":1.5},
+ {"label":"k44","x":4.25,"y":4,"w":2.75},
+ {"label":"k47","x":7,"y":4},
+ {"label":"k49","x":8,"y":4,"w":2},
+ {"label":"k45","x":10,"y":4,"w":1.5},
+ {"label":"k27","x":11.5,"y":4,"w":1.25},
+ {"label":"k48","x":12.75,"y":4,"w":2.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/rominronin/katana60/rev2/keymaps/default/config.h b/keyboards/rominronin/katana60/rev2/keymaps/default/config.h
new file mode 100644
index 000000000000..068967640261
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 rominronin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/rominronin/katana60/rev2/keymaps/default/keymap.c b/keyboards/rominronin/katana60/rev2/keymaps/default/keymap.c
new file mode 100644
index 000000000000..d9c9b6d4ed42
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/keymaps/default/keymap.c
@@ -0,0 +1,71 @@
+/* Copyright 2019 rominronin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+// MacOS based definitions.
+#define K_SPCFN LT(SYMB, KC_SPACE) // Tap for space, hold for symbols layer
+#define K_PRVWD LALT(KC_LEFT) // Previous word
+#define K_NXTWD LALT(KC_RIGHT) // Next word
+#define K_LSTRT LGUI(KC_LEFT) // Start of line
+#define K_LEND LGUI(KC_RIGHT) // End of line
+#define UNDO LGUI(KC_Z) // UNDO
+#define CUT LGUI(KC_X) // CUT
+#define COPY LGUI(KC_C) // COPY
+#define PASTE LGUI(KC_V) // PASTE
+
+enum layer_names {
+ BASE,
+ NUMB,
+ SYMB,
+ CURS,
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = LAYOUT_1_a(/* Base */
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(1), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_PGUP, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_DEL, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ MO(2), KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_ENT, K_SPCFN, KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ ),
+ [NUMB] = LAYOUT_1_a(
+ _______, _______, _______, _______, _______, _______, _______, DF(0), _______, _______, KC_PEQL, KC_PSLS, KC_PAST, _______, _______,
+ _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______,
+ _______, KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______,
+ _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
+ _______, _______, _______, _______, _______, KC_P0, _______, _______, KC_PDOT, KC_PENT, _______, _______
+ ),
+ [SYMB] = LAYOUT_1_a(
+ RESET, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_VOLD, KC_VOLU, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ _______, KC_PLUS, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_MPRV, KC_MPLY, KC_MNXT, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
+ _______, _______, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______
+ ),
+ [CURS] = LAYOUT_1_a(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, K_PRVWD, KC_UP, K_NXTWD, _______, _______,
+ _______, _______, KC_LCTL, KC_LALT, KC_LSFT, _______, _______, _______, KC_BSPC, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, _______,
+ _______, UNDO, CUT, COPY, PASTE, _______, _______, _______, _______, _______, K_LSTRT, _______, K_LEND, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/rominronin/katana60/rev2/keymaps/default/readme.md b/keyboards/rominronin/katana60/rev2/keymaps/default/readme.md
new file mode 100644
index 000000000000..6d0bbe8b2d15
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for katana60_rev2
diff --git a/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/config.h b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/config.h
new file mode 100644
index 000000000000..068967640261
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 rominronin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c
new file mode 100644
index 000000000000..5450892123b6
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/keymap.c
@@ -0,0 +1,79 @@
+/* Copyright 2019 rominronin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+// MacOS based definitions.
+#define K_SPCFN LT(SYMB, KC_SPACE) // Tap for space, hold for symbols layer
+#define K_PRVWD LALT(KC_LEFT) // Previous word
+#define K_NXTWD LALT(KC_RIGHT) // Next word
+#define K_LSTRT LGUI(KC_LEFT) // Start of line
+#define K_LEND LGUI(KC_RIGHT) // End of line
+#define UNDO LGUI(KC_Z) // UNDO
+#define CUT LGUI(KC_X) // CUT
+#define COPY LGUI(KC_C) // COPY
+#define PASTE LGUI(KC_V) // PASTE
+
+enum layer_names {
+ BASE,
+ NUMB,
+ SYMB,
+ CURS,
+ BASE2,
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = LAYOUT_7u_a(/* Base */
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(4), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_BSPC,
+ MO(3), KC_A, KC_R, KC_S, KC_T, KC_G, KC_HOME, KC_PGUP, KC_M, KC_N, KC_E, KC_I, KC_O, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_END, KC_DEL, KC_PGDN, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_LGUI, K_SPCFN, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ ),
+ [NUMB] = LAYOUT_7u_a(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PEQL, KC_PSLS, KC_PAST, _______, _______,
+ _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______,
+ DF(0), KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______,
+ _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
+ _______, _______, _______, KC_P0, KC_PDOT, KC_PENT, _______, _______
+ ),
+ [SYMB] = LAYOUT_7u_a(
+ RESET, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_VOLD, KC_VOLU, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ _______, KC_PLUS, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_MPRV, KC_MPLY, KC_MNXT, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
+ _______, _______, _______, KC_DEL, _______, _______, _______, _______
+ ),
+ [CURS] = LAYOUT_7u_a(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, K_PRVWD, KC_UP, K_NXTWD, _______, _______,
+ _______, _______, KC_LCTL, KC_LALT, KC_LSFT, _______, _______, _______, KC_BSPC, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL, _______,
+ _______, UNDO, CUT, COPY, PASTE, _______, _______, _______, _______, _______, K_LSTRT, _______, K_LEND, _______, _______,
+ _______, _______, _______, DF(1), _______, _______, _______, _______
+ ),
+ [BASE2] = LAYOUT_7u_a(/* Base */
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, DF(0), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_LBRC, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, KC_BSPC,
+ KC_CAPS, KC_A, KC_R, KC_S, KC_T, KC_G, KC_HOME, KC_PGUP, KC_M, KC_N, KC_E, KC_I, KC_O, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_END, KC_DEL, KC_PGDN, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPACE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ )
+};
diff --git a/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md
new file mode 100644
index 000000000000..6d0bbe8b2d15
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/keymaps/rominronin_7u/readme.md
@@ -0,0 +1 @@
+# The default keymap for katana60_rev2
diff --git a/keyboards/rominronin/katana60/rev2/readme.md b/keyboards/rominronin/katana60/rev2/readme.md
new file mode 100644
index 000000000000..2f2abad7096c
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/readme.md
@@ -0,0 +1,17 @@
+# Katana60 rev2
+
+![Katana60 rev2](https://i.imgur.com/3hBsSvBl.jpg)
+
+A 60% keyboard with a symmetrical staggered layout, sold by CandyKeys.com.
+
+Keyboard Maintainer: [Baris Tosun](https://github.com/rominronin)
+Hardware Supported: Katana60 PCB rev2
+Hardware Availability: [candykeys.com](https://candykeys.com/product/katana60-pcb-V2)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rominronin/katana60/rev2:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+There is also ongoing discussion for the extend layer, at the [Colemak Forum](https://forum.colemak.com/topic/2327-developing-an-extend-layer-for-the-katana60/)
diff --git a/keyboards/rominronin/katana60/rev2/rev2.c b/keyboards/rominronin/katana60/rev2/rev2.c
new file mode 100644
index 000000000000..3336fd0dc703
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/rev2.c
@@ -0,0 +1,16 @@
+/* Copyright 2019 rominronin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "rev2.h"
diff --git a/keyboards/rominronin/katana60/rev2/rev2.h b/keyboards/rominronin/katana60/rev2/rev2.h
new file mode 100644
index 000000000000..35a45b438a9a
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/rev2.h
@@ -0,0 +1,238 @@
+/* Copyright 2019 rominronin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include "quantum.h"
+#define XXX KC_NO
+
+/* LAYOUT_7u_a
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┴─┬─┴─┬─┴───┼───┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┤
+ * │41 │42 │43 │ 47 │4B │4C │4D │4E │
+ * └─────┴───┴─────┴───────────────────────────┴───┴───┴───┴───┘
+ */
+#define LAYOUT_7u_a( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q41, Q42, Q43, Q47, Q4B, Q4C, Q4D, Q4E \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, XXX, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, XXX, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { XXX, Q41, Q42, Q43, XXX, XXX, XXX, Q47, XXX, XXX, XXX, Q4B, Q4C, Q4D, Q4E } \
+}
+
+/* LAYOUT_7u_b
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┴─┬─┴─┬─┴───┼───┴───┴───┴───┴───┴───┴───┼───┴─┬─┴─┬─┴───┤
+ * │41 │42 │43 │ 47 │17 │27 │48 │
+ * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+ */
+#define LAYOUT_7u_b( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q41, Q42, Q43, Q47, Q17, Q27, Q48 \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q17, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q27, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { XXX, Q41, Q42, Q43, XXX, XXX, XXX, Q47, Q48, XXX, XXX, XXX, XXX, XXX, XXX } \
+}
+
+/* LAYOUT_1_a
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┼───┴┬──┴─┬─┴──┬┴───┴───┼───┼───┴───┼───┼───┼───┼───┼───┤
+ * │40 │41 │42 │43 │ 44 │47 │ 49 │4A │4B │4C │4D │4E │
+ * └───┴────┴────┴────┴────────┴───┴───────┴───┴───┴───┴───┴───┘
+ */
+#define LAYOUT_1_a( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q40, Q41, Q42, Q43, Q44, Q47, Q49, Q4A, Q4B, Q4C, Q4D, Q4E \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, XXX, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, XXX, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { Q40, Q41, Q42, Q43, Q44, XXX, XXX, Q47, XXX, Q49, Q4A, Q4B, Q4C, Q4D, Q4E } \
+}
+
+/* LAYOUT_1_b
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┼───┴┬──┴─┬─┴──┬┴───┴───┼───┼───┴───┴──┬┴───┴──┬┴───┴───┤
+ * │40 │41 │42 │43 │ 44 │47 │ 49 │17 │48 │
+ * └───┴────┴────┴────┴────────┴───┴──────────┴───────┴────────┘
+ */
+#define LAYOUT_1_b( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q40, Q41, Q42, Q43, Q44, Q47, Q49, Q17, Q48 \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q17, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, XXX, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { Q40, Q41, Q42, Q43, Q44, XXX, XXX, Q47, Q48, Q49, XXX, XXX, XXX, XXX, XXX } \
+}
+
+/* LAYOUT_1_c
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┼───┴┬──┴─┬─┴──┬┴───┴───┼───┼───┴───┼───┴─┬─┴──┬┴───┴───┤
+ * │40 │41 │42 │43 │ 44 │47 │ 49 │45 │27 │48 │
+ * └───┴────┴────┴────┴────────┴───┴───────┴─────┴────┴────────┘
+ */
+#define LAYOUT_1_c( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q40, Q41, Q42, Q43, Q44, Q47, Q49, Q45, Q27, Q48 \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, XXX, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q27, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { Q40, Q41, Q42, Q43, Q44, Q45, XXX, Q47, Q48, Q49, XXX, XXX, XXX, XXX, XXX } \
+}
+
+
+/* LAYOUT_2_a
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┴─┬─┴──┬┴───┴┬──┴───┴───┼───┼───┴───┼───┼───┼───┼───┼───┤
+ * │41 │42 │43 │ 44 │47 │ 49 │4A │4B │4C │4D │4E │
+ * └─────┴────┴─────┴──────────┴───┴───────┴───┴───┴───┴───┴───┘
+ */
+#define LAYOUT_2_a( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q41, Q42, Q43, Q44, Q47, Q49, Q4A, Q4B, Q4C, Q4D, Q4E \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, XXX, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, XXX, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { XXX, Q41, Q42, Q43, Q44, XXX, XXX, Q47, XXX, Q49, Q4A, Q4B, Q4C, Q4D, Q4E } \
+}
+
+
+
+/* LAYOUT_2_b
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┴─┬─┴──┬┴───┴┬──┴───┴───┼───┼───┴───┴──┬┴───┴──┬┴───┴───┤
+ * │41 │42 │43 │ 44 │47 │ 49 │17 │48 │
+ * └─────┴────┴─────┴──────────┴───┴──────────┴───────┴────────┘
+ */
+#define LAYOUT_2_b( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q41, Q42, Q43, Q44, Q47, Q49, Q17, Q48 \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q17, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, XXX, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { XXX, Q41, Q42, Q43, Q44, XXX, XXX, Q47, Q48, Q49, XXX, XXX, XXX, XXX, XXX } \
+}
+
+/* LAYOUT_2_c
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │10 │11 │12 │13 │14 │15 │16 │18 │19 │1A │1B │1C │1D │1E │
+ * ├────┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤
+ * │20 │21 │22 │23 │24 │25 │26 │ │28 │29 │2A │2B │2C │2D │2E │
+ * ├───┬┴──┬┴──┬┴──┬┴──┬┴──┬┴──┬┴─┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬───┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+ * ├───┼───┴┬──┴─┬─┴──┬┴───┴───┼───┼───┴───┼───┴─┬─┴──┬┴───┴───┤
+ * │40 │41 │42 │43 │ 44 │47 │ 49 │45 │27 │48 │
+ * └───┴────┴────┴────┴────────┴───┴───────┴─────┴────┴────────┘
+ */
+#define LAYOUT_2_c( \
+ Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E, \
+ Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E, \
+ Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E, \
+ Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E, \
+ Q41, Q42, Q43, Q44, Q47, Q49, Q45, Q27, Q48 \
+) { \
+ { Q00, Q01, Q02, Q03, Q04, Q05, Q06, Q07, Q08, Q09, Q0A, Q0B, Q0C, Q0D, Q0E }, \
+ { Q10, Q11, Q12, Q13, Q14, Q15, Q16, XXX, Q18, Q19, Q1A, Q1B, Q1C, Q1D, Q1E }, \
+ { Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q27, Q28, Q29, Q2A, Q2B, Q2C, Q2D, Q2E }, \
+ { Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q3A, Q3B, Q3C, Q3D, Q3E }, \
+ { XXX, Q41, Q42, Q43, Q44, Q45, XXX, Q47, Q48, Q49, XXX, XXX, XXX, XXX, XXX } \
+}
diff --git a/keyboards/rominronin/katana60/rev2/rules.mk b/keyboards/rominronin/katana60/rev2/rules.mk
new file mode 100644
index 000000000000..000f55911ad3
--- /dev/null
+++ b/keyboards/rominronin/katana60/rev2/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
From bdb1b10e9900c12d21926793b8e1006b2b414e14 Mon Sep 17 00:00:00 2001
From: Xyverz
Date: Sat, 19 Sep 2020 12:59:45 -0700
Subject: [PATCH 042/178] Update Xyverz ortho_5x12 keymap (#10346)
* Fixing my 5x12 Ortho layout
Minor fixes.
---
layouts/community/ortho_5x12/xyverz/keymap.c | 25 +++++++++++---------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/layouts/community/ortho_5x12/xyverz/keymap.c b/layouts/community/ortho_5x12/xyverz/keymap.c
index 00fca1b48e49..22147c3a0ab8 100644
--- a/layouts/community/ortho_5x12/xyverz/keymap.c
+++ b/layouts/community/ortho_5x12/xyverz/keymap.c
@@ -8,6 +8,9 @@ enum custom_keycodes { QWERTY = SAFE_RANGE, COLEMAK, DVORAK, LOWER, RAISE, ADJUS
#define GUIBSPC GUI_T(KC_BSPC) // GUI when held, BSPC when tapped.
#define RGB_SWR RGB_M_SW // Swirl Animation alias
#define RGB_SNK RGB_M_SN // Snake Animation alias
+#define MACLOCK LGUI(LCTL(KC_Q)) // Lock my MacBook!
+#define RAISE MO(_RAISE)
+#define LOWER MO(_LOWER)
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -18,7 +21,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | - | A | S | D | F | G | H | J | K | L | ; | " |
+ * | ` | A | S | D | F | G | H | J | K | L | ; | " |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | N | M | , | . | / | Shift|
* |------+------+------+------+------+------+------+------+------+------+------+------|
@@ -26,16 +29,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*/
[_QWERTY] = LAYOUT_ortho_5x12 ( \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL , \
- KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_GRV, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, GUIBSPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT \
),
/* Colemak
* ,-----------------------------------------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Grv |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
* |------+------+------+------+------+-------------+------+------+------+------+------|
@@ -47,9 +50,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*/
[_COLEMAK] = LAYOUT_ortho_5x12 ( \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, \
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL , \
- KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, GUIBSPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT \
),
@@ -60,7 +63,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Tab | " | , | . | P | Y | F | G | C | R | L | / |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Esc | A | O | E | U | I | D | H | T | N | S | - |
+ * | ` | A | O | E | U | I | D | H | T | N | S | - |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| ; | Q | J | K | X | B | M | W | V | Z | Shift|
* |------+------+------+------+------+------+------+------+------+------+------+------|
@@ -68,9 +71,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*/
[_DVORAK] = LAYOUT_ortho_5x12 ( \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, \
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, \
- KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \
+ KC_GRV, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, \
KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, GUIBSPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT \
),
@@ -127,7 +130,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------|------+------+------+------+------+------|
* |RGB ON| MODE |RGB SW|RGB KN|RGB GR| HUE- | HUE+ | HUE- | SAT+ | SAT- | VAL+ | VAL- |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | |
+ * | | | | | | | | | | |MACLCK|
* `-----------------------------------------------------------------------------------'
*/
[_ADJUST] = LAYOUT_ortho_5x12 ( \
@@ -135,7 +138,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, RGB_M_P, RGB_M_B, RGB_M_R, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
RGB_TOG, RGB_MOD, RGB_SWR, RGB_M_K, RGB_M_G, RGB_HUI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MACLOCK \
)
};
From 12fe78ee57aca9d8fb9e85c2ee4176284ce26817 Mon Sep 17 00:00:00 2001
From: jrdsgl
Date: Sat, 19 Sep 2020 13:02:35 -0700
Subject: [PATCH 043/178] Align RoMac+ vendor and product info (#10349)
* Update config.h
adding vendor and product info so VIA will recognize it.
* Update keyboards/kingly_keys/romac_plus/config.h
thank you for this. commiting suggestion.
Co-authored-by: Ryan
Co-authored-by: Ryan
---
keyboards/kingly_keys/romac_plus/config.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/keyboards/kingly_keys/romac_plus/config.h b/keyboards/kingly_keys/romac_plus/config.h
index 503a463f5119..5ea8321de210 100644
--- a/keyboards/kingly_keys/romac_plus/config.h
+++ b/keyboards/kingly_keys/romac_plus/config.h
@@ -3,8 +3,8 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
+#define VENDOR_ID 0x4B4B
+#define PRODUCT_ID 0x0002
#define DEVICE_VER 0x0001
#define MANUFACTURER TheRoyalSweatshirt
#define PRODUCT RoMac+
From 08ef4b4a96e5b6b5bd857a6570fdddd9d6fcaac7 Mon Sep 17 00:00:00 2001
From: Patricio Gonzalez del Valle
Date: Sat, 19 Sep 2020 20:00:45 -0300
Subject: [PATCH 044/178] [Keymap] Adds pagondel layout for dz65rgb v2 (#9914)
* Adds pagondel layout for dz65rgb v2
* Adds license information
* replaces define by enums
* Update license year
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
---
.../dztech/dz65rgb/keymaps/pagondel/keymap.c | 65 +++++++++++++++++++
.../dztech/dz65rgb/keymaps/pagondel/readme.md | 35 ++++++++++
2 files changed, 100 insertions(+)
create mode 100644 keyboards/dztech/dz65rgb/keymaps/pagondel/keymap.c
create mode 100644 keyboards/dztech/dz65rgb/keymaps/pagondel/readme.md
diff --git a/keyboards/dztech/dz65rgb/keymaps/pagondel/keymap.c b/keyboards/dztech/dz65rgb/keymaps/pagondel/keymap.c
new file mode 100644
index 000000000000..277323987c8b
--- /dev/null
+++ b/keyboards/dztech/dz65rgb/keymaps/pagondel/keymap.c
@@ -0,0 +1,65 @@
+/* Copyright 2020 pagondel
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _BL,
+ _FL,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------------------------.
+ * |Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Backsp |~ ` |
+ * |-----------------------------------------------------------------------------|
+ * |Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |Del |
+ * |-----------------------------------------------------------------------------|
+ * |FN | A | S | D | F | G | H | J | K | L | ; | ' |Return |PgUp|
+ * |-----------------------------------------------------------------------------|
+ * |Shift | Z | X | C | V | B | N | M | , | . | / |Shift | Up |PgDn|
+ * |-----------------------------------------------------------------------------|
+ * |Ctrl |Win |Alt | Space |Alt | FN |Ctrl |Lef |Dow |Rig |
+ * `-----------------------------------------------------------------------------'
+ */
+ [_BL] = LAYOUT_65_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_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, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ /* Keymap _FL: Function Layer
+ * ,-----------------------------------------------------------------------------.
+ * |Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 |F10 |F11 |F12 |DEL |PNTS|
+ * |-----------------------------------------------------------------------------|
+ * | |RgbT|RgbM|Hue+|Hue-|Sat+|Sat-|BR+ |BR- | | |SLCK|Paus|RST | |
+ * |-----------------------------------------------------------------------------|
+ * | |Eff+|Eff-| | | | | | | | | |EEP RST | |
+ * |-----------------------------------------------------------------------------|
+ * |Shift | | | | | |NK T|Mute|Vol-|Vol+| | |PgUp| |
+ * |-----------------------------------------------------------------------------|
+ * | | | | Play | | | |Home|PgDn|End |
+ * `-----------------------------------------------------------------------------'
+ */
+ [_FL] = LAYOUT_65_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_PSCR,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, KC_SLCK, KC_PAUS, RESET, _______,
+ _______, RGB_SPI, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, _______,
+ KC_LSFT, _______, _______, _______, _______, _______, NK_TOGG, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, KC_PGUP, _______,
+ _______, _______, _______, KC_MPLY, _______, _______, _______, KC_HOME, KC_VOLD, KC_END
+ )
+};
diff --git a/keyboards/dztech/dz65rgb/keymaps/pagondel/readme.md b/keyboards/dztech/dz65rgb/keymaps/pagondel/readme.md
new file mode 100644
index 000000000000..8f55ce428a6a
--- /dev/null
+++ b/keyboards/dztech/dz65rgb/keymaps/pagondel/readme.md
@@ -0,0 +1,35 @@
+# pagondel's DZ65RGB v2 layout
+
+```
+ Keymap Default Layer
+ ,-----------------------------------------------------------------------------.
+ |Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Backsp |~ ` |
+ |-----------------------------------------------------------------------------|
+ |Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |Del |
+ |-----------------------------------------------------------------------------|
+ |FN | A | S | D | F | G | H | J | K | L | ; | ' |Return |PgUp|
+ |-----------------------------------------------------------------------------|
+ |Shift | Z | X | C | V | B | N | M | , | . | / |Shift | Up |PgDn|
+ |-----------------------------------------------------------------------------|
+ |Ctrl |Win |Alt | Space |Alt | FN |Ctrl |Lef |Dow |Rig |
+ `-----------------------------------------------------------------------------'
+```
+
+```
+ Keymap Function Layer
+ ,-----------------------------------------------------------------------------.
+ |Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 |F10 |F11 |F12 |DEL |PNTS|
+ |-----------------------------------------------------------------------------|
+ | |RgbT|RgbM|Hue+|Hue-|Sat+|Sat-|BR+ |BR- | | |SLCK|Paus|RST | |
+ |-----------------------------------------------------------------------------|
+ | |Eff+|Eff-| | | | | | | | | |EEP RST | |
+ |-----------------------------------------------------------------------------|
+ |Shift | | | | | |NK T|Mute|Vol-|Vol+| | |PgUp| |
+ |-----------------------------------------------------------------------------|
+ | | | | Play | | | |Home|PgDn|End |
+ `-----------------------------------------------------------------------------'
+```
+
+### Build layout
+
+```qmk compile -kb dztech/dz65rgb/v2 -km pagondel```
From 6eab8a0b619b55ca612d9cf048d365b1ba442328 Mon Sep 17 00:00:00 2001
From: Joakim Tufvegren
Date: Sun, 20 Sep 2020 01:25:20 +0200
Subject: [PATCH 045/178] [Keyboard] Make WPM sync between halves on Ergodox
Infinity (#9526)
* Make WPM able to sync between keyboard halves on Ergodox Infinity.
* Fix mixed indentation in ergodox_infinity.c.
---
keyboards/ergodox_infinity/ergodox_infinity.c | 85 +++++++++++++------
1 file changed, 57 insertions(+), 28 deletions(-)
diff --git a/keyboards/ergodox_infinity/ergodox_infinity.c b/keyboards/ergodox_infinity/ergodox_infinity.c
index 9fda7991f13f..c69c1eb36f4f 100644
--- a/keyboards/ergodox_infinity/ergodox_infinity.c
+++ b/keyboards/ergodox_infinity/ergodox_infinity.c
@@ -6,6 +6,17 @@
#include "lcd_backlight.h"
#endif
+#ifdef WPM_ENABLE
+# include "serial_link/protocol/transport.h"
+# include "wpm.h"
+
+MASTER_TO_ALL_SLAVES_OBJECT(current_wpm, uint8_t);
+static remote_object_t* remote_objects[] = {
+ REMOTE_OBJECT(current_wpm),
+};
+static uint8_t last_sent_wpm = 0;
+#endif
+
void init_serial_link_hal(void) {
PORTA->PCR[1] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(2);
PORTA->PCR[2] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(2);
@@ -39,30 +50,30 @@ void init_serial_link_hal(void) {
// Which will reduce the brightness range
#define PRESCALAR_DEFINE 0
void lcd_backlight_hal_init(void) {
- // Setup Backlight
+ // Setup Backlight
SIM->SCGC6 |= SIM_SCGC6_FTM0;
FTM0->CNT = 0; // Reset counter
- // PWM Period
- // 16-bit maximum
- FTM0->MOD = 0xFFFF;
+ // PWM Period
+ // 16-bit maximum
+ FTM0->MOD = 0xFFFF;
- // Set FTM to PWM output - Edge Aligned, Low-true pulses
+ // Set FTM to PWM output - Edge Aligned, Low-true pulses
#define CNSC_MODE FTM_SC_CPWMS | FTM_SC_PS(4) | FTM_SC_CLKS(0)
- CHANNEL_RED.CnSC = CNSC_MODE;
- CHANNEL_GREEN.CnSC = CNSC_MODE;
- CHANNEL_BLUE.CnSC = CNSC_MODE;
+ CHANNEL_RED.CnSC = CNSC_MODE;
+ CHANNEL_GREEN.CnSC = CNSC_MODE;
+ CHANNEL_BLUE.CnSC = CNSC_MODE;
- // System clock, /w prescalar setting
- FTM0->SC = FTM_SC_CLKS(1) | FTM_SC_PS(PRESCALAR_DEFINE);
+ // System clock, /w prescalar setting
+ FTM0->SC = FTM_SC_CLKS(1) | FTM_SC_PS(PRESCALAR_DEFINE);
- CHANNEL_RED.CnV = 0;
- CHANNEL_GREEN.CnV = 0;
- CHANNEL_BLUE.CnV = 0;
+ CHANNEL_RED.CnV = 0;
+ CHANNEL_GREEN.CnV = 0;
+ CHANNEL_BLUE.CnV = 0;
- RGB_PORT_GPIO->PDDR |= (1 << RED_PIN);
- RGB_PORT_GPIO->PDDR |= (1 << GREEN_PIN);
- RGB_PORT_GPIO->PDDR |= (1 << BLUE_PIN);
+ RGB_PORT_GPIO->PDDR |= (1 << RED_PIN);
+ RGB_PORT_GPIO->PDDR |= (1 << GREEN_PIN);
+ RGB_PORT_GPIO->PDDR |= (1 << BLUE_PIN);
#define RGB_MODE PORTx_PCRn_SRE | PORTx_PCRn_DSE | PORTx_PCRn_MUX(4)
RGB_PORT->PCR[RED_PIN] = RGB_MODE;
@@ -94,9 +105,9 @@ static uint16_t cie_lightness(uint16_t v) {
}
void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) {
- CHANNEL_RED.CnV = cie_lightness(r);
- CHANNEL_GREEN.CnV = cie_lightness(g);
- CHANNEL_BLUE.CnV = cie_lightness(b);
+ CHANNEL_RED.CnV = cie_lightness(r);
+ CHANNEL_GREEN.CnV = cie_lightness(g);
+ CHANNEL_BLUE.CnV = cie_lightness(b);
}
__attribute__ ((weak))
@@ -109,21 +120,39 @@ void matrix_scan_user(void) {
void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
- matrix_init_user();
- // The backlight always has to be initialized, otherwise it will stay lit
+ matrix_init_user();
+ // The backlight always has to be initialized, otherwise it will stay lit
#ifndef VISUALIZER_ENABLE
- lcd_backlight_hal_init();
+ lcd_backlight_hal_init();
+#endif
+#ifdef WPM_ENABLE
+ add_remote_objects(remote_objects, sizeof(remote_objects) / sizeof(remote_object_t*));
#endif
}
void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
-
- matrix_scan_user();
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+#ifdef WPM_ENABLE
+ if (is_serial_link_master()) {
+ uint8_t current_wpm = get_current_wpm();
+ if (current_wpm != last_sent_wpm) {
+ *begin_write_current_wpm() = current_wpm;
+ end_write_current_wpm();
+ last_sent_wpm = current_wpm;
+ }
+ } else if (is_serial_link_connected()) {
+ uint8_t* new_wpm = read_current_wpm();
+ if (new_wpm) {
+ set_current_wpm(*new_wpm);
+ }
+ }
+#endif
+ matrix_scan_user();
}
bool is_keyboard_master(void) {
From 3abb60934886289725a18c7ea96b246e70f7af3a Mon Sep 17 00:00:00 2001
From: Stephen Huan
Date: Sat, 19 Sep 2020 20:30:46 -0400
Subject: [PATCH 046/178] Add stephen-huan keymap and fix LED problem in the
default Plaid keymap (#9306)
* change layers, add pinmode to fix LEDs
* fix LEDs by setting the pin mode
* edit README
* edit GPIO documentation, edit keymap
* add markov chain
* simplify LED logic
* undo documentation changes
* keymap changes, fix LED enum logic
---
.../dm9records/plaid/keymaps/default/keymap.c | 4 +
.../plaid/keymaps/stephen-huan/config.h | 19 +
.../plaid/keymaps/stephen-huan/keymap.c | 356 ++++++++++++++++++
.../plaid/keymaps/stephen-huan/readme.md | 1 +
4 files changed, 380 insertions(+)
create mode 100644 keyboards/dm9records/plaid/keymaps/stephen-huan/config.h
create mode 100644 keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c
create mode 100644 keyboards/dm9records/plaid/keymaps/stephen-huan/readme.md
diff --git a/keyboards/dm9records/plaid/keymaps/default/keymap.c b/keyboards/dm9records/plaid/keymaps/default/keymap.c
index 6a858a4a7302..c5075b0e0c47 100644
--- a/keyboards/dm9records/plaid/keymaps/default/keymap.c
+++ b/keyboards/dm9records/plaid/keymaps/default/keymap.c
@@ -214,6 +214,10 @@ led_config_t led_config;
//Set leds to saved state during powerup
void keyboard_post_init_user(void) {
+ // set LED pin modes
+ setPinOutput(LED_RED);
+ setPinOutput(LED_GREEN);
+
// Call the post init code.
led_config.raw = eeconfig_read_user();
diff --git a/keyboards/dm9records/plaid/keymaps/stephen-huan/config.h b/keyboards/dm9records/plaid/keymaps/stephen-huan/config.h
new file mode 100644
index 000000000000..5733b9e4b046
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/stephen-huan/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 Takuya Urakawa (dm9records.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c b/keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c
new file mode 100644
index 000000000000..c8d48c395512
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c
@@ -0,0 +1,356 @@
+/* Copyright 2019 Takuya Urakawa (dm9records.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+
+enum plaid_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum plaid_keycodes {
+ QWERTY = SAFE_RANGE,
+ LED_1,
+ LED_2,
+ LED_3,
+ LED_4,
+ LED_5,
+ LED_6,
+ LED_7,
+ LED_8,
+ LED_9,
+ LED_0
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+// array of keys considered modifiers for led purposes
+const uint16_t modifiers[] = {
+ KC_LCTL,
+ KC_RCTL,
+ KC_LALT,
+ KC_RALT,
+ KC_LSFT,
+ KC_RSFT,
+ KC_LGUI,
+ KC_RGUI,
+ LOWER,
+ RAISE
+};
+
+//Setup consts for LED modes
+#define LEDMODE_ON 1 //always on
+#define LEDMODE_OFF 0 //always off
+#define LEDMODE_MODS 2 //On with modifiers
+#define LEDMODE_BLINKIN 3 //blinkinlights - % chance toggle on keypress
+#define LEDMODE_KEY 4 //On with any keypress, off with key release
+#define LEDMODE_ENTER 5 // On with enter key
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |Esc/hy| A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | fn | Alt | GUI |Lower | Space |Raise | GUI | Alt |Shift | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ * (karabiner remaps Caps lock -> fn)
+ */
+[_QWERTY] = LAYOUT_plaid_grid(
+ KC_TAB , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ HYPR_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_RSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ KC_RCTL , KC_CAPS, KC_RALT, KC_RGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_RGUI, KC_RALT, KC_RSFT, KC_RCTL
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Prev | Vol- | Play |
+ * `-----------------------------------------------------------------------------------'
+ * volume up key repeats randomly on mac, have to use mac specific volume
+ */
+[_LOWER] = LAYOUT_plaid_grid(
+ KC_GRV , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0 , KC_BSPC,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC , KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______ , _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC__VOLDOWN, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | | | End | | | |Pg Up | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | Home | |Pg Dn | | | Left | Down | Up |Right | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | Copy |Paste | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Next | Vol+ | Mute |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_plaid_grid(
+ KC_TILD, _______, _______, KC_END, _______, _______, _______, KC_PGUP, _______, _______, _______ , KC_DEL ,
+ _______, KC_HOME, _______, KC_PGDN, _______, _______, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______ , _______,
+ _______, _______, _______, KC_COPY, KC_PSTE, KC_PGDN, _______, _______, _______, _______, _______ , _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC__VOLUP, KC_MUTE
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |Reset | Red |Green | Rmod | Gmod |Rblink|Gblink| Rkey | Gkey | Rcar | Gcar | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | |Power |Sleep |Wake |Eject | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_plaid_grid(
+ RESET , LED_1 , LED_2 , LED_3 , LED_4 , LED_5 ,LED_6 , LED_7 , LED_8 , LED_9 , LED_0 , _______ ,
+ _______, KC_PWR , KC_SLEP, KC_WAKE, KC_EJCT, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+
+};
+
+//Setup config struct for LED
+typedef union {
+ uint32_t raw;
+ struct {
+ uint8_t red_mode :8;
+ uint8_t green_mode :8;
+ };
+} led_config_t;
+led_config_t led_config;
+
+//Set leds to saved state during powerup
+void keyboard_post_init_user(void) {
+ // set LED pin modes
+ setPinOutput(LED_RED);
+ setPinOutput(LED_GREEN);
+
+ // Call the post init code.
+ led_config.raw = eeconfig_read_user();
+
+ if(led_config.red_mode == LEDMODE_ON) {
+ writePinHigh(LED_RED);
+ }
+
+ if(led_config.green_mode == LEDMODE_ON) {
+ writePinHigh(LED_GREEN);
+ }
+}
+
+void eeconfig_init_user(void) { // EEPROM is getting reset!
+ led_config.raw = 0;
+ led_config.red_mode = LEDMODE_ON;
+ led_config.green_mode = LEDMODE_MODS;
+ eeconfig_update_user(led_config.raw);
+}
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+void led_keypress_update(uint8_t led, uint8_t led_mode, uint16_t keycode, keyrecord_t *record) {
+ switch (led_mode) {
+ case LEDMODE_MODS:
+ for (int i=0;ievent.pressed) {
+ writePinHigh(led);
+ }
+ else {
+ writePinLow(led);
+ }
+ }
+ }
+ break;
+ case LEDMODE_BLINKIN:
+ if (record->event.pressed) {
+
+ /* Markov Chain
+ *
+ * 1 - x 1 - y
+ * /---\ /---\
+ * v | v |
+ * /------\ x /------\
+ * | |------>| |
+ * | on | y | off |
+ * | |<------| |
+ * \------/ \------/
+ */
+
+ /* Non-homogeneous Markov Chain
+ *
+ * /-----\ 1 - x0 /-----\ 1 - x1 /-----\
+ * |on 0|------->|on 1|------->|on 2|----> ...
+ * \-----/\ /\-----/\ /\-----/\
+ * \ / \ / .
+ * x0\ / x1\ / .
+ * \/ \/ .
+ * /\ /\
+ * y0/ \ y1/ \ .
+ * / \ / \ .
+ * / \ / \ .
+ * /-----\ 1 - y0 /-----\ 1 - y1 /-----\/
+ * |off 0|------->|off 1|------->|off 2|----> ...
+ * \-----/ \-----/ \-----/
+ *
+ *
+ * if x = 1/4 and y 1/4, behavior is equivalent to the original code
+ * and converges to a steady state at the rate of 1/2^k
+ * where k is the number of key presses
+ * (the distance from a given vector to the steady state, [1/2, 1/2],
+ * is cut in half every key press)
+ *
+ * if x = y, then it is guaranteed that the steady state is still
+ * [1/2, 1/2], but the rate at which it converges is variable
+ *
+ * if x != y, then there is no well-defined steady state
+ */
+
+ double x = (1.0*rand())/RAND_MAX;
+ double y = x;
+
+ double p = (readPin(led)) ? x : y;
+ if (rand() < p*RAND_MAX) {
+ togglePin(led);
+ }
+
+ /* following code is restriced to x + y <= 1
+ * if(rand() % 2 == 1) { */
+ /* if(rand() % 2 == 0) { */
+ /* writePinLow(led); */
+ /* } */
+ /* else { */
+ /* writePinHigh(led); */
+ /* } */
+ /* } */
+ }
+ break;
+ case LEDMODE_KEY:
+ if (record->event.pressed) {
+ writePinHigh(led);
+ return;
+ }
+ else {
+ writePinLow(led);
+ return;
+ }
+ break;
+ case LEDMODE_ENTER:
+ if (keycode==KC_ENT) {
+ writePinHigh(led);
+ }
+ else {
+ writePinLow(led);
+ }
+ break;
+
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ /* If the either led mode is keypressed based, call the led updater
+ then let it fall through the keypress handlers. Just to keep
+ the logic out of this procedure */
+ if (led_config.red_mode >= LEDMODE_MODS && led_config.red_mode <= LEDMODE_ENTER) {
+ led_keypress_update(LED_RED, led_config.red_mode, keycode, record);
+ }
+ if (led_config.green_mode >= LEDMODE_MODS && led_config.green_mode <= LEDMODE_ENTER) {
+ led_keypress_update(LED_GREEN, led_config.green_mode, keycode, record);
+ }
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LED_1:
+ if (record->event.pressed) {
+ if (led_config.red_mode==LEDMODE_ON) {
+ led_config.red_mode=LEDMODE_OFF;
+ writePinLow(LED_RED);
+ }
+ else {
+ led_config.red_mode=LEDMODE_ON;
+ writePinHigh(LED_RED);
+ }
+ }
+ break;
+ case LED_2:
+ if (record->event.pressed) {
+ if (led_config.green_mode==LEDMODE_ON) {
+ led_config.green_mode=LEDMODE_OFF;
+ writePinLow(LED_GREEN);
+ }
+ else {
+ led_config.green_mode=LEDMODE_ON;
+ writePinHigh(LED_GREEN);
+ }
+ }
+ break;
+ case LED_3:
+ led_config.red_mode=LEDMODE_MODS;
+ break;
+ case LED_4:
+ led_config.green_mode=LEDMODE_MODS;
+ break;
+ case LED_5:
+ led_config.red_mode=LEDMODE_BLINKIN;
+ break;
+ case LED_6:
+ led_config.green_mode=LEDMODE_BLINKIN;
+ break;
+ case LED_7:
+ led_config.red_mode=LEDMODE_KEY;
+ break;
+ case LED_8:
+ led_config.green_mode=LEDMODE_KEY;
+ break;
+ case LED_9:
+ led_config.red_mode=LEDMODE_ENTER;
+ break;
+ case LED_0:
+ led_config.green_mode=LEDMODE_ENTER;
+ break;
+ }
+
+ if (keycode >= LED_1 && keycode <= LED_0) {
+ eeconfig_update_user(led_config.raw);
+ }
+
+ return true;
+}
diff --git a/keyboards/dm9records/plaid/keymaps/stephen-huan/readme.md b/keyboards/dm9records/plaid/keymaps/stephen-huan/readme.md
new file mode 100644
index 000000000000..e52d24c3dfd6
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/stephen-huan/readme.md
@@ -0,0 +1 @@
+# stephen-huan's keymap for Plaid
From 741856dd57735dcd143987eb954ecc4a5ca2fc96 Mon Sep 17 00:00:00 2001
From: pabile <1162412+pabile@users.noreply.github.com>
Date: Sun, 20 Sep 2020 08:42:56 +0800
Subject: [PATCH 047/178] [Keyboard] add P40 Ortho, P42, and P20 ver2 by pabile
(#9980)
* Add files via upload
* removed
* Add files via upload
* Rename pabile40.c to p40.c
* Rename pabile40.h to p40.h
* Add files via upload
* Update p40.c
* Update p40.h
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Updated readme file
* Updated readme file
* Add files via upload
* modified: keyboards/pabile/p18/config.h
modified: keyboards/pabile/p18/keymaps/default/keymap.c
modified: keyboards/pabile/p18/p18.h
modified: keyboards/pabile/p18/rules.mk
modified: keyboards/pabile/p40/config.h
modified: keyboards/pabile/p40/keymaps/default/keymap.c
* config update
* Delete README.md.save
* Delete keymap.c.save
* Delete keymaps.c
* modified: keyboards/pabile/p18/keymaps/default/keymap.c
* Update p18.h
* testing layout config
* Create info.json
* Create info.json
* Create readme.md
* Update readme.md
* Updated description
* Updated description
* Update config.h
updated vendor ID to 0000
* Update keymap.c
removed unnecessary comments
* Update keyboards/pabile/p18/p18.h
Co-Authored-By: ridingqwerty
* Update keyboards/pabile/p18/p18.h
Co-Authored-By: ridingqwerty
* Update p18.h
removed unnecessary comments
* Update keyboards/pabile/p18/rules.mk
Co-Authored-By: ridingqwerty
* Update keyboards/pabile/p18/rules.mk
Co-Authored-By: ridingqwerty
* Update config.h
updated vendor id and removed unnecessary comments
* Update keyboards/pabile/p40/info.json
Co-Authored-By: ridingqwerty
* Update keyboards/pabile/p40/keymaps/default/keymap.c
Co-Authored-By: ridingqwerty
* Update keyboards/pabile/p40/p40.h
Co-Authored-By: ridingqwerty
* Update keyboards/pabile/p40/p40.h
Co-Authored-By: ridingqwerty
* Update keyboards/pabile/p40/p40.h
Co-Authored-By: ridingqwerty
* Update keyboards/pabile/p40/rules.mk
Co-Authored-By: ridingqwerty
* Update keyboards/pabile/p40/rules.mk
Co-Authored-By: ridingqwerty
* Added p20 macropad
* Update README.md
* Updated VID and PID
* Updated VID and PID
* Update rules.mk
* Update config.h
* Update config.h
* Update config.h
* Update keymap.c
* Replaced blank keys with KC_NO
* Update keyboards/pabile/p18/keymaps/default/keymap.c
Co-Authored-By: Drashna Jaelre
* Update keyboards/pabile/p18/p18.h
Co-Authored-By: Drashna Jaelre
* Update keyboards/pabile/p18/rules.mk
Co-Authored-By: Drashna Jaelre
* Update keyboards/pabile/p20/keymaps/default/keymap.c
Co-Authored-By: Drashna Jaelre
* Update keymap.c
* Update keymap.c
* Update keyboards/pabile/p20/rules.mk
Co-Authored-By: Drashna Jaelre
* Update keyboards/pabile/p40/info.json
Co-Authored-By: Drashna Jaelre
* Update keyboards/pabile/p20/p20.h
Co-Authored-By: Drashna Jaelre
* Updated product ID
* Updated product ID
* Update keyboards/pabile/p20/config.h
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p20/p20.h
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p20/p20.h
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p20/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p18/readme.md
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p20/README.md
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p20/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p20/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p20/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p20/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40/README.md
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p18/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p18/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40/config.h
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40/config.h
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p18/readme.md
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Changed to lowercase filename
* Rename README.md to readme.md
* Update keyboards/pabile/p18/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Add files via upload
* typo
* New keyboard
* Updated image link
* Updated default ortho keymap
* Update keymap.c
* Update readme.md
* Update keymap.c
* Update keymap.c
* default firmware
* Delete pabile_p40_ortho.hex
* Update keymap.c
added KC_SPC to make keymap compatible with both grid and MIT. keymap is designed for MIT.
* Update keymap.c
* Update info.json
added MIT layout
* Update p40.h
added MIT layout option
* Added support for version 2 PCB
New/corrected pin locations. (Backlight) LED pin now on B6. Up to 3 rotary encoder support.
* Update readme.md
update for PCB v2
* Update readme.md
updated link
* Update readme.md
* Update readme.md
* Update readme.md
* Update config.h
removed backlight pins
* Update keymap.c
added encoder. simplified layout.
* Update keymap.c
* Update p42.h
* Update keymap.c
simplified
* Update keymap.c
* Update readme.md
replaced photo
* Added new keyboard
Initially placed under p40. separated as a new keyboard following an advise from gh.
* start rename
* removed old folder
* reverted to last merge
* revert to last merge
* Update p40.h
reverted to last merge
* Update keymap.c
* Update keymap.c
removed encoder support
* Update config.h
removed encoder support
* Update config.h
removed encoder support
* Update keymap.c
removed encoder support
* Update readme.md
removed encoder support
* Update info.json
* Update keymap.c
* Update keymap.c
* Update keyboards/pabile/p20/rules.mk
added numpad option
Co-authored-by: Drashna Jaelre
* added numpad option
* Update keyboards/pabile/p40/keymaps/ortho/config.h
Co-authored-by: Drashna Jaelre
* Update keyboards/pabile/p18/config.h
Co-authored-by: Drashna Jaelre
* Update keyboards/pabile/p20/config.h
Co-authored-by: Drashna Jaelre
* moved to p40_ortho keyboard rather than a keymap
* moved to p40_ortho keyboard rather than a keymap
* moved to p40_ortho keyboard rather than a keymap
* Update config.h
Added copyright details.
* Update keyboards/pabile/p20/p20.h
Co-authored-by: Drashna Jaelre
* Update keyboards/pabile/p20/p20.h
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keymap.c
alignment
* Update keyboards/pabile/p42/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p42/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40_ortho/config.h
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40_ortho/info.json
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40_ortho/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p42/p42.h
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40_ortho/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40_ortho/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p42/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40_ortho/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40_ortho/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40_ortho/p40_ortho.h
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40_ortho/p40_ortho.h
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p42/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p42/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p42/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p42/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p42/info.json
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p42/config.h
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40_ortho/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40_ortho/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p40_ortho/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p20/keymaps/ver2/config.h
Co-authored-by: Drashna Jaelre
* Update config.h
Added copyright statement
* Update config.h
Added copyright statement
* Update config.h
Added license header
* Update keymap.c
Added license header
* Update p20.h
Added license header
* Update p40_ortho.c
Added license header
* Update p40_ortho.h
Added license header
* Update keymap.c
Added license header
* Update keyboards/pabile/p42/rules.mk
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keymap.c
Updated LAYOUT to LAYOUT_default in response to Run failed: PR Lint keyboards - master (0f278a2)
* Update p42.h
Updated LAYOUT to LAYOUT_default in response to Run failed: PR Lint keyboards - master (0f278a2)
* Update p42.h
Added license header
* Update keyboards/pabile/p42/p42.h
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p42/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p42/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p42/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p42/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/pabile/p42/keymaps/default/keymap.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* add pabile/p20/ver2
* add missing license header
* Update keyboards/pabile/p20/ver2/keymaps/default/keymap.c
Co-authored-by: Drashna Jaelre
* Update keyboards/pabile/p20/ver1/ver1.c
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-authored-by: root
Co-authored-by: ridingqwerty
Co-authored-by: Drashna Jaelre
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
---
keyboards/pabile/p18/config.h | 18 +++++
keyboards/pabile/p20/config.h | 26 ------
keyboards/pabile/p20/p20.c | 1 -
keyboards/pabile/p20/p20.h | 18 -----
keyboards/pabile/p20/readme.md | 10 +--
keyboards/pabile/p20/ver1/config.h | 42 ++++++++++
.../p20/{ => ver1}/keymaps/default/keymap.c | 0
keyboards/pabile/p20/{ => ver1}/rules.mk | 17 +---
keyboards/pabile/p20/ver1/ver1.c | 18 +++++
keyboards/pabile/p20/ver1/ver1.h | 50 ++++++++++++
keyboards/pabile/p20/ver2/config.h | 39 +++++++++
.../pabile/p20/ver2/keymaps/default/keymap.c | 43 ++++++++++
keyboards/pabile/p20/ver2/rules.mk | 28 +++++++
keyboards/pabile/p20/ver2/ver2.c | 18 +++++
keyboards/pabile/p20/ver2/ver2.h | 50 ++++++++++++
keyboards/pabile/p40/config.h | 17 ++++
keyboards/pabile/p40/info.json | 80 +++++++++----------
keyboards/pabile/p40/readme.md | 3 +-
keyboards/pabile/p40_ortho/config.h | 40 ++++++++++
keyboards/pabile/p40_ortho/info.json | 52 ++++++++++++
.../pabile/p40_ortho/keymaps/default/keymap.c | 46 +++++++++++
keyboards/pabile/p40_ortho/p40_ortho.c | 18 +++++
keyboards/pabile/p40_ortho/p40_ortho.h | 45 +++++++++++
keyboards/pabile/p40_ortho/readme.md | 15 ++++
keyboards/pabile/p40_ortho/rules.mk | 24 ++++++
keyboards/pabile/p42/config.h | 45 +++++++++++
keyboards/pabile/p42/info.json | 13 +++
keyboards/pabile/p42/keymaps/default/keymap.c | 29 +++++++
keyboards/pabile/p42/p42.c | 1 +
keyboards/pabile/p42/p42.h | 33 ++++++++
keyboards/pabile/p42/readme.md | 15 ++++
keyboards/pabile/p42/rules.mk | 24 ++++++
32 files changed, 774 insertions(+), 104 deletions(-)
delete mode 100644 keyboards/pabile/p20/config.h
delete mode 100644 keyboards/pabile/p20/p20.c
delete mode 100644 keyboards/pabile/p20/p20.h
create mode 100644 keyboards/pabile/p20/ver1/config.h
rename keyboards/pabile/p20/{ => ver1}/keymaps/default/keymap.c (100%)
rename keyboards/pabile/p20/{ => ver1}/rules.mk (64%)
create mode 100644 keyboards/pabile/p20/ver1/ver1.c
create mode 100644 keyboards/pabile/p20/ver1/ver1.h
create mode 100644 keyboards/pabile/p20/ver2/config.h
create mode 100644 keyboards/pabile/p20/ver2/keymaps/default/keymap.c
create mode 100644 keyboards/pabile/p20/ver2/rules.mk
create mode 100644 keyboards/pabile/p20/ver2/ver2.c
create mode 100644 keyboards/pabile/p20/ver2/ver2.h
create mode 100644 keyboards/pabile/p40_ortho/config.h
create mode 100644 keyboards/pabile/p40_ortho/info.json
create mode 100644 keyboards/pabile/p40_ortho/keymaps/default/keymap.c
create mode 100644 keyboards/pabile/p40_ortho/p40_ortho.c
create mode 100644 keyboards/pabile/p40_ortho/p40_ortho.h
create mode 100644 keyboards/pabile/p40_ortho/readme.md
create mode 100644 keyboards/pabile/p40_ortho/rules.mk
create mode 100644 keyboards/pabile/p42/config.h
create mode 100644 keyboards/pabile/p42/info.json
create mode 100644 keyboards/pabile/p42/keymaps/default/keymap.c
create mode 100644 keyboards/pabile/p42/p42.c
create mode 100644 keyboards/pabile/p42/p42.h
create mode 100644 keyboards/pabile/p42/readme.md
create mode 100644 keyboards/pabile/p42/rules.mk
diff --git a/keyboards/pabile/p18/config.h b/keyboards/pabile/p18/config.h
index f7c258a56540..d8d5a95f2d0b 100644
--- a/keyboards/pabile/p18/config.h
+++ b/keyboards/pabile/p18/config.h
@@ -1,3 +1,21 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+
#pragma once
#include "config_common.h"
diff --git a/keyboards/pabile/p20/config.h b/keyboards/pabile/p20/config.h
deleted file mode 100644
index 8a52c1bf1c50..000000000000
--- a/keyboards/pabile/p20/config.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#pragma once
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0x6666
-#define PRODUCT_ID 0x6667
-#define DEVICE_VER 0x0001
-#define MANUFACTURER Pabile
-#define PRODUCT P20
-#define DESCRIPTION 5x4 Macropad
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 4
-
-/* pin-out */
-#define MATRIX_ROW_PINS { B3, B4, B5, D7, E6 }
-#define MATRIX_COL_PINS { D0, B2, D4, B6 }
-#define UNUSED_PINS
-
-#define ENCODERS_PAD_A { F5, F7 }
-#define ENCODERS_PAD_B { F6, B1 }
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/pabile/p20/p20.c b/keyboards/pabile/p20/p20.c
deleted file mode 100644
index c17efac9b162..000000000000
--- a/keyboards/pabile/p20/p20.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "p20.h"
diff --git a/keyboards/pabile/p20/p20.h b/keyboards/pabile/p20/p20.h
deleted file mode 100644
index b7467dc150ec..000000000000
--- a/keyboards/pabile/p20/p20.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#pragma once
-
-#include "quantum.h"
-
-#define LAYOUT_ortho_5x4( \
- k00, k01, k02, k03, \
- k10, k11, k12, k13, \
- k20, k21, k22, k23, \
- k30, k31, k32, k33, \
- k40, k41, k42, k43 \
-) \
-{ \
- {k00, k01, k02, k03}, \
- {k10, k11, k12, k13}, \
- {k20, k21, k22, k23}, \
- {k30, k31, k32, k33}, \
- {k40, k41, k42, k43} \
-}
diff --git a/keyboards/pabile/p20/readme.md b/keyboards/pabile/p20/readme.md
index 256a4772ecd5..e94005b0d4db 100644
--- a/keyboards/pabile/p20/readme.md
+++ b/keyboards/pabile/p20/readme.md
@@ -1,16 +1,16 @@
# P20
![Linear grid](https://github.com/pabile/Pabile20/blob/master/_bak/layout-grid.jpg)
-![Numeric pad](https://github.com/pabile/Pabile20/blob/master/_bak/layout-numpad.jpg)
-A 5x4 grid keyboard with 2 rotary encoders.
+A 5x4 grid macro numeric pad with up to 3 optional rotary encoders.
* Keyboard Maintainer: [pabile](https://github.com/pabile)
-* Hardware Supported: Pabile P20 PCB, Pro Micro
-* Hardware Availability: [Info at pabileonline.blogspot.com](https://pabileonline.blogspot.com/search/label/pabile20)
+* Hardware Supported: Pabile P20 PCB, Pro Micro, Rotary Encoders, Alps/MX Switches
+* Hardware Availability: [pabileonline.blogspot.com](https://pabileonline.blogspot.com/search/label/p20)
Make example for this keyboard (after setting up your build environment):
- make pabile/p20:default
+ make pabile/p20/ver1:default # for ver1
+ make pabile/p20/ver2:default # for ver2
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/pabile/p20/ver1/config.h b/keyboards/pabile/p20/ver1/config.h
new file mode 100644
index 000000000000..94c600106b06
--- /dev/null
+++ b/keyboards/pabile/p20/ver1/config.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x6666
+#define PRODUCT_ID 0x6667
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Pabile
+#define PRODUCT P20 ver1
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 4
+
+/* pin-out */
+#define MATRIX_ROW_PINS { B3, B4, B5, D7, E6 }
+#define MATRIX_COL_PINS { D0, B2, D4, B6 }
+#define UNUSED_PINS
+
+#define ENCODERS_PAD_A { F5, F7 }
+#define ENCODERS_PAD_B { F6, B1 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
\ No newline at end of file
diff --git a/keyboards/pabile/p20/keymaps/default/keymap.c b/keyboards/pabile/p20/ver1/keymaps/default/keymap.c
similarity index 100%
rename from keyboards/pabile/p20/keymaps/default/keymap.c
rename to keyboards/pabile/p20/ver1/keymaps/default/keymap.c
diff --git a/keyboards/pabile/p20/rules.mk b/keyboards/pabile/p20/ver1/rules.mk
similarity index 64%
rename from keyboards/pabile/p20/rules.mk
rename to keyboards/pabile/p20/ver1/rules.mk
index d4fa25323ade..d8e01b847ff7 100644
--- a/keyboards/pabile/p20/rules.mk
+++ b/keyboards/pabile/p20/ver1/rules.mk
@@ -2,13 +2,6 @@
MCU = atmega32u4
# Bootloader selection
-# Teensy halfkay
-# Pro Micro caterina
-# Atmel DFU atmel-dfu
-# LUFA DFU lufa-dfu
-# QMK DFU qmk-dfu
-# ATmega32A bootloadHID
-# ATmega328P USBasp
BOOTLOADER = caterina
# Build Options
@@ -25,13 +18,11 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-MIDI_ENABLE = no # MIDI support
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = no # Audio output on port C6
-FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
-HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
UNICODE_ENABLE = yes # Unicode
IOS_DEVICE_ENABLE = no # connect to IOS Device
ENCODER_ENABLE = yes
-LAYOUTS = ortho_5x4
+LAYOUTS = ortho_5x4 numpad_5x4
diff --git a/keyboards/pabile/p20/ver1/ver1.c b/keyboards/pabile/p20/ver1/ver1.c
new file mode 100644
index 000000000000..65e11630bc88
--- /dev/null
+++ b/keyboards/pabile/p20/ver1/ver1.c
@@ -0,0 +1,18 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "ver1.h"
diff --git a/keyboards/pabile/p20/ver1/ver1.h b/keyboards/pabile/p20/ver1/ver1.h
new file mode 100644
index 000000000000..36ec781fa1f5
--- /dev/null
+++ b/keyboards/pabile/p20/ver1/ver1.h
@@ -0,0 +1,50 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_5x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, k33, \
+ k40, k41, k42, k43 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, k13}, \
+ {k20, k21, k22, k23}, \
+ {k30, k31, k32, k33}, \
+ {k40, k41, k42, k43} \
+}
+
+#define LAYOUT_numpad_5x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, \
+ k40, k42, k43 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, KC_NO}, \
+ {k20, k21, k22, k23}, \
+ {k30, k31, k32, KC_NO}, \
+ {k40, KC_NO, k42, k43} \
+}
diff --git a/keyboards/pabile/p20/ver2/config.h b/keyboards/pabile/p20/ver2/config.h
new file mode 100644
index 000000000000..099700183650
--- /dev/null
+++ b/keyboards/pabile/p20/ver2/config.h
@@ -0,0 +1,39 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x6666
+#define PRODUCT_ID 0x6667
+#define DEVICE_VER 0x0002
+#define MANUFACTURER Pabile
+#define PRODUCT P20 ver2
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 4
+
+/* pin-out */
+#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { D1, D0, D4, B2 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/pabile/p20/ver2/keymaps/default/keymap.c b/keyboards/pabile/p20/ver2/keymaps/default/keymap.c
new file mode 100644
index 000000000000..2c2af0da8a6b
--- /dev/null
+++ b/keyboards/pabile/p20/ver2/keymaps/default/keymap.c
@@ -0,0 +1,43 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum custom_keycodes {
+ DBLZERO = SAFE_RANGE,
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case DBLZERO:
+ if (record->event.pressed) {
+ tap_code(KC_P0);
+ tap_code(KC_P0);
+ }
+ break;
+ }
+ return true;
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_5x4(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_TAB,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3, KC_DEL,
+ KC_P0, DBLZERO, KC_PDOT, KC_PENT)
+};
diff --git a/keyboards/pabile/p20/ver2/rules.mk b/keyboards/pabile/p20/ver2/rules.mk
new file mode 100644
index 000000000000..da59201fcaed
--- /dev/null
+++ b/keyboards/pabile/p20/ver2/rules.mk
@@ -0,0 +1,28 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+
+UNICODE_ENABLE = yes # Unicode
+IOS_DEVICE_ENABLE = no # connect to IOS Device
+ENCODER_ENABLE = no
+
+LAYOUTS = ortho_5x4 numpad_5x4
diff --git a/keyboards/pabile/p20/ver2/ver2.c b/keyboards/pabile/p20/ver2/ver2.c
new file mode 100644
index 000000000000..fa7e1f2e395d
--- /dev/null
+++ b/keyboards/pabile/p20/ver2/ver2.c
@@ -0,0 +1,18 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "ver2.h"
diff --git a/keyboards/pabile/p20/ver2/ver2.h b/keyboards/pabile/p20/ver2/ver2.h
new file mode 100644
index 000000000000..36ec781fa1f5
--- /dev/null
+++ b/keyboards/pabile/p20/ver2/ver2.h
@@ -0,0 +1,50 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_5x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, k33, \
+ k40, k41, k42, k43 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, k13}, \
+ {k20, k21, k22, k23}, \
+ {k30, k31, k32, k33}, \
+ {k40, k41, k42, k43} \
+}
+
+#define LAYOUT_numpad_5x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, \
+ k40, k42, k43 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, KC_NO}, \
+ {k20, k21, k22, k23}, \
+ {k30, k31, k32, KC_NO}, \
+ {k40, KC_NO, k42, k43} \
+}
diff --git a/keyboards/pabile/p40/config.h b/keyboards/pabile/p40/config.h
index f4252f7ab03e..02ebb67e6baa 100644
--- a/keyboards/pabile/p40/config.h
+++ b/keyboards/pabile/p40/config.h
@@ -1,3 +1,20 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
#pragma once
#include "config_common.h"
diff --git a/keyboards/pabile/p40/info.json b/keyboards/pabile/p40/info.json
index 42f9b4823e16..d05d773282a0 100644
--- a/keyboards/pabile/p40/info.json
+++ b/keyboards/pabile/p40/info.json
@@ -7,46 +7,46 @@
"layouts": {
"LAYOUT_ortho_4x10": {
"layout": [
- {"x":0, "y":0},
- {"x":1, "y":0},
- {"x":2, "y":0},
- {"x":3, "y":0},
- {"x":4, "y":0},
- {"x":5, "y":0},
- {"x":6, "y":0},
- {"x":7, "y":0},
- {"x":8, "y":0},
- {"x":9, "y":0},
- {"x":0.25, "y":1},
- {"x":1.25, "y":1},
- {"x":2.25, "y":1},
- {"x":3.25, "y":1},
- {"x":4.25, "y":1},
- {"x":5.25, "y":1},
- {"x":6.25, "y":1},
- {"x":7.25, "y":1},
- {"x":8.25, "y":1},
- {"x":9.25, "y":1},
- {"x":0.5, "y":2},
- {"x":1.5, "y":2},
- {"x":2.5, "y":2},
- {"x":3.5, "y":2},
- {"x":4.5, "y":2},
- {"x":5.5, "y":2},
- {"x":6.5, "y":2},
- {"x":7.5, "y":2},
- {"x":8.5, "y":2},
- {"x":9.5, "y":2},
- {"x":0.75, "y":3},
- {"x":1.75, "y":3},
- {"x":2.75, "y":3},
- {"x":3.75, "y":3},
- {"x":4.75, "y":3},
- {"x":5.75, "y":3},
- {"x":6.75, "y":3},
- {"x":7.75, "y":3},
- {"x":8.75, "y":3},
- {"x":9.75, "y":3}]
+ {"w":1, "x":0, "y":0},
+ {"w":1, "x":1, "y":0},
+ {"w":1, "x":2, "y":0},
+ {"w":1, "x":3, "y":0},
+ {"w":1, "x":4, "y":0},
+ {"w":1, "x":5, "y":0},
+ {"w":1, "x":6, "y":0},
+ {"w":1, "x":7, "y":0},
+ {"w":1, "x":8, "y":0},
+ {"w":1, "x":9, "y":0},
+ {"w":1, "x":0.25, "y":1},
+ {"w":1, "x":1.25, "y":1},
+ {"w":1, "x":2.25, "y":1},
+ {"w":1, "x":3.25, "y":1},
+ {"w":1, "x":4.25, "y":1},
+ {"w":1, "x":5.25, "y":1},
+ {"w":1, "x":6.25, "y":1},
+ {"w":1, "x":7.25, "y":1},
+ {"w":1, "x":8.25, "y":1},
+ {"w":1, "x":9.25, "y":1},
+ {"w":1, "x":0.5, "y":2},
+ {"w":1, "x":1.5, "y":2},
+ {"w":1, "x":2.5, "y":2},
+ {"w":1, "x":3.5, "y":2},
+ {"w":1, "x":4.5, "y":2},
+ {"w":1, "x":5.5, "y":2},
+ {"w":1, "x":6.5, "y":2},
+ {"w":1, "x":7.5, "y":2},
+ {"w":1, "x":8.5, "y":2},
+ {"w":1, "x":9.5, "y":2},
+ {"w":1, "x":0.75, "y":3},
+ {"w":1, "x":1.75, "y":3},
+ {"w":1, "x":2.75, "y":3},
+ {"w":1, "x":3.75, "y":3},
+ {"w":1, "x":4.75, "y":3},
+ {"w":1, "x":5.75, "y":3},
+ {"w":1, "x":6.75, "y":3},
+ {"w":1, "x":7.75, "y":3},
+ {"w":1, "x":8.75, "y":3},
+ {"w":1, "x":9.75, "y":3}]
}
}
}
diff --git a/keyboards/pabile/p40/readme.md b/keyboards/pabile/p40/readme.md
index 33a657f384c4..14673d75a202 100644
--- a/keyboards/pabile/p40/readme.md
+++ b/keyboards/pabile/p40/readme.md
@@ -6,10 +6,11 @@ A compact 4x10 (40%) staggered DIY keyboard kit.
* Keyboard Maintainer: [pabile](https://github.com/pabile)
* Hardware Supported: Pabile P40 PCB, Pro Micro
-* Hardware Availability: [Info at pabileonline.blogspot.com](https://pabileonline.blogspot.com/search/label/pabile40)
+* Hardware Availability: [Info at pabileonline.blogspot.com](https://pabileonline.blogspot.com/search/label/p40)
Make example for this keyboard (after setting up your build environment):
make pabile/p40:default
+
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/pabile/p40_ortho/config.h b/keyboards/pabile/p40_ortho/config.h
new file mode 100644
index 000000000000..4fd8e7a533ba
--- /dev/null
+++ b/keyboards/pabile/p40_ortho/config.h
@@ -0,0 +1,40 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x6666
+#define PRODUCT_ID 0x6669
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Pabile
+#define PRODUCT P40 Ortho Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 10
+
+/* pin-out */
+#define MATRIX_ROW_PINS { D1, D0, F4, F5 }
+#define MATRIX_COL_PINS { D4, C6, D7, E6, B4, B2, B3, B1, F7, F6 }
+
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/pabile/p40_ortho/info.json b/keyboards/pabile/p40_ortho/info.json
new file mode 100644
index 000000000000..a4d757be9276
--- /dev/null
+++ b/keyboards/pabile/p40_ortho/info.json
@@ -0,0 +1,52 @@
+{
+ "keyboard_name": "",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 10,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x10": {
+ "layout": [
+ {"label":"Q", "x":0, "y":0},
+ {"label":"W", "x":1, "y":0},
+ {"label":"E", "x":2, "y":0},
+ {"label":"R", "x":3, "y":0},
+ {"label":"T", "x":4, "y":0},
+ {"label":"Y", "x":5, "y":0},
+ {"label":"U", "x":6, "y":0},
+ {"label":"I", "x":7, "y":0},
+ {"label":"O", "x":8, "y":0},
+ {"label":"P", "x":9, "y":0},
+ {"label":"A", "x":0, "y":1},
+ {"label":"S", "x":1, "y":1},
+ {"label":"D", "x":2, "y":1},
+ {"label":"F", "x":3, "y":1},
+ {"label":"G", "x":4, "y":1},
+ {"label":"H", "x":5, "y":1},
+ {"label":"J", "x":6, "y":1},
+ {"label":"K", "x":7, "y":1},
+ {"label":"L", "x":8, "y":1},
+ {"label":"-", "x":9, "y":1},
+ {"label":"Z", "x":0, "y":2},
+ {"label":"X", "x":1, "y":2},
+ {"label":"C", "x":2, "y":2},
+ {"label":"V", "x":3, "y":2},
+ {"label":"B", "x":4, "y":2},
+ {"label":"N", "x":5, "y":2},
+ {"label":"M", "x":6, "y":2},
+ {"label":",", "x":7, "y":2},
+ {"label":".", "x":8, "y":2},
+ {"label":"?", "x":9, "y":2},
+ {"label":"Ctrl", "x":0, "y":3},
+ {"label":"Win", "x":1, "y":3},
+ {"label":"Alt", "x":2, "y":3},
+ {"label":"Shift", "x":3, "y":3},
+ {"label":"←", "x":4, "y":3},
+ {"x":5, "y":3},
+ {"label":"Enter", "x":6, "y":3},
+ {"label":"Alt", "x":7, "y":3},
+ {"label":"Super", "x":8, "y":3},
+ {"label":"Ctrl", "x":9, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/pabile/p40_ortho/keymaps/default/keymap.c b/keyboards/pabile/p40_ortho/keymaps/default/keymap.c
new file mode 100644
index 000000000000..ac41acf2daad
--- /dev/null
+++ b/keyboards/pabile/p40_ortho/keymaps/default/keymap.c
@@ -0,0 +1,46 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_4x10(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3,KC_MINS),
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LT(4,KC_SLSH),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, LT(2,KC_BSPC), LT(1,KC_SPC), KC_ENT, KC_APP, KC_DEL, KC_ESC),
+ [1] = LAYOUT_ortho_4x10(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_TAB, KC_NO, KC_NO, KC_GRV, KC_LBRC, KC_RBRC, KC_BSLS, KC_SCLN, KC_QUOT, KC_MINS,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_EQL, KC_MINS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ [2] = LAYOUT_ortho_4x10(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_TAB, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_CAPS, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NLCK, KC_NO, KC_VOLD, KC_VOLU, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
+ [3] = LAYOUT_ortho_4x10(
+ KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_INS, KC_PGUP, KC_UP, KC_PGDN, KC_DEL,
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_END, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
+ [4] = LAYOUT_ortho_4x10(
+ KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, KC_DEL,
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_D, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO)
+};
diff --git a/keyboards/pabile/p40_ortho/p40_ortho.c b/keyboards/pabile/p40_ortho/p40_ortho.c
new file mode 100644
index 000000000000..b6573bd8025c
--- /dev/null
+++ b/keyboards/pabile/p40_ortho/p40_ortho.c
@@ -0,0 +1,18 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "p40_ortho.h"
diff --git a/keyboards/pabile/p40_ortho/p40_ortho.h b/keyboards/pabile/p40_ortho/p40_ortho.h
new file mode 100644
index 000000000000..dd2c899daa07
--- /dev/null
+++ b/keyboards/pabile/p40_ortho/p40_ortho.h
@@ -0,0 +1,45 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_4x10( \
+ 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, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39 \
+) \
+{ \
+ {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}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39} \
+}
+#define LAYOUT_ortho_4x10_1x2u_c( \
+ 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, \
+ k30, k31, k32, k33, k34, k36, k37, k38, k39 \
+) \
+{ \
+ {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}, \
+ {k30, k31, k32, k33, k34, KC_NO, k36, k37, k38, k39} \
+}
diff --git a/keyboards/pabile/p40_ortho/readme.md b/keyboards/pabile/p40_ortho/readme.md
new file mode 100644
index 000000000000..736c5b497f98
--- /dev/null
+++ b/keyboards/pabile/p40_ortho/readme.md
@@ -0,0 +1,15 @@
+# P40 Ortho
+
+![prototype photo1](https://github.com/pabile/p40_ortho/blob/master/files/p40-ortho-003.jpg)
+
+A compact 4x10 (40%) ortho-linear DIY keyboard kit.
+
+* Keyboard Maintainer: [pabile](https://github.com/pabile)
+* Hardware Supported: Pabile P40 PCB, Pro Micro, ALPS / MX Switches
+* Hardware Availability: [pabileonline.blogspot.com](https://pabileonline.blogspot.com/search/label/pabile40)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make pabile/p40_ortho:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/pabile/p40_ortho/rules.mk b/keyboards/pabile/p40_ortho/rules.mk
new file mode 100644
index 000000000000..ba0ad23c8a45
--- /dev/null
+++ b/keyboards/pabile/p40_ortho/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+UNICODE_ENABLE = yes # Unicode
+IOS_DEVICE_ENABLE = no # connect to IOS Device
diff --git a/keyboards/pabile/p42/config.h b/keyboards/pabile/p42/config.h
new file mode 100644
index 000000000000..2f7c5ce30a9c
--- /dev/null
+++ b/keyboards/pabile/p42/config.h
@@ -0,0 +1,45 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x6666
+#define PRODUCT_ID 0x6670
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Pabile
+#define PRODUCT P42 Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 11
+
+/* pin-out for PROMICRO */
+#define MATRIX_ROW_PINS { D1, D0, D4, C6 }
+#define MATRIX_COL_PINS { D7, E6, B4, B5, D2, D3, F7, B1, B3, B2, B6 }
+
+/* pin-out for BLUEFRUIT
+#define MATRIX_ROW_PINS { F7, F6, F5, F4 }
+#define MATRIX_COL_PINS { F1, F0, B1, B2, B3, D2, C7, D6, B7, B6, B5 }
+*/
+
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/pabile/p42/info.json b/keyboards/pabile/p42/info.json
new file mode 100644
index 000000000000..77bce4bab28c
--- /dev/null
+++ b/keyboards/pabile/p42/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "P42",
+ "url": "https://pabileonline.blogspot.com/",
+ "maintainer": "Pabile",
+ "width": 11.25,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"label":",", "x":7, "y":2}, {"label":".", "x":8, "y":2}, {"x":9, "y":2}, {"x":10.25, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10.25, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/pabile/p42/keymaps/default/keymap.c b/keyboards/pabile/p42/keymaps/default/keymap.c
new file mode 100644
index 000000000000..39c9e639e426
--- /dev/null
+++ b/keyboards/pabile/p42/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3,KC_MINS),
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, LT(2,KC_BSPC), LT(1,KC_SPC), LT(4,KC_ENT), KC_DEL, KC_RALT, KC_RCTL, KC_ESC),
+ [1] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_TAB, KC_NO, KC_NO, KC_GRV, KC_LBRC, KC_RBRC, KC_BSLS, KC_SCLN, KC_QUOT, KC_MINS,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_EQL, KC_MINS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ [2] = LAYOUT(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_TAB, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_CAPS, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NLCK, KC_NO, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS),
+ [3] = LAYOUT(
+ KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_INS, KC_PGUP, KC_UP, KC_PGDN, KC_DEL,
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_END, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS),
+ [4] = LAYOUT(
+ KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, KC_DEL,
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_D, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS)
+};
diff --git a/keyboards/pabile/p42/p42.c b/keyboards/pabile/p42/p42.c
new file mode 100644
index 000000000000..63bf51bd581c
--- /dev/null
+++ b/keyboards/pabile/p42/p42.c
@@ -0,0 +1 @@
+#include "p42.h"
diff --git a/keyboards/pabile/p42/p42.h b/keyboards/pabile/p42/p42.h
new file mode 100644
index 000000000000..41aed042a20b
--- /dev/null
+++ b/keyboards/pabile/p42/p42.h
@@ -0,0 +1,33 @@
+/*
+Copyright 2020 Pabile
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, \
+ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210,\
+ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310 \
+) \
+{ \
+ {k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, KC_NO}, \
+ {k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, KC_NO}, \
+ {k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210}, \
+ {k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310} \
+}
diff --git a/keyboards/pabile/p42/readme.md b/keyboards/pabile/p42/readme.md
new file mode 100644
index 000000000000..5ad0036bff62
--- /dev/null
+++ b/keyboards/pabile/p42/readme.md
@@ -0,0 +1,15 @@
+# P42
+
+![prototype photo1](https://github.com/pabile/P42/blob/master/docs/p42-001-small.jpg)
+
+42-key Ortho-linear keyboard
+
+* Keyboard Maintainer: [pabile](https://github.com/pabile)
+* Hardware Supported: Pabile P42 PCB, Pro Micro, Bluefruit LE, Hotswap Sockets
+* Hardware Availability: [pabileonline.blogspot.com](https://pabileonline.blogspot.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make pabile/p42:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/pabile/p42/rules.mk b/keyboards/pabile/p42/rules.mk
new file mode 100644
index 000000000000..ba0ad23c8a45
--- /dev/null
+++ b/keyboards/pabile/p42/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+UNICODE_ENABLE = yes # Unicode
+IOS_DEVICE_ENABLE = no # connect to IOS Device
From e1437c1859b088c4da7ffb517f8034723172cd82 Mon Sep 17 00:00:00 2001
From: Richard Titmuss
Date: Sun, 20 Sep 2020 02:48:43 +0200
Subject: [PATCH 048/178] [Keyboard] Add Torn keyboard (#10207)
* Add Torn keyboard
* Apply suggestions from code review
Co-authored-by: Nick Brassel
* Remove via json file
* Add mcp23081_pin_t
* Apply suggestions from code review
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Drashna Jaelre
* Apply suggestions from code review
Co-authored-by: Ryan
Co-authored-by: Richard Titmuss
Co-authored-by: Nick Brassel