浏览代码

Merge branch 'master' into makefile_overhaul

Fred Sundvik 9 年之前
父节点
当前提交
523dff3005
共有 55 个文件被更改,包括 2856 次插入336 次删除
  1. 23 9
      keyboards/atomic/keymaps/pvc/keymap.c
  2. 二进制
      keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png
  3. 二进制
      keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png
  4. 二进制
      keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png
  5. 二进制
      keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png
  6. 二进制
      keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png
  7. 94 0
      keyboards/atreus/keymaps/replicaJunction/config.h
  8. 107 0
      keyboards/atreus/keymaps/replicaJunction/keymap.c
  9. 57 0
      keyboards/atreus/keymaps/replicaJunction/readme.md
  10. 69 68
      keyboards/gh60/rules.mk
  11. 16 0
      keyboards/jd45/keymaps/jeebak/config.h
  12. 423 0
      keyboards/jd45/keymaps/jeebak/keymap.c
  13. 129 0
      keyboards/jd45/keymaps/jeebak/readme.md
  14. 1 1
      keyboards/kc60/Makefile
  15. 74 3
      keyboards/kc60/kc60.h
  16. 103 0
      keyboards/kc60/keymaps/dbroqua/keymap.c
  17. 11 0
      keyboards/kc60/keymaps/dbroqua/readme.md
  18. 1 1
      keyboards/kc60/keymaps/default/keymap.c
  19. 3 3
      keyboards/kc60/keymaps/sgoodwin/keymap.c
  20. 4 4
      keyboards/kc60/keymaps/stanleylai/keymap.c
  21. 2 2
      keyboards/kc60/keymaps/wigguno/keymap.c
  22. 5 5
      keyboards/kc60/keymaps/workman-dead/keymap.c
  23. 3 3
      keyboards/kc60/keymaps/ws2812/keymap.c
  24. 31 0
      keyboards/kc60/led.c
  25. 7 0
      keyboards/kc60/readme.md
  26. 1 1
      keyboards/kitten_paw/keymaps/default/keymap.c
  27. 31 0
      keyboards/kitten_paw/keymaps/ickerwx/config.h
  28. 242 0
      keyboards/kitten_paw/keymaps/ickerwx/keymap.c
  29. 18 0
      keyboards/kitten_paw/keymaps/ickerwx/readme.md
  30. 16 3
      keyboards/kitten_paw/kitten_paw.c
  31. 11 0
      keyboards/kitten_paw/kitten_paw.h
  32. 0 47
      keyboards/kitten_paw/led.c
  33. 2 1
      keyboards/kitten_paw/matrix.c
  34. 1 1
      keyboards/kitten_paw/rules.mk
  35. 32 32
      keyboards/lets_split/pro_micro.h
  36. 59 139
      keyboards/planck/keymaps/dbroqua/keymap.c
  37. 二进制
      keyboards/planck/keymaps/dbroqua/layout.png
  38. 14 0
      keyboards/planck/keymaps/dbroqua/readme.md
  39. 10 10
      keyboards/planck/keymaps/pvc/keymap.c
  40. 76 0
      keyboards/vision_division/Makefile
  41. 84 0
      keyboards/vision_division/Potential Layouts.txt
  42. 139 0
      keyboards/vision_division/config.h
  43. 21 0
      keyboards/vision_division/keymaps/default/Makefile
  44. 59 0
      keyboards/vision_division/keymaps/default/config.h
  45. 630 0
      keyboards/vision_division/keymaps/default/keymap.c
  46. 1 0
      keyboards/vision_division/keymaps/default/readme.md
  47. 167 0
      keyboards/vision_division/matrix_types.h
  48. 28 0
      keyboards/vision_division/readme.md
  49. 28 0
      keyboards/vision_division/vision_division.c
  50. 6 0
      keyboards/vision_division/vision_division.h
  51. 1 0
      lib/googletest
  52. 9 0
      quantum/config_common.h
  53. 2 0
      quantum/process_keycode/process_unicode.c
  54. 4 2
      quantum/process_keycode/process_unicode.h
  55. 1 1
      readme.md

+ 23 - 9
keyboards/atomic/keymaps/pvc/keymap.c

@@ -154,7 +154,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 /* UPPER
  * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
- * | PRINT  | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | /      | *      |        | NUM LK | SCR LK | XXXXXX . PAUSE  |
+ * | PRINT  | BR TOG | BR SP+ | BR SP- | BR RST | XXXXXX | XXXXXX | NUM LK | /      | *      |        | NUM LK | SCR LK | XXXXXX . PAUSE  |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
  * |        | F1     | F2     | F3     | F4     |        |        | 7      | 8      | 9      | -      |        |        |        | INS    |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
@@ -180,9 +180,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
  * |        | $      | {      | [      | (      | %      | #      | )      | ]      | }      | @      |        |        |        | INS    |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
- * |        | ^      | *      | +      | -      | ;      | :      | _      | '      | "      | `      |        | XXXXXX .        | HOME   |
+ * |        | ^      | *      | +      | -      | /      | \      | _      | '      | "      | `      |        | XXXXXX .        | HOME   |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
- * |        | |      | &      | !      | ~      | /      | \      | =      | <      | >      | ?      | XXXXXX .        |        | END    |
+ * |        | |      | &      | !      | ~      | ;      | :      | =      | <      | >      | ?      | XXXXXX .        |        | END    |
  * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
  * |        |        |        |        |        |                 |        |        |        |        |        |        |        |        |
  * '--------------------------------------------------------------------------------------------------------------------------------------'
@@ -191,16 +191,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [LAYER_LOWER]        = { // LOWER
   { _______, 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_DLR,  KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT,   _______, _______, _______, KC_INS   },
-  { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SCLN, KC_COLN, KC_UNDS, KC_QUOT, KC_DQT,  KC_GRV,  _______, ________________, KC_HOME  },
-  { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SLSH, KC_BSLS, KC_EQL,  KC_LT,   KC_GT,   KC_QUES, ________________, _______, KC_END   },
+  { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT,  KC_GRV,  _______, ________________, KC_HOME  },
+  { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL,  KC_LT,   KC_GT,   KC_QUES, ________________, _______, KC_END   },
   { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______  },
  },
 
+/* FUNCTION
+ * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
+ * | NUM LK |        |        |        |        |        |        |        |        |        |        |        |        | XXXXXX .        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | SCR LK | F13    | F14    | F15    | F16    |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
+ * | CAP LK | F17    | F18    | F19    | F20    |        |        |        |        |        |        |        | XXXXXX .        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
+ * |        | F21    | F22    | F23    | F24    |        |        |        |        |        |        | XXXXXX .        | VOL UP | MUTE   |
+ * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * |        |        |        |        |        | PLAY/PAUSE      |        |        |        |        |        | PTRACK | VOL DN | NTRACK |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
  [LAYER_FUNCTION]     = { // FUNCTION
-  { KC_NLCK, 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_SLCK, KC_F13,  KC_F14,  KC_F15,  KC_F16,  KC_F17,  KC_F18,  KC_F19,  KC_F20,  KC_F21,  KC_F22,  KC_F23,  KC_F24,  _______, KC_PAUS  },
-  { KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_PSCR  },
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_VOLU, KC_MUTE  },
+  { KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX  },
+  { KC_SLCK, KC_F13,  KC_F14,  KC_F15,  KC_F16,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX  },
+  { KC_CAPS, KC_F17,  KC_F18,  KC_F19,  KC_F20,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXX  },
+  { _______, KC_F21,  KC_F22,  KC_F23,  KC_F24,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_VOLU, KC_MUTE  },
   { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT  },
  },
 

二进制
keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png


二进制
keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png


二进制
keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png


二进制
keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png


二进制
keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png


+ 94 - 0
keyboards/atreus/keymaps/replicaJunction/config.h

@@ -0,0 +1,94 @@
+/*
+Config file - Atreus QMK with replicaJunction layout
+
+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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Technomancy
+#define PRODUCT         Atreus
+#define DESCRIPTION     q.m.k. keyboard firmware for Atreus
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 11
+
+// Change this to how you wired your keyboard
+// COLS: Left to right, ROWS: Top to bottom
+#if defined(ATREUS_ASTAR)
+#   define MATRIX_ROW_PINS { D0, D1, D3, D2 }
+#   define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
+#   define UNUSED_PINS
+#elif defined(ATREUS_TEENSY2)
+#   define MATRIX_ROW_PINS { D0, D1, D2, D3 }
+#   define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 }
+#   define UNUSED_PINS
+#endif
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+// Default: 5
+#define DEBOUNCING_DELAY 6
+
+// I don't have any locking keys, so I don't need these 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
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* Prevent modifiers from sticking when switching layers */
+#define PREVENT_STUCK_MODIFIERS
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif

+ 107 - 0
keyboards/atreus/keymaps/replicaJunction/keymap.c

@@ -0,0 +1,107 @@
+/*
+ * Keyboard: Atreus
+ * Keymap:   replicaJunction
+ * Version:  0.3
+ *
+ * This keymap is designed to complement my Ergodox keyboard layout, found in keyboards/ergodox_ez.
+ * The Atreus keyboard is a 40% board whose design was heavily influenced by the Ergodox. I now
+ * have both keyboards, so I've designed these layouts in an effort to make switching between the
+ * two as easy as possible.
+ *
+ * Clearly, the Atreus is the limiting factor in this equation, so I've taken heavy advantage of
+ * function and dual-role keys.
+ *
+ * The default key layout in this keymap is Colemak-ModDH. Information on that layout can be found
+ * here: https://colemakmods.github.io/mod-dh/
+ */
+
+#include "atreus.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+// Note that whatever is set as layer 0 will be the default layer of the keyboard.
+
+#define _CO 0 // Colemak
+#define _QW 1 // QWERTY
+#define _GA 2 // Gaming
+#define _EX 3 // Extend
+#define _NU 4 // Numpad
+#define _FN 5 // Function
+
+// Some quick aliases, just to make it look pretty
+#define _______ KC_TRNS
+#define KCX_CA  LCTL(KC_LALT)
+#define KCX_CS  LCTL(KC_LSFT)
+#define KCX_CSA LCTL(LSFT(KC_LALT))
+#define KCX_LST LSFT(KC_TAB)
+#define KX_COPY LCTL(KC_C)
+#define KX_CUT  LCTL(KC_X)
+#define KX_PAST LCTL(KC_V)
+#define KX_UNDO LCTL(KC_Z)
+
+; // This doesn't do anything. It's just for VSCode because its syntax highlighting is weird for the above #define statements.
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_CO] = KEYMAP(
+  KC_Q,        KC_W,    KC_F,    KC_P,    KC_B,                                   KC_J,            KC_L,    KC_U,    KC_Y,    KC_SCLN,
+  KC_A,        KC_R,    KC_S,    KC_T,    KC_G,                                   KC_M,            KC_N,    KC_E,    KC_I,    KC_O,
+  SFT_T(KC_Z), KC_X,    KC_C,    KC_D,    KC_V,                                   KC_K,            KC_H,    KC_COMM, KC_DOT,  SFT_T(KC_SLSH),
+  KC_ESC,      KC_LGUI, KC_TAB,  KC_LALT, KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT),  LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
+),
+
+[_QW] = KEYMAP( /* Qwerty */
+  KC_Q,        KC_W,    KC_E,    KC_R,    KC_T,                                  KC_Y,            KC_U,    KC_I,    KC_O,    KC_P,
+  KC_A,        KC_S,    KC_D,    KC_F,    KC_G,                                  KC_H,            KC_J,    KC_K,    KC_L,    KC_SCLN,
+  SFT_T(KC_Z), KC_X,    KC_C,    KC_V,    KC_B,                                  KC_N,            KC_M,    KC_COMM, KC_DOT,  SFT_T(KC_SLSH),
+  KC_ESC,      KC_LGUI, KC_TAB,  KC_LALT, KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
+),
+
+[_EX] = KEYMAP( /* Extend */
+  KC_CAPS, _______, _______, _______, _______,                   KC_PGUP, KC_HOME, KC_UP,   KC_END,  KC_DEL,
+  _______, KC_LGUI, KC_LALT, KC_LCTL, _______,                   KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC,
+  _______, KX_CUT,  KX_COPY, _______, KX_PAST,                   _______, KC_TAB,  KCX_LST, _______, KC_INSERT,
+  _______, _______, _______, _______, _______, _______, _______, KC_SPC,  _______, _______, _______, KC_PSCR
+),
+
+[_NU] = KEYMAP( /* Numbers and symbols */
+  KC_EXLM, KC_AT,   KC_LCBR, KC_RCBR, KC_AMPR,                    KC_SLSH, KC_7,    KC_8,   KC_9,   KC_ASTR,
+  KC_HASH, KC_DLR,  KC_LPRN, KC_RPRN, KC_TILD,                    KC_PIPE, KC_4,    KC_5,   KC_6,   KC_MINS,
+  KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV,                     KC_BSLS, KC_1,    KC_2,   KC_3,   KC_PLUS,
+  _______, TG(_GA), _______, MO(_FN), _______, _______,  _______, _______, KC_0,    KC_DOT, KC_EQL, _______
+),
+
+[_FN] = KEYMAP( /* Functions */
+  KC_DEL,  KC_HOME, KC_UP,   KC_END,  KC_PGUP,                   _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,
+  KC_BSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN,                   _______, KC_F4,   KC_F5,   KC_F6,   KC_F11,
+  _______, KC_VOLU, KC_MUTE, KC_VOLD, KC_MPLY,                   _______, KC_F1,   KC_F2,   KC_F3,   KC_F12,
+  _______, _______, _______, _______, KC_MSTP, _______, _______, _______, KC_NO,   DF(_CO), DF(_QW), RESET
+),
+
+[_GA] = KEYMAP( /* Gaming */
+  _______, _______, _______, _______, _______,                   _______, KC_WH_U, KC_MS_U, KC_WH_D, _______,
+  _______, _______, _______, _______, _______,                   _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,
+  KC_Z,    _______, _______, _______, _______,                   KC_BTN3, _______, KC_MS_D, _______, _______,
+  _______, TG(_GA), _______, KC_LSFT, KC_SPC,  KC_BSPC, KC_BTN2, KC_BTN1, _______, _______, _______, _______
+)};
+
+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;
+};

文件差异内容过多而无法显示
+ 57 - 0
keyboards/atreus/keymaps/replicaJunction/readme.md


+ 69 - 68
keyboards/gh60/rules.mk

@@ -1,68 +1,69 @@
-
-
-# MCU name
-#MCU = at90usb1287
-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
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-#   comment out to disable the 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
-KEYBOARD_LOCK_ENABLE ?= yes	# Allow locking of keyboard via magic key
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE ?= yes	# Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes			# USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-# BACKLIGHT_ENABLE ?= yes	# Enable keyboard backlight functionality
-# MIDI_ENABLE ?= YES			# MIDI controls
-# UNICODE_ENABLE ?= YES		# Unicode
-# BLUETOOTH_ENABLE ?= yes	# Enable Bluetooth with the Adafruit EZ-Key HID
+# project specific files
+SRC = led.c
+
+# MCU name
+#MCU = at90usb1287
+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
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the 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
+KEYBOARD_LOCK_ENABLE ?= yes	# Allow locking of keyboard via magic key
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes	# Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes			# USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+# BACKLIGHT_ENABLE ?= yes	# Enable keyboard backlight functionality
+# MIDI_ENABLE ?= YES			# MIDI controls
+# UNICODE_ENABLE ?= YES		# Unicode
+# BLUETOOTH_ENABLE ?= yes	# Enable Bluetooth with the Adafruit EZ-Key HID

+ 16 - 0
keyboards/jd45/keymaps/jeebak/config.h

@@ -0,0 +1,16 @@
+#include "../../config.h"
+
+/**
+ *JD45 keymap definition macro
+ */
+#define KEYMAP_JD45( \
+    K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, \
+    K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, \
+    K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, \
+    K38, K39, K40, K41, K42, K43, K44, K45, K46, K47 \
+) { \
+    { K01,   K02,   K03,   K04,   K05,   K06,   K07,   K08,   K09,   K10,   K11,   K12,   K13   }, \
+    { K14,   K15,   K16,   K17,   K18,   K19,   K20,   K21,   K22,   K23,   K24,   K25,   KC_NO }, \
+    { K26,   K27,   K28,   K29,   K30,   K31,   K32,   K33,   K34,   K35,   K36,   K37,   KC_NO }, \
+    { K38,   K39,   K40,   K41,   K42, KC_NO,   K43, KC_NO,   K44,   K45,   K46,   K47,   KC_NO }  \
+}

+ 423 - 0
keyboards/jd45/keymaps/jeebak/keymap.c

@@ -0,0 +1,423 @@
+#include "jd45.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _TOUCHCURSOR 6
+#define _MOUSECURSOR 7
+#define _ADJUST 16
+
+// Keycodes
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  PLOVER,
+  LOWER,
+  RAISE,
+  BACKLIT,
+  EXT_PLV
+};
+
+enum macro_keycodes {
+  KC_ALT_TAB,
+  KC_CMD_TAB,
+  KC_CTL_TAB,
+  KC_CMD_SLSH,
+  KC_AG_FIND,
+  KC_AG_AGAIN,
+  KC_AG_UNDO,
+  KC_AG_CUT,
+  KC_AG_COPY,
+  KC_AG_PASTE,
+  KC_AG_DESK_L,
+  KC_AG_DESK_R,
+  KC_AG_TAB_C,
+  KC_AG_TAB_N,
+  KC_AG_TAB_R,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Custom macros
+#define CTL_ESC     CTL_T(KC_ESC)               // Tap for Esc, hold for Ctrl
+#define SFT_ENT     SFT_T(KC_ENT)               // Tap for Enter, hold for Shift
+#define HPR_TAB     ALL_T(KC_TAB)               // Tap for Tab, hold for Hyper
+#define GUI_SEM     GUI_T(KC_SCLN)              // Tap for Semicolon, hold for GUI
+#define ALT_QUO     ALT_T(KC_QUOT)              // Tap for Quote, hold for Alt
+// Requires KC_TRNS/_______ for the trigger key in the destination layer
+#define LT_TC       LT(_TOUCHCURSOR, KC_SPC)    // L-ayer T-ap T-ouch C-ursor
+#define LT_MC(kc)   LT(_MOUSECURSOR, kc)        // L-ayer T-ap M-ouse C-ursor
+#define ALT_TAB     M(KC_ALT_TAB)               // Macro for Alt-Tab
+#define CMD_TAB     M(KC_CMD_TAB)               // Macro for Cmd-Tab
+#define CTL_TAB     M(KC_CTL_TAB)               // Macro for Ctl-Tab
+#define CMD_SLSH    M(KC_CMD_SLSH)              // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility)
+#define AG_FIND     M(KC_AG_FIND)               // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings
+#define AG_AGAIN    M(KC_AG_AGAIN)
+#define AG_UNDO     M(KC_AG_UNDO)
+#define AG_CUT      M(KC_AG_CUT)
+#define AG_COPY     M(KC_AG_COPY)
+#define AG_PASTE    M(KC_AG_PASTE)
+#define AG_D_L      M(KC_AG_DESK_L)             // For Virtual Desktop Switching: Left, and
+#define AG_D_R      M(KC_AG_DESK_R)             //                                Right
+#define AG_T_C      M(KC_AG_TAB_C)              // For Chrome, etc. Tab Close,
+#define AG_T_N      M(KC_AG_TAB_N)              //                  Tab New, and
+#define AG_T_R      M(KC_AG_TAB_R)              //                  Tab Reopen Closed
+
+/* Qwerty
+ *
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |Hyper/Tab|   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | Ctrl/Esc |   A  |   S  | MC/D |   F  |   G  |   H  |   J  |   K  |   L  |GUI/; |   Alt/"    |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   Shift   |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |  Sft/Ent  |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |   RGUI |  Alt  |  GUI  | Lower | TC/Space | TC/Space |  Raise  |  Vol-  |  Vol+  |   Play   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QWERTY] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    HPR_TAB,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, KC_BSPC, KC_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    CTL_ESC ,   KC_A, KC_S,LT_MC(KC_D),    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, GUI_SEM,    ALT_QUO     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    KC_LSFT  ,   KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,    SFT_ENT    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    KC_RGUI  ,  KC_LALT  ,  KC_LGUI  ,   LOWER   ,   LT_TC   ,   LT_TC   ,    RAISE  ,  KC_VOLD  ,  KC_VOLU  , KC_MPLY),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Colemak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |Hyper/Tab|   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | Ctrl/Esc |   A  |   R  | MC/S |   T  |   D  |   H  |   N  |   E  |   I  |   O  |    "       |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift     |   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |  Sft/Ent  |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |   RGUI |  Alt  |  GUI  | Lower | TC/Space | TC/Space |  Raise  |  Vol-  |  Vol+  |   Play   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_COLEMAK] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    HPR_TAB,   KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y, KC_SCLN, KC_BSPC, KC_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    CTL_ESC ,   KC_A, KC_R,LT_MC(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,    SFT_ENT    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    KC_RGUI  ,  KC_LALT  ,  KC_LGUI  ,   LOWER   ,   LT_TC   ,   LT_TC   ,    RAISE  ,  KC_VOLD  ,  KC_VOLU  , KC_MPLY),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Dvorak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |Hyper/Tab|   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | Ctrl/Esc |   A  |   O  | MC/E |   U  |   I  |   D  |   H  |   T  |   N  |   S  |    /       |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift     |   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |  Sft/Ent  |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |   RGUI |  Alt  |  GUI  | Lower | TC/Space | TC/Space |  Raise  |  Vol-  |  Vol+  |   Play   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_DVORAK] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    HPR_TAB,KC_QUOT, KC_COMM,  KC_DOT,    KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L, KC_BSPC, KC_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    CTL_ESC ,   KC_A,    KC_O,LT_MC(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,    SFT_ENT    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    KC_RGUI  ,  KC_LALT  ,  KC_LGUI  ,   LOWER   ,   LT_TC   ,   LT_TC   ,    RAISE  ,  KC_VOLD  ,  KC_VOLU  , KC_MPLY),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Lower
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |   ~     |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |   [      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |   "|"      |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   ]       |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |   -  |   =  |   [  |   ]  |    \      |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Brite  |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_LOWER] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    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_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    KC_LBRC ,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR,    KC_PIPE     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    KC_RBRC  ,  KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11,  KC_F12, KC_MINS,  KC_EQL, KC_LBRC, KC_RBRC,    KC_BSLS    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    BACKLIT  ,    _______,    _______,    _______,  _______  ,  _______  ,    _______,    KC_MPRV,    KC_MNXT, KC_MUTE),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Raise
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |   0     |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |   $      |   4  |   5  |   6  |   .  |   +  |   .  |   4  |   5  |   6  |   *  |   "|"      |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   =       |   7  |   8  |   9  |   0  |   -  |   .  |   1  |   2  |   3  |   /  |    \      |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Brite  |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_RAISE] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    KC_0   ,   KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_BSPC, KC_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    KC_DLR  ,   KC_4,    KC_5,    KC_6,  KC_DOT, KC_PLUS,  KC_DOT,    KC_4,    KC_5,    KC_6, KC_ASTR,    KC_PIPE     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    KC_EQL   ,   KC_7,    KC_8,    KC_9,    KC_0, KC_MINS,  KC_DOT,    KC_1,    KC_2,    KC_3, KC_SLSH,    KC_BSLS    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    BACKLIT  ,    _______,    _______,    _______,  _______  ,  _______  ,    _______,    KC_MPRV,    KC_MNXT, KC_MUTE),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * | AltTab  |CmdTab|CtlTab| GUI  |Shift |  ~   |Insert| Home |  Up  | End  | Bksp |      |      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |          | Alt  |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L|  Desk_R    |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           | Undo | Cut  | Copy |Paste |  `   | PgDn | Del  |Tab_N |Tab_R |iTerm2|           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |        |        |          |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ *
+ * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't
+ * seem to work on Mac. Presumably they'll work under Windows.
+ */
+
+[_TOUCHCURSOR] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    ALT_TAB,CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD,  KC_INS, KC_HOME,   KC_UP,  KC_END, KC_BSPC, _______, _______,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    _______ ,KC_LALT,  KC_SPC,  AG_T_C, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT,  AG_D_L,    AG_D_R      ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    _______  ,AG_UNDO,  AG_CUT, AG_COPY,AG_PASTE,  KC_GRV, KC_PGDN,  KC_DEL,  AG_T_N,  AG_T_R,CMD_SLSH,    _______    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    _______  ,    _______,    _______,    _______, _______   , _______   ,    _______,    _______,    _______, _______),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Mouse Layer
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |         |      |ACCL0 |      |      |      |      |WHL_L |  Up  |WHL_R | BTN2 |      |      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |          |ACCL2 | BTN2 |      | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 |   BTN5     |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           |      |      |      | BTN3 |      |WHL_Dn| BTN1 |      |      | BTN3 |           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |        |        |          |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+
+[_MOUSECURSOR] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    _______,_______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______, _______,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    _______ ,KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4,    KC_BTN5     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    _______  ,_______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3,    _______    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    _______  ,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______, _______),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Plover layer (http://opensteno.org)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |      #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |         |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |     D       |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | TogOut    |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |    Z      |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Exit   |       |   A   |   O   |          |          |    E    |   U    |        |          |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+
+[_PLOVER] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    KC_1   ,   KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,  KC_1  ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    XXXXXXX ,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    XXXXXXX  ,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN,    KC_QUOT    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    EXT_PLV  ,    XXXXXXX,       KC_C,       KC_V,  XXXXXXX  ,  XXXXXXX  ,       KC_N,       KC_M,    XXXXXXX, XXXXXXX),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Adjust (Lower + Raise)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |         |      |      |      |      |      |      |      |      |      |      |      | Del  |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |          |      |      |      |      |AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|            |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           |      |      |      |      |     |       |      |      |      |      |           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |        |        |  Reset   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_ADJUST] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP,  QWERTY, COLEMAK,  DVORAK,  PLOVER,    _______     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    _______  ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    _______  ,    _______,    _______,    _______,  _______  ,  _______  ,    _______,    _______,    _______,  RESET)
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        default_layer_set(1UL<<_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        default_layer_set(1UL<<_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;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (record->event.pressed) {
+        layer_off(_RAISE);
+        layer_off(_LOWER);
+        layer_off(_ADJUST);
+        layer_on(_PLOVER);
+        if (!eeconfig_is_enabled()) {
+            eeconfig_init();
+        }
+        keymap_config.raw = eeconfig_read_keymap();
+        keymap_config.nkro = 1;
+        eeconfig_update_keymap(keymap_config.raw);
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+/*
+ * Macro definition
+ */
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    if (!eeconfig_is_enabled()) {
+      eeconfig_init();
+    }
+
+    bool use_cmd = true;    // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc.
+    // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in:
+    // quantum/quantum.c
+    if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) {
+      use_cmd = false;      // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc.
+    }
+
+    switch (id) {
+      case KC_ALT_TAB:
+        if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT),  D(TAB), END ) : MACRO( U(TAB), END )); }
+        else        { return (record->event.pressed ? MACRO( D(LGUI),  D(TAB), END ) : MACRO( U(TAB), END )); }
+      case KC_CMD_TAB:
+        if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI),  D(TAB), END ) : MACRO( U(TAB), END )); }
+        else        { return (record->event.pressed ? MACRO( D(LALT),  D(TAB), END ) : MACRO( U(TAB), END )); }
+
+      case KC_CTL_TAB:
+        return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END ));
+      case KC_CMD_SLSH:
+        return (record->event.pressed ? MACRO( D(LGUI),  D(SLSH),END ) : MACRO( U(SLSH),END ));
+
+      case KC_AG_FIND:
+        return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END );
+      case KC_AG_AGAIN:
+        return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END );
+      case KC_AG_UNDO:
+        return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END );
+      case KC_AG_CUT:
+        return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END );
+      case KC_AG_COPY:
+        return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END );
+      case KC_AG_PASTE:
+        return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END );
+
+      case KC_AG_DESK_L:
+        return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END );
+      case KC_AG_DESK_R:
+        return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END );
+
+      case KC_AG_TAB_C:
+        return use_cmd ? MACRODOWN( D(LGUI),            T(W), END ) : MACRODOWN( D(LCTRL),            T(W), END );
+      case KC_AG_TAB_N:
+        return use_cmd ? MACRODOWN( D(LGUI),            T(T), END ) : MACRODOWN( D(LCTRL),            T(T), END );
+      case KC_AG_TAB_R:
+        return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END );
+    }
+
+    return MACRO_NONE;
+}

+ 129 - 0
keyboards/jd45/keymaps/jeebak/readme.md

@@ -0,0 +1,129 @@
+jeebak's JD45 layout
+=======================
+NOTE: This is a port of jeebak's planck layout, for jd45.
+
+This WIP keymap attempts to minimize fingers straying away from the home row.
+To aid in this endeavor, when additional modifyer keys to switch layers are
+needed, they will be mapped to home row keys. The `keymap.c` file will contain
+the exact changes. The diagrams in this README shows the highlights of the
+changes from the default mappings.
+
+I also decided to change all calls to `persistant_default_layer_set()` to
+`default_layer_set()` since this is my personal perference.
+
+## Macros
+```
+#define ALT_TAB     M(KC_ALT_TAB)
+```
+
+## Base Layers (Qwerty/Colemak/Dvorak)
+These base layers are mostly the same as the default mappings. The interesting
+changes are shown below.
+
+- The `Ctrl/Esc`, will emit an `Escape` when tapped, and act as a `Control` key when held,
+- `GUI/;` as `;` and `GUI`,
+- `Alt/"` as `"` and `Alt`,
+- `Sft/Ent` as `Enter` and `Shift`, and
+- `Hyper/Tab` as `Tab` and `Hyper`
+
+A `TODO` item is to see if it can also act as a `CapsLock` when double-tapped.
+The arrow keys, which have been moved to the
+[TouchCursor](http://martin-stone.github.io/touchcursor/) layer, have been
+replaced with the Media keys as shown. The `MC/kc` key activates the
+`MouseCursor` layer when held, and emits the corresponding `kc` for its layer,
+when tapped.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+  |Hyper/Tab|   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  |   [  | Bksp |
+  |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+  | Ctrl/Esc |   A  |   S  | MC/D |   F  |   G  |   H  |   J  |   K  |   L  |GUI/; |   Alt/"    |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |   Shift   |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |  Sft/Ent  |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  |   RGUI |  Alt  |  GUI  | Lower | TC/Space | TC/Space |  Raise  |  Vol-  |  Vol+  |   Play   |
+   `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```
+
+## Lower Layer (Symbols and Function Keys)
+The symbols and functions keys are essentially the same as the default mapping.
+The most notable changes are that the symbol keys from the `RAISE` layer have
+been moved here. The remaining Media keys replace those that are now on the
+base layers. The `BACKLIT` key has also been moved here.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+  |   ~     |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |      | Bksp |
+  |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+  |   [      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |   "|"      |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |   ]       |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |   -  |   =  |   [  |   ]  |    \      |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  | Brite  |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
+   `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```
+
+## Raise Layer (Numbers and Arithmetic Operators)
+All of the numbers and arithmetic operators are available on this layer. Some
+keys are duplicated for the convenience of their positions. The `0` and `$`
+keys at the far left are for quick access to beginning and end of line in vim.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+  |   0     |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |      | Bksp |
+  |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+  |   $      |   4  |   5  |   6  |   .  |   +  |   .  |   4  |   5  |   6  |   *  |   "|"      |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |   =       |   7  |   8  |   9  |   0  |   -  |   .  |   1  |   2  |   3  |   /  |    \      |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  | Brite  |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
+   `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```
+
+## TouchCursor layer plus personal customizations
+[TouchCursor](http://martin-stone.github.io/touchcursor/) uses the `Space` key
+as the modifier, with the `IJKL` home row keys representing the inverted-T of
+the arrow keys. All of the default TouchCursor keymappings for the right hand
+are represented below. My personalizations include all of the keys shown for
+the left hand. Having the `Alt` and `Shift` keys (as well as the `Control` key
+from the base layers) readily accessible from the home row allows quick word
+jumps and highlighting when used in conjunction with the arrow keys. The
+`Alt-Tab` macro is not only useful under Windows, but also under Mac when used
+with alternative switchers like [HyperSwitch](https://bahoom.com/hyperswitch).
+The `Cmd-Tab` and `Ctrl-Tab` sequences are duplicated for easy access while in
+this layer. The `KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and `KC_AGAIN`
+keycodes do not seem to work. There are macros in place that'll "automatically"
+choose the correct version (`Cmd-Tab` vs. `Alt-Tab`, `Cmd-C` vs. `Ctrl-C`,
+etc.) depending on which layout you've currently selected (`AG_NORM` or
+`AG_SWAP`) in the `_ADJUST` layer. The `Desk_L` and `Desk_R` macros are what I
+use to switch between Virtual Desktops Left/Right. The `Tab_C`, `Tab_N` and
+`Tab_R` are for "Close Tab," "New Tab" and "Reopen Closed Tab" for apps such as
+Google Chrome.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+  | AltTab  |CmdTab|CtlTab| GUI  |Shift |  ~   |Insert| Home |  Up  | End  | Bksp |      |      |
+  |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+  |          | Alt  |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L|  Desk_R    |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |           | Undo | Cut  | Copy |Paste |  `   | PgDn | Del  |Tab_N |Tab_R |iTerm2|           |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  |        |       |       |       |          |          |         |        |        |          |
+   `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```
+
+## Mouse Layer
+The Mouse layer, closely mimics the layout/behaviour of the TouchCursor layer.
+The `D` key (on QWERTY) is used to activate this layer. All 16 keycodes for the
+mouse from the `doc/keycode.txt` file are represented, and logically located,
+IMHO. The left and right click buttons are duplicated; on the right hand side,
+for a quick click here and there, and again on the left hand side for when the
+buttons need to be held for dragging things or highlighting text, thus allowing
+the right hand to be free to use the up/down/left/right actions.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+  |         |      |ACCL0 |      |      |      |      |WHL_L |  Up  |WHL_R | BTN2 |      |      |
+  |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+  |          |ACCL2 | BTN2 |      | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 |   BTN5     |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |           |      |      |      | BTN3 |      |WHL_Dn| BTN1 |      |      | BTN3 |           |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  |        |       |       |       |          |          |         |        |        |          |
+   `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```

+ 1 - 1
keyboards/kc60/Makefile

@@ -1,3 +1,3 @@
 ifndef MAKEFILE_INCLUDED
 	include ../../Makefile
-endif
+endif

+ 74 - 3
keyboards/kc60/kc60.h

@@ -3,21 +3,92 @@
 
 #include "quantum.h"
 
+// K49 key is for the key at row 1 and column 15 when you split the backspace in 2 1U key.
+
 // 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 multi-dimensional array
+/*
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D | K49 |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10    | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D    |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20     | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C         |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30       | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3D       | K3C |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40   | K41   | K42   | K45                             | K4A   | K4B   | K4C   | K4D   |
+ * `-----------------------------------------------------------------------------------------'
+ */
 #define KEYMAP( \
     K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
     K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
     K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
     K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
-    K40, K41, K42,           K45,                     K4A, K4B, K4C, K4D  \
+    K40, K41, K42,           K45,                K49, K4A, K4B, K4C, K4D  \
     ) { \
-  {  K00,  K01,  K02,  K03,    K04,    K05,  K06,    K07,    K08,    K09,  K0A,  K0B,  K0C,  K0D  },  \
+  {  K00,  K01,  K02,  K03,    K04,    K05,  K06,    K07,    K08,    K09,  K0A,  K0B,  K0C,  K0D,  },  \
   {  K10,  K11,  K12,  K13,    K14,    K15,  K16,    K17,    K18,    K19,  K1A,  K1B,  K1C,  K1D  },  \
   {  K20,  K21,  K22,  K23,    K24,    K25,  K26,    K27,    K28,    K29,  K2A,  K2B,  K2C,  K2D  },  \
   {  K30,  K31,  K32,  K33,    K34,    K35,  K36,    K37,    K38,    K39,  K3A,  K3B,  K3C,  K3D  },  \
-  {  K40,  K41,  K42,  KC_NO,  KC_NO,  K45,  KC_NO,  KC_NO,  KC_NO,  KC_NO,K4A,  K4B,  K4C,  K4D  }   \
+  {  K40,  K41,  K42,  KC_NO,  KC_NO,  K45,  KC_NO,  KC_NO,  KC_NO,  K49,  K4A,  K4B,  K4C,  K4D  }   \
 }
 
 #endif
+
+/* Default layout
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D       |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10    | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D    |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20     | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C         |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30       | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C             |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40   | K41   | K42   | K45                             | K4A   | K4B   | K4C   | K4D   |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+/* Mini Lshift
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D       |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10    | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D    |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20     | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C         |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30   |K31| K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C             |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40   | K41   | K42   | K45                             | K4A   | K4B   | K4C   | K4D   |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+/* Mini Rshift
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D       |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10    | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D    |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20     | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C         |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30       | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C | K3D       |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40   | K41   | K42   | K45                             | K4A   | K4B   | K4C   | K4D   |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+/* Mini Enter
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D       |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10    | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D    |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20     | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C | K2D   |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30       | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C             |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40   | K41   | K42   | K45                             | K4A   | K4B   | K4C   | K4D   |
+ * `-----------------------------------------------------------------------------------------'
+ */

+ 103 - 0
keyboards/kc60/keymaps/dbroqua/keymap.c

@@ -0,0 +1,103 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "kc60.h"
+
+#define _QWERTY 0
+#define _FNCAPS 1
+#define _FNRIGHTSHIFT 2
+
+// Fillers to make layering more clear
+#define ______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Func macro definitions.
+#define S_LED   FUNC(0)
+#define S_LEDI  FUNC(1)
+#define S_LEDD  FUNC(2)
+
+// Enable these functions using FUNC(n) macro.
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_BACKLIGHT_TOGGLE(),
+	[1] = ACTION_BACKLIGHT_INCREASE(),
+	[2] = ACTION_BACKLIGHT_DECREASE()
+ };
+
+/*
+ * |     |     |
+ * |       |   |
+ * |        |  |
+ * |         | |
+ * |           |
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |  -  |  =  |  `  | Bksp|
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab    |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  [  |  ]  |   \    |
+ * |-----------------------------------------------------------------------------------------+
+ * | Caps/FN1|  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |    Enter    |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift     |  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  |     Up    | FN2 |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl  | Gui   | Alt   |               Space             | AltGr | Left  | Down  | Right |
+ * `-----------------------------------------------------------------------------------------'
+ */
+  [0] = KEYMAP( /* Basic QWERTY */
+      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_GRV,  \
+      KC_TAB,   KC_Q,     KC_W,     KC_E,    KC_R,     KC_T,     KC_Y,     KC_U,    KC_I,  KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,  \
+      LT(_FNCAPS, KC_CAPS),  KC_A,     KC_S,     KC_D,    KC_F,     KC_G,     KC_H,     KC_J,    KC_K,  KC_L,     KC_SCLN,  KC_QUOT,  KC_NO,    KC_ENT,   \
+      KC_LSFT,  KC_NO,    KC_Z,     KC_X,    KC_C,     KC_V,     KC_B,     KC_N,    KC_M,  KC_COMM,  KC_DOT,   KC_SLSH,  MO(_FNRIGHTSHIFT),  KC_UP,  \
+      KC_LCTL,  KC_LGUI,  KC_LALT,  KC_SPC,  KC_BSPC,  KC_RALT,  KC_LEFT, KC_DOWN, KC_RIGHT \
+      ),
+
+/* Layer 1
+ * ,-----------------------------------------------------------------------------------------.
+ * |     | F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F10 | F11 | F12 | Ins | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * |        |     |     |     |     |     |     |     |     |     |     |     |     |        |
+ * |-----------------------------------------------------------------------------------------+
+ * |         |     |     |     |     |     |     | Psc |     |     |     |     |             |
+ * |-----------------------------------------------------------------------------------------+
+ * |           | Led | Led-| Led+|     | Mute| Vol+| Vol-|     |     |     |    Play   |     |
+ * |-----------------------------------------------------------------------------------------+
+ * |       |       |       |                                 |       | Prev  | Stop  | Next  |
+ * `-----------------------------------------------------------------------------------------'
+ */
+  [_FNCAPS] = KEYMAP( /* Layer 1 */
+      ______,   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_INS,  \
+      ______,   ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,  \
+      ______,   ______, ______, ______, ______, ______, ______, KC_PSCR,______, ______, ______, ______, ______, ______,   \
+      ______,   ______,  S_LED,  S_LEDI, S_LEDD,______,KC_MUTE,KC_VOLU,KC_VOLD,______, ______, ______, ______,KC_MPLY,  \
+      ______,   ______, ______,                 ______,         KC_DEL,         ______, KC_MPRV,    KC_MSTP,    KC_MNXT \
+      ),
+
+/* Layer 2
+ * ,-----------------------------------------------------------------------------------------.
+ * |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |
+ * |-----------------------------------------------------------------------------------------+
+ * |        |     |     |     |     |     |     |     |     |     |     |     |     |        |
+ * |-----------------------------------------------------------------------------------------+
+ * |         |     |     |     |     |     |     |     |     |     |     |     |             |
+ * |-----------------------------------------------------------------------------------------+
+ * |           |     |     |     |     |     |     |     |     |     |     |   PgUp    |     |
+ * |-----------------------------------------------------------------------------------------+
+ * |       |       |       |                                 |       | Home  | PgDown| End   |
+ * `-----------------------------------------------------------------------------------------'
+ */
+  [_FNRIGHTSHIFT] = KEYMAP( /* Layer 2 */
+      ______,   ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,  \
+      ______,   ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,  \
+      ______,   ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,   \
+      ______,   ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_PGUP,  \
+      ______,   ______, ______,                 ______,         ______,                 ______, KC_HOME,KC_PGDN,KC_END \
+      ),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+  return MACRO_NONE;
+};

+ 11 - 0
keyboards/kc60/keymaps/dbroqua/readme.md

@@ -0,0 +1,11 @@
+# Dbroqua Layout
+
+* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/24fa7821d4955ec3c76037c8e159a199
+* Online keyboard layout editor (caps layer): http://www.keyboard-layout-editor.com/#/gists/4136d4d1555d6f0d9403c21aaf50fd37
+* Online keyboard layout editor (fn2 layer): http://www.keyboard-layout-editor.com/#/gists/cf4955f73f339020dbb41c15364e7e4f
+
+# Programming Instructions:
+Enter into programming mode and run the following command.
+```
+$ sudo KEYMAP=dbroqua make dfu
+```

+ 1 - 1
keyboards/kc60/keymaps/default/keymap.c

@@ -9,7 +9,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
       KC_TAB,   KC_Q,     KC_W,     KC_E,    KC_R,     KC_T,     KC_Y,     KC_U,    KC_I,  KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,  \
       KC_CAPS,  KC_A,     KC_S,     KC_D,    KC_F,     KC_G,     KC_H,     KC_J,    KC_K,  KC_L,     KC_SCLN,  KC_QUOT,  KC_NO,    KC_ENT,   \
       KC_LSFT,  KC_NO,    KC_Z,     KC_X,    KC_C,     KC_V,     KC_B,     KC_N,    KC_M,  KC_COMM,  KC_DOT,   KC_SLSH,  KC_NO,    KC_RSFT,  \
-      KC_LCTL,  KC_LALT,  KC_LGUI,                     KC_SPC,                                       KC_RGUI,  KC_RALT,  KC_RCTL,  RESET \
+      KC_LCTL,  KC_LALT,  KC_LGUI,                     KC_SPC,                             KC_NO,    KC_RGUI,  KC_RALT,  KC_RCTL,  RESET \
       ),
 };
 

+ 3 - 3
keyboards/kc60/keymaps/sgoodwin/keymap.c

@@ -13,21 +13,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
       KC_TAB,   KC_Q,     KC_W,     KC_F,    KC_P,     KC_G,     KC_J,     KC_L,  KC_U,  KC_Y,     KC_SCLN,  KC_LBRC,  KC_RBRC,  KC_BSLS,  \
       MO(2),    KC_A,     KC_R,     KC_S,    KC_T,     KC_D,     KC_H,     KC_N,  KC_E,  KC_I,     KC_O,     KC_QUOT,  KC_NO,    KC_ENT,   \
       KC_LSFT,  KC_NO,    KC_Z,     KC_X,    KC_C,     KC_V,     KC_B,     KC_K,  KC_M,  KC_COMM,  KC_DOT,   KC_SLSH,  KC_NO,    KC_RSFT,  \
-      KC_LCTL,  KC_LALT,  KC_LGUI,                     KC_SPC,                                     KC_RGUI,  KC_RALT,  KC_RCTL,  DF(1)  \
+      KC_LCTL,  KC_LALT,  KC_LGUI,                     KC_SPC,                           KC_NO,    KC_RGUI,  KC_RALT,  KC_RCTL,  DF(1)  \
       ),
   [1] = KEYMAP( /* Basic QWERTY */
       KC_ESC,   KC_1,     KC_2,     KC_3,    KC_4,     KC_5,     KC_6,     KC_7,    KC_8,  KC_9,     KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,  \
       KC_TAB,   KC_Q,     KC_W,     KC_E,    KC_R,     KC_T,     KC_Y,     KC_U,    KC_I,  KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,  \
       MO(2),    KC_A,     KC_S,     KC_D,    KC_F,     KC_G,     KC_H,     KC_J,    KC_K,  KC_L,     KC_SCLN,  KC_QUOT,  KC_NO,    KC_ENT,   \
       KC_LSFT,  KC_NO,    KC_Z,     KC_X,    KC_C,     KC_V,     KC_B,     KC_N,    KC_M,  KC_COMM,  KC_DOT,   KC_SLSH,  KC_NO,    KC_RSFT,  \
-      KC_LCTL,  KC_LALT,  KC_LGUI,                     KC_SPC,                                       KC_RGUI,  KC_RALT,  KC_RCTL,  DF(0) \
+      KC_LCTL,  KC_LALT,  KC_LGUI,                     KC_SPC,                             KC_NO,    KC_RGUI,  KC_RALT,  KC_RCTL,  DF(0) \
       ),
   [2] = KEYMAP( /* KBP v60-like arrows, media keys, etc */
       KC_GRV,   KC_F1,    KC_F2,    KC_F3,     KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,    KC_F12,  KC_DEL,   \
       KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_UP,    BL_INC,    BL_DEC,  BL_STEP,  \
       KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RIGHT,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RIGHT,  KC_NO,   KC_TRNS,  \
       KC_TRNS,  KC_NO,    KC_MPRV,  KC_MPLY,   KC_MNXT,  KC_VOLD,  KC_VOLU,  KC_MUTE,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   KC_NO,   KC_TRNS,  \
-      KC_TRNS,  KC_TRNS,  KC_TRNS,                       KC_SPC,                                           DEBUG,    RESET,     KC_TRNS, KC_NO     \
+      KC_TRNS,  KC_TRNS,  KC_TRNS,                       KC_SPC,                                 KC_NO,    DEBUG,    RESET,     KC_TRNS, KC_NO     \
       ),
 };
 

+ 4 - 4
keyboards/kc60/keymaps/stanleylai/keymap.c

@@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_TAB,           KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_LBRC,  KC_RBRC,  KC_BSLS, \
   LT(_FL, KC_CAPS), KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_QUOT,  KC_NO,    KC_ENT,  \
   KC_LSFT, KC_NO,   KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,  MO(_FL),  KC_UP,   \
-  KC_LCTL, KC_LALT, KC_LGUI,                KC_SPC,                                 KC_RGUI,KC_LEFT,  KC_DOWN,  KC_RGHT),
+  KC_LCTL, KC_LALT, KC_LGUI,                KC_SPC,                         KC_NO,  KC_RGUI,KC_LEFT,  KC_DOWN,  KC_RGHT),
 
 // Function layer
 [_FL] = KEYMAP(
@@ -30,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_NO,  KC_MPRV,KC_UP,  KC_MNXT,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_PSCR,KC_SLCK,  KC_PAUS,  KC_INS, \
   KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_NO,    KC_NO,  \
   KC_TRNS,KC_NO,  KC_MUTE,KC_VOLD,KC_VOLU,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_TRNS,  LT(_RGBL, KC_PGUP),\
-  KC_TRNS,KC_TRNS,KC_TRNS,                KC_MPLY,                                KC_TRNS,KC_HOME,  KC_PGDN,  KC_END),
+  KC_TRNS,KC_TRNS,KC_TRNS,                KC_MPLY,                        KC_NO,  KC_TRNS,KC_HOME,  KC_PGDN,  KC_END),
 
 // RGB Layer
 [_RGBL] = KEYMAP(
@@ -39,13 +39,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_NO,    KC_NO, \
   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_NO,    KC_NO,  \
   KC_TRNS,KC_NO,  RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,BL_STEP,BL_TOGG,  KC_TRNS,  KC_TRNS,\
-  KC_TRNS,KC_TRNS,KC_TRNS,                KC_TRNS,                                KC_TRNS,KC_TRNS,  KC_TRNS,  KC_TRNS),
+  KC_TRNS,KC_TRNS,KC_TRNS,                KC_TRNS,                        KC_NO,  KC_TRNS,KC_TRNS,  KC_TRNS,  KC_TRNS),
   #else
   RESET,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_NO,    KC_NO, \
   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_NO,    KC_NO, \
   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_NO,    KC_NO,  \
   KC_TRNS,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  BL_STEP,BL_TOGG,  KC_TRNS,  KC_TRNS,\
-  KC_TRNS,KC_TRNS,KC_TRNS,                KC_TRNS,                                KC_TRNS,KC_TRNS,  KC_TRNS,  KC_TRNS),
+  KC_TRNS,KC_TRNS,KC_TRNS,                KC_TRNS,                        KC_NO,  KC_TRNS,KC_TRNS,  KC_TRNS,  KC_TRNS),
   #endif
 };
 

+ 2 - 2
keyboards/kc60/keymaps/wigguno/keymap.c

@@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
       KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,   \
       KC_CAPS,  KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,  KC_NO,    KC_ENT,    \
       KC_LSFT,  KC_NO,    KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,  KC_NO,    KC_RSFT,   \
-      KC_LCTL,  KC_LGUI,  KC_LALT,                      KC_SPC,                                           KC_RALT,  MO(1),    KC_RGUI,  KC_RCTL    \
+      KC_LCTL,  KC_LGUI,  KC_LALT,                      KC_SPC,                                 KC_NO,    KC_RALT,  MO(1),    KC_RGUI,  KC_RCTL    \
       ),
 	  	
    /*
@@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
       KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_PSCR,  KC_TRNS,  KC_TRNS,  KC_TRNS,   \
       KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_TRNS,  BL_DEC,   BL_INC,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   \
       KC_TRNS,  KC_TRNS,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_HOME,  KC_END,   KC_TRNS,  KC_TRNS,  KC_TRNS,   \
-      RESET,    KC_TRNS,  KC_TRNS,                      BL_TOGG,                                          KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS    \
+      RESET,    KC_TRNS,  KC_TRNS,                      BL_TOGG,                                KC_NO,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS    \
       ),
 };
 

+ 5 - 5
keyboards/kc60/keymaps/workman-dead/keymap.c

@@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_TABM,          KC_Q,    KC_D,    KC_R,    KC_W,    KC_B,    KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \
   KC_LCTL,          KC_A,    KC_S,    KC_H,    KC_T,    KC_G,    KC_Y,    KC_N,    KC_E,    KC_O,    KC_I,    KC_QUOT, _______, KC_ENT,  \
   KC_LSFT, _______, KC_Z,    KC_X,    KC_M,    KC_C,    KC_V,    KC_K,    KC_L,    DK_ACT,  KC_DOT,  KC_SLSH,          _______, KC_RSFT, \
-  KC_LCTL, KC_LALT, KC_LGUI,                   KC_SPFN,                   KC_RALT, KC_RGUI, KC_RCTL, KC_DFQW),
+  KC_LCTL, KC_LALT, KC_LGUI,                   KC_SPFN,          KC_NO,   KC_RALT, KC_RGUI, KC_RCTL, KC_DFQW),
 
 // QWERTY
 /*
@@ -77,7 +77,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_TABM,          KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, \
   KC_LCTL,          KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, _______, KC_ENT,  \
   KC_LSFT, _______, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    DK_ACT,  KC_DOT,  KC_SLSH,          _______, KC_RSFT, \
-  KC_LCTL, KC_LALT, KC_LGUI,                   KC_SPFN,                   KC_RALT, KC_RGUI, KC_RCTL, KC_DOWN),
+  KC_LCTL, KC_LALT, KC_LGUI,                   KC_SPFN,          KC_NO,   KC_RALT, KC_RGUI, KC_RCTL, KC_DOWN),
 
 // dead key layer
 /*
@@ -98,7 +98,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   XXXXXXX,          KC_PERC, KC_AMPR, KC_QUES, KC_PLUS, KC_AT,   KC_DLR,  KC_UNDS, KC_LBRC, KC_RBRC, KC_EXLM, KC_TILD, KC_CIRC, _______, \
   _______,          KC_HASH, KC_LPRN, KC_EQL,  KC_0,    KC_LCBR, KC_RCBR, KC_1,    KC_ASTR, KC_RPRN, KC_MINS, KC_GRV,  _______, KC_CENT, \
   _______, _______, KC_6,    KC_7,    KC_8,    KC_9,    KC_PIPE, KC_BSLS, KC_2,    DK_REL,  KC_4,    KC_5,             _______, _______, \
-  KC_LCTL, KC_LALT, KC_LGUI,                   KC_COMS,                   KC_RALT, KC_RGUI, KC_RCTL, _______),
+  KC_LCTL, KC_LALT, KC_LGUI,                   KC_COMS,          KC_NO,   KC_RALT, KC_RGUI, KC_RCTL, _______),
 
 // function layer
 /*
@@ -119,7 +119,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_ESC,           KC_CMDQ, KC_CMDD, KC_CSTB, KC_C_TB, _______, _______, KC_PGDN, KC_UP,   KC_PGUP, _______, _______, _______, KC_INS,  \
   KC_LSFT,          KC_CMDA, KC_CMDS, KC_C_LF, KC_C_RT, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END,  _______, KC_BSPC, \
   KC_LSFT, _______, KC_CMDZ, KC_CMDX, _______, KC_CMDC, KC_CMDV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______,          _______, _______, \
-  KC_LCTL, KC_LALT, KC_LGUI,                   KC_TRNS,                   KC_RALT, KC_RGUI, KC_RCTL, RESET),
+  KC_LCTL, KC_LALT, KC_LGUI,                   KC_TRNS,          KC_NO,   KC_RALT, KC_RGUI, KC_RCTL, RESET),
 
 // mouse layer
 /*
@@ -140,7 +140,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   XXXXXXX,          KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, \
   _______,          _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, _______, _______, _______, \
   _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-  _______, _______, _______,                   KC_BTN1,                   _______, _______, _______, _______),
+  _______, _______, _______,                   KC_BTN1,          _______, _______, _______, _______, _______),
 };
 
 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)

+ 3 - 3
keyboards/kc60/keymaps/ws2812/keymap.c

@@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_TAB,  KC_Q,    KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_LBRC,  KC_RBRC, KC_BSLS, \
   KC_CAPS, KC_A,    KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_QUOT,  KC_NO,   KC_ENT,  \
   KC_LSFT, KC_NO,   KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,  KC_NO,   KC_RSFT, \
-  KC_LCTL, KC_LGUI, KC_LALT,                KC_SPC,                                 KC_RALT,KC_RGUI, MO(_FL), KC_RCTL),
+  KC_LCTL, KC_LGUI, KC_LALT,                KC_SPC,                         KC_NO,  KC_RALT,KC_RGUI, MO(_FL), KC_RCTL),
 
   /* Keymap _FL: Function Layer
    * ,-----------------------------------------------------------.
@@ -53,13 +53,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_TRNS, KC_TRNS, KC_UP,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC,  BL_INC,  BL_TOGG, \
   KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
   KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
-  KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                                     KC_TRNS, KC_TRNS, KC_TRNS, RESET),
+  KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                            KC_NO,   KC_TRNS, KC_TRNS, KC_TRNS, RESET),
   #else
   KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
   KC_TRNS, KC_TRNS, KC_UP,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC,  BL_INC,  BL_TOGG, \
   KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
-  KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                                     KC_TRNS, KC_TRNS, KC_TRNS, RESET),
+  KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                            KC_NO,   KC_TRNS, KC_TRNS, KC_TRNS, RESET),
   #endif
 };
 

+ 31 - 0
keyboards/kc60/led.c

@@ -0,0 +1,31 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <avr/io.h>
+#include "stdint.h"
+#include "led.h"
+
+
+void led_set(uint8_t usb_led)
+{
+    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+        // output low
+        DDRB |= (1<<2);
+        PORTB &= ~(1<<2);
+    } else {
+        // Hi-Z
+        DDRB &= ~(1<<2);
+        PORTB &= ~(1<<2);
+    }
+}

+ 7 - 0
keyboards/kc60/readme.md

@@ -27,3 +27,10 @@ Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` fol
 ![Image of KC60 with RGB Underglow](keymaps/ws2812/ws2812_example.jpg)
 
 Build with WS2812 Support by running `make ws2812`.
+
+## Warning
+For those who want to use 2x1U instead of classic backspace you need to use K0D and K49 like this:
+* K0D represents the key at the right of =.
+* K49 represents the last key of the row (is wired at the right of the space key on the PCB)
+
+In kc60.h I've put several definitions' examples of possible layouts proposed by online editor (http://123.57.250.164:9128/).

+ 1 - 1
keyboards/kitten_paw/keymaps/default/keymap.c

@@ -11,7 +11,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        KC_TAB,   KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,KC_LBRC,KC_RBRC,KC_BSLS,   KC_DEL, KC_END,KC_PGDN,    KC_P7,  KC_P8,  KC_P9,KC_PPLS, \
       KC_CAPS,   KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,KC_SCLN,KC_QUOT,         KC_ENT,                              KC_P4,  KC_P5,  KC_P6,      \
       KC_LSFT,KC_NUBS,   KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,KC_COMM, KC_DOT,KC_SLSH,        KC_RSFT,            KC_UP,            KC_P1,  KC_P2,  KC_P3,KC_PENT, \
-      KC_LCTL,KC_LGUI,KC_LALT,                 KC_SPC,                                KC_RALT,KC_RGUI,KC_MENU,KC_RCTL,  KC_LEFT,KC_DOWN,KC_RGHT,    KC_P0,KC_PDOT)
+      KC_LCTL,KC_LGUI,KC_LALT,                 KC_SPC,                                KC_RALT,KC_RGUI, KC_APP,KC_RCTL,  KC_LEFT,KC_DOWN,KC_RGHT,    KC_P0,KC_PDOT)
 };
 
 const uint16_t PROGMEM fn_actions[] = {

+ 31 - 0
keyboards/kitten_paw/keymaps/ickerwx/config.h

@@ -0,0 +1,31 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#undef MOUSEKEY_MOVE_MAX
+#define MOUSEKEY_MOVE_MAX       127
+#undef MOUSEKEY_WHEEL_MAX
+#define MOUSEKEY_WHEEL_MAX      110
+#undef MOUSEKEY_MOVE_DELTA
+#define MOUSEKEY_MOVE_DELTA     5
+#undef MOUSEKEY_WHEEL_DELTA
+#define MOUSEKEY_WHEEL_DELTA    1
+#undef MOUSEKEY_DELAY
+#define MOUSEKEY_DELAY 50
+#undef MOUSEKEY_INTERVAL
+#define MOUSEKEY_INTERVAL 20
+#undef MOUSEKEY_MAX_SPEED
+#define MOUSEKEY_MAX_SPEED 4
+#undef MOUSEKEY_TIME_TO_MAX
+#define MOUSEKEY_TIME_TO_MAX 30
+#undef MOUSEKEY_WHEEL_MAX_SPEED
+#define MOUSEKEY_WHEEL_MAX_SPEED 3
+#undef MOUSEKEY_WHEEL_TIME_TO_MAX
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 1000
+#undef ONESHOT_TIMEOUT
+#define ONESHOT_TIMEOUT 500
+#undef TAPPING_TOGGLE
+#define TAPPING_TOGGLE 2
+
+#endif

+ 242 - 0
keyboards/kitten_paw/keymaps/ickerwx/keymap.c

@@ -0,0 +1,242 @@
+#include "kitten_paw.h"
+#include "mousekey.h"
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#define  C(kc) LCTL(KC_##kc)
+#define RA(kc) RALT(KC_##kc)
+#define KC_SLCT KC_SELECT
+#define MEDAPP LT(MEDIA, KC_APP)
+#undef S
+#define S(kc) LSFT(KC_##kc)
+
+uint8_t current_layer_global = 255;
+
+enum layers {
+    DEFAULT,
+    PROG1,
+    PROG2,
+    MEDIA,
+    MOUSE1,
+    MOUSE2,
+    MISC,
+};
+
+enum function_id {
+    LSHFT_PAREN,
+    RSHFT_PAREN,
+    LCTRL_BRACKET,
+    RCTRL_BRACKET,
+    LALT_CURLY,
+    RALT_CURLY,
+    CTRL_CLICK
+};
+
+enum macro_id {
+    GRV,
+    CFLEX
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [DEFAULT] = KEYMAP(\
+          KC_ESC,  KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9, KC_F10, KC_F11, KC_F12,           KC_PSCR,KC_SLCK,KC_PAUS,                                   \
+          KC_GRV,   KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,KC_MINS, KC_EQL,KC_BSPC,    KC_INS,KC_HOME,KC_PGUP,  KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
+          KC_TAB,   KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,KC_LBRC,KC_RBRC,KC_BSLS,    KC_DEL, KC_END,KC_PGDN,    KC_P7,  KC_P8,  KC_P9,KC_PPLS, \
+            F(0),   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_P4,  KC_P5,  KC_P6,         \
+            F(8),KC_NUBS,   KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,KC_COMM, KC_DOT,KC_SLSH,           F(9),             KC_UP,            KC_P1,  KC_P2,  KC_P3,KC_PENT, \
+            F(1),KC_LGUI,   F(3),              LT(MISC,  KC_SPC),                           F(4),   F(5), MEDAPP,   F(2),   KC_LEFT,KC_DOWN,KC_RGHT,    KC_P0,KC_PDOT),
+  /* Layer 1: Programming Layer 1, emulating US l ayout */
+  [PROG1] = KEYMAP(\
+          KC_ESC,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,           _______,_______,_______,                                   \
+          M(GRV),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_SLSH,   S(0),_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,_______,_______,_______,_______,_______,   KC_Z,_______,_______,_______,_______,  RA(8),  RA(9),RA(MINS),  _______,_______,_______,  _______,_______,_______,_______, \
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,S(COMM),S(BSLS),        _______,                             _______,_______,_______,         \
+       MO(PROG2),_______,   KC_Y,_______,_______,_______,_______,_______,_______,_______,_______,   S(7),      MO(PROG2),           _______,          _______,_______,_______,_______, \
+         _______,_______,_______,                        _______,                        _______,_______,_______,_______,   _______,_______,_______,  _______,_______),
+    /* Layer 2: programming layer 2
+       all keys that are not FN keys are sent as LSFT+key on this layer
+    */
+  [PROG2] = KEYMAP(\
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,           _______,_______,_______,                                   \
+        RA(RBRC),_______,  RA(Q),KC_BSLS,_______,_______,M(CFLEX),  S(6),S(RBRC),   S(8),   S(9),S(SLSH),KC_RBRC,_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,  RA(7),  RA(0),RA(NUBS),  _______,_______,_______,  _______,_______,_______,_______, \
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, S(DOT),   S(2),        _______,                             _______,_______,_______,         \
+         _______,S(NUBS),_______,_______,_______,_______,_______,_______,_______,KC_NUBS,S(NUBS),S(MINS),        _______,           _______,          _______,_______,_______,_______, \
+         _______,_______,_______,                        _______,                        _______,_______,_______,_______,   _______,_______,_______,  _______,_______),
+    /* Layer 3: media layer */
+  [MEDIA] = KEYMAP(\ 
+          KC_PWR,KC_SLEP,KC_WAKE,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,           XXXXXXX,XXXXXXX,XXXXXXX,                                   \
+         XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,   KC_MPRV,KC_MPLY,KC_MNXT,  XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \
+         XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,   KC_VOLD,KC_MUTE,KC_VOLU,  XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \
+         XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,        XXXXXXX,                             XXXXXXX,XXXXXXX,XXXXXXX,         \
+         XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,        XXXXXXX,           KC_EJCT,          XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \
+         XXXXXXX,XXXXXXX,XXXXXXX,                        XXXXXXX,                        XXXXXXX,XXXXXXX,_______,XXXXXXX,   KC_MRWD,KC_MSTP,KC_MFFD,  XXXXXXX,XXXXXXX),
+    /* Layer 4: Mouse layer */
+  [MOUSE1] = KEYMAP(\
+            F(6),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,           _______,_______,_______,                                   \
+         _______,KC_ACL0,KC_ACL1,KC_ACL2,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,KC_BTN4,KC_WH_D,KC_MS_U,KC_WH_U,_______,   C(Z),_______,_______,_______,_______,_______,_______,_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,KC_BTN5,KC_MS_L,KC_MS_D,KC_MS_R,   F(7),KC_WH_L,KC_WH_D,KC_WH_U,KC_WH_R,_______,_______,        _______,                             _______,_______,_______,         \
+      MO(MOUSE2),_______,   C(Y),   C(X),   C(C),   C(V),_______,KC_BTN2,KC_BTN3,C(PGUP),C(PGDN),_______,        KC_RSFT,           _______,          _______,_______,_______,_______, \
+         KC_LCTL,_______,KC_LALT,                        KC_BTN1,                        KC_RALT,KC_RGUI, KC_APP,KC_RCTL,   _______,_______,_______,  _______,_______),
+    /* Layer 5: Mouse layer 2*/
+  [MOUSE2] = KEYMAP(\
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,           _______,_______,_______,                                   \
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,_______,KC_BTN2,KC_WH_U,KC_BTN3,_______,_______,_______,_______,_______,_______,_______,_______,_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,_______,KC_WH_L,KC_WH_D,KC_WH_R,_______,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,_______,_______,        _______,                             _______,_______,_______,         \
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______,           _______,          _______,_______,_______,_______, \
+         _______,_______,_______,                        _______,                        _______,_______,_______,_______,   _______,_______,_______,  _______,_______),
+    /* Layer 6: Misc layer */
+  [MISC] = KEYMAP(\
+         _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,           _______,_______,_______,                                   \
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,KC_SLCT,   C(W),  KC_UP,_______,_______,_______,_______,KC_BSPC, KC_DEL,_______,_______,_______,_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,_______,KC_LEFT,KC_DOWN,KC_RGHT,_______,KC_HOME,KC_PGDN,KC_PGUP,_______,_______,_______,        _______,                             _______,_______,_______,         \
+         KC_LSFT,_______,   C(Y),   C(X),   C(C),   C(V), KC_SPC, KC_END,_______,C(PGUP),C(PGDN),_______,        _______,           _______,          _______,_______,_______,_______, \
+         _______,_______,_______,               LT(MISC, KC_SPC),                        _______,_______,_______,_______,   _______,_______,_______,  _______,_______),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_LAYER_TAP_TOGGLE(MOUSE1),      // tap-toggle mouse layer (4)
+    [1] = ACTION_FUNCTION_TAP(LCTRL_BRACKET),   // tap to print [
+    [2] = ACTION_FUNCTION_TAP(RCTRL_BRACKET),   // tap to print ]
+    [3] = ACTION_FUNCTION_TAP(LALT_CURLY),      // tap to print {
+    [4] = ACTION_FUNCTION_TAP(RALT_CURLY),      // tap to print }
+    [5] = ACTION_LAYER_TAP_TOGGLE(PROG1),       // tap-toggle programming layer 1
+    [6] = ACTION_LAYER_SET_CLEAR(DEFAULT),
+    [7] = ACTION_FUNCTION_TAP(CTRL_CLICK),
+    [8] = ACTION_FUNCTION_TAP(LSHFT_PAREN),     // tap to print (
+    [9] = ACTION_FUNCTION_TAP(RSHFT_PAREN),     // tap to print )
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case GRV: // macro to print accent grave
+            return (record->event.pressed ?
+                    MACRO( D(LSFT), T(EQL), U(RALT), T(SPC), END) :
+                    MACRO_NONE );
+        case CFLEX: // print accent circonflex
+            return (record->event.pressed ?
+                    MACRO( T(GRV), T(SPC), END ) :
+                    MACRO_NONE );
+      }
+    return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+    uint8_t layer;
+    layer = biton32(layer_state);
+
+    if (current_layer_global != layer) {
+        current_layer_global = layer;
+
+        // unset CAPSLOCK and SCROLL LOCK LEDs
+        led_set_kb(host_keyboard_leds() & ~(1<<USB_LED_CAPS_LOCK));
+        led_set_kb(host_keyboard_leds() & ~(1<<USB_LED_SCROLL_LOCK));
+        // set SCROLL LOCK LED when the mouse layer is active, CAPS LOCK when PROG layer is active
+        if (layer == MOUSE1 || layer == MOUSE2) {
+          led_set_kb(host_keyboard_leds() | (1<<USB_LED_SCROLL_LOCK));
+        } else if (layer == PROG1 || layer == PROG2) {
+          led_set_kb(host_keyboard_leds() | (1<<USB_LED_CAPS_LOCK));
+        }
+    }
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
+
+void tap_helper(keyrecord_t *record, uint16_t orig_mod, uint16_t macro_mod, uint16_t macro_kc ) {
+  if (record->event.pressed) {
+      if (record->tap.count > 0 && !record->tap.interrupted) {
+          if (record->tap.interrupted) {
+              register_mods(MOD_BIT(orig_mod));
+          }
+      } else {
+          register_mods(MOD_BIT(orig_mod));
+      }
+  } else {
+      if (record->tap.count > 0 && !(record->tap.interrupted)) {
+          add_weak_mods(MOD_BIT(macro_mod));
+          send_keyboard_report();
+          register_code(macro_kc);
+          unregister_code(macro_kc);
+          del_weak_mods(MOD_BIT(macro_mod));
+          send_keyboard_report();
+          record->tap.count = 0;  // ad hoc: cancel tap
+      } else {
+          unregister_mods(MOD_BIT(orig_mod));
+      }
+  }
+}
+
+/* if LCTRL is tabbed, print (, or ) if RCTRL is tabbed, same for LALT/RALT and [/] */
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+    // The code is copied from keymap_hasu.c in the tmk keyboards hhkb folder
+    switch (id) {
+        case LCTRL_BRACKET:
+            tap_helper(record, KC_LCTL, KC_RALT, KC_8);
+            break;
+        case RCTRL_BRACKET:
+            tap_helper(record, KC_RCTL, KC_RALT, KC_9);
+            break;
+        case LALT_CURLY:
+            tap_helper(record, KC_LALT, KC_RALT, KC_7);
+            break;
+        case RALT_CURLY:
+            tap_helper(record, KC_RALT, KC_RALT, KC_0);
+            break;
+        case LSHFT_PAREN:
+            tap_helper(record, KC_LSFT, KC_LSFT, KC_8);
+            break;
+        case RSHFT_PAREN:
+            tap_helper(record, KC_RSFT, KC_LSFT, KC_9);
+            break;
+        case CTRL_CLICK:
+            if (record->event.pressed) {
+                mousekey_clear();
+                register_mods(MOD_BIT(KC_LCTL));
+                send_keyboard_report();
+                wait_ms(5);
+                mousekey_on(KC_BTN1);
+                mousekey_send();
+                wait_ms(10);
+                mousekey_off(KC_BTN1);
+                mousekey_send();
+                wait_ms(5);
+                unregister_mods(MOD_BIT(KC_LCTL));
+                send_keyboard_report();
+            }
+            break;
+    }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    uint8_t layer;
+    layer = biton32(layer_state);
+    if (layer == PROG2) {
+         if (keycode >= KC_A && keycode <= KC_EXSEL && \
+             !(  // do not send LSFT + these keycodes, they are needed for emulating the US layout
+                 keycode == KC_NONUS_BSLASH ||
+                 keycode == KC_RBRC ||
+                 keycode == KC_BSLS ||
+                 keycode == KC_GRV
+            )) {
+              // LSFT is the modifier for this layer, so we set LSFT for every key to get the expected behavior
+              if (record->event.pressed) {
+                  register_mods(MOD_LSFT);
+              } else {
+                  unregister_mods(MOD_LSFT);
+              }
+         }
+    }
+    return true;
+}

文件差异内容过多而无法显示
+ 18 - 0
keyboards/kitten_paw/keymaps/ickerwx/readme.md


+ 16 - 3
keyboards/kitten_paw/kitten_paw.c

@@ -4,7 +4,6 @@ void matrix_init_kb(void) {
 	// put your keyboard start-up code here
 	// runs once when the firmware starts up
 
-    matrix_init_quantum();
 	matrix_init_user();
 }
 
@@ -12,7 +11,6 @@ void matrix_scan_kb(void) {
 	// put your looping keyboard code here
 	// runs every cycle (a lot)
 
-    matrix_scan_quantum();
     matrix_scan_user();
 }
 
@@ -25,6 +23,21 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
 
 void led_set_kb(uint8_t usb_led) {
 	// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
-
+    CONFIG_LED_IO;
+    CONFIG_LED_IO;
+    print_dec(usb_led);
+    if (usb_led & (1<<USB_LED_CAPS_LOCK))
+        USB_LED_CAPS_LOCK_ON;
+    else
+        USB_LED_CAPS_LOCK_OFF;
+
+    if (usb_led & (1<<USB_LED_NUM_LOCK))
+        USB_LED_NUM_LOCK_ON;
+    else
+        USB_LED_NUM_LOCK_OFF;
+    if (usb_led & (1<<USB_LED_SCROLL_LOCK))
+        USB_LED_SCROLL_LOCK_ON;
+    else
+        USB_LED_SCROLL_LOCK_OFF;
 	led_set_user(usb_led);
 }

+ 11 - 0
keyboards/kitten_paw/kitten_paw.h

@@ -3,6 +3,17 @@
 
 #include "quantum.h"
 
+#define CONFIG_LED_IO \
+  DDRB |= (1<<7); \
+  DDRC |= (1<<5) | (1<<6);
+
+#define USB_LED_CAPS_LOCK_ON    PORTC &= ~(1<<6)
+#define USB_LED_CAPS_LOCK_OFF   PORTC |=  (1<<6)
+#define USB_LED_NUM_LOCK_ON     PORTB &= ~(1<<7)
+#define USB_LED_NUM_LOCK_OFF    PORTB |=  (1<<7)
+#define USB_LED_SCROLL_LOCK_ON  PORTC &= ~(1<<5)
+#define USB_LED_SCROLL_LOCK_OFF PORTC |=  (1<<5)
+
 // 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

+ 0 - 47
keyboards/kitten_paw/led.c

@@ -1,47 +0,0 @@
-/*
-  Copyright 2014 Ralf Schmitt <ralf@bunkertor.net>
-
-  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 <avr/io.h>
-#include "stdint.h"
-#include "led.h"
-
-/* LED pin configuration
- *
- * Scroll Lock  PC5
- * Caps Lock    PC6
- * Num Lock     PB7
- *
- */
-void led_set(uint8_t usb_led) {
-  DDRB |= (1<<7);
-  DDRC |= (1<<5) | (1<<6);
-  
-  if (usb_led & (1<<USB_LED_CAPS_LOCK))
-    PORTC &= ~(1<<6);
-  else
-    PORTC |=  (1<<6);
-  
-  if (usb_led & (1<<USB_LED_NUM_LOCK))
-    PORTB &= ~(1<<7);
-  else
-    PORTB |=  (1<<7);
-  
-  if (usb_led & (1<<USB_LED_SCROLL_LOCK))
-    PORTC &= ~(1<<5);
-  else
-    PORTC |=  (1<<5);
-}

+ 2 - 1
keyboards/kitten_paw/matrix.c

@@ -67,6 +67,7 @@ void matrix_init(void) {
     matrix[i] = 0;
     matrix_debouncing[i] = 0;
   }
+  matrix_init_quantum();
 }
 
 uint8_t matrix_scan(void) {
@@ -94,7 +95,7 @@ uint8_t matrix_scan(void) {
       }
     }
   }
-  
+  matrix_scan_quantum();
   return 1;
 }
 

+ 1 - 1
keyboards/kitten_paw/rules.mk

@@ -69,4 +69,4 @@ BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
 AUDIO_ENABLE ?= no           # Audio output on port C6
 
 CUSTOM_MATRIX = yes
-SRC += matrix.c led.c
+SRC += matrix.c

+ 32 - 32
keyboards/lets_split/pro_micro.h

@@ -111,18 +111,18 @@ static const uint8_t SCK  = 15;
 
 // Mapping of analog pins as digital I/O
 // A6-A11 share with digital pins
-static const uint8_t A0 = 18;
-static const uint8_t A1 = 19;
-static const uint8_t A2 = 20;
-static const uint8_t A3 = 21;
-static const uint8_t A4 = 22;
-static const uint8_t A5 = 23;
-static const uint8_t A6 = 24;   // D4
-static const uint8_t A7 = 25;   // D6
-static const uint8_t A8 = 26;   // D8
-static const uint8_t A9 = 27;   // D9
-static const uint8_t A10 = 28;  // D10
-static const uint8_t A11 = 29;  // D12
+static const uint8_t ADC0 = 18;
+static const uint8_t ADC1 = 19;
+static const uint8_t ADC2 = 20;
+static const uint8_t ADC3 = 21;
+static const uint8_t ADC4 = 22;
+static const uint8_t ADC5 = 23;
+static const uint8_t ADC6 = 24;   // D4
+static const uint8_t ADC7 = 25;   // D6
+static const uint8_t ADC8 = 26;   // D8
+static const uint8_t ADC9 = 27;   // D9
+static const uint8_t ADC10 = 28;  // D10
+static const uint8_t ADC11 = 29;  // D12
 
 #define digitalPinToPCICR(p)    ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0))
 #define digitalPinToPCICRbit(p) 0
@@ -220,26 +220,26 @@ const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
     PC, // D5 - PC6
     PD, // D6 - PD7
     PE, // D7 - PE6
-    
+
     PB, // D8 - PB4
     PB, // D9 - PB5
     PB, // D10 - PB6
     PB, // D11 - PB7
     PD, // D12 - PD6
     PC, // D13 - PC7
-    
+
     PB, // D14 - MISO - PB3
     PB, // D15 - SCK - PB1
     PB, // D16 - MOSI - PB2
     PB, // D17 - SS - PB0
-    
+
     PF, // D18 - A0 - PF7
     PF, // D19 - A1 - PF6
     PF, // D20 - A2 - PF5
     PF, // D21 - A3 - PF4
     PF, // D22 - A4 - PF1
     PF, // D23 - A5 - PF0
-    
+
     PD, // D24 - PD5
     PD, // D25 / D6 - A7 - PD7
     PB, // D26 / D8 - A8 - PB4
@@ -257,26 +257,26 @@ const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
     _BV(6), // D5 - PC6
     _BV(7), // D6 - PD7
     _BV(6), // D7 - PE6
-    
+
     _BV(4), // D8 - PB4
     _BV(5), // D9 - PB5
     _BV(6), // D10 - PB6
     _BV(7), // D11 - PB7
     _BV(6), // D12 - PD6
     _BV(7), // D13 - PC7
-    
+
     _BV(3), // D14 - MISO - PB3
     _BV(1), // D15 - SCK - PB1
     _BV(2), // D16 - MOSI - PB2
     _BV(0), // D17 - SS - PB0
-    
+
     _BV(7), // D18 - A0 - PF7
     _BV(6), // D19 - A1 - PF6
     _BV(5), // D20 - A2 - PF5
     _BV(4), // D21 - A3 - PF4
     _BV(1), // D22 - A4 - PF1
     _BV(0), // D23 - A5 - PF0
-    
+
     _BV(5), // D24 - PD5
     _BV(7), // D25 / D6 - A7 - PD7
     _BV(4), // D26 / D8 - A8 - PB4
@@ -286,24 +286,24 @@ const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
 };
 
 const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
-    NOT_ON_TIMER,   
+    NOT_ON_TIMER,
     NOT_ON_TIMER,
     NOT_ON_TIMER,
     TIMER0B,        /* 3 */
     NOT_ON_TIMER,
     TIMER3A,        /* 5 */
     TIMER4D,        /* 6 */
-    NOT_ON_TIMER,   
-    
-    NOT_ON_TIMER,   
+    NOT_ON_TIMER,
+
+    NOT_ON_TIMER,
     TIMER1A,        /* 9 */
     TIMER1B,        /* 10 */
     TIMER0A,        /* 11 */
-    
-    NOT_ON_TIMER,   
+
+    NOT_ON_TIMER,
     TIMER4A,        /* 13 */
-    
-    NOT_ON_TIMER,   
+
+    NOT_ON_TIMER,
     NOT_ON_TIMER,
     NOT_ON_TIMER,
     NOT_ON_TIMER,
@@ -324,11 +324,11 @@ const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
 
 const uint8_t PROGMEM analog_pin_to_channel_PGM[] = {
     7,  // A0               PF7                 ADC7
-    6,  // A1               PF6                 ADC6    
-    5,  // A2               PF5                 ADC5    
+    6,  // A1               PF6                 ADC6
+    5,  // A2               PF5                 ADC5
     4,  // A3               PF4                 ADC4
-    1,  // A4               PF1                 ADC1    
-    0,  // A5               PF0                 ADC0    
+    1,  // A4               PF1                 ADC1
+    0,  // A5               PF0                 ADC0
     8,  // A6       D4      PD4                 ADC8
     10, // A7       D6      PD7                 ADC10
     11, // A8       D8      PB4                 ADC11

+ 59 - 139
keyboards/planck/keymaps/dbroqua/keymap.c

@@ -4,7 +4,7 @@
 #include "planck.h"
 #include "action_layer.h"
 #ifdef AUDIO_ENABLE
-#include "audio.h"
+  #include "audio.h"
 #endif
 #include "eeconfig.h"
 
@@ -15,145 +15,111 @@ extern keymap_config_t keymap_config;
 // Layer names don't all need to be of the same length, obviously, and you can also skip them
 // entirely and just use numbers.
 #define _QWERTY 0
-#define _COLEMAK 1
-#define _DVORAK 2
-#define _LOWER 3
-#define _RAISE 4
-#define _PLOVER 5
-#define _ADJUST 16
+#define _LOWER 1
+#define _RAISE 2
+#define _MULTIMEDIA 3
+#define _ADJUST 4
 
 enum planck_keycodes {
   QWERTY = SAFE_RANGE,
-  COLEMAK,
-  DVORAK,
-  PLOVER,
   LOWER,
   RAISE,
-  BACKLIT,
-  EXT_PLV
+  BACKLIT
 };
 
 // Fillers to make layering more clear
 #define _______ KC_TRNS
 #define XXXXXXX KC_NO
 
+// Func macro definitions.
+#define SFT_TAB  FUNC(0) // Tap for Enter, hold for Shift
+
+// Enable these functions using FUNC(n) macro.
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_LAYER_TAP_KEY(_MULTIMEDIA, KC_TAB)
+ };
+
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 /* Qwerty
  * ,-----------------------------------------------------------------------------------.
- * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Esc  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
  * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | GUI  |      | Alt  |Lower |    Space    |Raise |AltGr |   [  |   ]  |  \   |
+ * | Ctrl | GUI  | AltGr| Alt  | Lower|    Space    | Raise| Left | Down |  Up  |Right |
  * `-----------------------------------------------------------------------------------'
  */
 [_QWERTY] = {
-  {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
-  {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
-  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
-  {KC_LCTL, KC_LGUI, _______, KC_LALT, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_RALT, KC_LBRC, KC_RBRC,   KC_BSLS}
+  {KC_ESC,  KC_Q,       KC_W,       KC_E,       KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,    KC_O,    KC_P,    KC_BSPC},
+  {SFT_TAB, 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_LGUI,    KC_RALT,    KC_LALT,    LOWER,  KC_SPC, KC_SPC, RAISE,  KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT}
 },
 
-/* Colemak
+/* Lower
  * ,-----------------------------------------------------------------------------------.
- * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | 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] = {
-  {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC},
-  {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 },
-  {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
-},
-
-/* Dvorak
- * ,-----------------------------------------------------------------------------------.
- * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+ * | Brite|      |      |      |      |      |      |      |      |      |   {  |   }  |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
- * `-----------------------------------------------------------------------------------'
- */
-[_DVORAK] = {
-  {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC},
-  {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 },
-  {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
-},
-
-/* Lower
- * ,-----------------------------------------------------------------------------------.
- * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * |      |      |      |      |      |      | Home | PgDwn| PgUp |  End |      |      |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |      |      |      |      |      |      |      |      |      |      |      |Insert|
+ * |      |      |      |      |      |      |      |      |      |      |   [  |   ]  |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Brite|      |      |      |      |             |      |      |      |      | Del  |
+ * |      |      |      |      |      |             |      | Home | PgDwn| PgUp | End  |
  * `-----------------------------------------------------------------------------------'
  */
 [_LOWER] = {
-  {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_HOME,KC_PGDN,KC_PGUP,KC_END,_______,_______},
-  {_______, _______,   _______,   _______,   _______,  _______,  _______,_______,_______,_______, _______, KC_INS},
-  {BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}
+  {_______, _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    KC_LPRN,  KC_RPRN},
+  {BACKLIT, _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    KC_LCBR,  KC_RCBR},
+  {_______, _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    KC_LBRC,  KC_RBRC},
+  {_______, _______,  _______,  _______,  _______,  _______,  _______,  _______,  KC_HOME,  KC_PGDN,    KC_PGUP,  KC_END}
 },
 
 /* Raise
  * ,-----------------------------------------------------------------------------------.
  * |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |  10  |   -  |   =  |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * |      |      |      |      |      |      | Left | Down |  Up  | Right|      |  `   |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |      |      |      |      |      | Mute | Vol+ | Vol- |      |      |      |Insert|
  * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      |      |      |      |      |             |      | Prev | Play | Next | Del  |
+ * |      |      |      |      |      |      |      |      |      |      |      |  `   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |   \  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
  * `-----------------------------------------------------------------------------------'
  */
 [_RAISE] = {
-  {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_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_GRV},
-  {_______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD, _______, _______, _______, KC_INS},
-  {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_DEL}
+  {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_GRV},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
 },
 
-/* Plover layer (http://opensteno.org)
+/* _MULTIMEDIA
  * ,-----------------------------------------------------------------------------------.
- * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * |      |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |TogOut|   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+ * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  | F10  | F11  | F12  |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Exit |      |      |   A  |   O  |             |   E  |   U  |      |      |      |
+ * |      |      |      |      |      |      |      |  Psc |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      | Mute | Vol+ | Vol- |      |      |      |Insert|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Prev | Play | Next |  Del |
  * `-----------------------------------------------------------------------------------'
  */
-
-[_PLOVER] = {
-  {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
-  {XXXXXXX, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC},
-  {XXXXXXX, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
-  {EXT_PLV, XXXXXXX, XXXXXXX, KC_C,    KC_V,    XXXXXXX, XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX}
+[_MULTIMEDIA] = {
+  {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_MUTE,    KC_VOLU,    KC_VOLD,    _______,    _______,    _______,    KC_INS},
+  {_______, _______,    _______,    _______,    _______,    _______,    _______,    _______,    KC_MPRV,    KC_MPLY,    KC_MNXT,    KC_DEL}
 },
 
+
 /* Adjust (Lower + Raise)
  * ,-----------------------------------------------------------------------------------.
  * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|      |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
  * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
  * |      |      |      |      |      |             |      |      |      |      |      |
@@ -161,7 +127,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 [_ADJUST] = {
   {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
-  {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  PLOVER,  _______},
+  {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  _______, _______, _______, _______},
   {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
 }
@@ -199,24 +165,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
       }
       return false;
       break;
-    case COLEMAK:
-      if (record->event.pressed) {
-        #ifdef AUDIO_ENABLE
-          PLAY_NOTE_ARRAY(tone_colemak, false, 0);
-        #endif
-        persistant_default_layer_set(1UL<<_COLEMAK);
-      }
-      return false;
-      break;
-    case DVORAK:
-      if (record->event.pressed) {
-        #ifdef AUDIO_ENABLE
-          PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
-        #endif
-        persistant_default_layer_set(1UL<<_DVORAK);
-      }
-      return false;
-      break;
     case LOWER:
       if (record->event.pressed) {
         layer_on(_LOWER);
@@ -248,34 +196,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
       }
       return false;
       break;
-    case PLOVER:
-      if (record->event.pressed) {
-        #ifdef AUDIO_ENABLE
-          stop_all_notes();
-          PLAY_NOTE_ARRAY(tone_plover, false, 0);
-        #endif
-        layer_off(_RAISE);
-        layer_off(_LOWER);
-        layer_off(_ADJUST);
-        layer_on(_PLOVER);
-        if (!eeconfig_is_enabled()) {
-            eeconfig_init();
-        }
-        keymap_config.raw = eeconfig_read_keymap();
-        keymap_config.nkro = 1;
-        eeconfig_update_keymap(keymap_config.raw);
-      }
-      return false;
-      break;
-    case EXT_PLV:
-      if (record->event.pressed) {
-        #ifdef AUDIO_ENABLE
-          PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
-        #endif
-        layer_off(_PLOVER);
-      }
-      return false;
-      break;
   }
   return true;
 }
@@ -311,4 +231,4 @@ void music_scale_user(void)
     PLAY_NOTE_ARRAY(music_scale, false, 0);
 }
 
-#endif
+#endif

二进制
keyboards/planck/keymaps/dbroqua/layout.png


+ 14 - 0
keyboards/planck/keymaps/dbroqua/readme.md

@@ -0,0 +1,14 @@
+# Dbroqua Layout
+
+![Layout](layout.png "Dbroqua Keymap")
+
+* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/e77306f9d14cc93fa26123b93b106474
+* Online keyboard layout editor (lower layer): http://www.keyboard-layout-editor.com/#/gists/786e03f6fbd274cb4f4e77a3d67f85fa
+* Online keyboard layout editor (raise layer): http://www.keyboard-layout-editor.com/#/gists/2e22c71f6910103c20d595d1caa713d6
+* Online keyboard layout editor (multimedia layer): http://www.keyboard-layout-editor.com/#/gists/132ebf8053508a7a81dfa8e0756edb40
+
+# Programming Instructions:
+Enter into programming mode and run the following command.
+```
+$ sudo KEYMAP=dbroqua make dfu
+```

+ 10 - 10
keyboards/planck/keymaps/pvc/keymap.c

@@ -166,9 +166,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * .-----------------------------------------------------------------------------------------------------------.
  * |        | $      | {      | [      | (      | %      | #      | )      | ]      | }      | @      | PG UP  |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * |        | ^      | *      | +      | -      | ;      | :      | _      | '      | "      | `      | PG DN  |
+ * |        | ^      | *      | +      | -      | /      | \      | _      | '      | "      | `      | PG DN  |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * |        | |      | &      | !      | ~      | /      | \      | =      | <      | >      | ?      | HOME   |
+ * |        | |      | &      | !      | ~      | ;      | :      | =      | <      | >      | ?      | HOME   |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
  * |        |        |        |        |        |        |        |        |        |        |        | END    |
  * '-----------------------------------------------------------------------------------------------------------'
@@ -176,27 +176,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
  [LAYER_LOWER]        = { // LOWER
   { _______, KC_DLR,  KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT,   KC_PGUP  },
-  { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SCLN, KC_COLN, KC_UNDS, KC_QUOT, KC_DQT,  KC_GRV,  KC_PGDN  },
-  { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SLSH, KC_BSLS, KC_EQL,  KC_LT,   KC_GT,   KC_QUES, KC_HOME  },
+  { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT,  KC_GRV,  KC_PGDN  },
+  { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL,  KC_LT,   KC_GT,   KC_QUES, KC_HOME  },
   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END   },
  },
 
 
 /* FUNCTION
  * .-----------------------------------------------------------------------------------------------------------.
- * | NUM LK | F1     | F2     | F3     | F4     | F5     | F6     | F7     | F8     | F9     | F10    | PAUSE  |
+ * | NUM LK | F13    | F14    | F15    | F16    | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | PAUSE  |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | CAP LK | F11    | F12    | F13    | F14    | F15    | F16    | F17    | F18    | F19    | F20    | PRINT  |
+ * | CAP LK | F17    | F18    | F19    | F20    | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | PRINT  |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MUTE   |
+ * | SCR LK | F21    | F22    | F23    | F24    | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MUTE   |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  * | LCTRL  | LWIN   | FN     | LALT   | UPPER  | PLAY   | PLAY   | LOWER  | VOL UP | VOL DN | NEXT   | PREV   |
  * '-----------------------------------------------------------------------------------------------------------'
  */
  [LAYER_FUNCTION]     = { // FUNCTION
-  { KC_NLCK, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_PAUS  },
-  { KC_CAPS, KC_F11,  KC_F12,  KC_F13,  KC_F14,  KC_F15,  KC_F16,  KC_F17,  KC_F18,  KC_F19,  KC_F20,  KC_PSCR  },
-  { KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE  },
+  { KC_NLCK, KC_F13,  KC_F14,  KC_F15,  KC_F16,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS  },
+  { KC_CAPS, KC_F17,  KC_F18,  KC_F19,  KC_F20,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR  },
+  { KC_SLCK, KC_F21,  KC_F22,  KC_F23,  KC_F24,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE  },
   { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT  },
  },
 

+ 76 - 0
keyboards/vision_division/Makefile

@@ -0,0 +1,76 @@
+
+
+# MCU name
+MCU = at90usb1286
+# MCU = at90usb1287
+# 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
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=1024
+
+
+# Build Options
+#   change yes to no to disable
+#
+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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality 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
+
+ifndef QUANTUM_DIR
+	include ../../Makefile
+endif
+
+

+ 84 - 0
keyboards/vision_division/Potential Layouts.txt

@@ -0,0 +1,84 @@
+/* Numeric Max / Numeric Normal - Full Grid
+ * .-----------------------------------.       .--------------------------------------------------------------_--------------------------------------------------------------.       .-----------------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+ * .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------+--------|
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * |--------+--------+--------+--------|   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------+--------|
+ * |        |        |        |        |   o   |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * |--------+--------+--------+--------|   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------+--------|
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------+--------|
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+ */
+
+//* Numeric Max / Homing Normal - Full Grid
+ * .-----------------------------------.       .--------------------------------------------------------------_--------------------------------------------------------------.       .--------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '--------------------------'
+ * .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .--------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------|
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * |--------+--------+--------+--------|   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------|
+ * |        |        |        |        |   o   |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * |--------+--------+--------+--------|   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------|
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------|
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '--------------------------'
+ */
+
+//* Numeric Max / Homing Normal - Traditional
+ * .-----------------------------------.       .-----------------------------------.        .-----------------_-----------------.        .-----------------------------------.       .--------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * '-----------------------------------'       '-----------------------------------'        '-----------------------------------'        '-----------------------------------'       '--------------------------'
+ * .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .--------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------|
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * |--------+--------+--------+        |   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       '--------+--------+--------'
+ * |        |        |        |        |   o   |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------|   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|                .--------.
+ * |        |        |        |        |       |                 |        |        |        |        |        |        |        |        |        |        |                 |                |        |
+ * |--------+--------+--------+        |       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       .--------+--------+--------.
+ * |                 |        |        |       |        |        |        |        |        |        |                 |        |        |        |        |        |        |       |        |        |        |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '--------------------------'
+ */
+
+/* Numeric Max / Numeric Normal
+ * .-----------------------------------.       .--------------------------------------------------------------_--------------------------------------------------------------.       .-----------------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+ * .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+ * |        |        |        |        |       |     1U / 2U     |        |        |        |        |        |        |        |        |        |        |     1U / 2U     |       |        |        |        |        |
+ * |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------+--------|
+ * |  1U    |        |        |  1U    |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |  1U    |        |        |  1U    |
+ * |  /     +--------+--------+  /     |   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |  /     +--------+--------+  /     |
+ * |  2U    |        |        |  2U    |   o   |     1U / 2U     |        |        |        |        |        |        |        |        |        |        |                 |       |  2U    |        |        |  2U    |
+ * |--------+--------+--------+--------|   o   |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|       |--------+--------+--------+--------|
+ * |        |        |        |        |       |     1U / 2U     |        |        |        |        |        |        |        |        |        |        |     1U / 2U     |       |        |        |        |        |
+ * |        '--------+--------'        |       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |        '--------+--------'        |
+ * |  1U / 2UH / 2UV |  1U / 2UH / 2UV |       |        |        |        |        |        |        |     1U / 2U     |        |        |        |        |        |        |       |  1U / 2UH / 2UV |  1U / 2UH / 2UV |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+ */
+
+/* Numeric Max / Numeric Max
+ * .-----------------------------------.       .-----------------------------------------------------------------------_-----------------------------------------------------------------------.       .-----------------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+ * .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+ * |        |        |        |        |       |     1U / 2U     |        |        |        |        |        |        |        |        |        |        |        |        |     1U / 2U     |       |        |        |        |        |
+ * |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------+--------|
+ * |  1U    |        |        |  1U    |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |  1U    |        |        |  1U    |
+ * |  /     +--------+--------+  /     |   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |  /     +--------+--------+  /     |
+ * |  2U    |        |        |  2U    |   o   |     1U / 2U     |        |        |        |        |        |        |        |        |        |        |        |        |                 |       |  2U    |        |        |  2U    |
+ * |--------+--------+--------+--------|   o   |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|       |--------+--------+--------+--------|
+ * |        |        |        |        |       |     1U / 2U     |        |        |        |        |        |        |        |        |        |        |        |        |     1U / 2U     |       |        |        |        |        |
+ * |        '--------+--------'        |       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |        '--------+--------'        |
+ * |  1U / 2UH / 2UV |  1U / 2UH / 2UV |       |        |        |        |        |        |        |     1U / 2U     |     1U / 2U     |        |        |        |        |        |        |       |  1U / 2UH / 2UV |  1U / 2UH / 2UV |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+ */

+ 139 - 0
keyboards/vision_division/config.h

@@ -0,0 +1,139 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+// Due to the configurability of this keyboard, matrix sizes are determined in the keymap's config.h
+
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#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)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1          H
+//#define MAGIC_KEY_HELP2          SLASH
+//#define MAGIC_KEY_DEBUG          D
+//#define MAGIC_KEY_DEBUG_MATRIX   X
+//#define MAGIC_KEY_DEBUG_KBD      K
+//#define MAGIC_KEY_DEBUG_MOUSE    M
+//#define MAGIC_KEY_VERSION        V
+//#define MAGIC_KEY_STATUS         S
+//#define MAGIC_KEY_CONSOLE        C
+//#define MAGIC_KEY_LAYER0_ALT1    ESC
+//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
+//#define MAGIC_KEY_LAYER0         0
+//#define MAGIC_KEY_LAYER1         1
+//#define MAGIC_KEY_LAYER2         2
+//#define MAGIC_KEY_LAYER3         3
+//#define MAGIC_KEY_LAYER4         4
+//#define MAGIC_KEY_LAYER5         5
+//#define MAGIC_KEY_LAYER6         6
+//#define MAGIC_KEY_LAYER7         7
+//#define MAGIC_KEY_LAYER8         8
+//#define MAGIC_KEY_LAYER9         9
+//#define MAGIC_KEY_BOOTLOADER     PAUSE
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_NKRO           N
+//#define MAGIC_KEY_SLEEP_LED      Z
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif

+ 21 - 0
keyboards/vision_division/keymaps/default/Makefile

@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+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           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+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.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+	include ../../../../Makefile
+endif

+ 59 - 0
keyboards/vision_division/keymaps/default/config.h

@@ -0,0 +1,59 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+#include "matrix_types.h"
+
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      GET_PID(NUMERIC_NORMAL, HOMING_MAX_TEENSY)
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    IBNobody
+#define PRODUCT         Vision Division
+#define DESCRIPTION     Full / Split Keyboard
+
+
+#define MATRIX_ROWS 6
+#define MATRIX_ROW_PINS { C2, C3, F4, F5, F6, F7 }
+
+#define MATRIX_COLS GET_MATRIX_COLS(NUMERIC_NORMAL, HOMING_MAX_TEENSY)
+#define MATRIX_COL_PINS GET_MATRIX_COL_PINS(NUMERIC_NORMAL, HOMING_MAX_TEENSY)
+
+#define UNUSED_PINS
+
+/*#define KEYMAP( \
+      k101, k102, k103, k104,       k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118,       k119, k11A, k11B, k11C, \
+      k201, k202, k203, k204,       k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218,       k219, k21A, k21B, k21C, \
+      k301, k302, k303, k304,       k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318,       k319, k31A, k31B, k31C, \
+      k401, k402, k403, k404,       k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418,       k419, k41A, k41B, k41C, \
+      k501, k502, k503, k504,       k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518,       k519, k51A, k51B, k51C, \
+      k601, k602, k603, k604,       k605, k606, k607, k608, k609, k60A, k60B, k60C, k611, k612, k613, k614, k615, k616, k617, k618,       k619, k61A, k61B, k61C  \
+) \
+KEYMAP_MASTER(NUMERIC_MAX_TEENSY, NUMERIC_MAX, \
+      k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \
+      k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \
+      k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \
+      k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \
+      k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \
+      k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k60B, k60C, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C  \
+)*/
+
+#define KEYMAP( \
+      k101, k102, k103, k104,       k105, k106, k107, k108, k109, k10A, k111, k112, k113, k114, k115, k116, k117, k118,       k119, k11A, k11B, \
+      k201, k202, k203, k204,       k205, k206, k207, k208, k209, k20A, k211, k212, k213, k214, k215, k216, k217, k218,       k219, k21A, k21B, \
+      k301, k302, k303, k304,       k305, k306, k307, k308, k309, k30A, k311, k312, k313, k314, k315, k316, k317, k318,       k319, k31A, k31B, \
+      k401, k402, k403, k404,       k405, k406, k407, k408, k409, k40A, k411, k412, k413, k414, k415, k416, k417, k418,       k419, k41A, k41B, \
+      k501, k502, k503, k504,       k505, k506, k507, k508, k509, k50A, k511, k512, k513, k514, k515, k516, k517, k518,       k519, k51A, k51B, \
+      k601, k602, k603, k604,       k605, k606, k607, k608, k609, k60A, k611, k612, k613, k614, k615, k616, k617, k618,       k619, k61A, k61B  \
+) \
+KEYMAP_MASTER(NUMERIC_NORMAL, HOMING_MAX_TEENSY, \
+      k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, KC_NO, KC_NO, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, KC_NO, \
+      k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, KC_NO, KC_NO, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, KC_NO, \
+      k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, KC_NO, KC_NO, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, KC_NO, \
+      k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, KC_NO, KC_NO, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, KC_NO, \
+      k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, KC_NO, KC_NO, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, KC_NO, \
+      k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, KC_NO, KC_NO, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, KC_NO  \
+)
+
+#endif

+ 630 - 0
keyboards/vision_division/keymaps/default/keymap.c

@@ -0,0 +1,630 @@
+#include "vision_division.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#include "led.h"
+
+#ifdef AUDIO_ENABLE
+    #include "audio.h"
+    #include "song_list.h"
+#endif
+
+#define LAYER_QWERTY                     0
+#define LAYER_COLEMAK                    1
+#define LAYER_DVORAK                     2
+#define LAYER_UPPER                      3
+#define LAYER_LOWER                      4
+#define LAYER_FUNCTION                   5
+#define LAYER_MOUSE                      6
+#define LAYER_ADJUST                     7
+
+#define MACRO_QWERTY                     0
+#define MACRO_COLEMAK                    1
+#define MACRO_DVORAK                     2
+#define MACRO_UPPER                      3
+#define MACRO_LOWER                      4
+#define MACRO_FUNCTION                   5
+#define MACRO_MOUSE                      6
+#define MACRO_TIMBRE_1                   7
+#define MACRO_TIMBRE_2                   8
+#define MACRO_TIMBRE_3                   9
+#define MACRO_TIMBRE_4                  10
+#define MACRO_TEMPO_U                   11
+#define MACRO_TEMPO_D                   12
+#define MACRO_TONE_DEFAULT              13
+#define MACRO_MUSIC_TOGGLE              14
+#define MACRO_AUDIO_TOGGLE              16
+#define MACRO_INC_VOICE                 18
+#define MACRO_DEC_VOICE                 19
+#define MACRO_BACKLIGHT                 20
+#define MACRO_BREATH_TOGGLE             21
+#define MACRO_BREATH_SPEED_INC          23
+#define MACRO_BREATH_SPEED_DEC          24
+#define MACRO_BREATH_DEFAULT            25
+
+#define M_QWRTY             M(MACRO_QWERTY)
+#define M_COLMK             M(MACRO_COLEMAK)
+#define M_DVORK             M(MACRO_DVORAK)
+#define M_UPPER             M(MACRO_UPPER)
+#define M_LOWER             M(MACRO_LOWER)
+#define M_FUNCT             M(MACRO_FUNCTION)
+#define M_MOUSE             M(MACRO_MOUSE)
+#define TIMBR_1             M(MACRO_TIMBRE_1)
+#define TIMBR_2             M(MACRO_TIMBRE_2)
+#define TIMBR_3             M(MACRO_TIMBRE_3)
+#define TIMBR_4             M(MACRO_TIMBRE_4)
+#define TMPO_UP             M(MACRO_TEMPO_U)
+#define TMPO_DN             M(MACRO_TEMPO_D)
+#define TMPO_DF             M(MACRO_TONE_DEFAULT)
+#define M_BACKL             M(MACRO_BACKLIGHT)
+#define M_BRTOG             M(MACRO_BREATH_TOGGLE)
+#define M_BSPDU             M(MACRO_BREATH_SPEED_INC)
+#define M_BSPDD             M(MACRO_BREATH_SPEED_DEC)
+#define M_BDFLT             M(MACRO_BREATH_DEFAULT)
+
+
+#define VC_UP               M(MACRO_INC_VOICE)
+#define VC_DOWN             M(MACRO_DEC_VOICE)
+
+
+#define SC_UNDO             LCTL(KC_Z)
+#define SC_REDO             LCTL(KC_Y)
+#define SC_CUT              LCTL(KC_X)
+#define SC_COPY             LCTL(KC_C)
+#define SC_PSTE             LCTL(KC_V)
+#define SC_SELA             LCTL(KC_A)
+#define SC_SAVE             LCTL(KC_S)
+#define SC_OPEN             LCTL(KC_O)
+#define SC_ACLS             LALT(KC_F4)
+#define SC_CCLS             LCTL(KC_F4)
+
+#define OS_SHFT             KC_FN0
+
+#define _______             KC_TRNS
+#define XXXXXXX             KC_NO
+#define ________________    _______, _______
+#define XXXXXXXXXXXXXXXX    XXXXXXX, XXXXXXX
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+KEYMAP( \
+      KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX,       KC_F1,   KC_F2,   KC_F3,   KC_F4,   XXXXXXX, KC_F5,   KC_F6,   KC_F7,   KC_F8,   XXXXXXX, KC_F9,   KC_F10,  KC_F11,  KC_F12,        KC_PSCR, KC_SLCK, KC_PAUS, \
+      KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,       KC_ESC,  KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_EQL,  KC_BSPC,       KC_INS,  KC_HOME, KC_PGUP, \
+      KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS,       KC_TAB,  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_MINS, KC_BSLS,       KC_DEL,  KC_END,  KC_PGDN, \
+      KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS,       KC_CAPS, KC_BSPC, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,        XXXXXXX, XXXXXXX, XXXXXXX, \
+      KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT,       KC_LSFT, 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_RSFT,       XXXXXXX, KC_UP,   XXXXXXX, \
+      KC_KP_0, KC_KP_0, KC_PDOT, KC_PENT,       KC_LCTL, KC_LCTL, XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, KC_SPC,  KC_SPC,  XXXXXXX, OS_SHFT, KC_RALT, KC_APP,  KC_RCTL, KC_RCTL,       KC_LEFT, KC_DOWN, KC_RGHT  \
+)
+
+
+//  [LAYER_QWERTY]       = { // QWERTY
+//   { KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, KC_BSPC  },
+//   { KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL   },
+//   { KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,  KC_ENT,  KC_PGUP  },
+//   { KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,   KC_PGDN  },
+//   { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC,  KC_SPC,  M_LOWER, OS_SHFT, KC_RALT, KC_APP,  KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT  },
+//  },
+
+
+// /* Numeric Max / Homing Normal - Traditional
+//  * .-----------------------------------.       .-----------------------------------.        .-----------------_-----------------.        .-----------------------------------.       .--------------------------.
+//  * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+//  * '-----------------------------------'       '-----------------------------------'        '-----------------------------------'        '-----------------------------------'       '--------------------------'
+//  * .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .--------------------------.
+//  * |        |        |        |        |       | ESC    | ESC    | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | -      |        |       |        |        |        |
+//  * |--------+--------+--------+--------|       | -------+ -------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------|
+//  * |        |        |        |        |       | TAB    | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | [      |        |       |        |        |        |
+//  * |--------+--------+--------+        |   o   | -------+ -------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       '--------+--------+--------'
+//  * |        |        |        |        |   o   | CAPS   | CAPS   | A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      |        |
+//  * |--------+--------+--------+--------|   o   | -------+ -------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---+--------|                .--------.
+//  * |        |        |        |        |       | LSHIFT | LSHIFT | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      | XXXXXX |        |                |        |
+//  * |--------+--------+--------+        |       | -------+ -------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+--------+--------|       .--------+--------+--------.
+//  * |                 |        |        |       | LCTRL  | LCTRL  | LWIN   | FN     | LALT   | UPPER  | XXXXXX . SPACE  | LOWER  | SHIFT  | RALT   | APP    | RCTRL  |        |       |        |        |        |
+//  * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '--------------------------'
+//  */
+
+
+// /* QWERTY
+//  * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
+//  * | ESC    | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | -      | =      | XXXXXX . BACKSP |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+//  * | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | [      | ]      | \      | DEL    |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
+//  * | CAPS   | A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      | XXXXXX . ENTER  | PG UP  |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
+//  * | LSHIFT | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      | XXXXXX . RSHIFT | UP     | PG DN  |
+//  * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
+//  * | LCTRL  | LWIN   | FN     | LALT   | UPPER  | XXXXXX . SPACE  | LOWER  | SHIFT  | RALT   | APP    | RCTRL  | LEFT   | DOWN   | RIGHT  |
+//  * '--------------------------------------------------------------------------------------------------------------------------------------'
+//  */
+
+//  [LAYER_QWERTY]       = { // QWERTY
+//   { KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, KC_BSPC  },
+//   { KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL   },
+//   { KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,  KC_ENT,  KC_PGUP  },
+//   { KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,   KC_PGDN  },
+//   { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC,  KC_SPC,  M_LOWER, OS_SHFT, KC_RALT, KC_APP,  KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT  },
+//  },
+
+//  /* COLEMAK
+//  * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
+//  * | ESC    | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | -      | =      | XXXXXX . BACKSP |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+//  * | TAB    | Q      | W      | F      | P      | G      | J      | L      | U      | Y      | ;      | [      | ]      | \      | DEL    |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
+//  * | BACKSP | A      | R      | S      | T      | D      | H      | N      | E      | I      | O      | '      | XXXXXX . ENTER  | PG UP  |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
+//  * | LSHIFT | Z      | X      | C      | V      | B      | K      | M      | ,      | .      | /      | XXXXXX . RSHIFT | UP     | PG DN  |
+//  * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
+//  * | LCTRL  | LWIN   | FN     | LALT   | UPPER  | XXXXXX . SPACE  | LOWER  | SHIFT  | RALT   | APP    | RCTRL  | LEFT   | DOWN   | RIGHT  |
+//  * '--------------------------------------------------------------------------------------------------------------------------------------'
+//  */
+
+//  [LAYER_COLEMAK]      = { // COLEMAK
+//   { KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, KC_BSPC  },
+//   { KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL   },
+//   { KC_BSPC, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT, KC_ENT,  KC_ENT,  KC_PGUP  },
+//   { KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,   KC_PGDN  },
+//   { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC,  KC_SPC,  M_LOWER, OS_SHFT, KC_RALT, KC_APP,  KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT  },
+// },
+
+// /* DVORAK
+//  * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
+//  * | ESC    | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | [      | ]      | XXXXXX . BACKSP |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+//  * | TAB    | '      | ,      | .      | P      | Y      | F      | G      | C      | R      | L      | /      | =      | \      | DEL    |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
+//  * | CAPS   | A      | O      | E      | U      | I      | D      | H      | T      | N      | S      | -      | XXXXXX . ENTER  | PG UP  |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
+//  * | LSHIFT | ;      | Q      | J      | K      | X      | B      | M      | W      | V      | Z      | XXXXXX . RSHIFT | UP     | PG DN  |
+//  * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
+//  * | LCTRL  | LWIN   | FN     | LALT   | UPPER  | XXXXXX . SPACE  | LOWER  | SHIFT  | RALT   | APP    | RCTRL  | LEFT   | DOWN   | RIGHT  |
+//  * '--------------------------------------------------------------------------------------------------------------------------------------'
+//  */
+
+//  [LAYER_DVORAK]       = { // DVORAK
+//   { KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_LBRC, KC_RBRC, KC_BSPC, 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_SLSH, KC_EQL,  KC_BSLS, KC_DEL   },
+//   { KC_CAPS, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_MINS, KC_ENT,  KC_ENT,  KC_PGUP  },
+//   { KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_RSFT, KC_RSFT, KC_UP,   KC_PGDN  },
+//   { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC,  KC_SPC,  M_LOWER, OS_SHFT, KC_RALT, KC_APP,  KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT  },
+//  },
+
+// /* UPPER
+//  * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
+//  * | PRINT  | BR TOG | BR SP+ | BR SP- | BR RST | XXXXXX | XXXXXX | NUM LK | /      | *      |        | NUM LK | SCR LK | XXXXXX . PAUSE  |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+//  * |        | F1     | F2     | F3     | F4     |        |        | 7      | 8      | 9      | -      |        |        |        | INS    |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
+//  * | CAP LK | F5     | F6     | F7     | F8     |        |        | 4      | 5      | 6      | +      |        | XXXXXX .        | HOME   |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
+//  * |        | F9     | F10    | F11    | F12    |        |        | 1      | 2      | 3      | ENTER  | XXXXXX .        |        | END    |
+//  * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
+//  * |        |        |        |        |        | 0               |        | RALT   | .      | ENTER  |        |        |        |        |
+//  * '--------------------------------------------------------------------------------------------------------------------------------------'
+//  */
+
+//  [LAYER_UPPER]        = { // UPPER
+//   { KC_PSCR, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, XXXXXXX, XXXXXXX, KC_SLCK, KC_PAUS, KC_PAUS  },
+//   { _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS   },
+//   { KC_CAPS, KC_F5,   KC_F6,   KC_F7,   KC_F8,   XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, ________________, KC_HOME  },
+//   { _______, KC_F9,   KC_F10,  KC_F11,  KC_F12,  XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, ________________, _______, KC_END   },
+//   { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______  },
+//  },
+
+// /* LOWER
+//  * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
+//  * |        | F1     | F2     | F3     | F4     | F5     | F6     | F7     | F8     | F9     | F10    | F11    | F12    | XXXXXX . BACKSP |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+//  * |        | $      | {      | [      | (      | %      | #      | )      | ]      | }      | @      |        |        |        | INS    |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
+//  * |        | ^      | *      | +      | -      | /      | \      | _      | '      | "      | `      |        | XXXXXX .        | HOME   |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
+//  * |        | |      | &      | !      | ~      | ;      | :      | =      | <      | >      | ?      | XXXXXX .        |        | END    |
+//  * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
+//  * |        |        |        |        |        |                 |        |        |        |        |        |        |        |        |
+//  * '--------------------------------------------------------------------------------------------------------------------------------------'
+//  */
+
+//  [LAYER_LOWER]        = { // LOWER
+//   { _______, 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_DLR,  KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT,   _______, _______, _______, KC_INS   },
+//   { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT,  KC_GRV,  _______, ________________, KC_HOME  },
+//   { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL,  KC_LT,   KC_GT,   KC_QUES, ________________, _______, KC_END   },
+//   { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______  },
+//  },
+
+// /* FUNCTION
+//  * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
+//  * | NUM LK |        |        |        |        |        |        |        |        |        |        |        |        | XXXXXX .        |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+//  * | SCR LK | F13    | F14    | F15    | F16    |        |        |        |        |        |        |        |        |        |        |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
+//  * | CAP LK | F17    | F18    | F19    | F20    |        |        |        |        |        |        |        | XXXXXX .        |        |
+//  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
+//  * |        | F21    | F22    | F23    | F24    |        |        |        |        |        |        | XXXXXX .        | VOL UP | MUTE   |
+//  * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
+//  * |        |        |        |        |        | PLAY/PAUSE      |        |        |        |        |        | PTRACK | VOL DN | NTRACK |
+//  * '--------------------------------------------------------------------------------------------------------------------------------------'
+//  */
+
+//  [LAYER_FUNCTION]     = { // FUNCTION
+//   { KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX  },
+//   { KC_SLCK, KC_F13,  KC_F14,  KC_F15,  KC_F16,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX  },
+//   { KC_CAPS, KC_F17,  KC_F18,  KC_F19,  KC_F20,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXX  },
+//   { _______, KC_F21,  KC_F22,  KC_F23,  KC_F24,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_VOLU, KC_MUTE  },
+//   { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT  },
+//  },
+
+// #ifdef MOUSEKEY_ENABLE
+
+//  [LAYER_MOUSE]        = { // MOUSE
+//   { _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX  },
+//   { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX  },
+//   { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U  },
+//   { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_MS_U, KC_WH_D  },
+//   { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R  },
+//  },
+
+// #endif
+
+//  [LAYER_ADJUST]       = { // ADJUST
+//   { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MU_TOG,  AU_TOG,  ________________  },
+//   { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  },
+//   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______  },
+//   { _______, _______, _______, _______, M_BACKL, RESET,   _______, M_MOUSE, _______, _______, _______, ________________, MUV_IN,  _______  },
+//   { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, MUV_DE,  _______  },
+//  },
+
+
+// /*
+//  [LAYER_EMPTY]        = { // LAYER
+//   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________  },
+//   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  },
+//   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______  },
+//   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, _______  },
+//   { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______  },
+//  },
+// */
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_my_startup[][2] = SONG(ODE_TO_JOY);
+float tone_my_goodbye[][2] = SONG(ROCK_A_BYE_BABY);
+
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+
+float tone_audio_on[][2]   = SONG(CLOSE_ENCOUNTERS_5_NOTE);
+float tone_music_on[][2]   = SONG(DOE_A_DEER);
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+float tone_caps_on[][2]    = SONG(CAPS_LOCK_ON_SOUND);
+float tone_caps_off[][2]   = SONG(CAPS_LOCK_OFF_SOUND);
+float tone_numlk_on[][2]   = SONG(NUM_LOCK_ON_SOUND);
+float tone_numlk_off[][2]  = SONG(NUM_LOCK_OFF_SOUND);
+float tone_scroll_on[][2]  = SONG(SCROLL_LOCK_ON_SOUND);
+float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND);
+
+#endif /* AUDIO_ENABLE */
+
+void persistant_default_layer_set(uint16_t default_layer)
+{
+    eeconfig_update_default_layer(default_layer);
+    default_layer_set(default_layer);
+}
+
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_MODS_ONESHOT(MOD_LSFT),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+
+    // MACRODOWN only works in this function
+    switch(id)
+    {
+
+        // case MACRO_BREATH_TOGGLE:
+        //     if (record->event.pressed)
+        //     {
+        //         breathing_toggle();
+        //     }
+        //     break;
+
+        // case MACRO_BREATH_SPEED_INC:
+        //     if (record->event.pressed)
+        //     {
+        //         breathing_speed_inc(1);
+        //     }
+        //     break;
+
+        // case MACRO_BREATH_SPEED_DEC:
+        //     if (record->event.pressed)
+        //     {
+        //         breathing_speed_dec(1);
+        //     }
+        //     break;
+
+        // case MACRO_BREATH_DEFAULT:
+        //     if (record->event.pressed)
+        //     {
+        //         breathing_defaults();
+        //     }
+        //     break;
+
+        case MACRO_QWERTY:
+            if (record->event.pressed)
+            {
+                persistant_default_layer_set(1UL<<LAYER_QWERTY);
+                #ifdef AUDIO_ENABLE
+                    PLAY_NOTE_ARRAY(tone_qwerty, false, STACCATO);
+                #endif /* AUDIO_ENABLE */
+            }
+            break;
+
+        case MACRO_COLEMAK:
+            if (record->event.pressed)
+            {
+                persistant_default_layer_set(1UL<<LAYER_COLEMAK);
+                #ifdef AUDIO_ENABLE
+                    PLAY_NOTE_ARRAY(tone_colemak, false, STACCATO);
+                #endif /* AUDIO_ENABLE */
+            }
+            break;
+
+        case MACRO_DVORAK:
+            if (record->event.pressed)
+            {
+                persistant_default_layer_set(1UL<<LAYER_DVORAK);
+                #ifdef AUDIO_ENABLE
+                    PLAY_NOTE_ARRAY(tone_dvorak, false, STACCATO);
+                #endif /* AUDIO_ENABLE */
+            }
+            break;
+
+        case MACRO_UPPER:
+            if (record->event.pressed)
+            {
+                layer_on(LAYER_UPPER);
+                // breathing_speed_set(2);
+                // breathing_pulse();
+                update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+            }
+            else
+            {
+                layer_off(LAYER_UPPER);
+                update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+            }
+            break;
+
+        case MACRO_LOWER:
+            if (record->event.pressed)
+            {
+                layer_on(LAYER_LOWER);
+                // breathing_speed_set(2);
+                // breathing_pulse();
+                update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+            }
+            else
+            {
+                layer_off(LAYER_LOWER);
+                update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+            }
+            break;
+
+        case MACRO_FUNCTION:
+            if (record->event.pressed)
+            {
+                // breathing_speed_set(3);
+                // breathing_enable();
+                layer_on(LAYER_FUNCTION);
+            }
+            else
+            {
+                // breathing_speed_set(1);
+                // breathing_self_disable();
+                layer_off(LAYER_FUNCTION);
+            }
+            break;
+
+#ifdef MOUSEKEY_ENABLE
+
+        case MACRO_MOUSE:
+            if (record->event.pressed)
+            {
+                layer_invert(LAYER_MOUSE);
+            }
+            break;
+
+#endif /* MOUSEKEY_ENABLE */
+
+#ifdef AUDIO_ENABLE
+
+        case MACRO_TIMBRE_1:
+            if (record->event.pressed) set_timbre(TIMBRE_12);
+            break;
+
+        case MACRO_TIMBRE_2:
+            if (record->event.pressed) set_timbre(TIMBRE_25);
+            break;
+
+        case MACRO_TIMBRE_3:
+            if (record->event.pressed) set_timbre(TIMBRE_50);
+            break;
+
+        case MACRO_TIMBRE_4:
+            if (record->event.pressed) set_timbre(TIMBRE_75);
+            break;
+
+        case MACRO_TEMPO_U:
+            if (record->event.pressed) increase_tempo(10);
+            break;
+
+        case MACRO_TEMPO_D:
+            if (record->event.pressed) decrease_tempo(10);
+            break;
+
+        case MACRO_TONE_DEFAULT:
+            if (record->event.pressed)
+            {
+                set_timbre(TIMBRE_DEFAULT);
+                set_tempo(TEMPO_DEFAULT);
+            }
+            break;
+
+/*
+        case MACRO_AUDIO_TOGGLE:
+            if (record->event.pressed)
+            {
+                    if (is_audio_on())
+                    {
+                        audio_off();
+                    }
+                    else
+                    {
+                        audio_on();
+                        PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO);
+                    }
+            }
+            break;
+
+        case MACRO_MUSIC_TOGGLE:
+            if (record->event.pressed)
+            {
+                    if (IS_LAYER_ON(LAYER_MUSIC))
+                    {
+                        layer_off(LAYER_MUSIC);
+                        stop_all_notes();
+                    }
+                    else
+                    {
+                    PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO);
+                    layer_on(LAYER_MUSIC);
+                    }
+            }
+            break;
+        case MACRO_INC_VOICE:
+            if (record->event.pressed)
+            {
+                #ifdef AUDIO_ENABLE
+                    voice_iterate();
+                    PLAY_NOTE_ARRAY(music_scale, false, STACCATO);
+                #endif
+            }
+            break;
+
+        case MACRO_DEC_VOICE:
+            if (record->event.pressed)
+            {
+                #ifdef AUDIO_ENABLE
+                    voice_deiterate();
+                    PLAY_NOTE_ARRAY(music_scale, false, STACCATO);
+                #endif
+            }
+            break;
+*/
+
+#endif /* AUDIO_ENABLE */
+
+#ifdef BACKLIGHT_ENABLE
+        case MACRO_BACKLIGHT:
+            if (record->event.pressed)
+            {
+                backlight_step();
+            }
+#endif
+
+        default:
+            break;
+
+    }
+    return MACRO_NONE;
+};
+
+
+#ifdef AUDIO_ENABLE
+
+void matrix_init_user(void)
+{
+    set_voice(default_voice);
+    startup_user();
+    println("Matrix Init");
+}
+
+void led_set_user(uint8_t usb_led)
+{
+    static uint8_t old_usb_led = 0;
+
+    _delay_ms(10); // gets rid of tick
+
+    if (!is_playing_notes())
+    {
+        if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK)))
+        {
+                // If CAPS LK LED is turning on...
+                PLAY_NOTE_ARRAY(tone_caps_on,  false, LEGATO);
+        }
+        else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK)))
+        {
+                // If CAPS LK LED is turning off...
+                PLAY_NOTE_ARRAY(tone_caps_off, false, LEGATO);
+        }
+        else if ((usb_led & (1<<USB_LED_NUM_LOCK)) && !(old_usb_led & (1<<USB_LED_NUM_LOCK)))
+        {
+                // If NUM LK LED is turning on...
+                PLAY_NOTE_ARRAY(tone_numlk_on,  false, LEGATO);
+        }
+        else if (!(usb_led & (1<<USB_LED_NUM_LOCK)) && (old_usb_led & (1<<USB_LED_NUM_LOCK)))
+        {
+                // If NUM LED is turning off...
+                PLAY_NOTE_ARRAY(tone_numlk_off, false, LEGATO);
+        }
+        else if ((usb_led & (1<<USB_LED_SCROLL_LOCK)) && !(old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
+        {
+                // If SCROLL LK LED is turning on...
+                PLAY_NOTE_ARRAY(tone_scroll_on,  false, LEGATO);
+        }
+        else if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)) && (old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
+        {
+                // If SCROLL LED is turning off...
+                PLAY_NOTE_ARRAY(tone_scroll_off, false, LEGATO);
+        }
+    }
+
+    old_usb_led = usb_led;
+}
+
+
+void startup_user()
+{
+    _delay_ms(10); // gets rid of tick
+    PLAY_NOTE_ARRAY(tone_my_startup, false, STACCATO);
+}
+
+void shutdown_user()
+{
+    PLAY_NOTE_ARRAY(tone_my_goodbye, false, STACCATO);
+    _delay_ms(2000);
+    stop_all_notes();
+}
+
+void audio_on_user(void)
+{
+  PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO);
+}
+
+void music_on_user(void)
+{
+  PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO);
+}
+
+void music_scale_user(void)
+{
+  PLAY_NOTE_ARRAY(music_scale, false, STACCATO);
+}
+
+#endif /* AUDIO_ENABLE */

+ 1 - 0
keyboards/vision_division/keymaps/default/readme.md

@@ -0,0 +1 @@
+# The default keymap for vision_division

+ 167 - 0
keyboards/vision_division/matrix_types.h

@@ -0,0 +1,167 @@
+#ifndef MATRIX_TYPES_H
+#define MATRIX_TYPES_H
+
+// Because the vision/division keyboard allows for multiple PCB configurations, the configuration
+// can get tricky. The PCB itself has 12 columns, but to achieve a full sized 14-column keyboard
+// with a 4-column numeric pad on the left and a 3-column homing key cluster on the right, the
+// right PCB must have its rightmost column cut off. Also either the rightmost two columns on the
+// left PCB or the leftmost two columns on the right PCB need to be cut away.
+//
+//                          _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+// Left Numeric Max       = 1 2 3 4 _ 5 6 7 8 9 0 A B C
+// Left Homing Max        =   2 3 4 _ 5 6 7 8 9 0 A B C
+// Left Numeric Extended  = 1 2 3 4 _ 5 6 7 8 9 0 A B
+// Left Homing Extended   =   2 3 4 _ 5 6 7 8 9 0 A B
+// Left Numeric Normal    = 1 2 3 4 _ 5 6 7 8 9 0 A
+// Left Homing Normal     =   2 3 4 _ 5 6 7 8 9 0 A
+// Right Numeric Max      =                             1 2 3 4 5 6 7 8 _ 9 A B C
+// Right Homing Max       =                             1 2 3 4 5 6 7 8 _ 9 A B
+// Right Numeric Extended =                               2 3 4 5 6 7 8 _ 9 A B C
+// Right Homing Extended  =                               2 3 4 5 6 7 8 _ 9 A B
+// Right Numeric Normal   =                                 3 4 5 6 7 8 _ 9 A B C
+// Right Homing Normal    =                                 3 4 5 6 7 8 _ 9 A B
+//
+//
+// A full keyboard would look like this:
+//
+// _Left_Numeric_Max__________|_Right_Homing_Normal
+// 1 2 3 4 _ 5 6 7 8 9 0 A B C|3 4 5 6 7 8 _ 9 A B
+//
+// The ideal full keyboard would use a normal and max rather than two extended because the max
+// size allows for a centered 2U space key.
+
+
+#define MATRIX_TYPE_ABSENT                      0
+#define MATRIX_TYPE_NUMERIC_MAX                 1
+#define MATRIX_TYPE_HOMING_MAX                  2
+#define MATRIX_TYPE_NUMERIC_EXTENDED            3
+#define MATRIX_TYPE_HOMING_EXTENDED             4
+#define MATRIX_TYPE_NUMERIC_NORMAL              5
+#define MATRIX_TYPE_HOMING_NORMAL               6
+#define MATRIX_TYPE_NUMERIC_MAX_TEENSY          7
+#define MATRIX_TYPE_HOMING_MAX_TEENSY           8
+#define MATRIX_TYPE_NUMERIC_EXTENDED_TEENSY     9
+#define MATRIX_TYPE_HOMING_EXTENDED_TEENSY      10
+#define MATRIX_TYPE_NUMERIC_NORMAL_TEENSY       11
+#define MATRIX_TYPE_HOMING_NORMAL_TEENSY        12
+
+
+// Column Length
+
+#define MATRIX_COLS_ABSENT                       0
+#define MATRIX_COLS_NUMERIC_MAX                 12
+#define MATRIX_COLS_HOMING_MAX                  11
+#define MATRIX_COLS_NUMERIC_EXTENDED            11
+#define MATRIX_COLS_HOMING_EXTENDED             10
+#define MATRIX_COLS_NUMERIC_NORMAL              10
+#define MATRIX_COLS_HOMING_NORMAL                9
+#define MATRIX_COLS_NUMERIC_MAX_TEENSY          12
+#define MATRIX_COLS_HOMING_MAX_TEENSY           11
+#define MATRIX_COLS_NUMERIC_EXTENDED_TEENSY     11
+#define MATRIX_COLS_HOMING_EXTENDED_TEENSY      10
+#define MATRIX_COLS_NUMERIC_NORMAL_TEENSY       10
+#define MATRIX_COLS_HOMING_NORMAL_TEENSY         9
+
+// Left PCB Pin assignments
+
+#define MATRIX_COL_PINS_LEFT_ABSENT
+
+#define MATRIX_COL_PINS_LEFT_NUMERIC_MAX                 C7, C5, C4, A7, A3, A6, A2, A5, A1, A0, A4, E6
+#define MATRIX_COL_PINS_LEFT_HOMING_MAX                      C5, C4, A7, A3, A6, A2, A5, A1, A0, A4, E6
+#define MATRIX_COL_PINS_LEFT_NUMERIC_EXTENDED            C7, C5, C4, A7, A3, A6, A2, A5, A1, A0, A4
+#define MATRIX_COL_PINS_LEFT_HOMING_EXTENDED                 C5, C4, A7, A3, A6, A2, A5, A1, A0, A4
+#define MATRIX_COL_PINS_LEFT_NUMERIC_NORMAL              C7, C5, C4, A7, A3, A6, A2, A5, A1, A0
+#define MATRIX_COL_PINS_LEFT_HOMING_NORMAL                   C5, C4, A7, A3, A6, A2, A5, A1, A0
+
+#define MATRIX_COL_PINS_LEFT_NUMERIC_MAX_TEENSY          C1, C0, E1, E0, F3, F2, F1, F0, B0, B1, B2, B3
+#define MATRIX_COL_PINS_LEFT_HOMING_MAX_TEENSY               C0, E1, E0, F3, F2, F1, F0, B0, B1, B2, B3
+#define MATRIX_COL_PINS_LEFT_NUMERIC_EXTENDED_TEENSY     C1, C0, E1, E0, F3, F2, F1, F0, B0, B1, B2
+#define MATRIX_COL_PINS_LEFT_HOMING_EXTENDED_TEENSY          C0, E1, E0, F3, F2, F1, F0, B0, B1, B2
+#define MATRIX_COL_PINS_LEFT_NUMERIC_NORMAL_TEENSY       C1, C0, E1, E0, F3, F2, F1, F0, B0, B1
+#define MATRIX_COL_PINS_LEFT_HOMING_NORMAL_TEENSY            C0, E1, E0, F3, F2, F1, F0, B0, B1
+
+// Right PCB Pin assignments
+
+#define MATRIX_COL_PINS_RIGHT_ABSENT
+
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_MAX                 E6, A4, A0, A1, A5, A2, A6, A3, A7, C4, C5, C7
+#define MATRIX_COL_PINS_RIGHT_HOMING_MAX                  E6, A4, A0, A1, A5, A2, A6, A3, A7, C4, C5
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_EXTENDED                A4, A0, A1, A5, A2, A6, A3, A7, C4, C5, C7
+#define MATRIX_COL_PINS_RIGHT_HOMING_EXTENDED                 A4, A0, A1, A5, A2, A6, A3, A7, C4, C5
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_NORMAL                      A0, A1, A5, A2, A6, A3, A7, C4, C5, C7
+#define MATRIX_COL_PINS_RIGHT_HOMING_NORMAL                       A0, A1, A5, A2, A6, A3, A7, C4, C5
+
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_MAX_TEENSY          B3, B2, B1, B0, F0, F1, F2, F3, E0, E1, C0, C1
+#define MATRIX_COL_PINS_RIGHT_HOMING_MAX_TEENSY           B3, B2, B1, B0, F0, F1, F2, F3, E0, E1, C0
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_EXTENDED_TEENSY         B2, B1, B0, F0, F1, F2, F3, E0, E1, C0, C1
+#define MATRIX_COL_PINS_RIGHT_HOMING_EXTENDED_TEENSY          B2, B1, B0, F0, F1, F2, F3, E0, E1, C0
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_NORMAL_TEENSY               B1, B0, F0, F1, F2, F3, E0, E1, C0, C1
+#define MATRIX_COL_PINS_RIGHT_HOMING_NORMAL_TEENSY                B1, B0, F0, F1, F2, F3, E0, E1, C0
+
+// Fetch Macros
+
+#define GET_PID(LEFT_TYPE, RIGHT_TYPE) ( ( ( MATRIX_TYPE_ ## LEFT_TYPE ) << 8 ) + ( MATRIX_TYPE_ ## RIGHT_TYPE ) )
+#define GET_MATRIX_COL(TYPE) MATRIX_COLS_ ## TYPE
+#define GET_MATRIX_COLS(LEFT_TYPE, RIGHT_TYPE) ( ( GET_MATRIX_COL(LEFT_TYPE) ) + ( GET_MATRIX_COL(RIGHT_TYPE) ) )
+#define GET_MATRIX_COL_PINS(LEFT_TYPE, RIGHT_TYPE) { MATRIX_COL_PINS_LEFT_ ## LEFT_TYPE, MATRIX_COL_PINS_RIGHT_ ## RIGHT_TYPE }
+
+// Specialized Row Macros
+
+#define KEYMAP_ROW_LEFT_ABSENT(                   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)
+
+#define KEYMAP_ROW_LEFT_NUMERIC_MAX(              k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_LEFT_HOMING_MAX(               k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_LEFT_NUMERIC_EXTENDED(         k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_LEFT_HOMING_EXTENDED(          k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_LEFT_NUMERIC_NORMAL(           k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A
+#define KEYMAP_ROW_LEFT_HOMING_NORMAL(            k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A
+#define KEYMAP_ROW_LEFT_NUMERIC_MAX_TEENSY(       k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_LEFT_HOMING_MAX_TEENSY(        k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_LEFT_NUMERIC_EXTENDED_TEENSY(  k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_LEFT_HOMING_EXTENDED_TEENSY(   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_LEFT_NUMERIC_NORMAL_TEENSY(    k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A
+#define KEYMAP_ROW_LEFT_HOMING_NORMAL_TEENSY(     k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A
+
+#define KEYMAP_ROW_RIGHT_ABSENT(                  k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)
+
+#define KEYMAP_ROW_RIGHT_NUMERIC_MAX(             k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_MAX(              k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_EXTENDED(        k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_EXTENDED(         k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_NORMAL(          k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)             k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_NORMAL(           k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)             k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_MAX_TEENSY(      k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_MAX_TEENSY(       k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_EXTENDED_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_EXTENDED_TEENSY(  k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_NORMAL_TEENSY(   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)             k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_NORMAL_TEENSY(    k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)             k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+
+// Changable Row Macro
+
+#define KEYMAP_ROW(LEFT_TYPE, RIGHT_TYPE, \
+  k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \
+) \
+KEYMAP_ROW_LEFT_ ## LEFT_TYPE(k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C), KEYMAP_ROW_RIGHT_ ## RIGHT_TYPE(k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C)
+
+// Changable Master Macro
+
+#define KEYMAP_MASTER(LEFT_TYPE, RIGHT_TYPE, \
+      k001, k002, k003, k004,       k005, k006, k007, k008, k009, k00A, k00B, k00C, k011, k012, k013, k014, k015, k016, k017, k018,       k019, k01A, k01B, k01C, \
+      k101, k102, k103, k104,       k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118,       k119, k11A, k11B, k11C, \
+      k201, k202, k203, k204,       k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218,       k219, k21A, k21B, k21C, \
+      k301, k302, k303, k304,       k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318,       k319, k31A, k31B, k31C, \
+      k401, k402, k403, k404,       k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418,       k419, k41A, k41B, k41C, \
+      k501, k502, k503, k504,       k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518,       k519, k51A, k51B, k51C  \
+) \
+{ \
+    { KEYMAP_ROW(LEFT_TYPE, RIGHT_TYPE, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C ) },\
+    { KEYMAP_ROW(LEFT_TYPE, RIGHT_TYPE, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C ) },\
+    { KEYMAP_ROW(LEFT_TYPE, RIGHT_TYPE, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C ) },\
+    { KEYMAP_ROW(LEFT_TYPE, RIGHT_TYPE, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C ) },\
+    { KEYMAP_ROW(LEFT_TYPE, RIGHT_TYPE, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C ) },\
+    { KEYMAP_ROW(LEFT_TYPE, RIGHT_TYPE, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C ) },\
+}
+
+
+#endif // MATRIX_TYPES_H

+ 28 - 0
keyboards/vision_division/readme.md

@@ -0,0 +1,28 @@
+vision_division keyboard firmware
+======================
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/vision_division 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.
+
+### 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 a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant 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 **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`

+ 28 - 0
keyboards/vision_division/vision_division.c

@@ -0,0 +1,28 @@
+#include "vision_division.h"
+
+void matrix_init_kb(void) {
+	// put your keyboard start-up code here
+	// runs once when the firmware starts up
+
+	matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+	// put your looping keyboard code here
+	// runs every cycle (a lot)
+
+	matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+	// put your per-action keyboard code here
+	// runs for every action, just before processing by the firmware
+
+	return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+	// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+	led_set_user(usb_led);
+}

+ 6 - 0
keyboards/vision_division/vision_division.h

@@ -0,0 +1,6 @@
+#ifndef VISION_DIVISION_H
+#define VISION_DIVISION_H
+
+#include "quantum.h"
+
+#endif

+ 1 - 0
lib/googletest

@@ -0,0 +1 @@
+Subproject commit ec44c6c1675c25b9827aacd08c02433cccde7780

+ 9 - 0
quantum/config_common.h

@@ -45,6 +45,15 @@
 #define F5 0xF5
 #define F6 0xF6
 #define F7 0xF7
+#define A0 0x00
+#define A1 0x01
+#define A2 0x02
+#define A3 0x03
+#define A4 0x04
+#define A5 0x05
+#define A6 0x06
+#define A7 0x07
+
 
 /* USART configuration */
 #ifdef BLUETOOTH_ENABLE

+ 2 - 0
quantum/process_keycode/process_unicode.c

@@ -74,6 +74,8 @@ bool process_unicode(uint16_t keycode, keyrecord_t *record) {
 }
 
 #ifdef UCIS_ENABLE
+qk_ucis_state_t qk_ucis_state;
+
 void qk_ucis_start(void) {
   qk_ucis_state.count = 0;
   qk_ucis_state.in_progress = true;

+ 4 - 2
quantum/process_keycode/process_unicode.h

@@ -29,11 +29,13 @@ typedef struct {
   char *code;
 } qk_ucis_symbol_t;
 
-struct {
+typedef struct {
   uint8_t count;
   uint16_t codes[UCIS_MAX_SYMBOL_LENGTH];
   bool in_progress:1;
-} qk_ucis_state;
+} qk_ucis_state_t;
+
+extern qk_ucis_state_t qk_ucis_state;
 
 #define UCIS_TABLE(...) {__VA_ARGS__, {NULL, NULL}}
 #define UCIS_SYM(name, code) {name, #code}

+ 1 - 1
readme.md

@@ -13,7 +13,7 @@ For an easy-to-read version of this document and the repository, check out [http
 * [Planck](/keyboards/planck/)
 * [Preonic](/keyboards/preonic/)
 * [Atomic](/keyboards/atomic/)
-* [ErgoDox EZ](/keyboards/ergodox/ez/)
+* [ErgoDox EZ](/keyboards/ergodox/)
 * [Clueboard](/keyboards/clueboard/)
 * [Cluepad](/keyboards/cluepad/)