aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorskullydazed <skullydazed@users.noreply.github.com>2018-02-10 17:09:47 -0800
committerGitHub <noreply@github.com>2018-02-10 17:09:47 -0800
commit994d94140e16f60515f193337309d89af6e6695e (patch)
treeb5f779a25f5a064e329bdb5944eeeb6a028b8e05
parentfa72d4aa5ad278bd830fdea6da4e6d1311bba96d (diff)
downloadqmk_firmware-994d94140e16f60515f193337309d89af6e6695e.tar.gz
qmk_firmware-994d94140e16f60515f193337309d89af6e6695e.zip
Clueboard hotswap support (#2376)
-rw-r--r--keyboards/clueboard/66_hotswap/66_hotswap.c1
-rw-r--r--keyboards/clueboard/66_hotswap/66_hotswap.h10
-rw-r--r--keyboards/clueboard/66_hotswap/config.h63
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/config.h53
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/gen1.c63
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/gen1.h71
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/info.json3
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/rules.mk1
-rw-r--r--keyboards/clueboard/66_hotswap/info.json12
-rw-r--r--keyboards/clueboard/66_hotswap/keymaps/66_ansi/keymap.c36
-rw-r--r--keyboards/clueboard/66_hotswap/keymaps/66_ansi/readme.md11
-rw-r--r--keyboards/clueboard/66_hotswap/keymaps/default/keymap.c36
-rw-r--r--keyboards/clueboard/66_hotswap/keymaps/default/readme.md8
-rw-r--r--keyboards/clueboard/66_hotswap/readme.md16
-rw-r--r--keyboards/clueboard/66_hotswap/rules.mk23
15 files changed, 407 insertions, 0 deletions
diff --git a/keyboards/clueboard/66_hotswap/66_hotswap.c b/keyboards/clueboard/66_hotswap/66_hotswap.c
new file mode 100644
index 000000000..cc38050a9
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/66_hotswap.c
@@ -0,0 +1 @@
#include "66_hotswap.h"
diff --git a/keyboards/clueboard/66_hotswap/66_hotswap.h b/keyboards/clueboard/66_hotswap/66_hotswap.h
new file mode 100644
index 000000000..61c6fe359
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/66_hotswap.h
@@ -0,0 +1,10 @@
1#ifndef CLUEBOARD_H
2#define CLUEBOARD_H
3
4#include "quantum.h"
5
6#ifdef KEYBOARD_clueboard_66_hotswap_gen1
7 #include "gen1.h"
8#endif
9
10#endif
diff --git a/keyboards/clueboard/66_hotswap/config.h b/keyboards/clueboard/66_hotswap/config.h
new file mode 100644
index 000000000..59a0abc7f
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/config.h
@@ -0,0 +1,63 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#ifndef CLUEBOARD_66_CONFIG_H
19#define CLUEBOARD_66_CONFIG_H
20
21#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xC1ED
25#define MANUFACTURER Clueboard
26#define PRODUCT Clueboard 66% HotSwap
27#define DESCRIPTION QMK keyboard firmware for Clueboard 66%
28
29/* COL2ROW or ROW2COL */
30#define DIODE_DIRECTION COL2ROW
31
32/* Set 0 if debouncing isn't needed */
33#define DEBOUNCING_DELAY 5
34
35/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
36#define LOCKING_SUPPORT_ENABLE
37/* Locking resynchronize hack */
38#define LOCKING_RESYNC_ENABLE
39
40/* key combination for command */
41#define IS_COMMAND() ( \
42 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
43)
44
45/*
46 * Feature disable options
47 * These options are also useful to firmware size reduction.
48 */
49
50/* disable debug print */
51//#define NO_DEBUG
52
53/* disable print */
54//#define NO_PRINT
55
56/* disable action features */
57//#define NO_ACTION_LAYER
58//#define NO_ACTION_TAPPING
59//#define NO_ACTION_ONESHOT
60//#define NO_ACTION_MACRO
61//#define NO_ACTION_FUNCTION
62
63#endif
diff --git a/keyboards/clueboard/66_hotswap/gen1/config.h b/keyboards/clueboard/66_hotswap/gen1/config.h
new file mode 100644
index 000000000..d8163f538
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/gen1/config.h
@@ -0,0 +1,53 @@
1#ifndef CLUEBOARD_66_REV3_CONFIG_H
2#define CLUEBOARD_66_REV3_CONFIG_H
3
4#include "config_common.h"
5
6#define PRODUCT_ID 0x2390
7#define DEVICE_VER 0x0001
8
9/* key matrix size */
10#define MATRIX_ROWS 10
11#define MATRIX_COLS 8
12
13// ROWS: Top to bottom, COLS: Left to right
14/* Row pin configuration
15* row: 0 1 2 3 4 5 6 7 8 9
16* pin: B2 C7 C6 B6 B5 B0 B3 D5 D3 D2
17*/
18
19#define MATRIX_ROW_PINS { B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 }
20/* Column pin configuration
21 * col: 0 1 2 3 4 5 6 7
22 * pin: F0 F1 F4 F5 F6 F7 E6 B1
23 */
24#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, E6, B1 }
25#define UNUSED_PINS
26
27/* Speaker configuration
28 */
29//#define SPEAKER_PIN B7 // FIXME: find the correct name for this define
30
31/* Backlight configuration
32 */
33#define BACKLIGHT_LEVELS 1
34
35/* Underlight configuration
36 */
37#define RGB_DI_PIN D7
38#define RGBLED_NUM 26 // Number of LEDs
39#define RGBLIGHT_HUE_STEP 32
40#define RGBLIGHT_SAT_STEP 17
41#define RGBLIGHT_VAL_STEP 17
42
43#define RGBLIGHT_ANIMATIONS
44#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
45#define RGBLIGHT_EFFECT_BREATHE_MAX 200
46#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 666*2
47#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1
48#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 4 // How many LEDs wide to light up
49#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 16 // The led to start at
50#define RGBLIGHT_EFFECT_KNIGHT_LED_NUM 8 // How many LEDs to travel
51#define RGBLIGHT_EFFECT_SNAKE_LENGTH 4 // How many LEDs wide to light up
52
53#endif
diff --git a/keyboards/clueboard/66_hotswap/gen1/gen1.c b/keyboards/clueboard/66_hotswap/gen1/gen1.c
new file mode 100644
index 000000000..01f74bc50
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/gen1/gen1.c
@@ -0,0 +1,63 @@
1#include "gen1.h"
2#include <avr/io.h>
3#include "backlight.h"
4#include "print.h"
5
6void matrix_init_kb(void) {
7 // put your keyboard start-up code here
8 // runs once when the firmware starts up
9 matrix_init_user();
10 led_init_ports();
11
12 // JTAG disable for PORT F. write JTD bit twice within four cycles.
13 MCUCR |= (1<<JTD);
14 MCUCR |= (1<<JTD);
15}
16
17
18void matrix_scan_kb(void) {
19 matrix_scan_user();
20}
21
22void backlight_init_ports(void) {
23 print("init_backlight_pin()\n");
24 // Set our LED pins as output
25 DDRD |= (1<<0); // Esc
26 DDRD |= (1<<4); // Page Up
27 DDRD |= (1<<1); // Arrows
28
29 // Set our LED pins low
30 PORTD &= ~(1<<0); // Esc
31 PORTD &= ~(1<<4); // Page Up
32 PORTD &= ~(1<<1); // Arrows
33}
34
35void backlight_set(uint8_t level) {
36 if ( level == 0 ) {
37 // Turn off light
38 PORTD |= (1<<0); // Esc
39 PORTD |= (1<<4); // Page Up
40 PORTD |= (1<<1); // Arrows
41 } else {
42 // Turn on light
43 PORTD &= ~(1<<0); // Esc
44 PORTD &= ~(1<<4); // Page Up
45 PORTD &= ~(1<<1); // Arrows
46 }
47}
48
49void led_init_ports() {
50 // * Set our LED pins as output
51 DDRB |= (1<<4);
52}
53
54void led_set_kb(uint8_t usb_led) {
55 DDRB |= (1<<4);
56 if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
57 // Turn capslock on
58 PORTB |= (1<<4);
59 } else {
60 // Turn capslock off
61 PORTB &= ~(1<<4);
62 }
63}
diff --git a/keyboards/clueboard/66_hotswap/gen1/gen1.h b/keyboards/clueboard/66_hotswap/gen1/gen1.h
new file mode 100644
index 000000000..293620ac0
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/gen1/gen1.h
@@ -0,0 +1,71 @@
1#ifndef gen1_H
2#define gen1_H
3
4#include "66_hotswap.h"
5
6/* Clueboard matrix layout
7 * ,-----------------------------------------------------------. ,---.
8 * | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54| 56 | | 57|
9 * |-----------------------------------------------------------| |---|
10 * | 10| 11| 12| 13| 14| 15| 16| 17| 60| 61| 62| 63| 64| 65| | 67|
11 * |-----------------------------------------------------------| `---'
12 * | 20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73| 74| 75|
13 * |------------------------------------------------------------.
14 * | 30| 31| 32| 33| 34| 35| 36| 37| 80| 81| 82| 83| 84| 85|86|
15 * |------------------------------------------------------------------.
16 * | 40| 41| 42| 43| 45| 46| 90| 92| 93| 94| 95| 96| 97|
17 * `------------------------------------------------------------------'
18 * ,-----------------------------------------------------------. ,---.
19 * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Ins|
20 * |-----------------------------------------------------------| |---|
21 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|
22 * |-----------------------------------------------------------| `---'
23 * |Caps | A| S| D| F| G| H| J| k| L| ;| '|Enter |
24 * |--------------------------------------------------------------.
25 * |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up|
26 * |------------------------------------------------------------------.
27 * |Ctrl|Alt|Gui | Space| Space|Gui |Alt |Fn |Ctrl|Left|Down|Rgt|
28 * `------------------------------------------------------------------'
29 */
30// The first section contains all of the arguments
31// The second converts the arguments into a two-dimensional array
32
33#define LAYOUT( \
34 k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
35 k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
36 k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
37 k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k84, k85, k86, \
38 k40, k41, k42, k45, k46, k90, k92, k93, k94, k95, k96, k97 \
39) { \
40 { k00, k01, k02, k03, k04, k05, k06, k07 }, \
41 { k10, k11, k12, k13, k14, k15, k16, k17 }, \
42 { k20, k21, k22, k23, k24, k25, k26, k27 }, \
43 { k30, k31, k32, k33, k34, k35, k36, k37 }, \
44 { k40, k41, k42, KC_NO, KC_NO, k45, k46, KC_NO }, \
45 { k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
46 { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
47 { k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
48 { k80, k81, k82, k83, k84, k85, k86, KC_NO }, \
49 { k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
50}
51
52#define LAYOUT_66_ansi( \
53 k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
54 k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
55 k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k75, \
56 k30, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k85, k86, \
57 k40, k41, k42, k46, k92, k93, k94, k95, k96, k97 \
58) { \
59 { k00, k01, k02, k03, k04, k05, k06, k07 }, \
60 { k10, k11, k12, k13, k14, k15, k16, k17 }, \
61 { k20, k21, k22, k23, k24, k25, k26, k27 }, \
62 { k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
63 { k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
64 { k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
65 { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
66 { k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
67 { k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
68 { KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
69}
70
71#endif
diff --git a/keyboards/clueboard/66_hotswap/gen1/info.json b/keyboards/clueboard/66_hotswap/gen1/info.json
new file mode 100644
index 000000000..be66fe3e9
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/gen1/info.json
@@ -0,0 +1,3 @@
1{
2 "identifier":"c1ed:2390:0001"
3}
diff --git a/keyboards/clueboard/66_hotswap/gen1/rules.mk b/keyboards/clueboard/66_hotswap/gen1/rules.mk
new file mode 100644
index 000000000..54a2685bf
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/gen1/rules.mk
@@ -0,0 +1 @@
BACKLIGHT_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/clueboard/66_hotswap/info.json b/keyboards/clueboard/66_hotswap/info.json
new file mode 100644
index 000000000..b98652cf9
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/info.json
@@ -0,0 +1,12 @@
1{
2 "keyboard_name": "Clueboard 66% HotSwap",
3 "processor": "atmega32u4",
4 "bootloader": "atmel-dfu",
5 "width": 16.5,
6 "height": 5,
7 "layouts": {
8 "KEYMAP": {
9 "layout": [{"x": 0, "y": 0, "w": 1, "label": "GRAVE"}, {"x": 1, "y": 0, "w": 1, "label": "1"}, {"x": 2, "y": 0, "w": 1, "label": "2"}, {"x": 3, "y": 0, "w": 1, "label": "3"}, {"x": 4, "y": 0, "w": 1, "label": "4"}, {"x": 5, "y": 0, "w": 1, "label": "5"}, {"x": 6, "y": 0, "w": 1, "label": "6"}, {"x": 7, "y": 0, "w": 1, "label": "7"}, {"x": 8, "y": 0, "w": 1, "label": "8"}, {"x": 9, "y": 0, "w": 1, "label": "9"}, {"x": 10, "y": 0, "w": 1, "label": "0"}, {"x": 11, "y": 0, "w": 1, "label": "DASH"}, {"x": 12, "y": 0, "w": 1, "label": "EQUALSIGN"}, {"x": 13, "y": 0, "w": 1, "label": "YEN"}, {"x": 14, "y": 0, "w": 1, "label": "BACKSPACE"}, {"x": 15.5, "y": 0, "w": 1, "label": "PAGEUP"}, {"x": 0, "y": 1, "w": 1.5, "label": "TAB"}, {"x": 1.5, "y": 1, "w": 1, "label": "Q"}, {"x": 2.5, "y": 1, "w": 1, "label": "W"}, {"x": 3.5, "y": 1, "w": 1, "label": "E"}, {"x": 4.5, "y": 1, "w": 1, "label": "R"}, {"x": 5.5, "y": 1, "w": 1, "label": "T"}, {"x": 6.5, "y": 1, "w": 1, "label": "Y"}, {"x": 7.5, "y": 1, "w": 1, "label": "U"}, {"x": 8.5, "y": 1, "w": 1, "label": "I"}, {"x": 9.5, "y": 1, "w": 1, "label": "O"}, {"x": 10.5, "y": 1, "w": 1, "label": "P"}, {"x": 11.5, "y": 1, "w": 1, "label": "LBRACKET"}, {"x": 12.5, "y": 1, "w": 1, "label": "RBRACKET"}, {"x": 13.5, "y": 1, "w": 1.5, "label": "BACKSLASH"}, {"x": 15.5, "y": 1, "w": 1, "label": "PAGEDOWN"}, {"x": 0, "y": 2, "w": 1.75, "label": "CAPSLOCK"}, {"x": 1.75, "y": 2, "w": 1, "label": "A"}, {"x": 2.75, "y": 2, "w": 1, "label": "S"}, {"x": 3.75, "y": 2, "w": 1, "label": "D"}, {"x": 4.75, "y": 2, "w": 1, "label": "F"}, {"x": 5.75, "y": 2, "w": 1, "label": "G"}, {"x": 6.75, "y": 2, "w": 1, "label": "H"}, {"x": 7.75, "y": 2, "w": 1, "label": "J"}, {"x": 8.75, "y": 2, "w": 1, "label": "K"}, {"x": 9.75, "y": 2, "w": 1, "label": "L"}, {"x": 10.75, "y": 2, "w": 1, "label": "SEMICOLON"}, {"x": 11.75, "y": 2, "w": 1, "label": "QUOTE"}, {"x": 12.75, "y": 2, "w": 1, "label": "ISOHASH"}, {"x": 13.75, "y": 2, "w": 1.25, "label": "ENTER"}, {"x": 0, "y": 3, "w": 1.25, "label": "LSHIFT"}, {"x": 1.25, "y": 3, "w": 1, "label": "ISOBACKSLASH"}, {"x": 2.25, "y": 3, "w": 1, "label": "Z"}, {"x": 3.25, "y": 3, "w": 1, "label": "X"}, {"x": 4.25, "y": 3, "w": 1, "label": "C"}, {"x": 5.25, "y": 3, "w": 1, "label": "V"}, {"x": 6.25, "y": 3, "w": 1, "label": "B"}, {"x": 7.25, "y": 3, "w": 1, "label": "N"}, {"x": 8.25, "y": 3, "w": 1, "label": "M"}, {"x": 9.25, "y": 3, "w": 1, "label": "COMMA"}, {"x": 10.25, "y": 3, "w": 1, "label": "PERIOD"}, {"x": 11.25, "y": 3, "w": 1, "label": "SLASH"}, {"x": 12.25, "y": 3, "w": 1, "label": "JPBACKSLASH"}, {"x": 13.25, "y": 3, "w": 1.25, "label": "RSHIFT"}, {"x": 14.5, "y": 3, "w": 1, "label": "UP"}, {"x": 0, "y": 4, "w": 1.25, "label": "LCTRL"}, {"x": 1.25, "y": 4, "w": 1, "label": "LALT"}, {"x": 2.25, "y": 4, "w": 1.25, "label": "LCMD"}, {"x": 3.5, "y": 4, "w": 1.25, "label": "MUHENKAN"}, {"x": 4.75, "y": 4, "w": 2, "label": "SPACE1"}, {"x": 6.75, "y": 4, "w": 2, "label": "SPACE2"}, {"x": 8.75, "y": 4, "w": 1.25, "label": "HENKAN"}, {"x": 10, "y": 4, "w": 1.25, "label": "RCMD"}, {"x": 11.25, "y": 4, "w": 1, "label": "RCTRL"}, {"x": 12.25, "y": 4, "w": 1.25, "label": "FN"}, {"x": 13.5, "y": 4, "w": 1, "label": "LEFT"}, {"x": 14.5, "y": 4, "w": 1, "label": "DOWN"}, {"x": 15.5, "y": 4, "w": 1, "label": "RIGHT"}]
10 }
11 }
12}
diff --git a/keyboards/clueboard/66_hotswap/keymaps/66_ansi/keymap.c b/keyboards/clueboard/66_hotswap/keymaps/66_ansi/keymap.c
new file mode 100644
index 000000000..977a3501b
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/keymaps/66_ansi/keymap.c
@@ -0,0 +1,36 @@
1#include "66_hotswap.h"
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5#define _BL 0
6#define _FL 1
7#define _CL 2
8
9const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
10 /* Keymap _BL: Base Layer (Default Layer)
11 */
12[_BL] = LAYOUT_66_ansi(
13 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_PGUP, \
14 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_PGDN, \
15 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, \
16 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, \
17 KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(_FL),KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT),
18
19 /* Keymap _FL: Function Layer
20 */
21[_FL] = LAYOUT_66_ansi(
22 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, KC_VOLU, \
23 _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_MUTE, KC_VOLD, \
24 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
25 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_PGUP, \
26 _______,_______,_______, _______, _______,MO(_FL),_______,KC_HOME,KC_PGDN,KC_END),
27
28 /* Keymap _CL: Control layer
29 */
30[_CL] = LAYOUT_66_ansi(
31 BL_STEP,RGB_M_P,RGB_M_B,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______, RGB_TOG, RGB_VAI, \
32 _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_VAD, \
33 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
34 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, RGB_SAI, \
35 _______,_______,_______, RGB_MOD, _______,MO(_FL),_______,RGB_HUD,RGB_SAD,RGB_HUI),
36};
diff --git a/keyboards/clueboard/66_hotswap/keymaps/66_ansi/readme.md b/keyboards/clueboard/66_hotswap/keymaps/66_ansi/readme.md
new file mode 100644
index 000000000..25b5d7eb1
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/keymaps/66_ansi/readme.md
@@ -0,0 +1,11 @@
1![Clueboard Layout Image](http://i.imgur.com/7Capi8W.png)
2
3# Basic Clueboard 66% Hotswap Layout
4
5This is the default layout that comes flashed on every Clueboard. For the most
6part it's a straightforward and easy to follow layout. The only unusual key is
7the key in the upper left, which sends Escape normally, but Grave when any of
8the Ctrl, Alt, or GUI modifiers are held down.
9
10This uses `LAYOUT_66_ansi`, which is compatable with the `66_ansi` community
11layout.
diff --git a/keyboards/clueboard/66_hotswap/keymaps/default/keymap.c b/keyboards/clueboard/66_hotswap/keymaps/default/keymap.c
new file mode 100644
index 000000000..240eb0e97
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
1#include "66_hotswap.h"
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5#define _BL 0
6#define _FL 1
7#define _CL 2
8
9const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
10 /* Keymap _BL: Base Layer (Default Layer)
11 */
12[_BL] = LAYOUT(
13 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_PGUP, \
14 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_PGDN, \
15 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, \
16 KC_LSFT,MO(_FL),KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,MO(_FL), KC_RSFT, KC_UP, \
17 KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_SPC, KC_RGUI,KC_RALT,MO(_FL),KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT),
18
19 /* Keymap _FL: Function Layer
20 */
21[_FL] = LAYOUT(
22 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, KC_VOLU, \
23 _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_MUTE, KC_VOLD, \
24 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
25 _______,MO(_FL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,MO(_FL),_______, KC_PGUP, \
26 _______,_______,_______, _______,_______, _______,_______,MO(_FL),_______,KC_HOME,KC_PGDN,KC_END),
27
28 /* Keymap _CL: Control layer
29 */
30[_CL] = LAYOUT(
31 BL_STEP,RGB_M_P,RGB_M_B,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______, RGB_TOG, RGB_VAI, \
32 _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_VAD, \
33 _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
34 _______,MO(_FL),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,MO(_FL),_______, RGB_SAI, \
35 _______,_______,_______, RGB_MOD,RGB_MOD, _______,_______,MO(_FL),_______,RGB_HUD,RGB_SAD,RGB_HUI),
36};
diff --git a/keyboards/clueboard/66_hotswap/keymaps/default/readme.md b/keyboards/clueboard/66_hotswap/keymaps/default/readme.md
new file mode 100644
index 000000000..66e523088
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/keymaps/default/readme.md
@@ -0,0 +1,8 @@
1![Clueboard Layout Image](http://i.imgur.com/7Capi8W.png)
2
3# Default Clueboard 66% Hotswap Layout
4
5This is the default layout that comes flashed on every Clueboard. For the most
6part it's a straightforward and easy to follow layout. The only unusual key is
7the key in the upper left, which sends Escape normally, but Grave when any of
8the Ctrl, Alt, or GUI modifiers are held down.
diff --git a/keyboards/clueboard/66_hotswap/readme.md b/keyboards/clueboard/66_hotswap/readme.md
new file mode 100644
index 000000000..014c761b0
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/readme.md
@@ -0,0 +1,16 @@
1# Clueboard 66% HotSwap
2
3![Clueboard](https://static1.squarespace.com/static/55c13bdee4b099be5dcb82eb/t/5867eeaad2b857fd0d196f4b/1494021396651/IMGP4201.jpg?format=1500w)
4
5A fully customizable 66% keyboard with Hot Swap sockets.
6
7* Keyboard Maintainer: [Zach White](https://github.com/skullydazed)
8* Hardware Supported: Clueboard 66% HotSwap PCB
9 * 2.9
10* Hardware Availability: [clueboard.co](https://clueboard.co/)
11
12Make example for this keyboard (after setting up your build environment):
13
14 make clueboard/66_hotswap:default
15
16See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/clueboard/66_hotswap/rules.mk b/keyboards/clueboard/66_hotswap/rules.mk
new file mode 100644
index 000000000..1a22696e4
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/rules.mk
@@ -0,0 +1,23 @@
1DEFAULT_FOLDER = clueboard/66_hotswap/gen1
2LAYOUTS = 66_ansi
3MCU = atmega32u4
4F_CPU = 16000000
5ARCH = AVR8
6F_USB = $(F_CPU)
7OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
8OPT_DEFS += -DBOOTLOADER_SIZE=4096
9
10# Build Options
11# comment out to disable the options.
12#
13BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
14MOUSEKEY_ENABLE = no # Mouse keys(+4700)
15EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
16CONSOLE_ENABLE = yes # Console for debug(+400)
17COMMAND_ENABLE = yes # Commands for debug and configuration
18NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
19AUDIO_ENABLE = no
20RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
21MIDI_ENABLE = no # MIDI controls
22UNICODE_ENABLE = no # Unicode
23BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID