aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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/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
60 files changed, 3416 insertions, 50 deletions
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 000000000..96ace4ec6
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,28 @@
1FROM debian:jessie
2MAINTAINER Erik Dasque <erik@frenchguys.com>
3
4RUN apt-get update
5RUN apt-get install --no-install-recommends -y build-essential \
6 gcc \
7 unzip \
8 wget \
9 zip \
10 gcc-avr \
11 binutils-avr \
12 avr-libc \
13 dfu-programmer \
14 dfu-util \
15 gcc-arm-none-eabi \
16 binutils-arm-none-eabi \
17 libnewlib-arm-none-eabi \
18 git
19
20RUN apt-get clean
21RUN rm -rf /var/lib/apt/lists/*
22
23ENV keyboard=ergodox_ez
24ENV keymap=default
25
26VOLUME /qmk
27WORKDIR /qmk
28CMD 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 000000000..1798b193a
--- /dev/null
+++ b/keyboards/alps64/readme.md
@@ -0,0 +1,4 @@
1Alps64 keyboard firmware
2======================
3
4TODO: to be updated.
diff --git a/keyboards/atreus/atreus.h b/keyboards/atreus/atreus.h
index 2b3803bc2..f841c3519 100644
--- a/keyboards/atreus/atreus.h
+++ b/keyboards/atreus/atreus.h
@@ -10,16 +10,16 @@
10// The first section contains all of the arguements 10// The first section contains all of the arguements
11// The second converts the arguments into a two-dimensional array 11// The second converts the arguments into a two-dimensional array
12#define KEYMAP( \ 12#define KEYMAP( \
13 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \ 13 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \
14 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \ 14 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \
15 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, \ 15 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \
16 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a \ 16 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b \
17) \ 17) \
18{ \ 18{ \
19 { k00, k01, k02, k03, k04, KC_NO, k05, k06, k07, k08, k09 }, \ 19 { k00, k01, k02, k03, k04, KC_NO, k05, k06, k07, k08, k09 }, \
20 { k10, k11, k12, k13, k14, KC_NO, k15, k16, k17, k18, k19 }, \ 20 { k10, k11, k12, k13, k14, KC_NO, k15, k16, k17, k18, k19 }, \
21 { k20, k21, k22, k23, k24, k35, k25, k26, k27, k28, k29 }, \ 21 { k20, k21, k22, k23, k24, k35, k25, k26, k27, k28, k29 }, \
22 { k2a, k30, k31, k32, k33, k34, k36, k37, k38, k39, k3a } \ 22 { k30, k31, k32, k33, k34, k36, k37, k38, k39, k3a, k3b } \
23} 23}
24 24
25#endif 25#endif
diff --git a/keyboards/clueboard/readme.md b/keyboards/clueboard/readme.md
new file mode 100644
index 000000000..aa301f020
--- /dev/null
+++ b/keyboards/clueboard/readme.md
@@ -0,0 +1,4 @@
1Clueboard keyboard firmware
2======================
3
4TODO: to be updated.
diff --git a/keyboards/cluepad/readme.md b/keyboards/cluepad/readme.md
new file mode 100644
index 000000000..8450340f2
--- /dev/null
+++ b/keyboards/cluepad/readme.md
@@ -0,0 +1,4 @@
1Cluepad number pad firmware
2======================
3
4TODO: 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 4188d2b50..16cebd091 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:
10Looking for IJKL arrows? [Here we 10Looking for IJKL arrows? [Here we
11go](../romanzolotarev-norman-plover-osx/). 11go](../romanzolotarev-norman-plover-osx/).
12 12
13[![keyboard-layout](romanzolotarev-norman-plover-osx-hjkl.png)](rttp://www.keyboard-layout-editor.com/#/gists/56ffedceb0668dda47c993e7271563e0) 13[![keyboard-layout](romanzolotarev-norman-plover-osx-hjkl.png)](http://www.keyboard-layout-editor.com/#/gists/56ffedceb0668dda47c993e7271563e0)
14 14
15## Switching 15## Switching
16 16
diff --git a/keyboards/handwired/CMD60/CMD60.c b/keyboards/handwired/CMD60/CMD60.c
new file mode 100644
index 000000000..799848e34
--- /dev/null
+++ b/keyboards/handwired/CMD60/CMD60.c
@@ -0,0 +1,8 @@
1#include "CMD60.h"
2
3void matrix_init_kb(void) {
4 // put your keyboard start-up code here
5 // runs once when the firmware starts up
6
7 matrix_init_user();
8}
diff --git a/keyboards/handwired/CMD60/CMD60.h b/keyboards/handwired/CMD60/CMD60.h
new file mode 100644
index 000000000..f90871fc7
--- /dev/null
+++ b/keyboards/handwired/CMD60/CMD60.h
@@ -0,0 +1,20 @@
1#ifndef CMD60_H
2#define CMD60_H
3
4#include "quantum.h"
5
6#define KEYMAP( \
7 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
8 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
9 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
10 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
11 K40, K41, K42, K45, K4A, K4B, K4C, K4D \
12 ) { \
13 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
14 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
15 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
16 { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
17 { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO,K4A, K4B, K4C, K4D } \
18}
19
20#endif \ No newline at end of file
diff --git a/keyboards/handwired/CMD60/Makefile b/keyboards/handwired/CMD60/Makefile
new file mode 100644
index 000000000..711759917
--- /dev/null
+++ b/keyboards/handwired/CMD60/Makefile
@@ -0,0 +1,73 @@
1
2# MCU name
3MCU = atmega32u4
4
5# Processor frequency.
6# This will define a symbol, F_CPU, in all source code files equal to the
7# processor frequency in Hz. You can then use this symbol in your source code to
8# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
9# automatically to create a 32-bit value in your source code.
10#
11# This will be an integer division of F_USB below, as it is sourced by
12# F_USB after it has run through any CPU prescalers. Note that this value
13# does not *change* the processor frequency - it should merely be updated to
14# reflect the processor speed set externally so that the code can use accurate
15# software delays.
16F_CPU = 16000000
17
18
19#
20# LUFA specific
21#
22# Target architecture (see library "Board Types" documentation).
23ARCH = AVR8
24
25# Input clock frequency.
26# This will define a symbol, F_USB, in all source code files equal to the
27# input clock frequency (before any prescaling is performed) in Hz. This value may
28# differ from F_CPU if prescaling is used on the latter, and is required as the
29# raw input clock is fed directly to the PLL sections of the AVR for high speed
30# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
31# at the end, this will be done automatically to create a 32-bit value in your
32# source code.
33#
34# If no clock division is performed on the input clock inside the AVR (via the
35# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
36F_USB = $(F_CPU)
37
38# Interrupt driven control endpoint task(+60)
39OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
40
41
42# Boot Section Size in *bytes*
43# Teensy halfKay 512
44# Teensy++ halfKay 1024
45# Atmel DFU loader 4096
46# LUFA bootloader 4096
47# USBaspLoader 2048
48OPT_DEFS += -DBOOTLOADER_SIZE=512
49
50
51# Build Options
52# change yes to no to disable
53#
54BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
55MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
56EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
57CONSOLE_ENABLE ?= yes # Console for debug(+400)
58COMMAND_ENABLE ?= yes # Commands for debug and configuration
59# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
60SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
61# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
62NKRO_ENABLE ?= no # USB Nkey Rollover
63BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
64MIDI_ENABLE ?= no # MIDI controls
65UNICODE_ENABLE ?= no # Unicode
66BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
67AUDIO_ENABLE ?= no # Audio output on port C6
68
69ifndef QUANTUM_DIR
70 include ../../../Makefile
71endif
72
73
diff --git a/keyboards/handwired/CMD60/README.md b/keyboards/handwired/CMD60/README.md
new file mode 100644
index 000000000..83e371543
--- /dev/null
+++ b/keyboards/handwired/CMD60/README.md
@@ -0,0 +1,35 @@
1CMD60 keyboard firmware
2======================
3
4##CMD60
5
6This layout has been designed to optimize use of the left-hand, and it focussed specifically on programmers who work
7with text editors like SublimeText and Atom. It utilizes the power of Space_fn, and features a caps lock swap for Fn2
8and enter key on tap. These features allow you to keep your right hand on the mouse more and should enable you to
9achieve a higher level of productivity if you take the time to learn its function layers.
10
11## Quantum MK Firmware
12
13For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
14
15## Building
16
17Download or clone the whole firmware and navigate to the keyboards/handwired/CMD60 folder.
18Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use
19the Teensy Loader to program your .hex file.
20
21Depending on which keymap you would like to use, you will have to compile slightly differently.
22
23### Default
24
25To build with the default keymap, simply run `make`.
26
27### Other Keymaps
28
29To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
30
31```
32$ make keymap=[default|jack|<name>]
33```
34
35Keymaps 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 000000000..27eb400b8
--- /dev/null
+++ b/keyboards/handwired/CMD60/config.h
@@ -0,0 +1,162 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#ifndef CONFIG_H
19#define CONFIG_H
20
21#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEED
25#define PRODUCT_ID 0x6060
26#define DEVICE_VER 0x0001
27#define MANUFACTURER cmd
28#define PRODUCT CMD60
29#define DESCRIPTION Advanced Programming Keeb Layout
30
31/* key matrix size */
32#define MATRIX_ROWS 5
33#define MATRIX_COLS 14
34
35/*
36 * Keyboard Matrix Assignments
37 *
38 * Change this to how you wired your keyboard
39 * COLS: AVR pins used for columns, left to right
40 * ROWS: AVR pins used for rows, top to bottom
41 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
42 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
43 *
44*/
45#define MATRIX_ROW_PINS { F0, F4, F5, F6, F7 }
46#define MATRIX_COL_PINS { B0, B1, B2, B3, B7, D0, D1, D2, D3, C6, D7, B4, B5, B6 }
47#define UNUSED_PINS
48
49/* COL2ROW or ROW2COL */
50#define DIODE_DIRECTION COL2ROW
51
52// #define BACKLIGHT_PIN B7
53// #define BACKLIGHT_BREATHING
54// #define BACKLIGHT_LEVELS 3
55
56
57/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
58#define DEBOUNCING_DELAY 5
59
60/* define if matrix has ghost (lacks anti-ghosting diodes) */
61//#define MATRIX_HAS_GHOST
62
63/* number of backlight levels */
64
65/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
66#define LOCKING_SUPPORT_ENABLE
67/* Locking resynchronize hack */
68#define LOCKING_RESYNC_ENABLE
69
70/*
71 * Force NKRO
72 *
73 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
74 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
75 * makefile for this to work.)
76 *
77 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
78 * until the next keyboard reset.
79 *
80 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
81 * fully operational during normal computer usage.
82 *
83 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
84 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
85 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
86 * power-up.
87 *
88 */
89//#define FORCE_NKRO
90
91/*
92 * Magic Key Options
93 *
94 * Magic keys are hotkey commands that allow control over firmware functions of
95 * the keyboard. They are best used in combination with the HID Listen program,
96 * found here: https://www.pjrc.com/teensy/hid_listen.html
97 *
98 * The options below allow the magic key functionality to be changed. This is
99 * useful if your keyboard/keypad is missing keys and you want magic key support.
100 *
101 */
102
103/* key combination for magic key command */
104#define IS_COMMAND() ( \
105 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
106)
107
108/* control how magic key switches layers */
109//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
110//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
111//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
112
113/* override magic key keymap */
114//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
115//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
116//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
117//#define MAGIC_KEY_HELP1 H
118//#define MAGIC_KEY_HELP2 SLASH
119//#define MAGIC_KEY_DEBUG D
120//#define MAGIC_KEY_DEBUG_MATRIX X
121//#define MAGIC_KEY_DEBUG_KBD K
122//#define MAGIC_KEY_DEBUG_MOUSE M
123//#define MAGIC_KEY_VERSION V
124//#define MAGIC_KEY_STATUS S
125//#define MAGIC_KEY_CONSOLE C
126//#define MAGIC_KEY_LAYER0_ALT1 ESC
127//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
128//#define MAGIC_KEY_LAYER0 0
129//#define MAGIC_KEY_LAYER1 1
130//#define MAGIC_KEY_LAYER2 2
131//#define MAGIC_KEY_LAYER3 3
132//#define MAGIC_KEY_LAYER4 4
133//#define MAGIC_KEY_LAYER5 5
134//#define MAGIC_KEY_LAYER6 6
135//#define MAGIC_KEY_LAYER7 7
136//#define MAGIC_KEY_LAYER8 8
137//#define MAGIC_KEY_LAYER9 9
138//#define MAGIC_KEY_BOOTLOADER PAUSE
139//#define MAGIC_KEY_LOCK CAPS
140//#define MAGIC_KEY_EEPROM E
141//#define MAGIC_KEY_NKRO N
142//#define MAGIC_KEY_SLEEP_LED Z
143
144/*
145 * Feature disable options
146 * These options are also useful to firmware size reduction.
147 */
148
149/* disable debug print */
150//#define NO_DEBUG
151
152/* disable print */
153//#define NO_PRINT
154
155/* disable action features */
156//#define NO_ACTION_LAYER
157//#define NO_ACTION_TAPPING
158//#define NO_ACTION_ONESHOT
159//#define NO_ACTION_MACRO
160//#define NO_ACTION_FUNCTION
161
162#endif
diff --git a/keyboards/handwired/CMD60/keymaps/default/keymap.c b/keyboards/handwired/CMD60/keymaps/default/keymap.c
new file mode 100644
index 000000000..9f9cbcd66
--- /dev/null
+++ b/keyboards/handwired/CMD60/keymaps/default/keymap.c
@@ -0,0 +1,66 @@
1#include "CMD60.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4 [0] = KEYMAP( /* CMD60 - QWERTY */
5 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, \
6 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, \
7 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, \
8 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, \
9 KC_LCTL, KC_LGUI, KC_LALT, LT(2, KC_SPC), MO(3), MO(4), MO(5), TG(1) \
10 ),
11 [1] = KEYMAP( /* CMD60 - GameMode */
12 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, \
13 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, \
14 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, \
15 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, \
16 KC_TRNS, KC_NO, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
17 ),
18 [2] = KEYMAP( /* CMD60 - Arrows */
19 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, \
20 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, \
21 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, \
22 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, \
23 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
24 ),
25 [3] = KEYMAP( /* CMD60 - Functions */
26 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, \
27 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, \
28 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, \
29 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, \
30 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
31 ),
32 [4] = KEYMAP( /* CMD60 - Mouse */
33 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, \
34 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, \
35 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, \
36 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, \
37 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
38 ),
39 [5] = KEYMAP( /* CMD60 - Media */
40 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, \
41 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, \
42 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, \
43 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, \
44 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
45 ),
46};
47
48const uint16_t PROGMEM fn_actions[] = {
49
50};
51
52
53const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
54{
55 // MACRODOWN only works in this function
56 switch(id) {
57 case 0:
58 if (record->event.pressed) {
59 register_code(KC_RSFT);
60 } else {
61 unregister_code(KC_RSFT);
62 }
63 break;
64 }
65 return MACRO_NONE;
66};
diff --git a/keyboards/handwired/traveller/Makefile b/keyboards/handwired/traveller/Makefile
new file mode 100644
index 000000000..12a4b71f4
--- /dev/null
+++ b/keyboards/handwired/traveller/Makefile
@@ -0,0 +1,89 @@
1
2#MCU = at90usb1287
3MCU = atmega32u4
4
5# Processor frequency.
6# This will define a symbol, F_CPU, in all source code files equal to the
7# processor frequency in Hz. You can then use this symbol in your source code to
8# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
9# automatically to create a 32-bit value in your source code.
10#
11# This will be an integer division of F_USB below, as it is sourced by
12# F_USB after it has run through any CPU prescalers. Note that this value
13# does not *change* the processor frequency - it should merely be updated to
14# reflect the processor speed set externally so that the code can use accurate
15# software delays.
16F_CPU = 16000000
17
18# for avr upload
19USB ?= /dev/cu.usbmodem1421
20#
21# LUFA specific
22#
23# Target architecture (see library "Board Types" documentation).
24ARCH = AVR8
25
26# Input clock frequency.
27# This will define a symbol, F_USB, in all source code files equal to the
28# input clock frequency (before any prescaling is performed) in Hz. This value may
29# differ from F_CPU if prescaling is used on the latter, and is required as the
30# raw input clock is fed directly to the PLL sections of the AVR for high speed
31# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
32# at the end, this will be done automatically to create a 32-bit value in your
33# source code.
34#
35# If no clock division is performed on the input clock inside the AVR (via the
36# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
37F_USB = $(F_CPU)
38
39
40ifdef TEENSY2
41 OPT_DEFS += -DATREUS_TEENSY2
42 ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
43else
44 OPT_DEFS += -DATREUS_ASTAR
45 OPT_DEFS += -DCATERINA_BOOTLOADER
46 ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
47 avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
48endif
49# Interrupt driven control endpoint task(+60)
50OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
51
52
53# MCU name
54
55# Boot Section Size in *bytes*
56# Teensy halfKay 512
57# Teensy++ halfKay 1024
58# Atmel DFU loader 4096
59# LUFA bootloader 4096
60# USBaspLoader 2048
61OPT_DEFS += -DBOOTLOADER_SIZE=4096
62
63
64# Build Options
65# change yes to no to disable
66#
67BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
68MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
69EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
70CONSOLE_ENABLE ?= no # Console for debug(+400)
71COMMAND_ENABLE ?= no # Commands for debug and configuration
72# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
73SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
74# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
75NKRO_ENABLE ?= no # USB Nkey Rollover
76BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
77MIDI_ENABLE ?= no # MIDI controls
78UNICODE_ENABLE ?= no # Unicode
79BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
80AUDIO_ENABLE ?= no # Audio output on port C6
81RGBLIGHT_ENABLE = yes
82
83ifndef QUANTUM_DIR
84 include ../../../Makefile
85endif
86
87upload: build
88 $(ATREUS_UPLOAD_COMMAND)
89
diff --git a/keyboards/handwired/traveller/config.h b/keyboards/handwired/traveller/config.h
new file mode 100644
index 000000000..2b82da447
--- /dev/null
+++ b/keyboards/handwired/traveller/config.h
@@ -0,0 +1,173 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#ifndef CONFIG_H
19#define CONFIG_H
20
21#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEED
25#define PRODUCT_ID 0x6060
26#define DEVICE_VER 0x0001
27#define MANUFACTURER You
28#define PRODUCT traveller
29#define DESCRIPTION A custom keyboard
30
31/* key matrix size */
32#define MATRIX_ROWS 4
33#define MATRIX_COLS 13
34
35/*
36 * Keyboard Matrix Assignments
37 *
38 * Change this to how you wired your keyboard
39 * COLS: AVR pins used for columns, left to right
40 * ROWS: AVR pins used for rows, top to bottom
41 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
42 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
43 *
44*/
45#define MATRIX_ROW_PINS { D0, D1, D3, D2 }
46 // no I can't say why this order seemed like a good idea
47#define MATRIX_COL_PINS { B5, D6, B7, B6, F6, B1, B3, F7, B4, E6, D7, C6, D4 }
48#define UNUSED_PINS
49
50// LED stuff
51#define RGB_DI_PIN B2
52//#define RBLIGHT_TIMER
53#define RGBLED_NUM 1 // Number of LEDs
54#define RGBLIGHT_HUE_STEP 10
55#define RGBLIGHT_SAT_STEP 17
56#define RGBLIGHT_VAL_STEP 17
57
58
59/* COL2ROW or ROW2COL */
60#define DIODE_DIRECTION COL2ROW
61
62// #define BACKLIGHT_PIN B7
63// #define BACKLIGHT_BREATHING
64// #define BACKLIGHT_LEVELS 3
65
66
67/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
68#define DEBOUNCING_DELAY 5
69
70/* define if matrix has ghost (lacks anti-ghosting diodes) */
71//#define MATRIX_HAS_GHOST
72
73/* number of backlight levels */
74#define BACKLIGHT_LEVELS 3
75
76/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
77//#define LOCKING_SUPPORT_ENABLE
78/* Locking resynchronize hack */
79#define LOCKING_RESYNC_ENABLE
80
81/*
82 * Force NKRO
83 *
84 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
85 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
86 * makefile for this to work.)
87 *
88 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
89 * until the next keyboard reset.
90 *
91 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
92 * fully operational during normal computer usage.
93 *
94 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
95 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
96 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
97 * power-up.
98 *
99 */
100//#define FORCE_NKRO
101
102/*
103 * Magic Key Options
104 *
105 * Magic keys are hotkey commands that allow control over firmware functions of
106 * the keyboard. They are best used in combination with the HID Listen program,
107 * found here: https://www.pjrc.com/teensy/hid_listen.html
108 *
109 * The options below allow the magic key functionality to be changed. This is
110 * useful if your keyboard/keypad is missing keys and you want magic key support.
111 *
112 */
113
114/* key combination for magic key command */
115#define IS_COMMAND() ( \
116 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
117)
118
119/* control how magic key switches layers */
120//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
121//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
122//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
123
124/* override magic key keymap */
125//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
126//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
127//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
128//#define MAGIC_KEY_HELP1 H
129//#define MAGIC_KEY_HELP2 SLASH
130//#define MAGIC_KEY_DEBUG D
131//#define MAGIC_KEY_DEBUG_MATRIX X
132//#define MAGIC_KEY_DEBUG_KBD K
133//#define MAGIC_KEY_DEBUG_MOUSE M
134//#define MAGIC_KEY_VERSION V
135//#define MAGIC_KEY_STATUS S
136//#define MAGIC_KEY_CONSOLE C
137//#define MAGIC_KEY_LAYER0_ALT1 ESC
138//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
139//#define MAGIC_KEY_LAYER0 0
140//#define MAGIC_KEY_LAYER1 1
141//#define MAGIC_KEY_LAYER2 2
142//#define MAGIC_KEY_LAYER3 3
143//#define MAGIC_KEY_LAYER4 4
144//#define MAGIC_KEY_LAYER5 5
145//#define MAGIC_KEY_LAYER6 6
146//#define MAGIC_KEY_LAYER7 7
147//#define MAGIC_KEY_LAYER8 8
148//#define MAGIC_KEY_LAYER9 9
149//#define MAGIC_KEY_BOOTLOADER PAUSE
150//#define MAGIC_KEY_LOCK CAPS
151//#define MAGIC_KEY_EEPROM E
152//#define MAGIC_KEY_NKRO N
153//#define MAGIC_KEY_SLEEP_LED Z
154
155/*
156 * Feature disable options
157 * These options are also useful to firmware size reduction.
158 */
159
160/* disable debug print */
161//#define NO_DEBUG
162
163/* disable print */
164//#define NO_PRINT
165
166/* disable action features */
167//#define NO_ACTION_LAYER
168//#define NO_ACTION_TAPPING
169//#define NO_ACTION_ONESHOT
170//#define NO_ACTION_MACRO
171//#define NO_ACTION_FUNCTION
172
173#endif
diff --git a/keyboards/handwired/traveller/keymaps/default/keymap.c b/keyboards/handwired/traveller/keymaps/default/keymap.c
new file mode 100644
index 000000000..13d889ab8
--- /dev/null
+++ b/keyboards/handwired/traveller/keymaps/default/keymap.c
@@ -0,0 +1,305 @@
1#include "traveller.h"
2#include "mousekey.h"
3#include "action_layer.h"
4
5// Each layer gets a name for readability, which is then used in the keymap matrix below.
6// The underscores don't mean anything - you can have a layer called STUFF or any other name.
7#define _QW 0
8#define _LW 1
9#define _HI 2
10#define _NAV 4
11#define _CUR 5
12#define _FKEYS 6
13#define _TRNS 8
14
15// We do the same trick for functions
16#define RGBLED_TOGGLE 10
17#define _HIOUT 15
18#define _LWOUT 16
19// Macros
20#define MDL 4
21#define MDR 5
22#define MUR 6
23#define MUL 3
24
25
26
27const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
28/* Qwerty
29 * ,-----------------------------------------. .-----------------------------------------.
30 * | NAV | ` ~ | W | E | R | T | | Y | U | I | O | - | = |
31 * |------+------+------+------+------+------| |------+------+------+------+------+------|
32 * | Tab | Q | S | D | F | G | | H | J | K | L | P | \ |
33 * |------+------+------+------+------+------|------+------+------+------+------+------+------|
34 *|ctrl/esc| A | X | C | V | B |Ctrl /| N | M | , | . | ; | ' |
35 * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
36 * | Shift| Z | Del | GUI | Low | Bspc |/Enter| Spc | Hi | GUI | Alt | / |Shift |
37 * `------------------------------------------------------------------------------------------'
38 *
39 */
40[_QW] = KEYMAP(
41 F(_NAV), KC_GRV, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_MINS, KC_EQL,
42 KC_TAB, KC_Q, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_P, KC_BSLS,
43 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,
44 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
45 ),
46
47/* LOW - numbers, missing or awkward programming keys
48 Doubled 1 key allows lazy reach with ring finger.
49 * ,-----------------------------------------. .-----------------------------------------.
50 * | FKeys| 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |Ctrl-alt-del|
51 * |------+------+------+------+------+------| +------+------+------+------+------+------|
52 * | Tab | 1 | ] | ( | ) | | | * | ( | ) | [ | | |
53 * |------+------+------+------+------+------|------+------+------+------+------+------+------|
54 * | Caps | [ | | { | } | ` | /| # | { | } | | ] | |
55 * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
56 * | Shift| | | | Low | |/ | | Hi | | | |Shift |
57 * `------------------------------------------------------------------------------------------'
58 *
59 */
60
61[_LW] = KEYMAP(
62 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)) ,
63 KC_TRNS, KC_1, KC_RBRC, KC_LPRN, KC_RPRN, KC_NO, KC_ASTR, KC_LPRN, KC_RPRN, KC_LBRC, KC_NO, KC_NO,
64 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,
65 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
66),
67
68/* HI - Punctuation, shell and
69url ://@.com row on bottom, && is opposite || ^$ are in regex order: ^.*$
70Right hand nav keys work pretty well chorded with the Right hand Hi Key
71 * ,-----------------------------------------. .-----------------------------------------.
72 * |FKEYS | ! | @ | # | $ | % | | ^ | & | * | ( | ) | + |
73 * |------+------+------+------+------+------| |------+------+------+------+------+------|
74 * | | ! | & | "|" | $ | % | | Vol+| Mute| | | | |
75 * |------+------+------+------+------+------|------+------+------+------+------+------+------|
76 * | CAPS | ^ | : | . | * | - | /| Vol-| Play | PgUp | Home | Up | End |
77 * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
78 * | | / | | | Low | |/ | | Hi | PgDn | Left| Down | Right |
79 * `------------------------------------------------------------------------------------------'
80 *
81 */
82
83[_HI] = KEYMAP(
84 F(_FKEYS), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS,
85 KC_TRNS, KC_EXLM, KC_AMPR, KC_PIPE, KC_DLR, KC_PERC, KC_VOLU, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_NO,
86 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,
87 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
88),
89
90/* NAV - mouse & navigation
91//gui left and right are line home/end, or fore & back in browser
92// Mouse buttons are reversed for comfort - bigger stretch is to the right button.
93
94 * ,-----------------------------------------. .-----------------------------------------.
95* | NAV | | | Up | |Gui-> | | MwU | MS_UL| MS_U |MS_UR | |Ms Norm|
96* |------+------+------+------+------+------| |------+------+------+------+------+--------|
97* | |Gui<- | Left | Down |Right | C^E | | BTN3 | MS_L |MS Up | MS_R | |Ms Fast |
98* |------+------+------+------+------+------|------|------+------+------+------+------+--------|
99* | | C^A | GUI X| GUI C| GUI_V| |Enter/| MWD | M_DL |MS Dwn|MS_DR | Up |Ms Slow |
100* |------+------+------+------+------+------+ // +------+------+------+------+------+------|
101* | | GuiZ | | | Low | |/ButnR|ButnL | Hi | | Left | Down | Right |
102* `------------------------------------------------------------------------------------------'
103*/
104
105[_NAV] = KEYMAP(
106 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,
107 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,
108 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,
109 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
110),
111
112/* FKEYS - Funtion keys & mac stuff
113 * ,-----------------------------------------. .-----------------------------------------.
114 * | FKEYS| F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | Ctrl |
115 * |------+------+------+------+------+------| |------+------+------+------+------+------|
116 * | | | | | | | | F11 | F12 | F13 | F14 | F15 | Alt |
117 * |------+------+------+------+------+------|------+------+------+------+------+------+------|
118 * |Qwerty| | | | | | /| | | | | | Del |
119 * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
120 * | . |RGBTog| . | | LO | Bspc |/ | | HI | | | | |
121 * `------------------------------------------------------------------------------------------'
122 *
123 */
124
125[_FKEYS] = KEYMAP(
126 F(_FKEYS), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_RCTL,
127 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_LALT ,
128 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,
129 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
130),
131
132
133/* TRNS - skeleton for laters
134 * ,-----------------------------------------. .-----------------------------------------.
135 * | . | . | . | . | . | . | | ^ | & | * | ( | ) | |
136 * |------+------+------+------+------+------| |------+------+------+------+------+------|
137 * | . | . | . | . | . | . | | 6 | 7 | 8 | 9 | 0 | |
138 * |------+------+------+------+------+------|------+------+------+------+------+------+------|
139 * | . | . | . | . | . | . | /| | | | . | ; | " |
140 * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
141 * | . | . | . | GUI | LO | . |/ | Spc | HI | GUI | M0 | / |LSFT |
142 * `------------------------------------------------------------------------------------------'
143 *
144 */
145
146[_TRNS] = {
147 {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},
148 {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},
149 {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},
150 {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}
151 }
152
153
154};
155
156
157const uint16_t PROGMEM fn_actions[] = {
158 [_QW] = ACTION_LAYER_ON(_QW,ON_RELEASE), // return to QWERTY layer
159 [_LW] = ACTION_LAYER_TAP_TOGGLE(_LW), // Turn on LW when holding, or tap 3 times to switch
160 [_HI] = ACTION_LAYER_TAP_TOGGLE(_HI), // Turn on LW when holding, or tap 3 times to switch
161 [_NAV] = ACTION_LAYER_TOGGLE(_NAV),
162 [_FKEYS] = ACTION_LAYER_TOGGLE(_FKEYS),
163 [_LWOUT] = ACTION_LAYER_OFF(_LW,ON_RELEASE),
164 [_HIOUT] = ACTION_LAYER_OFF(_HI,ON_RELEASE),
165
166 // Functions
167 [RGBLED_TOGGLE] = ACTION_FUNCTION(RGBLED_TOGGLE),
168
169};
170
171const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
172{
173 // MACRODOWN only works in this function
174 switch(id) {
175 case 0:
176 if (record->event.pressed) {
177 register_code(KC_RSFT);
178 #ifdef BACKLIGHT_ENABLE
179 backlight_step();
180 #endif
181 } else {
182 unregister_code(KC_RSFT);
183 }
184 break;
185
186 // from algernon's ErgoDox EZ layout,
187 case MUL:
188 if (record->event.pressed) {
189 mousekey_on(KC_MS_UP);
190 mousekey_on(KC_MS_LEFT);
191 } else {
192 mousekey_off(KC_MS_UP);
193 mousekey_off(KC_MS_LEFT);
194 }
195 mousekey_send();
196 break;
197
198 case MUR:
199 if (record->event.pressed) {
200 mousekey_on(KC_MS_UP);
201 mousekey_on(KC_MS_RIGHT);
202 } else {
203 mousekey_off(KC_MS_UP);
204 mousekey_off(KC_MS_RIGHT);
205 }
206 mousekey_send();
207 break;
208
209 case MDL:
210 if (record->event.pressed) {
211 mousekey_on(KC_MS_DOWN);
212 mousekey_on(KC_MS_LEFT);
213 } else {
214 mousekey_off(KC_MS_DOWN);
215 mousekey_off(KC_MS_LEFT);
216 }
217 mousekey_send();
218 break;
219
220 case MDR:
221 if (record->event.pressed) {
222 mousekey_on(KC_MS_DOWN);
223 mousekey_on(KC_MS_RIGHT);
224 } else {
225 mousekey_off(KC_MS_DOWN);
226 mousekey_off(KC_MS_RIGHT);
227 }
228 mousekey_send();
229 break;
230
231
232 }
233 return MACRO_NONE;
234};
235
236
237
238void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
239 switch (id) {
240 case RGBLED_TOGGLE:
241 //led operations
242 if (record->event.pressed) {
243 rgblight_toggle();
244 }
245 break;
246 }
247}
248
249
250
251void LayerLEDSet(uint8_t layr) {
252
253 switch (layr) {
254 case _QW:
255 rgblight_setrgb(0,20, 0); // dim green
256 break;
257 case _LW:
258 // deep purple
259 rgblight_setrgb(20,0,35);
260 break;
261 case _HI:
262 // light blue
263 rgblight_setrgb(0,20,20);
264 break;
265 case _NAV:
266 // Yellowy orange
267 rgblight_setrgb(25,20,0); // brighter
268 break;
269 case _FKEYS:
270 // RED
271 rgblight_setrgb(20,0,0); // brighter
272 break;
273 default:
274 rgblight_setrgb(20,2,20);//error
275 break;
276 }
277
278 return;
279
280}
281
282void matrix_init_user(void) {
283}
284
285// Bleah globals need to be initialized.
286uint8_t old_layer=_QW;
287
288void matrix_scan_user(void) {
289 uint8_t layer = biton32(layer_state);
290 if (old_layer != layer) {
291 LayerLEDSet(layer);
292 old_layer=layer;
293 }
294}
295
296
297bool process_record_user(uint16_t keycode, keyrecord_t *record) {
298 return true;
299}
300
301void led_set_user(uint8_t usb_led) {
302
303}
304
305
diff --git a/keyboards/handwired/traveller/keymaps/default/readme.md b/keyboards/handwired/traveller/keymaps/default/readme.md
new file mode 100644
index 000000000..7ddc40b3c
--- /dev/null
+++ b/keyboards/handwired/traveller/keymaps/default/readme.md
@@ -0,0 +1,2 @@
1# The default keymap for handwired/traveller
2this is a kitchen sink build
diff --git a/keyboards/handwired/traveller/readme.md b/keyboards/handwired/traveller/readme.md
new file mode 100644
index 000000000..646844b1d
--- /dev/null
+++ b/keyboards/handwired/traveller/readme.md
@@ -0,0 +1,35 @@
1traveler keyboard firmware
2======================
3
4## Traveller Specific Info ##
5The traveller is a varient on the atreus keyboard.
6Like the Atreus, it is designed to be a good compromise between size and ergonomics.
7
8key differences are
9- an additional column for each pinky
10- an RGB LED in the center to show the current layer
11- more finger stagger, splay angle and contoured keycaps (F2 profile for space key).
12
13You 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.
14
15## Quantum MK Firmware
16
17For the full Quantum feature list, see [the parent README.md](/README.md).
18
19## Building
20
21Download 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.
22
23Depending on which keymap you would like to use, you will have to compile slightly differently.
24
25### Default
26To build with the default keymap, simply run `make`.
27
28### Other Keymaps
29Several 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.
30
31To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
32```
33$ make KEYMAP=[default|jack|<name>]
34```
35Keymaps 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 000000000..9d2534130
--- /dev/null
+++ b/keyboards/handwired/traveller/traveller.c
@@ -0,0 +1,61 @@
1#include "traveller.h"
2
3__attribute__ ((weak))
4void matrix_init_user(void) {
5 // leave this function blank - it can be defined in a keymap file
6};
7
8__attribute__ ((weak))
9void matrix_scan_user(void) {
10 // leave this function blank - it can be defined in a keymap file
11}
12
13__attribute__ ((weak))
14void process_action_user(keyrecord_t *record) {
15 // leave this function blank - it can be defined in a keymap file
16}
17
18__attribute__ ((weak))
19void led_set_user(uint8_t usb_led) {
20 // leave this function blank - it can be defined in a keymap file
21}
22
23void matrix_init_kb(void) {
24 // put your keyboard start-up code here
25 // runs once when the firmware starts up
26
27#ifdef RGBLIGHT_ENABLE
28 rgblight_init();
29 rgblight_mode(1); // solid, no timer
30 rgblight_setrgb(0,20,0);// dim green, happens to be same as _QW
31#endif
32
33// Turn status LED on
34 DDRC |= (1<<7);
35 PORTC |= (1<<7);
36
37 matrix_init_user();
38}
39
40
41void matrix_scan_kb(void) {
42 // put your looping keyboard code here
43 // runs every cycle (a lot)
44
45 matrix_scan_user();
46}
47
48bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
49 // put your per-action keyboard code here
50 // runs for every action, just before processing by the firmware
51
52 return process_record_user(keycode, record);
53}
54
55void led_set_kb(uint8_t usb_led) {
56 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
57
58 led_set_user(usb_led);
59}
60
61
diff --git a/keyboards/handwired/traveller/traveller.h b/keyboards/handwired/traveller/traveller.h
new file mode 100644
index 000000000..972a1a94a
--- /dev/null
+++ b/keyboards/handwired/traveller/traveller.h
@@ -0,0 +1,32 @@
1#ifndef TRAVELLER_H
2#define TRAVELLER_H
3
4#include "quantum.h"
5#include "led.h"
6
7#ifdef RGBLIGHT_ENABLE
8 #include "rgblight.h"
9#endif
10#ifdef BACKLIGHT_ENABLE
11 #include "backlight.h"
12#endif
13
14
15
16// This a shortcut to help you visually see your layout.
17// The first section contains all of the arguements
18// The second converts the arguments into a two-dimensional array
19#define KEYMAP( \
20 k00, k01, k02, k03, k04, k05, k07, k08, k09, k0a, k0b, k0c, \
21 k10, k11, k12, k13, k14, k15, k17, k18, k19, k1a, k1b, k1c, \
22 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
23 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c \
24) \
25{ \
26 { k00, k01, k02, k03, k04, k05, KC_NO, k07, k08, k09, k0a, k0b, k0c }, \
27 { k10, k11, k12, k13, k14, k15, KC_NO, k17, k18, k19, k1a, k1b, k1c }, \
28 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c }, \
29 { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c } \
30}
31
32#endif
diff --git a/keyboards/jd45/readme.md b/keyboards/jd45/readme.md
new file mode 100644
index 000000000..2822666e8
--- /dev/null
+++ b/keyboards/jd45/readme.md
@@ -0,0 +1,4 @@
1JD45 keyboard firmware
2======================
3
4TODO: to be updated.
diff --git a/keyboards/kinesis/Makefile b/keyboards/kinesis/Makefile
new file mode 100644
index 000000000..ca077e636
--- /dev/null
+++ b/keyboards/kinesis/Makefile
@@ -0,0 +1,79 @@
1
2## Project specific files
3
4SRC= matrix.c
5
6# MCU name
7MCU = at90usb1286
8#MCU = atmega32u4
9
10# Processor frequency.
11# This will define a symbol, F_CPU, in all source code files equal to the
12# processor frequency in Hz. You can then use this symbol in your source code to
13# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
14# automatically to create a 32-bit value in your source code.
15#
16# This will be an integer division of F_USB below, as it is sourced by
17# F_USB after it has run through any CPU prescalers. Note that this value
18# does not *change* the processor frequency - it should merely be updated to
19# reflect the processor speed set externally so that the code can use accurate
20# software delays.
21F_CPU = 16000000
22
23
24#
25# LUFA specific
26#
27# Target architecture (see library "Board Types" documentation).
28ARCH = AVR8
29
30# Input clock frequency.
31# This will define a symbol, F_USB, in all source code files equal to the
32# input clock frequency (before any prescaling is performed) in Hz. This value may
33# differ from F_CPU if prescaling is used on the latter, and is required as the
34# raw input clock is fed directly to the PLL sections of the AVR for high speed
35# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
36# at the end, this will be done automatically to create a 32-bit value in your
37# source code.
38#
39# If no clock division is performed on the input clock inside the AVR (via the
40# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
41F_USB = $(F_CPU)
42
43# Interrupt driven control endpoint task(+60)
44OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
45
46
47# Boot Section Size in *bytes*
48# Teensy halfKay 512
49# Teensy++ halfKay 1024
50# Atmel DFU loader 4096
51# LUFA bootloader 4096
52# USBaspLoader 2048
53OPT_DEFS += -DBOOTLOADER_SIZE=1024
54
55
56# Build Options
57# change yes to no to disable
58#
59BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
60MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
61EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
62CONSOLE_ENABLE ?= no # Console for debug(+400)
63COMMAND_ENABLE ?= no
64# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
65SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
66# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
67NKRO_ENABLE ?= no # USB Nkey Rollover
68BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
69MIDI_ENABLE ?= no # MIDI controls
70UNICODE_ENABLE ?= no # Unicode
71BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
72AUDIO_ENABLE = no # Audio output should be port E6, current quantum library hardcodes C6, which we use for programming
73CUSTOM_MATRIX=yes # need to do our own thing with the matrix
74
75ifndef QUANTUM_DIR
76 include ../../Makefile
77endif
78
79
diff --git a/keyboards/kinesis/config.h b/keyboards/kinesis/config.h
new file mode 100644
index 000000000..8f1fdbdb6
--- /dev/null
+++ b/keyboards/kinesis/config.h
@@ -0,0 +1,174 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#ifndef CONFIG_H
19#define CONFIG_H
20
21#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEED
25#define PRODUCT_ID 0x6060
26#define DEVICE_VER 0x0001
27#define MANUFACTURER You
28#define PRODUCT kinesis-advantage
29#define DESCRIPTION A custom keyboard
30
31// Mouse
32#define MOUSEKEY_DELAY 20
33#define MOUSEKEY_INTERVAL 20
34#define MOUSEKEY_MAX_SPEED 4
35#define MOUSEKEY_TIME_TO_MAX 20
36#define MOUSEKEY_WHEEL_MAX_SPEED 1
37#define MOUSEKEY_WHEEL_DELTA 1
38#define MOUSEKEY_WHEEL_TIME_TO_MAX 1
39
40/* key matrix size */
41#define MATRIX_ROWS 16
42#define MATRIX_COLS 8
43
44/*
45 * Keyboard Matrix Assignments
46 *
47 * Change this to how you wired your keyboard
48 * COLS: AVR pins used for columns, left to right
49 * ROWS: AVR pins used for rows, top to bottom
50 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
51 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
52 *
53*/
54//Passed through the port multipler, so 4 pins =16
55#define MATRIX_ROW_PINS { F0,F1, F2, F3 }
56
57// May be upside down.
58#define MATRIX_COL_PINS { B0,B1, B2, B3, B4, B5, B6, B7 }
59#define UNUSED_PINS
60
61/* COL2ROW or ROW2COL */
62#define DIODE_DIRECTION COL2ROW
63
64// #define BACKLIGHT_PIN B7
65// #define BACKLIGHT_BREATHING
66// #define BACKLIGHT_LEVELS 3
67
68
69/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
70#define DEBOUNCING_DELAY 5
71
72/* define if matrix has ghost (lacks anti-ghosting diodes) */
73//#define MATRIX_HAS_GHOST
74
75/* number of backlight levels */
76
77/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
78#define LOCKING_SUPPORT_ENABLE
79/* Locking resynchronize hack */
80#define LOCKING_RESYNC_ENABLE
81
82/*
83 * Force NKRO
84 *
85 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
86 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
87 * makefile for this to work.)
88 *
89 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
90 * until the next keyboard reset.
91 *
92 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
93 * fully operational during normal computer usage.
94 *
95 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
96 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
97 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
98 * power-up.
99 *
100 */
101//#define FORCE_NKRO
102
103/*
104 * Magic Key Options
105 *
106 * Magic keys are hotkey commands that allow control over firmware functions of
107 * the keyboard. They are best used in combination with the HID Listen program,
108 * found here: https://www.pjrc.com/teensy/hid_listen.html
109 *
110 * The options below allow the magic key functionality to be changed. This is
111 * useful if your keyboard/keypad is missing keys and you want magic key support.
112 *
113 */
114
115/* key combination for magic key command */
116#define IS_COMMAND() ( \
117 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
118)
119
120/* control how magic key switches layers */
121//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
122//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
123//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
124
125/* override magic key keymap */
126//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
127//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
128//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
129//#define MAGIC_KEY_HELP1 H
130//#define MAGIC_KEY_HELP2 SLASH
131//#define MAGIC_KEY_DEBUG D
132//#define MAGIC_KEY_DEBUG_MATRIX X
133//#define MAGIC_KEY_DEBUG_KBD K
134//#define MAGIC_KEY_DEBUG_MOUSE M
135//#define MAGIC_KEY_VERSION V
136//#define MAGIC_KEY_STATUS S
137//#define MAGIC_KEY_CONSOLE C
138//#define MAGIC_KEY_LAYER0_ALT1 ESC
139//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
140//#define MAGIC_KEY_LAYER0 0
141//#define MAGIC_KEY_LAYER1 1
142//#define MAGIC_KEY_LAYER2 2
143//#define MAGIC_KEY_LAYER3 3
144//#define MAGIC_KEY_LAYER4 4
145//#define MAGIC_KEY_LAYER5 5
146//#define MAGIC_KEY_LAYER6 6
147//#define MAGIC_KEY_LAYER7 7
148//#define MAGIC_KEY_LAYER8 8
149//#define MAGIC_KEY_LAYER9 9
150//#define MAGIC_KEY_BOOTLOADER PAUSE
151//#define MAGIC_KEY_LOCK CAPS
152//#define MAGIC_KEY_EEPROM E
153//#define MAGIC_KEY_NKRO N
154//#define MAGIC_KEY_SLEEP_LED Z
155
156/*
157 * Feature disable options
158 * These options are also useful to firmware size reduction.
159 */
160
161/* disable debug print */
162//#define NO_DEBUG
163
164/* disable print */
165//#define NO_PRINT
166
167/* disable action features */
168//#define NO_ACTION_LAYER
169//#define NO_ACTION_TAPPING
170//#define NO_ACTION_ONESHOT
171//#define NO_ACTION_MACRO
172//#define NO_ACTION_FUNCTION
173
174#endif
diff --git a/keyboards/kinesis/docs/kicad/kinesis-cache.lib b/keyboards/kinesis/docs/kicad/kinesis-cache.lib
new file mode 100644
index 000000000..f798d39d6
--- /dev/null
+++ b/keyboards/kinesis/docs/kicad/kinesis-cache.lib
@@ -0,0 +1,232 @@
1EESchema-LIBRARY Version 2.3 Date: Wednesday, November 12, 2014 'pmt' 10:15:19 pm
2#encoding utf-8
3#
4# AT90S4414-P
5#
6DEF AT90S4414-P IC 0 40 Y Y 1 F N
7F0 "IC" -850 1880 40 H V L BNN
8F1 "AT90S4414-P" 450 -1950 40 H V L BNN
9F2 "DIL40" 0 0 30 H V C CIN
10F3 "~" 0 0 60 H V C CNN
11ALIAS AT90S8515-P
12$FPLIST
13 40DIP-ELL600
14 40dip600
15$ENDFPLIST
16DRAW
17S -850 1850 850 -1850 0 1 10 f
18X (T0)PB0 1 1000 700 150 L 40 40 1 1 B
19X (T1)PB1 2 1000 600 150 L 40 40 1 1 B
20X (AIN0)PB2 3 1000 500 150 L 40 40 1 1 B
21X (AIN1)PB3 4 1000 400 150 L 40 40 1 1 B
22X (~SS~)PB4 5 1000 300 150 L 40 40 1 1 B
23X (MOSI)PB5 6 1000 200 150 L 40 40 1 1 B
24X (MISO)PB6 7 1000 100 150 L 40 40 1 1 B
25X (SCK)PB7 8 1000 0 150 L 40 40 1 1 B
26X ~RESET 9 -1000 1700 150 R 40 40 1 1 I
27X (RXD)PD0 10 1000 -1000 150 L 40 40 1 1 B
28X GND 20 0 -2000 150 U 40 40 1 1 W
29X ALE 30 1000 850 150 L 40 40 1 1 O
30X VCC 40 0 2000 150 D 40 40 1 1 W
31X (TXD)PD1 11 1000 -1100 150 L 40 40 1 1 B
32X (A8)PC0 21 1000 -150 150 L 40 40 1 1 B
33X ICP 31 -1000 -1400 150 R 40 40 1 1 I
34X (INT0)PD2 12 1000 -1200 150 L 40 40 1 1 B
35X (A9)PC1 22 1000 -250 150 L 40 40 1 1 B
36X (AD7)PA7 32 1000 1000 150 L 40 40 1 1 B
37X (INT1)PD3 13 1000 -1300 150 L 40 40 1 1 B
38X (A10)PC2 23 1000 -350 150 L 40 40 1 1 B
39X (AD6)PA6 33 1000 1100 150 L 40 40 1 1 B
40X PD4 14 1000 -1400 150 L 40 40 1 1 B
41X (A11)PC3 24 1000 -450 150 L 40 40 1 1 B
42X (AD5)PA5 34 1000 1200 150 L 40 40 1 1 B
43X (OC1A)PD5 15 1000 -1500 150 L 40 40 1 1 B
44X (A12)PC4 25 1000 -550 150 L 40 40 1 1 B
45X (AD4)PA4 35 1000 1300 150 L 40 40 1 1 B
46X (~WR~)PD6 16 1000 -1600 150 L 40 40 1 1 B
47X (A13)PC5 26 1000 -650 150 L 40 40 1 1 B
48X (AD3)PA3 36 1000 1400 150 L 40 40 1 1 B
49X (~RD~)PD7 17 1000 -1700 150 L 40 40 1 1 B
50X (A14)PC6 27 1000 -750 150 L 40 40 1 1 B
51X (AD2)PA2 37 1000 1500 150 L 40 40 1 1 B
52X XTAL2 18 -1000 1200 150 R 40 40 1 1 B
53X (A15)PC7 28 1000 -850 150 L 40 40 1 1 B
54X (AD1)PA1 38 1000 1600 150 L 40 40 1 1 B
55X XTAL1 19 -1000 800 150 R 40 40 1 1 B
56X OC1B 29 -1000 -1500 150 R 40 40 1 1 W
57X (AD0)PA0 39 1000 1700 150 L 40 40 1 1 B
58ENDDRAW
59ENDDEF
60#
61# ATMEGA16U4-A
62#
63DEF ATMEGA16U4-A U 0 40 Y Y 1 F N
64F0 "U" -950 1700 40 H V C CNN
65F1 "ATMEGA16U4-A" 700 -1500 40 H V C CNN
66F2 "TQFP44" 0 0 35 H V C CIN
67F3 "~" 1100 1100 60 H V C CNN
68ALIAS ATMEGA16U4RC-A ATMEGA32U4-A ATMEGA32U4RC-A
69$FPLIST
70 TQFP44
71$ENDFPLIST
72DRAW
73S -1000 1650 950 -1450 0 1 10 f
74X (INT6/AIN0)PE6 1 1100 -650 150 L 40 40 1 1 B
75X UVCC 2 -450 1800 150 D 40 40 1 1 W
76X D- 3 -1150 100 150 R 40 40 1 1 B
77X D+ 4 -1150 200 150 R 40 40 1 1 B
78X UGND 5 -400 -1600 150 U 40 40 1 1 P
79X UCAP 6 -1150 -50 150 R 40 40 1 1 P
80X VBUS 7 -1150 350 150 R 40 40 1 1 P
81X (SS/PCINT0)PB0 8 1100 1550 150 L 40 40 1 1 B
82X (SCLK/PCINT1)PB1 9 1100 1450 150 L 40 40 1 1 B
83X (PDI/MOSI/PCINT2)PB2 10 1100 1350 150 L 40 40 1 1 B
84X (RXD/INT2)PD2 20 1100 150 150 L 40 40 1 1 B
85X (ADC13/OC1B/OC4B/PCINT13)PB6 30 1100 950 150 L 40 40 1 1 B
86X (ADC1)PF1 40 1100 -950 150 L 40 40 1 1 B
87X (PDO/MISO/PCINT3)PB3 11 1100 1250 150 L 40 40 1 1 B
88X (TXD/INT3)PD3 21 1100 50 150 L 40 40 1 1 B
89X (OC3A/~OC4A~)PC6 31 1100 650 150 L 40 40 1 1 B
90X (ADC0)PF0 41 1100 -850 150 L 40 40 1 1 B
91X (OC0A/OC1C/~RTS~/PCINT7)PB7 12 1100 850 150 L 40 40 1 1 B
92X (XCK1/~CTS~)PD5 22 1100 -150 150 L 40 40 1 1 B
93X (ICP3/CLK0/OC4A)PC7 32 1100 550 150 L 40 40 1 1 B
94X AREF 42 -1150 -850 150 R 40 40 1 1 P
95X ~RESET~ 13 -1150 1550 150 R 40 40 1 1 I
96X GND 23 -50 -1600 150 U 40 40 1 1 W
97X (~HWB~)PE2 33 1100 -550 150 L 40 40 1 1 B
98X GND 43 150 -1600 150 U 40 40 1 1 W
99X VCC 14 -200 1800 150 D 40 40 1 1 W
100X AVCC 24 150 1800 150 D 40 40 1 1 W
101X VCC 34 -100 1800 150 D 40 40 1 1 W
102X AVCC 44 250 1800 150 D 40 40 1 1 W
103X GND 15 -150 -1600 150 U 40 40 1 1 W
104X (ICP2/ADC8)PD4 25 1100 -50 150 L 40 40 1 1 B
105X GND 35 50 -1600 150 U 40 40 1 1 W
106X XTAL2 16 -1150 950 150 R 40 40 1 1 O
107X (T1/~OC4D~/ADC9)PD6 26 1100 -250 150 L 40 40 1 1 B
108X (ADC7/TDI)PF7 36 1100 -1350 150 L 40 40 1 1 B
109X XTAL1 17 -1150 1150 150 R 40 40 1 1 I
110X (T0/OC4D/ADC10)PD7 27 1100 -350 150 L 40 40 1 1 B
111X (ADC6/TDO)PF6 37 1100 -1250 150 L 40 40 1 1 B
112X (OC0B/SCL/INT0)PD0 18 1100 350 150 L 40 40 1 1 B
113X (ADC11/PCINT4)PB4 28 1100 1150 150 L 40 40 1 1 B
114X (ADC5/TMS)PF5 38 1100 -1150 150 L 40 40 1 1 B
115X (SDA/INT1)PD1 19 1100 250 150 L 40 40 1 1 B
116X (ADC12/OC1A/~OC4B~/PCINT12)PB5 29 1100 1050 150 L 40 40 1 1 B
117X (ADC4/TCK)PF4 39 1100 -1050 150 L 40 40 1 1 B
118ENDDRAW
119ENDDEF
120#
121# C
122#
123DEF C C 0 10 N Y 1 F N
124F0 "C" 0 100 40 H V L CNN
125F1 "C" 6 -85 40 H V L CNN
126F2 "~" 38 -150 30 H V C CNN
127F3 "~" 0 0 60 H V C CNN
128$FPLIST
129 SM*
130 C?
131 C1-1
132$ENDFPLIST
133DRAW
134P 2 0 1 20 -80 -30 80 -30 N
135P 2 0 1 20 -80 30 80 30 N
136X ~ 1 0 200 170 D 40 40 1 1 P
137X ~ 2 0 -200 170 U 40 40 1 1 P
138ENDDRAW
139ENDDEF
140#
141# CONN_7
142#
143DEF CONN_7 P 0 40 Y N 1 F N
144F0 "P" -30 0 60 V V C CNN
145F1 "CONN_7" 70 0 60 V V C CNN
146F2 "~" 0 0 60 H V C CNN
147F3 "~" 0 0 60 H V C CNN
148DRAW
149S -100 350 150 -350 0 1 0 N
150X P1 1 -350 300 250 R 50 50 1 1 P I
151X P2 2 -350 200 250 R 50 50 1 1 P I
152X P3 3 -350 100 250 R 50 50 1 1 P I
153X P4 4 -350 0 250 R 50 50 1 1 P I
154X P5 5 -350 -100 250 R 50 50 1 1 P I
155X P6 6 -350 -200 250 R 50 50 1 1 P I
156X P7 7 -350 -300 250 R 50 50 1 1 P I
157ENDDRAW
158ENDDEF
159#
160# GND
161#
162DEF ~GND #PWR 0 0 Y Y 1 F P
163F0 "#PWR" 0 0 30 H I C CNN
164F1 "GND" 0 -70 30 H I C CNN
165F2 "~" 0 0 60 H V C CNN
166F3 "~" 0 0 60 H V C CNN
167DRAW
168P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
169X GND 1 0 0 0 U 30 30 1 1 W N
170ENDDRAW
171ENDDEF
172#
173# R
174#
175DEF R R 0 0 N Y 1 F N
176F0 "R" 80 0 40 V V C CNN
177F1 "R" 7 1 40 V V C CNN
178F2 "~" -70 0 30 V V C CNN
179F3 "~" 0 0 30 H V C CNN
180$FPLIST
181 R?
182 SM0603
183 SM0805
184 R?-*
185 SM1206
186$ENDFPLIST
187DRAW
188S -40 150 40 -150 0 1 12 N
189X ~ 1 0 250 100 D 60 60 1 1 P
190X ~ 2 0 -250 100 U 60 60 1 1 P
191ENDDRAW
192ENDDEF
193#
194# USB-MINI-B
195#
196DEF USB-MINI-B CON 0 40 Y Y 1 F N
197F0 "CON" -250 450 60 H V C CNN
198F1 "USB-MINI-B" -50 -500 60 H V C CNN
199F2 "~" 0 0 60 H V C CNN
200F3 "~" 0 0 60 H V C CNN
201$FPLIST
202 USB-Mini-B-Jack
203$ENDFPLIST
204DRAW
205S -350 400 350 -400 0 1 0 N
206X VBUS 1 -550 300 200 R 50 50 1 1 W
207X D- 2 -550 150 200 R 50 50 1 1 B
208X D+ 3 -550 0 200 R 50 50 1 1 B
209X ID 4 -550 -150 200 R 50 50 1 1 B
210X GND 5 -550 -300 200 R 50 50 1 1 W
211X SHELL1 6 550 300 200 L 50 50 1 1 B
212X SHELL2 7 550 150 200 L 50 50 1 1 B
213X SHELL3 8 550 -150 200 L 50 50 1 1 B
214X SHELL4 9 550 -300 200 L 50 50 1 1 B
215ENDDRAW
216ENDDEF
217#
218# VCC
219#
220DEF VCC #PWR 0 0 Y Y 1 F P
221F0 "#PWR" 0 100 30 H I C CNN
222F1 "VCC" 0 100 30 H V C CNN
223F2 "~" 0 0 60 H V C CNN
224F3 "~" 0 0 60 H V C CNN
225DRAW
226X VCC 1 0 0 0 U 20 20 0 0 W N
227C 0 50 20 0 1 0 N
228P 3 0 1 0 0 0 0 30 0 30 N
229ENDDRAW
230ENDDEF
231#
232#End Library
diff --git a/keyboards/kinesis/docs/kicad/kinesis.pro b/keyboards/kinesis/docs/kicad/kinesis.pro
new file mode 100644
index 000000000..9f130b509
--- /dev/null
+++ b/keyboards/kinesis/docs/kicad/kinesis.pro
@@ -0,0 +1,83 @@
1update=Wednesday, November 05, 2014 'pmt' 12:08:47 pm
2version=1
3last_client=pcbnew
4[cvpcb]
5version=1
6NetIExt=net
7[cvpcb/libraries]
8EquName1=devcms
9[general]
10version=1
11[eeschema]
12version=1
13PageLayoutDescrFile=
14SubpartIdSeparator=0
15SubpartFirstId=65
16LibDir=../../../lib/kicad/library
17NetFmtName=
18RptD_X=0
19RptD_Y=100
20RptLab=1
21LabSize=60
22[eeschema/libraries]
23LibName1=power
24LibName2=device
25LibName3=transistors
26LibName4=conn
27LibName5=linear
28LibName6=regul
29LibName7=74xx
30LibName8=cmos4000
31LibName9=adc-dac
32LibName10=memory
33LibName11=xilinx
34LibName12=special
35LibName13=microcontrollers
36LibName14=dsp
37LibName15=microchip
38LibName16=analog_switches
39LibName17=motorola
40LibName18=texas
41LibName19=intel
42LibName20=audio
43LibName21=interface
44LibName22=digital-audio
45LibName23=philips
46LibName24=display
47LibName25=cypress
48LibName26=siliconi
49LibName27=opto
50LibName28=atmel
51LibName29=contrib
52LibName30=valves
53LibName31=custom
54[pcbnew]
55version=1
56LastNetListRead=
57UseCmpFile=1
58PadDrill=1.016000000000
59PadDrillOvalY=1.016000000000
60PadSizeH=1.524000000000
61PadSizeV=1.524000000000
62PcbTextSizeV=1.500000000000
63PcbTextSizeH=1.500000000000
64PcbTextThickness=0.300000000000
65ModuleTextSizeV=1.000000000000
66ModuleTextSizeH=1.000000000000
67ModuleTextSizeThickness=0.150000000000
68SolderMaskClearance=0.000000000000
69SolderMaskMinWidth=0.000000000000
70DrawSegmentWidth=0.200000000000
71BoardOutlineThickness=0.100000000000
72ModuleOutlineThickness=0.150000000000
73[pcbnew/libraries]
74LibDir=../../../lib/kicad/modules
75LibName1=custom
76LibName2=Sockets
77LibName3=Connect
78LibName4=Discret
79LibName5=Divers
80LibName6=Display
81LibName7=LEDs
82LibName8=SMD_Packages
83LibName9=Sockets_DIP
diff --git a/keyboards/kinesis/docs/kicad/kinesis.sch b/keyboards/kinesis/docs/kicad/kinesis.sch
new file mode 100644
index 000000000..f75335aa0
--- /dev/null
+++ b/keyboards/kinesis/docs/kicad/kinesis.sch
@@ -0,0 +1,634 @@
1EESchema Schematic File Version 2
2LIBS:power
3LIBS:device
4LIBS:transistors
5LIBS:conn
6LIBS:linear
7LIBS:regul
8LIBS:74xx
9LIBS:cmos4000
10LIBS:adc-dac
11LIBS:memory
12LIBS:xilinx
13LIBS:special
14LIBS:microcontrollers
15LIBS:dsp
16LIBS:microchip
17LIBS:analog_switches
18LIBS:motorola
19LIBS:texas
20LIBS:intel
21LIBS:audio
22LIBS:interface
23LIBS:digital-audio
24LIBS:philips
25LIBS:display
26LIBS:cypress
27LIBS:siliconi
28LIBS:opto
29LIBS:atmel
30LIBS:contrib
31LIBS:valves
32LIBS:custom
33LIBS:kinesis-cache
34EELAYER 27 0
35EELAYER END
36$Descr A4 11693 8268
37encoding utf-8
38Sheet 1 1
39Title ""
40Date "13 nov 2014"
41Rev ""
42Comp ""
43Comment1 ""
44Comment2 ""
45Comment3 ""
46Comment4 ""
47$EndDescr
48$Comp
49L C C4
50U 1 1 545804FB
51P 2850 4250
52F 0 "C4" H 2850 4350 40 0000 L CNN
53F 1 "1uF" H 2856 4165 40 0000 L CNN
54F 2 "~" H 2888 4100 30 0000 C CNN
55F 3 "~" H 2850 4250 60 0000 C CNN
56 1 2850 4250
57 -1 0 0 1
58$EndComp
59$Comp
60L R R3
61U 1 1 545805E8
62P 2500 4000
63F 0 "R3" V 2580 4000 40 0000 C CNN
64F 1 "22" V 2507 4001 40 0000 C CNN
65F 2 "~" V 2430 4000 30 0000 C CNN
66F 3 "~" H 2500 4000 30 0000 C CNN
67 1 2500 4000
68 0 -1 -1 0
69$EndComp
70$Comp
71L R R2
72U 1 1 545805FA
73P 2500 3800
74F 0 "R2" V 2580 3800 40 0000 C CNN
75F 1 "22" V 2507 3801 40 0000 C CNN
76F 2 "~" V 2430 3800 30 0000 C CNN
77F 3 "~" H 2500 3800 30 0000 C CNN
78 1 2500 3800
79 0 -1 -1 0
80$EndComp
81Entry Wire Line
82 6450 2450 6550 2550
83Entry Wire Line
84 6450 2550 6550 2650
85Entry Wire Line
86 6450 2650 6550 2750
87Entry Wire Line
88 6450 2750 6550 2850
89Entry Wire Line
90 6450 2950 6550 3050
91Entry Wire Line
92 6450 3050 6550 3150
93Entry Wire Line
94 6450 2850 6550 2950
95Entry Wire Line
96 6450 3150 6550 3250
97Wire Wire Line
98 10250 1800 10750 1800
99Entry Wire Line
100 10750 1800 10850 1900
101Entry Wire Line
102 10750 1900 10850 2000
103Entry Wire Line
104 10750 2000 10850 2100
105Entry Wire Line
106 10750 2800 10850 2900
107Entry Wire Line
108 10750 2900 10850 3000
109Entry Wire Line
110 10750 3000 10850 3100
111Entry Wire Line
112 10750 3100 10850 3200
113Entry Wire Line
114 10750 3200 10850 3300
115Entry Wire Line
116 10750 3300 10850 3400
117$Comp
118L AT90S8515-P IC2
119U 1 1 545A62EA
120P 9250 3500
121F 0 "IC2" H 8400 5380 40 0000 L BNN
122F 1 "AT90S8515-P" H 9700 1550 40 0000 L BNN
123F 2 "DIL40" H 9250 3500 30 0000 C CIN
124F 3 "" H 9250 3500 60 0000 C CNN
125 1 9250 3500
126 1 0 0 -1
127$EndComp
128NoConn ~ 10250 2650
129Entry Wire Line
130 10750 3650 10850 3750
131Entry Wire Line
132 10750 3750 10850 3850
133Entry Wire Line
134 10750 3850 10850 3950
135Entry Wire Line
136 10750 3950 10850 4050
137Entry Wire Line
138 10750 4050 10850 4150
139Entry Wire Line
140 10750 4150 10850 4250
141Entry Wire Line
142 10750 4350 10850 4450
143Entry Wire Line
144 10750 4250 10850 4350
145NoConn ~ 8250 4900
146NoConn ~ 8250 5000
147NoConn ~ 8250 1800
148Wire Wire Line
149 10250 1900 10750 1900
150Wire Wire Line
151 10250 2000 10750 2000
152Wire Wire Line
153 10250 2100 10750 2100
154Wire Wire Line
155 10250 2200 10750 2200
156Wire Wire Line
157 10250 2300 10750 2300
158Wire Wire Line
159 10250 2400 10750 2400
160Wire Wire Line
161 10250 2500 10750 2500
162Text Label 10350 1800 0 60 ~ 0
163A
164Text Label 10350 1900 0 60 ~ 0
165B
166Text Label 10350 2000 0 60 ~ 0
167C
168Text Label 10350 2100 0 60 ~ 0
169G
170Wire Wire Line
171 10250 2800 10750 2800
172Wire Wire Line
173 10250 2900 10750 2900
174Wire Wire Line
175 10250 3000 10750 3000
176Wire Wire Line
177 10250 3100 10750 3100
178Wire Wire Line
179 10250 3200 10750 3200
180Wire Wire Line
181 10250 3300 10750 3300
182Wire Wire Line
183 10250 3400 10750 3400
184Wire Wire Line
185 10250 3500 10750 3500
186Text Label 10350 2800 0 60 ~ 0
187DL2
188Text Label 10350 2900 0 60 ~ 0
189DR1
190Text Label 10350 3000 0 60 ~ 0
191DR2
192Text Label 10350 3100 0 60 ~ 0
193DL1
194Text Label 10350 3400 0 60 ~ 0
195SCL
196Text Label 10350 3500 0 60 ~ 0
197SDA
198Wire Wire Line
199 10250 3650 10750 3650
200Wire Wire Line
201 10250 3750 10750 3750
202Wire Wire Line
203 10250 3850 10750 3850
204Wire Wire Line
205 10250 3950 10750 3950
206Wire Wire Line
207 10250 4050 10750 4050
208Wire Wire Line
209 10250 4150 10750 4150
210Wire Wire Line
211 10250 4250 10750 4250
212Wire Wire Line
213 10250 4350 10750 4350
214Text Label 10350 3650 0 60 ~ 0
215R1
216Text Label 10350 3750 0 60 ~ 0
217R2
218Text Label 10350 3850 0 60 ~ 0
219R3
220Text Label 10350 3950 0 60 ~ 0
221R4
222Text Label 10350 4050 0 60 ~ 0
223R5
224Text Label 10350 4150 0 60 ~ 0
225R6
226Text Label 10350 4250 0 60 ~ 0
227R7
228Text Label 10350 4350 0 60 ~ 0
229R8
230Wire Wire Line
231 10250 4500 10750 4500
232Wire Wire Line
233 10250 4600 10750 4600
234Wire Wire Line
235 10250 4700 10750 4700
236Wire Wire Line
237 10250 4800 10750 4800
238Wire Wire Line
239 10250 4900 10750 4900
240Wire Wire Line
241 10250 5000 10750 5000
242Wire Wire Line
243 10250 5100 10750 5100
244Wire Wire Line
245 10250 5200 10750 5200
246Text Label 10350 4600 0 60 ~ 0
247FS1
248Text Label 10350 5000 0 60 ~ 0
249FS3
250Text Label 10350 5200 0 60 ~ 0
251FS2
252$Comp
253L GND #PWR01
254U 1 1 545A7377
255P 9250 5600
256F 0 "#PWR01" H 9250 5600 30 0001 C CNN
257F 1 "GND" H 9250 5530 30 0001 C CNN
258F 2 "" H 9250 5600 60 0000 C CNN
259F 3 "" H 9250 5600 60 0000 C CNN
260 1 9250 5600
261 1 0 0 -1
262$EndComp
263Wire Wire Line
264 9250 5500 9250 5600
265Text Label 10350 4700 0 60 ~ 0
266CLOCK
267Text Label 10350 4800 0 60 ~ 0
268DATA
269NoConn ~ 10750 4700
270NoConn ~ 10750 4800
271Text Label 10350 3200 0 60 ~ 0
272KP
273Text Label 10350 3300 0 60 ~ 0
274PGM
275Text Label 10350 2500 0 60 ~ 0
276BUZZ
277NoConn ~ 8250 2300
278NoConn ~ 8250 2700
279$Comp
280L GND #PWR02
281U 1 1 545A7565
282P 4750 5700
283F 0 "#PWR02" H 4750 5700 30 0001 C CNN
284F 1 "GND" H 4750 5630 30 0001 C CNN
285F 2 "" H 4750 5700 60 0000 C CNN
286F 3 "" H 4750 5700 60 0000 C CNN
287 1 4750 5700
288 1 0 0 -1
289$EndComp
290Entry Wire Line
291 6450 3650 6550 3750
292Entry Wire Line
293 6450 3750 6550 3850
294Entry Wire Line
295 6450 4150 6550 4250
296Entry Wire Line
297 6450 4250 6550 4350
298Entry Wire Line
299 6450 4050 6550 4150
300Entry Wire Line
301 6450 4350 6550 4450
302NoConn ~ 3750 2850
303Wire Wire Line
304 1200 2000 6450 2000
305NoConn ~ 3750 3050
306Wire Wire Line
307 2750 3800 3750 3800
308Wire Wire Line
309 2750 3900 3750 3900
310Wire Wire Line
311 2750 3900 2750 4000
312Wire Bus Line
313 6550 2100 6550 6050
314Wire Bus Line
315 10850 1600 10850 6050
316Text Label 6050 4350 0 60 ~ 0
317DL1
318Text Label 6050 4250 0 60 ~ 0
319DR2
320Text Label 6050 4150 0 60 ~ 0
321DR1
322Text Label 6050 4050 0 60 ~ 0
323DL2
324Text Label 6050 2450 0 60 ~ 0
325R1
326Text Label 6050 2550 0 60 ~ 0
327R2
328Text Label 6050 2650 0 60 ~ 0
329R3
330Text Label 6050 2750 0 60 ~ 0
331R4
332Text Label 6050 2850 0 60 ~ 0
333R5
334Text Label 6050 2950 0 60 ~ 0
335R6
336Text Label 6050 3050 0 60 ~ 0
337R7
338Text Label 6050 3150 0 60 ~ 0
339R8
340Text Label 6050 5050 0 60 ~ 0
341A
342Text Label 6050 5150 0 60 ~ 0
343B
344Text Label 6050 5250 0 60 ~ 0
345C
346Text Label 6050 5350 0 60 ~ 0
347G
348Text Label 1300 3800 0 60 ~ 0
349D+
350Text Label 1300 4000 0 60 ~ 0
351D-
352NoConn ~ 10750 2200
353NoConn ~ 10750 2300
354NoConn ~ 10750 2400
355Text Label 10350 4500 0 60 ~ 0
356GND
357NoConn ~ 10750 4900
358NoConn ~ 10750 5100
359Text Label 6050 3450 0 60 ~ 0
360KP
361Text Label 6050 3350 0 60 ~ 0
362PGM
363$Comp
364L ATMEGA32U4-A U1
365U 1 1 5462E0B1
366P 4900 4000
367F 0 "U1" H 3950 5700 40 0000 C CNN
368F 1 "ATMEGA32U4-A" H 5600 2500 40 0000 C CNN
369F 2 "TQFP44" H 4900 4000 35 0000 C CIN
370F 3 "" H 6000 5100 60 0000 C CNN
371 1 4900 4000
372 1 0 0 -1
373$EndComp
374Wire Wire Line
375 3750 4850 3750 5600
376Wire Wire Line
377 4450 2200 5150 2200
378Connection ~ 4700 2200
379Connection ~ 4800 2200
380Connection ~ 5050 2200
381Connection ~ 4800 2000
382Wire Wire Line
383 6000 2450 6450 2450
384Wire Wire Line
385 6000 2550 6450 2550
386Wire Wire Line
387 6000 2650 6450 2650
388Wire Wire Line
389 6000 2750 6450 2750
390Wire Wire Line
391 6000 2850 6450 2850
392Wire Wire Line
393 6000 2950 6450 2950
394Wire Wire Line
395 6000 3050 6450 3050
396Wire Wire Line
397 6000 3150 6450 3150
398Wire Wire Line
399 6000 5050 6450 5050
400Wire Wire Line
401 6000 5150 6450 5150
402Wire Wire Line
403 6000 5250 6450 5250
404Wire Wire Line
405 6000 4050 6450 4050
406Wire Wire Line
407 6000 4150 6450 4150
408Wire Wire Line
409 6000 4250 6450 4250
410Wire Wire Line
411 6000 4350 6450 4350
412Wire Wire Line
413 6000 4550 6450 4550
414Entry Wire Line
415 6450 3350 6550 3450
416Entry Wire Line
417 6450 3450 6550 3550
418Entry Wire Line
419 6450 5050 6550 5150
420Entry Wire Line
421 6450 5150 6550 5250
422Entry Wire Line
423 6450 5250 6550 5350
424Entry Wire Line
425 6450 5350 6550 5450
426Entry Wire Line
427 6450 4650 6550 4750
428Wire Wire Line
429 6000 3350 6450 3350
430Wire Wire Line
431 6000 3450 6450 3450
432Wire Wire Line
433 1200 5600 6450 5600
434Connection ~ 4950 5600
435Connection ~ 4850 5600
436Wire Wire Line
437 4750 5600 4750 5700
438Connection ~ 4750 5600
439Connection ~ 4500 5600
440Text Label 6050 4550 0 60 ~ 0
441HWB
442Wire Wire Line
443 6000 5350 6450 5350
444Wire Wire Line
445 6000 3650 6450 3650
446Wire Wire Line
447 6000 3750 6450 3750
448Text Label 6050 3650 0 60 ~ 0
449SCL
450Text Label 6050 3750 0 60 ~ 0
451SDA
452Wire Wire Line
453 6000 3850 6450 3850
454Wire Wire Line
455 6000 3950 6450 3950
456Wire Wire Line
457 6000 4650 6450 4650
458Text Label 6050 4650 0 60 ~ 0
459BUZZ
460NoConn ~ 10750 4600
461NoConn ~ 10750 5000
462NoConn ~ 10750 5200
463Entry Wire Line
464 10750 3400 10850 3500
465Entry Wire Line
466 10750 3500 10850 3600
467Entry Wire Line
468 10750 4500 10850 4600
469Wire Wire Line
470 2850 4050 3750 4050
471Text Label 2950 4050 0 60 ~ 0
472UCAP
473Wire Wire Line
474 6000 4850 6450 4850
475Wire Wire Line
476 6000 4950 6450 4950
477NoConn ~ 6450 4850
478NoConn ~ 6450 4950
479NoConn ~ 6450 4550
480$Comp
481L USB-MINI-B CON1
482U 1 1 546431C1
483P 2100 5050
484F 0 "CON1" H 1850 5500 60 0000 C CNN
485F 1 "USB-MINI-B" H 2050 4550 60 0000 C CNN
486F 2 "" H 2100 5050 60 0000 C CNN
487F 3 "" H 2100 5050 60 0000 C CNN
488 1 2100 5050
489 0 1 1 0
490$EndComp
491$Comp
492L VCC #PWR03
493U 1 1 54643698
494P 2400 4400
495F 0 "#PWR03" H 2400 4500 30 0001 C CNN
496F 1 "VCC" H 2400 4500 30 0000 C CNN
497F 2 "" H 2400 4400 60 0000 C CNN
498F 3 "" H 2400 4400 60 0000 C CNN
499 1 2400 4400
500 1 0 0 -1
501$EndComp
502Text Notes 2600 2750 0 60 ~ 0
503Teensy 2.0\n(not fully drawn)
504$Comp
505L CONN_7 B7K-PH-K-S1
506U 1 1 54643939
507P 1950 6900
508F 0 "B7K-PH-K-S1" V 1920 6900 60 0000 C CNN
509F 1 "CONN_7" V 2020 6900 60 0000 C CNN
510F 2 "" H 1950 6900 60 0000 C CNN
511F 3 "" H 1950 6900 60 0000 C CNN
512 1 1950 6900
513 1 0 0 -1
514$EndComp
515Connection ~ 3750 5600
516Connection ~ 2400 5600
517Connection ~ 2250 5600
518Connection ~ 1950 5600
519Wire Wire Line
520 2400 4400 2400 4500
521Wire Wire Line
522 2250 4000 2250 4500
523Wire Wire Line
524 1200 3800 2250 3800
525Wire Wire Line
526 2100 3800 2100 4500
527Wire Wire Line
528 2850 4450 2850 5600
529Connection ~ 2850 5600
530Entry Wire Line
531 1100 6800 1200 6900
532Entry Wire Line
533 1100 6900 1200 7000
534Entry Wire Line
535 1100 7000 1200 7100
536Entry Wire Line
537 1100 6700 1200 6800
538Wire Wire Line
539 1200 6600 1600 6600
540Wire Wire Line
541 1200 6700 1600 6700
542Wire Wire Line
543 1200 6800 1600 6800
544Wire Wire Line
545 1200 6900 1600 6900
546Wire Wire Line
547 1200 7000 1600 7000
548Wire Wire Line
549 1200 7100 1600 7100
550Wire Wire Line
551 1200 7200 1600 7200
552Text Label 1300 6600 0 60 ~ 0
553FS2
554Text Label 1300 6700 0 60 ~ 0
555FS1
556Text Label 1300 6800 0 60 ~ 0
557VCC
558Text Label 1300 6900 0 60 ~ 0
559D-
560Text Label 1300 7000 0 60 ~ 0
561D+
562Text Label 1300 7100 0 60 ~ 0
563GND
564Text Label 1300 7200 0 60 ~ 0
565FS3
566NoConn ~ 3750 2450
567Wire Wire Line
568 3600 2000 3600 3650
569Wire Wire Line
570 3600 3650 3750 3650
571NoConn ~ 1950 4500
572Wire Bus Line
573 1100 1900 1100 7100
574NoConn ~ 1200 6600
575NoConn ~ 1200 6700
576NoConn ~ 1200 7200
577Connection ~ 2100 3800
578Wire Wire Line
579 1200 4000 2250 4000
580Entry Wire Line
581 1100 3700 1200 3800
582Entry Wire Line
583 1100 3900 1200 4000
584Text Label 10350 1500 0 60 ~ 0
585VCC
586Entry Wire Line
587 1100 1900 1200 2000
588Text Label 1250 2000 0 60 ~ 0
589VCC
590Entry Wire Line
591 1100 5500 1200 5600
592Connection ~ 1800 5600
593Text Label 1300 5600 0 60 ~ 0
594GND
595Wire Wire Line
596 9250 5500 10750 5500
597Entry Wire Line
598 10750 5500 10850 5600
599Text Label 10350 5500 0 60 ~ 0
600GND
601Wire Wire Line
602 9250 1500 10750 1500
603Entry Wire Line
604 10750 1500 10850 1600
605Connection ~ 3600 2000
606Wire Wire Line
607 4800 2000 4800 2200
608Entry Wire Line
609 6450 2000 6550 2100
610Text Label 6050 2000 0 60 ~ 0
611VCC
612Connection ~ 5050 5600
613Entry Wire Line
614 6450 5600 6550 5700
615Text Label 6050 5600 0 60 ~ 0
616GND
617NoConn ~ 6450 3850
618NoConn ~ 6450 3950
619Wire Wire Line
620 1800 4500 1500 4500
621Wire Wire Line
622 1500 4500 1500 5600
623Connection ~ 1500 5600
624Entry Wire Line
625 10750 2500 10850 2600
626Entry Wire Line
627 10750 2100 10850 2200
628Text Notes 1000 5300 1 60 ~ 0
629Sacrificial USB cable from header to Teensy
630Text Notes 7850 5950 0 60 ~ 0
631Ribbon cable between Teensy pins and socket
632Wire Bus Line
633 10850 6050 6550 6050
634$EndSCHEMATC
diff --git a/keyboards/kinesis/docs/photos/P1050573.jpg b/keyboards/kinesis/docs/photos/P1050573.jpg
new file mode 100644
index 000000000..027ab9efb
--- /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 000000000..d49c492b8
--- /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 000000000..50cc9897c
--- /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 000000000..af33ac490
--- /dev/null
+++ b/keyboards/kinesis/docs/readme.txt
@@ -0,0 +1,52 @@
1This directory of documentation was copied from https://github.com/wjanssens/tmk_keyboard/tree/master/keyboard/kinesis
2and is probably Copyright 2014 Warren Janssens <warren.janssens@gmail.com>
3and probably released under GPL v2, which may be recovered at <http://www.gnu.org/licenses/>.
4
5Row configuration
6PF0 A
7PF1 B
8PF2 C
9PF3 G 0 = U4, 1 = U5
10
11Column configuration
12 4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7
13 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16
14PB0 21 c1 f6 f8 f7 5 4 3 2 1 =+
15PB1 22 c2 f3 f5 f4 t r e w q TAB
16PB2 23 c3 ESC f2 f1 g f d s a CL
17PB3 24 c4 f9 f11 f10 b v c x z LS UP DN [{ ]}
18PB4 25 c5 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_
19PB5 26 c6 PB PGM KPD y u i o p \
20PB6 27 c7 LC DL BS RC EN SP h j k l ;: '"
21PB7 28 c8 RA PU PD n m ,< .> /? RS
22 */
23
24
2540 pin connector
26
27 DL2 1 40 VCC
28 DR1 2 39 A
29 DR2 3 38 B
30 DL1 4 37 C
31 KPD 5 36 G
32 PGM 6 35
33 SCL 7 34
34 SDA 8 33
35 RST 9 32 BUZZ
36 WP 10 31 EA
37 FS1 11 30 ALE
38 CLOCK 12 29 PSEN
39 DATA 13 28 r8
40 14 27 r7
41 FS3 15 26 r6
42 16 25 r5
43 FS2 17 24 r4
44 XTAL1 18 23 r3
45 XTAL2 19 22 r2
46 GND 20 21 r1
47
48
49references:
50https://github.com/chrisandreae/keyboard-firmware
51
52
diff --git a/keyboards/kinesis/docs/schematic.png b/keyboards/kinesis/docs/schematic.png
new file mode 100644
index 000000000..fa9405a1f
--- /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 000000000..9d3df5964
--- /dev/null
+++ b/keyboards/kinesis/keymaps/default/Makefile
@@ -0,0 +1,21 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = yes # Commands for debug and configuration
10NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18
19ifndef QUANTUM_DIR
20 include ../../../../Makefile
21endif
diff --git a/keyboards/kinesis/keymaps/default/config.h b/keyboards/kinesis/keymaps/default/config.h
new file mode 100644
index 000000000..8893d122e
--- /dev/null
+++ b/keyboards/kinesis/keymaps/default/config.h
@@ -0,0 +1,8 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5
6// place overrides here
7
8#endif
diff --git a/keyboards/kinesis/keymaps/default/keymap.c b/keyboards/kinesis/keymaps/default/keymap.c
new file mode 100644
index 000000000..3bf80699c
--- /dev/null
+++ b/keyboards/kinesis/keymaps/default/keymap.c
@@ -0,0 +1,116 @@
1#include "kinesis.h"
2#include "action_layer.h"
3
4#define QWERTY 0 // Base qerty
5#define SYMB 1// Symbol layer
6
7// An almost entirely blank keymap. Test layers with the upper right hand key - 1 in normal mode, reset in layer 2.
8
9
10/****************************************************************************************************
11*
12* Keymap: Default Layer in Qwerty
13*
14* ,-------------------------------------------------------------------------------------------------------------------.
15* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | PSCR | SLCK | PAUS | FN0 | BOOT |
16* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
17* | =+ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ |
18* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
19* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| |
20* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
21* | Caps | A | S | D | F | G | | H | J | K | L | ;: | '" |
22* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
23* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? | Shift |
24* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
25* | `~ | INS | Left | Right| | Up | Down | [{ | ]} |
26* `---------------------------' `---------------------------'
27* ,-------------. ,-------------.
28* | Ctrl | Alt | | Gui | Ctrl |
29* ,------|------|------| |------+------+------.
30* | | | Home | | PgUp | | |
31* | BkSp | Del |------| |------|Return| Space|
32* | | | End | | PgDn | | |
33* `--------------------' `--------------------'
34*/
35
36
37const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
38[QWERTY] = KEYMAP(
39 KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8,
40 KC_EQL, KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,
41 KC_TAB, KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,
42 KC_CAPS,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
43 KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
44 KC_GRV ,KC_INS ,KC_LEFT,KC_RGHT,
45 KC_LCTL,KC_LALT,
46 KC_HOME,
47 KC_BSPC,KC_DEL ,KC_END ,
48 KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_PSCR ,KC_SLCK ,KC_PAUS, KC_FN0, KC_1,
49 KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS,
50 KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS,
51 KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT,
52 KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT,
53 KC_UP ,KC_DOWN,KC_LBRC,KC_RBRC,
54 KC_RGUI,KC_RCTL,
55 KC_PGUP,
56 KC_PGDN,KC_ENTER ,KC_SPC
57 ),
58[SYMB] = KEYMAP(
59 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
60 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
61 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
62 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
63 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
64 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
65 KC_TRNS, KC_TRNS,
66 KC_TRNS,
67 KC_TRNS, KC_TRNS, KC_TRNS,
68 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0, RESET,
69 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
70 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
71 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
72 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
73 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
74 KC_TRNS, KC_TRNS,
75 KC_TRNS,
76 KC_TRNS, KC_TRNS, KC_TRNS
77 )
78};
79
80const uint16_t PROGMEM fn_actions[] = {
81 [0] = ACTION_LAYER_TAP_TOGGLE(SYMB) , // FN1 - Momentary Layer 1 (Symbols)
82
83
84};
85
86const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
87{
88 // MACRODOWN only works in this function
89 switch(id) {
90 case 0:
91 if (record->event.pressed) {
92 register_code(KC_RSFT);
93 } else {
94 unregister_code(KC_RSFT);
95 }
96 break;
97 }
98 return MACRO_NONE;
99};
100
101
102void matrix_init_user(void) {
103
104}
105
106void matrix_scan_user(void) {
107
108}
109
110bool process_record_user(uint16_t keycode, keyrecord_t *record) {
111 return true;
112}
113
114void led_set_user(uint8_t usb_led) {
115
116}
diff --git a/keyboards/kinesis/keymaps/default/readme.md b/keyboards/kinesis/keymaps/default/readme.md
new file mode 100644
index 000000000..da033be1e
--- /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 000000000..9d3df5964
--- /dev/null
+++ b/keyboards/kinesis/keymaps/programmer/Makefile
@@ -0,0 +1,21 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = yes # Commands for debug and configuration
10NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18
19ifndef QUANTUM_DIR
20 include ../../../../Makefile
21endif
diff --git a/keyboards/kinesis/keymaps/programmer/config.h b/keyboards/kinesis/keymaps/programmer/config.h
new file mode 100644
index 000000000..8893d122e
--- /dev/null
+++ b/keyboards/kinesis/keymaps/programmer/config.h
@@ -0,0 +1,8 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5
6// place overrides here
7
8#endif
diff --git a/keyboards/kinesis/keymaps/programmer/keymap.c b/keyboards/kinesis/keymaps/programmer/keymap.c
new file mode 100644
index 000000000..83fb7bd5f
--- /dev/null
+++ b/keyboards/kinesis/keymaps/programmer/keymap.c
@@ -0,0 +1,245 @@
1#include "kinesis.h"
2#include "action_layer.h"
3#include "mousekey.h"
4
5#define QWERTY 0 // Base qerty
6#define SYMB 1// Symbol layer
7#define MOUSE 2//
8
9
10
11
12/* Macros */
13enum {
14 NONE = 0,
15 // Diagonal mouse movement
16 A_MUL,
17 A_MUR,
18 A_MDL,
19 A_MDR,
20};
21
22
23// Borrowing very heavily from
24// https://github.com/alvicstep/tmk_keyboard
25/****************************************************************************************************
26*
27* Keymap: Default Layer in Qwerty
28*
29* ,-------------------------------------------------------------------------------------------------------------------.
30* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | | bOOT |
31* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
32* | =+ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ |
33* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
34* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| |
35* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
36* |MouseFN1| A | S | D | F | G | | H | J | K | L | ;: | '" |
37* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
38* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? | Shift |
39* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
40* | `~ | ESC |MOUSE1|MOUSE2| | [{ | ]} | ESC | GUI |
41* `---------------------------' `---------------------------'
42* ,-------------. ,-------------.
43* | Ctrl | Alt | | Gui | Ctrl |
44* ,------|------|------| |------+------+------.
45* | | | Home | | PgUp | | |
46* | BkSp | Del |------| |------|Return| Space|
47* | | | End | | PgDn | | |
48* `--------------------' `--------------------'
49*/
50
51
52const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
53[QWERTY] = KEYMAP(
54 KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8,
55 KC_EQL, KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,
56 KC_TAB, KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,
57 KC_FN1 ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
58 KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
59 KC_GRV ,KC_ESC, KC_BTN1,KC_BTN2,
60 KC_LCTL,KC_LALT,
61 KC_HOME,
62 KC_BSPC,KC_DEL ,KC_FN0 ,
63 KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_FN0 ,KC_FN1 ,KC_FN2, KC_NO, RESET,
64 KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS,
65 KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS,
66 KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT,
67 KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT,
68 KC_LBRC,KC_RBRC, KC_ESC, KC_RGUI,
69 KC_RGUI,KC_RCTL,
70 KC_PGUP,
71 KC_PGDN,KC_ENTER ,KC_SPC
72 ),
73[SYMB] = KEYMAP(
74 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
75 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
76 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
77 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
78 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
79 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
80 KC_TRNS, KC_TRNS,
81 KC_TRNS,
82 KC_TRNS, KC_TRNS, KC_TRNS,
83 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0, KC_2,
84 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
85 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
86 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
87 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
88 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
89 KC_TRNS, KC_TRNS,
90 KC_TRNS,
91 KC_TRNS, KC_TRNS, KC_TRNS
92 ),
93/* Keymap: Movement and function layer
94*
95* ,-------------------------------------------------------------------------------------------------------------------.
96* | Caps | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | Tada | bOOT |
97* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
98* | =+ | ! | @ | # | $ | % | | ^ | & | * | ( | ) |MS Fast |
99* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
100* | Tab | | | Up | |PgUp | | MwU |MS_UL | MS_U |MS_UR | | Ms Norm|
101* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
102* |MouseFN1| C^A | Left | Down |Right | C^E | | | MS_L |Mouse1| MS_R | |MS Slow |
103* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
104* | | GuiZ | GUI X| GUI C| GUI_V|PgDown| | MWD | MDown|MS Dwn|MS_DR | ? | |
105* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
106* | `~ | ESC | < | > | | { | } | ESC | |
107* `---------------------------' `---------------------------'
108* ,-------------. ,-------------.
109* | Ctrl | Alt | | Gui | Ctrl |
110* ,------|------|------| |------+------+------.
111* | | | Home | | PgUp | | |
112* | BkSp | Del |------| |------|Mouse1|Mouse2|
113* | | | End | | PgDn |LClick|Rclick|
114* `--------------------' `--------------------'
115*/
116
117
118[MOUSE] = KEYMAP(
119 KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
120 KC_TRNS, KC_EXLM ,KC_AT, KC_HASH, KC_DLR ,KC_PERC ,
121 KC_TRNS, KC_NO, KC_NO, KC_UP, KC_NO, KC_PGUP,
122 KC_FN1, LCTL(KC_A),KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_E),
123 KC_TRNS, LGUI(KC_Z),LGUI(KC_X),LGUI(KC_C),LGUI(KC_V),KC_PGDN,
124 KC_TRNS, KC_TRNS, KC_LABK, KC_RABK,
125 KC_TRNS, KC_TRNS,
126 KC_TRNS,
127 KC_TRNS, KC_TRNS, KC_TRNS,
128 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0,RESET,
129 KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_ACL2,
130 KC_WH_U, M(A_MUL), KC_MS_U, M(A_MUR), KC_NO, KC_ACL1,
131 KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_ACL0,
132 KC_WH_D, M(A_MDL), KC_MS_D, M(A_MDR), KC_TRNS, KC_TRNS,
133 KC_LCBR, KC_RCBR, KC_ESC, KC_TRNS,
134 KC_TRNS, KC_TRNS,
135 KC_TRNS,
136 KC_TRNS, KC_BTN1, KC_BTN2
137 ),
138
139
140};
141
142const uint16_t PROGMEM fn_actions[] = {
143 [0] = ACTION_LAYER_TAP_TOGGLE(MOUSE) , // FN1 - Momentary Layer 1 (Symbols)
144 [1] = ACTION_LAYER_TOGGLE(MOUSE) , // FN1 - Momentary Layer 1 (Symbols)
145 [2] = ACTION_LAYER_TAP_TOGGLE(SYMB) , // FN1 - Momentary Layer 1 (Symbols)
146
147
148};
149
150const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
151{
152 // MACRODOWN only works in this function
153 switch(id) {
154 case 0:
155 if (record->event.pressed) {
156 register_code(KC_RSFT);
157 } else {
158 unregister_code(KC_RSFT);
159 }
160 break;
161
162 // from algernon's ErgoDox EZ layout,
163 case A_MUL:
164 if (record->event.pressed) {
165 mousekey_on(KC_MS_UP);
166 mousekey_on(KC_MS_LEFT);
167 } else {
168 mousekey_off(KC_MS_UP);
169 mousekey_off(KC_MS_LEFT);
170 }
171 mousekey_send();
172 break;
173
174 case A_MUR:
175 if (record->event.pressed) {
176 mousekey_on(KC_MS_UP);
177 mousekey_on(KC_MS_RIGHT);
178 } else {
179 mousekey_off(KC_MS_UP);
180 mousekey_off(KC_MS_RIGHT);
181 }
182 mousekey_send();
183 break;
184
185 case A_MDL:
186 if (record->event.pressed) {
187 mousekey_on(KC_MS_DOWN);
188 mousekey_on(KC_MS_LEFT);
189 } else {
190 mousekey_off(KC_MS_DOWN);
191 mousekey_off(KC_MS_LEFT);
192 }
193 mousekey_send();
194 break;
195
196 case A_MDR:
197 if (record->event.pressed) {
198 mousekey_on(KC_MS_DOWN);
199 mousekey_on(KC_MS_RIGHT);
200 } else {
201 mousekey_off(KC_MS_DOWN);
202 mousekey_off(KC_MS_RIGHT);
203 }
204 mousekey_send();
205 break;
206 }
207 return MACRO_NONE;
208};
209
210
211void matrix_init_user(void) {
212
213
214}
215
216void matrix_scan_user(void) {
217 int8_t layer = biton32(layer_state);
218
219 switch (layer) {
220 case 1:
221 all_led_off();
222 break;
223 case 2:
224 if (!(host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK))) {
225 all_led_off();
226 caps_lock_led_on();
227 }
228 break;
229 case 0:
230 all_led_off();
231 num_lock_led_on();
232 break;
233 default:
234 break;
235 }
236
237}
238
239bool process_record_user(uint16_t keycode, keyrecord_t *record) {
240 return true;
241}
242
243void led_set_user(uint8_t usb_led) {
244
245}
diff --git a/keyboards/kinesis/keymaps/programmer/readme.md b/keyboards/kinesis/keymaps/programmer/readme.md
new file mode 100644
index 000000000..76356a687
--- /dev/null
+++ b/keyboards/kinesis/keymaps/programmer/readme.md
@@ -0,0 +1,2 @@
1# a programmer friendly keymap for the kinesis-advantage
2# not really baked yet.
diff --git a/keyboards/kinesis/kinesis.c b/keyboards/kinesis/kinesis.c
new file mode 100644
index 000000000..1fee90e6f
--- /dev/null
+++ b/keyboards/kinesis/kinesis.c
@@ -0,0 +1,106 @@
1#include "kinesis.h"
2
3// begin section origin https://github.com/alvicstep/tmk_keyboard
4
5
6void all_led_off(void)
7{
8 PORTD = 0b11111111;
9}
10
11void all_led_on(void)
12{
13 PORTD = 0b00000000;
14}
15void num_lock_led_on(void)
16{
17 PORTD = 0b11101111;
18}
19
20void caps_lock_led_on(void)
21{
22 PORTD = 0b01111111;
23}
24
25void scroll_lock_led_on(void)
26{
27 PORTD = 0b11011111;
28}
29void keypad_led_on(void)
30{
31 PORTD = 0b10111111;
32}
33void blink_all_leds(void)
34{
35 all_led_on();
36 _delay_ms(500);
37
38 all_led_off();
39 _delay_ms(100);
40
41 caps_lock_led_on();
42 _delay_ms(100);
43
44 num_lock_led_on();
45 _delay_ms(100);
46
47 scroll_lock_led_on();
48 _delay_ms(100);
49
50 keypad_led_on();
51 _delay_ms(100);
52
53 //back
54
55 scroll_lock_led_on();
56 _delay_ms(100);
57
58 num_lock_led_on();
59 _delay_ms(100);
60
61 caps_lock_led_on();
62 _delay_ms(100);
63
64 all_led_off();
65}
66
67// End section origin https://github.com/alvicstep/tmk_keyboard
68
69 void matrix_init_kb(void) {
70 blink_all_leds();
71 matrix_init_user();
72}
73
74
75void matrix_scan_kb(void) {
76 // put your looping keyboard code here
77 // runs every cycle (a lot)
78
79 matrix_scan_user();
80}
81
82bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
83 // put your per-action keyboard code here
84 // runs for every action, just before processing by the firmware
85
86 return process_record_user(keycode, record);
87}
88
89void led_set_kb(uint8_t usb_led) {
90 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
91
92//Copyright 2014 Warren Janssens <warren.janssens@gmail.com>
93 uint8_t leds = 0xF0;
94 if (usb_led & 1 << USB_LED_NUM_LOCK)
95 leds &= ~0x10;
96 if (usb_led & 1 << USB_LED_CAPS_LOCK)
97 leds &= ~0x80;
98 if (usb_led & 1 << USB_LED_SCROLL_LOCK)
99 leds &= ~0x20;
100 PORTD = (PORTD & 0x0F) | leds;
101
102 led_set_user(usb_led);
103
104}
105
106
diff --git a/keyboards/kinesis/kinesis.h b/keyboards/kinesis/kinesis.h
new file mode 100644
index 000000000..c04fbda15
--- /dev/null
+++ b/keyboards/kinesis/kinesis.h
@@ -0,0 +1,67 @@
1#ifndef KINESIS_H
2#define KINESIS_H
3
4#include "quantum.h"
5
6
7// The first section contains all of the arguements
8// The second converts the arguments into a two-dimensional array
9
10#define KEYMAP( \
11 k02,k22,k12,k01,k21,k11,k00,k20,k10, \
12 k80,k70,k60,k50,k40,k30, \
13 k81,k71,k61,k51,k41,k31, \
14 k82,k72,k62,k52,k42,k32, \
15 k83,k73,k63,k53,k43,k33, \
16 k74,k64,k54,k34, \
17 k36,k35, \
18 k55, \
19 k56,k46,k75, \
20 k03,k23,k13,k04,k24,k14,k05,k85,k84, \
21 k94,kA4,kB4,kD4,kE4,kF4, \
22 k95,kA5,kB5,kD5,kE5,kF5, \
23 k96,kA6,kB6,kD6,kE6,kF6, \
24 k97,kA7,kB7,kD7,kE7,kF7, \
25 k93,kB3,kD3,kE3, \
26 k47,k66, \
27 k67, \
28 k87,k76,k86 \
29) { \
30 { k00, k01, k02, k03, k04, k05, KC_NO, KC_NO }, \
31 { k10, k11, k12, k13, k14, KC_NO, KC_NO, KC_NO }, \
32 { k20, k21, k22, k23, k24, KC_NO, KC_NO, KC_NO }, \
33 { k30, k31, k32, k33, k34, k35, k36, KC_NO }, \
34 { k40, k41, k42, k43, KC_NO, KC_NO, k46, k47 }, \
35 { k50, k51, k52, k53, k54, k55, k56, KC_NO }, \
36 { k60, k61, k62, k63, k64, KC_NO, k66, k67 }, \
37 { k70, k71, k72, k73, k74, k75, k76, KC_NO }, \
38 { k80, k81, k82, k83, KC_NO ,KC_NO, k86, k87}, \
39 { KC_NO, KC_NO ,KC_NO ,k93, k94, k95, k96, k97}, \
40 { KC_NO, KC_NO ,KC_NO ,KC_NO, kA4, kA5, kA6, kA7}, \
41 { KC_NO, KC_NO ,KC_NO ,kB3, kB4, kB5, kB6, kB7}, \
42 { KC_NO, KC_NO ,KC_NO ,KC_NO, KC_NO, KC_NO, k84, k85}, \
43 { KC_NO, KC_NO ,KC_NO ,kD3, kD4, kD5, kD6, kD7}, \
44 { KC_NO, KC_NO ,KC_NO ,kE3, kE4, kE5, kE6, kE7}, \
45 { KC_NO, KC_NO ,KC_NO ,KC_NO, kF4, kF5, kF6, kF7} \
46}
47
48
49/* 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 */
50
51/*
52 0 1 2 3 4 5 6 7 8 9 A B C D E F
53 A B C D E F G H I J K L M N O P
54 4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7
55 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
560 PB0 21 c0 f6 f8 f7 5 4 3 2 1 =+
571 PB1 22 c1 f3 f5 f4 t r e w q TAB
582 PB2 23 c2 ESC f2 f1 g f d s a CL
593 PB3 24 c3 f9 f11 f10 b v c x z LS UP DN [{ ]}
604 PB4 25 c4 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_
615 PB5 26 c5 PB PGM KPD LA HM END y u i o p \
626 PB6 27 c6 LC DEL BS RC ENT SP h j k l ;: '"
637 PB7 28 c7 RA PU PD n m ,< .> /? RS
64*/
65
66
67#endif
diff --git a/keyboards/kinesis/matrix.c b/keyboards/kinesis/matrix.c
new file mode 100644
index 000000000..cb0d5ad7d
--- /dev/null
+++ b/keyboards/kinesis/matrix.c
@@ -0,0 +1,228 @@
1/*
2Copyright 2014 Warren Janssens <warren.janssens@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18/*
19 * scan matrix
20 */
21#include <stdint.h>
22#include <stdbool.h>
23#include <avr/io.h>
24#include <util/delay.h>
25#include "action_layer.h"
26#include "print.h"
27#include "debug.h"
28#include "util.h"
29#include "matrix.h"
30#include "led.h"
31#include "config.h"
32
33#ifndef DEBOUNCE
34# define DEBOUNCE 5
35#endif
36static uint8_t debouncing = DEBOUNCE;
37
38/* matrix state(1:on, 0:off) */
39static uint8_t matrix[MATRIX_ROWS];
40static uint8_t matrix_debouncing[MATRIX_ROWS];
41
42static matrix_row_t read_row(uint8_t row);
43static void unselect_rows(void);
44static void select_rows(uint8_t row);
45
46__attribute__ ((weak))
47void matrix_init_quantum(void) {
48 matrix_init_kb();
49}
50
51__attribute__ ((weak))
52void matrix_scan_quantum(void) {
53 matrix_scan_kb();
54}
55
56__attribute__ ((weak))
57void matrix_init_kb(void) {
58 matrix_init_user();
59}
60
61__attribute__ ((weak))
62void matrix_scan_kb(void) {
63 matrix_scan_user();
64}
65
66__attribute__ ((weak))
67void matrix_init_user(void) {
68}
69
70__attribute__ ((weak))
71void matrix_scan_user(void) {
72}
73
74inline
75uint8_t matrix_rows(void)
76{
77 return MATRIX_ROWS;
78}
79
80
81inline
82uint8_t matrix_cols(void)
83{
84 return MATRIX_COLS;
85}
86
87void matrix_init(void)
88{
89 //debug_enable = true;
90
91 //dprint("matrix_init"); dprintln();
92 // output high (leds)
93 DDRD = 0xFF;
94 PORTD = 0xFF;
95
96 // output low (multiplexers)
97 DDRF = 0xFF;
98 PORTF = 0x00;
99
100 // input with pullup (matrix)
101 DDRB = 0x00;
102 PORTB = 0xFF;
103
104 // input with pullup (program and keypad buttons)
105 DDRC = 0x00;
106 PORTC = 0xFF;
107
108 // initialize row and col
109 unselect_rows();
110
111 // initialize matrix state: all keys off
112 for (uint8_t i=0; i < MATRIX_ROWS; i++) {
113 matrix[i] = 0;
114 matrix_debouncing[i] = 0;
115 }
116
117}
118
119uint8_t matrix_scan(void)
120{
121
122 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
123 select_rows(i);
124 uint8_t row = read_row(i);
125 if (matrix_debouncing[i] != row) {
126 matrix_debouncing[i] = row;
127 if (debouncing) {
128 debug("bounce!: "); debug_hex(debouncing); debug("\n");
129 }
130 debouncing = DEBOUNCE;
131 }
132 unselect_rows();
133 }
134
135 if (debouncing) {
136 if (--debouncing) {
137 _delay_ms(1);
138 } else {
139 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
140 matrix[i] = matrix_debouncing[i];
141 }
142 }
143 }
144 matrix_scan_quantum();
145 return 1;
146}
147
148bool matrix_is_modified(void)
149{
150 if (debouncing) return false;
151 return true;
152}
153
154inline
155bool matrix_is_on(uint8_t row, uint8_t col)
156{
157 return (matrix[row] & ((matrix_row_t)1<<col));
158}
159
160inline
161matrix_row_t matrix_get_row(uint8_t row)
162{
163 return matrix[row];
164}
165
166void matrix_print(void)
167{
168 print("\nr/c 01234567\n");
169 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
170 phex(row); print(": ");
171 pbin_reverse(matrix_get_row(row));
172 print("\n");
173 }
174}
175
176uint8_t matrix_key_count(void)
177{
178 uint8_t count = 0;
179 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
180 count += bitpop16(matrix[i]);
181 }
182 return count;
183}
184
185static matrix_row_t read_row(uint8_t row)
186{
187 _delay_us(30); // without this wait read unstable value.
188
189 //keypad and program buttons
190 if (row == 12)
191 {
192 return ~(PINC | 0b00111111);
193 }
194 return ~PINB;
195}
196
197static void unselect_rows(void)
198{
199 // set A,B,C,G to 0 (F4 - F7)
200 PORTF &= 0x0F;
201}
202
203static void select_rows(uint8_t row)
204{
205 // set A,B,C,G to row value
206 PORTF |= row << 4;
207}
208
209
210/* Row pin configuration
211PF0 A
212PF1 B
213PF2 C
214PF3 G 0 = U4, 1 = U5
215
216 4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7
217 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16
218PB0 21 c1 f6 f8 f7 5 4 3 2 1 =+
219PB1 22 c2 f3 f5 f4 t r e w q TAB
220PB2 23 c3 ESC f2 f1 g f d s a CL
221PB3 24 c4 f9 f11 f10 b v c x z LS UP DN [{ ]}
222PB4 25 c5 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_
223PB5 26 c6 PB PGM KPD y u i o p \
224PB6 27 c7 LC DL BS RC EN SP h j k l ;: '"
225PB7 28 c8 RA PU PD n m ,< .> /? RS
226 */
227
228
diff --git a/keyboards/kinesis/readme.md b/keyboards/kinesis/readme.md
new file mode 100644
index 000000000..a990f9cb9
--- /dev/null
+++ b/keyboards/kinesis/readme.md
@@ -0,0 +1,42 @@
1kinesis-advantage keyboard firmware
2======================
3
4## Kinesis specific information
5This is a port of https://github.com/alvicstep/tmk_keyboard,
6which is a fork of https://github.com/wjanssens/tmk_keyboard,
7which is based on work from https://github.com/chrisandreae/keyboard-firmware
8
9If you replace the kinesis CPU as described in the doc folder, then this code should allow you to use QMK.
10I've tested with a Teensy 2++, remember to change the CPU if you use a 32u4 instead.
11
12Not yet implemented:
13- Kinesis EEProm reading or writing
14- Audio - this should be simple if we remove hardcoded pins from audio.h and switch to E7
15
16
17
18## Quantum MK Firmware
19
20For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
21
22## Building
23
24Download 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.
25
26Depending on which keymap you would like to use, you will have to compile slightly differently.
27
28### Default
29
30To build with the default keymap, simply run `make`.
31
32### Other Keymaps
33
34Several 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.
35
36To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
37
38```
39$ make keymap=[default|jack|<name>]
40```
41
42Keymaps 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 000000000..190f738fa
--- /dev/null
+++ b/keyboards/phantom/readme.md
@@ -0,0 +1,4 @@
1Phantom keyboard firmware
2======================
3
4TODO: to be updated.
diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c
index 9a957f7ee..78b4997a8 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] = {
102 * |------+------+------+------+------+-------------+------+------+------+------+------| 102 * |------+------+------+------+------+-------------+------+------+------+------+------|
103 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | 103 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
104 * |------+------+------+------+------+------|------+------+------+------+------+------| 104 * |------+------+------+------+------+------|------+------+------+------+------+------|
105 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | 105 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
106 * |------+------+------+------+------+------+------+------+------+------+------+------| 106 * |------+------+------+------+------+------+------+------+------+------+------+------|
107 * | | | | | | | | Next | Vol- | Vol+ | Play | 107 * | | | | | | | | Next | Vol- | Vol+ | Play |
108 * `-----------------------------------------------------------------------------------' 108 * `-----------------------------------------------------------------------------------'
@@ -123,7 +123,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
123 * |------+------+------+------+------+-------------+------+------+------+------+------| 123 * |------+------+------+------+------+-------------+------+------+------+------+------|
124 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | 124 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
125 * |------+------+------+------+------+------|------+------+------+------+------+------| 125 * |------+------+------+------+------+------|------+------+------+------+------+------|
126 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | 126 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
127 * |------+------+------+------+------+------+------+------+------+------+------+------| 127 * |------+------+------+------+------+------+------+------+------+------+------+------|
128 * | | | | | | | | Next | Vol- | Vol+ | Play | 128 * | | | | | | | | Next | Vol- | Vol+ | Play |
129 * `-----------------------------------------------------------------------------------' 129 * `-----------------------------------------------------------------------------------'
@@ -142,9 +142,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
142 * |------+------+------+------+------+------+------+------+------+------+------+------| 142 * |------+------+------+------+------+------+------+------+------+------+------+------|
143 * | | Reset| | | | | | | | | | Del | 143 * | | Reset| | | | | | | | | | Del |
144 * |------+------+------+------+------+-------------+------+------+------+------+------| 144 * |------+------+------+------+------+-------------+------+------+------+------+------|
145 * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | 145 * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
146 * |------+------+------+------+------+------|------+------+------+------+------+------| 146 * |------+------+------+------+------+------|------+------+------+------+------+------|
147 * | |Voice-|Voice+|Musoff|Mus on| | | | | | | | 147 * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
148 * |------+------+------+------+------+------+------+------+------+------+------+------| 148 * |------+------+------+------+------+------+------+------+------+------+------+------|
149 * | | | | | | | | | | | | 149 * | | | | | | | | | | | |
150 * `-----------------------------------------------------------------------------------' 150 * `-----------------------------------------------------------------------------------'
@@ -277,4 +277,4 @@ void music_scale_user(void)
277 PLAY_NOTE_ARRAY(music_scale, false, 0); 277 PLAY_NOTE_ARRAY(music_scale, false, 0);
278} 278}
279 279
280#endif \ No newline at end of file 280#endif
diff --git a/keyboards/satan/Makefile b/keyboards/satan/Makefile
index 184b5ac37..a0879fc9c 100644
--- a/keyboards/satan/Makefile
+++ b/keyboards/satan/Makefile
@@ -52,7 +52,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
52# Build Options 52# Build Options
53# comment out to disable the options. 53# comment out to disable the options.
54# 54#
55BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) 55BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
56MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) 56MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
57EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) 57EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
58CONSOLE_ENABLE ?= yes # Console for debug(+400) 58CONSOLE_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 000000000..2a7ff2779
--- /dev/null
+++ b/keyboards/satan/keymaps/sethbc/Makefile
@@ -0,0 +1,21 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = yes # Commands for debug and configuration
10NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18
19ifndef QUANTUM_DIR
20 include ../../../../Makefile
21endif
diff --git a/keyboards/satan/readme.md b/keyboards/satan/readme.md
new file mode 100644
index 000000000..aa301f020
--- /dev/null
+++ b/keyboards/satan/readme.md
@@ -0,0 +1,4 @@
1Clueboard keyboard firmware
2======================
3
4TODO: to be updated.
diff --git a/quantum/keymap_extras/keymap_dvorak.h b/quantum/keymap_extras/keymap_dvorak.h
index e855056e8..17f205977 100644
--- a/quantum/keymap_extras/keymap_dvorak.h
+++ b/quantum/keymap_extras/keymap_dvorak.h
@@ -18,18 +18,19 @@
18#define DV_LBRC KC_MINS 18#define DV_LBRC KC_MINS
19#define DV_RBRC KC_EQL 19#define DV_RBRC KC_EQL
20 20
21#define DV_QUOT KC_Q 21#define DV_QUOT KC_Q
22#define DV_COMM KC_W 22#define DV_COMM KC_W
23#define DV_DOT KC_E 23#define DV_DOT KC_E
24#define DV_P KC_R 24#define DV_P KC_R
25#define DV_Y KC_T 25#define DV_Y KC_T
26#define DV_F KC_Y 26#define DV_F KC_Y
27#define DV_G KC_U 27#define DV_G KC_U
28#define DV_C KC_I 28#define DV_C KC_I
29#define DV_R KC_O 29#define DV_R KC_O
30#define DV_L KC_P 30#define DV_L KC_P
31#define DV_SLSH KC_LBRC 31#define DV_SLSH KC_LBRC
32#define DV_EQL KC_RBRC 32#define DV_EQL KC_RBRC
33#define DV_BSLS KC_BSLS
33 34
34#define DV_A KC_A 35#define DV_A KC_A
35#define DV_O KC_S 36#define DV_O KC_S
@@ -68,7 +69,13 @@
68#define DV_RPRN LSFT(DV_0) 69#define DV_RPRN LSFT(DV_0)
69#define DV_LCBR LSFT(DV_LBRC) 70#define DV_LCBR LSFT(DV_LBRC)
70#define DV_RCBR LSFT(DV_RBRC) 71#define DV_RCBR LSFT(DV_RBRC)
71#define DV_UNDS LSFT(DV_MINS) 72
72#define DV_PLUS LSFT(DV_EQL) 73#define DV_QUES LSFT(DV_SLSH)
74#define DV_PLUS LSFT(DV_EQL)
75#define DV_PIPE LSFT(DV_BSLS)
76
77#define DV_UNDS LSFT(DV_MINS)
78
79#define DV_COLN LSFT(DV_SCLN)
73 80
74#endif 81#endif
diff --git a/quantum/keymap_extras/keymap_fr_ch.h b/quantum/keymap_extras/keymap_fr_ch.h
index 3fd971357..87d4bb24c 100644
--- a/quantum/keymap_extras/keymap_fr_ch.h
+++ b/quantum/keymap_extras/keymap_fr_ch.h
@@ -4,7 +4,7 @@
4#include "keymap.h" 4#include "keymap.h"
5 5
6// Alt gr 6// Alt gr
7#define ALGR(kc) kc | 0x1400 7#define ALGR(kc) RALT(kc)
8#define FR_CH_ALGR KC_RALT 8#define FR_CH_ALGR KC_RALT
9 9
10// normal characters 10// normal characters
diff --git a/quantum/keymap_extras/keymap_french.h b/quantum/keymap_extras/keymap_french.h
index 2a44c80b1..834c69650 100644
--- a/quantum/keymap_extras/keymap_french.h
+++ b/quantum/keymap_extras/keymap_french.h
@@ -4,7 +4,7 @@
4#include "keymap.h" 4#include "keymap.h"
5 5
6// Alt gr 6// Alt gr
7#define ALGR(kc) kc | 0x1400 7#define ALGR(kc) RALT(kc)
8#define NO_ALGR KC_RALT 8#define NO_ALGR KC_RALT
9 9
10// Normal characters 10// Normal characters
@@ -80,4 +80,4 @@
80#define FR_EURO ALGR(KC_E) 80#define FR_EURO ALGR(KC_E)
81#define FR_BULT ALGR(FR_DLR) 81#define FR_BULT ALGR(FR_DLR)
82 82
83#endif \ No newline at end of file 83#endif
diff --git a/quantum/keymap_extras/keymap_german.h b/quantum/keymap_extras/keymap_german.h
index 3f9ae8bad..7e2e0ed44 100644
--- a/quantum/keymap_extras/keymap_german.h
+++ b/quantum/keymap_extras/keymap_german.h
@@ -4,7 +4,7 @@
4#include "keymap.h" 4#include "keymap.h"
5 5
6// Alt gr 6// Alt gr
7#define ALGR(kc) kc | 0x1400 7#define ALGR(kc) RALT(kc)
8#define DE_ALGR KC_RALT 8#define DE_ALGR KC_RALT
9 9
10// normal characters 10// normal characters
diff --git a/quantum/keymap_extras/keymap_german_ch.h b/quantum/keymap_extras/keymap_german_ch.h
index 6a782bcd7..b66d582a4 100644
--- a/quantum/keymap_extras/keymap_german_ch.h
+++ b/quantum/keymap_extras/keymap_german_ch.h
@@ -4,7 +4,7 @@
4#include "keymap.h" 4#include "keymap.h"
5 5
6// Alt gr 6// Alt gr
7#define ALGR(kc) kc | 0x1400 7#define ALGR(kc) RALT(kc)
8#define CH_ALGR KC_RALT 8#define CH_ALGR KC_RALT
9 9
10// normal characters 10// normal characters
diff --git a/quantum/keymap_extras/keymap_nordic.h b/quantum/keymap_extras/keymap_nordic.h
index 3acb8b698..f8cf4e2e4 100644
--- a/quantum/keymap_extras/keymap_nordic.h
+++ b/quantum/keymap_extras/keymap_nordic.h
@@ -4,7 +4,7 @@
4#include "keymap.h" 4#include "keymap.h"
5 5
6// Alt gr 6// Alt gr
7#define ALGR(kc) kc | 0x1400 7#define ALGR(kc) RALT(kc)
8#define NO_ALGR KC_RALT 8#define NO_ALGR KC_RALT
9 9
10// Normal characters 10// Normal characters
diff --git a/quantum/keymap_extras/keymap_spanish.h b/quantum/keymap_extras/keymap_spanish.h
index af76e39fc..4ba568af2 100644
--- a/quantum/keymap_extras/keymap_spanish.h
+++ b/quantum/keymap_extras/keymap_spanish.h
@@ -4,7 +4,7 @@
4#include "keymap.h" 4#include "keymap.h"
5 5
6// Alt gr 6// Alt gr
7#define ALGR(kc) kc | 0x1400 7#define ALGR(kc) RALT(kc)
8#define NO_ALGR KC_RALT 8#define NO_ALGR KC_RALT
9 9
10// Normal characters 10// Normal characters
diff --git a/quantum/keymap_extras/keymap_uk.h b/quantum/keymap_extras/keymap_uk.h
index 5c5d95179..00c87afc3 100644
--- a/quantum/keymap_extras/keymap_uk.h
+++ b/quantum/keymap_extras/keymap_uk.h
@@ -4,7 +4,7 @@
4#include "keymap.h" 4#include "keymap.h"
5 5
6// Alt gr 6// Alt gr
7#define ALGR(kc) kc | 0x1400 7#define ALGR(kc) RALT(kc)
8#define NO_ALGR KC_RALT 8#define NO_ALGR KC_RALT
9 9
10// Normal characters 10// Normal characters
@@ -33,4 +33,4 @@
33 33
34#define UK_AACT ALGR(KC_A) 34#define UK_AACT ALGR(KC_A)
35 35
36#endif \ No newline at end of file 36#endif
diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c
index 9b172e1b6..b9b836df2 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,
22static void _process_tap_dance_action_fn (qk_tap_dance_state_t *state, 22static void _process_tap_dance_action_fn (qk_tap_dance_state_t *state,
23 qk_tap_dance_user_fn_t fn) 23 qk_tap_dance_user_fn_t fn)
24{ 24{
25 fn(state); 25 if (fn) {
26 fn(state);
27 }
28}
29
30void process_tap_dance_action_on_each_tap (uint16_t keycode)
31{
32 uint16_t idx = keycode - QK_TAP_DANCE;
33 qk_tap_dance_action_t action;
34
35 action = tap_dance_actions[idx];
36
37 switch (action.type) {
38 case QK_TAP_DANCE_TYPE_FN:
39 _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn.on_each_tap);
40 break;
41
42 default:
43 break;
44 }
26} 45}
27 46
28void process_tap_dance_action (uint16_t keycode) 47void process_tap_dance_action_on_dance_finished (uint16_t keycode)
29{ 48{
30 uint16_t idx = keycode - QK_TAP_DANCE; 49 uint16_t idx = keycode - QK_TAP_DANCE;
31 qk_tap_dance_action_t action; 50 qk_tap_dance_action_t action;
@@ -38,7 +57,7 @@ void process_tap_dance_action (uint16_t keycode)
38 action.pair.kc1, action.pair.kc2); 57 action.pair.kc1, action.pair.kc2);
39 break; 58 break;
40 case QK_TAP_DANCE_TYPE_FN: 59 case QK_TAP_DANCE_TYPE_FN:
41 _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn); 60 _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn.on_dance_finished);
42 break; 61 break;
43 62
44 default: 63 default:
@@ -51,8 +70,9 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
51 70
52 switch(keycode) { 71 switch(keycode) {
53 case QK_TAP_DANCE ... QK_TAP_DANCE_MAX: 72 case QK_TAP_DANCE ... QK_TAP_DANCE_MAX:
73 process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode);
54 if (qk_tap_dance_state.keycode && qk_tap_dance_state.keycode != keycode) { 74 if (qk_tap_dance_state.keycode && qk_tap_dance_state.keycode != keycode) {
55 process_tap_dance_action (qk_tap_dance_state.keycode); 75 process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode);
56 } else { 76 } else {
57 r = false; 77 r = false;
58 } 78 }
@@ -66,8 +86,9 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
66 86
67 default: 87 default:
68 if (qk_tap_dance_state.keycode) { 88 if (qk_tap_dance_state.keycode) {
69 process_tap_dance_action (qk_tap_dance_state.keycode); 89 // if we are here, the tap dance was interrupted by a different key
70 90 process_tap_dance_action_on_each_tap (qk_tap_dance_state.keycode);
91 process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode);
71 reset_tap_dance (&qk_tap_dance_state); 92 reset_tap_dance (&qk_tap_dance_state);
72 } 93 }
73 break; 94 break;
@@ -78,13 +99,28 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
78 99
79void matrix_scan_tap_dance () { 100void matrix_scan_tap_dance () {
80 if (qk_tap_dance_state.keycode && timer_elapsed (qk_tap_dance_state.timer) > TAPPING_TERM) { 101 if (qk_tap_dance_state.keycode && timer_elapsed (qk_tap_dance_state.timer) > TAPPING_TERM) {
81 process_tap_dance_action (qk_tap_dance_state.keycode); 102 // if we are here, the tap dance was timed out
82 103 process_tap_dance_action_on_dance_finished (qk_tap_dance_state.keycode);
83 reset_tap_dance (&qk_tap_dance_state); 104 reset_tap_dance (&qk_tap_dance_state);
84 } 105 }
85} 106}
86 107
87void reset_tap_dance (qk_tap_dance_state_t *state) { 108void reset_tap_dance (qk_tap_dance_state_t *state) {
109 uint16_t idx = state->keycode - QK_TAP_DANCE;
110 qk_tap_dance_action_t action;
111
112 action = tap_dance_actions[idx];
113 switch (action.type) {
114 case QK_TAP_DANCE_TYPE_FN:
115 if (action.fn.on_reset) {
116 action.fn.on_reset(state);
117 }
118 break;
119
120 default:
121 break;
122 }
123
88 state->keycode = 0; 124 state->keycode = 0;
89 state->count = 0; 125 state->count = 0;
90} 126}
diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h
index b9d7c7fcf..7b820584a 100644
--- a/quantum/process_keycode/process_tap_dance.h
+++ b/quantum/process_keycode/process_tap_dance.h
@@ -31,18 +31,27 @@ typedef struct
31 uint16_t kc1; 31 uint16_t kc1;
32 uint16_t kc2; 32 uint16_t kc2;
33 } pair; 33 } pair;
34 qk_tap_dance_user_fn_t fn; 34 struct {
35 qk_tap_dance_user_fn_t on_each_tap;
36 qk_tap_dance_user_fn_t on_dance_finished;
37 qk_tap_dance_user_fn_t on_reset;
38 } fn;
35 }; 39 };
36} qk_tap_dance_action_t; 40} qk_tap_dance_action_t;
37 41
38#define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) { \ 42#define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) { \
39 .type = QK_TAP_DANCE_TYPE_PAIR, \ 43 .type = QK_TAP_DANCE_TYPE_PAIR, \
40 .pair = { kc1, kc2 } \ 44 .pair = { kc1, kc2 } \
41 } 45 }
42 46
43#define ACTION_TAP_DANCE_FN(user_fn) { \ 47#define ACTION_TAP_DANCE_FN(user_fn) { \
44 .type = QK_TAP_DANCE_TYPE_FN, \ 48 .type = QK_TAP_DANCE_TYPE_FN, \
45 .fn = user_fn \ 49 .fn = { NULL, user_fn, NULL } \
50 }
51
52#define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset) { \
53 .type = QK_TAP_DANCE_TYPE_FN, \
54 .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_reset } \
46 } 55 }
47 56
48extern const qk_tap_dance_action_t tap_dance_actions[]; 57extern const qk_tap_dance_action_t tap_dance_actions[];
diff --git a/readme.md b/readme.md
index e0dcd5608..ed3da43bd 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
35* The list of possible keycodes you can use in your keymap is actually spread out in a few different places: 35* The list of possible keycodes you can use in your keymap is actually spread out in a few different places:
36 * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes. 36 * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes.
37 * [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. 37 * [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.
38* The [TMK documentation](doc/TMK_readme.md). QMK is based on TMK, and this explains how it works internally. 38* The [TMK documentation](doc/TMK_README.md). QMK is based on TMK, and this explains how it works internally.
39 39
40# Getting started 40# Getting started
41 41
@@ -75,8 +75,23 @@ Debian/Ubuntu example:
75 sudo apt-get update 75 sudo apt-get update
76 sudo apt-get install gcc-avr avr-libc dfu-programmer 76 sudo apt-get install gcc-avr avr-libc dfu-programmer
77 77
78### Docker
79
80If 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:
81
82```bash
83# You'll run this every time you want to build a keymap
84# modify the keymap and keyboard assigment to compile what you want
85# defaults are ergodox_ez/default
86
87docker run -e keymap=gwen -e keyboard=ergodox_ez --rm -v $('pwd'):/qmk:rw edasque/qmk_firmware
88
89```
90
91This will compile the targetted keyboard/keymap and leave it in your QMK directory for you to flash.
92
78### Vagrant 93### Vagrant
79If 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). 94If 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).
80 95
81## Verify Your Installation 96## Verify Your Installation
821. 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. 971. 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:
97 112
98The `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)). 113The `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)).
99 114
100By 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>/. 115By 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.
101 116
102Below are some definitions that will be useful: 117Below are some definitions that will be useful:
103 118
@@ -152,7 +167,7 @@ This allows you to use the system and audio control key codes.
152 167
153`CONSOLE_ENABLE` 168`CONSOLE_ENABLE`
154 169
155TODO 170This 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.
156 171
157`COMMAND_ENABLE` 172`COMMAND_ENABLE`
158 173
@@ -372,10 +387,11 @@ But lets start with how to use it, first!
372 387
373First, 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. 388First, 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.
374 389
375This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are two possible options: 390This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are three possible options:
376 391
377* `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise. 392* `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise.
378* `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the current state of the tap-dance action. 393* `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the final tap count of the tap dance action.
394* `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.
379 395
380The 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. 396The 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.
381 397
@@ -399,7 +415,8 @@ In the end, let's see a full example!
399enum { 415enum {
400 CT_SE = 0, 416 CT_SE = 0,
401 CT_CLN, 417 CT_CLN,
402 CT_EGG 418 CT_EGG,
419 CT_FLSH,
403}; 420};
404 421
405/* Have the above three on the keymap, TD(CT_SE), etc... */ 422/* Have the above three on the keymap, TD(CT_SE), etc... */
@@ -424,10 +441,50 @@ void dance_egg (qk_tap_dance_state_t *state) {
424 } 441 }
425} 442}
426 443
444// on each tap, light up one led, from right to left
445// on the forth tap, turn them off from right to left
446void dance_flsh_each(qk_tap_dance_state_t *state) {
447 switch (state->count) {
448 case 1:
449 ergodox_right_led_3_on();
450 break;
451 case 2:
452 ergodox_right_led_2_on();
453 break;
454 case 3:
455 ergodox_right_led_1_on();
456 break;
457 case 4:
458 ergodox_right_led_3_off();
459 _delay_ms(50);
460 ergodox_right_led_2_off();
461 _delay_ms(50);
462 ergodox_right_led_1_off();
463 }
464}
465
466// on the fourth tap, set the keyboard on flash state
467void dance_flsh_finished(qk_tap_dance_state_t *state) {
468 if (state->count >= 4) {
469 reset_keyboard();
470 reset_tap_dance(state);
471 }
472}
473
474// if the flash state didnt happen, then turn off leds, left to right
475void dance_flsh_reset(qk_tap_dance_state_t *state) {
476 ergodox_right_led_1_off();
477 _delay_ms(50);
478 ergodox_right_led_2_off();
479 _delay_ms(50);
480 ergodox_right_led_3_off();
481}
482
427const qk_tap_dance_action_t tap_dance_actions[] = { 483const qk_tap_dance_action_t tap_dance_actions[] = {
428 [CT_SE] = ACTION_TAP_DANCE_DOUBLE (KC_SPC, KC_ENT) 484 [CT_SE] = ACTION_TAP_DANCE_DOUBLE (KC_SPC, KC_ENT)
429 ,[CT_CLN] = ACTION_TAP_DANCE_FN (dance_cln) 485 ,[CT_CLN] = ACTION_TAP_DANCE_FN (dance_cln)
430 ,[CT_EGG] = ACTION_TAP_DANCE_FN (dance_egg) 486 ,[CT_EGG] = ACTION_TAP_DANCE_FN (dance_egg)
487 ,[CT_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED (dance_flsh_each, dance_flsh_finished, dance_flsh_reset)
431}; 488};
432``` 489```
433 490
@@ -732,7 +789,7 @@ float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
732float goodbye[][2] = SONG(GOODBYE_SOUND); 789float goodbye[][2] = SONG(GOODBYE_SOUND);
733``` 790```
734 791
735Wherein 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. 792Wherein 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.
736 793
737So 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: 794So 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:
738 795
@@ -774,7 +831,7 @@ AutoHotkey inserts the Text right of `Send, ` when this combination is pressed.
774 831
775## RGB Under Glow Mod 832## RGB Under Glow Mod
776 833
777![Planck with RGB Underglow](https://raw.githubusercontent.com/yangliu/qmk_firmware/planck-rgb/keyboards/planck/keymaps/yang/planck-with-rgb-underglow.jpg) 834![Planck with RGB Underglow](https://raw.githubusercontent.com/jackhumbert/qmk_firmware/master/keyboards/planck/keymaps/yang/planck-with-rgb-underglow.jpg)
778 835
779Here is a quick demo on Youtube (with NPKC KC60) (https://www.youtube.com/watch?v=VKrpPAHlisY). 836Here is a quick demo on Youtube (with NPKC KC60) (https://www.youtube.com/watch?v=VKrpPAHlisY).
780 837
@@ -799,7 +856,7 @@ The firmware supports 5 different light effects, and the color (hue, saturation,
799 856
800### WS2812 Wiring 857### WS2812 Wiring
801 858
802![WS2812 Wiring](https://raw.githubusercontent.com/yangliu/qmk_firmware/planck-rgb/keyboards/planck/keymaps/yang/WS2812-wiring.jpg) 859![WS2812 Wiring](https://raw.githubusercontent.com/jackhumbert/qmk_firmware/master/keyboards/planck/keymaps/yang/WS2812-wiring.jpg)
803 860
804Please 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. 861Please 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.
805 862
diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk
index 3bf2b34f8..6c03e1650 100644
--- a/tmk_core/avr.mk
+++ b/tmk_core/avr.mk
@@ -107,6 +107,10 @@ flip: $(BUILD_DIR)/$(TARGET).hex
107 batchisp -hardware usb -device $(MCU) -operation start reset 0 107 batchisp -hardware usb -device $(MCU) -operation start reset 0
108 108
109dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter 109dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter
110 until dfu-programmer $(MCU) get bootloader-version; do\
111 echo "Error: Bootloader not found. Trying again in 5s." ;\
112 sleep 5 ;\
113 done
110ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) 114ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1)))
111 dfu-programmer $(MCU) erase --force 115 dfu-programmer $(MCU) erase --force
112else 116else
diff --git a/tmk_core/protocol/lufa/descriptor.c b/tmk_core/protocol/lufa/descriptor.c
index 850a20fdb..539a58d66 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[] =
140 HID_RI_USAGE(8, 0x80), /* System Control */ 140 HID_RI_USAGE(8, 0x80), /* System Control */
141 HID_RI_COLLECTION(8, 0x01), /* Application */ 141 HID_RI_COLLECTION(8, 0x01), /* Application */
142 HID_RI_REPORT_ID(8, REPORT_ID_SYSTEM), 142 HID_RI_REPORT_ID(8, REPORT_ID_SYSTEM),
143 HID_RI_LOGICAL_MINIMUM(16, 0x0001), 143 HID_RI_LOGICAL_MINIMUM(16, 0x0081),
144 HID_RI_LOGICAL_MAXIMUM(16, 0x00B7), 144 HID_RI_LOGICAL_MAXIMUM(16, 0x00B7),
145 HID_RI_USAGE_MINIMUM(16, 0x0001), /* System Power Down */ 145 HID_RI_USAGE_MINIMUM(16, 0x0081), /* System Power Down */
146 HID_RI_USAGE_MAXIMUM(16, 0x00B7), /* System Display LCD Autoscale */ 146 HID_RI_USAGE_MAXIMUM(16, 0x00B7), /* System Display LCD Autoscale */
147 HID_RI_REPORT_SIZE(8, 16), 147 HID_RI_REPORT_SIZE(8, 16),
148 HID_RI_REPORT_COUNT(8, 1), 148 HID_RI_REPORT_COUNT(8, 1),