summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Lucas <CommandLineDesign@gmail.com>2016-07-23 18:44:01 -0700
committerGitHub <noreply@github.com>2016-07-23 18:44:01 -0700
commit4059a16118e3abbc9eab2241693c60a1f19811b5 (patch)
treece711e757ab87d6d0b408d477b49e719b6d8f687
parent9ecf9073b96799e52a1f1c0d35b57177382902ce (diff)
parent8e1d96983aad19b3e4e72ece5db822e92d91342b (diff)
Merge pull request #1 from jackhumbert/master
Update from parent
-rw-r--r--Dockerfile28
-rw-r--r--keyboards/alps64/readme.md4
-rw-r--r--keyboards/atreus/atreus.h10
-rw-r--r--keyboards/clueboard/readme.md4
-rw-r--r--keyboards/cluepad/readme.md4
-rw-r--r--keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md2
-rw-r--r--keyboards/handwired/CMD60/CMD60.c8
-rw-r--r--keyboards/handwired/CMD60/CMD60.h20
-rw-r--r--keyboards/handwired/CMD60/Makefile73
-rw-r--r--keyboards/handwired/CMD60/README.md35
-rw-r--r--keyboards/handwired/CMD60/config.h162
-rw-r--r--keyboards/handwired/CMD60/keymaps/default/keymap.c66
-rw-r--r--keyboards/handwired/traveller/Makefile89
-rw-r--r--keyboards/handwired/traveller/config.h173
-rw-r--r--keyboards/handwired/traveller/keymaps/default/keymap.c305
-rw-r--r--keyboards/handwired/traveller/keymaps/default/readme.md2
-rw-r--r--keyboards/handwired/traveller/readme.md35
-rw-r--r--keyboards/handwired/traveller/traveller.c61
-rw-r--r--keyboards/handwired/traveller/traveller.h32
-rw-r--r--keyboards/jd45/readme.md4
-rw-r--r--keyboards/kinesis/Makefile79
-rw-r--r--keyboards/kinesis/config.h174
-rw-r--r--keyboards/kinesis/docs/kicad/kinesis-cache.lib232
-rw-r--r--keyboards/kinesis/docs/kicad/kinesis.pro83
-rw-r--r--keyboards/kinesis/docs/kicad/kinesis.sch634
-rw-r--r--keyboards/kinesis/docs/photos/P1050573.jpgbin0 -> 177711 bytes
-rw-r--r--keyboards/kinesis/docs/photos/P1050574.jpgbin0 -> 343978 bytes
-rw-r--r--keyboards/kinesis/docs/photos/P1050575.jpgbin0 -> 266771 bytes
-rw-r--r--keyboards/kinesis/docs/readme.txt52
-rw-r--r--keyboards/kinesis/docs/schematic.pngbin0 -> 175014 bytes
-rw-r--r--keyboards/kinesis/keymaps/default/Makefile21
-rw-r--r--keyboards/kinesis/keymaps/default/config.h8
-rw-r--r--keyboards/kinesis/keymaps/default/keymap.c116
-rw-r--r--keyboards/kinesis/keymaps/default/readme.md1
-rw-r--r--keyboards/kinesis/keymaps/programmer/Makefile21
-rw-r--r--keyboards/kinesis/keymaps/programmer/config.h8
-rw-r--r--keyboards/kinesis/keymaps/programmer/keymap.c245
-rw-r--r--keyboards/kinesis/keymaps/programmer/readme.md2
-rw-r--r--keyboards/kinesis/kinesis.c106
-rw-r--r--keyboards/kinesis/kinesis.h67
-rw-r--r--keyboards/kinesis/matrix.c228
-rw-r--r--keyboards/kinesis/readme.md42
-rw-r--r--keyboards/phantom/readme.md4
-rw-r--r--keyboards/planck/keymaps/bone2planck/keymap.c194
-rw-r--r--keyboards/preonic/keymaps/default/keymap.c10
-rw-r--r--keyboards/satan/Makefile2
-rw-r--r--keyboards/satan/keymaps/sethbc/Makefile21
-rw-r--r--keyboards/satan/readme.md4
-rw-r--r--quantum/keymap_extras/keymap_dvorak.h15
-rw-r--r--quantum/keymap_extras/keymap_fr_ch.h2
-rw-r--r--quantum/keymap_extras/keymap_french.h4
-rw-r--r--quantum/keymap_extras/keymap_german.h2
-rw-r--r--quantum/keymap_extras/keymap_german_ch.h2
-rw-r--r--quantum/keymap_extras/keymap_nordic.h2
-rw-r--r--quantum/keymap_extras/keymap_spanish.h2
-rw-r--r--quantum/keymap_extras/keymap_uk.h4
-rw-r--r--quantum/process_keycode/process_tap_dance.c52
-rw-r--r--quantum/process_keycode/process_tap_dance.h19
-rw-r--r--readme.md77
-rw-r--r--tmk_core/avr.mk4
-rw-r--r--tmk_core/protocol/lufa/descriptor.c4
61 files changed, 3536 insertions, 124 deletions
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000..96ace4ec6b
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,28 @@
+FROM debian:jessie
+MAINTAINER Erik Dasque <erik@frenchguys.com>
+
+RUN apt-get update
+RUN apt-get install --no-install-recommends -y build-essential \
+ gcc \
+ unzip \
+ wget \
+ zip \
+ gcc-avr \
+ binutils-avr \
+ avr-libc \
+ dfu-programmer \
+ dfu-util \
+ gcc-arm-none-eabi \
+ binutils-arm-none-eabi \
+ libnewlib-arm-none-eabi \
+ git
+
+RUN apt-get clean
+RUN rm -rf /var/lib/apt/lists/*
+
+ENV keyboard=ergodox_ez
+ENV keymap=default
+
+VOLUME /qmk
+WORKDIR /qmk
+CMD make clean ; make keyboard=${keyboard} keymap=${keymap} \ No newline at end of file
diff --git a/keyboards/alps64/readme.md b/keyboards/alps64/readme.md
new file mode 100644
index 0000000000..1798b193a5
--- /dev/null
+++ b/keyboards/alps64/readme.md
@@ -0,0 +1,4 @@
+Alps64 keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/atreus/atreus.h b/keyboards/atreus/atreus.h
index 2b3803bc21..f841c35199 100644
--- a/keyboards/atreus/atreus.h
+++ b/keyboards/atreus/atreus.h
@@ -10,16 +10,16 @@
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
#define KEYMAP( \
- k00, 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, k2a, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a \
+ k00, 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, k3a, k3b \
) \
{ \
{ k00, k01, k02, k03, k04, KC_NO, k05, k06, k07, k08, k09 }, \
{ k10, k11, k12, k13, k14, KC_NO, k15, k16, k17, k18, k19 }, \
{ k20, k21, k22, k23, k24, k35, k25, k26, k27, k28, k29 }, \
- { k2a, k30, k31, k32, k33, k34, k36, k37, k38, k39, k3a } \
+ { k30, k31, k32, k33, k34, k36, k37, k38, k39, k3a, k3b } \
}
#endif
diff --git a/keyboards/clueboard/readme.md b/keyboards/clueboard/readme.md
new file mode 100644
index 0000000000..aa301f020c
--- /dev/null
+++ b/keyboards/clueboard/readme.md
@@ -0,0 +1,4 @@
+Clueboard keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/cluepad/readme.md b/keyboards/cluepad/readme.md
new file mode 100644
index 0000000000..8450340f27
--- /dev/null
+++ b/keyboards/cluepad/readme.md
@@ -0,0 +1,4 @@
+Cluepad number pad firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md
index 4188d2b50c..16cebd0912 100644
--- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md
+++ b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md
@@ -10,7 +10,7 @@ There are four layers:
Looking for IJKL arrows? [Here we
go](../romanzolotarev-norman-plover-osx/).
-[![keyboard-layout](romanzolotarev-norman-plover-osx-hjkl.png)](rttp://www.keyboard-layout-editor.com/#/gists/56ffedceb0668dda47c993e7271563e0)
+[![keyboard-layout](romanzolotarev-norman-plover-osx-hjkl.png)](http://www.keyboard-layout-editor.com/#/gists/56ffedceb0668dda47c993e7271563e0)
## Switching
diff --git a/keyboards/handwired/CMD60/CMD60.c b/keyboards/handwired/CMD60/CMD60.c
new file mode 100644
index 0000000000..799848e34e
--- /dev/null
+++ b/keyboards/handwired/CMD60/CMD60.c
@@ -0,0 +1,8 @@
+#include "CMD60.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
diff --git a/keyboards/handwired/CMD60/CMD60.h b/keyboards/handwired/CMD60/CMD60.h
new file mode 100644
index 0000000000..f90871fc71
--- /dev/null
+++ b/keyboards/handwired/CMD60/CMD60.h
@@ -0,0 +1,20 @@
+#ifndef CMD60_H
+#define CMD60_H
+
+#include "quantum.h"
+
+#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 \
+ ) { \
+ { 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 } \
+}
+
+#endif \ No newline at end of file
diff --git a/keyboards/handwired/CMD60/Makefile b/keyboards/handwired/CMD60/Makefile
new file mode 100644
index 0000000000..7117599173
--- /dev/null
+++ b/keyboards/handwired/CMD60/Makefile
@@ -0,0 +1,73 @@
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=512
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+# 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 ?= no # 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
+
+
diff --git a/keyboards/handwired/CMD60/README.md b/keyboards/handwired/CMD60/README.md
new file mode 100644
index 0000000000..83e371543e
--- /dev/null
+++ b/keyboards/handwired/CMD60/README.md
@@ -0,0 +1,35 @@
+CMD60 keyboard firmware
+======================
+
+##CMD60
+
+This layout has been designed to optimize use of the left-hand, and it focussed specifically on programmers who work
+with text editors like SublimeText and Atom. It utilizes the power of Space_fn, and features a caps lock swap for Fn2
+and enter key on tap. These features allow you to keep your right hand on the mouse more and should enable you to
+achieve a higher level of productivity if you take the time to learn its function layers.
+
+## 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/handwired/CMD60 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
+
+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/`
diff --git a/keyboards/handwired/CMD60/config.h b/keyboards/handwired/CMD60/config.h
new file mode 100644
index 0000000000..27eb400b87
--- /dev/null
+++ b/keyboards/handwired/CMD60/config.h
@@ -0,0 +1,162 @@
+/*
+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"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER cmd
+#define PRODUCT CMD60
+#define DESCRIPTION Advanced Programming Keeb Layout
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F0, F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { B0, B1, B2, B3, B7, D0, D1, D2, D3, C6, D7, B4, B5, B6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+// #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
diff --git a/keyboards/handwired/CMD60/keymaps/default/keymap.c b/keyboards/handwired/CMD60/keymaps/default/keymap.c
new file mode 100644
index 0000000000..9f9cbcd661
--- /dev/null
+++ b/keyboards/handwired/CMD60/keymaps/default/keymap.c
@@ -0,0 +1,66 @@
+#include "CMD60.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = KEYMAP( /* CMD60 - 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, \
+ LT(3, KC_ENT), 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_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_NO, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, LT(2, KC_SPC), MO(3), MO(4), MO(5), TG(1) \
+ ),
+ [1] = KEYMAP( /* CMD60 - GameMode */
+ 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_CAPS, 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_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_RSFT, \
+ KC_TRNS, KC_NO, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ [2] = KEYMAP( /* CMD60 - Arrows */
+ 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_BSPC, KC_UP, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_UP, KC_DEL, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ [3] = KEYMAP( /* CMD60 - Functions */
+ 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_AUDIO_MUTE, KC_BSPC, KC_PGUP, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_PAUSE, KC_SLCK, KC_PSCREEN, \
+ KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_INSERT, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ [4] = KEYMAP( /* CMD60 - Mouse */
+ KC_SYSTEM_SLEEP, 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_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRNS, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_WH_UP, KC_MS_BTN3, KC_MS_WH_DOWN, KC_NO, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ [5] = KEYMAP( /* CMD60 - Media */
+ KC_SYSTEM_WAKE, 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_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_AUDIO_MUTE, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, KC_MEDIA_PLAY_PAUSE, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WWW_BACK, KC_WWW_FORWARD, KC_NO, KC_NO, KC_WWW_REFRESH, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+};
+
+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;
+};
diff --git a/keyboards/handwired/traveller/Makefile b/keyboards/handwired/traveller/Makefile
new file mode 100644
index 0000000000..12a4b71f4e
--- /dev/null
+++ b/keyboards/handwired/traveller/Makefile
@@ -0,0 +1,89 @@
+
+#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
+
+# for avr upload
+USB ?= /dev/cu.usbmodem1421
+#
+# 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)
+
+
+ifdef TEENSY2
+ OPT_DEFS += -DATREUS_TEENSY2
+ ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
+else
+ OPT_DEFS += -DATREUS_ASTAR
+ OPT_DEFS += -DCATERINA_BOOTLOADER
+ ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
+ avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
+endif
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# MCU name
+
+# 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
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= no # 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 ?= no # 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
+RGBLIGHT_ENABLE = yes
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif
+
+upload: build
+ $(ATREUS_UPLOAD_COMMAND)
+
diff --git a/keyboards/handwired/traveller/config.h b/keyboards/handwired/traveller/config.h
new file mode 100644
index 0000000000..2b82da447f
--- /dev/null
+++ b/keyboards/handwired/traveller/config.h
@@ -0,0 +1,173 @@
+/*
+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"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER You
+#define PRODUCT traveller
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 13
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D0, D1, D3, D2 }
+ // no I can't say why this order seemed like a good idea
+#define MATRIX_COL_PINS { B5, D6, B7, B6, F6, B1, B3, F7, B4, E6, D7, C6, D4 }
+#define UNUSED_PINS
+
+// LED stuff
+#define RGB_DI_PIN B2
+//#define RBLIGHT_TIMER
+#define RGBLED_NUM 1 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+// #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 */
+#define BACKLIGHT_LEVELS 3
+
+/* 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
diff --git a/keyboards/handwired/traveller/keymaps/default/keymap.c b/keyboards/handwired/traveller/keymaps/default/keymap.c
new file mode 100644
index 0000000000..13d889ab8b
--- /dev/null
+++ b/keyboards/handwired/traveller/keymaps/default/keymap.c
@@ -0,0 +1,305 @@
+#include "traveller.h"
+#include "mousekey.h"
+#include "action_layer.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.
+#define _QW 0
+#define _LW 1
+#define _HI 2
+#define _NAV 4
+#define _CUR 5
+#define _FKEYS 6
+#define _TRNS 8
+
+// We do the same trick for functions
+#define RGBLED_TOGGLE 10
+#define _HIOUT 15
+#define _LWOUT 16
+// Macros
+#define MDL 4
+#define MDR 5
+#define MUR 6
+#define MUL 3
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | NAV | ` ~ | W | E | R | T | | Y | U | I | O | - | = |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | S | D | F | G | | H | J | K | L | P | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ *|ctrl/esc| A | X | C | V | B |Ctrl /| N | M | , | . | ; | ' |
+ * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
+ * | Shift| Z | Del | GUI | Low | Bspc |/Enter| Spc | Hi | GUI | Alt | / |Shift |
+ * `------------------------------------------------------------------------------------------'
+ *
+ */
+[_QW] = KEYMAP(
+ F(_NAV), KC_GRV, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_MINS, KC_EQL,
+ KC_TAB, KC_Q, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_P, KC_BSLS,
+ CTL_T(KC_ESC), KC_A, KC_X, KC_C, KC_V, KC_B, KC_RCTL, KC_N, KC_M, KC_COMM, KC_DOT, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_DEL, KC_LGUI, MO(_LW), KC_BSPC, KC_ENTER, KC_SPC, MO(_HI), KC_RGUI, KC_RALT, KC_SLSH, KC_RSFT
+ ),
+
+/* LOW - numbers, missing or awkward programming keys
+ Doubled 1 key allows lazy reach with ring finger.
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | FKeys| 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |Ctrl-alt-del|
+ * |------+------+------+------+------+------| +------+------+------+------+------+------|
+ * | Tab | 1 | ] | ( | ) | | | * | ( | ) | [ | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * | Caps | [ | | { | } | ` | /| # | { | } | | ] | |
+ * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
+ * | Shift| | | | Low | |/ | | Hi | | | |Shift |
+ * `------------------------------------------------------------------------------------------'
+ *
+ */
+
+[_LW] = KEYMAP(
+ F(_FKEYS), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, LCTL(LALT(KC_DEL)) ,
+ KC_TRNS, KC_1, KC_RBRC, KC_LPRN, KC_RPRN, KC_NO, KC_ASTR, KC_LPRN, KC_RPRN, KC_LBRC, KC_NO, KC_NO,
+ KC_CAPS, KC_LBRC, KC_NO, KC_LCBR, KC_RCBR, KC_TILD, KC_TRNS, KC_HASH, KC_LCBR, KC_RCBR, KC_NO, KC_RBRC, KC_NO,
+ 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
+),
+
+/* HI - Punctuation, shell and
+url ://@.com row on bottom, && is opposite || ^$ are in regex order: ^.*$
+Right hand nav keys work pretty well chorded with the Right hand Hi Key
+ * ,-----------------------------------------. .-----------------------------------------.
+ * |FKEYS | ! | @ | # | $ | % | | ^ | & | * | ( | ) | + |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | ! | & | "|" | $ | % | | Vol+| Mute| | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * | CAPS | ^ | : | . | * | - | /| Vol-| Play | PgUp | Home | Up | End |
+ * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
+ * | | / | | | Low | |/ | | Hi | PgDn | Left| Down | Right |
+ * `------------------------------------------------------------------------------------------'
+ *
+ */
+
+[_HI] = KEYMAP(
+ F(_FKEYS), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS,
+ KC_TRNS, KC_EXLM, KC_AMPR, KC_PIPE, KC_DLR, KC_PERC, KC_VOLU, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_CAPS, KC_CIRC, KC_COLN, KC_DOT, KC_ASTR, KC_MINS, KC_TRNS, KC_VOLD, KC_PPLS, KC_PGUP, KC_HOME, KC_UP, KC_END,
+ KC_TRNS, KC_SLSH, KC_TRNS, KC_TRNS, F(_LW), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT
+),
+
+/* NAV - mouse & navigation
+//gui left and right are line home/end, or fore & back in browser
+// Mouse buttons are reversed for comfort - bigger stretch is to the right button.
+
+ * ,-----------------------------------------. .-----------------------------------------.
+* | NAV | | | Up | |Gui-> | | MwU | MS_UL| MS_U |MS_UR | |Ms Norm|
+* |------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | |Gui<- | Left | Down |Right | C^E | | BTN3 | MS_L |MS Up | MS_R | |Ms Fast |
+* |------+------+------+------+------+------|------|------+------+------+------+------+--------|
+* | | C^A | GUI X| GUI C| GUI_V| |Enter/| MWD | M_DL |MS Dwn|MS_DR | Up |Ms Slow |
+* |------+------+------+------+------+------+ // +------+------+------+------+------+------|
+* | | GuiZ | | | Low | |/ButnR|ButnL | Hi | | Left | Down | Right |
+* `------------------------------------------------------------------------------------------'
+*/
+
+[_NAV] = KEYMAP(
+ F(_NAV), KC_NO, KC_NO, KC_UP, KC_NO, RGUI(KC_RIGHT), KC_WH_U, M(MUL), KC_MS_U, M(MUR), KC_NO, KC_ACL2,
+ KC_TRNS, RGUI(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_E), KC_BTN3, KC_MS_L, KC_MS_U, KC_MS_R, KC_NO, KC_ACL1,
+ KC_TRNS, LCTL(KC_A), LGUI(KC_X),RGUI(KC_C), RGUI(KC_V),KC_NO, KC_ENTER, KC_WH_D, M(MDL), KC_MS_D, M(MDR), KC_UP, KC_ACL0,
+ KC_TRNS, RGUI(KC_Z), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT
+),
+
+/* FKEYS - Funtion keys & mac stuff
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | FKEYS| F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | Ctrl |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | F11 | F12 | F13 | F14 | F15 | Alt |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * |Qwerty| | | | | | /| | | | | | Del |
+ * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
+ * | . |RGBTog| . | | LO | Bspc |/ | | HI | | | | |
+ * `------------------------------------------------------------------------------------------'
+ *
+ */
+
+[_FKEYS] = KEYMAP(
+ F(_FKEYS), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_RCTL,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_LALT ,
+ F(_QW), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL,
+ KC_TRNS, F(RGBLED_TOGGLE), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+
+/* TRNS - skeleton for laters
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | . | . | . | . | . | . | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | . | . | . | . | . | . | | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * | . | . | . | . | . | . | /| | | | . | ; | " |
+ * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
+ * | . | . | . | GUI | LO | . |/ | Spc | HI | GUI | M0 | / |LSFT |
+ * `------------------------------------------------------------------------------------------'
+ *
+ */
+
+[_TRNS] = {
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, 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, 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}
+ }
+
+
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [_QW] = ACTION_LAYER_ON(_QW,ON_RELEASE), // return to QWERTY layer
+ [_LW] = ACTION_LAYER_TAP_TOGGLE(_LW), // Turn on LW when holding, or tap 3 times to switch
+ [_HI] = ACTION_LAYER_TAP_TOGGLE(_HI), // Turn on LW when holding, or tap 3 times to switch
+ [_NAV] = ACTION_LAYER_TOGGLE(_NAV),
+ [_FKEYS] = ACTION_LAYER_TOGGLE(_FKEYS),
+ [_LWOUT] = ACTION_LAYER_OFF(_LW,ON_RELEASE),
+ [_HIOUT] = ACTION_LAYER_OFF(_HI,ON_RELEASE),
+
+ // Functions
+ [RGBLED_TOGGLE] = ACTION_FUNCTION(RGBLED_TOGGLE),
+
+};
+
+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);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+
+ // from algernon's ErgoDox EZ layout,
+ case MUL:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_LEFT);
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_LEFT);
+ }
+ mousekey_send();
+ break;
+
+ case MUR:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_RIGHT);
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_RIGHT);
+ }
+ mousekey_send();
+ break;
+
+ case MDL:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_LEFT);
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_LEFT);
+ }
+ mousekey_send();
+ break;
+
+ case MDR:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_RIGHT);
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_RIGHT);
+ }
+ mousekey_send();
+ break;
+
+
+ }
+ return MACRO_NONE;
+};
+
+
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ switch (id) {
+ case RGBLED_TOGGLE:
+ //led operations
+ if (record->event.pressed) {
+ rgblight_toggle();
+ }
+ break;
+ }
+}
+
+
+
+void LayerLEDSet(uint8_t layr) {
+
+ switch (layr) {
+ case _QW:
+ rgblight_setrgb(0,20, 0); // dim green
+ break;
+ case _LW:
+ // deep purple
+ rgblight_setrgb(20,0,35);
+ break;
+ case _HI:
+ // light blue
+ rgblight_setrgb(0,20,20);
+ break;
+ case _NAV:
+ // Yellowy orange
+ rgblight_setrgb(25,20,0); // brighter
+ break;
+ case _FKEYS:
+ // RED
+ rgblight_setrgb(20,0,0); // brighter
+ break;
+ default:
+ rgblight_setrgb(20,2,20);//error
+ break;
+ }
+
+ return;
+
+}
+
+void matrix_init_user(void) {
+}
+
+// Bleah globals need to be initialized.
+uint8_t old_layer=_QW;
+
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+ if (old_layer != layer) {
+ LayerLEDSet(layer);
+ old_layer=layer;
+ }
+}
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
+
+
diff --git a/keyboards/handwired/traveller/keymaps/default/readme.md b/keyboards/handwired/traveller/keymaps/default/readme.md
new file mode 100644
index 0000000000..7ddc40b3c3
--- /dev/null
+++ b/keyboards/handwired/traveller/keymaps/default/readme.md
@@ -0,0 +1,2 @@
+# The default keymap for handwired/traveller
+this is a kitchen sink build
diff --git a/keyboards/handwired/traveller/readme.md b/keyboards/handwired/traveller/readme.md
new file mode 100644
index 0000000000..646844b1d7
--- /dev/null
+++ b/keyboards/handwired/traveller/readme.md
@@ -0,0 +1,35 @@
+traveler keyboard firmware
+======================
+
+## Traveller Specific Info ##
+The traveller is a varient on the atreus keyboard.
+Like the Atreus, it is designed to be a good compromise between size and ergonomics.
+
+key differences are
+- an additional column for each pinky
+- an RGB LED in the center to show the current layer
+- more finger stagger, splay angle and contoured keycaps (F2 profile for space key).
+
+You can make your own traveller keyboard by using the openscad tools from the atreus repository, and adding a hole for the LED to shine through.
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent README.md](/README.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboard/traveler 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 file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+```
+$ make KEYMAP=[default|jack|<name>]
+```
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/handwired/traveller/traveller.c b/keyboards/handwired/traveller/traveller.c
new file mode 100644
index 0000000000..9d25341300
--- /dev/null
+++ b/keyboards/handwired/traveller/traveller.c
@@ -0,0 +1,61 @@
+#include "traveller.h"
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+ // leave this function blank - it can be defined in a keymap file
+};
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+ // leave this function blank - it can be defined in a keymap file
+}
+
+__attribute__ ((weak))
+void process_action_user(keyrecord_t *record) {
+ // leave this function blank - it can be defined in a keymap file
+}
+
+__attribute__ ((weak))
+void led_set_user(uint8_t usb_led) {
+ // leave this function blank - it can be defined in a keymap file
+}
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+#ifdef RGBLIGHT_ENABLE
+ rgblight_init();
+ rgblight_mode(1); // solid, no timer
+ rgblight_setrgb(0,20,0);// dim green, happens to be same as _QW
+#endif
+
+// Turn status LED on
+ DDRC |= (1<<7);
+ PORTC |= (1<<7);
+
+ 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);
+}
+
+
diff --git a/keyboards/handwired/traveller/traveller.h b/keyboards/handwired/traveller/traveller.h
new file mode 100644
index 0000000000..972a1a94a6
--- /dev/null
+++ b/keyboards/handwired/traveller/traveller.h
@@ -0,0 +1,32 @@
+#ifndef TRAVELLER_H
+#define TRAVELLER_H
+
+#include "quantum.h"
+#include "led.h"
+
+#ifdef RGBLIGHT_ENABLE
+ #include "rgblight.h"
+#endif
+#ifdef BACKLIGHT_ENABLE
+ #include "backlight.h"
+#endif
+
+
+
+// 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
+#define KEYMAP( \
+ k00, k01, k02, k03, k04, k05, k07, k08, k09, k0a, k0b, k0c, \
+ k10, k11, k12, k13, k14, k15, k17, k18, k19, k1a, k1b, k1c, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, KC_NO, k07, k08, k09, k0a, k0b, k0c }, \
+ { k10, k11, k12, k13, k14, k15, KC_NO, k17, k18, k19, k1a, k1b, k1c }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c } \
+}
+
+#endif
diff --git a/keyboards/jd45/readme.md b/keyboards/jd45/readme.md
new file mode 100644
index 0000000000..2822666e89
--- /dev/null
+++ b/keyboards/jd45/readme.md
@@ -0,0 +1,4 @@
+JD45 keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/kinesis/Makefile b/keyboards/kinesis/Makefile
new file mode 100644
index 0000000000..ca077e6366
--- /dev/null
+++ b/keyboards/kinesis/Makefile
@@ -0,0 +1,79 @@
+
+## Project specific files
+
+SRC= matrix.c
+
+# MCU name
+MCU = at90usb1286
+#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 ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= no
+# 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 ?= no # 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 should be port E6, current quantum library hardcodes C6, which we use for programming
+CUSTOM_MATRIX=yes # need to do our own thing with the matrix
+
+ifndef QUANTUM_DIR
+ include ../../Makefile
+endif
+
+
diff --git a/keyboards/kinesis/config.h b/keyboards/kinesis/config.h
new file mode 100644
index 0000000000..8f1fdbdb6c
--- /dev/null
+++ b/keyboards/kinesis/config.h
@@ -0,0 +1,174 @@
+/*
+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"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER You
+#define PRODUCT kinesis-advantage
+#define DESCRIPTION A custom keyboard
+
+// Mouse
+#define MOUSEKEY_DELAY 20
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 4
+#define MOUSEKEY_TIME_TO_MAX 20
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+#define MOUSEKEY_WHEEL_DELTA 1
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 1
+
+/* key matrix size */
+#define MATRIX_ROWS 16
+#define MATRIX_COLS 8
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+//Passed through the port multipler, so 4 pins =16
+#define MATRIX_ROW_PINS { F0,F1, F2, F3 }
+
+// May be upside down.
+#define MATRIX_COL_PINS { B0,B1, B2, B3, B4, B5, B6, B7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+// #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
diff --git a/keyboards/kinesis/docs/kicad/kinesis-cache.lib b/keyboards/kinesis/docs/kicad/kinesis-cache.lib
new file mode 100644
index 0000000000..f798d39d6c
--- /dev/null
+++ b/keyboards/kinesis/docs/kicad/kinesis-cache.lib
@@ -0,0 +1,232 @@
+EESchema-LIBRARY Version 2.3 Date: Wednesday, November 12, 2014 'pmt' 10:15:19 pm
+#encoding utf-8
+#
+# AT90S4414-P
+#
+DEF AT90S4414-P IC 0 40 Y Y 1 F N
+F0 "IC" -850 1880 40 H V L BNN
+F1 "AT90S4414-P" 450 -1950 40 H V L BNN
+F2 "DIL40" 0 0 30 H V C CIN
+F3 "~" 0 0 60 H V C CNN
+ALIAS AT90S8515-P
+$FPLIST
+ 40DIP-ELL600
+ 40dip600
+$ENDFPLIST
+DRAW
+S -850 1850 850 -1850 0 1 10 f
+X (T0)PB0 1 1000 700 150 L 40 40 1 1 B
+X (T1)PB1 2 1000 600 150 L 40 40 1 1 B
+X (AIN0)PB2 3 1000 500 150 L 40 40 1 1 B
+X (AIN1)PB3 4 1000 400 150 L 40 40 1 1 B
+X (~SS~)PB4 5 1000 300 150 L 40 40 1 1 B
+X (MOSI)PB5 6 1000 200 150 L 40 40 1 1 B
+X (MISO)PB6 7 1000 100 150 L 40 40 1 1 B
+X (SCK)PB7 8 1000 0 150 L 40 40 1 1 B
+X ~RESET 9 -1000 1700 150 R 40 40 1 1 I
+X (RXD)PD0 10 1000 -1000 150 L 40 40 1 1 B
+X GND 20 0 -2000 150 U 40 40 1 1 W
+X ALE 30 1000 850 150 L 40 40 1 1 O
+X VCC 40 0 2000 150 D 40 40 1 1 W
+X (TXD)PD1 11 1000 -1100 150 L 40 40 1 1 B
+X (A8)PC0 21 1000 -150 150 L 40 40 1 1 B
+X ICP 31 -1000 -1400 150 R 40 40 1 1 I
+X (INT0)PD2 12 1000 -1200 150 L 40 40 1 1 B
+X (A9)PC1 22 1000 -250 150 L 40 40 1 1 B
+X (AD7)PA7 32 1000 1000 150 L 40 40 1 1 B
+X (INT1)PD3 13 1000 -1300 150 L 40 40 1 1 B
+X (A10)PC2 23 1000 -350 150 L 40 40 1 1 B
+X (AD6)PA6 33 1000 1100 150 L 40 40 1 1 B
+X PD4 14 1000 -1400 150 L 40 40 1 1 B
+X (A11)PC3 24 1000 -450 150 L 40 40 1 1 B
+X (AD5)PA5 34 1000 1200 150 L 40 40 1 1 B
+X (OC1A)PD5 15 1000 -1500 150 L 40 40 1 1 B
+X (A12)PC4 25 1000 -550 150 L 40 40 1 1 B
+X (AD4)PA4 35 1000 1300 150 L 40 40 1 1 B
+X (~WR~)PD6 16 1000 -1600 150 L 40 40 1 1 B
+X (A13)PC5 26 1000 -650 150 L 40 40 1 1 B
+X (AD3)PA3 36 1000 1400 150 L 40 40 1 1 B
+X (~RD~)PD7 17 1000 -1700 150 L 40 40 1 1 B
+X (A14)PC6 27 1000 -750 150 L 40 40 1 1 B
+X (AD2)PA2 37 1000 1500 150 L 40 40 1 1 B
+X XTAL2 18 -1000 1200 150 R 40 40 1 1 B
+X (A15)PC7 28 1000 -850 150 L 40 40 1 1 B
+X (AD1)PA1 38 1000 1600 150 L 40 40 1 1 B
+X XTAL1 19 -1000 800 150 R 40 40 1 1 B
+X OC1B 29 -1000 -1500 150 R 40 40 1 1 W
+X (AD0)PA0 39 1000 1700 150 L 40 40 1 1 B
+ENDDRAW
+ENDDEF
+#
+# ATMEGA16U4-A
+#
+DEF ATMEGA16U4-A U 0 40 Y Y 1 F N
+F0 "U" -950 1700 40 H V C CNN
+F1 "ATMEGA16U4-A" 700 -1500 40 H V C CNN
+F2 "TQFP44" 0 0 35 H V C CIN
+F3 "~" 1100 1100 60 H V C CNN
+ALIAS ATMEGA16U4RC-A ATMEGA32U4-A ATMEGA32U4RC-A
+$FPLIST
+ TQFP44
+$ENDFPLIST
+DRAW
+S -1000 1650 950 -1450 0 1 10 f
+X (INT6/AIN0)PE6 1 1100 -650 150 L 40 40 1 1 B
+X UVCC 2 -450 1800 150 D 40 40 1 1 W
+X D- 3 -1150 100 150 R 40 40 1 1 B
+X D+ 4 -1150 200 150 R 40 40 1 1 B
+X UGND 5 -400 -1600 150 U 40 40 1 1 P
+X UCAP 6 -1150 -50 150 R 40 40 1 1 P
+X VBUS 7 -1150 350 150 R 40 40 1 1 P
+X (SS/PCINT0)PB0 8 1100 1550 150 L 40 40 1 1 B
+X (SCLK/PCINT1)PB1 9 1100 1450 150 L 40 40 1 1 B
+X (PDI/MOSI/PCINT2)PB2 10 1100 1350 150 L 40 40 1 1 B
+X (RXD/INT2)PD2 20 1100 150 150 L 40 40 1 1 B
+X (ADC13/OC1B/OC4B/PCINT13)PB6 30 1100 950 150 L 40 40 1 1 B
+X (ADC1)PF1 40 1100 -950 150 L 40 40 1 1 B
+X (PDO/MISO/PCINT3)PB3 11 1100 1250 150 L 40 40 1 1 B
+X (TXD/INT3)PD3 21 1100 50 150 L 40 40 1 1 B
+X (OC3A/~OC4A~)PC6 31 1100 650 150 L 40 40 1 1 B
+X (ADC0)PF0 41 1100 -850 150 L 40 40 1 1 B
+X (OC0A/OC1C/~RTS~/PCINT7)PB7 12 1100 850 150 L 40 40 1 1 B
+X (XCK1/~CTS~)PD5 22 1100 -150 150 L 40 40 1 1 B
+X (ICP3/CLK0/OC4A)PC7 32 1100 550 150 L 40 40 1 1 B
+X AREF 42 -1150 -850 150 R 40 40 1 1 P
+X ~RESET~ 13 -1150 1550 150 R 40 40 1 1 I
+X GND 23 -50 -1600 150 U 40 40 1 1 W
+X (~HWB~)PE2 33 1100 -550 150 L 40 40 1 1 B
+X GND 43 150 -1600 150 U 40 40 1 1 W
+X VCC 14 -200 1800 150 D 40 40 1 1 W
+X AVCC 24 150 1800 150 D 40 40 1 1 W
+X VCC 34 -100 1800 150 D 40 40 1 1 W
+X AVCC 44 250 1800 150 D 40 40 1 1 W
+X GND 15 -150 -1600 150 U 40 40 1 1 W
+X (ICP2/ADC8)PD4 25 1100 -50 150 L 40 40 1 1 B
+X GND 35 50 -1600 150 U 40 40 1 1 W
+X XTAL2 16 -1150 950 150 R 40 40 1 1 O
+X (T1/~OC4D~/ADC9)PD6 26 1100 -250 150 L 40 40 1 1 B
+X (ADC7/TDI)PF7 36 1100 -1350 150 L 40 40 1 1 B
+X XTAL1 17 -1150 1150 150 R 40 40 1 1 I
+X (T0/OC4D/ADC10)PD7 27 1100 -350 150 L 40 40 1 1 B
+X (ADC6/TDO)PF6 37 1100 -1250 150 L 40 40 1 1 B
+X (OC0B/SCL/INT0)PD0 18 1100 350 150 L 40 40 1 1 B
+X (ADC11/PCINT4)PB4 28 1100 1150 150 L 40 40 1 1 B
+X (ADC5/TMS)PF5 38 1100 -1150 150 L 40 40 1 1 B
+X (SDA/INT1)PD1 19 1100 250 150 L 40 40 1 1 B
+X (ADC12/OC1A/~OC4B~/PCINT12)PB5 29 1100 1050 150 L 40 40 1 1 B
+X (ADC4/TCK)PF4 39 1100 -1050 150 L 40 40 1 1 B
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "~" 38 -150 30 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_7
+#
+DEF CONN_7 P 0 40 Y N 1 F N
+F0 "P" -30 0 60 V V C CNN
+F1 "CONN_7" 70 0 60 V V C CNN
+F2 "~" 0 0 60 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+DRAW
+S -100 350 150 -350 0 1 0 N
+X P1 1 -350 300 250 R 50 50 1 1 P I
+X P2 2 -350 200 250 R 50 50 1 1 P I
+X P3 3 -350 100 250 R 50 50 1 1 P I
+X P4 4 -350 0 250 R 50 50 1 1 P I
+X P5 5 -350 -100 250 R 50 50 1 1 P I
+X P6 6 -350 -200 250 R 50 50 1 1 P I
+X P7 7 -350 -300 250 R 50 50 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "~" 0 0 60 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "~" -70 0 30 V V C CNN
+F3 "~" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# USB-MINI-B
+#
+DEF USB-MINI-B CON 0 40 Y Y 1 F N
+F0 "CON" -250 450 60 H V C CNN
+F1 "USB-MINI-B" -50 -500 60 H V C CNN
+F2 "~" 0 0 60 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+$FPLIST
+ USB-Mini-B-Jack
+$ENDFPLIST
+DRAW
+S -350 400 350 -400 0 1 0 N
+X VBUS 1 -550 300 200 R 50 50 1 1 W
+X D- 2 -550 150 200 R 50 50 1 1 B
+X D+ 3 -550 0 200 R 50 50 1 1 B
+X ID 4 -550 -150 200 R 50 50 1 1 B
+X GND 5 -550 -300 200 R 50 50 1 1 W
+X SHELL1 6 550 300 200 L 50 50 1 1 B
+X SHELL2 7 550 150 200 L 50 50 1 1 B
+X SHELL3 8 550 -150 200 L 50 50 1 1 B
+X SHELL4 9 550 -300 200 L 50 50 1 1 B
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "~" 0 0 60 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0 0 0 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/keyboards/kinesis/docs/kicad/kinesis.pro b/keyboards/kinesis/docs/kicad/kinesis.pro
new file mode 100644
index 0000000000..9f130b5092
--- /dev/null
+++ b/keyboards/kinesis/docs/kicad/kinesis.pro
@@ -0,0 +1,83 @@
+update=Wednesday, November 05, 2014 'pmt' 12:08:47 pm
+version=1
+last_client=pcbnew
+[cvpcb]
+version=1
+NetIExt=net
+[cvpcb/libraries]
+EquName1=devcms
+[general]
+version=1
+[eeschema]
+version=1
+PageLayoutDescrFile=
+SubpartIdSeparator=0
+SubpartFirstId=65
+LibDir=../../../lib/kicad/library
+NetFmtName=
+RptD_X=0
+RptD_Y=100
+RptLab=1
+LabSize=60
+[eeschema/libraries]
+LibName1=power
+LibName2=device
+LibName3=transistors
+LibName4=conn
+LibName5=linear
+LibName6=regul
+LibName7=74xx
+LibName8=cmos4000
+LibName9=adc-dac
+LibName10=memory
+LibName11=xilinx
+LibName12=special
+LibName13=microcontrollers
+LibName14=dsp
+LibName15=microchip
+LibName16=analog_switches
+LibName17=motorola
+LibName18=texas
+LibName19=intel
+LibName20=audio
+LibName21=interface
+LibName22=digital-audio
+LibName23=philips
+LibName24=display
+LibName25=cypress
+LibName26=siliconi
+LibName27=opto
+LibName28=atmel
+LibName29=contrib
+LibName30=valves
+LibName31=custom
+[pcbnew]
+version=1
+LastNetListRead=
+UseCmpFile=1
+PadDrill=1.016000000000
+PadDrillOvalY=1.016000000000
+PadSizeH=1.524000000000
+PadSizeV=1.524000000000
+PcbTextSizeV=1.500000000000
+PcbTextSizeH=1.500000000000
+PcbTextThickness=0.300000000000
+ModuleTextSizeV=1.000000000000
+ModuleTextSizeH=1.000000000000
+ModuleTextSizeThickness=0.150000000000
+SolderMaskClearance=0.000000000000
+SolderMaskMinWidth=0.000000000000
+DrawSegmentWidth=0.200000000000
+BoardOutlineThickness=0.100000000000
+ModuleOutlineThickness=0.150000000000
+[pcbnew/libraries]
+LibDir=../../../lib/kicad/modules
+LibName1=custom
+LibName2=Sockets
+LibName3=Connect
+LibName4=Discret
+LibName5=Divers
+LibName6=Display
+LibName7=LEDs
+LibName8=SMD_Packages
+LibName9=Sockets_DIP
diff --git a/keyboards/kinesis/docs/kicad/kinesis.sch b/keyboards/kinesis/docs/kicad/kinesis.sch
new file mode 100644
index 0000000000..f75335aa08
--- /dev/null
+++ b/keyboards/kinesis/docs/kicad/kinesis.sch
@@ -0,0 +1,634 @@
+EESchema Schematic File Version 2
+LIBS:power
+LIBS:device
+LIBS:transistors
+LIBS:conn
+LIBS:linear
+LIBS:regul
+LIBS:74xx
+LIBS:cmos4000
+LIBS:adc-dac
+LIBS:memory
+LIBS:xilinx
+LIBS:special
+LIBS:microcontrollers
+LIBS:dsp
+LIBS:microchip
+LIBS:analog_switches
+LIBS:motorola
+LIBS:texas
+LIBS:intel
+LIBS:audio
+LIBS:interface
+LIBS:digital-audio
+LIBS:philips
+LIBS:display
+LIBS:cypress
+LIBS:siliconi
+LIBS:opto
+LIBS:atmel
+LIBS:contrib
+LIBS:valves
+LIBS:custom
+LIBS:kinesis-cache
+EELAYER 27 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 1
+Title ""
+Date "13 nov 2014"
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+$Comp
+L C C4
+U 1 1 545804FB
+P 2850 4250
+F 0 "C4" H 2850 4350 40 0000 L CNN
+F 1 "1uF" H 2856 4165 40 0000 L CNN
+F 2 "~" H 2888 4100 30 0000 C CNN
+F 3 "~" H 2850 4250 60 0000 C CNN
+ 1 2850 4250
+ -1 0 0 1
+$EndComp
+$Comp
+L R R3
+U 1 1 545805E8
+P 2500 4000
+F 0 "R3" V 2580 4000 40 0000 C CNN
+F 1 "22" V 2507 4001 40 0000 C CNN
+F 2 "~" V 2430 4000 30 0000 C CNN
+F 3 "~" H 2500 4000 30 0000 C CNN
+ 1 2500 4000
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R2
+U 1 1 545805FA
+P 2500 3800
+F 0 "R2" V 2580 3800 40 0000 C CNN
+F 1 "22" V 2507 3801 40 0000 C CNN
+F 2 "~" V 2430 3800 30 0000 C CNN
+F 3 "~" H 2500 3800 30 0000 C CNN
+ 1 2500 3800
+ 0 -1 -1 0
+$EndComp
+Entry Wire Line
+ 6450 2450 6550 2550
+Entry Wire Line
+ 6450 2550 6550 2650
+Entry Wire Line
+ 6450 2650 6550 2750
+Entry Wire Line
+ 6450 2750 6550 2850
+Entry Wire Line
+ 6450 2950 6550 3050
+Entry Wire Line
+ 6450 3050 6550 3150
+Entry Wire Line
+ 6450 2850 6550 2950
+Entry Wire Line
+ 6450 3150 6550 3250
+Wire Wire Line
+ 10250 1800 10750 1800
+Entry Wire Line
+ 10750 1800 10850 1900
+Entry Wire Line
+ 10750 1900 10850 2000
+Entry Wire Line
+ 10750 2000 10850 2100
+Entry Wire Line
+ 10750 2800 10850 2900
+Entry Wire Line
+ 10750 2900 10850 3000
+Entry Wire Line
+ 10750 3000 10850 3100
+Entry Wire Line
+ 10750 3100 10850 3200
+Entry Wire Line
+ 10750 3200 10850 3300
+Entry Wire Line
+ 10750 3300 10850 3400
+$Comp
+L AT90S8515-P IC2
+U 1 1 545A62EA
+P 9250 3500
+F 0 "IC2" H 8400 5380 40 0000 L BNN
+F 1 "AT90S8515-P" H 9700 1550 40 0000 L BNN
+F 2 "DIL40" H 9250 3500 30 0000 C CIN
+F 3 "" H 9250 3500 60 0000 C CNN
+ 1 9250 3500
+ 1 0 0 -1
+$EndComp
+NoConn ~ 10250 2650
+Entry Wire Line
+ 10750 3650 10850 3750
+Entry Wire Line
+ 10750 3750 10850 3850
+Entry Wire Line
+ 10750 3850 10850 3950
+Entry Wire Line
+ 10750 3950 10850 4050
+Entry Wire Line
+ 10750 4050 10850 4150
+Entry Wire Line
+ 10750 4150 10850 4250
+Entry Wire Line
+ 10750 4350 10850 4450
+Entry Wire Line
+ 10750 4250 10850 4350
+NoConn ~ 8250 4900
+NoConn ~ 8250 5000
+NoConn ~ 8250 1800
+Wire Wire Line
+ 10250 1900 10750 1900
+Wire Wire Line
+ 10250 2000 10750 2000
+Wire Wire Line
+ 10250 2100 10750 2100
+Wire Wire Line
+ 10250 2200 10750 2200
+Wire Wire Line
+ 10250 2300 10750 2300
+Wire Wire Line
+ 10250 2400 10750 2400
+Wire Wire Line
+ 10250 2500 10750 2500
+Text Label 10350 1800 0 60 ~ 0
+A
+Text Label 10350 1900 0 60 ~ 0
+B
+Text Label 10350 2000 0 60 ~ 0
+C
+Text Label 10350 2100 0 60 ~ 0
+G
+Wire Wire Line
+ 10250 2800 10750 2800
+Wire Wire Line
+ 10250 2900 10750 2900
+Wire Wire Line
+ 10250 3000 10750 3000
+Wire Wire Line
+ 10250 3100 10750 3100
+Wire Wire Line
+ 10250 3200 10750 3200
+Wire Wire Line
+ 10250 3300 10750 3300
+Wire Wire Line
+ 10250 3400 10750 3400
+Wire Wire Line
+ 10250 3500 10750 3500
+Text Label 10350 2800 0 60 ~ 0
+DL2
+Text Label 10350 2900 0 60 ~ 0
+DR1
+Text Label 10350 3000 0 60 ~ 0
+DR2
+Text Label 10350 3100 0 60 ~ 0
+DL1
+Text Label 10350 3400 0 60 ~ 0
+SCL
+Text Label 10350 3500 0 60 ~ 0
+SDA
+Wire Wire Line
+ 10250 3650 10750 3650
+Wire Wire Line
+ 10250 3750 10750 3750
+Wire Wire Line
+ 10250 3850 10750 3850
+Wire Wire Line
+ 10250 3950 10750 3950
+Wire Wire Line
+ 10250 4050 10750 4050
+Wire Wire Line
+ 10250 4150 10750 4150
+Wire Wire Line
+ 10250 4250 10750 4250
+Wire Wire Line
+ 10250 4350 10750 4350
+Text Label 10350 3650 0 60 ~ 0
+R1
+Text Label 10350 3750 0 60 ~ 0
+R2
+Text Label 10350 3850 0 60 ~ 0
+R3
+Text Label 10350 3950 0 60 ~ 0
+R4
+Text Label 10350 4050 0 60 ~ 0
+R5
+Text Label 10350 4150 0 60 ~ 0
+R6
+Text Label 10350 4250 0 60 ~ 0
+R7
+Text Label 10350 4350 0 60 ~ 0
+R8
+Wire Wire Line
+ 10250 4500 10750 4500
+Wire Wire Line
+ 10250 4600 10750 4600
+Wire Wire Line
+ 10250 4700 10750 4700
+Wire Wire Line
+ 10250 4800 10750 4800
+Wire Wire Line
+ 10250 4900 10750 4900
+Wire Wire Line
+ 10250 5000 10750 5000
+Wire Wire Line
+ 10250 5100 10750 5100
+Wire Wire Line
+ 10250 5200 10750 5200
+Text Label 10350 4600 0 60 ~ 0
+FS1
+Text Label 10350 5000 0 60 ~ 0
+FS3
+Text Label 10350 5200 0 60 ~ 0
+FS2
+$Comp
+L GND #PWR01
+U 1 1 545A7377
+P 9250 5600
+F 0 "#PWR01" H 9250 5600 30 0001 C CNN
+F 1 "GND" H 9250 5530 30 0001 C CNN
+F 2 "" H 9250 5600 60 0000 C CNN
+F 3 "" H 9250 5600 60 0000 C CNN
+ 1 9250 5600
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 9250 5500 9250 5600
+Text Label 10350 4700 0 60 ~ 0
+CLOCK
+Text Label 10350 4800 0 60 ~ 0
+DATA
+NoConn ~ 10750 4700
+NoConn ~ 10750 4800
+Text Label 10350 3200 0 60 ~ 0
+KP
+Text Label 10350 3300 0 60 ~ 0
+PGM
+Text Label 10350 2500 0 60 ~ 0
+BUZZ
+NoConn ~ 8250 2300
+NoConn ~ 8250 2700
+$Comp
+L GND #PWR02
+U 1 1 545A7565
+P 4750 5700
+F 0 "#PWR02" H 4750 5700 30 0001 C CNN
+F 1 "GND" H 4750 5630 30 0001 C CNN
+F 2 "" H 4750 5700 60 0000 C CNN
+F 3 "" H 4750 5700 60 0000 C CNN
+ 1 4750 5700
+ 1 0 0 -1
+$EndComp
+Entry Wire Line
+ 6450 3650 6550 3750
+Entry Wire Line
+ 6450 3750 6550 3850
+Entry Wire Line
+ 6450 4150 6550 4250
+Entry Wire Line
+ 6450 4250 6550 4350
+Entry Wire Line
+ 6450 4050 6550 4150
+Entry Wire Line
+ 6450 4350 6550 4450
+NoConn ~ 3750 2850
+Wire Wire Line
+ 1200 2000 6450 2000
+NoConn ~ 3750 3050
+Wire Wire Line
+ 2750 3800 3750 3800
+Wire Wire Line
+ 2750 3900 3750 3900
+Wire Wire Line
+ 2750 3900 2750 4000
+Wire Bus Line
+ 6550 2100 6550 6050
+Wire Bus Line
+ 10850 1600 10850 6050
+Text Label 6050 4350 0 60 ~ 0
+DL1
+Text Label 6050 4250 0 60 ~ 0
+DR2
+Text Label 6050 4150 0 60 ~ 0
+DR1
+Text Label 6050 4050 0 60 ~ 0
+DL2
+Text Label 6050 2450 0 60 ~ 0
+R1
+Text Label 6050 2550 0 60 ~ 0
+R2
+Text Label 6050 2650 0 60 ~ 0
+R3
+Text Label 6050 2750 0 60 ~ 0
+R4
+Text Label 6050 2850 0 60 ~ 0
+R5
+Text Label 6050 2950 0 60 ~ 0
+R6
+Text Label 6050 3050 0 60 ~ 0
+R7
+Text Label 6050 3150 0 60 ~ 0
+R8
+Text Label 6050 5050 0 60 ~ 0
+A
+Text Label 6050 5150 0 60 ~ 0
+B
+Text Label 6050 5250 0 60 ~ 0
+C
+Text Label 6050 5350 0 60 ~ 0
+G
+Text Label 1300 3800 0 60 ~ 0
+D+
+Text Label 1300 4000 0 60 ~ 0
+D-
+NoConn ~ 10750 2200
+NoConn ~ 10750 2300
+NoConn ~ 10750 2400
+Text Label 10350 4500 0 60 ~ 0
+GND
+NoConn ~ 10750 4900
+NoConn ~ 10750 5100
+Text Label 6050 3450 0 60 ~ 0
+KP
+Text Label 6050 3350 0 60 ~ 0
+PGM
+$Comp
+L ATMEGA32U4-A U1
+U 1 1 5462E0B1
+P 4900 4000
+F 0 "U1" H 3950 5700 40 0000 C CNN
+F 1 "ATMEGA32U4-A" H 5600 2500 40 0000 C CNN
+F 2 "TQFP44" H 4900 4000 35 0000 C CIN
+F 3 "" H 6000 5100 60 0000 C CNN
+ 1 4900 4000
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 3750 4850 3750 5600
+Wire Wire Line
+ 4450 2200 5150 2200
+Connection ~ 4700 2200
+Connection ~ 4800 2200
+Connection ~ 5050 2200
+Connection ~ 4800 2000
+Wire Wire Line
+ 6000 2450 6450 2450
+Wire Wire Line
+ 6000 2550 6450 2550
+Wire Wire Line
+ 6000 2650 6450 2650
+Wire Wire Line
+ 6000 2750 6450 2750
+Wire Wire Line
+ 6000 2850 6450 2850
+Wire Wire Line
+ 6000 2950 6450 2950
+Wire Wire Line
+ 6000 3050 6450 3050
+Wire Wire Line
+ 6000 3150 6450 3150
+Wire Wire Line
+ 6000 5050 6450 5050
+Wire Wire Line
+ 6000 5150 6450 5150
+Wire Wire Line
+ 6000 5250 6450 5250
+Wire Wire Line
+ 6000 4050 6450 4050
+Wire Wire Line
+ 6000 4150 6450 4150
+Wire Wire Line
+ 6000 4250 6450 4250
+Wire Wire Line
+ 6000 4350 6450 4350
+Wire Wire Line
+ 6000 4550 6450 4550
+Entry Wire Line
+ 6450 3350 6550 3450
+Entry Wire Line
+ 6450 3450 6550 3550
+Entry Wire Line
+ 6450 5050 6550 5150
+Entry Wire Line
+ 6450 5150 6550 5250
+Entry Wire Line
+ 6450 5250 6550 5350
+Entry Wire Line
+ 6450 5350 6550 5450
+Entry Wire Line
+ 6450 4650 6550 4750
+Wire Wire Line
+ 6000 3350 6450 3350
+Wire Wire Line
+ 6000 3450 6450 3450
+Wire Wire Line
+ 1200 5600 6450 5600
+Connection ~ 4950 5600
+Connection ~ 4850 5600
+Wire Wire Line
+ 4750 5600 4750 5700
+Connection ~ 4750 5600
+Connection ~ 4500 5600
+Text Label 6050 4550 0 60 ~ 0
+HWB
+Wire Wire Line
+ 6000 5350 6450 5350
+Wire Wire Line
+ 6000 3650 6450 3650
+Wire Wire Line
+ 6000 3750 6450 3750
+Text Label 6050 3650 0 60 ~ 0
+SCL
+Text Label 6050 3750 0 60 ~ 0
+SDA
+Wire Wire Line
+ 6000 3850 6450 3850
+Wire Wire Line
+ 6000 3950 6450 3950
+Wire Wire Line
+ 6000 4650 6450 4650
+Text Label 6050 4650 0 60 ~ 0
+BUZZ
+NoConn ~ 10750 4600
+NoConn ~ 10750 5000
+NoConn ~ 10750 5200
+Entry Wire Line
+ 10750 3400 10850 3500
+Entry Wire Line
+ 10750 3500 10850 3600
+Entry Wire Line
+ 10750 4500 10850 4600
+Wire Wire Line
+ 2850 4050 3750 4050
+Text Label 2950 4050 0 60 ~ 0
+UCAP
+Wire Wire Line
+ 6000 4850 6450 4850
+Wire Wire Line
+ 6000 4950 6450 4950
+NoConn ~ 6450 4850
+NoConn ~ 6450 4950
+NoConn ~ 6450 4550
+$Comp
+L USB-MINI-B CON1
+U 1 1 546431C1
+P 2100 5050
+F 0 "CON1" H 1850 5500 60 0000 C CNN
+F 1 "USB-MINI-B" H 2050 4550 60 0000 C CNN
+F 2 "" H 2100 5050 60 0000 C CNN
+F 3 "" H 2100 5050 60 0000 C CNN
+ 1 2100 5050
+ 0 1 1 0
+$EndComp
+$Comp
+L VCC #PWR03
+U 1 1 54643698
+P 2400 4400
+F 0 "#PWR03" H 2400 4500 30 0001 C CNN
+F 1 "VCC" H 2400 4500 30 0000 C CNN
+F 2 "" H 2400 4400 60 0000 C CNN
+F 3 "" H 2400 4400 60 0000 C CNN
+ 1 2400 4400
+ 1 0 0 -1
+$EndComp
+Text Notes 2600 2750 0 60 ~ 0
+Teensy 2.0\n(not fully drawn)
+$Comp
+L CONN_7 B7K-PH-K-S1
+U 1 1 54643939
+P 1950 6900
+F 0 "B7K-PH-K-S1" V 1920 6900 60 0000 C CNN
+F 1 "CONN_7" V 2020 6900 60 0000 C CNN
+F 2 "" H 1950 6900 60 0000 C CNN
+F 3 "" H 1950 6900 60 0000 C CNN
+ 1 1950 6900
+ 1 0 0 -1
+$EndComp
+Connection ~ 3750 5600
+Connection ~ 2400 5600
+Connection ~ 2250 5600
+Connection ~ 1950 5600
+Wire Wire Line
+ 2400 4400 2400 4500
+Wire Wire Line
+ 2250 4000 2250 4500
+Wire Wire Line
+ 1200 3800 2250 3800
+Wire Wire Line
+ 2100 3800 2100 4500
+Wire Wire Line
+ 2850 4450 2850 5600
+Connection ~ 2850 5600
+Entry Wire Line
+ 1100 6800 1200 6900
+Entry Wire Line
+ 1100 6900 1200 7000
+Entry Wire Line
+ 1100 7000 1200 7100
+Entry Wire Line
+ 1100 6700 1200 6800
+Wire Wire Line
+ 1200 6600 1600 6600
+Wire Wire Line
+ 1200 6700 1600 6700
+Wire Wire Line
+ 1200 6800 1600 6800
+Wire Wire Line
+ 1200 6900 1600 6900
+Wire Wire Line
+ 1200 7000 1600 7000
+Wire Wire Line
+ 1200 7100 1600 7100
+Wire Wire Line
+ 1200 7200 1600 7200
+Text Label 1300 6600 0 60 ~ 0
+FS2
+Text Label 1300 6700 0 60 ~ 0
+FS1
+Text Label 1300 6800 0 60 ~ 0
+VCC
+Text Label 1300 6900 0 60 ~ 0
+D-
+Text Label 1300 7000 0 60 ~ 0
+D+
+Text Label 1300 7100 0 60 ~ 0
+GND
+Text Label 1300 7200 0 60 ~ 0
+FS3
+NoConn ~ 3750 2450
+Wire Wire Line
+ 3600 2000 3600 3650
+Wire Wire Line
+ 3600 3650 3750 3650
+NoConn ~ 1950 4500
+Wire Bus Line
+ 1100 1900 1100 7100
+NoConn ~ 1200 6600
+NoConn ~ 1200 6700
+NoConn ~ 1200 7200
+Connection ~ 2100 3800
+Wire Wire Line
+ 1200 4000 2250 4000
+Entry Wire Line
+ 1100 3700 1200 3800
+Entry Wire Line
+ 1100 3900 1200 4000
+Text Label 10350 1500 0 60 ~ 0
+VCC
+Entry Wire Line
+ 1100 1900 1200 2000
+Text Label 1250 2000 0 60 ~ 0
+VCC
+Entry Wire Line
+ 1100 5500 1200 5600
+Connection ~ 1800 5600
+Text Label 1300 5600 0 60 ~ 0
+GND
+Wire Wire Line
+ 9250 5500 10750 5500
+Entry Wire Line
+ 10750 5500 10850 5600
+Text Label 10350 5500 0 60 ~ 0
+GND
+Wire Wire Line
+ 9250 1500 10750 1500
+Entry Wire Line
+ 10750 1500 10850 1600
+Connection ~ 3600 2000
+Wire Wire Line
+ 4800 2000 4800 2200
+Entry Wire Line
+ 6450 2000 6550 2100
+Text Label 6050 2000 0 60 ~ 0
+VCC
+Connection ~ 5050 5600
+Entry Wire Line
+ 6450 5600 6550 5700
+Text Label 6050 5600 0 60 ~ 0
+GND
+NoConn ~ 6450 3850
+NoConn ~ 6450 3950
+Wire Wire Line
+ 1800 4500 1500 4500
+Wire Wire Line
+ 1500 4500 1500 5600
+Connection ~ 1500 5600
+Entry Wire Line
+ 10750 2500 10850 2600
+Entry Wire Line
+ 10750 2100 10850 2200
+Text Notes 1000 5300 1 60 ~ 0
+Sacrificial USB cable from header to Teensy
+Text Notes 7850 5950 0 60 ~ 0
+Ribbon cable between Teensy pins and socket
+Wire Bus Line
+ 10850 6050 6550 6050
+$EndSCHEMATC
diff --git a/keyboards/kinesis/docs/photos/P1050573.jpg b/keyboards/kinesis/docs/photos/P1050573.jpg
new file mode 100644
index 0000000000..027ab9efb2
--- /dev/null
+++ b/keyboards/kinesis/docs/photos/P1050573.jpg
Binary files differ
diff --git a/keyboards/kinesis/docs/photos/P1050574.jpg b/keyboards/kinesis/docs/photos/P1050574.jpg
new file mode 100644
index 0000000000..d49c492b8a
--- /dev/null
+++ b/keyboards/kinesis/docs/photos/P1050574.jpg
Binary files differ
diff --git a/keyboards/kinesis/docs/photos/P1050575.jpg b/keyboards/kinesis/docs/photos/P1050575.jpg
new file mode 100644
index 0000000000..50cc9897c4
--- /dev/null
+++ b/keyboards/kinesis/docs/photos/P1050575.jpg
Binary files differ
diff --git a/keyboards/kinesis/docs/readme.txt b/keyboards/kinesis/docs/readme.txt
new file mode 100644
index 0000000000..af33ac4907
--- /dev/null
+++ b/keyboards/kinesis/docs/readme.txt
@@ -0,0 +1,52 @@
+This directory of documentation was copied from https://github.com/wjanssens/tmk_keyboard/tree/master/keyboard/kinesis
+and is probably Copyright 2014 Warren Janssens <warren.janssens@gmail.com>
+and probably released under GPL v2, which may be recovered at <http://www.gnu.org/licenses/>.
+
+Row configuration
+PF0 A
+PF1 B
+PF2 C
+PF3 G 0 = U4, 1 = U5
+
+Column configuration
+ 4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7
+ r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16
+PB0 21 c1 f6 f8 f7 5 4 3 2 1 =+
+PB1 22 c2 f3 f5 f4 t r e w q TAB
+PB2 23 c3 ESC f2 f1 g f d s a CL
+PB3 24 c4 f9 f11 f10 b v c x z LS UP DN [{ ]}
+PB4 25 c5 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_
+PB5 26 c6 PB PGM KPD y u i o p \
+PB6 27 c7 LC DL BS RC EN SP h j k l ;: '"
+PB7 28 c8 RA PU PD n m ,< .> /? RS
+ */
+
+
+40 pin connector
+
+ DL2 1 40 VCC
+ DR1 2 39 A
+ DR2 3 38 B
+ DL1 4 37 C
+ KPD 5 36 G
+ PGM 6 35
+ SCL 7 34
+ SDA 8 33
+ RST 9 32 BUZZ
+ WP 10 31 EA
+ FS1 11 30 ALE
+ CLOCK 12 29 PSEN
+ DATA 13 28 r8
+ 14 27 r7
+ FS3 15 26 r6
+ 16 25 r5
+ FS2 17 24 r4
+ XTAL1 18 23 r3
+ XTAL2 19 22 r2
+ GND 20 21 r1
+
+
+references:
+https://github.com/chrisandreae/keyboard-firmware
+
+
diff --git a/keyboards/kinesis/docs/schematic.png b/keyboards/kinesis/docs/schematic.png
new file mode 100644
index 0000000000..fa9405a1fa
--- /dev/null
+++ b/keyboards/kinesis/docs/schematic.png
Binary files differ
diff --git a/keyboards/kinesis/keymaps/default/Makefile b/keyboards/kinesis/keymaps/default/Makefile
new file mode 100644
index 0000000000..9d3df5964f
--- /dev/null
+++ b/keyboards/kinesis/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 = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # 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 = no # 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
diff --git a/keyboards/kinesis/keymaps/default/config.h b/keyboards/kinesis/keymaps/default/config.h
new file mode 100644
index 0000000000..8893d122e0
--- /dev/null
+++ b/keyboards/kinesis/keymaps/default/config.h
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif
diff --git a/keyboards/kinesis/keymaps/default/keymap.c b/keyboards/kinesis/keymaps/default/keymap.c
new file mode 100644
index 0000000000..3bf80699ce
--- /dev/null
+++ b/keyboards/kinesis/keymaps/default/keymap.c
@@ -0,0 +1,116 @@
+#include "kinesis.h"
+#include "action_layer.h"
+
+#define QWERTY 0 // Base qerty
+#define SYMB 1// Symbol layer
+
+// An almost entirely blank keymap. Test layers with the upper right hand key - 1 in normal mode, reset in layer 2.
+
+
+/****************************************************************************************************
+*
+* Keymap: Default Layer in Qwerty
+*
+* ,-------------------------------------------------------------------------------------------------------------------.
+* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | PSCR | SLCK | PAUS | FN0 | BOOT |
+* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
+* | =+ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ |
+* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
+* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | Caps | A | S | D | F | G | | H | J | K | L | ;: | '" |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? | Shift |
+* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
+* | `~ | INS | Left | Right| | Up | Down | [{ | ]} |
+* `---------------------------' `---------------------------'
+* ,-------------. ,-------------.
+* | Ctrl | Alt | | Gui | Ctrl |
+* ,------|------|------| |------+------+------.
+* | | | Home | | PgUp | | |
+* | BkSp | Del |------| |------|Return| Space|
+* | | | End | | PgDn | | |
+* `--------------------' `--------------------'
+*/
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[QWERTY] = KEYMAP(
+ KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8,
+ KC_EQL, KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,
+ KC_TAB, KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,
+ KC_CAPS,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
+ KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
+ KC_GRV ,KC_INS ,KC_LEFT,KC_RGHT,
+ KC_LCTL,KC_LALT,
+ KC_HOME,
+ KC_BSPC,KC_DEL ,KC_END ,
+ KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_PSCR ,KC_SLCK ,KC_PAUS, KC_FN0, KC_1,
+ KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS,
+ KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS,
+ KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT,
+ KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT,
+ KC_UP ,KC_DOWN,KC_LBRC,KC_RBRC,
+ KC_RGUI,KC_RCTL,
+ KC_PGUP,
+ KC_PGDN,KC_ENTER ,KC_SPC
+ ),
+[SYMB] = KEYMAP(
+ 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, 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_FN0, RESET,
+ 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,
+ KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_TAP_TOGGLE(SYMB) , // FN1 - Momentary Layer 1 (Symbols)
+
+
+};
+
+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;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/kinesis/keymaps/default/readme.md b/keyboards/kinesis/keymaps/default/readme.md
new file mode 100644
index 0000000000..da033be1e9
--- /dev/null
+++ b/keyboards/kinesis/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for kinesis-advantage
diff --git a/keyboards/kinesis/keymaps/programmer/Makefile b/keyboards/kinesis/keymaps/programmer/Makefile
new file mode 100644
index 0000000000..9d3df5964f
--- /dev/null
+++ b/keyboards/kinesis/keymaps/programmer/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 = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # 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 = no # 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
diff --git a/keyboards/kinesis/keymaps/programmer/config.h b/keyboards/kinesis/keymaps/programmer/config.h
new file mode 100644
index 0000000000..8893d122e0
--- /dev/null
+++ b/keyboards/kinesis/keymaps/programmer/config.h
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif
diff --git a/keyboards/kinesis/keymaps/programmer/keymap.c b/keyboards/kinesis/keymaps/programmer/keymap.c
new file mode 100644
index 0000000000..83fb7bd5f5
--- /dev/null
+++ b/keyboards/kinesis/keymaps/programmer/keymap.c
@@ -0,0 +1,245 @@
+#include "kinesis.h"
+#include "action_layer.h"
+#include "mousekey.h"
+
+#define QWERTY 0 // Base qerty
+#define SYMB 1// Symbol layer
+#define MOUSE 2//
+
+
+
+
+/* Macros */
+enum {
+ NONE = 0,
+ // Diagonal mouse movement
+ A_MUL,
+ A_MUR,
+ A_MDL,
+ A_MDR,
+};
+
+
+// Borrowing very heavily from
+// https://github.com/alvicstep/tmk_keyboard
+/****************************************************************************************************
+*
+* Keymap: Default Layer in Qwerty
+*
+* ,-------------------------------------------------------------------------------------------------------------------.
+* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | | bOOT |
+* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
+* | =+ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ |
+* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
+* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* |MouseFN1| A | S | D | F | G | | H | J | K | L | ;: | '" |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? | Shift |
+* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
+* | `~ | ESC |MOUSE1|MOUSE2| | [{ | ]} | ESC | GUI |
+* `---------------------------' `---------------------------'
+* ,-------------. ,-------------.
+* | Ctrl | Alt | | Gui | Ctrl |
+* ,------|------|------| |------+------+------.
+* | | | Home | | PgUp | | |
+* | BkSp | Del |------| |------|Return| Space|
+* | | | End | | PgDn | | |
+* `--------------------' `--------------------'
+*/
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[QWERTY] = KEYMAP(
+ KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8,
+ KC_EQL, KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,
+ KC_TAB, KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,
+ KC_FN1 ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
+ KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
+ KC_GRV ,KC_ESC, KC_BTN1,KC_BTN2,
+ KC_LCTL,KC_LALT,
+ KC_HOME,
+ KC_BSPC,KC_DEL ,KC_FN0 ,
+ KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_FN0 ,KC_FN1 ,KC_FN2, KC_NO, RESET,
+ KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS,
+ KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS,
+ KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT,
+ KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT,
+ KC_LBRC,KC_RBRC, KC_ESC, KC_RGUI,
+ KC_RGUI,KC_RCTL,
+ KC_PGUP,
+ KC_PGDN,KC_ENTER ,KC_SPC
+ ),
+[SYMB] = KEYMAP(
+ 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, 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_FN0, KC_2,
+ 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,
+ KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+/* Keymap: Movement and function layer
+*
+* ,-------------------------------------------------------------------------------------------------------------------.
+* | Caps | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | Tada | bOOT |
+* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
+* | =+ | ! | @ | # | $ | % | | ^ | & | * | ( | ) |MS Fast |
+* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
+* | Tab | | | Up | |PgUp | | MwU |MS_UL | MS_U |MS_UR | | Ms Norm|
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* |MouseFN1| C^A | Left | Down |Right | C^E | | | MS_L |Mouse1| MS_R | |MS Slow |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | | GuiZ | GUI X| GUI C| GUI_V|PgDown| | MWD | MDown|MS Dwn|MS_DR | ? | |
+* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
+* | `~ | ESC | < | > | | { | } | ESC | |
+* `---------------------------' `---------------------------'
+* ,-------------. ,-------------.
+* | Ctrl | Alt | | Gui | Ctrl |
+* ,------|------|------| |------+------+------.
+* | | | Home | | PgUp | | |
+* | BkSp | Del |------| |------|Mouse1|Mouse2|
+* | | | End | | PgDn |LClick|Rclick|
+* `--------------------' `--------------------'
+*/
+
+
+[MOUSE] = KEYMAP(
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_EXLM ,KC_AT, KC_HASH, KC_DLR ,KC_PERC ,
+ KC_TRNS, KC_NO, KC_NO, KC_UP, KC_NO, KC_PGUP,
+ KC_FN1, LCTL(KC_A),KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_E),
+ KC_TRNS, LGUI(KC_Z),LGUI(KC_X),LGUI(KC_C),LGUI(KC_V),KC_PGDN,
+ KC_TRNS, KC_TRNS, KC_LABK, KC_RABK,
+ 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_FN0,RESET,
+ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_ACL2,
+ KC_WH_U, M(A_MUL), KC_MS_U, M(A_MUR), KC_NO, KC_ACL1,
+ KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_ACL0,
+ KC_WH_D, M(A_MDL), KC_MS_D, M(A_MDR), KC_TRNS, KC_TRNS,
+ KC_LCBR, KC_RCBR, KC_ESC, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_BTN1, KC_BTN2
+ ),
+
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_TAP_TOGGLE(MOUSE) , // FN1 - Momentary Layer 1 (Symbols)
+ [1] = ACTION_LAYER_TOGGLE(MOUSE) , // FN1 - Momentary Layer 1 (Symbols)
+ [2] = ACTION_LAYER_TAP_TOGGLE(SYMB) , // FN1 - Momentary Layer 1 (Symbols)
+
+
+};
+
+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;
+
+ // from algernon's ErgoDox EZ layout,
+ case A_MUL:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_LEFT);
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_LEFT);
+ }
+ mousekey_send();
+ break;
+
+ case A_MUR:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_RIGHT);
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_RIGHT);
+ }
+ mousekey_send();
+ break;
+
+ case A_MDL:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_LEFT);
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_LEFT);
+ }
+ mousekey_send();
+ break;
+
+ case A_MDR:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_RIGHT);
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_RIGHT);
+ }
+ mousekey_send();
+ break;
+ }
+ return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+
+}
+
+void matrix_scan_user(void) {
+ int8_t layer = biton32(layer_state);
+
+ switch (layer) {
+ case 1:
+ all_led_off();
+ break;
+ case 2:
+ if (!(host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK))) {
+ all_led_off();
+ caps_lock_led_on();
+ }
+ break;
+ case 0:
+ all_led_off();
+ num_lock_led_on();
+ break;
+ default:
+ break;
+ }
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/kinesis/keymaps/programmer/readme.md b/keyboards/kinesis/keymaps/programmer/readme.md
new file mode 100644
index 0000000000..76356a6871
--- /dev/null
+++ b/keyboards/kinesis/keymaps/programmer/readme.md
@@ -0,0 +1,2 @@
+# a programmer friendly keymap for the kinesis-advantage
+# not really baked yet.
diff --git a/keyboards/kinesis/kinesis.c b/keyboards/kinesis/kinesis.c
new file mode 100644
index 0000000000..1fee90e6f9
--- /dev/null
+++ b/keyboards/kinesis/kinesis.c
@@ -0,0 +1,106 @@
+#include "kinesis.h"
+
+// begin section origin https://github.com/alvicstep/tmk_keyboard
+
+
+void all_led_off(void)
+{
+ PORTD = 0b11111111;
+}
+
+void all_led_on(void)
+{
+ PORTD = 0b00000000;
+}
+void num_lock_led_on(void)
+{
+ PORTD = 0b11101111;
+}
+
+void caps_lock_led_on(void)
+{
+ PORTD = 0b01111111;
+}
+
+void scroll_lock_led_on(void)
+{
+ PORTD = 0b11011111;
+}
+void keypad_led_on(void)
+{
+ PORTD = 0b10111111;
+}
+void blink_all_leds(void)
+{
+ all_led_on();
+ _delay_ms(500);
+
+ all_led_off();
+ _delay_ms(100);
+
+ caps_lock_led_on();
+ _delay_ms(100);
+
+ num_lock_led_on();
+ _delay_ms(100);
+
+ scroll_lock_led_on();
+ _delay_ms(100);
+
+ keypad_led_on();
+ _delay_ms(100);
+
+ //back
+
+ scroll_lock_led_on();
+ _delay_ms(100);
+
+ num_lock_led_on();
+ _delay_ms(100);
+
+ caps_lock_led_on();
+ _delay_ms(100);
+
+ all_led_off();
+}
+
+// End section origin https://github.com/alvicstep/tmk_keyboard
+
+ void matrix_init_kb(void) {
+ blink_all_leds();
+ 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
+
+//Copyright 2014 Warren Janssens <warren.janssens@gmail.com>
+ uint8_t leds = 0xF0;
+ if (usb_led & 1 << USB_LED_NUM_LOCK)
+ leds &= ~0x10;
+ if (usb_led & 1 << USB_LED_CAPS_LOCK)
+ leds &= ~0x80;
+ if (usb_led & 1 << USB_LED_SCROLL_LOCK)
+ leds &= ~0x20;
+ PORTD = (PORTD & 0x0F) | leds;
+
+ led_set_user(usb_led);
+
+}
+
+
diff --git a/keyboards/kinesis/kinesis.h b/keyboards/kinesis/kinesis.h
new file mode 100644
index 0000000000..c04fbda155
--- /dev/null
+++ b/keyboards/kinesis/kinesis.h
@@ -0,0 +1,67 @@
+#ifndef KINESIS_H
+#define KINESIS_H
+
+#include "quantum.h"
+
+
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+
+#define KEYMAP( \
+ k02,k22,k12,k01,k21,k11,k00,k20,k10, \
+ k80,k70,k60,k50,k40,k30, \
+ k81,k71,k61,k51,k41,k31, \
+ k82,k72,k62,k52,k42,k32, \
+ k83,k73,k63,k53,k43,k33, \
+ k74,k64,k54,k34, \
+ k36,k35, \
+ k55, \
+ k56,k46,k75, \
+ k03,k23,k13,k04,k24,k14,k05,k85,k84, \
+ k94,kA4,kB4,kD4,kE4,kF4, \
+ k95,kA5,kB5,kD5,kE5,kF5, \
+ k96,kA6,kB6,kD6,kE6,kF6, \
+ k97,kA7,kB7,kD7,kE7,kF7, \
+ k93,kB3,kD3,kE3, \
+ k47,k66, \
+ k67, \
+ k87,k76,k86 \
+) { \
+ { k00, k01, k02, k03, k04, k05, KC_NO, KC_NO }, \
+ { k10, k11, k12, k13, k14, KC_NO, KC_NO, KC_NO }, \
+ { k20, k21, k22, k23, k24, KC_NO, KC_NO, KC_NO }, \
+ { k30, k31, k32, k33, k34, k35, k36, KC_NO }, \
+ { k40, k41, k42, k43, KC_NO, KC_NO, k46, k47 }, \
+ { k50, k51, k52, k53, k54, k55, k56, KC_NO }, \
+ { k60, k61, k62, k63, k64, KC_NO, k66, k67 }, \
+ { k70, k71, k72, k73, k74, k75, k76, KC_NO }, \
+ { k80, k81, k82, k83, KC_NO ,KC_NO, k86, k87}, \
+ { KC_NO, KC_NO ,KC_NO ,k93, k94, k95, k96, k97}, \
+ { KC_NO, KC_NO ,KC_NO ,KC_NO, kA4, kA5, kA6, kA7}, \
+ { KC_NO, KC_NO ,KC_NO ,kB3, kB4, kB5, kB6, kB7}, \
+ { KC_NO, KC_NO ,KC_NO ,KC_NO, KC_NO, KC_NO, k84, k85}, \
+ { KC_NO, KC_NO ,KC_NO ,kD3, kD4, kD5, kD6, kD7}, \
+ { KC_NO, KC_NO ,KC_NO ,kE3, kE4, kE5, kE6, kE7}, \
+ { KC_NO, KC_NO ,KC_NO ,KC_NO, kF4, kF5, kF6, kF7} \
+}
+
+
+/* 4y0 A 4y1 B 4y2 4y3 D 4y4 E 4y5 F 4y6 G 4y7 H 5y0 I 5y1 J 5y2 K 5y3 L 5y4 M 5y5 N 5y6 O 5y7 P */
+
+/*
+ 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ A B C D E F G H I J K L M N O P
+ 4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7
+ r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
+0 PB0 21 c0 f6 f8 f7 5 4 3 2 1 =+
+1 PB1 22 c1 f3 f5 f4 t r e w q TAB
+2 PB2 23 c2 ESC f2 f1 g f d s a CL
+3 PB3 24 c3 f9 f11 f10 b v c x z LS UP DN [{ ]}
+4 PB4 25 c4 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_
+5 PB5 26 c5 PB PGM KPD LA HM END y u i o p \
+6 PB6 27 c6 LC DEL BS RC ENT SP h j k l ;: '"
+7 PB7 28 c7 RA PU PD n m ,< .> /? RS
+*/
+
+
+#endif
diff --git a/keyboards/kinesis/matrix.c b/keyboards/kinesis/matrix.c
new file mode 100644
index 0000000000..cb0d5ad7df
--- /dev/null
+++ b/keyboards/kinesis/matrix.c
@@ -0,0 +1,228 @@
+/*
+Copyright 2014 Warren Janssens <warren.janssens@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/>.
+*/
+
+/*
+ * scan matrix
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "action_layer.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "led.h"
+#include "config.h"
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+static uint8_t debouncing = DEBOUNCE;
+
+/* matrix state(1:on, 0:off) */
+static uint8_t matrix[MATRIX_ROWS];
+static uint8_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t read_row(uint8_t row);
+static void unselect_rows(void);
+static void select_rows(uint8_t row);
+
+__attribute__ ((weak))
+void matrix_init_quantum(void) {
+ matrix_init_kb();
+}
+
+__attribute__ ((weak))
+void matrix_scan_quantum(void) {
+ matrix_scan_kb();
+}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+ //debug_enable = true;
+
+ //dprint("matrix_init"); dprintln();
+ // output high (leds)
+ DDRD = 0xFF;
+ PORTD = 0xFF;
+
+ // output low (multiplexers)
+ DDRF = 0xFF;
+ PORTF = 0x00;
+
+ // input with pullup (matrix)
+ DDRB = 0x00;
+ PORTB = 0xFF;
+
+ // input with pullup (program and keypad buttons)
+ DDRC = 0x00;
+ PORTC = 0xFF;
+
+ // initialize row and col
+ unselect_rows();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+
+}
+
+uint8_t matrix_scan(void)
+{
+
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ select_rows(i);
+ uint8_t row = read_row(i);
+ if (matrix_debouncing[i] != row) {
+ matrix_debouncing[i] = row;
+ if (debouncing) {
+ debug("bounce!: "); debug_hex(debouncing); debug("\n");
+ }
+ debouncing = DEBOUNCE;
+ }
+ unselect_rows();
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ } else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+ matrix_scan_quantum();
+ return 1;
+}
+
+bool matrix_is_modified(void)
+{
+ if (debouncing) return false;
+ return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 01234567\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ pbin_reverse(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += bitpop16(matrix[i]);
+ }
+ return count;
+}
+
+static matrix_row_t read_row(uint8_t row)
+{
+ _delay_us(30); // without this wait read unstable value.
+
+ //keypad and program buttons
+ if (row == 12)
+ {
+ return ~(PINC | 0b00111111);
+ }
+ return ~PINB;
+}
+
+static void unselect_rows(void)
+{
+ // set A,B,C,G to 0 (F4 - F7)
+ PORTF &= 0x0F;
+}
+
+static void select_rows(uint8_t row)
+{
+ // set A,B,C,G to row value
+ PORTF |= row << 4;
+}
+
+
+/* Row pin configuration
+PF0 A
+PF1 B
+PF2 C
+PF3 G 0 = U4, 1 = U5
+
+ 4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7
+ r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16
+PB0 21 c1 f6 f8 f7 5 4 3 2 1 =+
+PB1 22 c2 f3 f5 f4 t r e w q TAB
+PB2 23 c3 ESC f2 f1 g f d s a CL
+PB3 24 c4 f9 f11 f10 b v c x z LS UP DN [{ ]}
+PB4 25 c5 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_
+PB5 26 c6 PB PGM KPD y u i o p \
+PB6 27 c7 LC DL BS RC EN SP h j k l ;: '"
+PB7 28 c8 RA PU PD n m ,< .> /? RS
+ */
+
+
diff --git a/keyboards/kinesis/readme.md b/keyboards/kinesis/readme.md
new file mode 100644
index 0000000000..a990f9cb99
--- /dev/null
+++ b/keyboards/kinesis/readme.md
@@ -0,0 +1,42 @@
+kinesis-advantage keyboard firmware
+======================
+
+## Kinesis specific information
+This is a port of https://github.com/alvicstep/tmk_keyboard,
+which is a fork of https://github.com/wjanssens/tmk_keyboard,
+which is based on work from https://github.com/chrisandreae/keyboard-firmware
+
+If you replace the kinesis CPU as described in the doc folder, then this code should allow you to use QMK.
+I've tested with a Teensy 2++, remember to change the CPU if you use a 32u4 instead.
+
+Not yet implemented:
+- Kinesis EEProm reading or writing
+- Audio - this should be simple if we remove hardcoded pins from audio.h and switch to E7
+
+
+
+## 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/kinesis-advantage 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/`
diff --git a/keyboards/phantom/readme.md b/keyboards/phantom/readme.md
new file mode 100644
index 0000000000..190f738faf
--- /dev/null
+++ b/keyboards/phantom/readme.md
@@ -0,0 +1,4 @@
+Phantom keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/planck/keymaps/bone2planck/keymap.c b/keyboards/planck/keymaps/bone2planck/keymap.c
index f40b08685b..ceb5564251 100644
--- a/keyboards/planck/keymaps/bone2planck/keymap.c
+++ b/keyboards/planck/keymaps/bone2planck/keymap.c
@@ -3,89 +3,135 @@
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
-#include "keymap_german.h"
+#include "..\..\..\..\quantum\keymap_extras\keymap_german.h"
+#include "..\..\..\..\quantum\keymap_common.h"
+#include "..\..\..\..\tmk_core\common\keycode.h"
+#define _______ = KC_TRNS;
/* This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout.
- It has Umlauts and "ß" as it is optimized for a mix of German & English.
- My favourite features are the placement of the special characters often used for programming right on the home row
- and the number & navigation block combo, so you never have to move your hands from their home position.
-
- Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone
+It has "üäöß" as it is optimized for a mix of German & English.
+My favourite features are the placement of the special characters often used for programming right on the home row
+and the number & navigation block combo, so you never have to move your hands from their home position.
+
+Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Bone2
- * ,-----------------------------------------------------------------------------------.
- * | Q | J | D | U | A | X | P | H | L | M | W | ẞ |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | M1 | C | T | I | E | O | B | N | R | S | G | M1 |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| F | V | Ü | Ä | Ö | Y | Z | , | . | K |Shift |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter |
- * `-----------------------------------------------------------------------------------'
- */
- [0] = {
- { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS },
- { MO(1), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, MO(1) },
- { DE_S, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, DE_S },
- { KC_LCTL, KC_LGUI, KC_LALT, MO(3), MO(2), KC_SPC, KC_SPC, MO(2), MO(3), KC_ESC, KC_TAB, KC_ENT }
- },
+/* Bone2
+* ,-----------------------------------------------------------------------------------.
+* | Q | J | D | U | A | X | P | H | L | M | W | ẞ |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* |M1/Tab| C | T | I | E | O | B | N | R | S | G |M1/Ent| //hold for M1, tap for Tab/Enter
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift| F | V | Ü | Ä | Ö | Y | Z | , | . | K |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | GUI | Ctrl | Alt | M4 | M2 | Space | M2 | M4 | | Ctrl | Esc |
+* `-----------------------------------------------------------------------------------'
+*/
+[0] = {
+ { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS },
+ { LT(1,KC_TAB), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, LT(1,KC_ENT) },
+ { KC_LSFT, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, KC_LSFT },
+ { KC_LGUI, KC_LCTL, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4), KC_NO, KC_RCTL, KC_ESC }
+},
- /* M1 Special Characters
- * ,-----------------------------------------------------------------------------------.
- * | ° | @ | _ | [ | ] | ^ | ! | < | > | = | & | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | M1 | \ | / | { | } | * | ? | ( | ) | - | : | M1 |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | # | $ | | | ~ | € | + | % | " | ' | ; | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter |
- * `-----------------------------------------------------------------------------------'
- */
- [1] = {
- { DE_RING, DE_AT, DE_UNDS, DE_LBRC, DE_RBRC, DE_CIRC, DE_EXLM, DE_LESS, DE_MORE, DE_EQL, DE_AMPR, KC_NO },
- { KC_TRNS, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR, DE_QST, DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, KC_TRNS },
- { KC_NO , DE_HASH, DE_DLR, DE_PIPE, DE_TILD, DE_EURO, DE_PLUS, DE_PERC, DE_DQOT, DE_QUOT, DE_SCLN, KC_NO },
- { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }
- },
+/* M1 Special Characters
+very ergonomic placement for coding
+* ,-----------------------------------------------------------------------------------.
+* | ° | @ | _ | [ | ] | ^ | ! | < | > | = | & | ´ |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* |M1/Tab| \ | / | { | } | * | ? | ( | ) | - | : |M1/Ent| //hold for M1, tap for Tab/Enter
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift| # | $ | | | ~ | € | + | % | " | ' | ; |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | GUI | Ctrl | Alt | M4 | M2 | Space | M2 | M4 | | Ctrl | Esc |
+* `-----------------------------------------------------------------------------------'
+*/
+[1] = {
+ { DE_RING, DE_AT, DE_UNDS, DE_LBRC, DE_RBRC, DE_CIRC, DE_EXLM, DE_LESS, DE_MORE, DE_EQL, DE_AMPR, DE_ACUT },
+ { _______, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR, DE_QST, DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, _______ },
+ { _______, DE_HASH, DE_DLR, DE_PIPE, DE_TILD, DE_EURO, DE_PLUS, DE_PERC, DE_DQOT, DE_QUOT, DE_SCLN, _______ },
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
+},
- /* Navigation & Number Blocks
- * ,-----------------------------------------------------------------------------------.
- * | | PgUp | Bksp | Up | DEL | PgDn | | 7 | 8 | 9 | | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | Home | Lft | Down | Right| End | . | 4 | 5 | 6 | , | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| | Tab | Ins | Enter| | 0 | 1 | 2 | 3 | ; |Shift |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter |
- * `-----------------------------------------------------------------------------------'
- */
- [2] = {
- { KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_NO },
- { KC_NO, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_NO },
- { DE_S, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, KC_0, DE_1, DE_2, DE_3, DE_SCLN, DE_S },
- { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }
- },
+/* Navigation & Number Blocks
+very easy to get used to & intuituve placement
+* ,-----------------------------------------------------------------------------------.
+* | | PgUp | Bksp | Up | DEL | PgDn | | 7 | 8 | 9 | | |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* | Tab | Home | Lft | Down | Right| End | . | 4 | 5 | 6 | , | Enter|
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift| | Tab | Ins | Enter| | 0 | 1 | 2 | 3 | ; |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | GUI | Ctrl | Alt | M3 | M2 | Space | M2 | M3 | | Ctrl | Esc |
+* `-----------------------------------------------------------------------------------'
+*/
+[2] = {
+ { KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_NO },
+ { KC_TAB, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_ENT },
+ { _______, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, DE_0, DE_1, DE_2, DE_3, DE_SCLN, _______ },
+ { _______, _______, _______, MO(3), _______, _______, _______, _______, MO(3), _______, _______, _______ }
+},
- /* Function & Media Keys
- * ,-----------------------------------------------------------------------------------.
- * | | | Print|Scroll|Pause | | | F7 | F8 | F9 | F12 | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | Mute | Vol- | Vol+ | | ³ | F4 | F5 | F6 | F11 | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| | Prev | Play | Next | | ² | F1 | F2 | F3 | F10 |Shift |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | GUI | Alt | M3 | | Space | | M3 | Esc | Tab |Enter |
- * `-----------------------------------------------------------------------------------'
- */
- [3] = {
- { KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F12, KC_NO },
- { KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO },
- { KC_TRNS, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, KC_TRNS},
- { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
- }
+/* Flipped Navigation & Number Blocks for one handed use
+accessed by sliding from M2 to M3 with thumb
+* ,-----------------------------------------------------------------------------------.
+* | | | 7 | 8 | 9 | | PgUp | Bksp | Up | DEL | PgDn | |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* | Tab | . | 4 | 5 | 6 | , | Home | Left | Down | Right| End | Enter|
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift| 0 | 1 | 2 | 3 | ; | | Tab | Ins | Enter| |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | GUI | Ctrl | Alt | M3 | | Space | | M3 | | Ctrl | Esc |
+* `-----------------------------------------------------------------------------------'
+*/
+
+[3] = {
+ { KC_NO, KC_NO, DE_7, DE_8 DE_9, KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO },
+ { _______, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, _______ },
+ { _______, DE_0, DE_1, DE_2, DE_3, DE_SCLN, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, _______ },
+ { _______, _______, _______, _______, KC_NO, _______, _______, KC_NO, _______, _______, _______, _______ }
+},
+
+
+/* Function & Media Keys
+slide from m4 to m5 to access flipped version
+* ,-----------------------------------------------------------------------------------.
+* | | | Print|Scroll|Pause | | | F7 | F8 | F9 | F12 | |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* | | | Mute | Vol- | Vol+ | | ³ | F4 | F5 | F6 | F11 | |
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift| | Prev | Play | Next | | ² | F1 | F2 | F3 | F10 |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | GUI | Ctrl | Alt | M4 | M5 | Space | M5 | M4 | | Ctrl | Esc |
+* `-----------------------------------------------------------------------------------'
+*/
+[4] = {
+ { KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F12, KC_NO },
+ { KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO },
+ { _______, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, _______ },
+ { _______, _______, _______, _______, MO(5), _______, _______, MO(5), _______, _______, _______, _______ }
+}
+
+
+/* flipped Function & Media Keys
+* ,-----------------------------------------------------------------------------------.
+* | | | F7 | F8 | F9 | | | Print|Scroll| Pause| | |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* | | ³ | F4 | F5 | F6 | | | Mute | Vol- | Vol+ | | |
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift| ² | F1 | F2 | F3 | | | Prev | Play | Next | |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | GUI | Ctrl | Alt | | M5 | Space | M5 | | | Ctrl | Esc |
+* `-----------------------------------------------------------------------------------'
+*/
+[5] = {
+ { KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO },
+ { KC_NO, KC_SQ3, KC_F4, KC_F5, KC_F6, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO },
+ { _______, KC_SQ2, KC_F1, KC_F2, KC_F3, KC_NO, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, _______ },
+ { _______, _______, _______, KC_NO, _______, _______, _______, _______, KC_NO, _______, _______, _______ }
+}
};
const uint16_t PROGMEM fn_actions[] = {
diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c
index 9a957f7ee1..78b4997a8f 100644
--- a/keyboards/preonic/keymaps/default/keymap.c
+++ b/keyboards/preonic/keymaps/default/keymap.c
@@ -102,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
@@ -123,7 +123,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
@@ -142,9 +142,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | Reset| | | | | | | | | | Del |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | |Voice-|Voice+|Musoff|Mus on| | | | | | | |
+ * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
@@ -277,4 +277,4 @@ void music_scale_user(void)
PLAY_NOTE_ARRAY(music_scale, false, 0);
}
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/satan/Makefile b/keyboards/satan/Makefile
index 184b5ac372..a0879fc9c9 100644
--- a/keyboards/satan/Makefile
+++ b/keyboards/satan/Makefile
@@ -52,7 +52,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options
# comment out to disable the options.
#
-BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
CONSOLE_ENABLE ?= yes # Console for debug(+400)
diff --git a/keyboards/satan/keymaps/sethbc/Makefile b/keyboards/satan/keymaps/sethbc/Makefile
new file mode 100644
index 0000000000..2a7ff27793
--- /dev/null
+++ b/keyboards/satan/keymaps/sethbc/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 = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # 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 = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # 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
diff --git a/keyboards/satan/readme.md b/keyboards/satan/readme.md
new file mode 100644
index 0000000000..aa301f020c
--- /dev/null
+++ b/keyboards/satan/readme.md
@@ -0,0 +1,4 @@
+Clueboard keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/quantum/keymap_extras/keymap_dvorak.h b/quantum/keymap_extras/keymap_dvorak.h
index e855056e83..17f2059774 100644
--- a/quantum/keymap_extras/keymap_dvorak.h
+++ b/quantum/keymap_extras/keymap_dvorak.h
@@ -18,18 +18,19 @@
#define DV_LBRC KC_MINS
#define DV_RBRC KC_EQL
-#define DV_QUOT KC_Q
+#define DV_QUOT KC_Q
#define DV_COMM KC_W
#define DV_DOT KC_E
#define DV_P KC_R
#define DV_Y KC_T
#define DV_F KC_Y
#define DV_G KC_U
-#define DV_C KC_I
+#define DV_C KC_I
#define DV_R KC_O
#define DV_L KC_P
#define DV_SLSH KC_LBRC
#define DV_EQL KC_RBRC
+#define DV_BSLS KC_BSLS
#define DV_A KC_A
#define DV_O KC_S
@@ -68,7 +69,13 @@
#define DV_RPRN LSFT(DV_0)
#define DV_LCBR LSFT(DV_LBRC)
#define DV_RCBR LSFT(DV_RBRC)
-#define DV_UNDS LSFT(DV_MINS)
-#define DV_PLUS LSFT(DV_EQL)
+
+#define DV_QUES LSFT(DV_SLSH)
+#define DV_PLUS LSFT(DV_EQL)
+#define DV_PIPE LSFT(DV_BSLS)
+
+#define DV_UNDS LSFT(DV_MINS)
+
+#define DV_COLN LSFT(DV_SCLN)
#endif
diff --git a/quantum/keymap_extras/keymap_fr_ch.h b/quantum/keymap_extras/keymap_fr_ch.h
index 3fd9713575..87d4bb24cf 100644
--- a/quantum/keymap_extras/keymap_fr_ch.h
+++ b/quantum/keymap_extras/keymap_fr_ch.h
@@ -4,7 +4,7 @@
#include "keymap.h"
// Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
#define FR_CH_ALGR KC_RALT
// normal characters
diff --git a/quantum/keymap_extras/keymap_french.h b/quantum/keymap_extras/keymap_french.h
index 2a44c80b14..834c69650e 100644
--- a/quantum/keymap_extras/keymap_french.h
+++ b/quantum/keymap_extras/keymap_french.h
@@ -4,7 +4,7 @@
#include "keymap.h"
// Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
#define NO_ALGR KC_RALT
// Normal characters
@@ -80,4 +80,4 @@
#define FR_EURO ALGR(KC_E)
#define FR_BULT ALGR(FR_DLR)
-#endif \ No newline at end of file
+#endif
diff --git a/quantum/keymap_extras/keymap_german.h b/quantum/keymap_extras/keymap_german.h
index 3f9ae8bade..7e2e0ed44e 100644
--- a/quantum/keymap_extras/keymap_german.h
+++ b/quantum/keymap_extras/keymap_german.h
@@ -4,7 +4,7 @@
#include "keymap.h"
// Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
#define DE_ALGR KC_RALT
// normal characters
diff --git a/quantum/keymap_extras/keymap_german_ch.h b/quantum/keymap_extras/keymap_german_ch.h
index 6a782bcd7b..b66d582a44 100644
--- a/quantum/keymap_extras/keymap_german_ch.h
+++ b/quantum/keymap_extras/keymap_german_ch.h
@@ -4,7 +4,7 @@
#include "keymap.h"
// Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
#define CH_ALGR KC_RALT
// normal characters
diff --git a/quantum/keymap_extras/keymap_nordic.h b/quantum/keymap_extras/keymap_nordic.h
index 3acb8b6983..f8cf4e2e43 100644
--- a/quantum/keymap_extras/keymap_nordic.h
+++ b/quantum/keymap_extras/keymap_nordic.h
@@ -4,7 +4,7 @@
#include "keymap.h"
// Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
#define NO_ALGR KC_RALT
// Normal characters
diff --git a/quantum/keymap_extras/keymap_spanish.h b/quantum/keymap_extras/keymap_spanish.h
index af76e39fcb..4ba568af23 100644
--- a/quantum/keymap_extras/keymap_spanish.h
+++ b/quantum/keymap_extras/keymap_spanish.h
@@ -4,7 +4,7 @@
#include "keymap.h"
// Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
#define NO_ALGR KC_RALT
// Normal characters
diff --git a/quantum/keymap_extras/keymap_uk.h b/quantum/keymap_extras/keymap_uk.h
index 5c5d951791..00c87afc3e 100644
--- a/quantum/keymap_extras/keymap_uk.h
+++ b/quantum/keymap_extras/keymap_uk.h
@@ -4,7 +4,7 @@
#include "keymap.h"
// Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
#define NO_ALGR KC_RALT
// Normal characters
@@ -33,4 +33,4 @@
#define UK_AACT ALGR(KC_A)
-#endif \ No newline at end of file
+#endif
diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c
index 9b172e1b6c..b9b836df2e 100644
--- a/quantum/process_keycode/process_tap_dance.c
+++ b/quantum/process_keycode/process_tap_dance.c
@@ -22,10 +22,29 @@ static void _process_tap_dance_action_pair (qk_tap_dance_state_t *state,
static void _process_tap_dance_action_fn (qk_tap_dance_state_t *state,
qk_tap_dance_user_fn_t fn)
{
- fn(state);
+ if (fn) {
+ fn(state);
+ }
+}
+
+void process_tap_dance_action_on_each_tap (uint16_t keycode)
+{
+ uint16_t idx = keycode - QK_TAP_DANCE;
+ qk_tap_dance_action_t action;
+
+ action = tap_dance_actions[idx];
+
+ switch (action.type) {
+ case QK_TAP_DANCE_TYPE_FN:
+ _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn.on_each_tap);
+ break;
+
+ default:
+ break;
+ }
}
-void process_tap_dance_action (uint16_t keycode)
+void process_tap_dance_action_on_dance_finished (uint16_t keycode)
{
uint16_t idx = keycode - QK_TAP_DANCE;
qk_tap_dance_action_t action;
@@ -38,7 +57,7 @@ void process_tap_dance_action (uint16_t keycode)
action.pair.kc1, action.pair.kc2);
break;
case QK_TAP_DANCE_TYPE_FN:
- _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn);
+ _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn.on_dance_finished);
break;
default:
@@ -51,8 +70,9 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
switch(keycode) {
case QK_TAP_DANCE ... QK_TAP_DANCE_MAX:
+ process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode);
if (qk_tap_dance_state.keycode && qk_tap_dance_state.keycode != keycode) {
- process_tap_dance_action (qk_tap_dance_state.keycode);
+ process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode);
} else {
r = false;
}
@@ -66,8 +86,9 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
default:
if (qk_tap_dance_state.keycode) {
- process_tap_dance_action (qk_tap_dance_state.keycode);
-
+ // if we are here, the tap dance was interrupted by a different key
+ process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode);
+ process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode);
reset_tap_dance (&qk_tap_dance_state);
}
break;
@@ -78,13 +99,28 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
void matrix_scan_tap_dance () {
if (qk_tap_dance_state.keycode && timer_elapsed (qk_tap_dance_state.timer) > TAPPING_TERM) {
- process_tap_dance_action (qk_tap_dance_state.keycode);
-
+ // if we are here, the tap dance was timed out
+ process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode);
reset_tap_dance (&qk_tap_dance_state);
}
}
void reset_tap_dance (qk_tap_dance_state_t *state) {
+ uint16_t idx = state->keycode - QK_TAP_DANCE;
+ qk_tap_dance_action_t action;
+
+ action = tap_dance_actions[idx];
+ switch (action.type) {
+ case QK_TAP_DANCE_TYPE_FN:
+ if (action.fn.on_reset) {
+ action.fn.on_reset(state);
+ }
+ break;
+
+ default:
+ break;
+ }
+
state->keycode = 0;
state->count = 0;
}
diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h
index b9d7c7fcf4..7b820584a8 100644
--- a/quantum/process_keycode/process_tap_dance.h
+++ b/quantum/process_keycode/process_tap_dance.h
@@ -31,18 +31,27 @@ typedef struct
uint16_t kc1;
uint16_t kc2;
} pair;
- qk_tap_dance_user_fn_t fn;
+ struct {
+ qk_tap_dance_user_fn_t on_each_tap;
+ qk_tap_dance_user_fn_t on_dance_finished;
+ qk_tap_dance_user_fn_t on_reset;
+ } fn;
};
} qk_tap_dance_action_t;
#define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) { \
- .type = QK_TAP_DANCE_TYPE_PAIR, \
- .pair = { kc1, kc2 } \
+ .type = QK_TAP_DANCE_TYPE_PAIR, \
+ .pair = { kc1, kc2 } \
}
-#define ACTION_TAP_DANCE_FN(user_fn) { \
+#define ACTION_TAP_DANCE_FN(user_fn) { \
.type = QK_TAP_DANCE_TYPE_FN, \
- .fn = user_fn \
+ .fn = { NULL, user_fn, NULL } \
+ }
+
+#define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset) { \
+ .type = QK_TAP_DANCE_TYPE_FN, \
+ .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset } \
}
extern const qk_tap_dance_action_t tap_dance_actions[];
diff --git a/readme.md b/readme.md
index e0dcd56088..ed3da43bd0 100644
--- a/readme.md
+++ b/readme.md
@@ -35,7 +35,7 @@ This is not a tiny project. While this is the main readme, there are many other
* The list of possible keycodes you can use in your keymap is actually spread out in a few different places:
* [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes.
* [quantum/keymap.h](quantum/keymap.h) - this is where the QMK-specific aliases are all set up. Things like the Hyper and Meh key, the Leader key, and all of the other QMK innovations. These are also explained and documented below, but `keymap.h` is where they're actually defined.
-* The [TMK documentation](doc/TMK_readme.md). QMK is based on TMK, and this explains how it works internally.
+* The [TMK documentation](doc/TMK_README.md). QMK is based on TMK, and this explains how it works internally.
# Getting started
@@ -75,8 +75,23 @@ Debian/Ubuntu example:
sudo apt-get update
sudo apt-get install gcc-avr avr-libc dfu-programmer
+### Docker
+
+If this is a bit complex for you, Docker might be the turn-key solution you need. After installing [Docker](https://www.docker.com/products/docker), run the following command at the root of the QMK folder to build a keyboard/keymap:
+
+```bash
+# You'll run this every time you want to build a keymap
+# modify the keymap and keyboard assigment to compile what you want
+# defaults are ergodox_ez/default
+
+docker run -e keymap=gwen -e keyboard=ergodox_ez --rm -v $('pwd'):/qmk:rw edasque/qmk_firmware
+
+```
+
+This will compile the targetted keyboard/keymap and leave it in your QMK directory for you to flash.
+
### Vagrant
-If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](VAGRANT_GUIDE.md).
+If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](doc/VAGRANT_GUIDE.md).
## Verify Your Installation
1. If you haven't already, obtain this repository ([https://github.com/jackhumbert/qmk_firmware](https://github.com/jackhumbert/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application.
@@ -97,7 +112,7 @@ In every keymap folder, the following files are recommended:
The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). You can run `make` from the root (`/`), your keyboard folder (`/keyboards/<keyboard>/`), or your keymap folder (`/keyboards/<keyboard>/keymaps/<keymap>/`) if you have a `Makefile` there (see the example [here](/doc/keymap_makefile_example.mk)).
-By default, this will generate a `<keyboard>_<keymap>.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests. Your .hex file will also be available on qmk.fm/keyboards/<keyboard>/keymaps/<keymap>/.
+By default, this will generate a `<keyboard>_<keymap>.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests.
Below are some definitions that will be useful:
@@ -152,7 +167,7 @@ This allows you to use the system and audio control key codes.
`CONSOLE_ENABLE`
-TODO
+This allows you to print messages that can be read using [`hid_listen`](https://www.pjrc.com/teensy/hid_listen.html). Add this to your `Makefile`, and set it to `yes`. Then put `println`, `printf`, etc. in your keymap or anywhere in the `qmk` source. Finally, open `hid_listen` and enjoy looking at your printed messages.
`COMMAND_ENABLE`
@@ -372,10 +387,11 @@ But lets start with how to use it, first!
First, you will need `TAP_DANCE_ENABLE=yes` in your `Makefile`, because the feature is disabled by default. This adds a little less than 1k to the firmware size. Next, you will want to define some tap-dance keys, which is easiest to do with the `TD()` macro, that - similar to `F()`, takes a number, which will later be used as an index into the `tap_dance_actions` array.
-This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are two possible options:
+This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are three possible options:
* `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise.
-* `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the current state of the tap-dance action.
+* `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the final tap count of the tap dance action.
+* `ACTION_TAP_DANCE_FN_ADVANCED(on_each_tap_fn, on_dance_finished_fn, on_reset_fn)`: Calls the first specified function - defined in the user keymap - on every tap, the second function on when the dance action finishes (like the previous option), and the last function when the tap dance action resets.
The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise.
@@ -399,7 +415,8 @@ In the end, let's see a full example!
enum {
CT_SE = 0,
CT_CLN,
- CT_EGG
+ CT_EGG,
+ CT_FLSH,
};
/* Have the above three on the keymap, TD(CT_SE), etc... */
@@ -424,10 +441,50 @@ void dance_egg (qk_tap_dance_state_t *state) {
}
}
+// on each tap, light up one led, from right to left
+// on the forth tap, turn them off from right to left
+void dance_flsh_each(qk_tap_dance_state_t *state) {
+ switch (state->count) {
+ case 1:
+ ergodox_right_led_3_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ case 3:
+ ergodox_right_led_1_on();
+ break;
+ case 4:
+ ergodox_right_led_3_off();
+ _delay_ms(50);
+ ergodox_right_led_2_off();
+ _delay_ms(50);
+ ergodox_right_led_1_off();
+ }
+}
+
+// on the fourth tap, set the keyboard on flash state
+void dance_flsh_finished(qk_tap_dance_state_t *state) {
+ if (state->count >= 4) {
+ reset_keyboard();
+ reset_tap_dance(state);
+ }
+}
+
+// if the flash state didnt happen, then turn off leds, left to right
+void dance_flsh_reset(qk_tap_dance_state_t *state) {
+ ergodox_right_led_1_off();
+ _delay_ms(50);
+ ergodox_right_led_2_off();
+ _delay_ms(50);
+ ergodox_right_led_3_off();
+}
+
const qk_tap_dance_action_t tap_dance_actions[] = {
[CT_SE] = ACTION_TAP_DANCE_DOUBLE (KC_SPC, KC_ENT)
,[CT_CLN] = ACTION_TAP_DANCE_FN (dance_cln)
,[CT_EGG] = ACTION_TAP_DANCE_FN (dance_egg)
+ ,[CT_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED (dance_flsh_each, dance_flsh_finished, dance_flsh_reset)
};
```
@@ -732,7 +789,7 @@ float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
float goodbye[][2] = SONG(GOODBYE_SOUND);
```
-Wherein we bind predefined songs (from [audio/song_list.h](/audio/song_list.h)) into named variables. This is one optimization that helps save on memory: These songs only take up memory when you reference them in your keymap, because they're essentially all preprocessor directives.
+Wherein we bind predefined songs (from [quantum/audio/song_list.h](/quantum/audio/song_list.h)) into named variables. This is one optimization that helps save on memory: These songs only take up memory when you reference them in your keymap, because they're essentially all preprocessor directives.
So now you have something called `tone_plover` for example. How do you make it play the Plover tune, then? If you look further down the keymap, you'll see this:
@@ -774,7 +831,7 @@ AutoHotkey inserts the Text right of `Send, ` when this combination is pressed.
## RGB Under Glow Mod
-![Planck with RGB Underglow](https://raw.githubusercontent.com/yangliu/qmk_firmware/planck-rgb/keyboards/planck/keymaps/yang/planck-with-rgb-underglow.jpg)
+![Planck with RGB Underglow](https://raw.githubusercontent.com/jackhumbert/qmk_firmware/master/keyboards/planck/keymaps/yang/planck-with-rgb-underglow.jpg)
Here is a quick demo on Youtube (with NPKC KC60) (https://www.youtube.com/watch?v=VKrpPAHlisY).
@@ -799,7 +856,7 @@ The firmware supports 5 different light effects, and the color (hue, saturation,
### WS2812 Wiring
-![WS2812 Wiring](https://raw.githubusercontent.com/yangliu/qmk_firmware/planck-rgb/keyboards/planck/keymaps/yang/WS2812-wiring.jpg)
+![WS2812 Wiring](https://raw.githubusercontent.com/jackhumbert/qmk_firmware/master/keyboards/planck/keymaps/yang/WS2812-wiring.jpg)
Please note the USB port can only supply a limited amount of power to the keyboard (500mA by standard, however, modern computer and most usb hubs can provide 700+mA.). According to the data of NeoPixel from Adafruit, 30 WS2812 LEDs require a 5V 1A power supply, LEDs used in this mod should not more than 20.
diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk
index 3bf2b34f88..6c03e1650e 100644
--- a/tmk_core/avr.mk
+++ b/tmk_core/avr.mk
@@ -107,6 +107,10 @@ flip: $(BUILD_DIR)/$(TARGET).hex
batchisp -hardware usb -device $(MCU) -operation start reset 0
dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter
+ until dfu-programmer $(MCU) get bootloader-version; do\
+ echo "Error: Bootloader not found. Trying again in 5s." ;\
+ sleep 5 ;\
+ done
ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1)))
dfu-programmer $(MCU) erase --force
else
diff --git a/tmk_core/protocol/lufa/descriptor.c b/tmk_core/protocol/lufa/descriptor.c
index 850a20fdb3..539a58d66b 100644
--- a/tmk_core/protocol/lufa/descriptor.c
+++ b/tmk_core/protocol/lufa/descriptor.c
@@ -140,9 +140,9 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ExtrakeyReport[] =
HID_RI_USAGE(8, 0x80), /* System Control */
HID_RI_COLLECTION(8, 0x01), /* Application */
HID_RI_REPORT_ID(8, REPORT_ID_SYSTEM),
- HID_RI_LOGICAL_MINIMUM(16, 0x0001),
+ HID_RI_LOGICAL_MINIMUM(16, 0x0081),
HID_RI_LOGICAL_MAXIMUM(16, 0x00B7),
- HID_RI_USAGE_MINIMUM(16, 0x0001), /* System Power Down */
+ HID_RI_USAGE_MINIMUM(16, 0x0081), /* System Power Down */
HID_RI_USAGE_MAXIMUM(16, 0x00B7), /* System Display LCD Autoscale */
HID_RI_REPORT_SIZE(8, 16),
HID_RI_REPORT_COUNT(8, 1),