aboutsummaryrefslogtreecommitdiff
path: root/keyboards/foxlab
diff options
context:
space:
mode:
authorJumail Mundekkat <mundekkat@hotmail.com>2020-05-26 14:10:48 +1000
committerGitHub <noreply@github.com>2020-05-25 21:10:48 -0700
commit9d41281a1d09c8bd3ae1c0a8bd6df95ada899451 (patch)
treedba8ef8d3e88d212aaed9965314ea5e92eccfb7d /keyboards/foxlab
parentba5e1f1bae1d724ab9b08229c2ce89d8d7714706 (diff)
downloadqmk_firmware-9d41281a1d09c8bd3ae1c0a8bd6df95ada899451.tar.gz
qmk_firmware-9d41281a1d09c8bd3ae1c0a8bd6df95ada899451.zip
[Keyboard] Add Key 65 by Fox Lab (#9116)
* Add Key65 Universal PCB * Add ISO layout to universal * Correct universal info.json * Add Key 65 Hotswap * Correct typo in Key 65 Universal * Update readmes * Correct name * Update keyboards/foxlab/key65/hotswap/config.h * Apply suggestions from code review * Invert capslock LED state * Avoid initial capslock LED flash * Apply suggestions from code review * Update rules.mk * Apply suggestions from code review
Diffstat (limited to 'keyboards/foxlab')
-rw-r--r--keyboards/foxlab/key65/hotswap/config.h172
-rw-r--r--keyboards/foxlab/key65/hotswap/hotswap.c34
-rw-r--r--keyboards/foxlab/key65/hotswap/hotswap.h33
-rw-r--r--keyboards/foxlab/key65/hotswap/info.json80
-rw-r--r--keyboards/foxlab/key65/hotswap/keymaps/default/keymap.c36
-rw-r--r--keyboards/foxlab/key65/hotswap/keymaps/via/keymap.c48
-rw-r--r--keyboards/foxlab/key65/hotswap/keymaps/via/rules.mk1
-rw-r--r--keyboards/foxlab/key65/hotswap/readme.md18
-rw-r--r--keyboards/foxlab/key65/hotswap/rules.mk27
-rw-r--r--keyboards/foxlab/key65/universal/config.h172
-rw-r--r--keyboards/foxlab/key65/universal/info.json306
-rw-r--r--keyboards/foxlab/key65/universal/keymaps/default/keymap.c36
-rw-r--r--keyboards/foxlab/key65/universal/keymaps/via/keymap.c48
-rw-r--r--keyboards/foxlab/key65/universal/keymaps/via/rules.mk1
-rw-r--r--keyboards/foxlab/key65/universal/readme.md22
-rw-r--r--keyboards/foxlab/key65/universal/rules.mk29
-rw-r--r--keyboards/foxlab/key65/universal/universal.c34
-rw-r--r--keyboards/foxlab/key65/universal/universal.h75
18 files changed, 1172 insertions, 0 deletions
diff --git a/keyboards/foxlab/key65/hotswap/config.h b/keyboards/foxlab/key65/hotswap/config.h
new file mode 100644
index 000000000..b6551f5a8
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/config.h
@@ -0,0 +1,172 @@
1/* Copyright 2020 Jumail Mundekkat / MxBlue
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "config_common.h"
20
21/* USB Device descriptor parameter */
22#define VENDOR_ID 0x464C // "FL"
23#define PRODUCT_ID 0x0003
24#define DEVICE_VER 0x0001
25#define MANUFACTURER Fox Lab
26#define PRODUCT Key 65 Hotswap
27#define DESCRIPTION Key 65 Hotswap
28
29/* key matrix size */
30#define MATRIX_ROWS 5
31#define MATRIX_COLS 15
32
33/*
34 * Keyboard Matrix Assignments
35 *
36 * Change this to how you wired your keyboard
37 * COLS: AVR pins used for columns, left to right
38 * ROWS: AVR pins used for rows, top to bottom
39 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
40 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
41 *
42 */
43#define MATRIX_ROW_PINS { D2, D1, D0, D3, B3 }
44#define MATRIX_COL_PINS { F5, F4, F1, F0, B0, F6, F7, C7, C6, B6, B5, B4, D7, D6, D4 }
45
46/* COL2ROW, ROW2COL*/
47#define DIODE_DIRECTION COL2ROW
48
49#define BACKLIGHT_PIN B7
50// #define BACKLIGHT_BREATHING
51#define BACKLIGHT_LEVELS 5
52
53#define RGB_DI_PIN E2
54#ifdef RGB_DI_PIN
55 #define RGBLED_NUM 8
56 #define RGBLIGHT_HUE_STEP 8
57 #define RGBLIGHT_SAT_STEP 8
58 #define RGBLIGHT_VAL_STEP 8
59 #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
60 #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
61 #define RGBLIGHT_ANIMATIONS
62#endif
63
64/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
65#define DEBOUNCE 5
66
67/* define if matrix has ghost (lacks anti-ghosting diodes) */
68//#define MATRIX_HAS_GHOST
69
70/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
71#define LOCKING_SUPPORT_ENABLE
72/* Locking resynchronize hack */
73#define LOCKING_RESYNC_ENABLE
74
75/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
76 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
77 */
78// #define GRAVE_ESC_CTRL_OVERRIDE
79
80/*
81 * Force NKRO
82 *
83 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
84 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
85 * makefile for this to work.)
86 *
87 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
88 * until the next keyboard reset.
89 *
90 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
91 * fully operational during normal computer usage.
92 *
93 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
94 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
95 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
96 * power-up.
97 *
98 */
99//#define FORCE_NKRO
100
101/*
102 * Magic Key Options
103 *
104 * Magic keys are hotkey commands that allow control over firmware functions of
105 * the keyboard. They are best used in combination with the HID Listen program,
106 * found here: https://www.pjrc.com/teensy/hid_listen.html
107 *
108 * The options below allow the magic key functionality to be changed. This is
109 * useful if your keyboard/keypad is missing keys and you want magic key support.
110 *
111 */
112
113/* key combination for magic key command */
114/* defined by default; to change, uncomment and set to the combination you want */
115// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
116
117/* control how magic key switches layers */
118//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
119//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
120//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
121
122/* override magic key keymap */
123//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
124//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
125//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
126//#define MAGIC_KEY_HELP H
127//#define MAGIC_KEY_HELP_ALT SLASH
128//#define MAGIC_KEY_DEBUG D
129//#define MAGIC_KEY_DEBUG_MATRIX X
130//#define MAGIC_KEY_DEBUG_KBD K
131//#define MAGIC_KEY_DEBUG_MOUSE M
132//#define MAGIC_KEY_VERSION V
133//#define MAGIC_KEY_STATUS S
134//#define MAGIC_KEY_CONSOLE C
135//#define MAGIC_KEY_LAYER0 0
136//#define MAGIC_KEY_LAYER0_ALT GRAVE
137//#define MAGIC_KEY_LAYER1 1
138//#define MAGIC_KEY_LAYER2 2
139//#define MAGIC_KEY_LAYER3 3
140//#define MAGIC_KEY_LAYER4 4
141//#define MAGIC_KEY_LAYER5 5
142//#define MAGIC_KEY_LAYER6 6
143//#define MAGIC_KEY_LAYER7 7
144//#define MAGIC_KEY_LAYER8 8
145//#define MAGIC_KEY_LAYER9 9
146//#define MAGIC_KEY_BOOTLOADER B
147//#define MAGIC_KEY_BOOTLOADER_ALT ESC
148//#define MAGIC_KEY_LOCK CAPS
149//#define MAGIC_KEY_EEPROM E
150//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
151//#define MAGIC_KEY_NKRO N
152//#define MAGIC_KEY_SLEEP_LED Z
153
154/*
155 * Feature disable options
156 * These options are also useful to firmware size reduction.
157 */
158
159/* disable debug print */
160//#define NO_DEBUG
161
162/* disable print */
163//#define NO_PRINT
164
165/* disable action features */
166//#define NO_ACTION_LAYER
167//#define NO_ACTION_TAPPING
168//#define NO_ACTION_ONESHOT
169
170/* disable these deprecated features by default */
171#define NO_ACTION_MACRO
172#define NO_ACTION_FUNCTION
diff --git a/keyboards/foxlab/key65/hotswap/hotswap.c b/keyboards/foxlab/key65/hotswap/hotswap.c
new file mode 100644
index 000000000..6b3950d36
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/hotswap.c
@@ -0,0 +1,34 @@
1/* Copyright 2020 Jumail Mundekkat / MxBlue
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include "hotswap.h"
18
19void keyboard_pre_init_kb(void) {
20 led_init_ports();
21 keyboard_pre_init_user();
22}
23
24void led_init_ports(void) {
25 setPinOutput(E6);
26 writePinHigh(E6);
27}
28
29bool led_update_kb(led_t led_state) {
30 if (led_update_user(led_state)) {
31 writePin(E6, !led_state.caps_lock);
32 }
33 return true;
34}
diff --git a/keyboards/foxlab/key65/hotswap/hotswap.h b/keyboards/foxlab/key65/hotswap/hotswap.h
new file mode 100644
index 000000000..878a61bce
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/hotswap.h
@@ -0,0 +1,33 @@
1/* Copyright 2020 Jumail Mundekkat / MxBlue
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
20
21#define LAYOUT( \
22 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
23 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
24 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, \
25 K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
26 K40, K41, K42, K47, K4B, K4C, K4D, K4E \
27) { \
28 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
29 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
30 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, KC_NO, K2E }, \
31 { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
32 { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, KC_NO, K4B, K4C, K4D, K4E }, \
33}
diff --git a/keyboards/foxlab/key65/hotswap/info.json b/keyboards/foxlab/key65/hotswap/info.json
new file mode 100644
index 000000000..99e5615df
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/info.json
@@ -0,0 +1,80 @@
1{
2 "keyboard_name": "Key 65 Hotswap",
3 "url": "",
4 "maintainer": "qmk",
5 "width": 15,
6 "height": 5,
7 "layouts": {
8 "LAYOUT": {
9 "key_count": 66,
10 "layout": [
11 {"label":"K00 (D2,F5)", "x":0, "y":0},
12 {"label":"K01 (D2,F4)", "x":1, "y":0},
13 {"label":"K02 (D2,F1)", "x":2, "y":0},
14 {"label":"K03 (D2,F0)", "x":3, "y":0},
15 {"label":"K04 (D2,B0)", "x":4, "y":0},
16 {"label":"K05 (D2,F6)", "x":5, "y":0},
17 {"label":"K06 (D2,F7)", "x":6, "y":0},
18 {"label":"K07 (D2,C7)", "x":7, "y":0},
19 {"label":"K08 (D2,C6)", "x":8, "y":0},
20 {"label":"K09 (D2,B6)", "x":9, "y":0},
21 {"label":"K0A (D2,B5)", "x":10, "y":0},
22 {"label":"K0B (D2,B4)", "x":11, "y":0},
23 {"label":"K0C (D2,D7)", "x":12, "y":0},
24 {"label":"K0D (D2,D6)", "x":13, "y":0, "w":2},
25 {"label":"K0E (D2,D4)", "x":15, "y":0},
26 {"label":"K10 (D1,F5)", "x":0, "y":1, "w":1.5},
27 {"label":"K11 (D1,F4)", "x":1.5, "y":1},
28 {"label":"K12 (D1,F1)", "x":2.5, "y":1},
29 {"label":"K13 (D1,F0)", "x":3.5, "y":1},
30 {"label":"K14 (D1,B0)", "x":4.5, "y":1},
31 {"label":"K15 (D1,F6)", "x":5.5, "y":1},
32 {"label":"K16 (D1,F7)", "x":6.5, "y":1},
33 {"label":"K17 (D1,C7)", "x":7.5, "y":1},
34 {"label":"K18 (D1,C6)", "x":8.5, "y":1},
35 {"label":"K19 (D1,B6)", "x":9.5, "y":1},
36 {"label":"K1A (D1,B5)", "x":10.5, "y":1},
37 {"label":"K1B (D1,B4)", "x":11.5, "y":1},
38 {"label":"K1C (D1,D7)", "x":12.5, "y":1},
39 {"label":"K1D (D1,D6)", "x":13.5, "y":1, "w":1.5},
40 {"label":"K1E (D1,D4)", "x":15, "y":1},
41 {"label":"K20 (D0,F5)", "x":0, "y":2, "w":1.75},
42 {"label":"K21 (D0,F4)", "x":1.75, "y":2},
43 {"label":"K22 (D0,F1)", "x":2.75, "y":2},
44 {"label":"K23 (D0,F0)", "x":3.75, "y":2},
45 {"label":"K24 (D0,B0)", "x":4.75, "y":2},
46 {"label":"K25 (D0,F6)", "x":5.75, "y":2},
47 {"label":"K26 (D0,F7)", "x":6.75, "y":2},
48 {"label":"K27 (D0,C7)", "x":7.75, "y":2},
49 {"label":"K28 (D0,C6)", "x":8.75, "y":2},
50 {"label":"K29 (D0,B6)", "x":9.75, "y":2},
51 {"label":"K2A (D0,B5)", "x":10.75, "y":2},
52 {"label":"K2B (D0,B4)", "x":11.75, "y":2},
53 {"label":"K2C (D0,D7)", "x":12.75, "y":2, "w":2.25},
54 {"label":"K2E (D0,D4)", "x":15, "y":2},
55 {"label":"K30 (D3,F5)", "x":0, "y":3, "w":2.25},
56 {"label":"K32 (D3,F1)", "x":2.25, "y":3},
57 {"label":"K33 (D3,F0)", "x":3.25, "y":3},
58 {"label":"K34 (D3,B0)", "x":4.25, "y":3},
59 {"label":"K35 (D3,F6)", "x":5.25, "y":3},
60 {"label":"K36 (D3,F7)", "x":6.25, "y":3},
61 {"label":"K37 (D3,C7)", "x":7.25, "y":3},
62 {"label":"K38 (D3,C6)", "x":8.25, "y":3},
63 {"label":"K39 (D3,B6)", "x":9.25, "y":3},
64 {"label":"K3A (D3,B5)", "x":10.25, "y":3},
65 {"label":"K3B (D3,B4)", "x":11.25, "y":3},
66 {"label":"K3C (D3,D7)", "x":12.25, "y":3, "w":1.75},
67 {"label":"K3D (D3,D6)", "x":14, "y":3},
68 {"label":"K3E (D3,D4)", "x":15, "y":3},
69 {"label":"K40 (B3,F5)", "x":0, "y":4, "w":1.5},
70 {"label":"K41 (B3,F4)", "x":1.5, "y":4},
71 {"label":"K42 (B3,F1)", "x":2.5, "y":4, "w":1.5},
72 {"label":"K47 (B3,C7)", "x":4, "y":4, "w":7},
73 {"label":"K4B (B3,B4)", "x":11, "y":4, "w":1.5},
74 {"label":"K4C (B3,D7)", "x":13, "y":4},
75 {"label":"K4D (B3,D6)", "x":14, "y":4},
76 {"label":"K4E (B3,D4)", "x":15, "y":4}
77 ]
78 }
79 }
80}
diff --git a/keyboards/foxlab/key65/hotswap/keymaps/default/keymap.c b/keyboards/foxlab/key65/hotswap/keymaps/default/keymap.c
new file mode 100644
index 000000000..956b7ac2e
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
1/* Copyright 2020 Jumail Mundekkat / MxBlue
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 [0] = LAYOUT(
21 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,
22 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_PGUP,
23 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_PGDN,
24 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, MO(1),
25 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
26 ),
27 [1] = LAYOUT(
28 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, _______, _______,
29 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
30 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
31 _______, BL_TOGG, BL_DEC, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______,
32 _______, _______, _______, _______, _______, _______, _______, _______
33 ),
34
35};
36
diff --git a/keyboards/foxlab/key65/hotswap/keymaps/via/keymap.c b/keyboards/foxlab/key65/hotswap/keymaps/via/keymap.c
new file mode 100644
index 000000000..9bc43b766
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
1/* Copyright 2020 Jumail Mundekkat / MxBlue
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 [0] = LAYOUT(
21 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,
22 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_PGUP,
23 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_PGDN,
24 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, MO(1),
25 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
26 ),
27 [1] = LAYOUT(
28 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, _______, _______,
29 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
30 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
31 _______, BL_TOGG, BL_DEC, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______,
32 _______, _______, _______, _______, _______, _______, _______, _______
33 ),
34 [2] = LAYOUT(
35 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
36 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
37 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
38 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
39 _______, _______, _______, _______, _______, _______, _______, _______
40 ),
41 [3] = LAYOUT(
42 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
43 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
44 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
45 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
46 _______, _______, _______, _______, _______, _______, _______, _______
47 ),
48};
diff --git a/keyboards/foxlab/key65/hotswap/keymaps/via/rules.mk b/keyboards/foxlab/key65/hotswap/keymaps/via/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/keymaps/via/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes
diff --git a/keyboards/foxlab/key65/hotswap/readme.md b/keyboards/foxlab/key65/hotswap/readme.md
new file mode 100644
index 000000000..61a6b6d92
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/readme.md
@@ -0,0 +1,18 @@
1# Foxlab Key 65 Hotswap
2
3![Key 65](https://i.imgur.com/28Qck8ul.jpg)
4
5Key 65 is featured with the three-layer case and dual-gasket structure. The plate mounting system is an improved version of the gasket sandwich on Leaf 60. In addition, we add gaskets between the middle case and the bottom case. There's an optional rubber sheet between the PCB and the plate. The numerous options will offer you the most freedom to make the keyboard look and feel as you wish.
6
7* Keyboard Maintainer: QMK
8* Hardware Supported: Key 65 Hotswap PCB
9* Hardware Availability: [Group Buy](https://geekhack.org/index.php?topic=102609.0)
10
11This version is for the hotswap variant with the fixed layout below:
12![Layout](https://i.imgur.com/NDqjqJml.png)
13
14Make example for this keyboard (after setting up your build environment):
15
16 make foxlab/key65/hotswap:default
17
18See 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/foxlab/key65/hotswap/rules.mk b/keyboards/foxlab/key65/hotswap/rules.mk
new file mode 100644
index 000000000..15ccf0649
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/rules.mk
@@ -0,0 +1,27 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5# Teensy halfkay
6# Pro Micro caterina
7# Atmel DFU atmel-dfu
8# LUFA DFU lufa-dfu
9# QMK DFU qmk-dfu
10# ATmega32A bootloadHID
11# ATmega328P USBasp
12BOOTLOADER = atmel-dfu
13
14BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
15MOUSEKEY_ENABLE = no # Mouse keys
16EXTRAKEY_ENABLE = yes # Audio control and System control
17CONSOLE_ENABLE = no # Console for debug
18COMMAND_ENABLE = no # Commands for debug and configuration
19# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
20SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
21# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
22NKRO_ENABLE = no # USB Nkey Rollover
23BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
24RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
25MIDI_ENABLE = no # MIDI support
26AUDIO_ENABLE = no # Audio output
27FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/foxlab/key65/universal/config.h b/keyboards/foxlab/key65/universal/config.h
new file mode 100644
index 000000000..10efc25d1
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/config.h
@@ -0,0 +1,172 @@
1/* Copyright 2020 Jumail Mundekkat / MxBlue
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "config_common.h"
20
21/* USB Device descriptor parameter */
22#define VENDOR_ID 0x464C // "FL"
23#define PRODUCT_ID 0x0004
24#define DEVICE_VER 0x0001
25#define MANUFACTURER Fox Lab
26#define PRODUCT Key 65 Universal
27#define DESCRIPTION Key 65 Universal
28
29/* key matrix size */
30#define MATRIX_ROWS 5
31#define MATRIX_COLS 16
32
33/*
34 * Keyboard Matrix Assignments
35 *
36 * Change this to how you wired your keyboard
37 * COLS: AVR pins used for columns, left to right
38 * ROWS: AVR pins used for rows, top to bottom
39 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
40 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
41 *
42 */
43#define MATRIX_ROW_PINS { D0, D1, F0, F4, F1 }
44#define MATRIX_COL_PINS { B1, F5, F6, F7, C7, C6, B6, B5, B4, D7, D6, D4, D5, D3, D2, B0 }
45
46/* COL2ROW, ROW2COL*/
47#define DIODE_DIRECTION COL2ROW
48
49#define BACKLIGHT_PIN B7
50// #define BACKLIGHT_BREATHING
51#define BACKLIGHT_LEVELS 5
52
53#define RGB_DI_PIN E2
54#ifdef RGB_DI_PIN
55 #define RGBLED_NUM 6
56 #define RGBLIGHT_HUE_STEP 8
57 #define RGBLIGHT_SAT_STEP 8
58 #define RGBLIGHT_VAL_STEP 8
59 #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
60 #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
61 #define RGBLIGHT_ANIMATIONS
62#endif
63
64/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
65#define DEBOUNCE 5
66
67/* define if matrix has ghost (lacks anti-ghosting diodes) */
68//#define MATRIX_HAS_GHOST
69
70/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
71#define LOCKING_SUPPORT_ENABLE
72/* Locking resynchronize hack */
73#define LOCKING_RESYNC_ENABLE
74
75/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
76 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
77 */
78// #define GRAVE_ESC_CTRL_OVERRIDE
79
80/*
81 * Force NKRO
82 *
83 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
84 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
85 * makefile for this to work.)
86 *
87 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
88 * until the next keyboard reset.
89 *
90 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
91 * fully operational during normal computer usage.
92 *
93 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
94 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
95 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
96 * power-up.
97 *
98 */
99//#define FORCE_NKRO
100
101/*
102 * Magic Key Options
103 *
104 * Magic keys are hotkey commands that allow control over firmware functions of
105 * the keyboard. They are best used in combination with the HID Listen program,
106 * found here: https://www.pjrc.com/teensy/hid_listen.html
107 *
108 * The options below allow the magic key functionality to be changed. This is
109 * useful if your keyboard/keypad is missing keys and you want magic key support.
110 *
111 */
112
113/* key combination for magic key command */
114/* defined by default; to change, uncomment and set to the combination you want */
115// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
116
117/* control how magic key switches layers */
118//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
119//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
120//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
121
122/* override magic key keymap */
123//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
124//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
125//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
126//#define MAGIC_KEY_HELP H
127//#define MAGIC_KEY_HELP_ALT SLASH
128//#define MAGIC_KEY_DEBUG D
129//#define MAGIC_KEY_DEBUG_MATRIX X
130//#define MAGIC_KEY_DEBUG_KBD K
131//#define MAGIC_KEY_DEBUG_MOUSE M
132//#define MAGIC_KEY_VERSION V
133//#define MAGIC_KEY_STATUS S
134//#define MAGIC_KEY_CONSOLE C
135//#define MAGIC_KEY_LAYER0 0
136//#define MAGIC_KEY_LAYER0_ALT GRAVE
137//#define MAGIC_KEY_LAYER1 1
138//#define MAGIC_KEY_LAYER2 2
139//#define MAGIC_KEY_LAYER3 3
140//#define MAGIC_KEY_LAYER4 4
141//#define MAGIC_KEY_LAYER5 5
142//#define MAGIC_KEY_LAYER6 6
143//#define MAGIC_KEY_LAYER7 7
144//#define MAGIC_KEY_LAYER8 8
145//#define MAGIC_KEY_LAYER9 9
146//#define MAGIC_KEY_BOOTLOADER B
147//#define MAGIC_KEY_BOOTLOADER_ALT ESC
148//#define MAGIC_KEY_LOCK CAPS
149//#define MAGIC_KEY_EEPROM E
150//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
151//#define MAGIC_KEY_NKRO N
152//#define MAGIC_KEY_SLEEP_LED Z
153
154/*
155 * Feature disable options
156 * These options are also useful to firmware size reduction.
157 */
158
159/* disable debug print */
160//#define NO_DEBUG
161
162/* disable print */
163//#define NO_PRINT
164
165/* disable action features */
166//#define NO_ACTION_LAYER
167//#define NO_ACTION_TAPPING
168//#define NO_ACTION_ONESHOT
169
170/* disable these deprecated features by default */
171#define NO_ACTION_MACRO
172#define NO_ACTION_FUNCTION
diff --git a/keyboards/foxlab/key65/universal/info.json b/keyboards/foxlab/key65/universal/info.json
new file mode 100644
index 000000000..ce95ecd8c
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/info.json
@@ -0,0 +1,306 @@
1{
2 "keyboard_name": "Key 65 Universal",
3 "url": "",
4 "maintainer": "qmk",
5 "width": 16,
6 "height": 5,
7 "layouts": {
8 "LAYOUT_65_ansi_blocker_split_bs": {
9 "key_count": 68,
10 "layout": [
11 {"label":"K00 (D0,B1)", "x":0, "y":0},
12 {"label":"K01 (D0,F5)", "x":1, "y":0},
13 {"label":"K02 (D0,F6)", "x":2, "y":0},
14 {"label":"K03 (D0,F7)", "x":3, "y":0},
15 {"label":"K04 (D0,C7)", "x":4, "y":0},
16 {"label":"K05 (D0,C6)", "x":5, "y":0},
17 {"label":"K06 (D0,B6)", "x":6, "y":0},
18 {"label":"K07 (D0,B5)", "x":7, "y":0},
19 {"label":"K08 (D0,B4)", "x":8, "y":0},
20 {"label":"K09 (D0,D7)", "x":9, "y":0},
21 {"label":"K0A (D0,D6)", "x":10, "y":0},
22 {"label":"K0B (D0,D4)", "x":11, "y":0},
23 {"label":"K0C (D0,D5)", "x":12, "y":0},
24 {"label":"K0D (D0,D3)", "x":13, "y":0},
25 {"label":"K0E (D0,D2)", "x":14, "y":0},
26 {"label":"K0F (D0,B0)", "x":15, "y":0},
27 {"label":"K10 (D1,B1)", "x":0, "y":1, "w":1.5},
28 {"label":"K11 (D1,F5)", "x":1.5, "y":1},
29 {"label":"K12 (D1,F6)", "x":2.5, "y":1},
30 {"label":"K13 (D1,F7)", "x":3.5, "y":1},
31 {"label":"K14 (D1,C7)", "x":4.5, "y":1},
32 {"label":"K15 (D1,C6)", "x":5.5, "y":1},
33 {"label":"K16 (D1,B6)", "x":6.5, "y":1},
34 {"label":"K17 (D1,B5)", "x":7.5, "y":1},
35 {"label":"K18 (D1,B4)", "x":8.5, "y":1},
36 {"label":"K19 (D1,D7)", "x":9.5, "y":1},
37 {"label":"K1A (D1,D6)", "x":10.5, "y":1},
38 {"label":"K1B (D1,D4)", "x":11.5, "y":1},
39 {"label":"K1C (D1,D5)", "x":12.5, "y":1},
40 {"label":"K1D (D1,D3)", "x":13.5, "y":1, "w":1.5},
41 {"label":"K1F (D1,B0)", "x":15, "y":1},
42 {"label":"K20 (F0,B1)", "x":0, "y":2, "w":1.75},
43 {"label":"K21 (F0,F5)", "x":1.75, "y":2},
44 {"label":"K22 (F0,F6)", "x":2.75, "y":2},
45 {"label":"K23 (F0,F7)", "x":3.75, "y":2},
46 {"label":"K24 (F0,C7)", "x":4.75, "y":2},
47 {"label":"K25 (F0,C6)", "x":5.75, "y":2},
48 {"label":"K26 (F0,B6)", "x":6.75, "y":2},
49 {"label":"K27 (F0,B5)", "x":7.75, "y":2},
50 {"label":"K28 (F0,B4)", "x":8.75, "y":2},
51 {"label":"K29 (F0,D7)", "x":9.75, "y":2},
52 {"label":"K2A (F0,D6)", "x":10.75, "y":2},
53 {"label":"K2B (F0,D4)", "x":11.75, "y":2},
54 {"label":"K2D (F0,D3)", "x":12.75, "y":2, "w":2.25},
55 {"label":"K2F (F0,B0)", "x":15, "y":2},
56 {"label":"K30 (F4,B1)", "x":0, "y":3, "w":2.25},
57 {"label":"K32 (F4,F6)", "x":2.25, "y":3},
58 {"label":"K33 (F4,F7)", "x":3.25, "y":3},
59 {"label":"K34 (F4,C7)", "x":4.25, "y":3},
60 {"label":"K35 (F4,C6)", "x":5.25, "y":3},
61 {"label":"K36 (F4,B6)", "x":6.25, "y":3},
62 {"label":"K37 (F4,B5)", "x":7.25, "y":3},
63 {"label":"K38 (F4,B4)", "x":8.25, "y":3},
64 {"label":"K39 (F4,D7)", "x":9.25, "y":3},
65 {"label":"K3A (F4,D6)", "x":10.25, "y":3},
66 {"label":"K3B (F4,D4)", "x":11.25, "y":3},
67 {"label":"K3C (F4,D5)", "x":12.25, "y":3, "w":1.75},
68 {"label":"K3D (F4,D3)", "x":14, "y":3},
69 {"label":"K3F (F4,B0)", "x":15, "y":3},
70 {"label":"K40 (F1,B1)", "x":0, "y":4, "w":1.25},
71 {"label":"K41 (F1,F5)", "x":1.25, "y":4, "w":1.25},
72 {"label":"K42 (F1,F6)", "x":2.5, "y":4, "w":1.25},
73 {"label":"K46 (F1,B6)", "x":3.75, "y":4, "w":6.25},
74 {"label":"K4A (F1,D6)", "x":10, "y":4, "w":1.25},
75 {"label":"K4B (F1,D4)", "x":11.25, "y":4, "w":1.25},
76 {"label":"K4C (F1,D5)", "x":13, "y":4},
77 {"label":"K4D (F1,D3)", "x":14, "y":4},
78 {"label":"K4F (F1,B0)", "x":15, "y":4}
79 ]
80 },
81 "LAYOUT_65_ansi_blocker_tsangan_split_bs": {
82 "key_count": 67,
83 "layout": [
84 {"label":"K00 (D0,B1)", "x":0, "y":0},
85 {"label":"K01 (D0,F5)", "x":1, "y":0},
86 {"label":"K02 (D0,F6)", "x":2, "y":0},
87 {"label":"K03 (D0,F7)", "x":3, "y":0},
88 {"label":"K04 (D0,C7)", "x":4, "y":0},
89 {"label":"K05 (D0,C6)", "x":5, "y":0},
90 {"label":"K06 (D0,B6)", "x":6, "y":0},
91 {"label":"K07 (D0,B5)", "x":7, "y":0},
92 {"label":"K08 (D0,B4)", "x":8, "y":0},
93 {"label":"K09 (D0,D7)", "x":9, "y":0},
94 {"label":"K0A (D0,D6)", "x":10, "y":0},
95 {"label":"K0B (D0,D4)", "x":11, "y":0},
96 {"label":"K0C (D0,D5)", "x":12, "y":0},
97 {"label":"K0D (D0,D3)", "x":13, "y":0},
98 {"label":"K0E (D0,D2)", "x":14, "y":0},
99 {"label":"K0F (D0,B0)", "x":15, "y":0},
100 {"label":"K10 (D1,B1)", "x":0, "y":1, "w":1.5},
101 {"label":"K11 (D1,F5)", "x":1.5, "y":1},
102 {"label":"K12 (D1,F6)", "x":2.5, "y":1},
103 {"label":"K13 (D1,F7)", "x":3.5, "y":1},
104 {"label":"K14 (D1,C7)", "x":4.5, "y":1},
105 {"label":"K15 (D1,C6)", "x":5.5, "y":1},
106 {"label":"K16 (D1,B6)", "x":6.5, "y":1},
107 {"label":"K17 (D1,B5)", "x":7.5, "y":1},
108 {"label":"K18 (D1,B4)", "x":8.5, "y":1},
109 {"label":"K19 (D1,D7)", "x":9.5, "y":1},
110 {"label":"K1A (D1,D6)", "x":10.5, "y":1},
111 {"label":"K1B (D1,D4)", "x":11.5, "y":1},
112 {"label":"K1C (D1,D5)", "x":12.5, "y":1},
113 {"label":"K1D (D1,D3)", "x":13.5, "y":1, "w":1.5},
114 {"label":"K1F (D1,B0)", "x":15, "y":1},
115 {"label":"K20 (F0,B1)", "x":0, "y":2, "w":1.75},
116 {"label":"K21 (F0,F5)", "x":1.75, "y":2},
117 {"label":"K22 (F0,F6)", "x":2.75, "y":2},
118 {"label":"K23 (F0,F7)", "x":3.75, "y":2},
119 {"label":"K24 (F0,C7)", "x":4.75, "y":2},
120 {"label":"K25 (F0,C6)", "x":5.75, "y":2},
121 {"label":"K26 (F0,B6)", "x":6.75, "y":2},
122 {"label":"K27 (F0,B5)", "x":7.75, "y":2},
123 {"label":"K28 (F0,B4)", "x":8.75, "y":2},
124 {"label":"K29 (F0,D7)", "x":9.75, "y":2},
125 {"label":"K2A (F0,D6)", "x":10.75, "y":2},
126 {"label":"K2B (F0,D4)", "x":11.75, "y":2},
127 {"label":"K2D (F0,D3)", "x":12.75, "y":2, "w":2.25},
128 {"label":"K2F (F0,B0)", "x":15, "y":2},
129 {"label":"K30 (F4,B1)", "x":0, "y":3, "w":2.25},
130 {"label":"K32 (F4,F6)", "x":2.25, "y":3},
131 {"label":"K33 (F4,F7)", "x":3.25, "y":3},
132 {"label":"K34 (F4,C7)", "x":4.25, "y":3},
133 {"label":"K35 (F4,C6)", "x":5.25, "y":3},
134 {"label":"K36 (F4,B6)", "x":6.25, "y":3},
135 {"label":"K37 (F4,B5)", "x":7.25, "y":3},
136 {"label":"K38 (F4,B4)", "x":8.25, "y":3},
137 {"label":"K39 (F4,D7)", "x":9.25, "y":3},
138 {"label":"K3A (F4,D6)", "x":10.25, "y":3},
139 {"label":"K3B (F4,D4)", "x":11.25, "y":3},
140 {"label":"K3C (F4,D5)", "x":12.25, "y":3, "w":1.75},
141 {"label":"K3D (F4,D3)", "x":14, "y":3},
142 {"label":"K3F (F4,B0)", "x":15, "y":3},
143 {"label":"K40 (F1,B1)", "x":0, "y":4, "w":1.5},
144 {"label":"K41 (F1,F5)", "x":1.5, "y":4},
145 {"label":"K42 (F1,F6)", "x":2.5, "y":4, "w":1.5},
146 {"label":"K46 (F1,B6)", "x":4, "y":4, "w":7},
147 {"label":"K4A (F1,D6)", "x":11, "y":4, "w":1.5},
148 {"label":"K4C (F1,D5)", "x":13, "y":4},
149 {"label":"K4D (F1,D3)", "x":14, "y":4},
150 {"label":"K4F (F1,B0)", "x":15, "y":4}
151 ]
152 },
153 "LAYOUT_iso_all": {
154 "key_count": 71,
155 "layout": [
156 {"label":"K00 (D0,B1)", "x":0, "y":0},
157 {"label":"K01 (D0,F5)", "x":1, "y":0},
158 {"label":"K02 (D0,F6)", "x":2, "y":0},
159 {"label":"K03 (D0,F7)", "x":3, "y":0},
160 {"label":"K04 (D0,C7)", "x":4, "y":0},
161 {"label":"K05 (D0,C6)", "x":5, "y":0},
162 {"label":"K06 (D0,B6)", "x":6, "y":0},
163 {"label":"K07 (D0,B5)", "x":7, "y":0},
164 {"label":"K08 (D0,B4)", "x":8, "y":0},
165 {"label":"K09 (D0,D7)", "x":9, "y":0},
166 {"label":"K0A (D0,D6)", "x":10, "y":0},
167 {"label":"K0B (D0,D4)", "x":11, "y":0},
168 {"label":"K0C (D0,D5)", "x":12, "y":0},
169 {"label":"K0D (D0,D3)", "x":13, "y":0},
170 {"label":"K0E (D0,D2)", "x":14, "y":0},
171 {"label":"K0F (D0,B0)", "x":15, "y":0},
172 {"label":"K10 (D1,B1)", "x":0, "y":1, "w":1.5},
173 {"label":"K11 (D1,F5)", "x":1.5, "y":1},
174 {"label":"K12 (D1,F6)", "x":2.5, "y":1},
175 {"label":"K13 (D1,F7)", "x":3.5, "y":1},
176 {"label":"K14 (D1,C7)", "x":4.5, "y":1},
177 {"label":"K15 (D1,C6)", "x":5.5, "y":1},
178 {"label":"K16 (D1,B6)", "x":6.5, "y":1},
179 {"label":"K17 (D1,B5)", "x":7.5, "y":1},
180 {"label":"K18 (D1,B4)", "x":8.5, "y":1},
181 {"label":"K19 (D1,D7)", "x":9.5, "y":1},
182 {"label":"K1A (D1,D6)", "x":10.5, "y":1},
183 {"label":"K1B (D1,D4)", "x":11.5, "y":1},
184 {"label":"K1C (D1,D5)", "x":12.5, "y":1},
185 {"label":"K1F (D1,B0)", "x":15, "y":1},
186 {"label":"K20 (F0,B1)", "x":0, "y":2, "w":1.75},
187 {"label":"K21 (F0,F5)", "x":1.75, "y":2},
188 {"label":"K22 (F0,F6)", "x":2.75, "y":2},
189 {"label":"K23 (F0,F7)", "x":3.75, "y":2},
190 {"label":"K24 (F0,C7)", "x":4.75, "y":2},
191 {"label":"K25 (F0,C6)", "x":5.75, "y":2},
192 {"label":"K26 (F0,B6)", "x":6.75, "y":2},
193 {"label":"K27 (F0,B5)", "x":7.75, "y":2},
194 {"label":"K28 (F0,B4)", "x":8.75, "y":2},
195 {"label":"K29 (F0,D7)", "x":9.75, "y":2},
196 {"label":"K2A (F0,D6)", "x":10.75, "y":2},
197 {"label":"K2B (F0,D4)", "x":11.75, "y":2},
198 {"label":"K1D (D1,D3)", "x":12.75, "y":2},
199 {"label":"K2D (F0,D3)", "x":13.75, "y":1, "w":1.25, "h":2},
200 {"label":"K2F (F0,B0)", "x":15, "y":2},
201 {"label":"K30 (F4,B1)", "x":0, "y":3, "w":1.25},
202 {"label":"K31 (F4,F5)", "x":1.25, "y":3},
203 {"label":"K32 (F4,F6)", "x":2.25, "y":3},
204 {"label":"K33 (F4,F7)", "x":3.25, "y":3},
205 {"label":"K34 (F4,C7)", "x":4.25, "y":3},
206 {"label":"K35 (F4,C6)", "x":5.25, "y":3},
207 {"label":"K36 (F4,B6)", "x":6.25, "y":3},
208 {"label":"K37 (F4,B5)", "x":7.25, "y":3},
209 {"label":"K38 (F4,B4)", "x":8.25, "y":3},
210 {"label":"K39 (F4,D7)", "x":9.25, "y":3},
211 {"label":"K3A (F4,D6)", "x":10.25, "y":3},
212 {"label":"K3B (F4,D4)", "x":11.25, "y":3},
213 {"label":"K3C (F4,D5)", "x":12.25, "y":3, "w":1.75},
214 {"label":"K3D (F4,D3)", "x":14, "y":3},
215 {"label":"K3F (F4,B0)", "x":15, "y":3},
216 {"label":"K40 (F1,B1)", "x":0, "y":4, "w":1.25},
217 {"label":"K41 (F1,F5)", "x":1.25, "y":4, "w":1.25},
218 {"label":"K42 (F1,F6)", "x":2.5, "y":4, "w":1.25},
219 {"label":"K44 (F1,C7)", "x":3.75, "y":4, "w":2.25},
220 {"label":"K46 (F1,B6)", "x":6, "y":4, "w":1.25},
221 {"label":"K48 (F1,B4)", "x":7.25, "y":4, "w":2.75},
222 {"label":"K4A (F1,D6)", "x":10, "y":4, "w":1.25},
223 {"label":"K4B (F1,D4)", "x":11.25, "y":4, "w":1.25},
224 {"label":"K4C (F1,D5)", "x":13, "y":4},
225 {"label":"K4D (F1,D3)", "x":14, "y":4},
226 {"label":"K4F (F1,B0)", "x":15, "y":4}
227 ]
228 },
229 "LAYOUT_all": {
230 "key_count": 71,
231 "layout": [
232 {"label":"K00 (D0,B1)", "x":0, "y":0},
233 {"label":"K01 (D0,F5)", "x":1, "y":0},
234 {"label":"K02 (D0,F6)", "x":2, "y":0},
235 {"label":"K03 (D0,F7)", "x":3, "y":0},
236 {"label":"K04 (D0,C7)", "x":4, "y":0},
237 {"label":"K05 (D0,C6)", "x":5, "y":0},
238 {"label":"K06 (D0,B6)", "x":6, "y":0},
239 {"label":"K07 (D0,B5)", "x":7, "y":0},
240 {"label":"K08 (D0,B4)", "x":8, "y":0},
241 {"label":"K09 (D0,D7)", "x":9, "y":0},
242 {"label":"K0A (D0,D6)", "x":10, "y":0},
243 {"label":"K0B (D0,D4)", "x":11, "y":0},
244 {"label":"K0C (D0,D5)", "x":12, "y":0},
245 {"label":"K0D (D0,D3)", "x":13, "y":0},
246 {"label":"K0E (D0,D2)", "x":14, "y":0},
247 {"label":"K0F (D0,B0)", "x":15, "y":0},
248 {"label":"K10 (D1,B1)", "x":0, "y":1, "w":1.5},
249 {"label":"K11 (D1,F5)", "x":1.5, "y":1},
250 {"label":"K12 (D1,F6)", "x":2.5, "y":1},
251 {"label":"K13 (D1,F7)", "x":3.5, "y":1},
252 {"label":"K14 (D1,C7)", "x":4.5, "y":1},
253 {"label":"K15 (D1,C6)", "x":5.5, "y":1},
254 {"label":"K16 (D1,B6)", "x":6.5, "y":1},
255 {"label":"K17 (D1,B5)", "x":7.5, "y":1},
256 {"label":"K18 (D1,B4)", "x":8.5, "y":1},
257 {"label":"K19 (D1,D7)", "x":9.5, "y":1},
258 {"label":"K1A (D1,D6)", "x":10.5, "y":1},
259 {"label":"K1B (D1,D4)", "x":11.5, "y":1},
260 {"label":"K1C (D1,D5)", "x":12.5, "y":1},
261 {"label":"K1D (D1,D3)", "x":13.5, "y":1, "w":1.5},
262 {"label":"K1F (D1,B0)", "x":15, "y":1},
263 {"label":"K20 (F0,B1)", "x":0, "y":2, "w":1.75},
264 {"label":"K21 (F0,F5)", "x":1.75, "y":2},
265 {"label":"K22 (F0,F6)", "x":2.75, "y":2},
266 {"label":"K23 (F0,F7)", "x":3.75, "y":2},
267 {"label":"K24 (F0,C7)", "x":4.75, "y":2},
268 {"label":"K25 (F0,C6)", "x":5.75, "y":2},
269 {"label":"K26 (F0,B6)", "x":6.75, "y":2},
270 {"label":"K27 (F0,B5)", "x":7.75, "y":2},
271 {"label":"K28 (F0,B4)", "x":8.75, "y":2},
272 {"label":"K29 (F0,D7)", "x":9.75, "y":2},
273 {"label":"K2A (F0,D6)", "x":10.75, "y":2},
274 {"label":"K2B (F0,D4)", "x":11.75, "y":2},
275 {"label":"K2D (F0,D3)", "x":12.75, "y":2, "w":2.25},
276 {"label":"K2F (F0,B0)", "x":15, "y":2},
277 {"label":"K30 (F4,B1)", "x":0, "y":3, "w":1.25},
278 {"label":"K31 (F4,F5)", "x":1.25, "y":3},
279 {"label":"K32 (F4,F6)", "x":2.25, "y":3},
280 {"label":"K33 (F4,F7)", "x":3.25, "y":3},
281 {"label":"K34 (F4,C7)", "x":4.25, "y":3},
282 {"label":"K35 (F4,C6)", "x":5.25, "y":3},
283 {"label":"K36 (F4,B6)", "x":6.25, "y":3},
284 {"label":"K37 (F4,B5)", "x":7.25, "y":3},
285 {"label":"K38 (F4,B4)", "x":8.25, "y":3},
286 {"label":"K39 (F4,D7)", "x":9.25, "y":3},
287 {"label":"K3A (F4,D6)", "x":10.25, "y":3},
288 {"label":"K3B (F4,D4)", "x":11.25, "y":3},
289 {"label":"K3C (F4,D5)", "x":12.25, "y":3, "w":1.75},
290 {"label":"K3D (F4,D3)", "x":14, "y":3},
291 {"label":"K3F (F4,B0)", "x":15, "y":3},
292 {"label":"K40 (F1,B1)", "x":0, "y":4, "w":1.25},
293 {"label":"K41 (F1,F5)", "x":1.25, "y":4, "w":1.25},
294 {"label":"K42 (F1,F6)", "x":2.5, "y":4, "w":1.25},
295 {"label":"K44 (F1,C7)", "x":3.75, "y":4, "w":2.25},
296 {"label":"K46 (F1,B6)", "x":6, "y":4, "w":1.25},
297 {"label":"K48 (F1,B4)", "x":7.25, "y":4, "w":2.75},
298 {"label":"K4A (F1,D6)", "x":10, "y":4, "w":1.25},
299 {"label":"K4B (F1,D4)", "x":11.25, "y":4, "w":1.25},
300 {"label":"K4C (F1,D5)", "x":13, "y":4},
301 {"label":"K4D (F1,D3)", "x":14, "y":4},
302 {"label":"K4F (F1,B0)", "x":15, "y":4}
303 ]
304 }
305 }
306}
diff --git a/keyboards/foxlab/key65/universal/keymaps/default/keymap.c b/keyboards/foxlab/key65/universal/keymaps/default/keymap.c
new file mode 100644
index 000000000..9c2071f01
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
1/* Copyright 2020 Jumail Mundekkat / MxBlue
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 [0] = LAYOUT_all(
21 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_BSPC, KC_DEL,
22 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_INS,
23 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,
24 KC_LSFT, KC_SPC, 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,
25 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
26 ),
27 [1] = LAYOUT_all(
28 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, _______, _______, _______,
29 _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
30 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
31 _______, _______, _______, _______, BL_TOGG, BL_DEC, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______,
32 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
33 ),
34
35};
36
diff --git a/keyboards/foxlab/key65/universal/keymaps/via/keymap.c b/keyboards/foxlab/key65/universal/keymaps/via/keymap.c
new file mode 100644
index 000000000..8d44f2c46
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
1/* Copyright 2020 Jumail Mundekkat / MxBlue
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 [0] = LAYOUT_all(
21 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_BSPC, KC_DEL,
22 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_INS,
23 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,
24 KC_LSFT, KC_SPC, 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,
25 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
26 ),
27 [1] = LAYOUT_all(
28 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, _______, _______, _______,
29 _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
30 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
31 _______, _______, _______, _______, BL_TOGG, BL_DEC, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______,
32 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
33 ),
34 [2] = LAYOUT_all(
35 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
36 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
37 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
38 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
39 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
40 ),
41 [3] = LAYOUT_all(
42 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
43 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
44 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
45 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
46 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
47 ),
48};
diff --git a/keyboards/foxlab/key65/universal/keymaps/via/rules.mk b/keyboards/foxlab/key65/universal/keymaps/via/rules.mk
new file mode 100644
index 000000000..1e5b99807
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/keymaps/via/rules.mk
@@ -0,0 +1 @@
VIA_ENABLE = yes
diff --git a/keyboards/foxlab/key65/universal/readme.md b/keyboards/foxlab/key65/universal/readme.md
new file mode 100644
index 000000000..967b9565f
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/readme.md
@@ -0,0 +1,22 @@
1# Foxlab Key 65 Universal
2
3![Key 65](https://i.imgur.com/28Qck8ul.jpg)
4
5Key 65 is featured with the three-layer case and dual-gasket structure. The plate mounting system is an improved version of the gasket sandwich on Leaf 60. In addition, we add gaskets between the middle case and the bottom case. There's an optional rubber sheet between the PCB and the plate. The numerous options will offer you the most freedom to make the keyboard look and feel as you wish.
6
7* Keyboard Maintainer: QMK
8* Hardware Supported: Key 65 Universal PCB
9* Hardware Availability: [Group Buy](https://geekhack.org/index.php?topic=102609.0)
10
11This version is for the universal variant with the layouts below available:
12![Layout](https://i.imgur.com/MQTZV0ol.png)
13
14Make example for this keyboard (after setting up your build environment):
15
16 make foxlab/key65/universal:default
17
18See 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).
19
20## RGB LED support
21
22The universal PCB supports RGB LEDs as an LED strip, but is not supplied with one. To use RGB LEDs, you should configure the RGBLED_NUM to match the number of LEDs on your strip.
diff --git a/keyboards/foxlab/key65/universal/rules.mk b/keyboards/foxlab/key65/universal/rules.mk
new file mode 100644
index 000000000..24a570cf2
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/rules.mk
@@ -0,0 +1,29 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5# Teensy halfkay
6# Pro Micro caterina
7# Atmel DFU atmel-dfu
8# LUFA DFU lufa-dfu
9# QMK DFU qmk-dfu
10# ATmega32A bootloadHID
11# ATmega328P USBasp
12BOOTLOADER = atmel-dfu
13
14BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
15MOUSEKEY_ENABLE = no # Mouse keys
16EXTRAKEY_ENABLE = yes # Audio control and System control
17CONSOLE_ENABLE = no # Console for debug
18COMMAND_ENABLE = no # Commands for debug and configuration
19# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
20SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
21# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
22NKRO_ENABLE = no # USB Nkey Rollover
23BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
24RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
25MIDI_ENABLE = no # MIDI support
26AUDIO_ENABLE = no # Audio output
27FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
28
29LAYOUTS = 65_ansi_blocker_split_bs # Support community layouts
diff --git a/keyboards/foxlab/key65/universal/universal.c b/keyboards/foxlab/key65/universal/universal.c
new file mode 100644
index 000000000..361f3ad7f
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/universal.c
@@ -0,0 +1,34 @@
1/* Copyright 2020 Jumail Mundekkat / MxBlue
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include "universal.h"
18
19void keyboard_pre_init_kb(void) {
20 led_init_ports();
21 keyboard_pre_init_user();
22}
23
24void led_init_ports(void) {
25 setPinOutput(E6);
26 writePinHigh(E6);
27}
28
29bool led_update_kb(led_t led_state) {
30 if (led_update_user(led_state)) {
31 writePin(E6, !led_state.caps_lock);
32 }
33 return true;
34}
diff --git a/keyboards/foxlab/key65/universal/universal.h b/keyboards/foxlab/key65/universal/universal.h
new file mode 100644
index 000000000..9d92030c8
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/universal.h
@@ -0,0 +1,75 @@
1/* Copyright 2020 Jumail Mundekkat / MxBlue
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
20
21#define LAYOUT_65_ansi_blocker_split_bs( \
22 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
23 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \
24 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2F, \
25 K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3F, \
26 K40, K41, K42, K46, K4A, K4B, K4C, K4D, K4F \
27) { \
28 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
29 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO, K1F }, \
30 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO, K2F }, \
31 { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, K3F }, \
32 { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, KC_NO, K4F }, \
33}
34
35#define LAYOUT_65_ansi_blocker_tsangan_split_bs( \
36 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
37 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \
38 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2F, \
39 K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3F, \
40 K40, K41, K42, K46, K4B, K4C, K4D, K4F \
41) { \
42 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
43 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO, K1F }, \
44 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO, K2F }, \
45 { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, K3F }, \
46 { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, KC_NO, K4B, K4C, K4D, KC_NO, K4F }, \
47}
48
49#define LAYOUT_iso_all( \
50 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
51 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1F, \
52 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K1D, K2D, K2F, \
53 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3F, \
54 K40, K41, K42, K44, K46, K48, K4A, K4B, K4C, K4D, K4F \
55) { \
56 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
57 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO, K1F }, \
58 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO, K2F }, \
59 { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, K3F }, \
60 { K40, K41, K42, KC_NO, K44, KC_NO, K46, KC_NO, K48, KC_NO, K4A, K4B, K4C, K4D, KC_NO, K4F }, \
61}
62
63#define LAYOUT_all( \
64 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
65 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \
66 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2F, \
67 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3F, \
68 K40, K41, K42, K44, K46, K48, K4A, K4B, K4C, K4D, K4F \
69) { \
70 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
71 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO, K1F }, \
72 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO, K2F }, \
73 { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, K3F }, \
74 { K40, K41, K42, KC_NO, K44, KC_NO, K46, KC_NO, K48, KC_NO, K4A, K4B, K4C, K4D, KC_NO, K4F }, \
75}