summaryrefslogtreecommitdiffstats
path: root/keyboards/massdrop/ctrl
diff options
context:
space:
mode:
authorlokher <lokher@gmail.com>2022-12-06 17:04:10 +0800
committerlokher <lokher@gmail.com>2022-12-06 17:04:10 +0800
commit27fc28fd2ff52e079a5bc58d6aaea4c752420615 (patch)
tree7ac943fb1ba4f430a7220efd18f66f6a77205c30 /keyboards/massdrop/ctrl
parente736133392fe6427cfb995da0787337189828272 (diff)
parent2709b6ed616f8012ff4cfd3ee69a822a8d188351 (diff)
Merge upstream master
Diffstat (limited to 'keyboards/massdrop/ctrl')
-rw-r--r--keyboards/massdrop/ctrl/config.h176
-rw-r--r--keyboards/massdrop/ctrl/config_led.c85
-rw-r--r--keyboards/massdrop/ctrl/config_led.h192
-rw-r--r--keyboards/massdrop/ctrl/info.json104
-rw-r--r--keyboards/massdrop/ctrl/keymaps/R167/keymap.c143
-rw-r--r--keyboards/massdrop/ctrl/keymaps/default/keymap.c118
-rw-r--r--keyboards/massdrop/ctrl/keymaps/default_md/keymap.c299
-rw-r--r--keyboards/massdrop/ctrl/keymaps/endgame/config.h103
-rw-r--r--keyboards/massdrop/ctrl/keymaps/endgame/config_led.c83
-rw-r--r--keyboards/massdrop/ctrl/keymaps/endgame/keymap.c395
-rw-r--r--keyboards/massdrop/ctrl/keymaps/foxx1337/config.h88
-rw-r--r--keyboards/massdrop/ctrl/keymaps/foxx1337/hid_protocol.h80
-rw-r--r--keyboards/massdrop/ctrl/keymaps/foxx1337/keymap.c268
-rw-r--r--keyboards/massdrop/ctrl/keymaps/foxx1337/rgb_matrix_user.inc44
-rw-r--r--keyboards/massdrop/ctrl/keymaps/mac/keymap.c126
-rw-r--r--keyboards/massdrop/ctrl/keymaps/mac_md/keymap.c269
-rw-r--r--keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h121
-rw-r--r--keyboards/massdrop/ctrl/keymaps/matthewrobo/config_led.c100
-rw-r--r--keyboards/massdrop/ctrl/keymaps/matthewrobo/keymap.c287
-rw-r--r--keyboards/massdrop/ctrl/keymaps/r-pufky/config.h28
-rw-r--r--keyboards/massdrop/ctrl/keymaps/r-pufky/keymap.c175
-rw-r--r--keyboards/massdrop/ctrl/keymaps/responsive_pattern/keymap.c764
-rw-r--r--keyboards/massdrop/ctrl/keymaps/via/keymap.c140
-rw-r--r--keyboards/massdrop/ctrl/keymaps/xanimos/config.h119
-rw-r--r--keyboards/massdrop/ctrl/keymaps/xanimos/config_led.c98
-rw-r--r--keyboards/massdrop/ctrl/keymaps/xanimos/keymap.c411
-rw-r--r--keyboards/massdrop/ctrl/keymaps/xanimos/readme.md200
-rw-r--r--keyboards/massdrop/ctrl/keymaps/xulkal/keymap.c92
28 files changed, 5108 insertions, 0 deletions
diff --git a/keyboards/massdrop/ctrl/config.h b/keyboards/massdrop/ctrl/config.h
new file mode 100644
index 0000000000..77967e17d3
--- /dev/null
+++ b/keyboards/massdrop/ctrl/config.h
@@ -0,0 +1,176 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.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 <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define SERIAL_NUM "Unavailable"
+
+/* key matrix size */
+#define MATRIX_ROWS 11
+#define MATRIX_COLS 8
+
+#define MATRIX_ROW_PINS { B04, B05, B06, B07, B08, B09, A10, A11, B10, B11, B12 }
+#define MATRIX_COL_PINS { A00, A01, A02, A03, A04, A05, A06, A07 }
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Temporary solution for matrix delay */
+#define IGNORE_ATOMIC_BLOCK
+
+/* Avoid out-of-bounds errors when SmartEEPROM is not enabled */
+#define EEPROM_SIZE 1024
+
+/* MCU Port name definitions */
+#define PA 0
+#define PB 1
+
+/* This Shift Register expands available hardware output lines to control additional peripherals */
+/* It uses four lines from the MCU to provide 16 output lines */
+/* Shift Register Clock configuration (MCU to ShiftRegister.RCLK) */
+#define SR_EXP_RCLK_PIN B14
+/* Shift Register Output Enable configuration (MCU to ShiftRegister.OE_N) */
+#define SR_EXP_OE_PIN B15
+/* SERCOM port to use for Shift Register SPI */
+/* DATAOUT and SCLK must be configured to use hardware pins of this port */
+#define SPI_SERCOM SERCOM2
+/* Shift Register SPI Data Out configuration (MCU.SERCOMx.PAD[0] to ShiftRegister.SER) */
+#define SPI_DATAOUT_PIN A12
+#define SPI_DATAOUT_MUX 2
+/* Shift Register SPI Serial Clock configuration (MCU.SERCOMx.PAD[1] to ShiftRegister.SRCLK) */
+#define SPI_SCLK_PIN A13
+#define SPI_SCLK_MUX 2
+
+/* Debug LED (Small LED Located near MCU) */
+#define DEBUG_LED_ENABLE 1
+#define DEBUG_LED_PORT PA
+#define DEBUG_LED_PIN 27
+
+/* Additional debugging ports */
+/* PCB M21 */
+#define DEBUG_PORT1_ENABLE 1
+#define DEBUG_PORT1_PORT PB
+#define DEBUG_PORT1_PIN 3
+/* PCB M23 */
+#define DEBUG_PORT2_ENABLE 1
+#define DEBUG_PORT2_PORT PB
+#define DEBUG_PORT2_PIN 17
+/* PCB M25 */
+#define DEBUG_PORT3_ENABLE 1
+#define DEBUG_PORT3_PORT PA
+#define DEBUG_PORT3_PIN 20
+
+/* Debug Boot Tracing - During boot sequence, ground this pin to halt and display debug code using Debug LED */
+/* This is useful in determining which hardware device may have malfunctioned or is improperly configured */
+/* Feature is automatically disabled after successful boot */
+/* PCB M27 */
+#define DEBUG_BOOT_TRACING_ENABLE 1
+#define DEBUG_BOOT_TRACING_PORT PB
+#define DEBUG_BOOT_TRACING_PIN 23
+
+/* USB2422 config */
+#define USB2422_ADDRESS 0x58
+#define USB2422_VENDOR_ID 0x04D8
+#define USB2422_PRODUCT_ID 0xEEC5
+#define USB2422_DEVICE_VER 0x0101
+#define USB2422_MANUFACTURER "Massdrop Inc."
+#define USB2422_PRODUCT "Massdrop Hub"
+#define USB2422_ACTIVE_PIN A18
+
+/* 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
+
+/* Force boot in NKRO mode */
+//#define FORCE_NKRO
+
+/*
+ * 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 RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_LED_PROCESS_LIMIT 15
+#define RGB_MATRIX_LED_FLUSH_LIMIT 10
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+# define ENABLE_RGB_MATRIX_ALPHAS_MODS
+# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+# define ENABLE_RGB_MATRIX_BAND_SAT
+# define ENABLE_RGB_MATRIX_BAND_VAL
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+# define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# define ENABLE_RGB_MATRIX_HUE_BREATHING
+# define ENABLE_RGB_MATRIX_HUE_PENDULUM
+# define ENABLE_RGB_MATRIX_HUE_WAVE
+# define ENABLE_RGB_MATRIX_PIXEL_RAIN
+# define ENABLE_RGB_MATRIX_PIXEL_FLOW
+# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_RGB_MATRIX_SPLASH
+# define ENABLE_RGB_MATRIX_MULTISPLASH
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH
+# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+#include "config_led.h"
diff --git a/keyboards/massdrop/ctrl/config_led.c b/keyboards/massdrop/ctrl/config_led.c
new file mode 100644
index 0000000000..6cc8601bb5
--- /dev/null
+++ b/keyboards/massdrop/ctrl/config_led.c
@@ -0,0 +1,85 @@
+#ifdef RGB_MATRIX_ENABLE
+#include "ctrl.h"
+
+#include "md_rgb_matrix.h"
+#include "rgb_matrix.h"
+#include "config_led.h"
+
+led_config_t g_led_config = { {
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 16, 17, 18, 19, 20, 21, 22, 23 },
+ { 33, 34, 35, 36, 37, 38, 39, 40 },
+ { 50, 51, 52, 53, 54, 55, 56, 57 },
+ { 63, 64, 65, 66, 67, 68, 69, 70 },
+ { 76, 77, 78, 79, 80, 81, 82, 83 },
+ { 8, 9, 10, 11, 12, 13, 14, 15 },
+ { 24, 25, 26, 27, 28, 29, 30, 31 },
+ { 41, 42, 43, 44, 45, 46, 47, 48 },
+ { 58, 59, 60, 61, 62, 75, 49, 32 },
+ { 71, 72, 73, 74, 84, 85, 86, NO_LED }
+}, {
+ // 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_SCRL, KC_PAUS
+ { 7, 5 }, { 31, 5 }, { 43, 5 }, { 55, 5 }, { 67, 5 }, { 85, 5 }, { 97, 5 }, { 109, 5 },
+ { 121, 5 }, { 139, 5 }, { 151, 5 }, { 163, 5 }, { 175, 5 }, { 193, 5 }, { 205, 5 }, { 217, 5 },
+ // 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
+ { 7, 20 }, { 19, 20 }, { 31, 20 }, { 43, 20 }, { 55, 20 }, { 67, 20 }, { 79, 20 }, { 91, 20 },
+ { 103, 20 }, { 115, 20 }, { 127, 20 }, { 139, 20 }, { 151, 20 }, { 169, 20 }, { 193, 20 }, { 205, 20 },
+ { 217, 20 },
+ // 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
+ { 10, 30 }, { 25, 30 }, { 37, 30 }, { 49, 30 }, { 61, 30 }, { 73, 30 }, { 85, 30 }, { 97, 30 },
+ { 109, 30 }, { 121, 30 }, { 133, 30 }, { 145, 30 }, { 157, 30 }, { 172, 30 }, { 193, 30 }, { 205, 30 },
+ { 217, 30 },
+ // KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT
+ { 11, 39 }, { 28, 39 }, { 40, 39 }, { 52, 39 }, { 64, 39 }, { 76, 39 }, { 88, 39 }, { 100, 39 },
+ { 112, 39 }, { 124, 39 }, { 136, 39 }, { 148, 39 }, { 168, 39 },
+ // 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
+ { 14, 49 }, { 34, 49 }, { 46, 49 }, { 58, 49 }, { 70, 49 }, { 82, 49 }, { 94, 49 }, { 106, 49 },
+ { 118, 49 }, { 130, 49 }, { 142, 49 }, { 165, 49 }, { 205, 49 },
+ // KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ { 8, 59 }, { 23, 59 }, { 38, 59 }, { 83, 59 }, { 129, 59 }, { 144, 59 }, { 159, 59 }, { 174, 59 },
+ { 193, 59 }, { 205, 59 }, { 217, 59 },
+ // Underglow / Border
+ { 224, 64 }, { 204, 64 }, { 186, 64 }, { 167, 64 }, { 149, 64 }, { 130, 64 }, { 112, 64 }, { 94, 64 },
+ { 75, 64 }, { 57, 64 }, { 38, 64 }, { 20, 64 }, { 0, 64 }, { 0, 47 }, { 0, 32 }, { 0, 17 },
+ { 0, 0 }, { 20, 0 }, { 38, 0 }, { 57, 0 }, { 75, 0 }, { 94, 0 }, { 112, 0 }, { 130, 0 },
+ { 149, 0 }, { 167, 0 }, { 186, 0 }, { 204, 0 }, { 224, 0 }, { 224, 17 }, { 224, 32 }, { 224, 47 }
+}, {
+ // 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_SCRL, KC_PAUS
+ 1, 4, 4, 4, 4, 1, 1, 1,
+ 1, 4, 4, 4, 4, 1, 9, 1,
+ // 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
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 1, 1, 1,
+ 1,
+ // 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
+ 1, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 1, 1,
+ 1,
+ // 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
+ 9, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 1,
+ // 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
+ 1, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 1, 1,
+ // KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ 1, 1, 1, 4, 1, 1, 1, 1,
+ 1, 1, 1,
+ // Underglow / Border
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2
+} };
+
+
+#ifdef USB_LED_INDICATOR_ENABLE
+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
+ if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) {
+ return false;
+ }
+ md_rgb_matrix_indicators_advanced(led_min, led_max);
+ return true;
+}
+#endif // USB_LED_INDICATOR_ENABLE
+
+#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/massdrop/ctrl/config_led.h b/keyboards/massdrop/ctrl/config_led.h
new file mode 100644
index 0000000000..f582035e9e
--- /dev/null
+++ b/keyboards/massdrop/ctrl/config_led.h
@@ -0,0 +1,192 @@
+/*
+Copyright 2018 Massdrop Inc.
+
+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 <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+//Define number of ISSI3733 drivers being used (1...16)
+#define ISSI3733_DRIVER_COUNT 2
+#define RGB_MATRIX_LED_COUNT ISSI3733_LED_COUNT
+
+//Hardware address of each driver (Refer to ISSI3733 pdf "Table 1 Slave Address" and keyboard schematic)
+#define ISSI3773_DRIVER_ADDRESSES { 0xA0, 0xBE }
+
+//LED I2C bus speed
+#define I2C_HZ 580000
+
+//Count of LED bodies
+#define ISSI3733_LED_COUNT 119
+
+#define LED_GCR_MAX 165 //Max GCR value (0 - 255) WARNING: Raising this value may overload the LED drivers and USB bus
+#define LED_GCR_STEP 10 //GCR increment/decrement value
+
+#ifdef USE_MASSDROP_CONFIGURATOR
+#define ANIMATION_SPEED_STEP 1
+
+#define BREATHE_STEP 1
+#define BREATHE_MIN_STEP 0
+#define BREATHE_MAX_STEP 255
+#endif
+
+//Default Global Current Register value (Default brightness 0 - 255)
+#define ISSI3733_GCR_DEFAULT LED_GCR_MAX
+
+//Automatic power rollback and recovery
+#define V5_HIGH 2540 //5V high level (After low power detect, point at which LEDs are allowed to use more power )
+#define V5_LOW 2480 //5V low level (LED power rolled back to stay above this limit)
+#define V5_CAT 2200 //5V catastrophic level (Host USB port potential to shut down)
+
+//LED Mapping - More practically generated from a spreadsheet program
+//id: ID of the LED (Sync with PCB callouts)
+//x: Physical X coordinate of LED (units do not matter)
+//y: Physical Y coordinate of LED (units do not matter)
+//drv: 1-Based index of ISSI3773_DRIVER_ADDRESSES
+//cs: Matrix wiring CS col (1-16)
+//swr: Matrix wiring SW Red row (1-12)
+//swg: Matrix wiring SW Green row (1-12)
+//swb: Matrix wiring SW Blue row (1-12)
+//scan: Associated key matrix scancode (set 255 if none or 254 for LED to turn off in alternating mode)
+//Note: Origin 0,0 may be located anywhere as the software will do the final layout
+#define ISSI3733_LED_MAP { \
+ { .id = 1, .x = 0, .y = 0, .adr = { .drv = 2, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 0 }, \
+ { .id = 2, .x = 1.5, .y = 0, .adr = { .drv = 2, .cs = 3, .swr = 5, .swg = 4, .swb = 6 }, .scan = 1 }, \
+ { .id = 3, .x = 2.25, .y = 0, .adr = { .drv = 2, .cs = 4, .swr = 5, .swg = 4, .swb = 6 }, .scan = 2 }, \
+ { .id = 4, .x = 3, .y = 0, .adr = { .drv = 2, .cs = 5, .swr = 5, .swg = 4, .swb = 6 }, .scan = 3 }, \
+ { .id = 5, .x = 3.75, .y = 0, .adr = { .drv = 2, .cs = 6, .swr = 2, .swg = 1, .swb = 3 }, .scan = 4 }, \
+ { .id = 6, .x = 4.875, .y = 0, .adr = { .drv = 2, .cs = 7, .swr = 5, .swg = 4, .swb = 6 }, .scan = 5 }, \
+ { .id = 7, .x = 5.625, .y = 0, .adr = { .drv = 2, .cs = 8, .swr = 5, .swg = 4, .swb = 6 }, .scan = 6 }, \
+ { .id = 8, .x = 6.375, .y = 0, .adr = { .drv = 1, .cs = 1, .swr = 5, .swg = 4, .swb = 6 }, .scan = 7 }, \
+ { .id = 9, .x = 7.125, .y = 0, .adr = { .drv = 1, .cs = 2, .swr = 5, .swg = 4, .swb = 6 }, .scan = 48 }, \
+ { .id = 10, .x = 8.25, .y = 0, .adr = { .drv = 1, .cs = 3, .swr = 5, .swg = 4, .swb = 6 }, .scan = 49 }, \
+ { .id = 11, .x = 9, .y = 0, .adr = { .drv = 1, .cs = 4, .swr = 5, .swg = 4, .swb = 6 }, .scan = 50 }, \
+ { .id = 12, .x = 9.75, .y = 0, .adr = { .drv = 1, .cs = 5, .swr = 5, .swg = 4, .swb = 6 }, .scan = 51 }, \
+ { .id = 13, .x = 10.5, .y = 0, .adr = { .drv = 1, .cs = 6, .swr = 5, .swg = 4, .swb = 6 }, .scan = 52 }, \
+ { .id = 14, .x = 11.625, .y = 0, .adr = { .drv = 1, .cs = 7, .swr = 5, .swg = 4, .swb = 6 }, .scan = 53 }, \
+ { .id = 15, .x = 12.375, .y = 0, .adr = { .drv = 1, .cs = 8, .swr = 5, .swg = 4, .swb = 6 }, .scan = 54 }, \
+ { .id = 16, .x = 13.125, .y = 0, .adr = { .drv = 1, .cs = 9, .swr = 5, .swg = 4, .swb = 6 }, .scan = 55 }, \
+ { .id = 17, .x = 0, .y = -1.125, .adr = { .drv = 2, .cs = 1, .swr = 8, .swg = 7, .swb = 9 }, .scan = 8 }, \
+ { .id = 18, .x = 0.75, .y = -1.125, .adr = { .drv = 2, .cs = 2, .swr = 8, .swg = 7, .swb = 9 }, .scan = 9 }, \
+ { .id = 19, .x = 1.5, .y = -1.125, .adr = { .drv = 2, .cs = 3, .swr = 8, .swg = 7, .swb = 9 }, .scan = 10 }, \
+ { .id = 20, .x = 2.25, .y = -1.125, .adr = { .drv = 2, .cs = 4, .swr = 8, .swg = 7, .swb = 9 }, .scan = 11 }, \
+ { .id = 21, .x = 3, .y = -1.125, .adr = { .drv = 2, .cs = 5, .swr = 8, .swg = 7, .swb = 9 }, .scan = 12 }, \
+ { .id = 22, .x = 3.75, .y = -1.125, .adr = { .drv = 2, .cs = 6, .swr = 8, .swg = 7, .swb = 9 }, .scan = 13 }, \
+ { .id = 23, .x = 4.5, .y = -1.125, .adr = { .drv = 2, .cs = 7, .swr = 8, .swg = 7, .swb = 9 }, .scan = 14 }, \
+ { .id = 24, .x = 5.25, .y = -1.125, .adr = { .drv = 2, .cs = 8, .swr = 8, .swg = 7, .swb = 9 }, .scan = 15 }, \
+ { .id = 25, .x = 6, .y = -1.125, .adr = { .drv = 1, .cs = 1, .swr = 8, .swg = 7, .swb = 9 }, .scan = 56 }, \
+ { .id = 26, .x = 6.75, .y = -1.125, .adr = { .drv = 1, .cs = 2, .swr = 8, .swg = 7, .swb = 9 }, .scan = 57 }, \
+ { .id = 27, .x = 7.5, .y = -1.125, .adr = { .drv = 1, .cs = 3, .swr = 8, .swg = 7, .swb = 9 }, .scan = 58 }, \
+ { .id = 28, .x = 8.25, .y = -1.125, .adr = { .drv = 1, .cs = 4, .swr = 8, .swg = 7, .swb = 9 }, .scan = 59 }, \
+ { .id = 29, .x = 9, .y = -1.125, .adr = { .drv = 1, .cs = 5, .swr = 8, .swg = 7, .swb = 9 }, .scan = 60 }, \
+ { .id = 30, .x = 10.125, .y = -1.125, .adr = { .drv = 1, .cs = 6, .swr = 8, .swg = 7, .swb = 9 }, .scan = 61 }, \
+ { .id = 31, .x = 11.625, .y = -1.125, .adr = { .drv = 1, .cs = 7, .swr = 8, .swg = 7, .swb = 9 }, .scan = 62 }, \
+ { .id = 32, .x = 12.375, .y = -1.125, .adr = { .drv = 1, .cs = 8, .swr = 8, .swg = 7, .swb = 9 }, .scan = 63 }, \
+ { .id = 33, .x = 13.125, .y = -1.125, .adr = { .drv = 1, .cs = 9, .swr = 8, .swg = 7, .swb = 9 }, .scan = 79 }, \
+ { .id = 34, .x = 0.188, .y = -1.875, .adr = { .drv = 2, .cs = 1, .swr = 11, .swg = 10, .swb = 12 }, .scan = 16 }, \
+ { .id = 35, .x = 1.125, .y = -1.875, .adr = { .drv = 2, .cs = 2, .swr = 11, .swg = 10, .swb = 12 }, .scan = 17 }, \
+ { .id = 36, .x = 1.875, .y = -1.875, .adr = { .drv = 2, .cs = 3, .swr = 11, .swg = 10, .swb = 12 }, .scan = 18 }, \
+ { .id = 37, .x = 2.625, .y = -1.875, .adr = { .drv = 2, .cs = 4, .swr = 11, .swg = 10, .swb = 12 }, .scan = 19 }, \
+ { .id = 38, .x = 3.375, .y = -1.875, .adr = { .drv = 2, .cs = 5, .swr = 11, .swg = 10, .swb = 12 }, .scan = 20 }, \
+ { .id = 39, .x = 4.125, .y = -1.875, .adr = { .drv = 2, .cs = 6, .swr = 11, .swg = 10, .swb = 12 }, .scan = 21 }, \
+ { .id = 40, .x = 4.875, .y = -1.875, .adr = { .drv = 2, .cs = 7, .swr = 11, .swg = 10, .swb = 12 }, .scan = 22 }, \
+ { .id = 41, .x = 5.625, .y = -1.875, .adr = { .drv = 2, .cs = 8, .swr = 11, .swg = 10, .swb = 12 }, .scan = 23 }, \
+ { .id = 42, .x = 6.375, .y = -1.875, .adr = { .drv = 1, .cs = 1, .swr = 11, .swg = 10, .swb = 12 }, .scan = 64 }, \
+ { .id = 43, .x = 7.125, .y = -1.875, .adr = { .drv = 1, .cs = 2, .swr = 11, .swg = 10, .swb = 12 }, .scan = 65 }, \
+ { .id = 44, .x = 7.875, .y = -1.875, .adr = { .drv = 1, .cs = 3, .swr = 11, .swg = 10, .swb = 12 }, .scan = 66 }, \
+ { .id = 45, .x = 8.625, .y = -1.875, .adr = { .drv = 1, .cs = 4, .swr = 11, .swg = 10, .swb = 12 }, .scan = 67 }, \
+ { .id = 46, .x = 9.375, .y = -1.875, .adr = { .drv = 1, .cs = 5, .swr = 11, .swg = 10, .swb = 12 }, .scan = 68 }, \
+ { .id = 47, .x = 10.312, .y = -1.875, .adr = { .drv = 1, .cs = 6, .swr = 11, .swg = 10, .swb = 12 }, .scan = 69 }, \
+ { .id = 48, .x = 11.625, .y = -1.875, .adr = { .drv = 1, .cs = 7, .swr = 11, .swg = 10, .swb = 12 }, .scan = 70 }, \
+ { .id = 49, .x = 12.375, .y = -1.875, .adr = { .drv = 1, .cs = 8, .swr = 11, .swg = 10, .swb = 12 }, .scan = 71 }, \
+ { .id = 50, .x = 13.125, .y = -1.875, .adr = { .drv = 1, .cs = 9, .swr = 11, .swg = 10, .swb = 12 }, .scan = 78 }, \
+ { .id = 51, .x = 0.281, .y = -2.625, .adr = { .drv = 2, .cs = 1, .swr = 5, .swg = 4, .swb = 6 }, .scan = 24 }, \
+ { .id = 52, .x = 1.313, .y = -2.625, .adr = { .drv = 2, .cs = 2, .swr = 5, .swg = 4, .swb = 6 }, .scan = 25 }, \
+ { .id = 53, .x = 2.063, .y = -2.625, .adr = { .drv = 2, .cs = 13, .swr = 11, .swg = 10, .swb = 12 }, .scan = 26 }, \
+ { .id = 54, .x = 2.812, .y = -2.625, .adr = { .drv = 2, .cs = 12, .swr = 11, .swg = 10, .swb = 12 }, .scan = 27 }, \
+ { .id = 55, .x = 3.562, .y = -2.625, .adr = { .drv = 2, .cs = 11, .swr = 11, .swg = 10, .swb = 12 }, .scan = 28 }, \
+ { .id = 56, .x = 4.312, .y = -2.625, .adr = { .drv = 2, .cs = 6, .swr = 5, .swg = 4, .swb = 6 }, .scan = 29 }, \
+ { .id = 57, .x = 5.062, .y = -2.625, .adr = { .drv = 2, .cs = 10, .swr = 11, .swg = 10, .swb = 12 }, .scan = 30 }, \
+ { .id = 58, .x = 5.812, .y = -2.625, .adr = { .drv = 2, .cs = 9, .swr = 11, .swg = 10, .swb = 12 }, .scan = 31 }, \
+ { .id = 59, .x = 6.562, .y = -2.625, .adr = { .drv = 1, .cs = 16, .swr = 11, .swg = 10, .swb = 12 }, .scan = 72 }, \
+ { .id = 60, .x = 7.312, .y = -2.625, .adr = { .drv = 1, .cs = 15, .swr = 11, .swg = 10, .swb = 12 }, .scan = 73 }, \
+ { .id = 61, .x = 8.062, .y = -2.625, .adr = { .drv = 1, .cs = 14, .swr = 11, .swg = 10, .swb = 12 }, .scan = 74 }, \
+ { .id = 62, .x = 8.812, .y = -2.625, .adr = { .drv = 1, .cs = 13, .swr = 11, .swg = 10, .swb = 12 }, .scan = 75 }, \
+ { .id = 63, .x = 10.031, .y = -2.625, .adr = { .drv = 1, .cs = 12, .swr = 11, .swg = 10, .swb = 12 }, .scan = 76 }, \
+ { .id = 64, .x = 0.469, .y = -3.375, .adr = { .drv = 2, .cs = 14, .swr = 5, .swg = 4, .swb = 6 }, .scan = 32 }, \
+ { .id = 65, .x = 1.688, .y = -3.375, .adr = { .drv = 2, .cs = 13, .swr = 5, .swg = 4, .swb = 6 }, .scan = 33 }, \
+ { .id = 66, .x = 2.438, .y = -3.375, .adr = { .drv = 2, .cs = 12, .swr = 8, .swg = 7, .swb = 9 }, .scan = 34 }, \
+ { .id = 67, .x = 3.188, .y = -3.375, .adr = { .drv = 2, .cs = 12, .swr = 5, .swg = 4, .swb = 6 }, .scan = 35 }, \
+ { .id = 68, .x = 3.938, .y = -3.375, .adr = { .drv = 2, .cs = 11, .swr = 5, .swg = 4, .swb = 6 }, .scan = 36 }, \
+ { .id = 69, .x = 4.688, .y = -3.375, .adr = { .drv = 2, .cs = 10, .swr = 5, .swg = 4, .swb = 6 }, .scan = 37 }, \
+ { .id = 70, .x = 5.438, .y = -3.375, .adr = { .drv = 2, .cs = 9, .swr = 5, .swg = 4, .swb = 6 }, .scan = 38 }, \
+ { .id = 71, .x = 6.188, .y = -3.375, .adr = { .drv = 2, .cs = 9, .swr = 8, .swg = 7, .swb = 9 }, .scan = 39 }, \
+ { .id = 72, .x = 6.938, .y = -3.375, .adr = { .drv = 1, .cs = 16, .swr = 8, .swg = 7, .swb = 9 }, .scan = 80 }, \
+ { .id = 73, .x = 7.688, .y = -3.375, .adr = { .drv = 1, .cs = 15, .swr = 8, .swg = 7, .swb = 9 }, .scan = 81 }, \
+ { .id = 74, .x = 8.438, .y = -3.375, .adr = { .drv = 1, .cs = 14, .swr = 8, .swg = 7, .swb = 9 }, .scan = 82 }, \
+ { .id = 75, .x = 9.844, .y = -3.375, .adr = { .drv = 1, .cs = 13, .swr = 8, .swg = 7, .swb = 9 }, .scan = 83 }, \
+ { .id = 76, .x = 12.375, .y = -3.375, .adr = { .drv = 1, .cs = 11, .swr = 8, .swg = 7, .swb = 9 }, .scan = 77 }, \
+ { .id = 77, .x = 0.094, .y = -4.125, .adr = { .drv = 2, .cs = 14, .swr = 11, .swg = 10, .swb = 12 }, .scan = 40 }, \
+ { .id = 78, .x = 1.031, .y = -4.125, .adr = { .drv = 2, .cs = 14, .swr = 8, .swg = 7, .swb = 9 }, .scan = 41 }, \
+ { .id = 79, .x = 1.969, .y = -4.125, .adr = { .drv = 2, .cs = 13, .swr = 8, .swg = 7, .swb = 9 }, .scan = 42 }, \
+ { .id = 80, .x = 4.781, .y = -4.125, .adr = { .drv = 2, .cs = 10, .swr = 8, .swg = 7, .swb = 9 }, .scan = 43 }, \
+ { .id = 81, .x = 7.594, .y = -4.125, .adr = { .drv = 1, .cs = 16, .swr = 5, .swg = 4, .swb = 6 }, .scan = 44 }, \
+ { .id = 82, .x = 8.531, .y = -4.125, .adr = { .drv = 1, .cs = 15, .swr = 5, .swg = 4, .swb = 6 }, .scan = 45 }, \
+ { .id = 83, .x = 9.469, .y = -4.125, .adr = { .drv = 1, .cs = 14, .swr = 5, .swg = 4, .swb = 6 }, .scan = 46 }, \
+ { .id = 84, .x = 10.406, .y = -4.125, .adr = { .drv = 1, .cs = 13, .swr = 5, .swg = 4, .swb = 6 }, .scan = 47 }, \
+ { .id = 85, .x = 11.625, .y = -4.125, .adr = { .drv = 1, .cs = 12, .swr = 8, .swg = 7, .swb = 9 }, .scan = 84 }, \
+ { .id = 86, .x = 12.375, .y = -4.125, .adr = { .drv = 1, .cs = 12, .swr = 5, .swg = 4, .swb = 6 }, .scan = 85 }, \
+ { .id = 87, .x = 13.125, .y = -4.125, .adr = { .drv = 1, .cs = 11, .swr = 5, .swg = 4, .swb = 6 }, .scan = 86 }, \
+ { .id = 88, .x = 13.433, .y = -4.43, .adr = { .drv = 1, .cs = 11, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 89, .x = 12.285, .y = -4.535, .adr = { .drv = 1, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
+ { .id = 90, .x = 11.14, .y = -4.535, .adr = { .drv = 1, .cs = 13, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 91, .x = 9.995, .y = -4.535, .adr = { .drv = 1, .cs = 14, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
+ { .id = 92, .x = 8.85, .y = -4.535, .adr = { .drv = 1, .cs = 15, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 93, .x = 7.705, .y = -4.535, .adr = { .drv = 1, .cs = 16, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
+ { .id = 94, .x = 6.56, .y = -4.535, .adr = { .drv = 2, .cs = 9, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 95, .x = 5.415, .y = -4.535, .adr = { .drv = 2, .cs = 10, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
+ { .id = 96, .x = 4.27, .y = -4.535, .adr = { .drv = 2, .cs = 11, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 97, .x = 3.125, .y = -4.535, .adr = { .drv = 2, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
+ { .id = 98, .x = 1.98, .y = -4.535, .adr = { .drv = 2, .cs = 13, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 99, .x = 0.835, .y = -4.535, .adr = { .drv = 2, .cs = 14, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
+ { .id = 100, .x = -0.307, .y = -4.43, .adr = { .drv = 2, .cs = 15, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 101, .x = -0.41, .y = -3.245, .adr = { .drv = 2, .cs = 15, .swr = 11, .swg = 10, .swb = 12 }, .scan = 254 }, \
+ { .id = 102, .x = -0.41, .y = -2.06, .adr = { .drv = 2, .cs = 15, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
+ { .id = 103, .x = -0.41, .y = -0.875, .adr = { .drv = 2, .cs = 15, .swr = 8, .swg = 7, .swb = 9 }, .scan = 254 }, \
+ { .id = 104, .x = -0.308, .y = 0.31, .adr = { .drv = 2, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 105, .x = 0.835, .y = 0.415, .adr = { .drv = 2, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
+ { .id = 106, .x = 1.98, .y = 0.415, .adr = { .drv = 2, .cs = 4, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 107, .x = 3.125, .y = 0.415, .adr = { .drv = 2, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
+ { .id = 108, .x = 4.27, .y = 0.415, .adr = { .drv = 2, .cs = 7, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 109, .x = 5.415, .y = 0.415, .adr = { .drv = 2, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
+ { .id = 110, .x = 6.56, .y = 0.415, .adr = { .drv = 1, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 111, .x = 7.705, .y = 0.415, .adr = { .drv = 1, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
+ { .id = 112, .x = 8.85, .y = 0.415, .adr = { .drv = 1, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 113, .x = 9.995, .y = 0.415, .adr = { .drv = 1, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
+ { .id = 114, .x = 11.14, .y = 0.415, .adr = { .drv = 1, .cs = 6, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 115, .x = 12.285, .y = 0.415, .adr = { .drv = 1, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
+ { .id = 116, .x = 13.432, .y = 0.31, .adr = { .drv = 1, .cs = 10, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 117, .x = 13.535, .y = -0.875, .adr = { .drv = 1, .cs = 10, .swr = 8, .swg = 7, .swb = 9 }, .scan = 254 }, \
+ { .id = 118, .x = 13.535, .y = -2.06, .adr = { .drv = 1, .cs = 10, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
+ { .id = 119, .x = 13.535, .y = -3.245, .adr = { .drv = 1, .cs = 10, .swr = 5, .swg = 4, .swb = 6 }, .scan = 254 }, \
+};
+
+#define USB_LED_INDICATOR_ENABLE //Comment out to disable indicator functionality
+#ifdef USB_LED_INDICATOR_ENABLE //Scan codes refer to actual key matrix codes, not KC_* (255 to disable)
+ #define USB_LED_NUM_LOCK_SCANCODE 255
+ #define USB_LED_CAPS_LOCK_SCANCODE 24
+ #define USB_LED_SCROLL_LOCK_SCANCODE 54
+ #define USB_LED_COMPOSE_SCANCODE 255
+ #define USB_LED_KANA_SCANCODE 255
+#endif //USB_LED_INDICATOR_ENABLE
diff --git a/keyboards/massdrop/ctrl/info.json b/keyboards/massdrop/ctrl/info.json
new file mode 100644
index 0000000000..34c60ca088
--- /dev/null
+++ b/keyboards/massdrop/ctrl/info.json
@@ -0,0 +1,104 @@
+{
+ "keyboard_name": "CTRL Keyboard",
+ "manufacturer": "Massdrop Inc.",
+ "url": "https://www.massdrop.com/buy/massdrop-ctrl-mechanical-keyboard",
+ "maintainer": "Massdrop",
+ "usb": {
+ "vid": "0x04D8",
+ "pid": "0xEED2",
+ "device_version": "1.0.1"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"ESCAPE", "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":"PRINT SCREEN", "x":15.5, "y":0},
+ {"label":"SCROLL LOCK", "x":16.5, "y":0},
+ {"label":"PAUSE BREAK", "x":17.5, "y":0},
+ {"label":"BACKTICK", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"MINUS", "x":11, "y":1.5},
+ {"label":"EQUALS", "x":12, "y":1.5},
+ {"label":"BACKSPACE", "x":13, "y":1.5, "w":2},
+ {"label":"INSERT", "x":15.5, "y":1.5},
+ {"label":"HOME", "x":16.5, "y":1.5},
+ {"label":"PAGE UP", "x":17.5, "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":"LEFT BRACKET", "x":11.5, "y":2.5},
+ {"label":"RIGHT BRACKET", "x":12.5, "y":2.5},
+ {"label":"BACK SLASH", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"DELETE", "x":15.5, "y":2.5},
+ {"label":"END", "x":16.5, "y":2.5},
+ {"label":"PAGE DOWN", "x":17.5, "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":"SEMICOLON", "x":10.75, "y":3.5},
+ {"label":"SINGLE TICK", "x":11.75, "y":3.5},
+ {"label":"ENTER", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"LEFT 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":"COMMA", "x":9.25, "y":4.5},
+ {"label":"PERIOD", "x":10.25, "y"