summaryrefslogtreecommitdiffstats
path: root/keyboards/handwired
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/handwired')
-rw-r--r--keyboards/handwired/datahand/config.h87
-rw-r--r--keyboards/handwired/datahand/datahand.h133
-rw-r--r--keyboards/handwired/datahand/keymaps/default/keymap.c313
-rw-r--r--keyboards/handwired/datahand/matrix.c125
-rw-r--r--keyboards/handwired/datahand/readme.md15
-rw-r--r--keyboards/handwired/datahand/rules.mk59
-rw-r--r--keyboards/handwired/downbubble/downbubble.h10
-rw-r--r--keyboards/handwired/downbubble/info.json1095
-rw-r--r--keyboards/handwired/downbubble/keymaps/default/keymap.c10
-rw-r--r--keyboards/handwired/frenchdev/keymaps/default/keymap.c9
-rw-r--r--keyboards/handwired/hexon38/config.h60
-rw-r--r--keyboards/handwired/hexon38/hexon38.c3
-rw-r--r--keyboards/handwired/hexon38/hexon38.h17
-rw-r--r--keyboards/handwired/hexon38/keymaps/default/keymap.c407
-rw-r--r--keyboards/handwired/hexon38/readme.md11
-rw-r--r--keyboards/handwired/hexon38/rules.mk64
-rw-r--r--keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c4
-rw-r--r--keyboards/handwired/ibm122m/readme.md2
-rw-r--r--keyboards/handwired/not_so_minidox/readme.md2
-rw-r--r--keyboards/handwired/numpad20/readme.md2
-rw-r--r--keyboards/handwired/ortho5x13/ortho5x13.h7
-rw-r--r--keyboards/handwired/ortho60/info.json67
-rw-r--r--keyboards/handwired/ortho60/readme.md11
-rw-r--r--keyboards/handwired/ortho60/rules.mk2
-rw-r--r--keyboards/handwired/promethium/keymaps/default/keymap.c1
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/keymap.c1
-rw-r--r--keyboards/handwired/pteron/keymaps/FSund/keymap.c4
-rw-r--r--keyboards/handwired/qc60/README.md5
-rw-r--r--keyboards/handwired/qc60/info.json634
-rw-r--r--keyboards/handwired/qc60/keymaps/default/keymap.c3
-rw-r--r--keyboards/handwired/qc60/keymaps/wntrmln/keymap.c3
-rw-r--r--keyboards/handwired/qc60/proto/proto.h26
-rw-r--r--keyboards/handwired/reddot/info.json108
-rw-r--r--[-rwxr-xr-x]keyboards/handwired/reddot/keymaps/default/keymap.c39
-rwxr-xr-xkeyboards/handwired/reddot/readme.md26
-rwxr-xr-xkeyboards/handwired/reddot/reddot.h27
-rw-r--r--keyboards/handwired/retro_refit/info.json95
-rw-r--r--keyboards/handwired/retro_refit/keymaps/default/keymap.c37
-rw-r--r--keyboards/handwired/retro_refit/readme.md72
-rw-r--r--keyboards/handwired/retro_refit/retro_refit.h51
-rw-r--r--keyboards/handwired/rs60/README.md27
-rw-r--r--keyboards/handwired/rs60/config.h47
-rw-r--r--keyboards/handwired/rs60/keymaps/default/keymap.c207
-rw-r--r--keyboards/handwired/rs60/keymaps/default/readme.md1
-rw-r--r--keyboards/handwired/rs60/rs60.c18
-rw-r--r--keyboards/handwired/rs60/rs60.h36
-rw-r--r--keyboards/handwired/rs60/rules.mk61
-rw-r--r--keyboards/handwired/terminus_mini/readme.md2
-rw-r--r--keyboards/handwired/traveller/keymaps/default/keymap.c3
-rw-r--r--keyboards/handwired/woodpad/keymaps/default/keymap.c4
-rw-r--r--keyboards/handwired/xealous/debounce.c63
-rw-r--r--keyboards/handwired/xealous/rules.mk10
52 files changed, 3307 insertions, 819 deletions
diff --git a/keyboards/handwired/datahand/config.h b/keyboards/handwired/datahand/config.h
new file mode 100644
index 000000000..1ba8479f0
--- /dev/null
+++ b/keyboards/handwired/datahand/config.h
@@ -0,0 +1,87 @@
+/* Copyright 2017-2019 Nikolaus Wittenstein <nikolaus.wittenstein@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+/* Taken from the DataHand PS/2-USB adaptor. */
+#define VENDOR_ID 0x13BA
+#define PRODUCT_ID 0x0017
+#define DEVICE_VER 0x0001
+#define MANUFACTURER DataHand
+#define PRODUCT DataHand
+#define DESCRIPTION DataHand Teensy++ 2.0 conversion
+
+/* key matrix size */
+#define MATRIX_ROWS 13
+#define MATRIX_COLS 4
+
+#define DIODE_DIRECTION CUSTOM_MATRIX
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 0
+
+/* 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 NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ */
+#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Command/Windows key option
+ *
+ * If you define this, the thumb enter key becomes the Command/Windows key. There's still an enter key on the right
+ * ring finger, so this key is much better utilized as the otherwise nonexistent Command key. I think some newer
+ * DataHands let you remap right ring east as Command, but having it on the thumb is nicer. Comment out this define
+ * to use the original layout.
+ */
+#define DATAHAND_THUMB_RETURN_COMMAND
diff --git a/keyboards/handwired/datahand/datahand.h b/keyboards/handwired/datahand/datahand.h
new file mode 100644
index 000000000..cb9a4d3e3
--- /dev/null
+++ b/keyboards/handwired/datahand/datahand.h
@@ -0,0 +1,133 @@
+/* Copyright 2017-2019 Nikolaus Wittenstein <nikolaus.wittenstein@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ * The first section contains all of the arguements; the second converts the arguments into a two-dimensional array.
+ */
+
+/* Each code is three letters
+ * l or r - left or right hand
+ * p, r, m, i, t - pinky, ring finger, middle finger, index finger, thumb
+ * fingers: n, s, e, w, c - north, south, east, west, and center (manual calls this "well" but we already have "west")
+ * thumb: p, n, c, l, u, k - pad, nail, center, lock (harder center), up, knuckle
+ */
+#define LAYOUT( \
+ lpn, lrn, lmn, lin, rin, rmn, rrn, rpn, \
+lpw, lpc, lpe, lrw, lrc, lre, lmw, lmc, lme, liw, lic, lie, riw, ric, rie, rmw, rmc, rme, rrw, rrc, rre, rpw, rpc, rpe, \
+ lps, lrs, lms, lis, ris, rms, rrs, rps, \
+ ltp, ltn, rtn, rtp, \
+ ltc, rtc, \
+ ltl, rtl, \
+ ltu, ltk, rtk, rtu) \
+{ \
+ {riw, rin, lpw, lpn},\
+ {ric, rie, lpc, lpe},\
+ {ris, rms, lps, lrs},\
+ {rmw, rmn, lrw, lrn},\
+ {rmc, rme, lrc, lre},\
+ {rrw, rrn, lmw, lmn},\
+ {rrc, rre, lmc, lme},\
+ {rrs, rps, lms, lis},\
+ {rpw, rpn, liw, lin},\
+ {rpc, rpe, lic, lie},\
+ {rtk, rtn, ltk, ltn},\
+ {rtc, rtl, ltc, ltl},\
+ {rtp, rtu, ltp, ltu},\
+}
+
+/* Mode LEDs are active-low on Port B on the Teensy. */
+#define LED_MODE_PORT PORTB
+#define LED_TENKEY (1<<3)
+#define LED_FN (1<<4)
+#define LED_NORMAL (1<<5)
+#define LED_NAS (1<<6)
+
+/* Lock LEDs are active-low on Port F on the Teensy. */
+#define LED_LOCK_PORT PORTF
+#define LED_CAPS_LOCK (1<<4)
+#define LED_MOUSE_LOCK (1<<5)
+#define LED_NUM_LOCK (1<<6)
+#define LED_SCROLL_LOCK (1<<7)
+
+
+/* Appendix:
+ * Table based on https://geekhack.org/index.php?topic=12212.msg2059319#msg2059319
+ * Some pin assignments (e.g. for PS/2 I/O) have been fixed.
+ *
+ * Teensy Datahand 8051 pin pin 8051 Datahand Teensy
+ * ------ -------- ---- --- --- ---- -------- ------
+ * GND Mtrx send A P1.0 1 40 VCC VCC VCC
+ * PB7 Mtrx send B P1.1 2 39 P0.0 LED RH NAS PB6
+ * PD0 Mtrx send C P1.2 3 38 P0.1 LED RH NORM PB5
+ * PD1 Mtrx send D P1.3 4 37 P0.2 LED RH FCTN PB4
+ * PD2 RH rcv 0 P1.4 5 36 P0.3 LED RH 10K PB3
+ * PD3 RH rcv 1 P1.5 6 35 P0.4 LED RH unused PB2
+ * PD4 LH rcv 0 P1.6 7 34 P0.5 LED RH unused PE1
+ * PD5 LH rcv 1 P1.7 8 33 P0.6 LED RH unused PE0
+ * PD6 Reset button RST 9 32 P0.7 ? PE7
+ * PD7 ? P3.0 10 31 VPP - PE6
+ * PE0 ? P3.1 11 30 ALE - GND
+ * PE1 kbd data P3.2 12 29 PSEN - AREF
+ * PC0 ? P3.3 13 28 P2.7 ? PF0
+ * PC1 kbd clk P3.4 14 27 P2.6 ? PF1
+ * PC2 ? P3.5 15 26 P2.5 ? PF2
+ * PC3 RAM P3.6 16 25 P2.4 ? PF3
+ * PC4 RAM P3.7 17 24 P2.3 LED D15 LH (CAPLK) PF4
+ * PC5 XTAL2 XTAL2 18 23 P2.2 LED D13 LH (MSELK) PF5
+ * PC6 XTAL1 XTAL1 19 22 P2.1 LED D6 LH (NUMLK) PF6
+ * PC7 GND GND 20 21 P2.0 LED D14 LH (SCRLK) PF7
+ *
+ * JP3 Pinout
+ * 2 - keyboard data
+ * 3 - keyboard clock
+ *
+ * In order to get the Teensy to work, we need to move pin 1 to a different pin. This is
+ * because on the Teensy pin 1 is ground, but we need to write to pin 1 in order to read
+ * the keyboard matrix. An ideal pin to move it to is VPP (pin 31), because this pin tells
+ * the 8051 whether it should read from external or internal memory. The Teensy doesn't
+ * care about that.
+ *
+ * The easiest way to reassign the pin is to use standoffs. You can check out this thread:
+ * https://geekhack.org/index.php?topic=12212.msg235382#msg235382 for a picture of what
+ * this looks like. Note that in the picture the pin has been reassigned to pin 12. We
+ * don't want to do that because we're going to use that pin to send data over PS/2.
+ *
+ * We could if we wanted also reassign the PS/2 pins to Teensy hardware UART pins, but
+ * that's more work. Instead we'll just bit-bang PS/2 because it's an old, slow protocol
+ * (and because there's already a bit-banged PS/2 host implementation in QMK - we just
+ * need to add the device side).
+ *
+ * So overall, we want the following inputs and outputs:
+ * Outputs:
+ * Matrix:
+ * PB7
+ * PD0
+ * PD1
+ * PE6 (moved from pin1, GND)
+ * LEDs:
+ * PB3-6
+ * PF4-7
+ * Inputs:
+ * Matrix:
+ * PD2-5
+ * I/Os (start up as inputs):
+ * PS/2:
+ * PC1
+ * PE1
+ */
diff --git a/keyboards/handwired/datahand/keymaps/default/keymap.c b/keyboards/handwired/datahand/keymaps/default/keymap.c
new file mode 100644
index 000000000..8f4453559
--- /dev/null
+++ b/keyboards/handwired/datahand/keymaps/default/keymap.c
@@ -0,0 +1,313 @@
+/* Copyright 2017-2019 Nikolaus Wittenstein <nikolaus.wittenstein@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include QMK_KEYBOARD_H
+
+#include <stdbool.h>
+
+/* Datahand features not supported:
+ * * All online reprogramming (user settings using the reset button).
+ * * Program Selection features.
+ * * Macros.
+ * * Direct substitutions.
+ * * L/R Modf.
+ * * Mouse Click Lock (Function Direct Access + Mouse Button key).
+ * * Different mouse movement speeds with the two pointer fingers, and using both pointer fingers to move even faster.
+ *
+ * As far as I know, everything else works.
+ */
+
+enum layer {
+ NORMAL,
+#ifdef DATAHAND_THUMB_RETURN_COMMAND
+ NORMAL_THUMB_RETURN_COMMAND,
+#endif
+ FUNCTION_MOUSE,
+ FUNCTION_ARROWS,
+ NAS,
+ NAS_NUMLOCK,
+ NAS_TENKEY,
+ NAS_TENKEY_NUMLOCK,
+
+ NUM_LAYERS
+};
+
+enum custom_keycodes {
+ N = SAFE_RANGE, /* Normal */
+ NS, /* NAS */
+ NSL, /* NAS Lock */
+ NLK, /* Numlock */
+ FN, /* Function mode - needs to be able to switch to mouse or arrow layer */
+ TK0, /* Ten-key off button */
+ TK1, /* Ten-key on button */
+ AR, /* FN arrow mode */
+ MS, /* FN mouse mode */
+ DZ, /* Double zero button */
+};
+
+static bool mouse_enabled = true;
+static bool tenkey_enabled = false;
+static bool numlock_enabled = false;
+static bool nas_locked = false;
+
+/* Declared weak so that it can easily be overridden. */
+__attribute__((weak)) const uint16_t PROGMEM keymaps[NUM_LAYERS][MATRIX_ROWS][MATRIX_COLS] = {
+[NORMAL] = LAYOUT(
+ KC_Q, KC_W, KC_E, KC_R, KC_U, KC_I, KC_O, KC_P,
+KC_DEL, KC_A, KC_LBRC, KC_ESC, KC_S, KC_B, KC_GRV, KC_D, KC_T, KC_DQT, KC_F, KC_G, KC_H, KC_J, KC_QUOT, KC_Y, KC_K, KC_COLN, KC_N, KC_L, KC_ENT, KC_RBRC, KC_SCLN, KC_BSLS,
+ KC_Z, KC_X, KC_C, KC_V, KC_M, KC_COMM, KC_DOT, KC_SLSH,
+ KC_ENT, KC_TAB, KC_BSPC, KC_SPC,
+ KC_LSFT, NS,
+ KC_CAPS, NSL,
+ N, KC_LCTL, KC_LALT, FN),
+
+#ifdef DATAHAND_THUMB_RETURN_COMMAND
+[NORMAL_THUMB_RETURN_COMMAND] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_LCMD, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______, _______, _______),
+#endif
+
+[FUNCTION_MOUSE] = LAYOUT(
+ KC_F2, KC_F4, KC_F6, KC_MS_U, KC_MS_U, KC_F8, KC_F10, KC_PGUP,
+_______, KC_NO, KC_SLCK, _______, KC_BTN3, NLK, KC_BTN1, MS, KC_BTN2, KC_MS_L, KC_BTN1, KC_MS_R, KC_MS_L, KC_BTN2, KC_MS_R, KC_END, AR, KC_LSFT, KC_INS, KC_9, KC_ENT, KC_F11, KC_0, KC_F12,
+ KC_F1, KC_F3, KC_F5, KC_MS_D, KC_MS_D, KC_F7, KC_F9, KC_PGDN,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______, _______, _______),
+[FUNCTION_ARROWS] = LAYOUT(
+ _______, _______, _______, KC_UP, KC_UP, _______, _______, _______,
+_______, _______, _______, _______, KC_LCTL, _______, _______, _______, _______, KC_LEFT, KC_HOME, KC_RGHT, KC_LEFT, KC_HOME, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_DOWN, KC_DOWN, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______, _______, _______),
+[NAS] = LAYOUT(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
+_______, KC_1, KC_TILD, _______, KC_2, NLK, KC_LABK, KC_3, KC_RABK, KC_SLSH, KC_4, KC_5, KC_6, KC_7, KC_UNDS, KC_CIRC, KC_8, KC_ENT, KC_SCLN, KC_9, KC_BSLS, TK0, KC_0, TK1,
+ KC_EQL, KC_X, KC_PERC, KC_MINS, KC_PLUS, KC_DOT, KC_SLSH, KC_QUES,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______, _______, _______),
+[NAS_NUMLOCK] = LAYOUT(
+ _______, _______, _______, _______, _______, KC_PAST, _______, _______,
+_______, KC_KP_1, _______, _______, KC_KP_2, _______, _______, KC_KP_3, _______, KC_PSLS, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_7, _______, _______, KC_KP_8, _______, _______, KC_KP_9, KC_PENT, _______, KC_KP_0, _______,
+ KC_PEQL, _______, _______, KC_PMNS, KC_PPLS, _______, KC_PDOT, _______,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______, _______, _______),
+[NAS_TENKEY] = LAYOUT(
+ _______, _______, _______, KC_UP, KC_7, KC_8, KC_9, KC_ASTR,
+_______, KC_QUOT, _______, _______, KC_DLR, _______, _______, KC_AMPR, _______, KC_LEFT, KC_HOME, KC_RGHT, KC_0, KC_4, DZ, KC_PLUS, KC_5, KC_MINS, KC_EQL, KC_6, KC_ENT, _______, KC_DOT, _______,
+ KC_LPRN, KC_RPRN, _______, KC_DOWN, KC_1, KC_2, KC_3, KC_SLSH,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______, _______, _______),
+[NAS_TENKEY_NUMLOCK] = LAYOUT(
+ _______, _______, _______, _______, KC_KP_7, KC_KP_8, KC_KP_9, KC_PAST,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_KP_0, KC_KP_4, _______, KC_PPLS, KC_KP_5, KC_PMNS, KC_PEQL, KC_KP_6, KC_PENT, _______, KC_PDOT, _______,
+ _______, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PSLS,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______, _______, _______),
+};
+
+static void lock_led_set(bool on, uint8_t led) {
+ if (on) {
+ LED_LOCK_PORT &= ~led;
+ } else {
+ LED_LOCK_PORT |= led;
+ }
+}
+
+static void mode_led_set(uint8_t led) {
+ static const uint8_t ALL_MODE_LEDS = LED_FN | LED_NORMAL | LED_NAS | LED_TENKEY;
+ LED_MODE_PORT |= ALL_MODE_LEDS;
+ LED_MODE_PORT &= ~led;
+}
+
+static void layer_set(bool on, uint8_t layer) {
+ if (on) {
+ layer_on(layer);
+ } else {
+ layer_off(layer);
+ }
+
+ if (layer_state_is(NAS) || layer_state_is(NAS_NUMLOCK) || layer_state_is(NAS_TENKEY) || layer_state_is(NAS_TENKEY_NUMLOCK)) {
+ if (tenkey_enabled) {
+ mode_led_set(LED_NAS | LED_TENKEY);
+ } else {
+ mode_led_set(LED_NAS);
+ }
+ } else if (layer_state_is(FUNCTION_MOUSE) || layer_state_is(FUNCTION_ARROWS)) {
+ mode_led_set(LED_FN);
+ } else if (layer_state_is(NORMAL)) {
+ mode_led_set(LED_NORMAL);
+ }
+}
+
+static void set_normal(void) {
+ layer_move(NORMAL);
+
+#ifdef DATAHAND_THUMB_RETURN_COMMAND
+ layer_set(true, NORMAL_THUMB_RETURN_COMMAND);
+#endif
+
+ /* Then call layer_set to update LEDs. */
+ layer_set(true, NORMAL);
+}
+
+static void set_nas(bool on) {
+ /* Always turn on the base NAS layer so other layers can fall through. */
+ layer_set(on, NAS);
+
+ layer_set(on && numlock_enabled, NAS_NUMLOCK);
+ layer_set(on && tenkey_enabled, NAS_TENKEY);
+ layer_set(on && tenkey_enabled && numlock_enabled, NAS_TENKEY_NUMLOCK);
+}
+
+static void set_tenkey(bool on) {
+ tenkey_enabled = on;
+
+ /* We have to be on the NAS layer in order to be able to toggle TK.
+ * Re-toggle it on so that we move to the right layer (and set the right LED).
+ */
+ set_nas(true);
+}
+
+static void toggle_numlock(void) {
+ numlock_enabled = !numlock_enabled;
+ lock_led_set(numlock_enabled, LED_NUM_LOCK);
+
+ if (layer_state_is(NAS)) {
+ /* If we're already in NAS, re-set it so that we activate the numlock layer. */
+ set_nas(true);
+ }
+}
+
+static void set_function(void) {
+ /* Make sure to turn off NAS if we're entering function */
+ set_nas(false);
+
+ /* Always turn on the mouse layer so the arrow layer can fall through. */
+ layer_set(true, FUNCTION_MOUSE);
+ layer_set(!mouse_enabled, FUNCTION_ARROWS);
+}
+
+static void set_mouse_enabled(bool on) {
+ mouse_enabled = on;
+
+ /* Re-run set_function to set our layers correctly. */
+ set_function();
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ bool pressed = record->event.pressed;
+
+ switch(keycode) {
+ case N:
+ if (pressed) {
+ set_normal();
+ }
+ break;
+
+ case NS:
+ if (pressed) {
+ nas_locked = false;
+ }
+ set_nas(pressed);
+ break;
+
+ case NSL:
+ if (pressed) {
+ nas_locked = true;
+ set_nas(true);
+ }
+ break;
+
+ case NLK:
+ if (pressed) {
+ toggle_numlock();
+ SEND_STRING(SS_DOWN(X_NUMLOCK));
+ } else {
+ SEND_STRING(SS_UP(X_NUMLOCK));
+ }
+ break;
+
+ case FN:
+ if (pressed) {
+ set_function();
+ }
+ break;
+
+ case TK0:
+ if (pressed) {
+ set_tenkey(false);
+ }
+ break;
+
+ case TK1:
+ if (pressed) {
+ set_tenkey(true);
+ }
+ break;
+
+ case MS:
+ if (pressed) {
+ set_mouse_enabled(true);
+ }
+ break;
+
+ case AR:
+ if (pressed) {
+ set_mouse_enabled(false);
+ }
+ break;
+
+ case DZ:
+ if (pressed) {
+ SEND_STRING(SS_TAP(X_KP_0) SS_TAP(X_KP_0));
+ }
+ break;
+ }
+
+ return true;
+};
+
+void matrix_init_user(void) {
+#ifdef DATAHAND_THUMB_RETURN_COMMAND
+ set_normal();
+#endif
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+ lock_led_set(usb_led & (1<<USB_LED_NUM_LOCK), LED_NUM_LOCK);
+ lock_led_set(usb_led & (1<<USB_LED_CAPS_LOCK), LED_CAPS_LOCK);
+ lock_led_set(usb_led & (1<<USB_LED_SCROLL_LOCK), LED_SCROLL_LOCK);
+}
diff --git a/keyboards/handwired/datahand/matrix.c b/keyboards/handwired/datahand/matrix.c
new file mode 100644
index 000000000..a08450d77
--- /dev/null
+++ b/keyboards/handwired/datahand/matrix.c
@@ -0,0 +1,125 @@
+/* Copyright 2017-2019 Nikolaus Wittenstein <nikolaus.wittenstein@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "datahand.h"
+
+#include "matrix.h"
+#include "action.h"
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+
+static matrix_row_t matrix[MATRIX_ROWS];
+
+static matrix_row_t read_cols(void);
+static void select_row(uint8_t row);
+
+void matrix_init(void) {
+ /* See datahand.h for more detail on pins. */
+
+ /* 7 - matrix scan; 6-3 - mode LEDs */
+ DDRB = 0b11111000;
+
+ /* 1-0 - matrix scan */
+ DDRD = 0b00000011;
+
+ /* 6 - matrix scan */
+ DDRE = 0b01000000;
+
+ /* 7-4 - lock LEDs */
+ DDRF = 0b11110000;
+
+ /* Turn off the non-Normal LEDs (they're active low). */
+ PORTB |= LED_TENKEY | LED_FN | LED_NAS;
+
+ /* Turn off the lock LEDs. */
+ PORTF |= LED_CAPS_LOCK | LED_NUM_LOCK | LED_SCROLL_LOCK | LED_MOUSE_LOCK;
+
+ matrix_init_user();
+}
+
+uint8_t matrix_scan(void) {
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ select_row(row);
+ /* The default hardware works down to at least 100us, but I have a replacement
+ * photodiode that responds a little more slowly. Cranking it up to 1000us fixes
+ * shadowing issues.
+ */
+ _delay_us(1000);
+ matrix[row] = read_cols();
+ }
+
+ matrix_scan_user();
+
+ return 1;
+}
+
+matrix_row_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_print(void) {
+ print("\nr/c 01234567\n");
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row);
+ print(": ");
+ print_bin_reverse8(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ return process_record_user(keycode, record);
+}
+
+static void select_row(uint8_t row) {
+ /* Original 8051: P1 bits 0-3 (pins 1-4)
+ * Teensy++: PE0, PB7, PD0, PD1
+ */
+
+ if (row & (1<<0)) {
+ PORTE |= (1<<6);
+ } else {
+ PORTE &= ~(1<<6);
+ }
+
+ if (row & (1<<1)) {
+ PORTB |= (1<<7);
+ } else {
+ PORTB &= ~(1<<7);
+ }
+
+ if (row & (1<<2)) {
+ PORTD |= (1<<0);
+ } else {
+ PORTD &= ~(1<<0);
+ }
+
+ if (row & (1<<3)) {
+ PORTD |= (1<<1);
+ } else {
+ PORTD &= ~(1<<1);
+ }
+}
+
+static matrix_row_t read_cols(void) {
+ /* Original 8051: P1 bits 4-7 (pins 5-8)
+ * Teensy++: PD bits 2-5
+ */
+
+ return (PIND & 0b00111100) >> 2;
+}
diff --git a/keyboards/handwired/datahand/readme.md b/keyboards/handwired/datahand/readme.md
new file mode 100644
index 000000000..923cebb00
--- /dev/null
+++ b/keyboards/handwired/datahand/readme.md
@@ -0,0 +1,15 @@
+# DataHand
+
+A keyboard designed to prevent RSI. See [Wikipedia](https://en.wikipedia.org/wiki/DataHand) and [this website](http://octopup.org/computer/datahand) for more info.
+
+To use this firmware, you have to replace the stock microcontroller with a Teensy++ 2.0. This is relatively easy and also reversible. See the notes at the bottom of datahand.h for more info.
+
+Keyboard Maintainer: [Nikolaus Wittenstein](https://github.com/adzenith)
+Hardware Supported: DataHand Personal or Pro II
+Hardware Availability: No longer in production
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/datahand:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/datahand/rules.mk b/keyboards/handwired/datahand/rules.mk
new file mode 100644
index 000000000..59f14e17a
--- /dev/null
+++ b/keyboards/handwired/datahand/rules.mk
@@ -0,0 +1,59 @@
+# Project-specific includes
+SRC = matrix.c
+
+# MCU name
+MCU = at90usb1286
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+BOOTLOADER = halfkay
+
+# Build Options
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+CUSTOM_MATRIX = yes # We definitely have a nonstandard matrix
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/downbubble/downbubble.h b/keyboards/handwired/downbubble/downbubble.h
index a25a9a5db..0df39dd9e 100644
--- a/keyboards/handwired/downbubble/downbubble.h
+++ b/keyboards/handwired/downbubble/downbubble.h
@@ -25,7 +25,7 @@
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
-#define LAYOUT_downbubble_standard( \
+#define LAYOUT_standard( \
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K118, K119,\
K20, K21, K22, K23, K24, K25, K26, K27, K28, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
@@ -42,7 +42,7 @@
{ K50, K51, K52, K53, K54, KC_NO, K56, KC_NO, K58, KC_NO, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
}
-#define LAYOUT_downbubble_splitbackspace( \
+#define LAYOUT_split_bs( \
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119,\
K20, K21, K22, K23, K24, K25, K26, K27, K28, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
@@ -59,7 +59,7 @@
{ K50, K51, K52, K53, K54, KC_NO, K56, KC_NO, K58, KC_NO, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
}
-#define LAYOUT_downbubble_splitrightshift( \
+#define LAYOUT_split_rshift( \
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K118, K119,\
K20, K21, K22, K23, K24, K25, K26, K27, K28, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
@@ -76,7 +76,7 @@
{ K50, K51, K52, K53, K54, KC_NO, K56, KC_NO, K58, KC_NO, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
}
-#define LAYOUT_downbubble_splitnumpad( \
+#define LAYOUT_split_numpad( \
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K118, K119,\
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
@@ -93,7 +93,7 @@
{ K50, K51, K52, K53, K54, KC_NO, K56, K57, K58, K59, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
}
-#define LAYOUT_downbubble_spliteverything( \
+#define LAYOUT_all( \
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119,\
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
diff --git a/keyboards/handwired/downbubble/info.json b/keyboards/handwired/downbubble/info.json
index cd64c0e36..c5cd97de5 100644
--- a/keyboards/handwired/downbubble/info.json
+++ b/keyboards/handwired/downbubble/info.json
@@ -5,550 +5,555 @@
"width": 22.75,
"height": 6,
"layouts": {
- "LAYOUT_downbubble_standard": {
- "layout": [
- {"label":"K00", "x":0, "y":0.5},
- {"label":"K01", "x":1, "y":0.5},
- {"label":"K02", "x":2, "y":0.5},
- {"label":"K03", "x":3, "y":0.5},
- {"label":"K04", "x":4, "y":0.5},
- {"label":"K05", "x":5, "y":0.5},
- {"label":"K06", "x":6, "y":0.5},
- {"label":"K010", "x":12.75, "y":0.5},
- {"label":"K011", "x":13.75, "y":0.5},
- {"label":"K012", "x":14.75, "y":0.5},
- {"label":"K013", "x":15.75, "y":0.5},
- {"label":"K014", "x":16.75, "y":0.5},
- {"label":"K015", "x":17.75, "y":0.5},
- {"label":"K016", "x":18.75, "y":0.5},
- {"label":"K017", "x":19.75, "y":0.5},
- {"label":"K018", "x":20.75, "y":0.5},
- {"label":"K019", "x":21.75, "y":0.5},
- {"label":"K10", "x":0, "y":1.5},
- {"label":"K11", "x":1, "y":1.5},
- {"label":"K12", "x":2, "y":1.5},
- {"label":"K13", "x":3, "y":1.5},
- {"label":"K14", "x":4, "y":1.5},
- {"label":"K15", "x":5, "y":1.5},
- {"label":"K16", "x":6, "y":1.5},
- {"label":"K17", "x":8.75, "y":1.5},
- {"label":"K18", "x":9.75, "y":1.5},
- {"label":"K19", "x":10.75, "y":1.5},
- {"label":"K110", "x":12.75, "y":1.5},
- {"label":"K111", "x":13.75, "y":1.5},
- {"label":"K112", "x":14.75, "y":1.5},
- {"label":"K113", "x":15.75, "y":1.5},
- {"label":"K114", "x":16.75, "y":1.5},
- {"label":"K115", "x":17.75, "y":1.5},
- {"label":"K116", "x":18.75, "y":1.5, "w":2},
- {"label":"K118", "x":20.75, "y":1.5},
- {"label":"K119", "x":21.75, "y":1.5},
- {"label":"K20", "x":0, "y":2.5, "w":1.5},
- {"label":"K21", "x":1.5, "y":2.5},
- {"label":"K22", "x":2.5, "y":2.5},
- {"label":"K23", "x":3.5, "y":2.5},
- {"label":"K24", "x":4.5, "y":2.5},
- {"label":"K25", "x":5.5, "y":2.5},
- {"label":"K26", "x":7.75, "y":2.5},
- {"label":"K17", "x":8.75, "y":2.5},
- {"label":"K28", "x":9.75, "y":2.5},
- {"label":"K210", "x":12.25, "y":2.5},
- {"label":"K211", "x":13.25, "y":2.5},
- {"label":"K212", "x":14.25, "y":2.5},
- {"label":"K213", "x":15.25, "y":2.5},
- {"label":"K214", "x":16.25, "y":2.5},
- {"label":"K215", "x":17.25, "y":2.5},
- {"label":"K216", "x":18.25, "y":2.5},
- {"label":"K217", "x":19.25, "y":2.5, "w":1.5},
- {"label":"K218", "x":20.75, "y":2.5},
- {"label":"K219", "x":21.75, "y":2.5},
- {"label":"K30", "x":0, "y":3.5, "w":1.75},
- {"label":"K31", "x":1.75, "y":3.5},
- {"label":"K32", "x":2.75, "y":3.5},
- {"label":"K33", "x":3.75, "y":3.5},
- {"label":"K34", "x":4.75, "y":3.5},
- {"label":"K35", "x":5.75, "y":3.5},
- {"label":"K36", "x":7.75, "y":3.5},
- {"label":"K37", "x":8.75, "y":3.5},
- {"label":"K38", "x":9.75, "y":3.5},
- {"label":"K29", "x":10.75, "y":2.5, "h":2},
- {"label":"K310", "x":12.5, "y":3.5},
- {"label":"K311", "x":13.5, "y":3.5},
- {"label":"K312", "x":14.5, "y":3.5},
- {"label":"K313", "x":15.5, "y":3.5},
- {"label":"K314", "x":16.5, "y":3.5},
- {"label":"K315", "x":17.5, "y":3.5},
- {"label":"K317", "x":18.5, "y":3.5, "w":2.25},
- {"label":"K40", "x":0, "y":4.5, "w":2.25},
- {"label":"K41", "x":2.25, "y":4.5},
- {"label":"K42", "x":3.25, "y":4.5},
- {"label":"K43", "x":4.25, "y":4.5},
- {"label":"K44", "x":5.25, "y":4.5},
- {"label":"K45", "x":6.25, "y":4.5},
- {"label":"K46", "x":7.75, "y":4.5},
- {"label":"K47", "x":8.75, "y":4.5},
- {"label":"K48", "x":9.75, "y":4.5},
- {"label":"K410", "x":13, "y":4.5},
- {"label":"K411", "x":14, "y":4.5},
- {"label":"K412", "x":15, "y":4.5},
- {"label":"K413", "x":16, "y":4.5},
- {"label":"K414", "x":17, "y":4.5},
- {"label":"K416", "x":18, "y":4.5, "w":2.75},
- {"label":"K418", "x":20.75, "y":4.5},
- {"label":"K50", "x":0, "y":5.5, "w":1.25},
- {"label":"K51", "x":1.25, "y":5.5, "w":1.25},
- {"label":"K52", "x":2.5, "y":5.5, "w":1.25},
- {"label":"K53", "x":3.75, "y":5.5, "w":1.25},
- {"label":"K54", "x":5, "y":5.5, "w":2.25},
- {"label":"K56", "x":7.75, "y":5.5, "w":2},
- {"label":"K58", "x":9.75, "y":5.5},
- {"label":"K49", "x":10.75, "y":4.5, "h":2},
- {"label":"K510", "x":13, "y":5.5, "w":2},
- {"label":"K512", "x":15, "y":5.5, "w":1.25},
- {"label":"K513", "x":16.25, "y":5.5, "w":1.25},
- {"label":"K514", "x":17.5, "y":5.5, "w":1.25},
- {"label":"K516", "x":18.75, "y":5.5},
- {"label":"K517", "x":19.75, "y":5.5},
- {"label":"K518", "x":20.75, "y":5.5},
- {"label":"K519", "x":21.75, "y":5.5}]
- },
- "LAYOUT_downbubbled_splitbackspace": {
- "layout": [
- {"label":"K00", "x":0, "y":0.5},
- {"label":"K01", "x":1, "y":0.5},
- {"label":"K02", "x":2, "y":0.5},
- {"label":"K03", "x":3, "y":0.5},
- {"label":"K04", "x":4, "y":0.5},
- {"label":"K05", "x":5, "y":0.5},
- {"label":"K06", "x":6, "y":0.5},
- {"label":"K010", "x":12.75, "y":0.5},
- {"label":"K011", "x":13.75, "y":0.5},
- {"label":"K012", "x":14.75, "y":0.5},
- {"label":"K013", "x":15.75, "y":0.5},
- {"label":"K014", "x":16.75, "y":0.5},
- {"label":"K015", "x":17.75, "y":0.5},
- {"label":"K016", "x":18.75, "y":0.5},
- {"label":"K017", "x":19.75, "y":0.5},
- {"label":"K018", "x":20.75, "y":0.5},
- {"label":"K019", "x":21.75, "y":0.5},
- {"label":"K10", "x":0, "y":1.5},
- {"label":"K11", "x":1, "y":1.5},
- {"label":"K12", "x":2, "y":1.5},
- {"label":"K13", "x":3, "y":1.5},
- {"label":"K14", "x":4, "y":1.5},
- {"label":"K15", "x":5, "y":1.5},
- {"label":"K16", "x":6, "y":1.5},
- {"label":"K17", "x":8.75, "y":1.5},
- {"label":"K18", "x":9.75, "y":1.5},
- {"label":"K19", "x":10.75, "y":1.5},
- {"label":"K110", "x":12.75, "y":1.5},
- {"label":"K111", "x":13.75, "y":1.5},
- {"label":"K112", "x":14.75, "y":1.5},
- {"label":"K113", "x":15.75, "y":1.5},
- {"label":"K114", "x":16.75, "y":1.5},
- {"label":"K115", "x":17.75, "y":1.5},
- {"label":"K116", "x":18.75, "y":1.5},
- {"label":"K117", "x":19.75, "y":1},
- {"label":"K118", "x":20.75, "y":1.5},
- {"label":"K119", "x":21.75, "y":1.5},
- {"label":"K20", "x":0, "y":2.5, "w":1.5},
- {"label":"K21", "x":1.5, "y":2.5},
- {"label":"K22", "x":2.5, "y":2.5},
- {"label":"K23", "x":3.5, "y":2.5},
- {"label":"K24", "x":4.5, "y":2.5},
- {"label":"K25", "x":5.5, "y":2.5},
- {"label":"K26", "x":7.75, "y":2.5},
- {"label":"K17", "x":8.75, "y":2.5},
- {"label":"K28", "x":9.75, "y":2.5},
- {"label":"K210", "x":12.25, "y":2.5},
- {"label":"K211", "x":13.25, "y":2.5},
- {"label":"K212", "x":14.25, "y":2.5},
- {"label":"K213", "x":15.25, "y":2.5},
- {"label":"K214", "x":16.25, "y":2.5},
- {"label":"K215", "x":17.25, "y":2.5},
- {"label":"K216", "x":18.25, "y":2.5},
- {"label":"K217", "x":19.25, "y":2.5, "w":1.5},
- {"label":"K218", "x":20.75, "y":2.5},
- {"label":"K219", "x":21.75, "y":2.5},
- {"label":"K30", "x":0, "y":3.5, "w":1.75},
- {"label":"K31", "x":1.75, "y":3.5},
- {"label":"K32", "x":2.75, "y":3.5},
- {"label":"K33", "x":3.75, "y":3.5},
- {"label":"K34", "x":4.75, "y":3.5},
- {"label":"K35", "x":5.75, "y":3.5},
- {"label":"K36", "x":7.75, "y":3.5},
- {"label":"K37", "x":8.75, "y":3.5},
- {"label":"K38", "x":9.75, "y":3.5},
- {"label":"K29", "x":10.75, "y":2.5, "h":2},
- {"label":"K310", "x":12.5, "y":3.5},
- {"label":"K311", "x":13.5, "y":3.5},
- {"label":"K312", "x":14.5, "y":3.5},
- {"label":"K313", "x":15.5, "y":3.5},
- {"label":"K314", "x":16.5, "y":3.5},
- {"label":"K315", "x":17.5, "y":3.5},
- {"label":"K317", "x":18.5, "y":3.5, "w":2.25},
- {"label":"K40", "x":0, "y":4.5, "w":2.25},
- {"label":"K41", "x":2.25, "y":4.5},
- {"label":"K42", "x":3.25, "y":4.5},
- {"label":"K43", "x":4.25, "y":4.5},
- {"label":"K44", "x":5.25, "y":4.5},
- {"label":"K45", "x":6.25, "y":4.5},
- {"label":"K46", "x":7.75, "y":4.5},
- {"label":"K47", "x":8.75, "y":4.5},
- {"label":"K48", "x":9.75, "y":4.5},
- {"label":"K410", "x":13, "y":4.5},
- {"label":"K411", "x":14, "y":4.5},
- {"label":"K412", "x":15, "y":4.5},
- {"label":"K413", "x":16, "y":4.5},
- {"label":"K414", "x":17, "y":4.5},
- {"label":"K416", "x":18, "y":4.5, "w":2.75},
- {"label":"K418", "x":20.75, "y":4.5},
- {"label":"K50", "x":0, "y":5.5, "w":1.25},
- {"label":"K51", "x":1.25, "y":5.5, "w":1.25},
- {"label":"K52", "x":2.5, "y":5.5, "w":1.25},
- {"label":"K53", "x":3.75, "y":5.5, "w":1.25},
- {"label":"K54", "x":5, "y":5.5, "w":2.25},
- {"label":"K56", "x":7.75, "y":5.5, "w":2},
- {"label":"K58", "x":9.75, "y":5.5},
- {"label":"K49", "x":10.75, "y":4.5, "h":2},
- {"label":"K510", "x":13, "y":5.5, "w":2},
- {"label":"K512", "x":15, "y":5.5, "w":1.25},
- {"label":"K513", "x":16.25, "y":5.5, "w":1.25},
- {"label":"K514", "x":17.5, "y":5.5, "w":1.25},
- {"label":"K516", "x":18.75, "y":5.5},
- {"label":"K517", "x":19.75, "y":5.5},
- {"label":"K518", "x":20.75, "y":5.5},
- {"label":"K519", "x":21.75, "y":5.5}]
- },
- "LAYOUT_downbubble_splitrightshift": {
- "layout": [
- {"label":"K00", "x":0, "y":0.5},
- {"label":"K01", "x":1, "y":0.5},
- {"label":"K02", "x":2, "y":0.5},
- {"label":"K03", "x":3, "y":0.5},
- {"label":"K04", "x":4, "y":0.5},
- {"label":"K05", "x":5, "y":0.5},
- {"label":"K06", "x":6, "y":0.5},
- {"label":"K010", "x":12.75, "y":0.5},
- {"label":"K011", "x":13.75, "y":0.5},
- {"label":"K012", "x":14.75, "y":0.5},
- {"label":"K013", "x":15.75, "y":0.5},
- {"label":"K014", "x":16.75, "y":0.5},
- {"label":"K015", "x":17.75, "y":0.5},
- {"label":"K016", "x":18.75, "y":0.5},
- {"label":"K017", "x":19.75, "y":0.5},
- {"label":"K018", "x":20.75, "y":0.5},
- {"label":"K019", "x":21.75, "y":0.5},
- {"label":"K10", "x":0, "y":1.5},
- {"label":"K11", "x":1, "y":1.5},
- {"label":"K12", "x":2, "y":1.5},
- {"label":"K13", "x":3, "y":1.5},
- {"label":"K14", "x":4, "y":1.5},
- {"label":"K15", "x":5, "y":1.5},
- {"label":"K16", "x":6, "y":1.5},
- {"label":"K17", "x":8.75, "y":1.5},
- {"label":"K18", "x":9.75, "y":1.5},
- {"label":"K19", "x":10.75, "y":1.5},
- {"label":"K110", "x":12.75, "y":1.5},
- {"label":"K111", "x":13.75, "y":1.5},
- {"label":"K112", "x":14.75, "y":1.5},
- {"label":"K113", "x":15.75, "y":1.5},
- {"label":"K114", "x":16.75, "y":1.5},
- {"label":"K115", "x":17.75, "y":1.5},
- {"label":"K116", "x":18.75, "y":1.5, "w":2},
- {"label":"K118", "x":20.75, "y":1.5},
- {"label":"K119", "x":21.75, "y":1.5},
- {"label":"K20", "x":0, "y":2.5, "w":1.5},
- {"label":"K21", "x":1.5, "y":2.5},
- {"label":"K22", "x":2.5, "y":2.5},
- {"label":"K23", "x":3.5, "y":2.5},
- {"label":"K24", "x":4.5, "y":2.5},
- {"label":"K25", "x":5.5, "y":2.5},
- {"label":"K26", "x":7.75, "y":2.5},
- {"label":"K17", "x":8.75, "y":2.5},
- {"label":"K28", "x":9.75, "y":2.5},
- {"label":"K210", "x":12.25, "y":2.5},
- {"label":"K211", "x":13.25, "y":2.5},
- {"label":"K212", "x":14.25, "y":2.5},
- {"label":"K213", "x":15.25, "y":2.5},
- {"label":"K214", "x":16.25, "y":2.5},
- {"label":"K215", "x":17.25, "y":2.5},
- {"label":"K216", "x":18.25, "y":2.5},
- {"label":"K217", "x":19.25, "y":2.5, "w":1.5},
- {"label":"K218", "x":20.75, "y":2.5},
- {"label":"K219", "x":21.75, "y":2.5},
- {"label":"K30", "x":0, "y":3.5, "w":1.75},
- {"label":"K31", "x":1.75, "y":3.5},
- {"label":"K32", "x":2.75, "y":3.5},
- {"label":"K33", "x":3.75, "y":3.5},
- {"label":"K34", "x":4.75, "y":3.5},
- {"label":"K35", "x":5.75, "y":3.5},
- {"label":"K36", "x":7.75, "y":3.5},
- {"label":"K37", "x":8.75, "y":3.5},
- {"label":"K38", "x":9.75, "y":3.5},
- {"label":"K29", "x":10.75, "y":2.5, "h":2},
- {"label":"K310", "x":12.5, "y":3.5},
- {"label":"K311", "x":13.5, "y":3.5},
- {"label":"K312", "x":14.5, "y":3.5},
- {"label":"K313", "x":15.5, "y":3.5},
- {"label":"K314", "x":16.5, "y":3.5},
- {"label":"K315", "x":17.5, "y":3.5},
- {"label":"K317", "x":18.5, "y":3.5, "w":2.25},
- {"label":"K40", "x":0, "y":4.5, "w":2.25},
- {"label":"K41", "x":2.25, "y":4.5},
- {"label":"K42", "x":3.25, "y":4.5},
- {"label":"K43", "x":4.25, "y":4.5},
- {"label":"K44", "x":5.25, "y":4.5},
- {"label":"K45", "x":6.25, "y":4.5},
- {"label":"K46", "x":7.75, "y":4.5},
- {"label":"K47", "x":8.75, "y":4.5},
- {"label":"K48", "x":9.75, "y":4.5},
- {"label":"K410", "x":13, "y":4.5},
- {"label":"K411", "x":14, "y":4.5},
- {"label":"K412", "x":15, "y":4.5},
- {"label":"K413", "x":16, "y":4.5},
- {"label":"K414", "x":17, "y":4.5},
- {"label":"K416", "x":18, "y":4.5, "w":1.75},
- {"label":"K417", "x":19.75, "y":4},
- {"label":"K418", "x":20.75, "y":4.5},
- {"label":"K50", "x":0, "y":5.5, "w":1.25},
- {"label":"K51", "x":1.25, "y":5.5, "w":1.25},
- {"label":"K52", "x":2.5, "y":5.5, "w":1.25},
- {"label":"K53", "x":3.75, "y":5.5, "w":1.25},
- {"label":"K54", "x":5, "y":5.5, "w":2.25},
- {"label":"K56", "x":7.75, "y":5.5, "w":2},
- {"label":"K58", "x":9.75, "y":5.5},
- {"label":"K49", "x":10.75, "y":4.5, "h":2},
- {"label":"K510", "x":13, "y":5.5, "w":2},
- {"label":"K512", "x":15, "y":5.5, "w":1.25},
- {"label":"K513", "x":16.25, "y":5.5, "w":1.25},
- {"label":"K514", "x":17.5, "y":5.5, "w":1.25},
- {"label":"K516", "x":18.75, "y":5.5},
- {"label":"K517", "x":19.75, "y":5.5},
- {"label":"K518", "x":20.75, "y":5.5},
- {"label":"K519", "x":21.75, "y":5.5}]
- },
- "LAYOUT_downbubble_splitnumpad": {
- "layout": [
- {"label":"K00", "x":0, "y":0.5},
- {"label":"K01", "x":1, "y":0.5},
- {"label":"K02", "x":2, "y":0.5},
- {"label":"K03", "x":3, "y":0.5},
- {"label":"K04", "x":4, "y":0.5},
- {"label":"K05", "x":5, "y":0.5},
- {"label":"K06", "x":6, "y":0.5},
- {"label":"K010", "x":12.75, "y":0.5},
- {"label":"K011", "x":13.75, "y":0.5},
- {"label":"K012", "x":14.75, "y":0.5},
- {"label":"K013", "x":15.75, "y":0.5},
- {"label":"K014", "x":16.75, "y":0.5},
- {"label":"K015", "x":17.75, "y":0.5},
- {"label":"K016", "x":18.75, "y":0.5},
- {"label":"K017", "x":19.75, "y":0.5},
- {"label":"K018", "x":20.75, "y":0.5},
- {"label":"K019", "x":21.75, "y":0.5},
- {"label":"K10", "x":0, "y":1.5},
- {"label":"K11", "x":1, "y":1.5},
- {"label":"K12", "x":2, "y":1.5},
- {"label":"K13", "x":3, "y":1.5},
- {"label":"K14", "x":4, "y":1.5},
- {"label":"K15", "x":5, "y":1.5},
- {"label":"K16", "x":6, "y":1.5},
- {"label":"K17", "x":8.75, "y":1.5},
- {"label":"K18", "x":9.75, "y":1.5},
- {"label":"K19", "x":10.75, "y":1.5},
- {"label":"K110", "x":12.75, "y":1.5},
- {"label":"K111", "x":13.75, "y":1.5},
- {"label":"K112", "x":14.75, "y":1.5},
- {"label":"K113", "x":15.75, "y":1.5},
- {"label":"K114", "x":16.75, "y":1.5},
- {"label":"K115", "x":17.75, "y":1.5},
- {"label":"K116", "x":18.75, "y":1.5, "w":2},
- {"label":"K118", "x":20.75, "y":1.5},
- {"label":"K119", "x":21.75, "y":1.5},
- {"label":"K20", "x":0, "y":2.5, "w":1.5},
- {"label":"K21", "x":1.5, "y":2.5},
- {"label":"K22", "x":2.5, "y":2.5},
- {"label":"K23", "x":3.5, "y":2.5},
- {"label":"K24", "x":4.5, "y":2.5},
- {"label":"K25", "x":5.5, "y":2.5},
- {"label":"K26", "x":7.75, "y":2.5},
- {"label":"K17", "x":8.75, "y":2.5},
- {"label":"K28", "x":9.75, "y":2.5},
- {"label":"K29", "x":10.75, "y":2},
- {"label":"K210", "x":12.25, "y":2.5},
- {"label":"K211", "x":13.25, "y":2.5},
- {"label":"K212", "x":14.25, "y":2.5},
- {"label":"K213", "x":15.25, "y":2.5},
- {"label":"K214", "x":16.25, "y":2.5},
- {"label":"K215", "x":17.25, "y":2.5},
- {"label":"K216", "x":18.25, "y":2.5},
- {"label":"K217", "x":19.25, "y":2.5, "w":1.5},
- {"label":"K218", "x":20.75, "y":2.5},
- {"label":"K219", "x":21.75, "y":2.5},
- {"label":"K30", "x":0, "y":3.5, "w":1.75},
- {"label":"K31", "x":1.75, "y":3.5},
- {"label":"K32", "x":2.75, "y":3.5},
- {"label":"K33", "x":3.75, "y":3.5},
- {"label":"K34", "x":4.75, "y":3.5},
- {"label":"K35", "x":5.75, "y":3.5},
- {"label":"K36", "x":7.75, "y":3.5},
- {"label":"K37", "x":8.75, "y":3.5},
- {"label":"K38", "x":9.75, "y":3.5},
- {"label":"K39", "x":10.75, "y":3},
- {"label":"K310", "x":12.5, "y":3.5},
- {"label":"K311", "x":13.5, "y":3.5},
- {"label":"K312", "x":14.5, "y":3.5},
- {"label":"K313", "x":15.5, "y":3.5},
- {"label":"K314", "x":16.5, "y":3.5},
- {"label":"K315", "x":17.5, "y":3.5},
- {"label":"K317", "x":18.5, "y":3.5, "w":2.25},
- {"label":"K40", "x":0, "y":4.5, "w":2.25},
- {"label":"K41", "x":2.25, "y":4.5},
- {"label":"K42", "x":3.25, "y":4.5},
- {"label":"K43", "x":4.25, "y":4.5},
- {"label":"K44", "x":5.25, "y":4.5},
- {"label":"K45", "x":6.25, "y":4.5},
- {"label":"K46", "x":7.75, "y":4.5},
- {"label":"K47", "x":8.75, "y":4.5},
- {"label":"K48", "x":9.75, "y":4.5},
- {"label":"K49", "x":10.75, "y":4},
- {"label":"K410", "x":13, "y":4.5},
- {"label":"K411", "x":14, "y":4.5},
- {"label":"K412", "x":15, "y":4.5},
- {"label":"K413", "x":16, "y":4.5},
- {"label":"K414", "x":17, "y":4.5},
- {"label":"K416", "x":18, "y":4.5, "w":2.75},
- {"label":"K418", "x":20.75, "y":4.5},
- {"label":"K50", "x":0, "y":5.5, "w":1.25},
- {"label":"K51", "x":1.25, "y":5.5, "w":1.25},
- {"label":"K52", "x":2.5, "y":5.5, "w":1.25},
- {"label":"K53", "x":3.75, "y":5.5, "w":1.25},
- {"label":"K54", "x":5, "y":5.5, "w":2.25},
- {"label":"K56", "x":7.75, "y":5.5},
- {"Label":"K57", "x":8.75, "y":5},
- {"label":"K58", "x":9.75, "y":5},
- {"label":"K59", "x":10.75, "y":5},
- {"label":"K510", "x":13, "y":5.5, "w":2},
- {"label":"K512", "x":15, "y":5.5, "w":1.25},
- {"label":"K513", "x":16.25, "y":5.5, "w":1.25},
- {"label":"K514", "x":17.5, "y":5.5, "w":1.25},
- {"label":"K516", "x":18.75, "y":5.5},
- {"label":"K517", "x":19.75, "y":5.5},
- {"label":"K518", "x":20.75, "y":5.5},
- {"label":"K519", "x":21.75, "y":5.5}]
- },
- "LAYOUT_downbubble_spliteverything": {
- "layout": [
- {"label":"K00", "x":0, "y":0},
- {"label":"K01", "x":1, "y":0},
- {"label":"K02", "x":2, "y":0},
- {"label":"K03", "x":3, "y":0},
- {"label":"K04", "x":4, "y":0},
- {"label":"K05", "x":5, "y":0},
- {"label":"K06", "x":6, "y":0},
- {"label":"K010", "x":12.75, "y":0},
- {"label":"K011", "x":13.75, "y":0},
- {"label":"K012", "x":14.75, "y":0},
- {"label":"K013", "x":15.75, "y":0},
- {"label":"K014", "x":16.75, "y":0},
- {"label":"K015", "x":17.75, "y":0},
- {"label":"K016", "x":18.75, "y":0},
- {"label":"K017", "x":19.75, "y":0},
- {"label":"K018", "x":20.75, "y":0},
- {"label":"K019", "X":21.75, "y":0},
- {"label":"K10", "x":0, "y":1},
- {"label":"K11", "x":1, "y":1},
- {"label":"K12", "x":2, "y":1},
- {"label":"K13", "x":3, "y":1},
- {"label":"K14", "x":4, "y":1},
- {"label":"K15", "x":5, "y":1},
- {"label":"K16", "x":6, "y":1},
- {"label":"K17", "x":8.75, "y":1},
- {"label":"K18", "x":9.75, "y":1},
- {"label":"K19", "x":10.75, "y":1},
- {"label":"K110", "x":12.75, "y":1},
- {"label":"K111", "x":13.75, "y":1},
- {"label":"K112", "x":14.75, "y":1},
- {"label":"K113", "x":15.75, "y":1},
- {"label":"K114", "x":16.75, "y":1},
- {"label":"K115", "x":17.75, "y":1},
- {"label":"K116", "x":18.75, "y":1},
- {"label":"K117", "x":19.75, "y":1},
- {"label":"K118", "x":20.75, "y":1},
- {"label":"K119", "x":21.75, "y":1},
- {"label":"K20", "x":0, "y":2, "w":1.5},
- {"label":"K21", "x":1.5, "y":2},
- {"label":"K22", "x":2.5, "y":2},
- {"label":"K23", "x":3.5, "y":2},
- {"label":"K24", "x":4.5, "y":2},
- {"label":"K25", "x":5.5, "y":2},
- {"label":"K26", "x":7.75, "y":2},
- {"label":"K27", "x":8.75, "y":2},
- {"label":"K28", "x":9.75, "y":2},
- {"label":"K29", "x":10.75, "y":2},
- {"label":"K210", "x":12.25, "y":2},
- {"label":"K211", "x":13.25, "y":2},
- {"label":"K212", "x":14.25, "y":2},
- {"label":"K213", "x":15.25, "y":2},
- {"label":"K214", "x":16.25, "y":2},
- {"label":"K215", "x":17.25, "y":2},
- {"label":"K216", "x":18.25, "y":2},
- {"label":"K217", "x":19.25, "y":2, "w":1.5},
- {"label":"K218", "x":20.75, "y":2},
- {"label":"K219", "x":21.75, "y":2},
- {"label":"K30", "x":0, "y":3, "w":1.75},
- {"label":"K31", "x":1.75, "y":3},
- {"label":"K32", "x":2.75, "y":3},
- {"label":"K33", "x":3.75, "y":3},
- {"label":"K34", "x":4.75, "y":3},
- {"label":"K35", "x":5.75, "y":3},
- {"label":"K36", "x":7.75, "y":3},
- {"label":"K37", "x":8.75, "y":3},
- {"label":"K38", "x":9.75, "y":3},
- {"label":"K39", "x":10.75, "y":3},
- {"label":"K310", "x":12.5, "y":3},
- {"label":"K311", "x":13.5, "y":3},
- {"label":"K312", "x":14.5, "y":3},
- {"label":"K313", "x":15.5, "y":3},
- {"label":"K314", "x":16.5, "y":3},
- {"label":"K315", "x":17.5, "y":3},
- {"label":"K317", "x":18.5, "y":3, "w":2.25},
- {"label":"K40", "x":0, "y":4, "w":2.25},
- {"label":"K41", "x":2.25, "y":4},
- {"label":"K42", "x":3.25, "y":4},
- {"label":"K43", "x":4.25, "y":4},
- {"label":"K44", "x":5.25, "y":4},
- {"label":"K45", "x":6.25, "y":4},
- {"label":"K46", "x":7.75, "y":4},
- {"label":"K47", "x":8.75, "y":4},
- {"label":"K48", "x":9.75, "y":4},
- {"label":"K49", "x":10.75, "y":4},
- {"label":"K410", "x":13, "y":4},
- {"label":"K411", "x":14, "y":4},
- {"label":"K412", "x":15, "y":4},
- {"label":"K413", "x":16, "y":4},
- {"label":"K414", "x":17, "y":4},
- {"label":"K416", "x":18, "y":4, "w":1.75},
- {"label":"K417", "x":19.75, "y":4},
- {"label":"K418", "x":20.75, "y":4},
- {"label":"K50", "x":0, "y":5, "w":1.25},
- {"label":"K51", "x":1.25, "y":5, "w":1.25},
- {"label":"K52", "x":2.5, "y":5, "w":1.25},
- {"label":"K53", "x":3.75, "y":5, "w":1.25},
- {"label":"K54", "x":5, "y":5, "w":2.25},
- {"label":"K56", "x":7.75, "y":5},
- {"label":"K57", "x":8.75, "y":5},
- {"label":"K58", "x":9.75, "y":5},
- {"label":"K59", "x":10.75, "y":5},
- {"label":"K510", "x":13, "y":5, "w":2},
- {"label":"K512", "x":15, "y":5, "w":1.25},
- {"label":"K513", "x":16.25, "y":5, "w":1.25},
- {"label":"K514", "x":17.5, "y":5, "w":1.25},
- {"label":"K516", "x":18.75, "y":5},
- {"label":"K517", "x":19.75, "y":5},
- {"label":"K518", "x":20.75, "y":5},
- {"label":"K519", "x":21.75, "y":5}]
+ "LAYOUT_standard": {
+ "layout": [
+ {"label":"K00", "x":0, "y":0},
+ {"label":"K01", "x":1, "y":0},
+ {"label":"K02", "x":2, "y":0},
+ {"label":"K03", "x":3, "y":0},
+ {"label":"K04", "x":4, "y":0},
+ {"label":"K05", "x":5, "y":0},
+ {"label":"K06", "x":6, "y":0},
+ {"label":"K010", "x":12.75, "y":0},
+ {"label":"K011", "x":13.75, "y":0},
+ {"label":"K012", "x":14.75, "y":0},
+ {"label":"K013", "x":15.75, "y":0},
+ {"label":"K014", "x":16.75, "y":0},
+ {"label":"K015", "x":17.75, "y":0},
+ {"label":"K016", "x":18.75, "y":0},
+ {"label":"K017", "x":19.75, "y":0},
+ {"label":"K018", "x":20.75, "y":0},
+ {"label":"K019", "x":21.75, "y":0},
+ {"label":"K10", "x":0, "y":1},
+ {"label":"K11", "x":1, "y":1},
+ {"label":"K12", "x":2, "y":1},
+ {"label":"K13", "x":3, "y":1},
+ {"label":"K14", "x":4, "y":1},
+ {"label":"K15", "x":5, "y":1},
+ {"label":"K16", "x":6, "y":1},
+ {"label":"K17", "x":8.75, "y":1},
+ {"label":"K18", "x":9.75, "y":1},
+ {"label":"K19", "x":10.75, "y":1},
+ {"label":"K110", "x":12.75, "y":1},
+ {"label":"K111", "x":13.75, "y":1},
+ {"label":"K112", "x":14.75, "y":1},
+ {"label":"K113", "x":15.75, "y":1},
+ {"label":"K114", "x":16.75, "y":1},
+ {"label":"K115", "x":17.75, "y":1},
+ {"label":"K116", "x":18.75, "y":1, "w":2},
+ {"label":"K118", "x":20.75, "y":1},
+ {"label":"K119", "x":21.75, "y":1},
+ {"label":"K20", "x":0, "y":2, "w":1.5},
+ {"label":"K21", "x":1.5, "y":2},
+ {"label":"K22", "x":2.5, "y":2},
+ {"label":"K23", "x":3.5, "y":2},
+ {"label":"K24", "x":4.5, "y":2},
+ {"label":"K25", "x":5.5, "y":2},
+ {"label":"K26", "x":7.75, "y":2},
+ {"label":"K17", "x":8.75, "y":2},
+ {"label":"K28", "x":9.75, "y":2},
+ {"label":"K210", "x":12.25, "y":2},
+ {"label":"K211", "x":13.25, "y":2},
+ {"label":"K212", "x":14.25, "y":2},
+ {"label":"K213", "x":15.25, "y":2},
+ {"label":"K214", "x":16.25, "y":2},
+ {"label":"K215", "x":17.25, "y":2},
+ {"label":"K216", "x":18.25, "y":2},
+ {"label":"K217", "x":19.25, "y":2, "w":1.5},
+ {"label":"K218", "x":20.75, "y":2},
+ {"label":"K219", "x":21.75, "y":2},
+ {"label":"K30", "x":0, "y":3, "w":1.75},
+ {"label":"K31", "x":1.75, "y":3},
+ {"label":"K32", "x":2.75, "y":3},
+ {"label":"K33", "x":3.75, "y":3},
+ {"label":"K34", "x":4.75, "y":3},
+ {"label":"K35", "x":5.75, "y":3},
+ {"label":"K36", "x":7.75, "y":3},
+ {"label":"K37", "x":8.75, "y":3},
+ {"label":"K38", "x":9.75, "y":3},
+ {"label":"K29", "x":10.75, "y":2, "h":2},
+ {"label":"K310", "x":12.5, "y":3},
+ {"label":"K311", "x":13.5, "y":3},
+ {"label":"K312", "x":14.5, "y":3},
+ {"label":"K313", "x":15.5, "y":3},
+ {"label":"K314", "x":16.5, "y":3},
+ {"label":"K315", "x":17.5, "y":3},
+ {"label":"K317", "x":18.5, "y":3, "w":2.25},
+ {"label":"K40", "x":0, "y":4, "w":2.25},
+ {"label":"K41", "x":2.25, "y":4},
+ {"label":"K42", "x":3.25, "y":4},
+ {"label":"K43", "x":4.25, "y":4},
+ {"label":"K44", "x":5.25, "y":4},
+ {"label":"K45", "x":6.25, "y":4},
+ {"label":"K46", "x":7.75, "y":4},
+ {"label":"K47", "x":8.75, "y":4},
+ {"label":"K48", "x":9.75, "y":4},
+ {"label":"K410", "x":13, "y":4},
+ {"label":"K411", "x":14, "y":4},
+ {"label":"K412", "x":15, "y":4},
+ {"label":"K413", "x":16, "y":4},
+ {"label":"K414", "x":17, "y":4},
+ {"label":"K416", "x":18, "y":4, "w":2.75},
+ {"label":"K418", "x":20.75, "y":4},
+ {"label":"K50", "x":0, "y":5, "w":1.25},
+ {"label":"K51", "x":1.25, "y":5, "w":1.25},
+ {"label":"K52", "x":2.5, "y":5, "w":1.25},
+ {"label":"K53", "x":3.75, "y":5, "w":1.25},
+ {"label":"K54", "x":5, "y":5, "w":2.25},
+ {"label":"K56", "x":7.75, "y":5, "w":2},
+ {"label":"K58", "x":9.75, "y":5},
+ {"label":"K49", "x":10.75, "y":4, "h":2},
+ {"label":"K510", "x":13, "y":5, "w":2},
+ {"label":"K512", "x":15, "y":5, "w":1.25},
+ {"label":"K513", "x":16.25, "y":5, "w":1.25},
+ {"label":"K514", "x":17.5, "y":5, "w":1.25},
+ {"label":"K516", "x":18.75, "y":5},
+ {"label":"K517", "x":19.75, "y":5},
+ {"label":"K518", "x":20.75, "y":5},
+ {"label":"K519", "x":21.75, "y":5}
+ ]
+ },
+ "LAYOUT_split_bs": {
+ "layout": [
+ {"label":"K00", "x":0, "y":0},
+ {"label":"K01", "x":1, "y":0},
+ {"label":"K02", "x":2, "y":0},
+ {"label":"K03", "x":3, "y":0},
+ {"label":"K04", "x":4, "y":0},
+ {"label":"K05", "x":5, "y":0},
+ {"label":"K06", "x":6, "y":0},
+ {"label":"K010", "x":12.75, "y":0},
+ {"label":"K011", "x":13.75, "y":0},
+ {"label":"K012", "x":14.75, "y":0},
+ {"label":"K013", "x":15.75, "y":0},
+ {"label":"K014", "x":16.75, "y":0},
+ {"label":"K015", "x":17.75, "y":0},
+ {"label":"K016", "x":18.75, "y":0},
+ {"label":"K017", "x":19.75, "y":0},
+ {"label":"K018", "x":20.75, "y":0},
+ {"label":"K019", "x":21.75, "y":0},
+ {"label":"K10", "x":0, "y":1},
+ {"label":"K11", "x":1, "y":1},
+ {"label":"K12", "x":2, "y":1},
+ {"label":"K13", "x":3, "y":1},
+ {"label":"K14", "x":4, "y":1},
+ {"label":"K15", "x":5, "y":1},
+ {"label":"K16", "x":6, "y":1},
+ {"label":"K17", "x":8.75, "y":1},
+ {"label":"K18", "x":9.75, "y":1},
+ {"label":"K19", "x":10.75, "y":1},
+ {"label":"K110", "x":12.75, "y":1},
+ {"label":"K111", "x":13.75, "y":1},
+ {"label":"K112", "x":14.75, "y":1},
+ {"label":"K113", "x":15.75, "y":1},
+ {"label":"K114", "x":16.75, "y":1},
+ {"label":"K115", "x":17.75, "y":1},
+ {"label":"K116", "x":18.75, "y":1},
+ {"label":"K117", "x":19.75, "y":1},
+ {"label":"K118", "x":20.75, "y":1},
+ {"label":"K119", "x":21.75, "y":1},
+ {"label":"K20", "x":0, "y":2, "w":1.5},
+ {"label":"K21", "x":1.5, "y":2},
+ {"label":"K22", "x":2.5, "y":2},
+ {"label":"K23", "x":3.5, "y":2},
+ {"label":"K24", "x":4.5, "y":2},
+ {"label":"K25", "x":5.5, "y":2},
+ {"label":"K26", "x":7.75, "y":2},
+ {"label":"K17", "x":8.75, "y":2},
+ {"label":"K28", "x":9.75, "y":2},
+ {"label":"K210", "x":12.25, "y":2},
+ {"label":"K211", "x":13.25, "y":2},
+ {"label":"K212", "x":14.25, "y":2},
+ {"label":"K213", "x":15.25, "y":2},
+ {"label":"K214", "x":16.25, "y":2},
+ {"label":"K215", "x":17.25, "y":2},
+ {"label":"K216", "x":18.25, "y":2},
+ {"label":"K217", "x":19.25, "y":2, "w":1.5},
+ {"label":"K218", "x":20.75, "y":2},
+ {"label":"K219", "x":21.75, "y":2},
+ {"label":"K30", "x":0, "y":3, "w":1.75},
+ {"label":"K31", "x":1.75, "y":3},
+ {"label":"K32", "x":2.75, "y":3},
+ {"label":"K33", "x":3.75, "y":3},
+ {"label":"K34", "x":4.75, "y":3},
+ {"label":"K35", "x":5.75, "y":3},
+ {"label":"K36", "x":7.75, "y":3},
+ {"label":"K37", "x":8.75, "y":3},
+ {"label":"K38", "x":9.75, "y":3},
+ {"label":"K29", "x":10.75, "y":2, "h":2},
+ {"label":"K310", "x":12.5, "y":3},
+ {"label":"K311", "x":13.5, "y":3},
+ {"label":"K312", "x":14.5, "y":3},
+ {"label":"K313", "x":15.5, "y":3},
+ {"label":"K314", "x":16.5, "y":3},
+ {"label":"K315", "x":17.5, "y":3},
+ {"label":"K317", "x":18.5, "y":3, "w":2.25},
+ {"label":"K40", "x":0, "y":4, "w":2.25},
+ {"label":"K41", "x":2.25, "y":4},
+ {"label":"K42", "x":3.25, "y":4},
+ {"label":"K43", "x":4.25, "y":4},
+ {"label":"K44", "x":5.25, "y":4},
+ {"label":"K45", "x":6.25, "y":4},
+ {"label":"K46", "x":7.75, "y":4},
+ {"label":"K47", "x":8.75, "y":4},
+ {"label":"K48", "x":9.75, "y":4},
+ {"label":"K410", "x":13, "y":4},
+ {"label":"K411", "x":14, "y":4},
+ {"label":"K412", "x":15, "y":4},
+ {"label":"K413", "x":16, "y":4},
+ {"label":"K414", "x":17, "y":4},
+ {"label":"K416", "x":18, "y":4, "w":2.75},
+ {"label":"K418", "x":20.75, "y":4},
+ {"label":"K50", "x":0, "y":5, "w":1.25},
+ {"label":"K51", "x":1.25, "y":5, "w":1.25},
+ {"label":"K52", "x":2.5, "y":5, "w":1.25},
+ {"label":"K53", "x":3.75, "y":5, "w":1.25},
+ {"label":"K54", "x":5, "y":5, "w":2.25},
+ {"label":"K56", "x":7.75, "y":5, "w":2},
+ {"label":"K58", "x":9.75, "y":5},
+ {"label":"K49", "x":10.75, "y":4, "h":2},
+ {"label":"K510", "x":13, "y":5, "w":2},
+ {"label":"K512", "x":15, "y":5, "w":1.25},
+ {"label":"K513", "x":16.25, "y":5, "w":1.25},
+ {"label":"K514", "x":17.5, "y":5, "w":1.25},
+ {"label":"K516", "x":18.75, "y":5},
+ {"label":"K517", "x":19.75, "y":5},
+ {"label":"K518", "x":20.75, "y":5},
+ {"label":"K519", "x":21.75, "y":5}
+ ]
+ },
+ "LAYOUT_split_rshift": {
+ "layout": [
+ {"label":"K00", "x":0, "y":0},
+ {"label":"K01", "x":1, "y":0},
+ {"label":"K02", "x":2, "y":0},
+ {"label":"K03", "x":3, "y":0},
+ {"label":"K04", "x":4, "y":0},
+ {"label":"K05", "x":5, "y":0},
+ {"label":"K06", "x":6, "y":0},
+ {"label":"K010", "x":12.75, "y":0},
+ {"label":"K011", "x":13.75, "y":0},
+ {"label":"K012", "x":14.75, "y":0},
+ {"label":"K013", "x":15.75, "y":0},
+ {"label":"K014", "x":16.75, "y":0},
+ {"label":"K015", "x":17.75, "y":0},
+ {"label":"K016", "x":18.75, "y":0},
+ {"label":"K017", "x":19.75, "y":0},
+ {"label":"K018", "x":20.75, "y":0},
+ {"label":"K019", "x":21.75, "y":0},
+ {"label":"K10", "x":0, "y":1},
+ {"label":"K11", "x":1, "y":1},
+ {"label":"K12", "x":2, "y":1},
+ {"label":"K13", "x":3, "y":1},
+ {"label":"K14", "x":4, "y":1},
+ {"label":"K15", "x":5, "y":1},
+ {"label":"K16", "x":6, "y":1},
+ {"label":"K17", "x":8.75, "y":1},
+ {"label":"K18", "x":9.75, "y":1},
+ {"label":"K19", "x":10.75, "y":1},
+ {"label":"K110", "x":12.75, "y":1},
+ {"label":"K111", "x":13.75, "y":1},
+ {"label":"K112", "x":14.75, "y":1},
+ {"label":"K113", "x":15.75, "y":1},
+ {"label":"K114", "x":16.75, "y":1},
+ {"label":"K115", "x":17.75, "y":1},
+ {"label":"K116", "x":18.75, "y":1, "w":2},
+ {"label":"K118", "x":20.75, "y":1},
+ {"label":"K119", "x":21.75, "y":1},
+ {"label":"K20", "x":0, "y":2, "w":1.5},
+ {"label":"K21", "x":1.5, "y":2},
+ {"label":"K22", "x":2.5, "y":2},
+ {"label":"K23", "x":3.5, "y":2},
+ {"label":"K24", "x":4.5, "y":2},
+ {"label":"K25", "x":5.5, "y":2},
+ {"label":"K26", "x":7.75, "y":2},
+ {"label":"K17", "x":8.75, "y":2},
+ {"label":"K28", "x":9.75, "y":2},
+ {"label":"K210", "x":12.25, "y":2},
+ {"label":"K211", "x":13.25, "y":2},
+ {"label":"K212", "x":14.25, "y":2},
+ {"label":"K213", "x":15.25, "y":2},
+ {"label":"K214", "x":16.25, "y":2},
+ {"label":"K215", "x":17.25, "y":2},
+ {"label":"K216", "x":18.25, "y":2},
+ {"label":"K217", "x":19.25, "y":2, "w":1.5},
+ {"label":"K218", "x":20.75, "y":2},
+ {"label":"K219", "x":21.75, "y":2},
+ {"label":"K30", "x":0, "y":3, "w":1.75},
+ {"label":"K31", "x":1.75, "y":3},
+ {"label":"K32", "x":2.75, "y":3},
+ {"label":"K33", "x":3.75, "y":3},
+ {"label":"K34", "x":4.75, "y":3},
+ {"label":"K35", "x":5.75, "y":3},
+ {"label":"K36", "x":7.75, "y":3},
+ {"label":"K37", "x":8.75, "y":3},
+ {"label":"K38", "x":9.75, "y":3},
+ {"label":"K29", "x":10.75, "y":2, "h":2},
+ {"label":"K310", "x":12.5, "y":3},
+ {"label":"K311", "x":13.5, "y":3},
+ {"label":"K312", "x":14.5, "y":3},
+ {"label":"K313", "x":15.5, "y":3},
+ {"label":"K314", "x":16.5, "y":3},
+ {"label":"K315", "x":17.5, "y":3},
+ {"label":"K317", "x":18.5, "y":3, "w":2.25},
+ {"label":"K40", "x":0, "y":4, "w":2.25},
+ {"label":"K41", "x":2.25, "y":4},
+ {"label":"K42", "x":3.25, "y":4},
+ {"label":"K43", "x":4.25, "y":4},
+ {"label":"K44", "x":5.25, "y":4},
+ {"label":"K45", "x":6.25, "y":4},
+ {"label":"K46", "x":7.75, "y":4},
+ {"label":"K47", "x":8.75, "y":4},
+ {"label":"K48", "x":9.75, "y":4},
+ {"label":"K410", "x":13, "y":4},
+ {"label":"K411", "x":14, "y":4},
+ {"label":"K412", "x":15, "y":4},
+ {"label":"K413", "x":16, "y":4},
+ {"label":"K414", "x":17, "y":4},
+ {"label":"K416", "x":18, "y":4, "w":1.75},
+ {"label":"K417", "x":19.75, "y":4},
+ {"label":"K418", "x":20.75, "y":4},
+ {"label":"K50", "x":0, "y":5, "w":1.25},
+ {"label":"K51", "x":1.25, "y":5, "w":1.25},
+ {"label":"K52", "x":2.5, "y":5, "w":1.25},
+ {"label":"K53", "x":3.75, "y":5, "w":1.25},
+ {"label":"K54", "x":5, "y":5, "w":2.25},
+ {"label":"K56", "x":7.75, "y":5, "w":2},
+ {"label":"K58", "x":9.75, "y":5},
+ {"label":"K49", "x":10.75, "y":4, "h":2},
+ {"label":"K510", "x":13, "y":5, "w":2},
+ {"label":"K512", "x":15, "y":5, "w":1.25},
+ {"label":"K513", "x":16.25, "y":5, "w":1.25},
+ {"label":"K514", "x":17.5, "y":5, "w":1.25},
+ {"label":"K516", "x":18.75, "y":5},
+ {"label":"K517", "x":19.75, "y":5},
+ {"label":"K518", "x":20.75, "y":5},
+ {"label":"K519", "x":21.75, "y":5}
+ ]
+ },
+ "LAYOUT_split_numpad": {
+ "layout": [
+ {"label":"K00", "x":0, "y":0},
+ {"label":"K01", "x":1, "y":0},
+ {"label":"K02", "x":2, "y":0},
+ {"label":"K03", "x":3, "y":0},
+ {"label":"K04", "x":4, "y":0},
+ {"label":"K05", "x":5, "y":0},
+ {"label":"K06", "x":6, "y":0},
+ {"label":"K010", "x":12.75, "y":0},
+ {"label":"K011", "x":13.75, "y":0},
+ {"label":"K012", "x":14.75, "y":0},
+ {"label":"K013", "x":15.75, "y":0},
+ {"label":"K014", "x":16.75, "y":0},
+ {"label":"K015", "x":17.75, "y":0},
+ {"label":"K016", "x":18.75, "y":0},
+ {"label":"K017", "x":19.75, "y":0},
+ {"label":"K018", "x":20.75, "y":0},
+ {"label":"K019", "x":21.75, "y":0},
+ {"label":"K10", "x":0, "y":1},
+ {"label":"K11", "x":1, "y":1},
+ {"label":"K12", "x":2, "y":1},
+ {"label":"K13", "x":3, "y":1},
+ {"label":"K14", "x":4, "y":1},
+ {"label":"K15", "x":5, "y":1},
+ {"label":"K16", "x":6, "y":1},
+ {"label":"K17", "x":8.75, "y":1},
+ {"label":"K18", "x":9.75, "y":1},
+ {"label":"K19", "x":10.75, "y":1},
+ {"label":"K110", "x":12.75, "y":1},
+ {"label":"K111", "x":13.75, "y":1},
+ {"label":"K112", "x":14.75, "y":1},
+ {"label":"K113", "x":15.75, "y":1},
+ {"label":"K114", "x":16.75, "y":1},
+ {"label":"K115", "x":17.75, "y":1},
+ {"label":"K116", "x":18.75, "y":1, "w":2},
+ {"label":"K118", "x":20.75, "y":1},
+ {"label":"K119", "x":21.75, "y":1},
+ {"label":"K20", "x":0, "y":2, "w":1.5},
+ {"label":"K21", "x":1.5, "y":2},
+ {"label":"K22", "x":2.5, "y":2},
+ {"label":"K23", "x":3.5, "y":2},
+ {"label":"K24", "x":4.5, "y":2},
+ {"label":"K25", "x":5.5, "y":2},
+ {"label":"K26", "x":7.75, "y":2},
+ {"label":"K17", "x":8.75, "y":2},
+ {"label":"K28", "x":9.75, "y":2},
+ {"label":"K29", "x":10.75, "y":2},
+ {"label":"K210", "x":12.25, "y":2},
+ {"label":"K211", "x":13.25, "y":2},
+ {"label":"K212", "x":14.25, "y":2},
+ {"label":"K213", "x":15.25, "y":2},
+ {"label":"K214", "x":16.25, "y":2},
+ {"label":"K215", "x":17.25, "y":2},
+ {"label":"K216", "x":18.25, "y":2},
+ {"label":"K217", "x":19.25, "y":2, "w":1.5},
+ {"label":"K218", "x":20.75, "y":2},
+ {"label":"K219", "x":21.75, "y":2},
+ {"label":"K30", "x":0, "y":3, "w":1.75},
+ {"label":"K31", "x":1.75, "y":3},
+ {"label":"K32", "x":2.75, "y":3},
+ {"label":"K33", "x":3.75, "y":3},
+ {"label":"K34", "x":4.75, "y":3},
+ {"label":"K35", "x":5.75, "y":3},
+ {"label":"K36", "x":7.75, "y":3},
+ {"label":"K37", "x":8.75, "y":3},
+ {"label":"K38", "x":9.75, "y":3},
+ {"label":"K39", "x":10.75, "y":3},
+ {"label":"K310", "x":12.5, "y":3},
+ {"label":"K311", "x":13.5, "y":3},
+ {"label":"K312", "x":14.5, "y":3},
+ {"label":"K313", "x":15.5, "y":3},
+ {"label":"K314", "x":16.5, "y":3},
+ {"label":"K315", "x":17.5, "y":3},
+ {"label":"K317", "x":18.5, "y":3, "w":2.25},
+ {"label":"K40", "x":0, "y":4, "w":2.25},
+ {"label":"K41", "x":2.25, "y":4},
+ {"label":"K42", "x":3.25, "y":4},
+ {"label":"K43", "x":4.25, "y":4},
+ {"label":"K44", "x":5.25, "y":4},
+ {"label":"K45", "x":6.25, "y":4},
+ {"label":"K46", "x":7.75, "y":4},
+ {"label":"K47", "x":8.75, "y":4},
+ {"label":"K48", "x":9.75, "y":4},
+ {"label":"K49", "x":10.75, "y":4},
+ {"label":"K410", "x":13, "y":4},
+ {"label":"K411", "x":14, "y":4},
+ {"label":"K412", "x":15, "y":4},
+ {"label":"K413", "x":16, "y":4},
+ {"label":"K414", "x":17, "y":4},
+ {"label":"K416", "x":18, "y":4, "w":2.75},
+ {"label":"K418", "x":20.75, "y":4},
+ {"label":"K50", "x":0, "y":5, "w":1.25},
+ {"label":"K51", "x":1.25, "y":5, "w":1.25},
+ {"label":"K52", "x":2.5, "y":5, "w":1.25},
+ {"label":"K53", "x":3.75, "y":5, "w":1.25},
+ {"label":"K54", "x":5, "y":5, "w":2.25},
+ {"label":"K56", "x":7.75, "y":5},
+ {"Label":"K57", "x":8.75, "y":5},
+ {"label":"K58", "x":9.75, "y":5},
+ {"label":"K59", "x":10.75, "y":5},
+ {"label":"K510", "x":13, "y":5, "w":2},
+ {"label":"K512", "x":15, "y":5, "w":1.25},
+ {"label":"K513", "x":16.25, "y":5, "w":1.25},
+ {"label":"K514", "x":17.5, "y":5, "w":1.25},
+ {"label":"K516", "x":18.75, "y":5},
+ {"label":"K517", "x":19.75, "y":5},
+ {"label":"K518", "x":20.75, "y":5},
+ {"label":"K519", "x":21.75, "y":5}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"label":"K00", "x":0, "y":0},
+ {"label":"K01", "x":1, "y":0},
+ {"label":"K02", "x":2, "y":0},
+ {"label":"K03", "x":3, "y":0},
+ {"label":"K04", "x":4, "y":0},
+ {"label":"K05", "x":5, "y":0},
+ {"label":"K06", "x":6, "y":0},
+ {"label":"K010", "x":12.75, "y":0},
+ {"label":"K011", "x":13.75, "y":0},
+ {"label":"K012", "x":14.75, "y":0},
+ {"label":"K013", "x":15.75, "y":0},
+ {"label":"K014", "x":16.75, "y":0},
+ {"label":"K015", "x":17.75, "y":0},
+ {"label":"K016", "x":18.75, "y":0},
+ {"label":"K017", "x":19.75, "y":0},
+ {"label":"K018", "x":20.75, "y":0},
+ {"label":"K019", "x":21.75, "y":0},
+ {"label":"K10", "x":0, "y":1},
+ {"label":"K11", "x":1, "y":1},
+ {"label":"K12", "x":2, "y":1},
+ {"label":"K13", "x":3, "y":1},
+ {"label":"K14", "x":4, "y":1},
+ {"label":"K15", "x":5, "y":1},
+ {"label":"K16", "x":6, "y":1},
+ {"label":"K17", "x":8.75, "y":1},
+ {"label":"K18", "x":9.75, "y":1},
+ {"label":"K19", "x":10.75, "y":1},
+ {"label":"K110", "x":12.75, "y":1},
+ {"label":"K111", "x":13.75, "y":1},
+ {"label":"K112", "x":14.75, "y":1},
+ {"label":"K113", "x":15.75, "y":1},
+ {"label":"K114", "x":16.75, "y":1},
+ {"label":"K115", "x":17.75, "y":1},
+ {"label":"K116", "x":18.75, "y":1},
+ {"label":"K117", "x":19.75, "y":1},
+ {"label":"K118", "x":20.75, "y":1},
+ {"label":"K119", "x":21.75, "y":1},
+ {"label":"K20", "x":0, "y":2, "w":1.5},
+ {"label":"K21", "x":1.5, "y":2},
+ {"label":"K22", "x":2.5, "y":2},
+ {"label":"K23", "x":3.5, "y":2},
+ {"label":"K24", "x":4.5, "y":2},
+ {"label":"K25", "x":5.5, "y":2},
+ {"label":"K26", "x":7.75, "y":2},
+ {"label":"K27", "x":8.75, "y":2},
+ {"label":"K28", "x":9.75, "y":2},
+ {"label":"K29", "x":10.75, "y":2},
+ {"label":"K210", "x":12.25, "y":2},
+ {"label":"K211", "x":13.25, "y":2},
+ {"label":"K212", "x":14.25, "y":2},
+ {"label":"K213", "x":15.25, "y":2},
+ {"label":"K214", "x":16.25, "y":2},
+ {"label":"K215", "x":17.25, "y":2},
+ {"label":"K216", "x":18.25, "y":2},
+ {"label":"K217", "x":19.25, "y":2, "w":1.5},
+ {"label":"K218", "x":20.75, "y":2},
+ {"label":"K219", "x":21.75, "y":2},
+ {"label":"K30", "x":0, "y":3, "w":1.75},
+ {"label":"K31", "x":1.75, "y":3},
+ {"label":"K32", "x":2.75, "y":3},
+ {"label":"K33", "x":3.75, "y":3},
+ {"label":"K34", "x":4.75, "y":3},
+ {"label":"K35", "x":5.75, "y":3},
+ {"label":"K36", "x":7.75, "y":3},
+ {"label":"K37", "x":8.75, "y":3},
+ {"label":"K38", "x":9.75, "y":3},
+ {"label":"K39", "x":10.75, "y":3},
+ {"label":"K310", "x":12.5, "y":3},
+ {"label":"K311", "x":13.5, "y":3},
+ {"label":"K312", "x":14.5, "y":3},
+ {"label":"K313", "x":15.5, "y":3},
+ {"label":"K314", "x":16.5, "y":3},
+ {"label":"K315", "x":17.5, "y":3},
+ {"label":"K317", "x":18.5, "y":3, "w":2.25},
+ {"label":"K40", "x":0, "y":4, "w":2.25},
+ {"label":"K41", "x":2.25, "y":4},
+ {"label":"K42", "x":3.25, "y":4},
+ {"label":"K43", "x":4.25, "y":4},
+ {"label":"K44", "x":5.25, "y":4},
+ {"label":"K45", "x":6.25, "y":4},
+ {"label":"K46", "x":7.75, "y":4},
+ {"label":"K47", "x":8.75, "y":4},
+ {"label":"K48", "x":9.75, "y":4},
+ {"label":"K49", "x":10.75, "y":4},
+ {"label":"K410", "x":13, "y":4},
+ {"label":"K411", "x":14, "y":4},
+ {"label":"K412", "x":15, "y":4},
+ {"label":"K413", "x":16, "y":4},
+ {"label":"K414", "x":17, "y":4},
+ {"label":"K416", "x":18, "y":4, "w":1.75},
+ {"label":"K417", "x":19.75, "y":4},
+ {"label":"K418", "x":20.75, "y":4},
+ {"label":"K50", "x":0, "y":5, "w":1.25},
+ {"label":"K51", "x":1.25, "y":5, "w":1.25},
+ {"label":"K52", "x":2.5, "y":5, "w":1.25},
+ {"label":"K53", "x":3.75, "y":5, "w":1.25},
+ {"label":"K54", "x":5, "y":5, "w":2.25},
+ {"label":"K56", "x":7.75, "y":5},
+ {"label":"K57", "x":8.75, "y":5},
+ {"label":"K58", "x":9.75, "y":5},
+ {"label":"K59", "x":10.75, "y":5},
+ {"label":"K510", "x":13, "y":5, "w":2},
+ {"label":"K512", "x":15, "y":5, "w":1.25},
+ {"label":"K513", "x":16.25, "y":5, "w":1.25},
+ {"label":"K514", "x":17.5, "y":5, "w":1.25},
+ {"label":"K516", "x":18.75, "y":5},
+ {"label":"K517", "x":19.75, "y":5},
+ {"label":"K518", "x":20.75, "y":5},
+ {"label":"K519", "x":21.75, "y":5}
+ ]
}
- }
+ }
}
diff --git a/keyboards/handwired/downbubble/keymaps/default/keymap.c b/keyboards/handwired/downbubble/keymaps/default/keymap.c
index d35d36739..48303900f 100644
--- a/keyboards/handwired/downbubble/keymaps/default/keymap.c
+++ b/keyboards/handwired/downbubble/keymaps/default/keymap.c
@@ -22,7 +22,7 @@ enum custom_keycodes {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_downbubble_standard(\
+ [0] = LAYOUT_standard(\
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_NLCK, KC_HOME, KC_TRNS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
@@ -31,7 +31,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_PDOT, KC_PENT, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- LAYOUT_downbubble_splitbackspace(\
+ LAYOUT_split_bs(\
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_NLCK, KC_HOME, KC_TRNS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS, KC_END, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
@@ -40,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_PDOT, KC_PENT, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- LAYOUT_downbubble_splitrightshift(\
+ LAYOUT_split_rshift(\
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NLCK, KC_HOME, KC_TRNS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
@@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_PDOT, KC_PENT, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- LAYOUT_downbubble_splitnumpad(\
+ LAYOUT_split_numpad(\
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_NLCK, KC_HOME, KC_TRNS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
@@ -58,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_TRNS, KC_PDOT, KC_TRNS, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
- LAYOUT_downbubble_spliteverything(\
+ LAYOUT_all(\
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_NLCK, KC_HOME, KC_TRNS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS, KC_END, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
diff --git a/keyboards/handwired/frenchdev/keymaps/default/keymap.c b/keyboards/handwired/frenchdev/keymaps/default/keymap.c
index 635383b55..3d0f1fbfb 100644
--- a/keyboards/handwired/frenchdev/keymaps/default/keymap.c
+++ b/keyboards/handwired/frenchdev/keymaps/default/keymap.c
@@ -176,11 +176,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void hold_shift(void) {
shift_count = shift_count + 1;
register_code(KC_LSHIFT);
@@ -359,10 +354,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
return MACRO_NONE;
};
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
-
-}
-
void matrix_init_user(void) {
}
diff --git a/keyboards/handwired/hexon38/config.h b/keyboards/handwired/hexon38/config.h
new file mode 100644
index 000000000..23eb51e01
--- /dev/null
+++ b/keyboards/handwired/hexon38/config.h
@@ -0,0 +1,60 @@
+// see https://github.com/pepaslabs/hexon38
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER pepaslabs
+#define PRODUCT hexon38
+#define DESCRIPTION "A handmade non-split ergonomic 38-key keyboard, inspired by the lil38. See https://github.com/pepaslabs/hexon38."
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B0, F0, B2, F4 }
+#define MATRIX_COL_PINS { C6, D3, D2, D1, D0, B7, F6, F7, B6, B5, B4, D7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* number of backlight levels */
+
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 0
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 0
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+
+// Disabled features:
+
+/* 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
+
+/* prevent stuck modifiers */
+//#define PREVENT_STUCK_MODIFIERS
diff --git a/keyboards/handwired/hexon38/hexon38.c b/keyboards/handwired/hexon38/hexon38.c
new file mode 100644
index 000000000..d830adef3
--- /dev/null
+++ b/keyboards/handwired/hexon38/hexon38.c
@@ -0,0 +1,3 @@
+// see https://github.com/pepaslabs/hexon38
+
+#include "hexon38.h"
diff --git a/keyboards/handwired/hexon38/hexon38.h b/keyboards/handwired/hexon38/hexon38.h
new file mode 100644
index 000000000..f98f460fa
--- /dev/null
+++ b/keyboards/handwired/hexon38/hexon38.h
@@ -0,0 +1,17 @@
+// see https://github.com/pepaslabs/hexon38
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K002, K003, K004, K005, K006, K007, K008, K009, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \
+ K200, K201, K202, K203, K204, K207, K208, K209, K210, K211, \
+ K302, K303, K304, K305, K306, K307, K308, K309 \
+) { \
+ { KC_NO, KC_NO, K002, K003, K004, K005, K006, K007, K008, K009, KC_NO, KC_NO }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \
+ { K200, K201, K202, K203, K204, KC_NO, KC_NO, K207, K208, K209, K210, K211 }, \
+ { KC_NO, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, KC_NO, KC_NO } \
+}
diff --git a/keyboards/handwired/hexon38/keymaps/default/keymap.c b/keyboards/handwired/hexon38/keymaps/default/keymap.c
new file mode 100644
index 000000000..c3805991f
--- /dev/null
+++ b/keyboards/handwired/hexon38/keymaps/default/keymap.c
@@ -0,0 +1,407 @@
+// see https://github.com/pepaslabs/hexon38
+
+#include "hexon38.h"
+
+#define A_ KC_A
+#define B_ KC_B
+#define C_ KC_C
+#define D_ KC_D
+#define E_ KC_E
+#define F_ KC_F
+#define G_ KC_G
+#define H_ KC_H
+#define I_ KC_I
+#define J_ KC_J
+#define K_ KC_K
+#define L_ KC_L
+#define M_ KC_M
+#define N_ KC_N
+#define O_ KC_O
+#define P_ KC_P
+#define Q_ KC_Q
+#define R_ KC_R
+#define S_ KC_S
+#define T_ KC_T
+#define U_ KC_U
+#define V_ KC_V
+#define W_ KC_W
+#define X_ KC_X
+#define Y_ KC_Y
+#define Z_ KC_Z
+
+// Dual-role keys: modifier when held, alpha when tapped.
+#define A_CTL CTL_T(KC_A)
+#define S_ALT ALT_T(KC_S)
+#define D_GUI GUI_T(KC_D)
+#define F_SFT SFT_T(KC_F)
+#define J_SFT SFT_T(KC_J)
+#define K_GUI GUI_T(KC_K)
+#define L_ALT ALT_T(KC_L)
+#define COLN_CTL CTL_T(KC_SCLN)
+
+#define ______ KC_TRNS
+#define LSHIFT KC_LSHIFT
+#define RSHIFT KC_RSHIFT
+#define COMMA KC_COMM
+#define SLASH KC_SLSH
+#define SPACE KC_SPC
+#define TAB KC_TAB
+#define BKSPC KC_BSPC
+#define ENTER KC_ENT
+#define PERIOD KC_DOT
+
+#define BASE_LAYER LAYOUT
+#define BLANK_LAYER LAYOUT
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ BASE_LAYER(
+// ,--------+--------+--------+--------. ,--------+--------+--------+--------.
+ W_ , E_ , R_ , T_ , Y_ , U_ , I_ , O_ ,
+//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------.
+ Q_ , A_CTL , S_ALT , D_GUI , F_SFT , G_ , H_ , J_SFT , K_GUI , L_ALT ,COLN_CTL, P_ ,
+//|--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------|
+ B_ , Z_ , X_ , C_ , V_ , M_ , COMMA , PERIOD , SLASH , N_ ,
+//`--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------'
+
+// ,--------+--------+--------+--------. ,--------+--------+--------+--------.
+ LSHIFT , SPACE , TAB , DEBUG , SPACE , BKSPC , ENTER , RSHIFT
+// `--------+--------+--------+--------' `--------+--------+--------+--------'
+),
+
+ BLANK_LAYER(
+// ,--------+--------+--------+--------. ,--------+--------+--------+--------.
+ ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ ,
+//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------.
+ ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ ,
+//|--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------|
+ ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______ ,
+//`--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------'
+
+// ,--------+--------+--------+--------. ,--------+--------+--------+--------.
+ ______ , ______ , ______ , ______ , ______ , ______ , ______ , ______
+// `--------+--------+--------+--------' `--------+--------+--------+--------'
+)
+
+};
+
+// a linked list of pending key events (press or release) which we haven't processed yet.
+struct _pending_key_t {
+ uint16_t keycode;
+ keyrecord_t record;
+ struct _pending_key_t *next;
+};
+typedef struct _pending_key_t pending_key_t;
+
+// worst case is 10 down strokes and 1 up stroke before we can start disambiguating.
+#define RINGSIZE 11
+
+// a ring buffer and linked list to store pending key events (presses and releases).
+// (basically, this is a fixed-allocation linked list.)
+struct _kring_t {
+ // the actual key events.
+ pending_key_t items[RINGSIZE];
+ // the index of the oldest item, or -1 if no items.
+ int8_t ifirst;
+ // the index of the most recently added item, or -1 if no items.
+ int8_t ilast;
+ // the number of items in the ring.
+ uint8_t count;
+ // the head of the linked list.
+ pending_key_t *head;
+};
+typedef struct _kring_t kring_t;
+
+// safe accessor to the i-th item of the linked list (returns pointer or NULL).
+pending_key_t* kring_get(kring_t *ring, uint8_t i) {
+ if (i >= ring->count) {
+ return NULL;
+ }
+ uint8_t j = (ring->ifirst + i) % RINGSIZE;
+ return &(ring->items[j]);
+}
+
+// return the last key in the list of buffered keys.
+pending_key_t* kring_last(kring_t *ring) {
+ if (ring->count == 0) {
+ return NULL;
+ }
+ return kring_get(ring, ring->count - 1);
+}
+
+// remove the oldest item from the ring (the head of the list).
+void kring_pop(kring_t *ring) {
+ if (ring->count > 0) {
+ ring->ifirst += 1;
+ ring->ifirst %= RINGSIZE;
+ ring->head = ring->head->next;
+ ring->count -= 1;
+ }
+}
+
+// add an item to the ring (append to the list).
+void kring_append(kring_t *ring, uint16_t keycode, keyrecord_t *record) {
+ if (ring->count >= RINGSIZE) {
+ // uh oh, we overflowed the capacity of our buffer :(
+ return;
+ }
+
+ // if the ring is empty, insert at index 0.
+ if (ring->count == 0) {
+ ring->count += 1;
+ ring->ifirst = 0;
+ ring->ilast = 0;
+ ring->head = &(ring->items[0]);
+ }
+ // else, append it onto the end.
+ else {
+ ring->count += 1;
+ ring->ilast += 1;
+ ring->ilast %= RINGSIZE;
+ }
+
+ // the index at which we should insert this item.
+ int8_t i = ring->ilast;
+
+ // insert the item.
+ ring->items[i].keycode = keycode;
+ ring->items[i].record.event = record->event;
+#ifndef NO_ACTION_TAPPING
+ ring->items[i].record.tap = record->tap;
+#endif
+ ring->items[i].next = NULL;
+
+ // update the previous item to point to this item.
+ if (ring->count > 1) {
+ kring_get(ring, ring->count - 2)->next = &(ring->items[i]);
+ }
+}
+
+kring_t g_pending;
+
+void matrix_init_user(void) {
+ g_pending.ifirst = -1;
+ g_pending.ilast = -1;
+ g_pending.count = 0;
+ g_pending.head = NULL;
+}
+
+void matrix_scan_user(void) {}
+
+/*
+a_ a-: emit a
+a_ b_ b- a-: emit SHIFT+b
+a_ b_ a- b-: emit a, b
+dual1down, dual1up -> norm1down, norm1up
+dual1down, norm2down, norm2up -> mod1down, norm2down, norm2up
+dual1down, norm2down, dual1up -> norm1down, norm2down, norm1up
+dual1down, dual2down, norm3down, norm3up -> mod1down, mod2down, norm3down, norm3up
+so, a dual key can't be disambiguated until the next keyup of a keydown (not including keyups from keys before it).
+*/
+
+bool is_ambiguous_kc(uint16_t kc) {
+ // See the MT() define: https://github.com/qmk/qmk_firmware/blob/master/quantum/quantum_keycodes.h#L642
+ // See the QK_MOD_TAP case: https://github.com/qmk/qmk_firmware/blob/master/quantum/keymap_common.c#L134
+ uint8_t mod = mod_config((kc >> 0x8) & 0x1F);
+ return mod != 0;
+}
+
+bool is_down(pending_key_t *k) {
+ return k->record.event.pressed;
+}
+
+bool is_up(pending_key_t *k) {
+ return !is_down(k);
+}
+
+bool keys_match(pending_key_t *a, pending_key_t *b) {
+ return a->record.event.key.col == b->record.event.key.col
+ && a->record.event.key.row == b->record.event.key.row;
+}
+
+// both the down and corresponding upstroke of a keypress.
+struct _pending_pair_t {
+ pending_key_t *down;
+ pending_key_t *up;
+};
+typedef struct _pending_pair_t pending_pair_t;
+
+// returns true if this keydown event has a corresponding keyup event in the
+// list of buffered keys. also fills out 'p'.
+bool is_downup_pair(pending_key_t *k, pending_pair_t *p) {
+ // first, make sure this event is keydown.
+ if (!is_down(k)) {
+ return false;
+ }
+ // now find its matching keyup.
+ pending_key_t *next = k->next;
+ while (next != NULL) {
+ if (keys_match(k, next) && is_up(next)) {
+ // found it.
+ if (p != NULL) {
+ p->down = k;
+ p->up = next;
+ }
+ return true;
+ }
+ next = next->next;
+ }
+ // didn't find it.
+ return false;
+}
+
+// given a QK_MOD_TAP keycode, return the KC_* version of the modifier keycode.
+uint16_t get_mod_kc(uint16_t keycode) {
+ uint8_t mod = mod_config((keycode >> 0x8) & 0x1F);
+ switch (mod) {
+ case MOD_LCTL:
+ return KC_LCTL;
+ case MOD_RCTL:
+ return KC_RCTL;
+ case MOD_LSFT:
+ return KC_LSFT;
+ case MOD_RSFT:
+ return KC_RSFT;
+ case MOD_LALT:
+ return KC_LALT;
+ case MOD_RALT:
+ return KC_RALT;
+ case MOD_LGUI:
+ return KC_LGUI;
+ case MOD_RGUI:
+ return KC_RGUI;
+ default:
+ // shrug? this shouldn't happen.
+ return keycode;
+ }
+}
+
+bool is_mod_kc(uint16_t keycode) {
+ switch (keycode) {
+ case QK_MODS ... QK_MODS_MAX:
+ return true;
+ default:
+ return false;
+ }
+}
+
+void interpret_as_mod(pending_pair_t *p) {
+ // see https://github.com/qmk/qmk_firmware/issues/1503
+ pending_key_t *k;
+ k = p->down;
+ if (k != NULL) {
+ k->keycode = get_mod_kc(k->keycode);
+ }
+ k = p->up;
+ if (k != NULL) {
+ k->keycode = get_mod_kc(k->keycode);
+ }
+}
+
+void interpret_as_normal(pending_pair_t *p) {
+ pending_key_t *k;
+ k = p->down;
+ if (k != NULL) {
+ k->keycode = k->keycode & 0xFF;
+ }
+ k = p->up;
+ if (k != NULL) {
+ k->keycode = k->keycode & 0xFF;
+ }
+}
+
+void execute_head_and_pop(kring_t *ring) {
+ pending_key_t *head = kring_get(ring, 0);
+ uint16_t kc = head->keycode;
+ if (is_mod_kc(kc)) {
+ if (is_down(head)) {
+ dprintf(" %s: mod down 0x%04X\n", __func__, kc);
+ set_mods(get_mods() | MOD_BIT(kc));
+ } else {
+ dprintf(" %s: mod up 0x%04X\n", __func__, kc);
+ set_mods(get_mods() & ~MOD_BIT(kc));
+ }
+ } else {
+ if (is_down(head)) {
+ dprintf(" %s: key down 0x%04X\n", __func__, kc);
+ register_code16(kc);
+ } else {
+ dprintf(" %s: key up 0x%04X\n", __func__, kc);
+ unregister_code16(kc);
+ }
+ }
+ kring_pop(ring);
+}
+
+// try to figure out what the next pending keypress means.
+bool parse_next(kring_t *pending) {
+ pending_pair_t p;
+ pending_key_t *first = kring_get(pending, 0);
+ if (!is_ambiguous_kc(first->keycode)) {
+ // this pending key isn't ambiguous, so execute it.
+ dprintf(" %s: found unambiguous key\n", __func__);
+ execute_head_and_pop(pending);
+ return true;
+ } else if (is_ambiguous_kc(first->keycode) && is_up(first)) {
+ dprintf(" %s: interpreting keyup as mod\n", __func__);
+ p.down = NULL;
+ p.up = first;
+ interpret_as_mod(&p);
+ execute_head_and_pop(pending);
+ return true;
+ } else if (is_downup_pair(first, &p)) {
+ // 'first' was released before any other pressed key, so treat this as
+ // a rolling series of normal key taps.
+ dprintf(" %s: found down-up pair, interpreting as normal key\n", __func__);
+ interpret_as_normal(&p);
+ execute_head_and_pop(pending);
+ return true;
+ } else {
+ // if another key was pressed and released while 'first' was held, then we
+ // should treat it like a modifier.
+ pending_key_t *next = first->next;
+ while (next != NULL) {
+ if (is_downup_pair(next, NULL)) {
+ dprintf(" %s: found subsequent downup pair, interpreting head as mod\n", __func__);
+ p.down = first;
+ p.up = NULL;
+ interpret_as_mod(&p);
+ execute_head_and_pop(pending);
+ return true;
+ }
+ next = next->next;
+ }
+
+ // we can't disambiguate 'first' yet. wait for another keypress.
+ dprintf(" %s: can't disambiguate (yet)\n", __func__);
+ return false;
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (keycode == DEBUG) {
+ return true;
+ }
+
+ if (g_pending.count == 0 && !is_ambiguous_kc(keycode)) {
+ // we have no pending keys and this key isn't ambiguous, so we should
+ // just let QMK take care of it.
+ dprintf("%s: handled by qmk\n", __func__);
+ return true;
+ } else {
+ dprintf("%s: got dual-role key\n", __func__);
+ // append the keypress and then try parsing all pending keypresses.
+ kring_append(&g_pending, keycode, record);
+ while (g_pending.count > 0) {
+ dprintf("%s: looping through %d keys...\n", __func__, g_pending.count);
+ if (!parse_next(&g_pending)) {
+ // one of our keypresses is ambiguous and we can't proceed until
+ // we get further keypresses to disambiguate it.
+ dprintf("%s: %d pending keys are ambiguous\n", __func__, g_pending.count);
+ break;
+ }
+ }
+ return false;
+ }
+}
diff --git a/keyboards/handwired/hexon38/readme.md b/keyboards/handwired/hexon38/readme.md
new file mode 100644
index 000000000..c8ada8e2b
--- /dev/null
+++ b/keyboards/handwired/hexon38/readme.md
@@ -0,0 +1,11 @@
+# hexon38
+
+QMK support for the [hexon38](https://github.com/pepaslabs/hexon38).
+
+## Building
+
+```
+$ cd qmk_firmware
+$ make handwired/hexon38
+```
+
diff --git a/keyboards/handwired/hexon38/rules.mk b/keyboards/handwired/hexon38/rules.mk
new file mode 100644
index 000000000..2b6f17afc
--- /dev/null
+++ b/keyboards/handwired/hexon38/rules.mk
@@ -0,0 +1,64 @@
+# see https://github.com/pepaslabs/hexon38
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = halfkay
+
+
+# Enabled build options:
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+
+# Disabled build options:
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c b/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c
index 9cd58c0ec..130465e8d 100644
--- a/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c
+++ b/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c
@@ -137,10 +137,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),*/
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/handwired/ibm122m/readme.md b/keyboards/handwired/ibm122m/readme.md
index 09dac49c0..de89d7596 100644
--- a/keyboards/handwired/ibm122m/readme.md
+++ b/keyboards/handwired/ibm122m/readme.md
@@ -13,4 +13,4 @@ Make example for this keyboard (after setting up your build environment):
make handwired/ibm122m:default
-See [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.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/handwired/not_so_minidox/readme.md b/keyboards/handwired/not_so_minidox/readme.md
index bd4060735..c791e6e3f 100644
--- a/keyboards/handwired/not_so_minidox/readme.md
+++ b/keyboards/handwired/not_so_minidox/readme.md
@@ -12,7 +12,7 @@ Make example for this keyboard (after setting up your build environment):
make not_so_minidox/rev1:default
-See [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.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
Flashing
-------
diff --git a/keyboards/handwired/numpad20/readme.md b/keyboards/handwired/numpad20/readme.md
index 29c832daf..4e14fbb00 100644
--- a/keyboards/handwired/numpad20/readme.md
+++ b/keyboards/handwired/numpad20/readme.md
@@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
make handwired/numpad20:default
-See [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. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/handwired/ortho5x13/ortho5x13.h b/keyboards/handwired/ortho5x13/ortho5x13.h
index 93551bd70..a43fc76ae 100644
--- a/keyboards/handwired/ortho5x13/ortho5x13.h
+++ b/keyboards/handwired/ortho5x13/ortho5x13.h
@@ -1,5 +1,4 @@
-#ifndef ORTHO5X13_H
-#define ORTHO5X13_H
+#pragma once
#include "quantum.h"
@@ -18,7 +17,7 @@
{ k40, k41, k42, k43, k44, k45, KC_NO, k47, k48, k49, k4a, k4b, k4c } \
}
-#define LAYOUT_compact( \
+#define LAYOUT_kc( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
@@ -32,5 +31,3 @@
{ KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k35, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b, KC_##k3c }, \
{ KC_##k40, KC_##k41, KC_##k42, KC_##k43, KC_##k44, KC_##k45, KC_NO, KC_##k47, KC_##k48, KC_##k49, KC_##k4a, KC_##k4b, KC_##k4c } \
}
-
-#endif \ No newline at end of file
diff --git a/keyboards/handwired/ortho60/info.json b/keyboards/handwired/ortho60/info.json
index b6e485441..b94bfc7b5 100644
--- a/keyboards/handwired/ortho60/info.json
+++ b/keyboards/handwired/ortho60/info.json
@@ -65,8 +65,71 @@
{"label":"Raise", "x":7, "y":4},
{"label":"Left", "x":8, "y":4},
{"label":"Down", "x":9, "y":4},
- {"label":"Right", "x":10, "y":4},
- {"label":"up", "x":11, "y":4}
+ {"label":"Up", "x":10, "y":4},
+ {"label":"Right", "x":11, "y":4}
+ ]
+ },
+ "LAYOUT_1x2uC": {
+ "layout": [
+ {"label":"`", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"Backspace", "x":11, "y":0},
+ {"label":"Tab", "x":0, "y":1},
+ {"label":"Q", "x":1, "y":1},
+ {"label":"W", "x":2, "y":1},
+ {"label":"E", "x":3, "y":1},
+ {"label":"R", "x":4, "y":1},
+ {"label":"T", "x":5, "y":1},
+ {"label":"Y", "x":6, "y":1},
+ {"label":"U", "x":7, "y":1},
+ {"label":"I", "x":8, "y":1},
+ {"label":"O", "x":9, "y":1},
+ {"label":"P", "x":10, "y":1},
+ {"label":"Delete", "x":11, "y":1},
+ {"label":"Esc", "x":0, "y":2},
+ {"label":"A", "x":1, "y":2},
+ {"label":"S", "x":2, "y":2},
+ {"label":"D", "x":3, "y":2},
+ {"label":"F", "x":4, "y":2},
+ {"label":"G", "x":5, "y":2},
+ {"label":"H", "x":6, "y":2},
+ {"label":"J", "x":7, "y":2},
+ {"label":"K", "x":8, "y":2},
+ {"label":"L", "x":9, "y":2},
+ {"label":";", "x":10, "y":2},
+ {"label":"'", "x":11, "y":2},
+ {"label":"Shift", "x":0, "y":3},
+ {"label":"Z", "x":1, "y":3},
+ {"label":"X", "x":2, "y":3},
+ {"label":"C", "x":3, "y":3},
+ {"label":"V", "x":4, "y":3},
+ {"label":"B", "x":5, "y":3},
+ {"label":"N", "x":6, "y":3},
+ {"label":"M", "x":7, "y":3},
+ {"label":",", "x":8, "y":3},
+ {"label":".", "x":9, "y":3},
+ {"label":"/", "x":10, "y":3},
+ {"label":"Enter", "x":11, "y":3},
+ {"label":"Fn", "x":0, "y":4},
+ {"label":"Ctrl", "x":1, "y":4},
+ {"label":"Alt", "x":2, "y":4},
+ {"label":"Meta", "x":3, "y":4},
+ {"label":"Lower", "x":4, "y":4},
+ {"label":"Space", "x":5, "y":4, "w":2},
+ {"label":"Raise", "x":7, "y":4},
+ {"label":"Left", "x":8, "y":4},
+ {"label":"Down", "x":9, "y":4},
+ {"label":"Up", "x":10, "y":4},
+ {"label":"Right", "x":11, "y":4}
]
}
}
diff --git a/keyboards/handwired/ortho60/readme.md b/keyboards/handwired/ortho60/readme.md
index 8db1b7df7..be2a027c4 100644
--- a/keyboards/handwired/ortho60/readme.md
+++ b/keyboards/handwired/ortho60/readme.md
@@ -1,3 +1,12 @@
# Ortho 60
-Blue Pill STM32F103C8T6 based 12x5 Ortholinear Board
+A Blue Pill STM32F103C8T6-based 12x5 ortholinear keyboard.
+
+Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan1)
+Hardware Supported: Blue Pill STM32F103C8T6
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/ortho60:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/ortho60/rules.mk b/keyboards/handwired/ortho60/rules.mk
index 3f4574473..91acb3c5c 100644
--- a/keyboards/handwired/ortho60/rules.mk
+++ b/keyboards/handwired/ortho60/rules.mk
@@ -52,5 +52,3 @@ NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = yes
LAYOUTS = ortho_5x12
-
-DEFAULT_FOLDER = handwired/ortho60
diff --git a/keyboards/handwired/promethium/keymaps/default/keymap.c b/keyboards/handwired/promethium/keymaps/default/keymap.c
index a1ca79f9a..faae89f93 100644
--- a/keyboards/handwired/promethium/keymaps/default/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/default/keymap.c
@@ -60,7 +60,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Fillers to make layering clearer
#define _______ KC_TRNS
#define XXXXXXX KC_NO
-#define G(x) LGUI(x)
#define KC_WWWB KC_WWW_BACK
#define KC_WWWF KC_WWW_FORWARD
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
index a1ca79f9a..faae89f93 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
@@ -60,7 +60,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Fillers to make layering clearer
#define _______ KC_TRNS
#define XXXXXXX KC_NO
-#define G(x) LGUI(x)
#define KC_WWWB KC_WWW_BACK
#define KC_WWWF KC_WWW_FORWARD
diff --git a/keyboards/handwired/pteron/keymaps/FSund/keymap.c b/keyboards/handwired/pteron/keymaps/FSund/keymap.c
index f34beae06..a52e84297 100644
--- a/keyboards/handwired/pteron/keymaps/FSund/keymap.c
+++ b/keyboards/handwired/pteron/keymaps/FSund/keymap.c
@@ -10,10 +10,8 @@ enum pteron_layers {
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
-// use S() to produce shifted versions of keys
-// #define S(kc) LSFT(kc) // defined by default
-
// alt gr
+#undef G
#define G(kc) RALT(kc)
// custom keycodes
diff --git a/keyboards/handwired/qc60/README.md b/keyboards/handwired/qc60/README.md
index 85570a8a7..4fdd9ba6e 100644
--- a/keyboards/handwired/qc60/README.md
+++ b/keyboards/handwired/qc60/README.md
@@ -1,5 +1,4 @@
-QC60
-========
+# QC60
![qc60 layout](https://i.imgur.com/BAW1VGc.png)
@@ -19,4 +18,4 @@ Example of flashing this keyboard:
make handwired/qc60/proto:avrdude
-See [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.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/qc60/info.json b/keyboards/handwired/qc60/info.json
index b39ec587b..c047d5030 100644
--- a/keyboards/handwired/qc60/info.json
+++ b/keyboards/handwired/qc60/info.json
@@ -1,11 +1,93 @@
{
- "keyboard_name": "QC60",
- "url": "",
- "maintainer": "coarse",
- "width": 15,
- "height": 5,
+ "keyboard_name": "QC60",
+ "url": "",
+ "maintainer": "coarse",
+ "width": 16,
+ "height": 5,
"layouts": {
- "LAYOUT_ANSI_DEFAULT": {
+ "LAYOUT": {
+ "key_count": 67,
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"L06", "x":6, "y":0},
+
+ {"label":"R00", "x":8, "y":0},
+ {"label":"R01", "x":9, "y":0},
+ {"label":"R02", "x":10, "y":0},
+ {"label":"R03", "x":11, "y":0},
+ {"label":"R04", "x":12, "y":0},
+ {"label":"R05", "x":13, "y":0},
+ {"label":"R06", "x":14, "y":0},
+ {"label":"R07", "x":15, "y":0},
+
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+
+ {"label":"R10", "x":7.5, "y":1},
+ {"label":"R11", "x":8.5, "y":1},
+ {"label":"R12", "x":9.5, "y":1},
+ {"label":"R13", "x":10.5, "y":1},
+ {"label":"R14", "x":11.5, "y":1},
+ {"label":"R15", "x":12.5, "y":1},
+ {"label":"R16", "x":13.5, "y":1},
+ {"label":"R17", "x":14.5, "y":1, "w":1.5},
+
+ {"label":"L20", "x":0, "y":2, "w":1.75},
+ {"label":"L21", "x":1.75, "y":2},
+ {"label":"L22", "x":2.75, "y":2},
+ {"label":"L23", "x":3.75, "y":2},
+ {"label":"L24", "x":4.75, "y":2},
+ {"label":"L25", "x":5.75, "y":2},
+
+ {"label":"R21", "x":7.75, "y":2},
+ {"label":"R22", "x":8.75, "y":2},
+ {"label":"R23", "x":9.75, "y":2},
+ {"label":"R24", "x":10.75, "y":2},
+ {"label":"R25", "x":11.75, "y":2},
+ {"label":"R26", "x":12.75, "y":2},
+ {"label":"R27", "x":13.75, "y":2, "w":2.25},
+
+ {"label":"L30", "x":0, "y":3, "w":1.25},
+ {"label":"L31", "x":1.25, "y":3},
+ {"label":"L32", "x":2.25, "y":3},
+ {"label":"L33", "x":3.25, "y":3},
+ {"label":"L34", "x":4.25, "y":3},
+ {"label":"L35", "x":5.25, "y":3},
+ {"label":"L36", "x":6.25, "y":3},
+
+ {"label":"R31", "x":8.25, "y":3},
+ {"label":"R32", "x":9.25, "y":3},
+ {"label":"R33", "x":10.25, "y":3},
+ {"label":"R34", "x":11.25, "y":3},
+ {"label":"R35", "x":12.25, "y":3},
+ {"label":"R36", "x":13.25, "y":3, "w":1.75},
+ {"label":"R37", "x":15, "y":3},
+
+ {"label":"L40", "x":0, "y":4, "w":1.25},
+ {"label":"L41", "x":1.25, "y":4, "w":1.25},
+ {"label":"L42", "x":2.5, "y":4, "w":1.25},
+ {"label":"L43", "x":3.75, "y":4, "w":2.75},
+ {"label":"L44", "x":6.5, "y":4, "w":1.25},
+
+ {"label":"R43", "x":8.75, "y":4, "w":1.25},
+ {"label":"R44", "x":10, "y":4, "w":2},
+ {"label":"R42", "x":12, "y":4},
+ {"label":"R45", "x":13, "y":4},
+ {"label":"R46", "x":14, "y":4},
+ {"label":"R47", "x":15, "y":4}
+ ]
+ },
+
+ "LAYOUT_ansi_default": {
"key_count": 64,
"layout": [
{"label":"Esc", "x":0, "y":0},
@@ -16,13 +98,13 @@
{"label":"5", "x":5, "y":0},
{"label":"6", "x":6, "y":0},
- {"label":"7", "x":7, "y":0},
- {"label":"8", "x":8, "y":0},
- {"label":"9", "x":9, "y":0},
- {"label":"0", "x":10, "y":0},
- {"label":"-", "x":11, "y":0},
- {"label":"=", "x":12, "y":0},
- {"label":"Backspace", "x":13, "y":0, "w":2.0},
+ {"label":"7", "x":8, "y":0},
+ {"label":"8", "x":9, "y":0},
+ {"label":"9", "x":10, "y":0},
+ {"label":"0", "x":11, "y":0},
+ {"label":"-", "x":12, "y":0},
+ {"label":"=", "x":13, "y":0},
+ {"label":"Backspace", "x":14, "y":0, "w":2.0},
{"label":"Tab", "x":0, "y":1, "w":1.5},
{"label":"Q", "x":1.5, "y":1},
@@ -31,14 +113,14 @@
{"label":"R", "x":4.5, "y":1},
{"label":"T", "x":5.5, "y":1},
- {"label":"Y", "x":6.5, "y":1},
- {"label":"U", "x":7.5, "y":1},
- {"label":"I", "x":8.5, "y":1},
- {"label":"O", "x":9.5, "y":1},
- {"label":"P", "x":10.5, "y":1},
- {"label":"[", "x":11.5, "y":1},
- {"label":"]", "x":12.5, "y":1},
- {"label":"\\", "x":13.5, "y":1, "w":1.5},
+ {"label":"Y", "x":7.5, "y":1},
+ {"label":"U", "x":8.5, "y":1},
+ {"label":"I", "x":9.5, "y":1},
+ {"label":"O", "x":10.5, "y":1},
+ {"label":"P", "x":11.5, "y":1},
+ {"label":"[", "x":12.5, "y":1},
+ {"label":"]", "x":13.5, "y":1},
+ {"label":"\\", "x":14.5, "y":1, "w":1.5},
{"label":"CapsLock", "x":0, "y":2, "w":1.75},
{"label":"A", "x":1.75, "y":2},
@@ -47,13 +129,13 @@
{"label":"F", "x":4.75, "y":2},
{"label":"G", "x":5.75, "y":2},
- {"label":"H", "x":6.75, "y":2},
- {"label":"J", "x":7.75, "y":2},
- {"label":"K", "x":8.75, "y":2},
- {"label":"L", "x":9.75, "y":2},
- {"label":";", "x":10.75, "y":2},
- {"label":"'", "x":11.75, "y":2},
- {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"H", "x":7.75, "y":2},
+ {"label":"J", "x":8.75, "y":2},
+ {"label":"K", "x":9.75, "y":2},
+ {"label":"L", "x":10.75, "y":2},
+ {"label":";", "x":11.75, "y":2},
+ {"label":"'", "x":12.75, "y":2},
+ {"label":"Enter", "x":13.75, "y":2, "w":2.25},
{"label":"Shift", "x":0, "y":3, "w":2.25},
{"label":"Z", "x":2.25, "y":3},
@@ -62,12 +144,12 @@
{"label":"V", "x":5.25, "y":3},
{"label":"B", "x":6.25, "y":3},
- {"label":"N", "x":7.25, "y":3},
- {"label":"M", "x":8.25, "y":3},
- {"label":",", "x":9.25, "y":3},
- {"label":".", "x":10.25, "y":3},
- {"label":"/", "x":11.25, "y":3},
- {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+ {"label":"N", "x":8.25, "y":3},
+ {"label":"M", "x":9.25, "y":3},
+ {"label":",", "x":10.25, "y":3},
+ {"label":".", "x":11.25, "y":3},
+ {"label":"/", "x":12.25, "y":3},
+ {"label":"Shift", "x":13.25, "y":3, "w":2.75},
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
{"label":"Win", "x":1.25, "y":4, "w":1.25},
@@ -75,13 +157,483 @@
{"x":3.75, "y":4, "w":2.75},
{"x":6.5, "y":4, "w":1.25},
- {"x":7.75, "y":4, "w":1.25},
- {"x":9, "y":4, "w":2.0},
- {"label":"Alt", "x":11, "y":4},
- {"label":"Win", "x":12, "y":4},
- {"label":"Menu", "x":13, "y":4},
- {"label":"Ctrl", "x":14, "y":4}
+ {"x":8.75, "y":4, "w":1.25},
+ {"x":10, "y":4, "w":2.0},
+ {"label":"Alt", "x":12, "y":4},
+ {"label":"Win", "x":13, "y":4},
+ {"label":"Menu", "x":14, "y":4},
+ {"label":"Ctrl", "x":15, "y":4}
+ ]
+ },
+
+ "LAYOUT_ansi_alt": {
+ "key_count": 63,
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"L06", "x":6, "y":0},
+
+ {"label":"R00", "x":8, "y":0},
+ {"label":"R01", "x":9, "y":0},
+ {"label":"R02", "x":10, "y":0},
+ {"label":"R03", "x":11, "y":0},
+ {"label":"R04", "x":12, "y":0},
+ {"label":"R05", "x":13, "y":0},
+ {"label":"R07", "x":14, "y":0, "w":2},
+
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+
+ {"label":"R10", "x":7.5, "y":1},
+ {"label":"R11", "x":8.5, "y":1},
+ {"label":"R12", "x":9.5, "y":1},
+ {"label":"R13", "x":10.5, "y":1},
+ {"label":"R14", "x":11.5, "y":1},
+ {"label":"R15", "x":12.5, "y":1},
+ {"label":"R16", "x":13.5, "y":1},
+ {"label":"R17", "x":14.5, "y":1, "w":1.5},
+
+ {"label":"L20", "x":0, "y":2, "w":1.75},
+ {"label":"L21", "x":1.75, "y":2},
+ {"label":"L22", "x":2.75, "y":2},
+ {"label":"L23", "x":3.75, "y":2},
+ {"label":"L24", "x":4.75, "y":2},
+ {"label":"L25", "x":5.75, "y":2},
+
+ {"label":"R21", "x":7.75, "y":2},
+ {"label":"R22", "x":8.75, "y":2},
+ {"label":"R23", "x":9.75, "y":2},
+ {"label":"R24", "x":10.75, "y":2},
+ {"label":"R25", "x":11.75, "y":2},
+ {"label":"R26", "x":12.75, "y":2},
+ {"label":"R27", "x":13.75, "y":2, "w":2.25},
+
+ {"label":"L31", "x":0, "y":3, "w":2.25},
+ {"label":"L32", "x":2.25, "y":3},
+ {"label":"L33", "x":3.25, "y":3},
+ {"label":"L34", "x":4.25, "y":3},
+ {"label":"L35", "x":5.25, "y":3},
+ {"label":"L36", "x":6.25, "y":3},
+
+ {"label":"R31", "x":8.25, "y":3},
+ {"label":"R32", "x":9.25, "y":3},
+ {"label":"R33", "x":10.25, "y":3},
+ {"label":"R34", "x":11.25, "y":3},
+ {"label":"R35", "x":12.25, "y":3},
+ {"label":"R36", "x":13.25, "y":3, "w":2.75},
+
+ {"label":"L40", "x":0, "y":4, "w":1.5},
+ {"label":"L41", "x":1.5, "y":4},
+ {"label":"L42", "x":2.5, "y":4, "w":1.5},
+ {"label":"L43", "x":4, "y":4, "w":2.75},
+ {"label":"L44", "x":6.75, "y":4},
+
+ {"label":"R43", "x":8.75, "y":4},
+ {"label":"R44", "x":9.75, "y":4, "w":2.25},
+ {"label":"R45", "x":12, "y":4, "w":1.5},
+ {"label":"R46", "x":13.5, "y":4},
+ {"label":"R47", "x":14.5, "y":4, "w":1.5}
+ ]
+ },
+
+ "LAYOUT_iso_default": {
+ "key_count": 65,
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"L06", "x":6, "y":0},
+
+ {"label":"R00", "x":8, "y":0},
+ {"label":"R01", "x":9, "y":0},
+ {"label":"R02", "x":10, "y":0},
+ {"label":"R03", "x":11, "y":0},
+ {"label":"R04", "x":12, "y":0},
+ {"label":"R05", "x":13, "y":0},
+ {"label":"R07", "x":14, "y":0, "w":2},
+
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+
+ {"label":"R10", "x":7.5, "y":1},
+ {"label":"R11", "x":8.5, "y":1},
+ {"label":"R12", "x":9.5, "y":1},
+ {"label":"R13", "x":10.5, "y":1},
+ {"label":"R14", "x":11.5, "y":1},
+ {"label":"R15", "x":12.5, "y":1},
+ {"label":"R16", "x":13.5, "y":1},
+
+ {"label":"L20", "x":0, "y":2, "w":1.75},
+ {"label":"L21", "x":1.75, "y":2},
+ {"label":"L22", "x":2.75, "y":2},
+ {"label":"L23", "x":3.75, "y":2},
+ {"label":"L24", "x":4.75, "y":2},
+ {"label":"L25", "x":5.75, "y":2},
+
+ {"label":"R21", "x":7.75, "y":2},
+ {"label":"R22", "x":8.75, "y":2},
+ {"label":"R23", "x":9.75, "y":2},
+ {"label":"R24", "x":10.75, "y":2},
+ {"label":"R25", "x":11.75, "y":2},
+ {"label":"R26", "x":12.75, "y":2},
+ {"label":"R17", "x":13.75, "y":2},
+ {"label":"R27", "x":14.75, "y":1, "w":1.25, "h":2},
+
+ {"label":"L30", "x":0, "y":3, "w":1.25},
+ {"label":"L31", "x":1.25, "y":3},
+ {"label":"L32", "x":2.25, "y":3},
+ {"label":"L33", "x":3.25, "y":3},
+ {"label":"L34", "x":4.25, "y":3},
+ {"label":"L35", "x":5.25, "y":3},
+ {"label":"L36", "x":6.25, "y":3},
+
+ {"label":"R31", "x":8.25, "y":3},
+ {"label":"R32", "x":9.25, "y":3},
+ {"label":"R33", "x":10.25, "y":3},
+ {"label":"R34", "x":11.25, "y":3},
+ {"label":"R35", "x":12.25, "y":3},
+ {"label":"R36", "x":13.25, "y":3, "w":2.75},
+
+ {"label":"L40", "x":0, "y":4, "w":1.25},
+ {"label":"L41", "x":1.25, "y":4, "w":1.25},
+ {"label":"L42", "x":2.5, "y":4, "w":1.25},
+ {"label":"L43", "x":3.75, "y":4, "w":2.75},
+ {"label":"L44", "x":6.5, "y":4, "w":1.25},
+
+ {"label":"R43", "x":8.75, "y":4, "w":1.25},
+ {"label":"R44", "x":10, "y":4, "w":2},
+ {"label":"R42", "x":12, "y":4},
+ {"label":"R45", "x":13, "y":4},
+ {"label":"R46", "x":14, "y":4},
+ {"label":"R47", "x":15, "y":4}
+ ]
+ },
+
+ "LAYOUT_iso_alt": {
+ "key_count": 64,
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"L06", "x":6, "y":0},
+
+ {"label":"R00", "x":8, "y":0},
+ {"label":"R01", "x":9, "y":0},
+ {"label":"R02", "x":10, "y":0},
+ {"label":"R03", "x":11, "y":0},
+ {"label":"R04", "x":12, "y":0},
+ {"label":"R05", "x":13, "y":0},
+ {"label":"R07", "x":14, "y":0, "w":2},
+
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+
+ {"label":"R10", "x":7.5, "y":1},
+ {"label":"R11", "x":8.5, "y":1},
+ {"label":"R12", "x":9.5, "y":1},
+ {"label":"R13", "x":10.5, "y":1},
+ {"label":"R14", "x":11.5, "y":1},
+ {"label":"R15", "x":12.5, "y":1},
+ {"label":"R16", "x":13.5, "y":1},
+
+ {"label":"L20", "x":0, "y":2, "w":1.75},
+ {"label":"L21", "x":1.75, "y":2},
+ {"label":"L22", "x":2.75, "y":2},
+ {"label":"L23", "x":3.75, "y":2},
+ {"label":"L24", "x":4.75, "y":2},
+ {"label":"L25", "x":5.75, "y":2},
+
+ {"label":"R21", "x":7.75, "y":2},
+ {"label":"R22", "x":8.75, "y":2},
+ {"label":"R23", "x":9.75, "y":2},
+ {"label":"R24", "x":10.75, "y":2},
+ {"label":"R25", "x":11.75, "y":2},
+ {"label":"R26", "x":12.75, "y":2},
+ {"label":"R17", "x":13.75, "y":2},
+ {"label":"R27", "x":14.75, "y":1, "w":1.25, "h":2},
+
+ {"label":"L30", "x":0, "y":3, "w":1.25},
+ {"label":"L31", "x":1.25, "y":3},
+ {"label":"L32", "x":2.25, "y":3},
+ {"label":"L33", "x":3.25, "y":3},
+ {"label":"L34", "x":4.25, "y":3},
+ {"label":"L35", "x":5.25, "y":3},
+ {"label":"L36", "x":6.25, "y":3},
+
+ {"label":"R31", "x":8.25, "y":3},
+ {"label":"R32", "x":9.25, "y":3},
+ {"label":"R33", "x":10.25, "y":3},
+ {"label":"R34", "x":11.25, "y":3},
+ {"label":"R35", "x":12.25, "y":3},
+ {"label":"R36", "x":13.25, "y":3, "w":2.75},
+
+ {"label":"L40", "x":0, "y":4, "w":1.5},
+ {"label":"L41", "x":1.5, "y":4},
+ {"label":"L42", "x":2.5, "y":4, "w":1.5},
+ {"label":"L43", "x":4, "y":4, "w":2.75},
+ {"label":"L44", "x":6.75, "y":4},
+
+ {"label":"R43", "x":8.75, "y":4},
+ {"label":"R44", "x":9.75, "y":4, "w":2.25},
+ {"label":"R45", "x":12, "y":4, "w":1.5},
+ {"label":"R46", "x":13.5, "y":4},
+ {"label":"R47", "x":14.5, "y":4, "w":1.5}
+ ]
+ },
+
+ "LAYOUT_hhkb_default": {
+ "key_count": 63,
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"L06", "x":6, "y":0},
+
+ {"label":"R00", "x":8, "y":0},
+ {"label":"R01", "x":9, "y":0},
+ {"label":"R02", "x":10, "y":0},
+ {"label":"R03", "x":11, "y":0},
+ {"label":"R04", "x":12, "y":0},
+ {"label":"R05", "x":13, "y":0},
+ {"label":"R06", "x":14, "y":0},
+ {"label":"R07", "x":15, "y":0},
+
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+
+ {"label":"R10", "x":7.5, "y":1},
+ {"label":"R11", "x":8.5, "y":1},
+ {"label":"R12", "x":9.5, "y":1},
+ {"label":"R13", "x":10.5, "y":1},
+ {"label":"R14", "x":11.5, "y":1},
+ {"label":"R15", "x":12.5, "y":1},
+ {"label":"R16", "x":13.5, "y":1},
+ {"label":"R17", "x":14.5, "y":1, "w":1.5},
+
+ {"label":"L20", "x":0, "y":2, "w":1.75},
+ {"label":"L21", "x":1.75, "y":2},
+ {"label":"L22", "x":2.75, "y":2},
+ {"label":"L23", "x":3.75, "y":2},
+ {"label":"L24", "x":4.75, "y":2},
+ {"label":"L25", "x":5.75, "y":2},
+
+ {"label":"R21", "x":7.75, "y":2},
+ {"label":"R22", "x":8.75, "y":2},
+ {"label":"R23", "x":9.75, "y":2},
+ {"label":"R24", "x":10.75, "y":2},
+ {"label":"R25", "x":11.75, "y":2},
+ {"label":"R26", "x":12.75, "y":2},
+ {"label":"R27", "x":13.75, "y":2, "w":2.25},
+
+ {"label":"L31", "x":0, "y":3, "w":2.25},
+ {"label":"L32", "x":2.25, "y":3},
+ {"label":"L33", "x":3.25, "y":3},
+ {"label":"L34", "x":4.25, "y":3},
+ {"label":"L35", "x":5.25, "y":3},
+ {"label":"L36", "x":6.25, "y":3},
+
+ {"label":"R31", "x":8.25, "y":3},
+ {"label":"R32", "x":9.25, "y":3},
+ {"label":"R33", "x":10.25, "y":3},
+ {"label":"R34", "x":11.25, "y":3},
+ {"label":"R35", "x":12.25, "y":3},
+ {"label":"R36", "x":13.25, "y":3, "w":1.75},
+ {"label":"R37", "x":15, "y":3},
+
+ {"label":"L41", "x":1.5, "y":4},
+ {"label":"L42", "x":2.5, "y":4, "w":1.5},
+ {"label":"L43", "x":4, "y":4, "w":2.75},
+ {"label":"L44", "x":6.75, "y":4},
+
+ {"label":"R43", "x":8.75, "y":4},
+ {"label":"R44", "x":9.75, "y":4, "w":2.25},
+ {"label":"R45", "x":12, "y":4, "w":1.5},
+ {"label":"R46", "x":13.5, "y":4}
+ ]
+ },
+
+ "LAYOUT_hhkb_split_lshift": {
+ "key_count": 64,
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"L06", "x":6, "y":0},
+
+ {"label":"R00", "x":8, "y":0},
+ {"label":"R01", "x":9, "y":0},
+ {"label":"R02", "x":10, "y":0},
+ {"label":"R03", "x":11, "y":0},
+ {"label":"R04", "x":12, "y":0},
+ {"label":"R05", "x":13, "y":0},
+ {"label":"R06", "x":14, "y":0},
+ {"label":"R07", "x":15, "y":0},
+
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+
+ {"label":"R10", "x":7.5, "y":1},
+ {"label":"R11", "x":8.5, "y":1},
+ {"label":"R12", "x":9.5, "y":1},
+ {"label":"R13", "x":10.5, "y":1},
+ {"label":"R14", "x":11.5, "y":1},
+ {"label":"R15", "x":12.5, "y":1},
+ {"label":"R16", "x":13.5, "y":1},
+ {"label":"R17", "x":14.5, "y":1, "w":1.5},
+
+ {"label":"L20", "x":0, "y":2, "w":1.75},
+ {"label":"L21", "x":1.75, "y":2},
+ {"label":"L22", "x":2.75, "y":2},
+ {"label":"L23", "x":3.75, "y":2},
+ {"label":"L24", "x":4.75, "y":2},
+ {"label":"L25", "x":5.75, "y":2},
+
+ {"label":"R21", "x":7.75, "y":2},
+ {"label":"R22", "x":8.75, "y":2},
+ {"label":"R23", "x":9.75, "y":2},
+ {"label":"R24", "x":10.75, "y":2},
+ {"label":"R25", "x":11.75, "y":2},
+ {"label":"R26", "x":12.75, "y":2},
+ {"label":"R27", "x":13.75, "y":2, "w":2.25},
+
+ {"label":"L30", "x":0, "y":3, "w":1.25},
+ {"label":"L31", "x":1.25, "y":3},
+ {"label":"L32", "x":2.25, "y":3},
+ {"label":"L33", "x":3.25, "y":3},
+ {"label":"L34", "x":4.25, "y":3},
+ {"label":"L35", "x":5.25, "y":3},
+ {"label":"L36", "x":6.25, "y":3},
+
+ {"label":"R31", "x":8.25, "y":3},
+ {"label":"R32", "x":9.25, "y":3},
+ {"label":"R33", "x":10.25, "y":3},
+ {"label":"R34", "x":11.25, "y":3},
+ {"label":"R35", "x":12.25, "y":3},
+ {"label":"R36", "x":13.25, "y":3, "w":1.75},
+ {"label":"R37", "x":15, "y":3},
+
+ {"label":"L41", "x":1.5, "y":4},
+ {"label":"L42", "x":2.5, "y":4, "w":1.5},
+ {"label":"L43", "x":4, "y":4, "w":2.75},
+ {"label":"L44", "x":6.75, "y":4},
+
+ {"label":"R43", "x":8.75, "y":4},
+ {"label":"R44", "x":9.75, "y":4, "w":2.25},
+ {"label":"R45", "x":12, "y":4, "w":1.5},
+ {"label":"R46", "x":13.5, "y":4}
+ ]
+ },
+
+ "LAYOUT_wkl_default": {
+ "key_count": 61,
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"L06", "x":6, "y":0},
+
+ {"label":"R00", "x":8, "y":0},
+ {"label":"R01", "x":9, "y":0},
+ {"label":"R02", "x":10, "y":0},
+ {"label":"R03", "x":11, "y":0},
+ {"label":"R04", "x":12, "y":0},
+ {"label":"R05", "x":13, "y":0},
+ {"label":"R07", "x":14, "y":0, "w":2},
+
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+
+ {"label":"R10", "x":7.5, "y":1},
+ {"label":"R11", "x":8.5, "y":1},
+ {"label":"R12", "x":9.5, "y":1},
+ {"label":"R13", "x":10.5, "y":1},
+ {"label":"R14", "x":11.5, "y":1},
+ {"label":"R15", "x":12.5, "y":1},
+ {"label":"R16", "x":13.5, "y":1},
+ {"label":"R17", "x":14.5, "y":1, "w":1.5},
+
+ {"label":"L20", "x":0, "y":2, "w":1.75},
+ {"label":"L21", "x":1.75, "y":2},
+ {"label":"L22", "x":2.75, "y":2},
+ {"label":"L23", "x":3.75, "y":2},
+ {"label":"L24", "x":4.75, "y":2},
+ {"label":"L25", "x":5.75, "y":2},
+
+ {"label":"R21", "x":7.75, "y":2},
+ {"label":"R22", "x":8.75, "y":2},
+ {"label":"R23", "x":9.75, "y":2},
+ {"label":"R24", "x":10.75, "y":2},
+ {"label":"R25", "x":11.75, "y":2},
+ {"label":"R26", "x":12.75, "y":2},
+ {"label":"R27", "x":13.75, "y":2, "w":2.25},
+
+ {"label":"L31", "x":0, "y":3, "w":2.25},
+ {"label":"L32", "x":2.25, "y":3},
+ {"label":"L33", "x":3.25, "y":3},
+ {"label":"L34", "x":4.25, "y":3},
+ {"label":"L35", "x":5.25, "y":3},
+ {"label":"L36", "x":6.25, "y":3},
+
+ {"label":"R31", "x":8.25, "y":3},
+ {"label":"R32", "x":9.25, "y":3},
+ {"label":"R33", "x":10.25, "y":3},
+ {"label":"R34", "x":11.25, "y":3},
+ {"label":"R35", "x":12.25, "y":3},
+ {"label":"R36", "x":13.25, "y":3, "w":2.75},
+
+ {"label":"L40", "x":0, "y":4, "w":1.5},
+ {"label":"L42", "x":2.5, "y":4, "w":1.5},
+ {"label":"L43", "x":4, "y":4, "w":2.75},
+ {"label":"L44", "x":6.75, "y":4},
+
+ {"label":"R43", "x":8.75, "y":4},
+ {"label":"R44", "x":9.75, "y":4, "w":2.25},
+ {"label":"R45", "x":12, "y":4, "w":1.5},
+ {"label":"R47", "x":14.5, "y":4, "w":1.5}
]
}
}
-} \ No newline at end of file
+}
diff --git a/keyboards/handwired/qc60/keymaps/default/keymap.c b/keyboards/handwired/qc60/keymaps/default/keymap.c
index bafaf5058..88062d4ed 100644
--- a/keyboards/handwired/qc60/keymaps/default/keymap.c
+++ b/keyboards/handwired/qc60/keymaps/default/keymap.c
@@ -24,9 +24,6 @@ extern keymap_config_t keymap_config;
// entirely and just use numbers.
#define _BASE 0
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_ansi_default(
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, \
diff --git a/keyboards/handwired/qc60/keymaps/wntrmln/keymap.c b/keyboards/handwired/qc60/keymaps/wntrmln/keymap.c
index f99635d53..f024ddb4b 100644
--- a/keyboards/handwired/qc60/keymaps/wntrmln/keymap.c
+++ b/keyboards/handwired/qc60/keymaps/wntrmln/keymap.c
@@ -25,9 +25,6 @@ extern keymap_config_t keymap_config;
#define _BASE 0
#define _FN 1
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
#define FN MO(_FN)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
diff --git a/keyboards/handwired/qc60/proto/proto.h b/keyboards/handwired/qc60/proto/proto.h
index 191e8150a..7e7755d0e 100644
--- a/keyboards/handwired/qc60/proto/proto.h
+++ b/keyboards/handwired/qc60/proto/proto.h
@@ -14,8 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef PROTO_H
-#define PROTO_H
+#pragma once
#include "qc60.h"
@@ -26,10 +25,10 @@
/* Split Backspace
* {R07, XXX, R05, R04, R03, R02, R01, R00}
- *
+ *
* Split Right Shift
* {R37, R36, R35, R34, R33, R32, R31, XXX}
- *
+ *
* Split Left Shift
* {L30, L31, L32, L33, L34, L35, L36, XXX}
*
@@ -101,14 +100,14 @@
L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R07, \
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, \
L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R17, R27, \
- L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
+ L30, L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
L40, L41, L42, L43, L44, R43, R44, R42, R45, R46, R47 \
) \
{ \
{L00, L01, L02, L03, L04, L05, L06, XXX}, \
{L10, L11, L12, L13, L14, L15, XXX, XXX}, \
{L20, L21, L22, L23, L24, L25, XXX, XXX}, \
- {XXX, L31, L32, L33, L34, L35, L36, XXX}, \
+ {L30, L31, L32, L33, L34, L35, L36, XXX}, \
{L40, L41, L42, L43, L44, XXX, XXX, XXX}, \
{R07, XXX, R05, R04, R03, R02, R01, R00}, \
{R17, R16, R15, R14, R13, R12, R11, R10}, \
@@ -118,17 +117,17 @@
}
#define LAYOUT_iso_alt( \
- L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R07, \
- L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, R17, \
- L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R27, \
- L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
- L40, L41, L42, L43, L44, R43, R44, R45, R46, R47 \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R07, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R17, R27, \
+ L30, L31, L32, L33, L34, L35, L36, R31, R32, R33, R34, R35, R36, \
+ L40, L41, L42, L43, L44, R43, R44, R45, R46, R47 \
) \
{ \
{L00, L01, L02, L03, L04, L05, L06, XXX}, \
{L10, L11, L12, L13, L14, L15, XXX, XXX}, \
{L20, L21, L22, L23, L24, L25, XXX, XXX}, \
- {XXX, L31, L32, L33, L34, L35, L36, XXX}, \
+ {L30, L31, L32, L33, L34, L35, L36, XXX}, \
{L40, L41, L42, L43, L44, XXX, XXX, XXX}, \
{R07, XXX, R05, R04, R03, R02, R01, R00}, \
{R17, R16, R15, R14, R13, R12, R11, R10}, \
@@ -196,6 +195,3 @@
{XXX, R36, R35, R34, R33, R32, R31, XXX}, \
{R47, XXX, R45, R44, R43, XXX, XXX, XXX}, \
}
-
-
-#endif
diff --git a/keyboards/handwired/reddot/info.json b/keyboards/handwired/reddot/info.json
new file mode 100644
index 000000000..1fcc8677e
--- /dev/null
+++ b/keyboards/handwired/reddot/info.json
@@ -0,0 +1,108 @@
+{
+ "keyboard_name": "handwired/reddot",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 20.5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"k00 (Esc)", "x":0, "y":0},
+ {"label":"k01 (F1)", "x":1, "y":0},
+ {"label":"k02 (F2)", "x":2, "y":0},
+ {"label":"k03 (F3)", "x":3, "y":0},
+ {"label":"k04 (F4)", "x":4, "y":0},
+ {"label":"k05 (F5)", "x":5, "y":0},
+ {"label":"k06 (Tab)", "x":6, "y":0, "w":2},
+ {"label":"k07 (Caps Lock)", "x":8, "y":0},
+ {"label":"k08 (F6)", "x":9, "y":0},
+ {"label":"k09 (F7)", "x":10, "y":0},
+ {"label":"k0A (F8)", "x":11, "y":0},
+ {"label":"k0B (F9)", "x":12, "y":0},
+ {"label":"k0C (F10)", "x":13, "y":0},
+ {"label":"k0D (F11)", "x":14, "y":0},
+ {"label":"k0E (F12)", "x":15, "y":0},
+ {"label":"k10 (Function)", "x":16.5, "y":0},
+ {"label":"k11 (Keypad /)", "x":17.5, "y":0},
+ {"label":"k12 (Keypad *)", "x":18.5, "y":0},
+ {"label":"k13 (Keypad -)", "x":19.5, "y":0},
+
+ {"label":"k20 (Left Alt)", "x":0, "y":1},
+ {"label":"k21 (1 / FR Ampersand)", "x":1, "y":1},
+ {"label":"k22 (2 / FR É)", "x":2, "y":1},
+ {"label":"k23 (3 / FR Quote)", "x":3, "y":1},
+ {"label":"k24 (4 / FR Apostrophe)", "x":4, "y":1},
+ {"label":"k25 (5 / FR Left Parenthesis)", "x":5, "y":1},
+ {"label":"k26 (Backspace)", "x":6, "y":1, "w":2},
+ {"label":"k27 (Delete)", "x":8, "y":1},
+ {"label":"k28 (6 / FR Minus)", "x":9, "y":1},
+ {"label":"k29 (7 / FR È)", "x":10, "y":1},
+ {"label":"k2A (8 / FR Underscore)", "x":11, "y":1},
+ {"label":"k2B (9 / FR Ç)", "x":12, "y":1},
+ {"label":"k2C (0 / FR À)", "x":13, "y":1},
+ {"label":"k2D (Minus / FR Right Parenthesis)", "x":14, "y":1},
+ {"label":"k2E (Equals / FR Equals)", "x":15, "y":1},
+ {"label":"k30 (Insert)", "x":16.5, "y":1},
+ {"label":"k31 (Home)", "x":17.5, "y":1},
+ {"label":"k32 (Page Up)", "x":18.5, "y":1},
+
+ {"label":"k40 (GUI)", "x":0, "y":2},
+ {"label":"k41 (Q / FR A)", "x":1, "y":2},
+ {"label":"k42 (W / FR Z)", "x":2, "y":2},
+ {"label":"k43 (E)", "x":3, "y":2},
+ {"label":"k44 (R)", "x":4, "y":2},
+ {"label":"k45 (T)", "x":5, "y":2},
+ {"label":"k46 (Shift)", "x":6, "y":2, "h":2},
+ {"label":"k66 (Enter)", "x":7, "y":2, "h":2},
+ {"label":"k47 (Enter)", "x":8, "y":2, "h":2},
+ {"label":"k48 (Y)", "x":9, "y":2},
+ {"label":"k49 (U)", "x":10, "y":2},
+ {"label":"k4A (I)", "x":11, "y":2},
+ {"label":"k4B (O)", "x":12, "y":2},
+ {"label":"k4C (P)", "x":13, "y":2},
+ {"label":"k4D (Left Bracket / FR Circumflex)", "x":14, "y":2},
+ {"label":"k4E (Right Bracket / FR Dollar)", "x":15, "y":2},
+ {"label":"k50 (Delete)", "x":16.5, "y":2},
+ {"label":"k51 (End)", "x":17.5, "y":2},
+ {"label":"k52 (Page Down)", "x":18.5, "y":2},
+ {"label":"k53 (Keypad +)", "x":19.5, "y":1, "h":2},
+
+ {"label":"k60 (Ctrl)", "x":0, "y":3},
+ {"label":"k61 (A / FR Q)", "x":1, "y":3},
+ {"label":"k62 (S)", "x":2, "y":3},
+ {"label":"k63 (D)", "x":3, "y":3},
+ {"label":"k64 (F)", "x":4, "y":3},
+ {"label":"k65 (G)", "x":5, "y":3},
+ {"label":"k68 (H)", "x":9, "y":3},
+ {"label":"k69 (J)", "x":10, "y":3},
+ {"label":"k6A (K)", "x":11, "y":3},
+ {"label":"k6B (L)", "x":12, "y":3},
+ {"label":"k6C (Semicolon / FR M)", "x":13, "y":3},
+ {"label":"k6D (Quote / FR Ù)", "x":14, "y":3},
+ {"label":"k6E (ISO Hash / FR Asterisk)", "x":15, "y":3},
+ {"label":"k70 (Keypad 1)", "x":16.5, "y":3},
+ {"label":"k71 (Up)", "x":17.5, "y":3},
+ {"label":"k72 (Keypad 3)", "x":18.5, "y":3},
+
+ {"label":"k80 (ISO Backslash / FR Less Than)", "x":0, "y":4},
+ {"label":"k81 (Z / FR W)", "x":1, "y":4},
+ {"label":"k82 (X)", "x":2, "y":4},
+ {"label":"k83 (C)", "x":3, "y":4},
+ {"label":"k84 (V)", "x":4, "y":4},
+ {"label":"k85 (B)", "x":5, "y":4},
+ {"label":"k86 (Space)", "x":6, "y":4, "w":2},
+ {"label":"k88 (Space)", "x":8, "y":4, "w":2},
+ {"label":"k89 (N)", "x":10, "y":4},
+ {"label":"k8A (M / FR Comma)", "x":11, "y":4},
+ {"label":"k8B (Comma / FR Semicolon)", "x":12, "y":4},
+ {"label":"k8C (Period / Colon)", "x":13, "y":4},
+ {"label":"k8D (Slash / FR Exclaim)", "x":14, "y":4},
+ {"label":"k8E (Right Alt / FR AltGr)", "x":15, "y":4},
+ {"label":"k90 (Left)", "x":16.5, "y":4},
+ {"label":"k91 (Down)", "x":17.5, "y":4},
+ {"label":"k92 (Right)", "x":18.5, "y":4},
+ {"label":"k93 (Keypad Enter)", "x":19.5, "y":3, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/reddot/keymaps/default/keymap.c b/keyboards/handwired/reddot/keymaps/default/keymap.c
index 73aeff225..246a03b4d 100755..100644
--- a/keyboards/handwired/reddot/keymaps/default/keymap.c
+++ b/keyboards/handwired/reddot/keymaps/default/keymap.c
@@ -1,29 +1,22 @@
-#include "reddot.h"
-#include "../../../../../quantum/keymap_extras/keymap_french.h"
+#include QMK_KEYBOARD_H
+#include "keymap_french.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = KEYMAP(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_FN0, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,\
- KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPACE, KC_DELETE, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_INSERT, KC_HOME, KC_PGUP,\
- KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_DELETE, KC_END, KC_PGDOWN, KC_KP_PLUS,\
- KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_KP_1, KC_UP, KC_KP_3,\
- FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
-
- [1] = KEYMAP(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_FN0, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,\
- KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPACE, KC_DELETE, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_7, KC_8, KC_9,\
- KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_4, KC_5, KC_6, KC_KP_PLUS,\
- KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_1, KC_2, KC_3,\
- FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
-};
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, TG(1), KC_PSLS, KC_PAST, KC_PMNS, \
+ KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPC, KC_DEL, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_INS, KC_HOME, KC_PGUP, \
+ KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_DEL, KC_END, KC_PGDN, KC_PPLS, \
+ KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_P1, KC_UP, KC_P3, \
+ FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_SPC, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RGHT, KC_PENT \
+ ),
+ [1] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_PSLS, KC_PAST, KC_PMNS, \
+ KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPC, KC_DEL, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_7, KC_8, KC_9, \
+ KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_4, KC_5, KC_6, KC_PPLS, \
+ KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_1, KC_2, KC_3, \
+ FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_SPC, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RGHT, KC_PENT \
+ ),
-const uint16_t PROGMEM fn_actions[] = {
- ACTION_LAYER_TOGGLE(1),
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE;
-};
-
diff --git a/keyboards/handwired/reddot/readme.md b/keyboards/handwired/reddot/readme.md
index 8cdbb47d6..27c8b54d6 100755
--- a/keyboards/handwired/reddot/readme.md
+++ b/keyboards/handwired/reddot/readme.md
@@ -1,24 +1,14 @@
-## RedDot Specific Info ##
+# RedDot
+An ortholinear compact fullsize keyboard configured for French AZERTY layout.
-## Quantum MK Firmware
+- [Layout](http://www.keyboard-layout-editor.com/##@_plate:true%3B&@_sm=cherry&sb=cherry&st=MX1A-L1xx%3B&=Esc&=F1&=F2&=F3&=F4&=F5&_w:2%3B&=Tab&=Caps%20Lock&=F6&=F7&=F8&=F9&=F10&=F11&=F12&_x:0.5%3B&=Fn&=%2F%2F&=*&=-%3B&@=Alt&=1%0A%2F&&=2%0A%C3%A9%0A%0A~&=3%0A%22%0A%0A%23&=4%0A'%0A%0A%7B&=5%0A(%0A%0A%5B&_w:2%3B&=Back&=Del&=6%0A-%0A%0A%7C&=7%0A%C3%A8%0A%0A%60&=8%0A%2F_%0A%0A%5C&=9%0A%C3%A7%0A%0A%5E&=0%0A%C3%A0%0A%0A%2F@&=%C2%B0%0A)%0A%0A%5D&=+%0A%2F=%0A%0A%7D&_x:0.5%3B&=Insert&=Home&=Page%20Up&_h:2%3B&=+%3B&@=Win&=A&=Z&=E&=R&=T&_h:2%3B&=Shift&_h:2%3B&=Enter&_h:2%3B&=Enter&=Y&=U&=I&=O&=P&=%C2%A8%0A%5E&=%C2%A3%0A$&_x:0.5%3B&=Delete&=End&=Page%20Down%3B&@=Ctrl&=Q&=S&=D&=F&=G&_x:3%3B&=H&=J&=K&=L&=M&=%25%0A%C3%B9&=%C2%B5%0A*&_x:0.5%3B&=1%0AEnd&=Up&=3%0APgDn&_h:2%3B&=Enter%3B&@=%3E%0A%3C&=W&=X&=C&=V&=B&_w:2%3B&=Space&_w:2%3B&=Space&=N&=%3F%0A,&=.%0A%2F%3B&=%2F%2F%0A%2F:&=%C2%A7%0A!&=Alt%20Gr&_x:0.5%3B&=Left&=Down&=Right)
-For the full Quantum feature list, see [the parent README.md](/readme.md).
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+Hardware Supported: RedDot handwired
-## Building
+Make example for this keyboard (after setting up your build environment):
-Download or clone the whole firmware and navigate to the keyboard/reddot folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
+ make handwired/reddot:default
-Depending on which keymap you would like to use, you will have to compile slightly differently.
-
-### Default
-To build with the default keymap, simply run `make`.
-
-### Other Keymaps
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
-
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
-```
-$ make KEYMAP=[default|jack|<name>]
-```
-Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/reddot/reddot.h b/keyboards/handwired/reddot/reddot.h
index f0c4be557..a763f2ddc 100755
--- a/keyboards/handwired/reddot/reddot.h
+++ b/keyboards/handwired/reddot/reddot.h
@@ -1,20 +1,17 @@
-#ifndef REDDOT_H
-#define REDDOT_H
+#pragma once
#include "quantum.h"
-#define KEYMAP( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k10, k11, k12, k13, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k30, k31, k32, \
- k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k50, k51, k52, k53, \
- k60, k61, k62, k63, k64, k65, k66, k68, k69, k6A, k6B, k6C, k6D, k6E, k70, k71, k72, \
- k80, k81, k82, k83, k84, k85, k86, k88, k89, k8A, k8B, k8C, k8D, k8E, k90, k91, k92, k93\
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k10, k11, k12, k13, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k30, k31, k32, \
+ k40, k41, k42, k43, k44, k45, k46, k66, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k50, k51, k52, k53, \
+ k60, k61, k62, k63, k64, k65, k68, k69, k6A, k6B, k6C, k6D, k6E, k70, k71, k72, \
+ k80, k81, k82, k83, k84, k85, k86, k88, k89, k8A, k8B, k8C, k8D, k8E, k90, k91, k92, k93 \
) { \
- { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k10, k11, k12, k13 }, \
- { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k30, k31, k32, KC_NO }, \
- { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k50, k51, k52, k53 }, \
- { k60, k61, k62, k63, k64, k65, k66, KC_NO, k68, k69, k6A, k6B, k6C, k6D, k6E, k70, k71, k72, KC_NO }, \
- { k80, k81, k82, k83, k84, k85, k86, KC_NO, k88, k89, k8A, k8B, k8C, k8D, k8E, k90, k91, k92, k93 } \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k10, k11, k12, k13 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k30, k31, k32, KC_NO }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k50, k51, k52, k53 }, \
+ { k60, k61, k62, k63, k64, k65, k66, KC_NO, k68, k69, k6A, k6B, k6C, k6D, k6E, k70, k71, k72, KC_NO }, \
+ { k80, k81, k82, k83, k84, k85, k86, KC_NO, k88, k89, k8A, k8B, k8C, k8D, k8E, k90, k91, k92, k93 } \
}
-
-#endif
diff --git a/keyboards/handwired/retro_refit/info.json b/keyboards/handwired/retro_refit/info.json
new file mode 100644
index 000000000..44ae97cd1
--- /dev/null
+++ b/keyboards/handwired/retro_refit/info.json
@@ -0,0 +1,95 @@
+{
+ "keyboard_name": "handwired/retro_refit",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15.5,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 81,
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":1, "y":0},
+ {"label":"F2", "x":2, "y":0},
+ {"label":"F3", "x":3, "y":0},
+ {"label":"F4", "x":4, "y":0},
+ {"label":"F5", "x":5, "y":0},
+ {"label":"F6", "x":6, "y":0},
+ {"label":"F7", "x":7, "y":0},
+ {"label":"F8", "x":8, "y":0},
+ {"label":"F9", "x":9, "y":0},
+ {"label":"F10", "x":10, "y":0},
+ {"label":"Num Lock", "x":11.5, "y":0},
+ {"label":"Scroll Lock", "x":12.5, "y":0},
+ {"label":"Print Screen", "x":13.5, "y":0},
+ {"label":"Pause", "x":14.5, "y":0},
+ {"label":"`", "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":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":1.5},
+ {"label":"Home", "x":14.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":"[", "x":11.5, "y":2.5},
+ {"label":"]", "x":12.5, "y":2.5},
+ {"label":"Page Up", "x":14.5, "y":2.5},
+ {"label":"Ctrl", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":";", "x":10.75, "y":3.5},
+ {"label":"'", "x":11.75, "y":3.5},
+ {"label":"Enter", "x":12.75, "y":3.5, "w":1.75},
+ {"label":"Page Down", "x":14.5, "y":3.5},
+ {"label":"Shift", "x":0, "y":4.5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":",", "x":9.25, "y":4.5},
+ {"label":".", "x":10.25, "y":4.5},
+ {"label":"/", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":1.25},
+ {"label":"Up", "x":13.5, "y":4.5},
+ {"label":"End", "x":14.5, "y":4.5},
+ {"label":"Alt", "x":0, "y":5.5, "w":1.25},
+ {"label":"Caps Lock", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"\\", "x":2.5, "y":5.5},
+ {"label":"Space", "x":3.5, "y":5.5, "w":7},
+ {"label":"Insert", "x":10.5, "y":5.5},
+ {"label":"Delete", "x":11.5, "y":5.5},
+ {"label":"Left", "x":12.5, "y":5.5},
+ {"label":"Down", "x":13.5, "y":5.5},
+ {"label":"Right", "x":14.5, "y":5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/retro_refit/keymaps/default/keymap.c b/keyboards/handwired/retro_refit/keymaps/default/keymap.c
index 598541a05..2f9f28478 100644
--- a/keyboards/handwired/retro_refit/keymaps/default/keymap.c
+++ b/keyboards/handwired/retro_refit/keymaps/default/keymap.c
@@ -1,31 +1,12 @@
-
-#include "retro_refit.h"
+#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] =
- KEYMAP( ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, NLCK, SLCK, PSCR, PAUS, \
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, HOME, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, PGUP, \
- BSLS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, PGDN, \
- LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, END, \
- LCTL, LGUI, LALT, SPC, INS, DEL, LEFT, DOWN, RGHT),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
+ [0] = LAYOUT( \
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NLCK, KC_SLCK, KC_PSCR, KC_PAUS, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, \
+ KC_BSLS, 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, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_INS, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
};
diff --git a/keyboards/handwired/retro_refit/readme.md b/keyboards/handwired/retro_refit/readme.md
index 9f10edf9f..8dfca7b10 100644
--- a/keyboards/handwired/retro_refit/readme.md
+++ b/keyboards/handwired/retro_refit/readme.md
@@ -1,60 +1,42 @@
-retro_refit keyboard firmware
-======================
-
-## Keyboard Info
+# retro_refit
The retro refit keyboard used a Teensy to replace the original controller on a 386 "laptop".
-http://imgur.com/a/08Fyj
+[Image Gallery](https://imgur.com/a/08Fyj)
-This keyboard uses a KEYMAP macro that is a great example of using a non-standard row-column matrix. The keyboard in question had 11 rows and 8 columns, but the rows were not all horizontal, and the columns were not all vertical. For example, row 2 contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and"Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B", "Left Alt", "Up Arrow", and "Down Arrow".
+This keyboard uses a LAYOUT macro that is a great example of using a non-standard row-column matrix. The keyboard in question had 11 rows and 8 columns, but the rows were not all horizontal, and the columns were not all vertical. For example, row 2 contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and"Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B", "Left Alt", "Up Arrow", and "Down Arrow".
-The macro makes programming the keys easier and in a more straight-forward manner because it realigns the keys into a 6x15 sensible keyboard layout instead of the obtuse 11x8 matrix. Each Kxy corrisponds to a key in row x column y.
+The macro makes programming the keys easier and in a more straight-forward manner because it realigns the keys into a 6x15 sensible keyboard layout instead of the obtuse 11x8 matrix. Each Kxy corresponds to a key in row x column y.
```
-#define KEYMAP( \
- K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
- K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
- K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \
- K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \
- K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
- K10, K06, K25, K07, K86, K85, K95, K90, K93 \
+#define LAYOUT( \
+ K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
+ K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
+ K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \
+ K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \
+ K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
+ K10, K06, K25, K07, K86, K85, K95, K90, K93 \
) { \
-{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, }, \
-{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, }, \
-{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, }, \
-{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, }, \
-{ KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, }, \
-{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57, }, \
-{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, }, \
-{ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77, }, \
-{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K85, KC_##K86, KC_##K87, }, \
-{ KC_##K90, KC_##K91, KC_NO, KC_##K93, KC_##K94, KC_##K95, KC_NO, KC_##K97, }, \
-{ KC_##KA0, KC_##KA1, KC_##KA2, KC_##KA3, KC_##KA4, KC_##KA5, KC_##KA6, KC_##KA7, } \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37 }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47 }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { K70, K71, K72, K73, K74, K75, K76, K77 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K85, K86, K87 }, \
+ { K90, K91, KC_NO, K93, K94, K95, KC_NO, K97 }, \
+ { KA0, KA1, KA2, KA3, KA4, KA5, KA6, KA7 } \
}
```
-## Quantum MK Firmware
-
-For the full Quantum feature list, see [the parent readme.md](/readme.md).
-
-## Building
-
-Download or clone the whole firmware and navigate to the keyboards/retro_refit folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
-
-Depending on which keymap you would like to use, you will have to compile slightly differently.
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+Hardware Supported: Leading Edge D3 386 keyboard, Teensy
-### Default
-To build with the default keymap, simply run `make default`.
+Make example for this keyboard (after setting up your build environment):
-### Other Keymaps
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
-
-To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
-
-```
-$ make [default|jack|<name>]
-```
+ make handwired/retro_refit:default
-Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder. \ No newline at end of file
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/retro_refit/retro_refit.h b/keyboards/handwired/retro_refit/retro_refit.h
index 109acdc39..ad1c567a8 100644
--- a/keyboards/handwired/retro_refit/retro_refit.h
+++ b/keyboards/handwired/retro_refit/retro_refit.h
@@ -1,38 +1,35 @@
-#ifndef RETRO_REFIT_H
-#define RETRO_REFIT_H
+#pragma once
#include "quantum.h"
-// This macro is an example of using a non-standard row-column matrix. The
-// keyboard in question had 11 rows and 8 columns, but the rows were not all
-// horizontal, and the columns were not all vertical. For example, row 2
+// This macro is an example of using a non-standard row-column matrix. The
+// keyboard in question had 11 rows and 8 columns, but the rows were not all
+// horizontal, and the columns were not all vertical. For example, row 2
// contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and
-// "Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B",
+// "Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B",
// "Left Alt", "Up Arrow", and "Down Arrow".
//
// The macro makes programming the keys easier and in a more straight-forward
-// manner because it realigns the keys into a 6x15 sensible keyboard layout
+// manner because it realigns the keys into a 6x15 sensible keyboard layout
// instead of the obtuse 11x8 matrix.
-#define KEYMAP( \
- K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
- K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
- K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \
- K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \
- K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
- K10, K06, K25, K07, K86, K85, K95, K90, K93 \
+#define LAYOUT( \
+ K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
+ K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
+ K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \
+ K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \
+ K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
+ K10, K06, K25, K07, K86, K85, K95, K90, K93 \
) { \
-{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, }, \
-{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, }, \
-{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, }, \
-{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, }, \
-{ KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, }, \
-{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57, }, \
-{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, }, \
-{ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77, }, \
-{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K85, KC_##K86, KC_##K87, }, \
-{ KC_##K90, KC_##K91, KC_NO, KC_##K93, KC_##K94, KC_##K95, KC_NO, KC_##K97, }, \
-{ KC_##KA0, KC_##KA1, KC_##KA2, KC_##KA3, KC_##KA4, KC_##KA5, KC_##KA6, KC_##KA7, } \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37 }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47 }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { K70, K71, K72, K73, K74, K75, K76, K77 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K85, K86, K87 }, \
+ { K90, K91, KC_NO, K93, K94, K95, KC_NO, K97 }, \
+ { KA0, KA1, KA2, KA3, KA4, KA5, KA6, KA7 } \
}
-
-#endif \ No newline at end of file
diff --git a/keyboards/handwired/rs60/README.md b/keyboards/handwired/rs60/README.md
new file mode 100644
index 000000000..07c967e27
--- /dev/null
+++ b/keyboards/handwired/rs60/README.md
@@ -0,0 +1,27 @@
+# rs60: Handwired Slim Preonic Clone
+
+I wanted a preonic layout but with a very low profile. As Jack is still working on the Preonic PCB for Kailh Choc switches, I figured I could try to handwire one myself. It's my first custom keyboard, so I had a lot to learn.
+
+First I designed the case in fusion 360. I wanted to build it using acrylic, constrained myself to standard acrylic sheet thickness.
+
+![](https://imgur.com/NscS7Rd.jpg)
+
+You can download the model [here](https://a360.co/2OqiKLm).
+
+To test my design I 3D printed the parts.
+
+![](https://imgur.com/MSF7zLS.jpg)
+
+The result was encouraging, so I decided to build a prototype out of the printed plates using Kailh Choc brown switches. I tried to make the handwiring job as flat as possible so it can fit in my design.
+
+![](https://i.imgur.com/67yZx0V.jpg)
+![](https://i.imgur.com/ft72Cgj.jpg)
+
+I designed switch plate and the middle plates so that they would be glued together. The middle plate has inserts to attach the bottom plate using m8 screws.
+
+![](https://i.imgur.com/GstTohI.jpg)
+
+The end result is not too bad, but there is a few things I would do differently. Gluing 3D printed plates wasn't a good idea. The switch layer is so thin, that it bends when all the switches are slotted. As a result, the keyboard is not entirely flat. I will replace the bottom plate by a metal one so I get more weight and rigidity.
+
+Even with acrylic, I think I will have the same issue. I might switch to screws + bolts that go all the way through.
+
diff --git a/keyboards/handwired/rs60/config.h b/keyboards/handwired/rs60/config.h
new file mode 100644
index 000000000..371150a79
--- /dev/null
+++ b/keyboards/handwired/rs60/config.h
@@ -0,0 +1,47 @@
+/*
+Copyright 2018 QMK Contributors
+
+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
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x4260
+#define DEVICE_VER 0x0001
+#define MANUFACTURER rs
+#define PRODUCT rs60
+#define DESCRIPTION Preonic clone based on pro micro
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 12
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B5, B6, B4, B2, E6 }
+#define MATRIX_COL_PINS { C6, D4, D0, D1, D2, D3, F4, F5, F6, F7, B1, B3}
+#define UNUSED_PINS { }
+
+#define QMK_ESC_OUTPUT C6
+#define QMK_ESC_INPUT B4
+#define QMK_LED B0
+// #define QMK_SPEAKER C6
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ false \
+)
diff --git a/keyboards/handwired/rs60/keymaps/default/keymap.c b/keyboards/handwired/rs60/keymaps/default/keymap.c
new file mode 100644
index 000000000..9fea769d0
--- /dev/null
+++ b/keyboards/handwired/rs60/keymaps/default/keymap.c
@@ -0,0 +1,207 @@
+/* Copyright 2015-2017 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, \
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
+ _______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL, \
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
+ _______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, \
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT, \
+ _______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT( \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL, \
+ _______, _______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+};
diff --git a/keyboards/handwired/rs60/keymaps/default/readme.md b/keyboards/handwired/rs60/keymaps/default/readme.md
new file mode 100644
index 000000000..e911968dd
--- /dev/null
+++ b/keyboards/handwired/rs60/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default Preonic layout - largely based on the Planck's \ No newline at end of file
diff --git a/keyboards/handwired/rs60/rs60.c b/keyboards/handwired/rs60/rs60.c
new file mode 100644
index 000000000..f748740cb
--- /dev/null
+++ b/keyboards/handwired/rs60/rs60.c
@@ -0,0 +1,18 @@
+/*
+Copyright 2018 QMK Community
+
+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/>.
+*/
+
+#include "rs60.h"
diff --git a/keyboards/handwired/rs60/rs60.h b/keyboards/handwired/rs60/rs60.h
new file mode 100644
index 000000000..f2113f05c
--- /dev/null
+++ b/keyboards/handwired/rs60/rs60.h
@@ -0,0 +1,36 @@
+/*
+Copyright 2018 QMK Community
+
+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 "quantum.h"
+
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \
+}
+
+#define LAYOUT_ortho_5x12 LAYOUT
diff --git a/keyboards/handwired/rs60/rules.mk b/keyboards/handwired/rs60/rules.mk
new file mode 100644
index 000000000..7b4ec69d0
--- /dev/null
+++ b/keyboards/handwired/rs60/rules.mk
@@ -0,0 +1,61 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Bootloader
+BOOTLOADER = qmk-dfu
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+LAYOUTS = ortho_5x12
+
+# Boot Section Size in *bytes*
+#OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Custom backlighting code is used, so this should not be enabled
+AUDIO_ENABLE = no # This can be enabled if a speaker is connected to the expansion port. Not compatible with RGBLIGHT below
+RGBLIGHT_ENABLE = no # This can be enabled if a ws2812 strip is connected to the expansion port.
+
diff --git a/keyboards/handwired/terminus_mini/readme.md b/keyboards/handwired/terminus_mini/readme.md
index 94249d6a9..5f0271bb4 100644
--- a/keyboards/handwired/terminus_mini/readme.md
+++ b/keyboards/handwired/terminus_mini/readme.md
@@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
make handwired/terminus_mini:default
-See [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. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. \ No newline at end of file
diff --git a/keyboards/handwired/traveller/keymaps/default/keymap.c b/keyboards/handwired/traveller/keymaps/default/keymap.c
index 13d889ab8..f7f08268f 100644
--- a/keyboards/handwired/traveller/keymaps/default/keymap.c
+++ b/keyboards/handwired/traveller/keymaps/default/keymap.c
@@ -157,11 +157,8 @@ Right hand nav keys work pretty well chorded with the Right hand Hi Key
const uint16_t PROGMEM fn_actions[] = {
[_QW] = ACTION_LAYER_ON(_QW,ON_RELEASE), // return to QWERTY layer
[_LW] = ACTION_LAYER_TAP_TOGGLE(_LW), // Turn on LW when holding, or tap 3 times to switch
- [_HI] = ACTION_LAYER_TAP_TOGGLE(_HI), // Turn on LW when holding, or tap 3 times to switch
[_NAV] = ACTION_LAYER_TOGGLE(_NAV),
[_FKEYS] = ACTION_LAYER_TOGGLE(_FKEYS),
- [_LWOUT] = ACTION_LAYER_OFF(_LW,ON_RELEASE),
- [_HIOUT] = ACTION_LAYER_OFF(_HI,ON_RELEASE),
// Functions
[RGBLED_TOGGLE] = ACTION_FUNCTION(RGBLED_TOGGLE),
diff --git a/keyboards/handwired/woodpad/keymaps/default/keymap.c b/keyboards/handwired/woodpad/keymaps/default/keymap.c
index 1fa90ba91..70c05fc27 100644
--- a/keyboards/handwired/woodpad/keymaps/default/keymap.c
+++ b/keyboards/handwired/woodpad/keymaps/default/keymap.c
@@ -59,10 +59,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
void numlock_led_on(void) {
PORTF |= (1<<7);
}
diff --git a/keyboards/handwired/xealous/debounce.c b/keyboards/handwired/xealous/debounce.c
new file mode 100644
index 000000000..65a99f27f
--- /dev/null
+++ b/keyboards/handwired/xealous/debounce.c
@@ -0,0 +1,63 @@
+#include <string.h>
+#include "config.h"
+#include "matrix.h"
+#include "timer.h"
+#include "quantum.h"
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+
+//Debouncing counters
+typedef uint8_t debounce_counter_t;
+#define DEBOUNCE_COUNTER_MODULO 250
+#define DEBOUNCE_COUNTER_INACTIVE 251
+
+static debounce_counter_t *debounce_counters;
+
+void debounce_init(uint8_t num_rows)
+{
+ debounce_counters = malloc(num_rows*MATRIX_COLS);
+ memset(debounce_counters, DEBOUNCE_COUNTER_INACTIVE, num_rows*MATRIX_COLS);
+}
+
+void update_debounce_counters(uint8_t num_rows, uint8_t current_time)
+{
+ for (uint8_t row = 0; row < num_rows; row++)
+ {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++)
+ {
+ if (debounce_counters[row*MATRIX_COLS + col] != DEBOUNCE_COUNTER_INACTIVE)
+ {
+ if (TIMER_DIFF(current_time, debounce_counters[row*MATRIX_COLS + col], DEBOUNCE_COUNTER_MODULO) >= DEBOUNCING_DELAY) {
+ debounce_counters[row*MATRIX_COLS + col] = DEBOUNCE_COUNTER_INACTIVE;
+ }
+ }
+ }
+ }
+}
+
+void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time)
+{
+ for (uint8_t row = 0; row < num_rows; row++)
+ {
+ matrix_row_t delta = raw[row] ^ cooked[row];
+
+ for (uint8_t col = 0; col < MATRIX_COLS; col++)
+ {
+ if (debounce_counters[row*MATRIX_COLS + col] == DEBOUNCE_COUNTER_INACTIVE && (delta & (1<<col)))
+ {
+ debounce_counters[row*MATRIX_COLS + col] = current_time;
+ cooked[row] ^= (1 << col);
+ }
+ }
+ }
+}
+
+void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed)
+{
+ uint8_t current_time = timer_read() % DEBOUNCE_COUNTER_MODULO;
+
+ update_debounce_counters(num_rows, current_time);
+ transfer_matrix_values(raw, cooked, num_rows, current_time);
+} \ No newline at end of file
diff --git a/keyboards/handwired/xealous/rules.mk b/keyboards/handwired/xealous/rules.mk
index eebd11d86..07e1c875e 100644
--- a/keyboards/handwired/xealous/rules.mk
+++ b/keyboards/handwired/xealous/rules.mk
@@ -1,4 +1,5 @@
-SRC += matrix_scanrate.c matrix.c
+#SRC += matrix_scanrate.c matrix.c
+SRC += debounce.c
# MCU name
MCU = atmega32u4
@@ -37,7 +38,7 @@ F_USB = $(F_CPU)
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
-# different sizes, comment this out, and the correct address will be loaded
+# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
BOOTLOADER = caterina
@@ -59,14 +60,15 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SPLIT_KEYBOARD = yes # Use shared split_common code
SUBPROJECT_rev1 = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-CUSTOM_MATRIX = yes
+CUSTOM_MATRIX = no
+CUSTOM_DEBOUNCE = yes
LAYOUTS = split60