summaryrefslogtreecommitdiffstats
path: root/keyboards/kinesis
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/kinesis')
-rw-r--r--keyboards/kinesis/Makefile4
-rw-r--r--keyboards/kinesis/alvicstep/Makefile3
-rw-r--r--keyboards/kinesis/alvicstep/alvicstep.c105
-rw-r--r--keyboards/kinesis/alvicstep/alvicstep.h67
-rw-r--r--keyboards/kinesis/alvicstep/config.h35
-rw-r--r--keyboards/kinesis/alvicstep/docs/kicad/kinesis-cache.lib (renamed from keyboards/kinesis/docs/kicad/kinesis-cache.lib)0
-rw-r--r--keyboards/kinesis/alvicstep/docs/kicad/kinesis.pro (renamed from keyboards/kinesis/docs/kicad/kinesis.pro)0
-rw-r--r--keyboards/kinesis/alvicstep/docs/kicad/kinesis.sch (renamed from keyboards/kinesis/docs/kicad/kinesis.sch)0
-rw-r--r--keyboards/kinesis/alvicstep/docs/photos/P1050573.jpg (renamed from keyboards/kinesis/docs/photos/P1050573.jpg)bin177711 -> 177711 bytes
-rw-r--r--keyboards/kinesis/alvicstep/docs/photos/P1050574.jpg (renamed from keyboards/kinesis/docs/photos/P1050574.jpg)bin343978 -> 343978 bytes
-rw-r--r--keyboards/kinesis/alvicstep/docs/photos/P1050575.jpg (renamed from keyboards/kinesis/docs/photos/P1050575.jpg)bin266771 -> 266771 bytes
-rw-r--r--keyboards/kinesis/alvicstep/docs/readme.txt (renamed from keyboards/kinesis/docs/readme.txt)0
-rw-r--r--keyboards/kinesis/alvicstep/docs/schematic.png (renamed from keyboards/kinesis/docs/schematic.png)bin175014 -> 175014 bytes
-rw-r--r--keyboards/kinesis/alvicstep/matrix.c (renamed from keyboards/kinesis/matrix.c)0
-rw-r--r--keyboards/kinesis/alvicstep/readme.md46
-rw-r--r--keyboards/kinesis/alvicstep/rules.mk10
-rw-r--r--keyboards/kinesis/config.h49
-rw-r--r--keyboards/kinesis/keymaps/default/keymap.c32
-rw-r--r--keyboards/kinesis/keymaps/dvorak/Makefile (renamed from keyboards/kinesis/keymaps/programmer/Makefile)0
-rw-r--r--keyboards/kinesis/keymaps/dvorak/config.h (renamed from keyboards/kinesis/keymaps/programmer/config.h)0
-rw-r--r--keyboards/kinesis/keymaps/dvorak/keymap.c93
-rw-r--r--keyboards/kinesis/keymaps/milestogo/Makefile21
-rw-r--r--keyboards/kinesis/keymaps/milestogo/config.h8
-rw-r--r--keyboards/kinesis/keymaps/milestogo/keymap.c384
-rw-r--r--keyboards/kinesis/keymaps/milestogo/readme.md (renamed from keyboards/kinesis/keymaps/programmer/readme.md)0
-rw-r--r--keyboards/kinesis/keymaps/programmer/keymap.c245
-rw-r--r--keyboards/kinesis/kinesis.c105
-rw-r--r--keyboards/kinesis/kinesis.h70
-rw-r--r--keyboards/kinesis/readme.md42
-rw-r--r--keyboards/kinesis/rules.mk4
-rw-r--r--keyboards/kinesis/stapelberg/Makefile3
-rw-r--r--keyboards/kinesis/stapelberg/config.h50
-rw-r--r--keyboards/kinesis/stapelberg/images/controller_board.jpgbin0 -> 129312 bytes
-rw-r--r--keyboards/kinesis/stapelberg/images/exterior_reset.jpgbin0 -> 97794 bytes
-rw-r--r--keyboards/kinesis/stapelberg/images/teensy_detail.jpgbin0 -> 119748 bytes
-rw-r--r--keyboards/kinesis/stapelberg/readme.md55
-rw-r--r--keyboards/kinesis/stapelberg/rules.mk10
-rw-r--r--keyboards/kinesis/stapelberg/stapelberg.c28
-rw-r--r--keyboards/kinesis/stapelberg/stapelberg.h72
39 files changed, 1028 insertions, 513 deletions
diff --git a/keyboards/kinesis/Makefile b/keyboards/kinesis/Makefile
index 4e2a6f00f..fbf05ca4a 100644
--- a/keyboards/kinesis/Makefile
+++ b/keyboards/kinesis/Makefile
@@ -1,3 +1,5 @@
+SUBPROJECT_DEFAULT = alvicstep
+
ifndef MAKEFILE_INCLUDED
include ../../Makefile
-endif \ No newline at end of file
+endif
diff --git a/keyboards/kinesis/alvicstep/Makefile b/keyboards/kinesis/alvicstep/Makefile
new file mode 100644
index 000000000..bd09e5885
--- /dev/null
+++ b/keyboards/kinesis/alvicstep/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../../Makefile
+endif
diff --git a/keyboards/kinesis/alvicstep/alvicstep.c b/keyboards/kinesis/alvicstep/alvicstep.c
new file mode 100644
index 000000000..fba9f5136
--- /dev/null
+++ b/keyboards/kinesis/alvicstep/alvicstep.c
@@ -0,0 +1,105 @@
+#include "kinesis.h"
+
+// begin section origin https://github.com/alvicstep/tmk_keyboard
+
+void all_led_off(void)
+{
+ PORTD = 0b11111111;
+}
+
+void all_led_on(void)
+{
+ PORTD = 0b00000000;
+}
+void num_lock_led_on(void)
+{
+ PORTD = 0b11101111;
+}
+
+void caps_lock_led_on(void)
+{
+ PORTD = 0b01111111;
+}
+
+void scroll_lock_led_on(void)
+{
+ PORTD = 0b11011111;
+}
+void keypad_led_on(void)
+{
+ PORTD = 0b10111111;
+}
+void blink_all_leds(void)
+{
+ all_led_on();
+ _delay_ms(500);
+
+ all_led_off();
+ _delay_ms(100);
+
+ caps_lock_led_on();
+ _delay_ms(100);
+
+ num_lock_led_on();
+ _delay_ms(100);
+
+ scroll_lock_led_on();
+ _delay_ms(100);
+
+ keypad_led_on();
+ _delay_ms(100);
+
+ //back
+
+ scroll_lock_led_on();
+ _delay_ms(100);
+
+ num_lock_led_on();
+ _delay_ms(100);
+
+ caps_lock_led_on();
+ _delay_ms(100);
+
+ all_led_off();
+}
+
+// End section origin https://github.com/alvicstep/tmk_keyboard
+
+ void matrix_init_kb(void) {
+ blink_all_leds();
+ matrix_init_user();
+}
+
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+//Copyright 2014 Warren Janssens <warren.janssens@gmail.com>
+ uint8_t leds = 0xF0;
+ if (usb_led & 1 << USB_LED_NUM_LOCK)
+ leds &= ~0x10;
+ if (usb_led & 1 << USB_LED_CAPS_LOCK)
+ leds &= ~0x80;
+ if (usb_led & 1 << USB_LED_SCROLL_LOCK)
+ leds &= ~0x20;
+ PORTD = (PORTD & 0x0F) | leds;
+
+ led_set_user(usb_led);
+
+}
+
+
diff --git a/keyboards/kinesis/alvicstep/alvicstep.h b/keyboards/kinesis/alvicstep/alvicstep.h
new file mode 100644
index 000000000..f91a52314
--- /dev/null
+++ b/keyboards/kinesis/alvicstep/alvicstep.h
@@ -0,0 +1,67 @@
+#ifndef KINESIS_ALVICSTEP_H
+#define KINESIS_ALVICSTEP_H
+
+#include "../kinesis.h"
+
+
+#define KEYMAP( \
+ k02,k22,k12,k01,k21,k11,k00,k20,k10, \
+ k80,k70,k60,k50,k40,k30, \
+ k81,k71,k61,k51,k41,k31, \
+ k82,k72,k62,k52,k42,k32, \
+ k83,k73,k63,k53,k43,k33, \
+ k74,k64,k54,k34, \
+ k36,k35, \
+ k55, \
+ k56,k46,k75, \
+ k03,k23,k13,k04,k24,k14,k05,k85,k84, \
+ k94,kA4,kB4,kD4,kE4,kF4, \
+ k95,kA5,kB5,kD5,kE5,kF5, \
+ k96,kA6,kB6,kD6,kE6,kF6, \
+ k97,kA7,kB7,kD7,kE7,kF7, \
+ k93,kB3,kD3,kE3, \
+ k47,k66, \
+ k67, \
+ k87,k76,k86 \
+) { \
+ { k00, k01, k02, k03, k04, k05, KC_NO, KC_NO }, \
+ { k10, k11, k12, k13, k14, KC_NO, KC_NO, KC_NO }, \
+ { k20, k21, k22, k23, k24, KC_NO, KC_NO, KC_NO }, \
+ { k30, k31, k32, k33, k34, k35, k36, KC_NO }, \
+ { k40, k41, k42, k43, KC_NO, KC_NO, k46, k47 }, \
+ { k50, k51, k52, k53, k54, k55, k56, KC_NO }, \
+ { k60, k61, k62, k63, k64, KC_NO, k66, k67 }, \
+ { k70, k71, k72, k73, k74, k75, k76, KC_NO }, \
+ { k80, k81, k82, k83, k84, k85, k86, k87}, \
+ { KC_NO, KC_NO ,KC_NO ,k93, k94, k95, k96, k97}, \
+ { KC_NO, KC_NO ,KC_NO ,KC_NO, kA4, kA5, kA6, kA7}, \
+ { KC_NO, KC_NO ,KC_NO ,kB3, kB4, kB5, kB6, kB7}, \
+ { KC_NO, KC_NO ,KC_NO ,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO}, \
+ { KC_NO, KC_NO ,KC_NO ,kD3, kD4, kD5, kD6, kD7}, \
+ { KC_NO, KC_NO ,KC_NO ,kE3, kE4, kE5, kE6, kE7}, \
+ { KC_NO, KC_NO ,KC_NO ,KC_NO, kF4, kF5, kF6, kF7} \
+}
+
+
+/* Row pin configuration
+PF0 A
+PF1 B
+PF2 C
+PF3 G 0 = U4, 1 = U5
+
+
+ r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 rA rB rC rD rE rF
+PB0 c0| f6 f8 f7 5 4 3 2 1 =+
+PB1 c1| f3 f5 f4 t r e w q TAB
+PB2 c2| ESC f2 f1 g f d s a CL
+PB3 c3| f9 f11 f10 b v c x z LS UP DN [{ ]}
+PB4 c4| f12 SL PS RT LT §± `~ 6 7 8 9 0 -_
+PB5 c5| PB PGM KPD y u i o p \
+PB6 c6| LC DL BS RC EN SP h j k l ;: '"
+PB7 c7| RA PU PD n m ,< .> /? RS
+ */
+
+
+
+
+#endif
diff --git a/keyboards/kinesis/alvicstep/config.h b/keyboards/kinesis/alvicstep/config.h
new file mode 100644
index 000000000..88b7e2644
--- /dev/null
+++ b/keyboards/kinesis/alvicstep/config.h
@@ -0,0 +1,35 @@
+#ifndef ALVICSTEP_CONFIG_H
+#define ALVICSTEP_CONFIG_H
+
+#include "../config.h"
+
+/* USB Device descriptor parameter */
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+
+/* key matrix size */
+#define MATRIX_ROWS 16
+#define MATRIX_COLS 8
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+//Passed through the port multipler, so 4 pins =16
+#define MATRIX_ROW_PINS { F0,F1, F2, F3 }
+
+// May be upside down.
+#define MATRIX_COL_PINS { B0,B1, B2, B3, B4, B5, B6, B7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+
+#endif
diff --git a/keyboards/kinesis/docs/kicad/kinesis-cache.lib b/keyboards/kinesis/alvicstep/docs/kicad/kinesis-cache.lib
index f798d39d6..f798d39d6 100644
--- a/keyboards/kinesis/docs/kicad/kinesis-cache.lib
+++ b/keyboards/kinesis/alvicstep/docs/kicad/kinesis-cache.lib
diff --git a/keyboards/kinesis/docs/kicad/kinesis.pro b/keyboards/kinesis/alvicstep/docs/kicad/kinesis.pro
index 9f130b509..9f130b509 100644
--- a/keyboards/kinesis/docs/kicad/kinesis.pro
+++ b/keyboards/kinesis/alvicstep/docs/kicad/kinesis.pro
diff --git a/keyboards/kinesis/docs/kicad/kinesis.sch b/keyboards/kinesis/alvicstep/docs/kicad/kinesis.sch
index f75335aa0..f75335aa0 100644
--- a/keyboards/kinesis/docs/kicad/kinesis.sch
+++ b/keyboards/kinesis/alvicstep/docs/kicad/kinesis.sch
diff --git a/keyboards/kinesis/docs/photos/P1050573.jpg b/keyboards/kinesis/alvicstep/docs/photos/P1050573.jpg
index 027ab9efb..027ab9efb 100644
--- a/keyboards/kinesis/docs/photos/P1050573.jpg
+++ b/keyboards/kinesis/alvicstep/docs/photos/P1050573.jpg
Binary files differ
diff --git a/keyboards/kinesis/docs/photos/P1050574.jpg b/keyboards/kinesis/alvicstep/docs/photos/P1050574.jpg
index d49c492b8..d49c492b8 100644
--- a/keyboards/kinesis/docs/photos/P1050574.jpg
+++ b/keyboards/kinesis/alvicstep/docs/photos/P1050574.jpg
Binary files differ
diff --git a/keyboards/kinesis/docs/photos/P1050575.jpg b/keyboards/kinesis/alvicstep/docs/photos/P1050575.jpg
index 50cc9897c..50cc9897c 100644
--- a/keyboards/kinesis/docs/photos/P1050575.jpg
+++ b/keyboards/kinesis/alvicstep/docs/photos/P1050575.jpg
Binary files differ
diff --git a/keyboards/kinesis/docs/readme.txt b/keyboards/kinesis/alvicstep/docs/readme.txt
index af33ac490..af33ac490 100644
--- a/keyboards/kinesis/docs/readme.txt
+++ b/keyboards/kinesis/alvicstep/docs/readme.txt
diff --git a/keyboards/kinesis/docs/schematic.png b/keyboards/kinesis/alvicstep/docs/schematic.png
index fa9405a1f..fa9405a1f 100644
--- a/keyboards/kinesis/docs/schematic.png
+++ b/keyboards/kinesis/alvicstep/docs/schematic.png
Binary files differ
diff --git a/keyboards/kinesis/matrix.c b/keyboards/kinesis/alvicstep/matrix.c
index cb0d5ad7d..cb0d5ad7d 100644
--- a/keyboards/kinesis/matrix.c
+++ b/keyboards/kinesis/alvicstep/matrix.c
diff --git a/keyboards/kinesis/alvicstep/readme.md b/keyboards/kinesis/alvicstep/readme.md
new file mode 100644
index 000000000..974e42e50
--- /dev/null
+++ b/keyboards/kinesis/alvicstep/readme.md
@@ -0,0 +1,46 @@
+kinesis-advantage keyboard firmware
+======================
+
+This directory is called alvicstep because https://github.com/alvicstep did the heavy work and took the photos in the doc directory.
+alvicstep did NOT do anything related to the QMK implementation, so don't bug him/her.
+
+There are other ways of replacing the CPU in the kinesis, this one uses jumper wires from the Teensy to the original DIP socket
+
+
+## Kinesis specific information
+This is a port of https://github.com/alvicstep/tmk_keyboard,
+which is a fork of https://github.com/wjanssens/tmk_keyboard,
+which is based on work from https://github.com/chrisandreae/keyboard-firmware
+
+If you replace the kinesis CPU as described in the doc folder, then this code should allow you to use QMK.
+I've tested with a Teensy 2++, remember to change the CPU if you use a 32u4 instead.
+
+Not yet implemented:
+- Kinesis EEProm reading or writing
+- Audio - this should be simple if we remove hardcoded pins from audio.h and switch to E7
+
+
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/kinesis-advantage folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
+
+$ make keymap=[default|jack|<name>]
+
+Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
diff --git a/keyboards/kinesis/alvicstep/rules.mk b/keyboards/kinesis/alvicstep/rules.mk
new file mode 100644
index 000000000..fb421a34f
--- /dev/null
+++ b/keyboards/kinesis/alvicstep/rules.mk
@@ -0,0 +1,10 @@
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif
+
+# just silently stop, since we need to upload with teensy uploader
+upload: build
+
+
+
+
diff --git a/keyboards/kinesis/config.h b/keyboards/kinesis/config.h
index 8f1fdbdb6..7cb0532c6 100644
--- a/keyboards/kinesis/config.h
+++ b/keyboards/kinesis/config.h
@@ -22,58 +22,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
#define MANUFACTURER You
#define PRODUCT kinesis-advantage
#define DESCRIPTION A custom keyboard
// Mouse
-#define MOUSEKEY_DELAY 20
+#define MOUSEKEY_DELAY 60
#define MOUSEKEY_INTERVAL 20
#define MOUSEKEY_MAX_SPEED 4
-#define MOUSEKEY_TIME_TO_MAX 20
+#define MOUSEKEY_TIME_TO_MAX 10
#define MOUSEKEY_WHEEL_MAX_SPEED 1
#define MOUSEKEY_WHEEL_DELTA 1
#define MOUSEKEY_WHEEL_TIME_TO_MAX 1
-/* key matrix size */
-#define MATRIX_ROWS 16
-#define MATRIX_COLS 8
-
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
-*/
-//Passed through the port multipler, so 4 pins =16
-#define MATRIX_ROW_PINS { F0,F1, F2, F3 }
-
-// May be upside down.
-#define MATRIX_COL_PINS { B0,B1, B2, B3, B4, B5, B6, B7 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-// #define BACKLIGHT_PIN B7
-// #define BACKLIGHT_BREATHING
-// #define BACKLIGHT_LEVELS 3
-
-
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCING_DELAY 5
-/* define if matrix has ghost (lacks anti-ghosting diodes) */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -171,4 +135,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
+
+
+#ifdef SUBPROJECT_alvicstep
+ #include "alvicstep/config.h"
+#endif
+#ifdef SUBPROJECT_stapelberg
+ #include "stapelberg/config.h"
+#endif
+
#endif
diff --git a/keyboards/kinesis/keymaps/default/keymap.c b/keyboards/kinesis/keymaps/default/keymap.c
index 3bf80699c..01a66b5e5 100644
--- a/keyboards/kinesis/keymaps/default/keymap.c
+++ b/keyboards/kinesis/keymaps/default/keymap.c
@@ -1,10 +1,6 @@
#include "kinesis.h"
-#include "action_layer.h"
-#define QWERTY 0 // Base qerty
-#define SYMB 1// Symbol layer
-
-// An almost entirely blank keymap. Test layers with the upper right hand key - 1 in normal mode, reset in layer 2.
+#define QWERTY 0 // Base qwerty
/****************************************************************************************************
@@ -33,7 +29,6 @@
* `--------------------' `--------------------'
*/
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[QWERTY] = KEYMAP(
KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8,
@@ -45,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL,KC_LALT,
KC_HOME,
KC_BSPC,KC_DEL ,KC_END ,
- KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_PSCR ,KC_SLCK ,KC_PAUS, KC_FN0, KC_1,
+ KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_PSCR ,KC_SLCK ,KC_PAUS, KC_FN0, KC_1,
KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS,
KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS,
KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT,
@@ -54,32 +49,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_RGUI,KC_RCTL,
KC_PGUP,
KC_PGDN,KC_ENTER ,KC_SPC
- ),
-[SYMB] = KEYMAP(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0, RESET,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS
)
};
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_TAP_TOGGLE(SYMB) , // FN1 - Momentary Layer 1 (Symbols)
+const uint16_t PROGMEM fn_actions[] = {
};
diff --git a/keyboards/kinesis/keymaps/programmer/Makefile b/keyboards/kinesis/keymaps/dvorak/Makefile
index 9d3df5964..9d3df5964 100644
--- a/keyboards/kinesis/keymaps/programmer/Makefile
+++ b/keyboards/kinesis/keymaps/dvorak/Makefile
diff --git a/keyboards/kinesis/keymaps/programmer/config.h b/keyboards/kinesis/keymaps/dvorak/config.h
index 8893d122e..8893d122e 100644
--- a/keyboards/kinesis/keymaps/programmer/config.h
+++ b/keyboards/kinesis/keymaps/dvorak/config.h
diff --git a/keyboards/kinesis/keymaps/dvorak/keymap.c b/keyboards/kinesis/keymaps/dvorak/keymap.c
new file mode 100644
index 000000000..9008bc808
--- /dev/null
+++ b/keyboards/kinesis/keymaps/dvorak/keymap.c
@@ -0,0 +1,93 @@
+#include "kinesis.h"
+
+#define _DVORAK 0 // Base Dvorak layer
+#define _MEDIA 1 // Media layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_DVORAK] = KEYMAP(
+ // left hand
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y,
+ KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X,
+ KC_ESC, KC_LBRC, KC_DOWN, KC_UP,
+ // left thumb
+ KC_LGUI, KC_LCTL,
+ KC_LALT,
+ KC_BSPC, KC_DEL, TG(_MEDIA),
+ // right hand
+ KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_FN0, KC_1,
+ KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
+ KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
+ KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
+ KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
+ KC_LEFT, KC_RIGHT, KC_RBRC, KC_BSLS,
+ // right thumb
+ KC_RCTL, KC_RGUI,
+ KC_RALT,
+ TG(_MEDIA), KC_ENT, KC_SPC
+ ),
+
+[_MEDIA] = KEYMAP(
+ // left hand
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_BTN4, KC_BTN3, KC_BTN2, KC_BTN1, KC_NO,
+ KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO,
+ KC_NO, KC_NO, KC_MS_D, KC_MS_U,
+ // left thumb
+ KC_NO, KC_NO,
+ KC_NO,
+ KC_NO, KC_NO, KC_TRNS,
+ // right hand
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_POWER,
+ KC_NO, KC_VOLU, KC_MS_U, KC_VOLD, KC_NO, KC_NO,
+ KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_NO,
+ KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO,
+ KC_MS_L, KC_MS_R, KC_NO, KC_NO,
+ // right thumb
+ KC_NO, KC_NO,
+ KC_NO,
+ KC_TRNS, KC_ENT, KC_NO
+)
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/kinesis/keymaps/milestogo/Makefile b/keyboards/kinesis/keymaps/milestogo/Makefile
new file mode 100644
index 000000000..9d3df5964
--- /dev/null
+++ b/keyboards/kinesis/keymaps/milestogo/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/kinesis/keymaps/milestogo/config.h b/keyboards/kinesis/keymaps/milestogo/config.h
new file mode 100644
index 000000000..8893d122e
--- /dev/null
+++ b/keyboards/kinesis/keymaps/milestogo/config.h
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif
diff --git a/keyboards/kinesis/keymaps/milestogo/keymap.c b/keyboards/kinesis/keymaps/milestogo/keymap.c
new file mode 100644
index 000000000..bf1f9c591
--- /dev/null
+++ b/keyboards/kinesis/keymaps/milestogo/keymap.c
@@ -0,0 +1,384 @@
+#include "kinesis.h"
+#include "action_layer.h"
+#include "mousekey.h"
+
+#define _QWERTY 0 // Base qerty
+#define _SYMB 1// Symbol layer
+#define _MOUSE 2//
+#define _TRANS 3//
+#define _SYMB2 4// old symbol level, more ergodox like
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+/* Macros */
+enum {
+ NONE = 0,
+ // Diagonal mouse movement
+ A_MUL,
+ A_MUR,
+ A_MDL,
+ A_MDR,
+};
+
+
+// Train out of using uncomfortable esc and GUI keys.
+/****************************************************************************************************
+*
+* Keymap: Default Layer in Qwerty
+*
+* ,-------------------------------------------------------------------------------------------------------------------.
+* | no | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | | bOOT |
+* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
+* | `~ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ |
+* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
+* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* |MouseFN0| A | S | D | F | G | | H | J | K | L | ;: | '" |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | Shift | Z | X | C | V | B | | N | M | ,< | .> | /? | Shift |
+* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
+* | ~` | ESC |GUI/L |L1/RT | | L1/UP|GUI/DN| [{ | ]} |
+* `---------------------------' `---------------------------'
+* ,-------------. ,-------------.
+* | CTRL | ALT | | ALT | GUI |
+* ,------|------|------| |------+------+------.
+* | | | Del | | PgUp | | |
+* | BkSp | BkSp |------| |------|Return| Space|
+* | | | FN0 | | PgDn | | |
+* `--------------------' `--------------------'
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QWERTY] = KEYMAP(
+ XXXXXXX, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8,
+ KC_GRAVE, KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,
+ KC_TAB, KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,
+ KC_FN0 ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
+ KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
+ KC_GRAVE, KC_ESC, KC_FN4, KC_FN5,
+ KC_LCTL,KC_LALT,
+ KC_DEL,
+ KC_BSPC, KC_DEL ,KC_FN0 ,
+ KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_FN0 ,KC_FN1 ,KC_FN2, KC_NO, RESET,
+ KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS,
+ KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS,
+ KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT,
+ KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT,
+ KC_FN6, KC_FN7, KC_LBRC ,KC_RBRC,
+ KC_RALT,KC_RGUI,
+ KC_PGUP,
+ KC_PGDN,KC_ENTER ,KC_SPC
+ ),
+
+
+/* _SYMB level, more planck like. Much work to make sequences into multi-finger rolls. eg ([1,0]), !=0
+* Also sorted by frequency / strength of finger.
+*
+* ,-------------------------------------------------------------------------------------------------------------------.
+* | | | | | | | | | | | | | | | | |
+* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
+* | | | | | | | | | | | | | |
+* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
+* | | ^ | { | } | @ | % | | & | [ | ( | ) | _ | \ |
+* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
+* | | ! | # | 0 | = | ~ | | * | + | 1 | - | ] | ` |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | | 6 | 7 | 8 | 9 | pipe | | $ | 2 | 3 | 4 | 5 | |
+* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
+* | | : |GUI/L |L1/RT | | L1/UP|GUI/DN| \ | |
+* `---------------------------' `---------------------------'
+* ,-------------. ,-------------.
+* | CTRL | | | ALT | GUI |
+* ,------|------|------| |------+------+------.
+* | | | | | | | |
+* | Cut | Paste|------| |------| | |
+* | | |Reset | | | | |
+* `--------------------' `--------------------'
+*/
+
+
+
+[_SYMB] = KEYMAP(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, KC_CIRC, KC_LCBR, KC_RCBR, KC_AT, KC_PERC,
+ _______, KC_EXLM, KC_HASH, KC_0, KC_EQL, KC_TILD,
+ _______, KC_6, KC_7, KC_8, KC_9, KC_PIPE,
+ _______, KC_COLON, KC_FN4, KC_FN5,
+ _______, _______,
+ _______,
+ _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, KC_FN0, KC_2,
+ _______, _______, _______, _______, _______, _______,
+ KC_AMPR, KC_LBRC, KC_LPRN, KC_RPRN, KC_UNDS, _______,
+ KC_ASTR, KC_PLUS, KC_1, KC_MINS, KC_RBRC, KC_GRV,
+ KC_DLR, KC_2, KC_3, KC_4, KC_5, XXXXXXX,
+ KC_FN6, KC_FN7, KC_BSLS, XXXXXXX,
+ _______, _______,
+ _______,
+ _______, _______, _______
+ ),
+
+
+/* _SYMB2ol level, more ergodox like
+*
+* ,-------------------------------------------------------------------------------------------------------------------.
+* | | | | | | | | | | | | | | | | |
+* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
+* | | | * | # | | | | | | | | | |
+* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
+* | | / | < | > | | | | | | + | * | | |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | | | { | } | | | | | | = | - | | |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | | = | ( | ) | | | | | | | | | | |
+* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
+* | | |GUI/L |L1/RT | | L1/UP|GUI/DN| { | } |
+* `---------------------------' `---------------------------'
+* ,-------------. ,-------------.
+* | CTRL | | | ALT | GUI |
+* ,------|------|------| |------+------+------.
+* | | | | | | | |
+* | BkSp | Del |------| |------|Mouse1|Mouse2|
+* | | |Reset | | |LClick|Rclick|
+* `--------------------' `--------------------'
+*/
+
+
+
+[_SYMB2] = KEYMAP(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_ASTR, KC_HASH, _______, _______,
+ _______, KC_SLSH, RSFT(KC_COMM), RSFT(KC_DOT), _______, _______,
+ _______, _______, RSFT(KC_LBRC), RSFT(KC_RBRC), _______, _______,
+ _______, KC_EQL, RSFT(KC_9), RSFT(KC_0), _______, _______,
+ _______, _______, KC_FN4, KC_FN5,
+ _______, _______,
+ _______,
+ _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, KC_FN0, KC_2,
+ _______, _______, _______, KC_ASTR, _______, _______,
+ _______, _______, KC_PLUS, KC_MINS, _______, _______,
+ _______, _______, KC_EQL, KC_PIPE, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ KC_FN6, KC_FN7, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______
+ ),
+/* Keymap: Movement and function layer
+*
+* ,-------------------------------------------------------------------------------------------------------------------.
+* | Caps | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | Tada | bOOT |
+* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
+* | =+ | ! | @ | # | $ | % | | ^ | & | * | ( | ) |MS Fast |
+* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
+* | Tab | | | | |PgUp | | MwU |MS_UL | MS_U |MS_UR | | Ms Norm|
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* |MouseFN1|GUI_V |GUI X |GUI C |GUI_V | | | | MS_L |Mouse1| MS_R | |MS Slow |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | | | | | |PgDown| | MWD | MDown|MS Dwn|MS_DR | ? | |
+* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
+* | `~ | ESC | | | | | | { | } |
+* `---------------------------' `---------------------------'
+* ,-------------. ,-------------.
+* | CTRL | GUI | | ALT | GUI |
+* ,------|------|------| |------+------+------.
+* | | | Home | | PgUp | | |
+* | BkSp | Del |------| |------|Mouse1|Mouse2|
+* | | | End | | PgDn |LClick|Rclick|
+* `--------------------' `--------------------'
+*/
+
+
+[_MOUSE] = KEYMAP(
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_EXLM ,KC_AT, KC_HASH, KC_DLR ,KC_PERC ,
+ _______, KC_NO, KC_NO, KC_UP, KC_NO, KC_PGUP,
+ KC_FN1, LGUI(KC_Z),LGUI(KC_X),LGUI(KC_C),LGUI(KC_V), KC_NO,
+ _______, KC_NO, KC_NO, KC_UP, KC_NO, KC_PGDN,
+ _______, _______, KC_NO, KC_NO,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_FN0,RESET,
+ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_ACL2,
+ KC_WH_U, M(A_MUL), KC_MS_U, M(A_MUR), KC_NO, KC_ACL1,
+ KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_ACL0,
+ KC_WH_D, M(A_MDL), KC_MS_D, M(A_MDR), RSFT(KC_LBRC), RSFT(KC_RBRC),
+ KC_LCBR, KC_RCBR, KC_NO, KC_NO,
+ _______, _______,
+ _______,
+ _______, KC_BTN1, KC_BTN2
+ ),
+
+
+
+/* EMPTY
+*
+* ,-------------------------------------------------------------------------------------------------------------------.
+* | | | | | | | | | | | | | | | | bOOT |
+* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
+* | | | | | | | | | | | | | |
+* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
+* | | | | | | | | | | | | | |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | | | | | | | | | | | | | |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | | | | | | | | | | | | | |
+* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
+* | | | | | | | | | |
+* `---------------------------' `---------------------------'
+* ,-------------. ,-------------.
+* | Ctrl | Alt | | Gui | Ctrl |
+* ,------|------|------| |------+------+------.
+* | | | Home | | PgUp | | |
+* | BkSp | Del |------| |------|Mouse1|Mouse2|
+* | | | End | | PgDn |LClick|Rclick|
+* `--------------------' `--------------------'
+*/
+
+
+
+[_TRANS] = KEYMAP(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_FN0, KC_2,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______
+ ),
+
+
+};
+
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_TAP_TOGGLE(_MOUSE) ,
+ [1] = ACTION_LAYER_TOGGLE(_MOUSE) ,
+ [2] = ACTION_LAYER_TAP_TOGGLE(_SYMB) ,
+ [5]= ACTION_LAYER_TAP_KEY(_SYMB,KC_RIGHT),
+ [4]= ACTION_MODS_TAP_KEY(MOD_LGUI,KC_LEFT),
+ [6]= ACTION_LAYER_TAP_KEY(_SYMB,KC_UP),
+ [7]= ACTION_MODS_TAP_KEY(MOD_LGUI,KC_DOWN),
+
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+
+ // from algernon's ErgoDox EZ layout,
+ case A_MUL:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_LEFT);
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_LEFT);
+ }
+ mousekey_send();
+ break;
+
+ case A_MUR:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_RIGHT);
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_RIGHT);
+ }
+ mousekey_send();
+ break;
+
+ case A_MDL:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_LEFT);
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_LEFT);
+ }
+ mousekey_send();
+ break;
+
+ case A_MDR:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_RIGHT);
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_RIGHT);
+ }
+ mousekey_send();
+ break;
+ }
+ return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+
+}
+
+void matrix_scan_user(void) {
+
+#ifdef ALVICSTEP_CONFIG_H
+ int8_t layer = biton32(layer_state);
+
+ switch (layer) {
+ case 1:
+ if (!(host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK))) {
+ all_led_off();
+ caps_lock_led_on();
+ }
+ break;
+
+ case 2:
+ if (!(host_keyboard_leds() & (1 << USB_LED_SCROLL_LOCK))) {
+ all_led_off();
+ scroll_lock_led_on();
+ }
+ case 0:
+ all_led_off();
+ num_lock_led_on();
+ break;
+ default:
+ break;
+ }
+#endif
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/kinesis/keymaps/programmer/readme.md b/keyboards/kinesis/keymaps/milestogo/readme.md
index 76356a687..76356a687 100644
--- a/keyboards/kinesis/keymaps/programmer/readme.md
+++ b/keyboards/kinesis/keymaps/milestogo/readme.md
diff --git a/keyboards/kinesis/keymaps/programmer/keymap.c b/keyboards/kinesis/keymaps/programmer/keymap.c
deleted file mode 100644
index 83fb7bd5f..000000000
--- a/keyboards/kinesis/keymaps/programmer/keymap.c
+++ /dev/null
@@ -1,245 +0,0 @@
-#include "kinesis.h"
-#include "action_layer.h"
-#include "mousekey.h"
-
-#define QWERTY 0 // Base qerty
-#define SYMB 1// Symbol layer
-#define MOUSE 2//
-
-
-
-
-/* Macros */
-enum {
- NONE = 0,
- // Diagonal mouse movement
- A_MUL,
- A_MUR,
- A_MDL,
- A_MDR,
-};
-
-
-// Borrowing very heavily from
-// https://github.com/alvicstep/tmk_keyboard
-/****************************************************************************************************
-*
-* Keymap: Default Layer in Qwerty
-*
-* ,-------------------------------------------------------------------------------------------------------------------.
-* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | | bOOT |
-* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
-* | =+ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ |
-* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
-* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* |MouseFN1| A | S | D | F | G | | H | J | K | L | ;: | '" |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? | Shift |
-* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
-* | `~ | ESC |MOUSE1|MOUSE2| | [{ | ]} | ESC | GUI |
-* `---------------------------' `---------------------------'
-* ,-------------. ,-------------.
-* | Ctrl | Alt | | Gui | Ctrl |
-* ,------|------|------| |------+------+------.
-* | | | Home | | PgUp | | |
-* | BkSp | Del |------| |------|Return| Space|
-* | | | End | | PgDn | | |
-* `--------------------' `--------------------'
-*/
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[QWERTY] = KEYMAP(
- KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8,
- KC_EQL, KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,
- KC_TAB, KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,
- KC_FN1 ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
- KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
- KC_GRV ,KC_ESC, KC_BTN1,KC_BTN2,
- KC_LCTL,KC_LALT,
- KC_HOME,
- KC_BSPC,KC_DEL ,KC_FN0 ,
- KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_FN0 ,KC_FN1 ,KC_FN2, KC_NO, RESET,
- KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS,
- KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS,
- KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT,
- KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT,
- KC_LBRC,KC_RBRC, KC_ESC, KC_RGUI,
- KC_RGUI,KC_RCTL,
- KC_PGUP,
- KC_PGDN,KC_ENTER ,KC_SPC
- ),
-[SYMB] = KEYMAP(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0, KC_2,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS
- ),
-/* Keymap: Movement and function layer
-*
-* ,-------------------------------------------------------------------------------------------------------------------.
-* | Caps | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | Tada | bOOT |
-* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
-* | =+ | ! | @ | # | $ | % | | ^ | & | * | ( | ) |MS Fast |
-* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
-* | Tab | | | Up | |PgUp | | MwU |MS_UL | MS_U |MS_UR | | Ms Norm|
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* |MouseFN1| C^A | Left | Down |Right | C^E | | | MS_L |Mouse1| MS_R | |MS Slow |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | | GuiZ | GUI X| GUI C| GUI_V|PgDown| | MWD | MDown|MS Dwn|MS_DR | ? | |
-* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
-* | `~ | ESC | < | > | | { | } | ESC | |
-* `---------------------------' `---------------------------'
-* ,-------------. ,-------------.
-* | Ctrl | Alt | | Gui | Ctrl |
-* ,------|------|------| |------+------+------.
-* | | | Home | | PgUp | | |
-* | BkSp | Del |------| |------|Mouse1|Mouse2|
-* | | | End | | PgDn |LClick|Rclick|
-* `--------------------' `--------------------'
-*/
-
-
-[MOUSE] = KEYMAP(
- KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_EXLM ,KC_AT, KC_HASH, KC_DLR ,KC_PERC ,
- KC_TRNS, KC_NO, KC_NO, KC_UP, KC_NO, KC_PGUP,
- KC_FN1, LCTL(KC_A),KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_E),
- KC_TRNS, LGUI(KC_Z),LGUI(KC_X),LGUI(KC_C),LGUI(KC_V),KC_PGDN,
- KC_TRNS, KC_TRNS, KC_LABK, KC_RABK,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0,RESET,
- KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_ACL2,
- KC_WH_U, M(A_MUL), KC_MS_U, M(A_MUR), KC_NO, KC_ACL1,
- KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_ACL0,
- KC_WH_D, M(A_MDL), KC_MS_D, M(A_MDR), KC_TRNS, KC_TRNS,
- KC_LCBR, KC_RCBR, KC_ESC, KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_BTN1, KC_BTN2
- ),
-
-
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_TAP_TOGGLE(MOUSE) , // FN1 - Momentary Layer 1 (Symbols)
- [1] = ACTION_LAYER_TOGGLE(MOUSE) , // FN1 - Momentary Layer 1 (Symbols)
- [2] = ACTION_LAYER_TAP_TOGGLE(SYMB) , // FN1 - Momentary Layer 1 (Symbols)
-
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
-
- // from algernon's ErgoDox EZ layout,
- case A_MUL:
- if (record->event.pressed) {
- mousekey_on(KC_MS_UP);
- mousekey_on(KC_MS_LEFT);
- } else {
- mousekey_off(KC_MS_UP);
- mousekey_off(KC_MS_LEFT);
- }
- mousekey_send();
- break;
-
- case A_MUR:
- if (record->event.pressed) {
- mousekey_on(KC_MS_UP);
- mousekey_on(KC_MS_RIGHT);
- } else {
- mousekey_off(KC_MS_UP);
- mousekey_off(KC_MS_RIGHT);
- }
- mousekey_send();
- break;
-
- case A_MDL:
- if (record->event.pressed) {
- mousekey_on(KC_MS_DOWN);
- mousekey_on(KC_MS_LEFT);
- } else {
- mousekey_off(KC_MS_DOWN);
- mousekey_off(KC_MS_LEFT);
- }
- mousekey_send();
- break;
-
- case A_MDR:
- if (record->event.pressed) {
- mousekey_on(KC_MS_DOWN);
- mousekey_on(KC_MS_RIGHT);
- } else {
- mousekey_off(KC_MS_DOWN);
- mousekey_off(KC_MS_RIGHT);
- }
- mousekey_send();
- break;
- }
- return MACRO_NONE;
-};
-
-
-void matrix_init_user(void) {
-
-
-}
-
-void matrix_scan_user(void) {
- int8_t layer = biton32(layer_state);
-
- switch (layer) {
- case 1:
- all_led_off();
- break;
- case 2:
- if (!(host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK))) {
- all_led_off();
- caps_lock_led_on();
- }
- break;
- case 0:
- all_led_off();
- num_lock_led_on();
- break;
- default:
- break;
- }
-
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
-
-void led_set_user(uint8_t usb_led) {
-
-}
diff --git a/keyboards/kinesis/kinesis.c b/keyboards/kinesis/kinesis.c
index 1fee90e6f..7a6a1be54 100644
--- a/keyboards/kinesis/kinesis.c
+++ b/keyboards/kinesis/kinesis.c
@@ -1,106 +1 @@
#include "kinesis.h"
-
-// begin section origin https://github.com/alvicstep/tmk_keyboard
-
-
-void all_led_off(void)
-{
- PORTD = 0b11111111;
-}
-
-void all_led_on(void)
-{
- PORTD = 0b00000000;
-}
-void num_lock_led_on(void)
-{
- PORTD = 0b11101111;
-}
-
-void caps_lock_led_on(void)
-{
- PORTD = 0b01111111;
-}
-
-void scroll_lock_led_on(void)
-{
- PORTD = 0b11011111;
-}
-void keypad_led_on(void)
-{
- PORTD = 0b10111111;
-}
-void blink_all_leds(void)
-{
- all_led_on();
- _delay_ms(500);
-
- all_led_off();
- _delay_ms(100);
-
- caps_lock_led_on();
- _delay_ms(100);
-
- num_lock_led_on();
- _delay_ms(100);
-
- scroll_lock_led_on();
- _delay_ms(100);
-
- keypad_led_on();
- _delay_ms(100);
-
- //back
-
- scroll_lock_led_on();
- _delay_ms(100);
-
- num_lock_led_on();
- _delay_ms(100);
-
- caps_lock_led_on();
- _delay_ms(100);
-
- all_led_off();
-}
-
-// End section origin https://github.com/alvicstep/tmk_keyboard
-
- void matrix_init_kb(void) {
- blink_all_leds();
- matrix_init_user();
-}
-
-
-void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
-
- matrix_scan_user();
-}
-
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
- // put your per-action keyboard code here
- // runs for every action, just before processing by the firmware
-
- return process_record_user(keycode, record);
-}
-
-void led_set_kb(uint8_t usb_led) {
- // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
-
-//Copyright 2014 Warren Janssens <warren.janssens@gmail.com>
- uint8_t leds = 0xF0;
- if (usb_led & 1 << USB_LED_NUM_LOCK)
- leds &= ~0x10;
- if (usb_led & 1 << USB_LED_CAPS_LOCK)
- leds &= ~0x80;
- if (usb_led & 1 << USB_LED_SCROLL_LOCK)
- leds &= ~0x20;
- PORTD = (PORTD & 0x0F) | leds;
-
- led_set_user(usb_led);
-
-}
-
-
diff --git a/keyboards/kinesis/kinesis.h b/keyboards/kinesis/kinesis.h
index c04fbda15..66713731f 100644
--- a/keyboards/kinesis/kinesis.h
+++ b/keyboards/kinesis/kinesis.h
@@ -1,67 +1,23 @@
#ifndef KINESIS_H
#define KINESIS_H
-#include "quantum.h"
-
-
-// The first section contains all of the arguements
-// The second converts the arguments into a two-dimensional array
+#ifdef SUBPROJECT_alvicstep
+ #include "alvicstep.h"
+#endif
+#ifdef SUBPROJECT_stapelberg
+ #include "stapelberg.h"
+#endif
-#define KEYMAP( \
- k02,k22,k12,k01,k21,k11,k00,k20,k10, \
- k80,k70,k60,k50,k40,k30, \
- k81,k71,k61,k51,k41,k31, \
- k82,k72,k62,k52,k42,k32, \
- k83,k73,k63,k53,k43,k33, \
- k74,k64,k54,k34, \
- k36,k35, \
- k55, \
- k56,k46,k75, \
- k03,k23,k13,k04,k24,k14,k05,k85,k84, \
- k94,kA4,kB4,kD4,kE4,kF4, \
- k95,kA5,kB5,kD5,kE5,kF5, \
- k96,kA6,kB6,kD6,kE6,kF6, \
- k97,kA7,kB7,kD7,kE7,kF7, \
- k93,kB3,kD3,kE3, \
- k47,k66, \
- k67, \
- k87,k76,k86 \
-) { \
- { k00, k01, k02, k03, k04, k05, KC_NO, KC_NO }, \
- { k10, k11, k12, k13, k14, KC_NO, KC_NO, KC_NO }, \
- { k20, k21, k22, k23, k24, KC_NO, KC_NO, KC_NO }, \
- { k30, k31, k32, k33, k34, k35, k36, KC_NO }, \
- { k40, k41, k42, k43, KC_NO, KC_NO, k46, k47 }, \
- { k50, k51, k52, k53, k54, k55, k56, KC_NO }, \
- { k60, k61, k62, k63, k64, KC_NO, k66, k67 }, \
- { k70, k71, k72, k73, k74, k75, k76, KC_NO }, \
- { k80, k81, k82, k83, KC_NO ,KC_NO, k86, k87}, \
- { KC_NO, KC_NO ,KC_NO ,k93, k94, k95, k96, k97}, \
- { KC_NO, KC_NO ,KC_NO ,KC_NO, kA4, kA5, kA6, kA7}, \
- { KC_NO, KC_NO ,KC_NO ,kB3, kB4, kB5, kB6, kB7}, \
- { KC_NO, KC_NO ,KC_NO ,KC_NO, KC_NO, KC_NO, k84, k85}, \
- { KC_NO, KC_NO ,KC_NO ,kD3, kD4, kD5, kD6, kD7}, \
- { KC_NO, KC_NO ,KC_NO ,kE3, kE4, kE5, kE6, kE7}, \
- { KC_NO, KC_NO ,KC_NO ,KC_NO, kF4, kF5, kF6, kF7} \
-}
+#include "quantum.h"
-/* 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 */
+void all_led_off(void);
+void all_led_on(void);
+void num_lock_led_on(void);
+void caps_lock_led_on(void);
+void scroll_lock_led_on(void);
+void keypad_led_on(void);
-/*
- 0 1 2 3 4 5 6 7 8 9 A B C D E F
- A B C D E F G H I J K L M N O P
- 4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7
- r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
-0 PB0 21 c0 f6 f8 f7 5 4 3 2 1 =+
-1 PB1 22 c1 f3 f5 f4 t r e w q TAB
-2 PB2 23 c2 ESC f2 f1 g f d s a CL
-3 PB3 24 c3 f9 f11 f10 b v c x z LS UP DN [{ ]}
-4 PB4 25 c4 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_
-5 PB5 26 c5 PB PGM KPD LA HM END y u i o p \
-6 PB6 27 c6 LC DEL BS RC ENT SP h j k l ;: '"
-7 PB7 28 c7 RA PU PD n m ,< .> /? RS
-*/
#endif
diff --git a/keyboards/kinesis/readme.md b/keyboards/kinesis/readme.md
index 79c86581e..2813ee273 100644
--- a/keyboards/kinesis/readme.md
+++ b/keyboards/kinesis/readme.md
@@ -1,42 +1,12 @@
-kinesis-advantage keyboard firmware
-======================
+# Firmware for the Kinesis advantage keyboard
-## Kinesis specific information
-This is a port of https://github.com/alvicstep/tmk_keyboard,
-which is a fork of https://github.com/wjanssens/tmk_keyboard,
-which is based on work from https://github.com/chrisandreae/keyboard-firmware
+There are at least two different ways to replace the controller in this keyboard.
-If you replace the kinesis CPU as described in the doc folder, then this code should allow you to use QMK.
-I've tested with a Teensy 2++, remember to change the CPU if you use a 32u4 instead.
+The Stapelberg folder contains the docs and configuration for using the custom controller created by Michael Stapelberg.
-Not yet implemented:
-- Kinesis EEProm reading or writing
-- Audio - this should be simple if we remove hardcoded pins from audio.h and switch to E7
+The alvicstep folder contains docs and configuration for directly wiring a Teensy2++ to the existing controller board. This follows the pinouts described in https://github.com/alvicstep/tmk_keyboard, which is where the name comes from.
+## Keymaps
+Both hardware solutions should work with the same keymaps
-## Quantum MK Firmware
-
-For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
-
-## Building
-
-Download or clone the whole firmware and navigate to the keyboards/kinesis-advantage folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
-
-Depending on which keymap you would like to use, you will have to compile slightly differently.
-
-### Default
-
-To build with the default keymap, simply run `make default`.
-
-### Other Keymaps
-
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
-
-To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
-
-```
-$ make [default|jack|<name>]
-```
-
-Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
diff --git a/keyboards/kinesis/rules.mk b/keyboards/kinesis/rules.mk
index a4a2b7d15..956a64bdd 100644
--- a/keyboards/kinesis/rules.mk
+++ b/keyboards/kinesis/rules.mk
@@ -46,11 +46,11 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Boot Section Size in *bytes*
# Teensy halfKay 512
-# Teensy++ halfKay 1024
+# Teensy++ halfKay 2048
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=1024
+OPT_DEFS += -DBOOTLOADER_SIZE=2048
# Build Options
diff --git a/keyboards/kinesis/stapelberg/Makefile b/keyboards/kinesis/stapelberg/Makefile
new file mode 100644
index 000000000..bd09e5885
--- /dev/null
+++ b/keyboards/kinesis/stapelberg/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../../Makefile
+endif
diff --git a/keyboards/kinesis/stapelberg/config.h b/keyboards/kinesis/stapelberg/config.h
new file mode 100644
index 000000000..0677e0ade
--- /dev/null
+++ b/keyboards/kinesis/stapelberg/config.h
@@ -0,0 +1,50 @@
+#ifndef STAPELBERG_CONFIG_H
+#define STAPELBERG_CONFIG_H
+
+#include "../config.h"
+
+/* USB Device descriptor parameter */
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0002
+
+/* key matrix size */
+#define MATRIX_ROWS 15
+#define MATRIX_COLS 7
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D0, D1, D2, D3, D4, D5, D6, D7, C0, C1, C2, C3, C4, C5, C6 }
+#define MATRIX_COL_PINS { B0, B1, B2, B3, B4, B5, B6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* don't know if this should be defined at the board or top level. Assuming board
+#define MOUSEKEY_DELAY 100
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 3
+#define MOUSEKEY_TIME_TO_MAX 10
+*/
+
+#define IGNORE_MOD_TAP_INTERRUPT
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+
+#endif
diff --git a/keyboards/kinesis/stapelberg/images/controller_board.jpg b/keyboards/kinesis/stapelberg/images/controller_board.jpg
new file mode 100644
index 000000000..b18f76f7e
--- /dev/null
+++ b/keyboards/kinesis/stapelberg/images/controller_board.jpg
Binary files differ
diff --git a/keyboards/kinesis/stapelberg/images/exterior_reset.jpg b/keyboards/kinesis/stapelberg/images/exterior_reset.jpg
new file mode 100644
index 000000000..6edda8130
--- /dev/null
+++ b/keyboards/kinesis/stapelberg/images/exterior_reset.jpg
Binary files differ
diff --git a/keyboards/kinesis/stapelberg/images/teensy_detail.jpg b/keyboards/kinesis/stapelberg/images/teensy_detail.jpg
new file mode 100644
index 000000000..12e6c1c8a
--- /dev/null
+++ b/keyboards/kinesis/stapelberg/images/teensy_detail.jpg
Binary files differ
diff --git a/keyboards/kinesis/stapelberg/readme.md b/keyboards/kinesis/stapelberg/readme.md
new file mode 100644
index 000000000..b04a0bd49
--- /dev/null
+++ b/keyboards/kinesis/stapelberg/readme.md
@@ -0,0 +1,55 @@
+# kinesis_stapelberg keyboard firmware
+
+This folder contains the firmware customization required to run QMK on the custom controller for the Kinesis Advantage created by Michael Stapelberg.
+It differs from the `alvicstep keyboard in that the existing QMK Kinesis Advantage project uses the existing controller board provided by Kinesis.
+
+The controller board hardware is described
+[here](http://michael.stapelberg.de/Artikel/kinesis_custom_controller)
+
+Mapping the pin assignments was done using the corresponding matrix description provided at this
+[link](https://github.com/stapelberg/kinesis-firmware/blob/master/kb_kinesis/config.kspec)
+
+This code makes no attempt to drive the four LEDs provided on the controller board.
+
+
+## Building the Hardware
+
+If you want to perform this customization, these parts may be helpful.
+
+| Function | Quantity | Vendor | Part Number |
+| ------------------------------------------------------ | -------- | ------- | ------------ |
+| 13 pin connector for function keys and finger keywells | 4 | Digi-Key | WM14526-ND |
+| 10 pin headers for thumb clusters | 4 | Digi-Key | 609-3250-ND |
+| 8 pin cable for thumb clusters | 2 | Digi-Key | SAM8928-ND |
+| Teensy++ 2.0 | 1 | Digi-Key | 1528-1056-ND |
+| 2 pin right angle header for reset | 1 | Digi-Key | 3M9467-ND |
+| Reset cables | 2 | Sparkfun | PRT-09140 |
+
+The board and connections are shown here
+![](images/controller_board.jpg)
+
+The Teensy mounting detail can be seen here.
+I used a socket for prototyping.
+![](images/teensy_detail.jpg)
+
+
+Since the proper mounting of the Teensy board places the reset button in a tight space, I added a 2-pin header to the reset and ground pins on the edge of the board.
+Shorting these two pins together will reset the board.
+I also put female to male header jumper cables on these so they could be accessed outside the enclosure.
+The exterior cables can be seen here.
+![](images/exterior_reset.jpg)
+
+
+## Keymaps
+
+### Default
+
+To build with the default keymap, run `make default` while in the
+`kinesis_stapelberg` working directory.
+
+### Dvorak
+
+This keymap contains a dvorak implementation as well as media and symbol layers.
+
+Run `make dvorak` while in the `kinesis_stapelberg` working directory.
+
diff --git a/keyboards/kinesis/stapelberg/rules.mk b/keyboards/kinesis/stapelberg/rules.mk
new file mode 100644
index 000000000..fb421a34f
--- /dev/null
+++ b/keyboards/kinesis/stapelberg/rules.mk
@@ -0,0 +1,10 @@
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif
+
+# just silently stop, since we need to upload with teensy uploader
+upload: build
+
+
+
+
diff --git a/keyboards/kinesis/stapelberg/stapelberg.c b/keyboards/kinesis/stapelberg/stapelberg.c
new file mode 100644
index 000000000..111db81fe
--- /dev/null
+++ b/keyboards/kinesis/stapelberg/stapelberg.c
@@ -0,0 +1,28 @@
+#include "stapelberg.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/kinesis/stapelberg/stapelberg.h b/keyboards/kinesis/stapelberg/stapelberg.h
new file mode 100644
index 000000000..c90fc3d52
--- /dev/null
+++ b/keyboards/kinesis/stapelberg/stapelberg.h
@@ -0,0 +1,72 @@
+#ifndef KINESIS_STAPELBERG_H
+#define KINESIS_STAPELBERG_H
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguments as on the physical keyboard
+// The second converts the arguments into the 2-D scanned array
+
+#define KEYMAP( \
+ kC0,kD0,kE0,kC1,kD1,kE1,kC2,kD2,kE2, \
+ k00,k10,k20,k30,k40,k50, \
+ k01,k11,k21,k31,k41,k51, \
+ k02,k12,k22,k32,k42,k52, \
+ k03,k13,k23,k33,k43,k53, \
+ k14,k24,k34,k54, \
+ k56,k55, \
+ k35, \
+ k36,k46,k25, \
+ kC3,kD3,kE3,kC4,kD4,kE4,kC5,kE5,kD5, \
+ k60,k70,k80,k90,kA0,kB0, \
+ k61,k71,k81,k91,kA1,kB1, \
+ k62,k72,k82,k92,kA2,kB2, \
+ k63,k73,k83,k93,kA3,kB3, \
+ k64,k84,k94,kA4, \
+ k96,k85, \
+ k86, \
+ k66,k75,k65 \
+) { \
+ { k00, k01, k02, k03, KC_NO, KC_NO, KC_NO }, \
+ { k10, k11, k12, k13, k14, KC_NO, KC_NO }, \
+ { k20, k21, k22, k23, k24, k25, KC_NO }, \
+ { k30, k31, k32, k33, k34, k35, k36 }, \
+ { k40, k41, k42, k43, KC_NO, KC_NO, k46 }, \
+ { k50, k51, k52, k53, k54, k55, k56 }, \
+ { k60, k61, k62, k63, k64, k65, k66 }, \
+ { k70, k71, k72, k73, KC_NO, k75, KC_NO }, \
+ { k80, k81, k82, k83, k84, k85, k86 }, \
+ { k90, k91, k92, k93, k94, KC_NO, k96 }, \
+ { kA0, kA1, kA2, kA3, kA4, KC_NO, KC_NO }, \
+ { kB0, kB1, kB2, kB3, KC_NO, KC_NO, KC_NO }, \
+ { kC0, kC1, kC2, kC3, kC4, kC5, KC_NO }, \
+ { kD0, kD1, kD2, kD3, kD4, kD5, KC_NO }, \
+ { kE0, kE1, kE2, kE3, kE4, kE5, KC_NO } \
+}
+
+/*
+This is the Stapelberg matrix as published at
+https://github.com/stapelberg/kinesis-firmware/blob/master/kb_kinesis/config.kspec
+Along with the pins for each row and column
+ PB0 PB1 PB2 PB3 PB4 PB5 PB6
+ kx0 kx1 kx2 kx3 kx4 kx5 kx6
+PD0 k0x Row: EQL TAB CAP LSH X2 -- --
+PD1 k1x Row: 1 Q A Z BQ -- --
+PD2 k2x Row: 2 W S X INS END --
+PD3 k3x Row: 3 E D C LFT HOM BAK
+PD4 k4x Row: 4 R F V -- -- DEL
+PD5 k5x Row: 5 T G B RT LAL LCT
+PD6 k6x Row: 6 Y H N UP SPC PGD
+PD7 k7x Row: 7 U J M -- RET --
+PB0 k8x Row: 8 I K COM DWN RCT PGU
+PB1 k9x Row: 9 O L PER LBR -- RAL
+PB2 kAx Row: 0 P SEM SLA RBR -- --
+PB3 kBx Row: MIN BSL APO RSH X1 -- --
+PB4 kCx Row: ESC F3 F6 F9 F12 PAU --
+PB5 kDx Row: F1 F4 F7 F10 PRT PRG --
+PB6 kEx Row: F2 F5 F8 F11 SLK KEY --
+*/
+
+
+
+#endif