aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien <Dbroqua@users.noreply.github.com>2017-01-15 11:07:54 -0600
committerGitHub <noreply@github.com>2017-01-15 11:07:54 -0600
commitf91f0a715d51286064bfe808b0d463878a6d3588 (patch)
treebb426e11222127d6d9c92c8b519c8fd62fe4dc75
parent0fb82c15a5c9a69e17cff8dcd04c652d21381958 (diff)
parent6f448856151572f5bee329e68842cdda867fa66b (diff)
downloadqmk_firmware-f91f0a715d51286064bfe808b0d463878a6d3588.tar.gz
qmk_firmware-f91f0a715d51286064bfe808b0d463878a6d3588.zip
Merge pull request #16 from jackhumbert/master
Forked from jackhumbert/qmk_firmware
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.pngbin76319 -> 0 bytes
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/atreus-replica-base.pngbin0 -> 75363 bytes
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.pngbin91555 -> 92445 bytes
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.pngbin92516 -> 91749 bytes
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.pngbin72509 -> 72856 bytes
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.pngbin73171 -> 74690 bytes
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/keymap.c136
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/readme.md16
-rw-r--r--keyboards/atreus62/keymaps/mneme/Makefile5
-rw-r--r--keyboards/atreus62/keymaps/mneme/README.md56
-rw-r--r--keyboards/atreus62/keymaps/mneme/config.h7
-rw-r--r--keyboards/atreus62/keymaps/mneme/img/base.pngbin0 -> 458762 bytes
-rw-r--r--keyboards/atreus62/keymaps/mneme/img/fun.pngbin0 -> 430634 bytes
-rw-r--r--keyboards/atreus62/keymaps/mneme/img/sym.pngbin0 -> 433342 bytes
-rw-r--r--keyboards/atreus62/keymaps/mneme/keymap.c337
-rw-r--r--keyboards/atreus62/keymaps/mneme/unicode114
-rw-r--r--keyboards/ergodox/config.h2
-rw-r--r--keyboards/ergodox/keymaps/bryan/keymap.c226
-rw-r--r--keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-base-layout.pngbin0 -> 79741 bytes
-rw-r--r--keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-1-symbols.pngbin0 -> 55349 bytes
-rw-r--r--keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-2-media-and-mouse.pngbin0 -> 50926 bytes
-rw-r--r--keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-3-navigation.pngbin0 -> 43551 bytes
-rw-r--r--keyboards/ergodox/keymaps/deadcyclo/readme.md26
-rw-r--r--keyboards/ergodox/keymaps/replicaJunction/config.h63
-rw-r--r--keyboards/ergodox/keymaps/replicaJunction/keymap.c336
-rw-r--r--keyboards/ergodox/keymaps/replicaJunction/readme.md5
-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.c (renamed from keyboards/kinesis/keymaps/programmer/keymap.c)160
-rw-r--r--keyboards/kinesis/keymaps/milestogo/readme.md (renamed from keyboards/kinesis/keymaps/programmer/readme.md)0
-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/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
-rw-r--r--keyboards/planck/keymaps/priyadi/Makefile2
-rw-r--r--keyboards/planck/keymaps/priyadi/keymap.c196
-rw-r--r--keyboards/planck/keymaps/vifon/Makefile5
-rw-r--r--keyboards/planck/keymaps/vifon/config.h5
-rw-r--r--keyboards/planck/keymaps/vifon/keymap.c4
-rw-r--r--keyboards/readme.md3
-rw-r--r--keyboards/tv44/keymaps/default/keymap.c2
-rw-r--r--keyboards/whitefox/Makefile3
-rw-r--r--keyboards/whitefox/bootloader_defs.h1
-rw-r--r--keyboards/whitefox/chconf.h524
-rw-r--r--keyboards/whitefox/config.h78
-rw-r--r--keyboards/whitefox/halconf.h353
-rw-r--r--keyboards/whitefox/keymaps/default/keymap.c51
-rw-r--r--keyboards/whitefox/keymaps/matt3o/keymap.c92
-rw-r--r--keyboards/whitefox/led.c24
-rw-r--r--keyboards/whitefox/matrix.c132
-rw-r--r--keyboards/whitefox/mcuconf.h54
-rw-r--r--keyboards/whitefox/readme.md7
-rw-r--r--keyboards/whitefox/rules.mk68
-rw-r--r--keyboards/whitefox/whitefox.c17
-rw-r--r--keyboards/whitefox/whitefox.h54
-rw-r--r--quantum/process_keycode/process_unicode.c41
-rw-r--r--quantum/quantum_keycodes.h4
-rw-r--r--readme.md2
87 files changed, 3772 insertions, 347 deletions
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png
deleted file mode 100644
index 4640f9f52..000000000
--- a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png
+++ /dev/null
Binary files differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base.png
new file mode 100644
index 000000000..1d5bd78db
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base.png
Binary files differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png
index 08c2e6140..cf4db3e2c 100644
--- a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png
+++ b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png
Binary files differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png
index 34ad03dec..30e5621e4 100644
--- a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png
+++ b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png
Binary files differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png
index 14ae35b54..95f8be5e0 100644
--- a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png
+++ b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png
Binary files differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png
index 6598acb27..3c445f90c 100644
--- a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png
+++ b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png
Binary files differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/keymap.c b/keyboards/atreus/keymaps/replicaJunction/keymap.c
index 52d3677fa..d39a184d4 100644
--- a/keyboards/atreus/keymaps/replicaJunction/keymap.c
+++ b/keyboards/atreus/keymaps/replicaJunction/keymap.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Keyboard: Atreus 2 * Keyboard: Atreus
3 * Keymap: replicaJunction 3 * Keymap: replicaJunction
4 * Version: 0.3 4 * Version: 0.4
5 * 5 *
6 * This keymap is designed to complement my Ergodox keyboard layout, found in keyboards/ergodox_ez. 6 * This keymap is designed to complement my Ergodox keyboard layout, found in keyboards/ergodox_ez.
7 * The Atreus keyboard is a 40% board whose design was heavily influenced by the Ergodox. I now 7 * The Atreus keyboard is a 40% board whose design was heavily influenced by the Ergodox. I now
@@ -42,51 +42,157 @@
42#define KX_PAST LCTL(KC_V) 42#define KX_PAST LCTL(KC_V)
43#define KX_UNDO LCTL(KC_Z) 43#define KX_UNDO LCTL(KC_Z)
44 44
45#define _USER 0 // User macro
46
45; // This doesn't do anything. It's just for VSCode because its syntax highlighting is weird for the above #define statements. 47; // This doesn't do anything. It's just for VSCode because its syntax highlighting is weird for the above #define statements.
46 48
47const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 49const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
50
51/*
52 * Colemak-ModDH
53 *
54 * ,----------------------------------. ,----------------------------------.
55 * | Q | W | F | P | B | | J | L | U | Y | ; |
56 * +------+------+------+------+------| +------+------+------+------+------|
57 * | A | R | S | T | G | | M | N | E | I | O |
58 * +------+------+------+------+------| +------+------+------+------+------|
59 * |Z Shft| X | C | D | V | ,------. ,------. | K | H | , | . |/ Shft|
60 * +------+------+------+------+------| | Ctrl | | Alt | +------+------+------+------+------|
61 * | Esc | Gui | Tab | _FN | Bksp | | Del | | Enter| |Sp/_NU| _EX | - | ' | = |
62 * `----------------------------------' `------' `------' `----------------------------------'
63 *
64 */
48[_CO] = KEYMAP( 65[_CO] = KEYMAP(
49 KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, 66 KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
50 KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, 67 KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O,
51 SFT_T(KC_Z), KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, SFT_T(KC_SLSH), 68 SFT_T(KC_Z), KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, SFT_T(KC_SLSH),
52 KC_ESC, KC_LGUI, KC_TAB, KC_LALT, KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL 69 KC_ESC, KC_LGUI, KC_TAB, MO(_FN), KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
53), 70),
54 71
72/*
73 * QWERTY
74 *
75 * ,----------------------------------. ,----------------------------------.
76 * | Q | W | E | R | T | | Y | U | I | O | P |
77 * +------+------+------+------+------| +------+------+------+------+------|
78 * | A | S | D | F | G | | H | J | K | L | ; |
79 * +------+------+------+------+------| +------+------+------+------+------|
80 * |Z Shft| X | C | V | B | ,------. ,------. | N | M | , | . |/ Shft|
81 * +------+------+------+------+------| | Ctrl | | Alt | +------+------+------+------+------|
82 * | Esc | Gui | Tab | _FN | Bksp | | Del | | Enter| |Sp/_NU| _EX | - | ' | = |
83 * `----------------------------------' `------' `------' `----------------------------------'
84 *
85 */
55[_QW] = KEYMAP( /* Qwerty */ 86[_QW] = KEYMAP( /* Qwerty */
56 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, 87 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
57 KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, 88 KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
58 SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH), 89 SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH),
59 KC_ESC, KC_LGUI, KC_TAB, KC_LALT, KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL 90 KC_ESC, KC_LGUI, KC_TAB, MO(_FN), KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
60), 91),
61 92
93/*
94 * Extend
95 *
96 * Ctrl+` is a keyboard shortcut for the program ConEmu, which brings up a dropdown console window.
97 *
98 * Also note that some dual-role keys are overridden here with their modifiers
99 *
100 * ,----------------------------------. ,----------------------------------.
101 * | | | | |Ctrl `| | PgUp | Home | Up | End | Del |
102 * +------+------+------+------+------| +------+------+------+------+------|
103 * | Gui | Shift| Alt | Ctrl | | | PgDn | Left | Down | Right| Bksp |
104 * +------+------+------+------+------| +------+------+------+------+------|
105 * | Shift| Cut | Copy | | Paste| ,------. ,------. | | ^Tab | Tab | |Insert|
106 * +------+------+------+------+------| | Del | | Enter| +------+------+------+------+------|
107 * | | | | | | | | | | | Space|XXXXXX| | |PrntSc|
108 * `----------------------------------' `------' `------' `----------------------------------'
109 *
110 */
62[_EX] = KEYMAP( /* Extend */ 111[_EX] = KEYMAP( /* Extend */
63 KC_CAPS, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL, 112 _______, _______, _______, _______, LCTL(KC_GRV), KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL,
64 _______, KC_LGUI, KC_LALT, KC_LCTL, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC, 113 KC_LGUI, KC_LSFT, KC_LALT, KC_LCTL, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC,
65 _______, KX_CUT, KX_COPY, _______, KX_PAST, _______, KC_TAB, KCX_LST, _______, KC_INSERT, 114 KC_LSFT, KX_CUT, KX_COPY, _______, KX_PAST, _______, KCX_LST, KC_TAB, _______, KC_INS,
66 _______, _______, _______, _______, _______, _______, _______, KC_SPC, _______, _______, _______, KC_PSCR 115 _______, _______, _______, _______, _______, KC_DEL, KC_ENT, KC_SPC, _______, _______, _______, KC_PSCR
67), 116),
68 117
118/*
119 * Numbers and symbols
120 *
121 * ,----------------------------------. ,----------------------------------.
122 * | ! | @ | { | } | & | | / | 7 | 8 | 9 | * |
123 * +------+------+------+------+------| +------+------+------+------+------|
124 * | # | $ | ( | ) | ~ | | | | 4 | 5 | 6 | - |
125 * +------+------+------+------+------| +------+------+------+------+------|
126 * | % | ^ | [ | ] | ` | ,------. ,------. | \ | 1 | 2 | 3 | + |
127 * +------+------+------+------+------| | | | | +------+------+------+------+------|
128 * | | _GA | | | | | | | | |XXXXXX| 0 | . | = | |
129 * `----------------------------------' `------' `------' `----------------------------------'
130 *
131 */
69[_NU] = KEYMAP( /* Numbers and symbols */ 132[_NU] = KEYMAP( /* Numbers and symbols */
70 KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_AMPR, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR, 133 KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_AMPR, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR,
71 KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_TILD, KC_PIPE, KC_4, KC_5, KC_6, KC_MINS, 134 KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_TILD, KC_PIPE, KC_4, KC_5, KC_6, KC_MINS,
72 KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV, KC_BSLS, KC_1, KC_2, KC_3, KC_PLUS, 135 KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV, KC_BSLS, KC_1, KC_2, KC_3, KC_PLUS,
73 _______, TG(_GA), _______, MO(_FN), _______, _______, _______, _______, KC_0, KC_DOT, KC_EQL, _______ 136 _______, TG(_GA), _______, _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_EQL, _______
74), 137),
75 138
139/*
140 * Functions
141 *
142 * ,----------------------------------. ,----------------------------------.
143 * | Caps | F9 | F10 | F11 | F12 | | _USER|Whl Up| MUp |Whl Dn| |
144 * +------+------+------+------+------| +------+------+------+------+------|
145 * | | F5 | F6 | F7 | F8 | | Vol ^| MLeft| MDown|MRight| |
146 * +------+------+------+------+------| +------+------+------+------+------|
147 * | | F1 | F2 | F3 | F4 | ,------. ,------. | Vol v| | | | |
148 * +------+------+------+------+------| | | |RClick| +------+------+------+------+------|
149 * | | | |XXXXXX| | | | | | |LClick|MClick| _CO | _GA | RESET|
150 * `----------------------------------' `------' `------' `----------------------------------'
151 *
152 */
76[_FN] = KEYMAP( /* Functions */ 153[_FN] = KEYMAP( /* Functions */
77 KC_DEL, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, KC_F7, KC_F8, KC_F9, KC_F10, 154 KC_CAPS, KC_F9, KC_F10, KC_F11, KC_F12, M(_USER),KC_WH_U, KC_MS_U, KC_WH_D, _______,
78 KC_BSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, _______, KC_F4, KC_F5, KC_F6, KC_F11, 155 _______, KC_F5, KC_F6, KC_F7, KC_F8, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_R, _______,
79 _______, KC_VOLU, KC_MUTE, KC_VOLD, KC_MPLY, _______, KC_F1, KC_F2, KC_F3, KC_F12, 156 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_VOLD, _______, _______, _______, _______,
80 _______, _______, _______, _______, KC_MSTP, _______, _______, _______, KC_NO, DF(_CO), DF(_QW), RESET 157 _______, _______, _______, _______, _______, _______, KC_BTN2, KC_BTN1, KC_BTN3, DF(_CO), DF(_QW), RESET
81), 158),
82 159
160/*
161 * Gaming
162 *
163 * ,----------------------------------. ,----------------------------------.
164 * | | | | | | | |Whl Up| MUp |Whl Dn| |
165 * +------+------+------+------+------| +------+------+------+------+------|
166 * | | | | | | | | MLeft| MDown|MRight| |
167 * +------+------+------+------+------| +------+------+------+------+------|
168 * | Z | | | | | ,------. ,------. | | | | | |
169 * +------+------+------+------+------| | Bksp | |RClick| +------+------+------+------+------|
170 * | | _GA | | Shift| Space| | | | | |LClick|MClick| | | |
171 * `----------------------------------' `------' `------' `----------------------------------'
172 *
173 */
83[_GA] = KEYMAP( /* Gaming */ 174[_GA] = KEYMAP( /* Gaming */
84 _______, _______, _______, _______, _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, 175 _______, _______, _______, _______, _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______,
85 _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, 176 _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,
86 KC_Z, _______, _______, _______, _______, KC_BTN3, _______, KC_MS_D, _______, _______, 177 KC_Z, _______, _______, _______, _______, _______, _______, KC_MS_D, _______, _______,
87 _______, TG(_GA), _______, KC_LSFT, KC_SPC, KC_BSPC, KC_BTN2, KC_BTN1, _______, _______, _______, _______ 178 _______, TG(_GA), _______, KC_LSFT, KC_SPC, KC_BSPC, KC_BTN2, KC_BTN1, KC_BTN3, _______, _______, _______
88)}; 179)};
89 180
181/*
182 * Template
183 *
184 * ,----------------------------------. ,----------------------------------.
185 * | | | | | | | | | | | |
186 * +------+------+------+------+------| +------+------+------+------+------|
187 * | | | | | | | | | | | |
188 * +------+------+------+------+------| +------+------+------+------+------|
189 * | | | | | | ,------. ,------. | | | | | |
190 * +------+------+------+------+------| | | | | +------+------+------+------+------|
191 * | | | | | | | | | | | | | | | |
192 * `----------------------------------' `------' `------' `----------------------------------'
193 *
194 */
195
90const uint16_t PROGMEM fn_actions[] = { 196const uint16_t PROGMEM fn_actions[] = {
91 197
92}; 198};
@@ -95,7 +201,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
95{ 201{
96 // MACRODOWN only works in this function 202 // MACRODOWN only works in this function
97 switch(id) { 203 switch(id) {
98 case 0: 204 case _USER:
99 if (record->event.pressed) { 205 if (record->event.pressed) {
100 register_code(KC_RSFT); 206 register_code(KC_RSFT);
101 } else { 207 } else {
diff --git a/keyboards/atreus/keymaps/replicaJunction/readme.md b/keyboards/atreus/keymaps/replicaJunction/readme.md
index 21af48e8f..6ac3cb00a 100644
--- a/keyboards/atreus/keymaps/replicaJunction/readme.md
+++ b/keyboards/atreus/keymaps/replicaJunction/readme.md
@@ -10,13 +10,15 @@ I won't claim that this layout is perfect for everyone. It does make several sig
10 10
11## Base Layer ## 11## Base Layer ##
12 12
13![Atreus base layout](atreus-replica-base-colemakdh.png) 13![Atreus base layout](atreus-replica-base.png)
14 14
15The letters on this layout are arranged in the [Colemak Mod-DH layout](https://colemakmods.github.io/mod-dh/). 15The letters on this layout are arranged in the [Colemak Mod-DH layout](https://colemakmods.github.io/mod-dh/).
16 16
17Note that there are four dual-purpose keys: Shift (Backspace), Ctrl (Delete), Alt (Enter), and Space (Number layer). In QMK, these dual-role keys can be made to hold their primary key by double-tapping the key and holding on the second tap. For example, if I wanted to insert a long string of Spaces, I would tap the Space key, then tap it again and hold. A single press and hold would trigger the secondary function of the key instead. 17The primary mechanism for the Shift keys in this keyboard are the dual-role Z and slash keys. Pressing the key sends the keystroke, while holding the key sends a shift. This is a design choice taken from the xyverz layout, and one I find much more intuitive than a thumb shift. In addition, the pinky doesn't need to stretch as far to reach these keys as it does to reach a standard Shift key.
18 18
19The secondary Alt on the left bottom row exists to provide a single-hand Alt+Tab shortcut, which would take two rows otherwise. 19Occasionally, when typing the letter Z, I'll hold the key down a fraction of a second too long, and the keyboard will shift instead. If you're not a confident typist, this dual-role Shift key layout is probably not a good solution. In that case, I'd suggest moving Shift onto the Backspace key (press for Backspace, hold for Shift).
20
21In addition to the Shift keys, there are three dual-purpose keys: Ctrl (Delete), Alt (Enter), and Space (Number layer). In QMK, these dual-role keys can be made to hold their primary key with a tap and hold. For example, if I wanted to insert a long string of Spaces, I would tap the Space key, then tap it again and hold. A single press and hold would trigger the secondary function of the key instead.
20 22
21## Extend Layer ## 23## Extend Layer ##
22 24
@@ -42,9 +44,11 @@ This layer also provides plenty of symbol shortcuts. Most of these can be access
42 44
43![Atreus function layer](atreus-replica-function.png) 45![Atreus function layer](atreus-replica-function.png)
44 46
45Function keys (F1-F12) are on this layer, as well as some more generic "functions" such as media keys. I've also set up a mirror image of the arrows from the Extend layer in case I need to use these with my left hand, but I don't do this very often. 47Function keys (F1-F12) are on this layer. Their layout in groups of four comes from Jeremy's Atreus layout in this repository. I'd been using 1-9 in a numpad layout, then adding 10-12 on the side...I suppose it took seeing someone else do it this way for me to realize how much more sense it makes.
48
49On the right side are mouse keys - cursor left/right/up/down, and scroll up/down. Volume keys are also here, though really only because there was room for them (I'm not entirely happy with their positions).
46 50
47The reset key is on this layer, as well as a toggle from Colemak to QWERTY and back. The QWERTY layer is not currently documented, but it is functionally identical to the base layer except for letter positions. 51Finally, the reset key is on this layer, as well as toggles from Colemak to QWERTY and back. The QWERTY layer is not currently documented, but it is functionally identical to the base layer except for letter positions.
48 52
49## Gaming Layer ## 53## Gaming Layer ##
50 54
@@ -54,4 +58,4 @@ This is a small layer developed to allow some simple gameplay without a mouse. T
54 58
55The keys on the left hand bring Space into the left thumb's reach, as well as overriding the dual-role Shift with its standard function (Z in both QWERTY and in Colemak). This allows easy Shift presses without blocking the Z key, commonly used in games. 59The keys on the left hand bring Space into the left thumb's reach, as well as overriding the dual-role Shift with its standard function (Z in both QWERTY and in Colemak). This allows easy Shift presses without blocking the Z key, commonly used in games.
56 60
57I would probably not consider this a hard-core gaming keyboard, and this layout does have the huge problem of blocking access to the number keys, but for more casual games, it plays quite well. I've used it quite a bit on Minecraft, for example, and I'm quite pleased with it. \ No newline at end of file 61I would probably not consider the Atreus a hard-core gaming keyboard in the first place, and this layout does have the huge problem of blocking access to the number keys, but for more casual games, it plays quite well. I've used it quite a bit on Minecraft, for example, and I'm quite pleased with it. \ No newline at end of file
diff --git a/keyboards/atreus62/keymaps/mneme/Makefile b/keyboards/atreus62/keymaps/mneme/Makefile
new file mode 100644
index 000000000..046aec273
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/Makefile
@@ -0,0 +1,5 @@
1TAP_DANCE_ENABLE = yes
2NKRO_ENABLE = true
3MOUSEKEY_ENABLE = no
4EXTRAKEY_ENABLE = yes
5CONSOLE_ENABLE = no
diff --git a/keyboards/atreus62/keymaps/mneme/README.md b/keyboards/atreus62/keymaps/mneme/README.md
new file mode 100644
index 000000000..04ab070be
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/README.md
@@ -0,0 +1,56 @@
1<!-- -*- mode: markdown; fill-column: 8192 -*- -->
2
3Mnemes Swedish Bonaza
4=======================
5
6My Layout in process, most of the code is shamelessly stolen from [algernons][algernon] excellent layout
7
8 [algernon]: https://github.com/algernon/ergodox-layout
9
10It's for Windows (current work forces me to) and Swedish (matter of birth) so ymmw.
11
12## Table of Contents
13
14* [Layouts](#layouts)
15 - [Base layer](#base-layer)
16 - [Nav layer](#nav-layer)
17 - [Sym layer](#sym-layer)
18 - [LED states](#led-states)
19
20# Layouts
21
22## Base layer
23
24![Base layer](img/base.png)
25
26
27* The number row doubles as a function row. Short presses produces numbers, long presses produces Fxx
28* The `Shift`, `Alt`, and `Control` modifiers are one-shot.
29* `Backspace` and `Enter` doubles as switches to the `sym` layer when held
30* The `ESC` key also doubles as a one-shot cancel key.
31* The **Lead** key is followed by a sequence of keys.
32 - `LEAD l` : `lgui+l`.
33 - `LEAD s l` : `λ`.
34 - `LEAD s s` : `¯\_(ツ)_/¯`
35 - `LEAD s f` : `凸(ツ)凸`
36 - `LEAD a *` : Application switching based on position in start menu. Very specific to my computer.
37
38
39## Nav layer
40
41![Nav layer](img/fun.png)
42
43Basic navigation on the right hand and modifiers close
44by for the left. The latter because I tend to use `ctrl+arrows` quite a lot.
45
46## Sym layer
47
48![Sym layer](img/sym.png)
49
50* Easy access to most symbols I use on a daily basis. Most common are on the home row, the rest are grouped as best as I could.
51
52- `eq` : Tapdance, produces `===` and `!==`
53- `fun`: Tapdance, produces `=>` and `() => {\n`
54
55# License
56 GPL-3+
diff --git a/keyboards/atreus62/keymaps/mneme/config.h b/keyboards/atreus62/keymaps/mneme/config.h
new file mode 100644
index 000000000..2c2a08c05
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/config.h
@@ -0,0 +1,7 @@
1#define ONESHOT_TIMEOUT 3000
2#define TAPPING_TERM 200
3#define PREVENT_STUCK_MODIFIERS
4
5#define LEADER_TIMEOUT 1000
6
7#include "../../config.h"
diff --git a/keyboards/atreus62/keymaps/mneme/img/base.png b/keyboards/atreus62/keymaps/mneme/img/base.png
new file mode 100644
index 000000000..86907d544
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/img/base.png
Binary files differ
diff --git a/keyboards/atreus62/keymaps/mneme/img/fun.png b/keyboards/atreus62/keymaps/mneme/img/fun.png
new file mode 100644
index 000000000..ec5a478c6
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/img/fun.png
Binary files differ
diff --git a/keyboards/atreus62/keymaps/mneme/img/sym.png b/keyboards/atreus62/keymaps/mneme/img/sym.png
new file mode 100644
index 000000000..11b5bd4b0
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/img/sym.png
Binary files differ
diff --git a/keyboards/atreus62/keymaps/mneme/keymap.c b/keyboards/atreus62/keymaps/mneme/keymap.c
new file mode 100644
index 000000000..7c1879982
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/keymap.c
@@ -0,0 +1,337 @@
1#include <stdarg.h>
2#include "atreus62.h"
3#include "led.h"
4#include "action_layer.h"
5#include "action_util.h"
6
7/*
8 *WINDOWS SWEDISH
9 */
10#define KN_HALF KC_GRV // 1/2
11#define KN_PLUS KC_MINS // +
12#define KN_ACUT KC_EQL // ´
13#define KN_AO KC_LBRC // Å
14#define KN_UMLA KC_RBRC // ¨
15#define KN_OE KC_SCLN // Ö
16#define KN_AE KC_QUOT // Ä
17#define KN_QUOT KC_NUHS // '
18#define KN_LABK KC_NUBS // <
19#define KN_MINS KC_SLSH // -
20#define KN_EXLM LSFT(KC_1) // !
21#define KN_DQT LSFT(KC_2) // "
22#define KN_AT RALT(KC_2) // @
23#define KN_HASH LSFT(KC_3) // #
24#define KN_DLR RALT(KC_4) // $
25#define KN_PERC LSFT(KC_5) // %
26#define KN_AMPR LSFT(KC_6) // &
27#define KN_SLSH LSFT(KC_7) // /
28#define KN_LPRN LSFT(KC_8) // (
29#define KN_RPRN LSFT(KC_9) // )
30#define KN_EQL LSFT(KC_0) // =
31#define KN_UNDS LSFT(KN_MINS) // _
32#define KN_QUES LSFT(KN_PLUS) // ?
33#define KN_GRAV LSFT(KN_ACUT) // `
34#define KN_LCBR RALT(KC_7) // {
35#define KN_RCBR RALT(KC_0) // }
36#define KN_LBRC RALT(KC_8) // [
37#define KN_RBRC RALT(KC_9) // ]
38#define KN_RABK LSFT(KN_LABK) // <
39#define KN_COLN LSFT(KC_DOT) // :
40#define KN_SCLN LSFT(KC_COMM) // :
41#define KN_PIPE RALT(KN_LABK) // |
42#define KN_QUES LSFT(KN_PLUS) // ?
43#define KN_CIRC LSFT(KN_UMLA) // ^
44#define KN_ASTR LSFT(KN_QUOT) // *
45#define KN_TILD RALT(KN_UMLA) // ~
46#define KN_BSLS RALT(KN_PLUS) //
47
48#define OSM_LCTL OSM(MOD_LCTL)
49#define OSM_LALT OSM(MOD_LALT)
50#define OSM_LSFT OSM(MOD_LSFT)
51
52#define KC_HYP LSFT(LALT(LCTL(KC_LGUI)))
53
54#define KC_COPY LCTL(KC_C)
55#define KC_PASTE LCTL(KC_V)
56#define KC_UNDO LCTL(KC_Z)
57#define KC_REDO LCTL(LSFT(KC_Z))
58
59// Layers
60enum {
61 BASE = 0,
62 NAV,
63 SYM
64};
65
66//Macros
67enum {
68 KF_1 = 0, // 1, F1
69 KF_2, // ...
70 KF_3,
71 KF_4,
72 KF_5,
73 KF_6,
74 KF_7,
75 KF_8,
76 KF_9,
77 KF_10,
78 KF_11,
79 KF_12
80};
81
82// Tapdance
83enum {
84 TD_FUN = 0,
85 TD_EQ
86};
87
88//Custom keycodes
89enum {
90 PLACEHOLDER = SAFE_RANGE
91};
92
93//State and timers
94uint16_t kf_timers[12];
95
96
97
98const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
99
100 [BASE] = {
101
102 { M(KF_11) ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,KC_NO ,M(KF_6) ,M(KF_7) ,M(KF_8) ,M(KF_9) ,M(KF_10) ,M(KF_12) },
103 { KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_NO ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KN_AO },
104 { OSM_LCTL ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_NO ,KC_H ,KC_J ,KC_K ,KC_L ,KN_OE ,KN_AE },
105 { OSM_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_DELT ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KN_MINS ,OSM_LSFT },
106 { MO(NAV) ,OSM_LCTL ,OSM_LALT ,KC_LGUI ,KC_SPC ,LT(SYM,KC_BSPC) ,KC_HYP ,LT(SYM,KC_ENT) ,KC_SPC ,KC_LEAD ,KC_LALT ,KC_LCTRL ,MO(NAV) }
107
108 },
109 [NAV] = {
110
111 { KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS },
112 { KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_NO ,KC_PGUP ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS },
113 { KC_TRNS ,KC_LSFT ,KC_LCTL ,KC_LALT ,KC_L ,KC_TRNS ,KC_NO ,KC_PGDN ,KC_LEFT ,KC_DOWN ,KC_RIGHT ,KC_TRNS ,KC_TRNS },
114 { KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS },
115 { KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_VOLD ,KC_VOLU }
116
117 },
118 [SYM] = {
119
120 { KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,TD(TD_EQ) ,KC_NO ,TD(TD_FUN) ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS },
121 { KC_TRNS ,KN_LABK ,KN_RABK ,KN_LCBR ,KN_RCBR ,KN_PLUS ,KC_NO ,KN_AT ,KN_DQT ,KN_QUOT ,KN_GRAV ,KN_SLSH ,KC_TRNS },
122 { KC_TRNS ,KN_EXLM ,KN_EQL ,KN_LPRN ,KN_RPRN ,KN_MINS ,KC_NO ,KN_UNDS ,KN_SCLN ,KN_COLN ,KN_AMPR ,KN_PIPE ,KC_TRNS },
123 { KC_TRNS ,KN_DLR ,KN_PERC ,KN_LBRC ,KN_RBRC ,KN_ASTR ,KC_TRNS ,KN_HASH ,KC_COMM ,KC_DOT ,KN_QUES ,KN_BSLS ,KC_TRNS },
124 { KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS }
125
126 }
127};
128
129#define TAP_ONCE(code) \
130 register_code (code); \
131 unregister_code (code)
132
133static void m_tapn (uint8_t code, ...) {
134 uint8_t kc = code;
135 va_list ap;
136
137 va_start(ap, code);
138 do {
139 register_code(kc);
140 unregister_code(kc);
141 wait_ms(50);
142 kc = va_arg(ap, int);
143 } while (kc != 0);
144 va_end(ap);
145}
146
147static void m_handle_kf (keyrecord_t *record, uint8_t id) {
148 uint8_t code = id - KF_1;
149
150 if (record->event.pressed) {
151 kf_timers[code] = timer_read ();
152 } else {
153 uint8_t kc_base;
154 uint8_t long_press = (kf_timers[code] && timer_elapsed (kf_timers[code]) > TAPPING_TERM);
155
156 kf_timers[code] = 0;
157
158 switch(id){
159 case KF_1 ... KF_10:
160 if (long_press) {
161 // Long press
162 kc_base = KC_F1;
163 } else {
164 kc_base = KC_1;
165 }
166 code += kc_base;
167 break;
168 case KF_11:
169 code = long_press ? KC_F11 : KC_ESC;
170 break;
171 case KF_12:
172 code = long_press ? KC_F12 : KN_PLUS;
173 break;
174 }
175 register_code (code);
176 unregister_code (code);
177 }
178}
179
180const uint16_t PROGMEM fn_actions[] = {
181};
182
183const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
184{
185 switch (id) {
186 case KF_1 ... KF_12:
187 m_handle_kf(record, id);
188 break;
189 }
190 return MACRO_NONE;
191};
192
193// Custom keycodes
194bool process_record_user(uint16_t keycode, keyrecord_t *record) {
195 bool queue = true;
196
197 //Cancle one-shot mods.
198 switch (keycode) {
199 case KC_ESC:
200 if (record->event.pressed && get_oneshot_mods() && !has_oneshot_mods_timed_out()) {
201 clear_oneshot_mods();
202 queue = false;
203 }
204 break;
205 }
206 return queue;
207}
208
209// TAP DANCE SETTINGS
210void dance_eq (qk_tap_dance_state_t *state, void *user_data) {
211 switch (state->count) {
212 case 1: // ===
213 register_code(KC_LSHIFT);
214 m_tapn(KC_0, KC_0, KC_0, 0);
215 unregister_code(KC_LSHIFT);
216 break;
217 case 2:
218 register_code(KC_LSHIFT);
219 m_tapn(KC_1, KC_0, KC_0, 0);
220 unregister_code(KC_LSHIFT);
221 break;
222 default:
223 reset_tap_dance(state);
224 }
225}
226
227void dance_fun (qk_tap_dance_state_t *state, void *user_data) {
228 switch (state->count) {
229 case 1: // =>
230 register_code(KC_LSHIFT);
231 m_tapn(KC_0, KN_LABK, 0);
232 unregister_code(KC_LSHIFT);
233 break;
234 case 2: // () => {}
235 register_code(KC_LSHIFT);
236 m_tapn(KC_8, KC_9, KC_SPC, KC_0, KN_LABK, KC_SPC, 0);
237 unregister_code(KC_LSHIFT);
238 register_code(KC_RALT);
239 m_tapn(KC_7, 0);
240 unregister_code(KC_RALT);
241 TAP_ONCE(KC_ENT);
242 break;
243 default:
244 reset_tap_dance(state);
245 }
246}
247
248qk_tap_dance_action_t tap_dance_actions[] = {
249 [TD_FUN] = ACTION_TAP_DANCE_FN (dance_fun)
250 ,[TD_EQ] = ACTION_TAP_DANCE_FN (dance_eq)
251};
252
253// Runs just one time when the keyboard initializes.
254void matrix_init_user(void) {
255 set_unicode_input_mode(UC_WINC);
256};
257
258LEADER_EXTERNS();
259// Runs constantly in the background, in a loop.
260void matrix_scan_user(void) {
261 LEADER_DICTIONARY() {
262 leading = false;
263 leader_end();
264 SEQ_ONE_KEY(KC_L){
265 register_code(KC_RGUI);
266 TAP_ONCE(KC_L);
267 unregister_code(KC_RGUI);
268 };
269
270
271 SEQ_TWO_KEYS (KC_A, KC_W) {
272 //Web - chrome
273 register_code (KC_LGUI); TAP_ONCE (KC_1); unregister_code (KC_LGUI);
274 }
275 SEQ_TWO_KEYS (KC_A, KC_P) {
276 //sPotify
277 register_code (KC_LGUI); TAP_ONCE (KC_2); unregister_code (KC_LGUI);
278
279 }
280 SEQ_TWO_KEYS (KC_A, KC_T) {
281 //Total Commander
282 register_code (KC_LGUI); TAP_ONCE (KC_3); unregister_code (KC_LGUI);
283
284 }
285 SEQ_TWO_KEYS (KC_A, KC_A) {
286 //Atom
287 register_code (KC_LGUI); TAP_ONCE (KC_4); unregister_code (KC_LGUI);
288
289 }
290 SEQ_TWO_KEYS (KC_A, KC_E) {
291 //Emacs
292 register_code (KC_LGUI); TAP_ONCE (KC_5); unregister_code (KC_LGUI);
293
294 }
295 SEQ_TWO_KEYS (KC_A, KC_C) {
296 //Cmdr
297 register_code (KC_LGUI); TAP_ONCE (KC_6); unregister_code (KC_LGUI);
298
299 }
300 SEQ_TWO_KEYS (KC_A, KC_S) {
301 //Slack
302 register_code (KC_LGUI); TAP_ONCE (KC_7); unregister_code (KC_LGUI);
303 }
304
305
306 SEQ_TWO_KEYS (KC_S, KC_S) {
307 // ¯\_(ツ)_/¯
308 unicode_input_start(); register_hex(0xaf); unicode_input_finish();
309 register_code (KC_LALT);
310 register_code (KC_LCTL);
311 TAP_ONCE (KN_PLUS);
312 unregister_code (KC_LCTL);
313 unregister_code (KC_LALT);
314
315 register_code (KC_RSFT); TAP_ONCE (KC_8); unregister_code (KC_RSFT);
316 unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
317 register_code (KC_RSFT); TAP_ONCE (KC_9); TAP_ONCE(KC_7); unregister_code (KC_RSFT);
318 unicode_input_start (); register_hex(0xaf); unicode_input_finish();
319 }
320
321 SEQ_TWO_KEYS (KC_S, KC_F) {
322 // 凸(ツ)凸
323 unicode_input_start(); register_hex(0x51F8); unicode_input_finish();
324 register_code (KC_RSFT); TAP_ONCE (KC_8); unregister_code (KC_RSFT);
325 unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
326 register_code (KC_RSFT); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
327 unicode_input_start (); register_hex(0x51F8); unicode_input_finish();
328 }
329
330 SEQ_TWO_KEYS (KC_S, KC_L) {
331 // λ
332 unicode_input_start();
333 register_hex(0x03bb);
334 unicode_input_finish();
335 }
336 };
337};
diff --git a/keyboards/atreus62/keymaps/mneme/unicode b/keyboards/atreus62/keymaps/mneme/unicode
new file mode 100644
index 000000000..b3f62b6d3
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/unicode
@@ -0,0 +1,114 @@
1Todo
2☐ 2610 Todo
3☑ 2611 Done
4☒ 2612 Failed
5
6Operator
7× 00D7 Multiplication
8÷ 00F7 Division
9≤ 2264 LessEqual
10≥ 2265 MoreEqual
11± 00B1 Plusminus
12
13Math
14∏ 220F Product
15∑ 2211 Sum
16≈ 2248 Almost
17≡ 2261 Equivalent
18∞ 221E Infinity
19‰ 2030 Mille
20
21Set
22⊂ 2282 Subset
23⊃ 2283 sUperset
24∩ 2229 Intersextion
25∪ 222A Union
26∈ 2208 Element
27∉ 2209 Notelement
28∍ 220D Contains
29∌ 220C doesNotcontain
30
31Logic
32¬ 00AC Not
33∧ 2227 And
34∨ 2228 Or
35∃ 2203 Exists
36∄ 2204 Notexists
37
38Greek
39µ 00B5 Micro
40λ 03BB Lamda
41Ω 2126 Omega
42α 03B1 Alpha
43β 03B2 Beta
44γ 03B3 Gamma
45π 03C0 Pi
46δ 03B4 Delta
47
48Other
49☁ 2601 Cloud
50☼ 263C Sun
51☂ 2602 Rain
52☠ 2620 Skull
53♺ 267A Recycle
54👍1F44D thumbsUp
55👎1F44E thumbsDown
56💩 1F4A9 Poo
57
58
59//Todo
60SEQ_THREE_KEYS(KC_U, KC_G, KC_T){m_unicode(0x2610);}; // Todo
61SEQ_THREE_KEYS(KC_U, KC_G, KC_D){m_unicode(0x2611);}; // Done
62SEQ_THREE_KEYS(KC_U, KC_G, KC_F){m_unicode(0x2612);}; // Failed
63
64//Operator
65SEQ_THREE_KEYS(KC_U, KC_O, KC_M){m_unicode(0x00D7);}; // Multiplication
66SEQ_THREE_KEYS(KC_U, KC_O, KC_D){m_unicode(0x00F7);}; // Division
67SEQ_THREE_KEYS(KC_U, KC_O, KC_L){m_unicode(0x2264);}; // LessEqual
68SEQ_THREE_KEYS(KC_U, KC_O, KC_M){m_unicode(0x2265);}; // MoreEqual
69SEQ_THREE_KEYS(KC_U, KC_O, KC_P){m_unicode(0x00B1);}; // Plusminus
70
71//Math
72SEQ_THREE_KEYS(KC_U, KC_M, KC_P){m_unicode(0x220F);}; // Product
73SEQ_THREE_KEYS(KC_U, KC_M, KC_S){m_unicode(0x2211);}; // Sum
74SEQ_THREE_KEYS(KC_U, KC_M, KC_A){m_unicode(0x2248);}; // Almost
75SEQ_THREE_KEYS(KC_U, KC_M, KC_E){m_unicode(0x2261);}; // Equivalent
76SEQ_THREE_KEYS(KC_U, KC_M, KC_I){m_unicode(0x221E);}; // Infinity
77SEQ_THREE_KEYS(KC_U, KC_M, KC_M){m_unicode(0x2030);}; // Mille
78
79//Set
80SEQ_THREE_KEYS(KC_U, KC_S, KC_S){m_unicode(0x2282);}; Subset
81SEQ_THREE_KEYS(KC_U, KC_S, KC_P){m_unicode(0x2283);}; suPerset
82SEQ_THREE_KEYS(KC_U, KC_S, KC_I){m_unicode(0x2229);}; Intersection
83SEQ_THREE_KEYS(KC_U, KC_S, KC_U){m_unicode(0x222A);}; Union
84SEQ_THREE_KEYS(KC_U, KC_S, KC_E){m_unicode(0x2208);}; Element
85SEQ_THREE_KEYS(KC_U, KC_S, KC_N){m_unicode(0x2209);}; Notelement
86SEQ_THREE_KEYS(KC_U, KC_S, KC_C){m_unicode(0x220D);}; Contains
87SEQ_THREE_KEYS(KC_U, KC_S, KC_D){m_unicode(0x220C);}; doesNotcontain
88
89//Logic
90SEQ_THREE_KEYS(KC_U, KC_L, KC_N){m_unicode(0x00AC);}; // Not
91SEQ_THREE_KEYS(KC_U, KC_L, KC_A){m_unicode(0x2227);}; // And
92SEQ_THREE_KEYS(KC_U, KC_L, KC_O){m_unicode(0x2228);}; // Or
93SEQ_THREE_KEYS(KC_U, KC_L, KC_E){m_unicode(0x2203);}; // Exists
94SEQ_THREE_KEYS(KC_U, KC_L, KC_N){m_unicode(0x2204);}; // Notexists
95
96//Greek
97SEQ_THREE_KEYS(KC_U, KC_G, KC_M){m_unicode(0x00B5);}; // Micro
98SEQ_THREE_KEYS(KC_U, KC_G, KC_L){m_unicode(0x03BB);}; // Lamda
99SEQ_THREE_KEYS(KC_U, KC_G, KC_O){m_unicode(0x2126);}; // Omega
100SEQ_THREE_KEYS(KC_U, KC_G, KC_A){m_unicode(0x03B1);}; // Alpha
101SEQ_THREE_KEYS(KC_U, KC_G, KC_B){m_unicode(0x03B2);}; // Beta
102SEQ_THREE_KEYS(KC_U, KC_G, KC_G){m_unicode(0x03B3);}; // Gamma
103SEQ_THREE_KEYS(KC_U, KC_G, KC_P){m_unicode(0x03C0);}; // Pi
104SEQ_THREE_KEYS(KC_U, KC_G, KC_D){m_unicode(0x03B4);}; // Delta
105
106//Zother
107SEQ_THREE_KEYS(KC_U, KC_Z, KC_C){m_unicode(0x2601);}; // Cloud
108SEQ_THREE_KEYS(KC_U, KC_Z, KC_S){m_unicode(0x263C);}; // Sun
109SEQ_THREE_KEYS(KC_U, KC_Z, KC_R){m_unicode(0x2602);}; // Rain
110SEQ_THREE_KEYS(KC_U, KC_Z, KC_K){m_unicode(0x2620);}; // sKull
111SEQ_THREE_KEYS(KC_U, KC_Z, KC_R){m_unicode(0x267A);}; // rEcycle
112SEQ_THREE_KEYS(KC_U, KC_Z, KC_U){m_unicode(0x1F44D);}; // thumbsUp
113SEQ_THREE_KEYS(KC_U, KC_Z, KC_D){m_unicode(0x1F44E);}; // thumbsDown
114SEQ_THREE_KEYS(KC_U, KC_Z, KC_P){m_unicode(0x1F4A9);}; // Poo
diff --git a/keyboards/ergodox/config.h b/keyboards/ergodox/config.h
index 994a8c643..361859832 100644
--- a/keyboards/ergodox/config.h
+++ b/keyboards/ergodox/config.h
@@ -34,4 +34,4 @@
34#endif 34#endif
35 35
36 36
37#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */ 37#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */ \ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/bryan/keymap.c b/keyboards/ergodox/keymaps/bryan/keymap.c
new file mode 100644
index 000000000..572cea8cd
--- /dev/null
+++ b/keyboards/ergodox/keymaps/bryan/keymap.c
@@ -0,0 +1,226 @@
1#include "ergodox.h"
2#include "debug.h"
3#include "action_layer.h"
4#include "version.h"
5
6#define BASE 0 // default layer
7#define SYMB 1 // symbols
8#define MDIA 2 // media keys
9
10enum custom_keycodes {
11 PLACEHOLDER = SAFE_RANGE, // can always be here
12 EPRM,
13 VRSN,
14 RGB_SLD
15};
16
17const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
18/* Keymap 0: Basic layer
19 *
20 * ,--------------------------------------------------------. ,--------------------------------------------------------.
21 * | = | 1 | 2 | 3 | 4 | 5 | Cmd,Shft,[ | | Cmd,Shft,] | 6 | 7 | 8 | 9 | 0 | - |
22 * |--------+------+------+------+------+-------------------| |------------+------+------+------+------+------+--------|
23 * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
24 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
25 * |BkSp/Cmd| A | S | D | F | G |------------| |------------| H | J | K | L |; / L2|' / Cmd |
26 * |--------+------+------+------+------+------| Hyper | | Meh |------+------+------+------+------+--------|
27 * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
28 * `--------+------+------+------+------+-------------------' `-------------+------+------+------+------+--------'
29 * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
30 * `----------------------------------' `----------------------------------'
31 * ,-------------. ,-------------.
32 * |Ctrl/Esc|PgUp| | App | LGui |
33 * ,------|------|------| |------+--------+------.
34 * | | | PgDn | | Home | | |
35 * | Space|Backsp|------| |------| Tab |Enter |
36 * | |ace | Esc | | Alt | | |
37 * `--------------------' `----------------------'
38 */
39// If it accepts an argument (i.e, is a function), it doesn't need KC_.
40// Otherwise, it needs KC_*
41[BASE] = KEYMAP( // layer 0 : default
42 // left hand
43 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, M(2),
44 KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
45 GUI_T(KC_BSPC), KC_A, KC_S, KC_D, KC_F, KC_G,
46 KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
47 LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
48 CTL_T(KC_ESC),KC_PGUP,
49 KC_PGDN,
50 KC_SPC,KC_BSPC, KC_ESC,
51 // right hand
52 M(3), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
53 TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
54 KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
55 MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
56 KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
57
58 ALT_T(KC_APP), KC_LGUI,
59 KC_HOME,
60 KC_LALT,KC_TAB, KC_ENT
61 ),
62/* Keymap 1: Symbol Layer
63 *
64 * ,--------------------------------------------------. ,--------------------------------------------------.
65 * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
66 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
67 * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
68 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
69 * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
70 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
71 * | | % | ^ | [ | ] | ~ | | | | <- | 1 | 2 | 3 | \ | |
72 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
73 * | | | | | | | | . | 0 | = | |
74 * `----------------------------------' `----------------------------------'
75 * ,-------------. ,-------------.
76 * | | | | | |
77 * ,------|------|------| |------+------+------.
78 * | | | | | | | |
79 * | | |------| |------| | |
80 * | | | | | | | |
81 * `--------------------' `--------------------'
82 */
83// SYMBOLS
84[SYMB] = KEYMAP(
85 // left hand
86 KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
87 KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
88 KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
89 KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
90 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
91 KC_TRNS,KC_TRNS,
92 KC_TRNS,
93 KC_TRNS,KC_TRNS,KC_TRNS,
94 // right hand
95 KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
96 KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
97 KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
98 KC_TRNS, M(1), KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
99 KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
100 KC_TRNS, KC_TRNS,
101 KC_TRNS,
102 KC_TRNS, KC_TRNS, KC_TRNS
103),
104// KC_COMM, KC_MINS
105
106/* Keymap 2: Media and mouse keys
107 *
108 * ,--------------------------------------------------. ,--------------------------------------------------.
109 * | | | | | | | | | | | | | | | |
110 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
111 * | | | | MsUp | | | | | | | | | | | |
112 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
113 * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
114 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
115 * | | | | | | | | | | | | Prev | Next | | |
116 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
117 * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
118 * `----------------------------------' `----------------------------------'
119 * ,-------------. ,-------------.
120 * | | | | | |
121 * ,------|------|------| |------+------+------.
122 * | | | | | | |Brwser|
123 * | | |------| |------| |Back |
124 * | | | | | | | |
125 * `--------------------' `--------------------'
126 */
127// MEDIA AND MOUSE
128[MDIA] = KEYMAP(
129 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
130 KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
131 KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
132 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
133 KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
134 KC_TRNS, KC_TRNS,
135 KC_TRNS,
136 KC_TRNS, KC_TRNS, KC_TRNS,
137 // right hand
138 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
139 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
140 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
141 KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
142 KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
143 KC_TRNS, KC_TRNS,
144 KC_TRNS,
145 KC_TRNS, KC_TRNS, KC_WBAK
146),
147};
148
149const uint16_t PROGMEM fn_actions[] = {
150 [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
151};
152
153const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
154{
155 // MACRODOWN only works in this function
156 switch(id) {
157 case 0:
158 if (record->event.pressed) {
159 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
160 }
161 break;
162 case 1:
163 if (record->event.pressed) { // For resetting EEPROM
164 eeconfig_init();
165 }
166 break;
167 }
168 return MACRO_NONE;
169};
170
171bool process_record_user(uint16_t keycode, keyrecord_t *record) {
172 switch (keycode) {
173 // dynamically generate these.
174 case EPRM:
175 if (record->event.pressed) {
176 eeconfig_init();
177 }
178 return false;
179 break;
180 case VRSN:
181 if (record->event.pressed) {
182 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
183 }
184 return false;
185 break;
186 case RGB_SLD:
187 if (record->event.pressed) {
188 #ifdef RGBLIGHT_ENABLE
189 rgblight_mode(1);
190 #endif
191 }
192 return false;
193 break;
194 }
195 return true;
196}
197
198// Runs just one time when the keyboard initializes.
199void matrix_init_user(void) {
200
201};
202
203
204// Runs constantly in the background, in a loop.
205void matrix_scan_user(void) {
206
207 uint8_t layer = biton32(layer_state);
208
209 ergodox_board_led_off();
210 ergodox_right_led_1_off();
211 ergodox_right_led_2_off();
212 ergodox_right_led_3_off();
213 switch (layer) {
214 // TODO: Make this relevant to the ErgoDox EZ.
215 case 1:
216 ergodox_right_led_1_on();
217 break;
218 case 2:
219 ergodox_right_led_2_on();
220 break;
221 default:
222 // none
223 break;
224 }
225
226};
diff --git a/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-base-layout.png b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-base-layout.png
new file mode 100644
index 000000000..4208c5189
--- /dev/null
+++ b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-base-layout.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-1-symbols.png b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-1-symbols.png
new file mode 100644
index 000000000..ccda70e39
--- /dev/null
+++ b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-1-symbols.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-2-media-and-mouse.png b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-2-media-and-mouse.png
new file mode 100644
index 000000000..481e63e32
--- /dev/null
+++ b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-2-media-and-mouse.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-3-navigation.png b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-3-navigation.png
new file mode 100644
index 000000000..9ebba6734
--- /dev/null
+++ b/keyboards/ergodox/keymaps/deadcyclo/images/deadcyclo-layer-3-navigation.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/deadcyclo/readme.md b/keyboards/ergodox/keymaps/deadcyclo/readme.md
index 915507440..809dd6eb5 100644
--- a/keyboards/ergodox/keymaps/deadcyclo/readme.md
+++ b/keyboards/ergodox/keymaps/deadcyclo/readme.md
@@ -5,6 +5,32 @@ some common keys might be missing, as this layout is intented to be used on *nix
5with their system. The layout is geared towards avoiding using the rat (mouse for those of you who are 5with their system. The layout is geared towards avoiding using the rat (mouse for those of you who are
6unfamiliar with tiling window managers) as much as possibly. 6unfamiliar with tiling window managers) as much as possibly.
7 7
8# Layouts
9
10All layer images created using [keyboard-layout-editor](http://www.keyboard-layout-editor.com/)
11
12## Base layer
13
14[![Base layer](images/deadcyclo-base-layout.png)](http://www.keyboard-layout-editor.com/#/gists/0321b18620180a3e46c498206eb65366)
15
16## Layer 1 - Symbols
17
18[![Layer 1 - Symbols](images/deadcyclo-layer-1-symbols.png)](http://www.keyboard-layout-editor.com/#/gists/96714e198054c9115bafb5267cc6bc73)
19
20## Layer 2 - Media and Mouse
21
22[![Layer 2 - Media and Mouse](images/deadcyclo-layer-2-media-and-mouse.png)](http://www.keyboard-layout-editor.com/#/gists/824759486e378bcec30784309a7e5731)
23
24## Layer 3 - Navigation
25
26[![Layer 3 - Navigation](images/deadcyclo-layer-3-navigation.png)](http://www.keyboard-layout-editor.com/#/gists/67d9613dcd873c68693d11863d0fd289)
27
8# Changelog 28# Changelog
9 29
10- 02.01.2017 Added delete key on second layer 30- 02.01.2017 Added delete key on second layer
31- 10.01.2017 Added layer images to readme
32
33# TODO
34
35- Add unicode support (direct input and indirect? see algernon layout for examples)
36- Add descriptions below each layer image of any special functions/keys
diff --git a/keyboards/ergodox/keymaps/replicaJunction/config.h b/keyboards/ergodox/keymaps/replicaJunction/config.h
new file mode 100644
index 000000000..d32b46e4e
--- /dev/null
+++ b/keyboards/ergodox/keymaps/replicaJunction/config.h
@@ -0,0 +1,63 @@
1/*
2Config file - Ergodox QMK with replicaJunction layout
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 KEYBOARDS_ERGODOX_CONFIG_H_
19#define KEYBOARDS_ERGODOX_CONFIG_H_
20
21#define MOUSEKEY_DELAY 100
22#define MOUSEKEY_INTERVAL 20
23#define MOUSEKEY_MAX_SPEED 3
24#define MOUSEKEY_TIME_TO_MAX 10
25
26#define TAPPING_TOGGLE 1
27
28/* define if matrix has ghost */
29//#define MATRIX_HAS_GHOST
30
31// MS the button needs to be held before a tap becomes a hold (default: 200)
32#define TAPPING_TERM 200
33
34#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
35
36// I don't have any locking keys, so I don't need these features
37
38
39/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
40
41//#define LOCKING_SUPPORT_ENABLE
42/* Locking resynchronize hack */
43//#define LOCKING_RESYNC_ENABLE
44
45/* Prevent modifiers from sticking when switching layers */
46/* Uses 5 bytes of memory per 8 keys, but makes sure modifiers don't get "stuck" switching layers */
47#define PREVENT_STUCK_MODIFIERS
48
49/* key combination for command */
50#define IS_COMMAND() ( \
51 keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
52 keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
53)
54
55#ifdef SUBPROJECT_ez
56 #include "ez/config.h"
57#endif
58#ifdef SUBPROJECT_infinity
59 #include "infinity/config.h"
60#endif
61
62
63#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */
diff --git a/keyboards/ergodox/keymaps/replicaJunction/keymap.c b/keyboards/ergodox/keymaps/replicaJunction/keymap.c
new file mode 100644
index 000000000..c9213553c
--- /dev/null
+++ b/keyboards/ergodox/keymaps/replicaJunction/keymap.c
@@ -0,0 +1,336 @@
1/*
2 * Keyboard: Ergodox
3 * Keymap: replicaJunction
4 * Version: 1.2
5 *
6 * This keymap is designed to complement my Atreus keyboard layout, found in keyboards/atreus.
7 * The Atreus keyboard is a 40% board whose design was heavily influenced by the Ergodox, and I now
8 * have both keyboards, so I've designed these layouts in an effort to make switching between the
9 * two as easy as possible.
10 *
11 * I've also tried to make use of the extra keys on the Ergodox in as logical of a manner as possible,
12 * adding to the layers in the Atreus config without disturbing what's there already. This allows for
13 * things like F11-F20, the Application (Menu) key, and better media key placement.
14 *
15 * The default key layout in this keymap is Colemak-ModDH. Information on that layout can be found
16 * here: https://colemakmods.github.io/mod-dh/
17 */
18
19#include "ergodox.h"
20#include "debug.h"
21#include "action_layer.h"
22
23#define _CO 0 // Colemak
24#define _QW 1 // QWERTY
25#define _ME 2 // media keys
26#define _NU 3 // numpad
27#define _EX 4 // extend
28#define _GA 5 // mouse overlay for gaming
29
30// Some quick aliases, just to make it look pretty
31#define _______ KC_TRNS
32#define KCX_CGR LCTL(KC_GRV)
33#define KX_STAB LSFT(KC_TAB)
34#define KX_COPY LCTL(KC_C)
35#define KX_CUT LCTL(KC_X)
36#define KX_PAST LCTL(KC_V)
37#define KX_UNDO LCTL(KC_Z)
38
39; // This doesn't do anything. It's just for VSCode because its syntax highlighting is weird for the above #define statements.
40
41const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
42 /*
43 * Keymap: Colemak-ModDH
44 *
45 * ,--------------------------------------------------. ,--------------------------------------------------.
46 * | ` | 1 | 2 | 3 | 4 | 5 | Esc | | | 6 | 7 | 8 | 9 | 0 | = |
47 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
48 * | LCtrl | Q | W | F | P | B | Home | | BkSp | J | L | U | Y | ; | - |
49 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
50 * | Tab | A | R | S | T | G |------| |------| M | N | E | I | O | ' |
51 * |--------+------+------+------+------+------| Hyper| | \ |------+------+------+------+------+--------|
52 * | LShft | Z | X | C | D | V | | | | K | H | , | , | / | RShft |
53 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
54 * | LGui | [ | ] |CtlShf| LAlt | | _EX | - | ' | = | \ |
55 * `----------------------------------' `----------------------------------'
56 * ,-------------. ,-------------.
57 * | LCtrl| ~GA | | Left | Right|
58 * ,------|------|------| |------+------+------.
59 * |LCtrl/| LAlt/| Home | | Up | Alt/| _NU/ |
60 * | BkSp | Del |------| |------| Enter| Space|
61 * | | | _NU | | Down | | |
62 * `--------------------' `--------------------'
63 */
64[_CO] = KEYMAP(
65 // left hand
66 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
67 KC_LCTL,KC_Q, KC_W, KC_F, KC_P, KC_B, KC_HOME,
68 KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_G,
69 KC_LSFT,KC_Z, KC_X, KC_C, KC_D, KC_V, ALL_T(KC_NO),
70 KC_LGUI,KC_LBRC,KC_RBRC, LCTL(KC_LSFT), KC_LALT,
71
72 KC_LCTL, TG(_GA),
73 KC_HOME,
74 CTL_T(KC_BSPC), ALT_T(KC_DEL), MO(_NU),
75 // right hand
76 KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
77 KC_BSPC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,KC_MINS,
78 KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
79 KC_BSLS, KC_K, KC_H, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,
80 MO(_EX),KC_MINS,KC_QUOT,KC_EQL, KC_BSLS,
81
82 KC_LEFT, KC_RGHT,
83 KC_UP,
84 KC_DOWN, ALT_T(KC_ENT), LT(_NU,KC_SPC)
85 ),
86
87 /*
88 * Keymap: QWERTY layout.
89 *
90 * This is optimized for gaming, not typing, so there aren't as many macros
91 * as the Dvorak layer. Some of the keys have also been moved to "game-
92 * like" locations, such as making the spacebar available to the left thumb,
93 * and repositioning the arrow keys at the bottom right corner.
94 *
95 * ,--------------------------------------------------. ,--------------------------------------------------.
96 * | ` | 1 | 2 | 3 | 4 | 5 | Esc | | | 6 | 7 | 8 | 9 | 0 | = |
97 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
98 * | LCtrl | Q | W | E | R | T | Home | | BkSp | Y | U | I | O | P | - |
99 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
100 * | Tab | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
101 * |--------+------+------+------+------+------| Hyper| | \ |------+------+------+------+------+--------|
102 * | LShft | Z | X | C | V | B | | | | N | M | , | . | / | RShft |
103 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
104 * | LGui | ` | \ |CtlShf| _NU | | _EX | - | ' | = | \ |
105 * `----------------------------------' `----------------------------------'
106 * ,-------------. ,-------------.
107 * | LCtrl| ~GA | | Left | Right|
108 * ,------|------|------| |------+------+------.
109 * |LCtrl/| LAlt/| Home | | Up | Alt/| _NU/ |
110 * | BkSp | Del |------| |------| Enter| Space|
111 * | | | _NU | | Down | | |
112 * `--------------------' `--------------------'
113 */
114[_QW] = KEYMAP( // Layer1: QWERTY
115 // left hand
116 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
117 KC_LCTL,KC_Q, KC_W, KC_E, KC_R, KC_T, KC_HOME,
118 KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G,
119 KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
120 KC_LGUI,KC_GRV, KC_SLSH,LCTL(KC_LSFT), MO(_NU),
121
122 KC_LCTL,TG(_GA),
123 KC_HOME,
124 CTL_T(KC_BSPC), ALT_T(KC_DEL), MO(_NU),
125 // right hand
126 KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
127 KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
128 KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,
129 KC_BSLS, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,
130 MO(_EX),KC_MINS,KC_QUOT,KC_EQL, KC_BSLS,
131
132 KC_LEFT, KC_RGHT,
133 KC_UP,
134 KC_DOWN, ALT_T(KC_ENT), LT(_NU,KC_SPC)
135 ),
136
137 /*
138 * Keymap: Numbers and symbols
139 *
140 * Note that the number keys here are actually numpad keystrokes. This often doesn't matter, but it may be relevant in a few cases.
141 * That's why the Num Lock key exists on this layer - just in case.
142 *
143 * This layer also contains the layout switches.
144 *
145 * ,--------------------------------------------------. ,--------------------------------------------------.
146 * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | |
147 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
148 * | | ! | @ | { | } | & | | | | / | 7 | 8 | 9 | * | |
149 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
150 * | | # | $ | ( | ) | ~ |------| |------| | | 4 | 5 | 6 | - | |
151 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
152 * | | % | ^ | [ | ] | ` | | | | \ | 1 | 2 | 3 | + | |
153 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
154 * | |QWERTY|Colemk| | | | 0 | . | = | | |
155 * `----------------------------------' `----------------------------------'
156 * ,-------------. ,-------------.
157 * |NumLck| RESET| | | |
158 * ,------|------|------| |------+------+------.
159 * | | | | | | | |
160 * | | |------| |------| | |
161 * | | | | | | | |
162 * `--------------------' `--------------------'
163 */
164[_NU] = KEYMAP(
165 // left hand
166 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______,
167 _______, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_AMPR, _______,
168 _______, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_TILD,
169 _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV, _______,
170 _______, DF(_QW), DF(_CO), _______, _______,
171
172 KC_NLCK,RESET,
173 _______,
174 _______,_______,_______,
175 // right hand
176 _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
177 _______, KC_SLSH, KC_P7, KC_P8, KC_P9, KC_PAST, _______,
178 KC_PIPE, KC_P4, KC_P5, KC_P6, KC_PMNS, _______,
179 _______, KC_BSLS, KC_P1, KC_P2, KC_P3, KC_PPLS, _______,
180 KC_P0, KC_PDOT, KC_EQL, _______, _______,
181
182 _______, _______,
183 _______,
184 _______, _______, _______
185 ),
186
187 /*
188 * Keymap: Extend
189 *
190 * ,--------------------------------------------------. ,--------------------------------------------------.
191 * | | F11 | F12 | F13 | F14 | F15 | Mute | | | F16 | F17 | F18 | F19 | F20 | |
192 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
193 * | | | | | | Ctrl`| Vol | | | PgUp | Home | Up | End | Del | |
194 * |--------+------+------+------+------+------| Up | | |------+------+------+------+------+--------|
195 * | | | Gui | Alt | Ctrl | |------| |------| PgDn | Left | Down | Right| BkSp | Menu |
196 * |--------+------+------+------+------+------| Vol | | |------+------+------+------+------+--------|
197 * | | Undo | Cut | Copy | | Paste| Down | | | | ^Tab | Tab | |Insert| PrntScr|
198 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
199 * | | | | | | | | | | | |
200 * `----------------------------------' `----------------------------------'
201 * ,-------------. ,-------------.
202 * | | | | | |
203 * ,------|------|------| |------+------+------.
204 * | | | | | | | |
205 * | | |------| |------| | |
206 * | | | | | | | |
207 * `--------------------' `--------------------'
208 *
209 * Ctrl+` is a keyboard shortcut for the program ConEmu, which provides a Quake-style drop-down command prompt.
210 *
211 */
212[_EX] = KEYMAP(
213 // left hand
214 _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_MUTE,
215 _______, _______, _______, _______, _______, KCX_CGR, KC_VOLU,
216 _______, _______, KC_LGUI, KC_LALT, KC_LCTL, _______,
217 _______, KX_UNDO, KX_CUT, KX_COPY, _______, KX_PAST, KC_VOLD,
218 _______, _______, _______, _______, _______,
219
220 _______,_______,
221 _______,
222 _______,_______,_______,
223 // right hand
224 _______, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
225 _______, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL, _______,
226 KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC, KC_MENU,
227 _______, _______, KX_STAB, KC_TAB, _______, KC_INS, KC_PSCR,
228 _______, _______, _______, _______, _______,
229 _______, _______,
230 _______,
231 _______, _______, _______
232 ),
233
234 /*
235 * Keymap: Gaming
236 *
237 * Provides a mouse overlay for the right hand, and also moves some "gamer friendly" keys to the left, such as space.
238 * This layer also removes a lot of dual-role keys, as when gaming, it's nicer not to need to keep track of those.
239 *
240 * ,--------------------------------------------------. ,--------------------------------------------------.
241 * | | | | | | | | | | | | | | | |
242 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
243 * | | | | | | | | | | |WhlUp | MsUp |WhlDn | | |
244 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
245 * | | | | | | |------| |------| |MsLeft|MsDown|MsRght| | |
246 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
247 * | | | | | | | | | | | | | | | |
248 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
249 * | LCtrl| | | | | | | | | | |
250 * `----------------------------------' `----------------------------------'
251 * ,-------------. ,-------------.
252 * | | ~_GA | | |MClick|
253 * ,------|------|------| |------+------+------.
254 * | | | | | | | |
255 * | Space| |------| |------|RClick|LClick|
256 * | | | | | | | |
257 * `--------------------' `--------------------'
258 */
259[_GA] = KEYMAP(
260 // left hand
261 _______, _______, _______, _______, _______, _______, _______,
262 _______, _______, _______, _______, _______, _______, _______,
263 _______, _______, _______, _______, _______, _______,
264 _______, _______, _______, _______, _______, _______, _______,
265 KC_LCTL, _______, _______, _______, _______,
266
267 _______,_______,
268 _______,
269 KC_SPC, _______,_______,
270
271 // right hand
272 _______, _______, _______, _______, _______, _______, _______,
273 _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, _______,
274 _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______,
275 _______, _______, _______, _______, _______, _______, _______,
276 _______, _______, _______, _______, _______,
277 _______, KC_BTN3,
278 _______,
279 _______, KC_BTN2, KC_BTN1
280 ),
281};
282
283const uint16_t PROGMEM fn_actions[] = {
284 [1] = ACTION_LAYER_TAP_TOGGLE(_NU) // FN1 - Momentary Layer 1 (Numbers and symbols)
285};
286
287const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
288{
289 // MACRODOWN only works in this function
290 switch(id) {
291 case 0:
292 if (record->event.pressed) {
293 register_code(KC_RSFT);
294 } else {
295 unregister_code(KC_RSFT);
296 }
297 break;
298 }
299 return MACRO_NONE;
300};
301
302// Runs just one time when the keyboard initializes.
303void matrix_init_user(void) {
304
305};
306
307// Runs constantly in the background, in a loop.
308void matrix_scan_user(void) {
309
310 uint8_t layer = biton32(layer_state);
311 // uint8_t default_layer = biton32(layer_state);
312
313 ergodox_board_led_off();
314 ergodox_right_led_1_off();
315 ergodox_right_led_2_off();
316 ergodox_right_led_3_off();
317
318 switch (layer) {
319 case _CO:
320 ergodox_right_led_1_on();
321 break;
322 case _QW:
323 ergodox_right_led_2_on();
324 break;
325 case _NU:
326 ergodox_right_led_3_on();
327 break;
328 case _GA:
329 ergodox_right_led_1_on();
330 ergodox_right_led_2_on();
331 default:
332 // none
333 break;
334 }
335
336};
diff --git a/keyboards/ergodox/keymaps/replicaJunction/readme.md b/keyboards/ergodox/keymaps/replicaJunction/readme.md
new file mode 100644
index 000000000..8c4c03353
--- /dev/null
+++ b/keyboards/ergodox/keymaps/replicaJunction/readme.md
@@ -0,0 +1,5 @@
1# replicaJunction - Ergodox (EZ) Layout
2
3I designed this layout, along with my complimentary Atreus layout, to address the challenge of having an Ergodox as my primary home keyboard and an Atreus as my primary work board. I wanted a layout that provided symbols in comfortable locations on both keyboards - but didn't require me to learn two separate sets of symbols for the two keyboards.
4
5I had originally used several keys as dual-role keys, where a tap would send a keypress and a long press and hold would trigger a different layer. However, after several months of experimenting with those ideas, I've begun moving away from that design due to performance. It's very hard to strike a balance between the time it takes to press a key normally while typing and the "delay" in the typing motion needed to trigger the alternate layer. I was frequently getting strange characters and artifacts because I pressed the function key + the symbol key too quickly, and the layer never shifted. \ No newline at end of file
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 @@
1SUBPROJECT_DEFAULT = alvicstep
2
1ifndef MAKEFILE_INCLUDED 3ifndef MAKEFILE_INCLUDED
2 include ../../Makefile 4 include ../../Makefile
3endif \ No newline at end of file 5endif
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 @@
1ifndef MAKEFILE_INCLUDED
2 include ../../../Makefile
3endif
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 @@
1#include "kinesis.h"
2
3// begin section origin https://github.com/alvicstep/tmk_keyboard
4
5void all_led_off(void)
6{
7 PORTD = 0b11111111;
8}
9
10void all_led_on(void)
11{
12 PORTD = 0b00000000;
13}
14void num_lock_led_on(void)
15{
16 PORTD = 0b11101111;
17}
18
19void caps_lock_led_on(void)
20{
21 PORTD = 0b01111111;
22}
23
24void scroll_lock_led_on(void)
25{
26 PORTD = 0b11011111;
27}
28void keypad_led_on(void)
29{
30 PORTD = 0b10111111;
31}
32void blink_all_leds(void)
33{
34 all_led_on();
35 _delay_ms(500);
36
37 all_led_off();
38 _delay_ms(100);
39
40 caps_lock_led_on();
41 _delay_ms(100);
42
43 num_lock_led_on();
44 _delay_ms(100);
45
46 scroll_lock_led_on();
47 _delay_ms(100);
48
49 keypad_led_on();
50 _delay_ms(100);
51
52 //back
53
54 scroll_lock_led_on();
55 _delay_ms(100);
56
57 num_lock_led_on();
58 _delay_ms(100);
59
60 caps_lock_led_on();
61 _delay_ms(100);
62
63 all_led_off();
64}
65
66// End section origin https://github.com/alvicstep/tmk_keyboard
67
68 void matrix_init_kb(void) {
69 blink_all_leds();
70 matrix_init_user();
71}
72
73
74void matrix_scan_kb(void) {
75 // put your looping keyboard code here
76 // runs every cycle (a lot)
77
78 matrix_scan_user();
79}
80
81bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
82 // put your per-action keyboard code here
83 // runs for every action, just before processing by the firmware
84
85 return process_record_user(keycode, record);
86}
87
88void led_set_kb(uint8_t usb_led) {
89 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
90
91//Copyright 2014 Warren Janssens <warren.janssens@gmail.com>
92 uint8_t leds = 0xF0;
93 if (usb_led & 1 << USB_LED_NUM_LOCK)
94 leds &= ~0x10;
95 if (usb_led & 1 << USB_LED_CAPS_LOCK)
96 leds &= ~0x80;
97 if (usb_led & 1 << USB_LED_SCROLL_LOCK)
98 leds &= ~0x20;
99 PORTD = (PORTD & 0x0F) | leds;
100
101 led_set_user(usb_led);
102
103}
104
105
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 @@
1#ifndef KINESIS_ALVICSTEP_H
2#define KINESIS_ALVICSTEP_H
3
4#include "../kinesis.h"
5
6
7#define KEYMAP( \
8 k02,k22,k12,k01,k21,k11,k00,k20,k10, \
9 k80,k70,k60,k50,k40,k30, \
10 k81,k71,k61,k51,k41,k31, \
11 k82,k72,k62,k52,k42,k32, \
12 k83,k73,k63,k53,k43,k33, \
13 k74,k64,k54,k34, \
14 k36,k35, \
15 k55, \
16 k56,k46,k75, \
17 k03,k23,k13,k04,k24,k14,k05,k85,k84, \
18 k94,kA4,kB4,kD4,kE4,kF4, \
19 k95,kA5,kB5,kD5,kE5,kF5, \
20 k96,kA6,kB6,kD6,kE6,kF6, \
21 k97,kA7,kB7,kD7,kE7,kF7, \
22 k93,kB3,kD3,kE3, \
23 k47,k66, \
24 k67, \
25 k87,k76,k86 \
26) { \
27 { k00, k01, k02, k03, k04, k05, KC_NO, KC_NO }, \
28 { k10, k11, k12, k13, k14, KC_NO, KC_NO, KC_NO }, \
29 { k20, k21, k22, k23, k24, KC_NO, KC_NO, KC_NO }, \
30 { k30, k31, k32, k33, k34, k35, k36, KC_NO }, \
31 { k40, k41, k42, k43, KC_NO, KC_NO, k46, k47 }, \
32 { k50, k51, k52, k53, k54, k55, k56, KC_NO }, \
33 { k60, k61, k62, k63, k64, KC_NO, k66, k67 }, \
34 { k70, k71, k72, k73, k74, k75, k76, KC_NO }, \
35 { k80, k81, k82, k83, k84, k85, k86, k87}, \
36 { KC_NO, KC_NO ,KC_NO ,k93, k94, k95, k96, k97}, \
37 { KC_NO, KC_NO ,KC_NO ,KC_NO, kA4, kA5, kA6, kA7}, \
38 { KC_NO, KC_NO ,KC_NO ,kB3, kB4, kB5, kB6, kB7}, \
39 { KC_NO, KC_NO ,KC_NO ,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO}, \
40 { KC_NO, KC_NO ,KC_NO ,kD3, kD4, kD5, kD6, kD7}, \
41 { KC_NO, KC_NO ,KC_NO ,kE3, kE4, kE5, kE6, kE7}, \
42 { KC_NO, KC_NO ,KC_NO ,KC_NO, kF4, kF5, kF6, kF7} \
43}
44
45
46/* Row pin configuration
47PF0 A
48PF1 B
49PF2 C
50PF3 G 0 = U4, 1 = U5
51
52
53 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 rA rB rC rD rE rF
54PB0 c0| f6 f8 f7 5 4 3 2 1 =+
55PB1 c1| f3 f5 f4 t r e w q TAB
56PB2 c2| ESC f2 f1 g f d s a CL
57PB3 c3| f9 f11 f10 b v c x z LS UP DN [{ ]}
58PB4 c4| f12 SL PS RT LT §± `~ 6 7 8 9 0 -_
59PB5 c5| PB PGM KPD y u i o p \
60PB6 c6| LC DL BS RC EN SP h j k l ;: '"
61PB7 c7| RA PU PD n m ,< .> /? RS
62 */
63
64
65
66
67#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 @@
1#ifndef ALVICSTEP_CONFIG_H
2#define ALVICSTEP_CONFIG_H
3
4#include "../config.h"
5
6/* USB Device descriptor parameter */
7#define PRODUCT_ID 0x6060
8#define DEVICE_VER 0x0001
9
10/* key matrix size */
11#define MATRIX_ROWS 16
12#define MATRIX_COLS 8
13
14/*
15 * Keyboard Matrix Assignments
16 *
17 * Change this to how you wired your keyboard
18 * COLS: AVR pins used for columns, left to right
19 * ROWS: AVR pins used for rows, top to bottom
20 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
21 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
22 *
23*/
24//Passed through the port multipler, so 4 pins =16
25#define MATRIX_ROW_PINS { F0,F1, F2, F3 }
26
27// May be upside down.
28#define MATRIX_COL_PINS { B0,B1, B2, B3, B4, B5, B6, B7 }
29#define UNUSED_PINS
30
31/* COL2ROW or ROW2COL */
32#define DIODE_DIRECTION COL2ROW
33
34
35#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 @@
1kinesis-advantage keyboard firmware
2======================
3
4This directory is called alvicstep because https://github.com/alvicstep did the heavy work and took the photos in the doc directory.
5alvicstep did NOT do anything related to the QMK implementation, so don't bug him/her.
6
7There are other ways of replacing the CPU in the kinesis, this one uses jumper wires from the Teensy to the original DIP socket
8
9
10## Kinesis specific information
11This is a port of https://github.com/alvicstep/tmk_keyboard,
12which is a fork of https://github.com/wjanssens/tmk_keyboard,
13which is based on work from https://github.com/chrisandreae/keyboard-firmware
14
15If you replace the kinesis CPU as described in the doc folder, then this code should allow you to use QMK.
16I've tested with a Teensy 2++, remember to change the CPU if you use a 32u4 instead.
17
18Not yet implemented:
19- Kinesis EEProm reading or writing
20- Audio - this should be simple if we remove hardcoded pins from audio.h and switch to E7
21
22
23
24## Quantum MK Firmware
25
26For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
27
28## Building
29
30Download 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.
31
32Depending on which keymap you would like to use, you will have to compile slightly differently.
33
34### Default
35
36To build with the default keymap, simply run `make`.
37
38### Other Keymaps
39
40Several 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.
41
42To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
43
44$ make keymap=[default|jack|<name>]
45
46Keymaps 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 @@
1ifndef QUANTUM_DIR
2 include ../../../Makefile
3endif
4
5# just silently stop, since we need to upload with teensy uploader
6upload: build
7
8
9
10
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/>.
22 22
23/* USB Device descriptor parameter */ 23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEED 24#define VENDOR_ID 0xFEED
25#define PRODUCT_ID 0x6060
26#define DEVICE_VER 0x0001
27#define MANUFACTURER You 25#define MANUFACTURER You
28#define PRODUCT kinesis-advantage 26#define PRODUCT kinesis-advantage
29#define DESCRIPTION A custom keyboard 27#define DESCRIPTION A custom keyboard
30 28
31// Mouse 29// Mouse
32#define MOUSEKEY_DELAY 20 30#define MOUSEKEY_DELAY 60
33#define MOUSEKEY_INTERVAL 20 31#define MOUSEKEY_INTERVAL 20
34#define MOUSEKEY_MAX_SPEED 4 32#define MOUSEKEY_MAX_SPEED 4
35#define MOUSEKEY_TIME_TO_MAX 20 33#define MOUSEKEY_TIME_TO_MAX 10
36#define MOUSEKEY_WHEEL_MAX_SPEED 1 34#define MOUSEKEY_WHEEL_MAX_SPEED 1
37#define MOUSEKEY_WHEEL_DELTA 1 35#define MOUSEKEY_WHEEL_DELTA 1
38#define MOUSEKEY_WHEEL_TIME_TO_MAX 1 36#define MOUSEKEY_WHEEL_TIME_TO_MAX 1
39 37
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 */ 38/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
70#define DEBOUNCING_DELAY 5 39#define DEBOUNCING_DELAY 5
71 40
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 */ 41/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
78#define LOCKING_SUPPORT_ENABLE 42#define LOCKING_SUPPORT_ENABLE
79/* Locking resynchronize hack */ 43/* Locking resynchronize hack */
@@ -171,4 +135,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
171//#define NO_ACTION_MACRO 135//#define NO_ACTION_MACRO
172//#define NO_ACTION_FUNCTION 136//#define NO_ACTION_FUNCTION
173 137
138
139
140#ifdef SUBPROJECT_alvicstep
141 #include "alvicstep/config.h"
142#endif
143#ifdef SUBPROJECT_stapelberg
144 #include "stapelberg/config.h"
145#endif
146
174#endif 147#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 @@
1#include "kinesis.h" 1#include "kinesis.h"
2#include "action_layer.h"
3 2
4#define QWERTY 0 // Base qerty 3#define QWERTY 0 // Base qwerty
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 4
9 5
10/**************************************************************************************************** 6/****************************************************************************************************
@@ -33,7 +29,6 @@
33* `--------------------' `--------------------' 29* `--------------------' `--------------------'
34*/ 30*/
35 31
36
37const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 32const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
38[QWERTY] = KEYMAP( 33[QWERTY] = KEYMAP(
39 KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8, 34 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] = {
45 KC_LCTL,KC_LALT, 40 KC_LCTL,KC_LALT,
46 KC_HOME, 41 KC_HOME,
47 KC_BSPC,KC_DEL ,KC_END , 42 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, 43 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, 44 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, 45 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, 46 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] = {
54 KC_RGUI,KC_RCTL, 49 KC_RGUI,KC_RCTL,
55 KC_PGUP, 50 KC_PGUP,
56 KC_PGDN,KC_ENTER ,KC_SPC 51 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 ) 52 )
78}; 53};
79 54
80const uint16_t PROGMEM fn_actions[] = {
81 [0] = ACTION_LAYER_TAP_TOGGLE(SYMB) , // FN1 - Momentary Layer 1 (Symbols)
82 55
56const uint16_t PROGMEM fn_actions[] = {
83 57
84}; 58};
85 59
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 @@
1#include "kinesis.h"
2
3#define _DVORAK 0 // Base Dvorak layer
4#define _MEDIA 1 // Media layer
5
6const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7[_DVORAK] = KEYMAP(
8 // left hand
9 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
10 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5,
11 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y,
12 KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I,
13 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X,
14 KC_ESC, KC_LBRC, KC_DOWN, KC_UP,
15 // left thumb
16 KC_LGUI, KC_LCTL,
17 KC_LALT,
18 KC_BSPC, KC_DEL, TG(_MEDIA),
19 // right hand
20 KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_FN0, KC_1,
21 KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
22 KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
23 KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
24 KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
25 KC_LEFT, KC_RIGHT, KC_RBRC, KC_BSLS,
26 // right thumb
27 KC_RCTL, KC_RGUI,
28 KC_RALT,
29 TG(_MEDIA), KC_ENT, KC_SPC
30 ),
31
32[_MEDIA] = KEYMAP(
33 // left hand
34 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
35 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
36 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
37 KC_NO, KC_BTN4, KC_BTN3, KC_BTN2, KC_BTN1, KC_NO,
38 KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO,
39 KC_NO, KC_NO, KC_MS_D, KC_MS_U,
40 // left thumb
41 KC_NO, KC_NO,
42 KC_NO,
43 KC_NO, KC_NO, KC_TRNS,
44 // right hand
45 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
46 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_POWER,
47 KC_NO, KC_VOLU, KC_MS_U, KC_VOLD, KC_NO, KC_NO,
48 KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_NO,
49 KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO,
50 KC_MS_L, KC_MS_R, KC_NO, KC_NO,
51 // right thumb
52 KC_NO, KC_NO,
53 KC_NO,
54 KC_TRNS, KC_ENT, KC_NO
55)
56};
57
58
59const uint16_t PROGMEM fn_actions[] = {
60
61};
62
63const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
64{
65 // MACRODOWN only works in this function
66 switch(id) {
67 case 0:
68 if (record->event.pressed) {
69 register_code(KC_RSFT);
70 } else {
71 unregister_code(KC_RSFT);
72 }
73 break;
74 }
75 return MACRO_NONE;
76};
77
78
79void matrix_init_user(void) {
80
81}
82
83void matrix_scan_user(void) {
84
85}
86
87bool process_record_user(uint16_t keycode, keyrecord_t *record) {
88 return true;
89}
90
91void led_set_user(uint8_t usb_led) {
92
93}
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 @@
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/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 @@
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/milestogo/keymap.c
index 83fb7bd5f..c2635eefe 100644
--- a/keyboards/kinesis/keymaps/programmer/keymap.c
+++ b/keyboards/kinesis/keymaps/milestogo/keymap.c
@@ -2,10 +2,10 @@
2#include "action_layer.h" 2#include "action_layer.h"
3#include "mousekey.h" 3#include "mousekey.h"
4 4
5#define QWERTY 0 // Base qerty 5#define _QWERTY 0 // Base qerty
6#define SYMB 1// Symbol layer 6#define _SYMB 1// Symbol layer
7#define MOUSE 2// 7#define _MOUSE 2//
8 8#define _TRANS 3//
9 9
10 10
11 11
@@ -20,27 +20,26 @@ enum {
20}; 20};
21 21
22 22
23// Borrowing very heavily from 23// Why so many gui keys, why not just map all the OS X stuff to buttons? Good question.
24// https://github.com/alvicstep/tmk_keyboard
25/**************************************************************************************************** 24/****************************************************************************************************
26* 25*
27* Keymap: Default Layer in Qwerty 26* Keymap: Default Layer in Qwerty
28* 27*
29* ,-------------------------------------------------------------------------------------------------------------------. 28* ,-------------------------------------------------------------------------------------------------------------------.
30* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | | bOOT | 29* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | | bOOT |
31* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------| 30* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
32* | =+ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ | 31* | =+ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ |
33* |--------+------+------+------+------+------| +------+------+------+------+------+--------| 32* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
34* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| | 33* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| |
35* |--------+------+------+------+------+------| |------+------+------+------+------+--------| 34* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
36* |MouseFN1| A | S | D | F | G | | H | J | K | L | ;: | '" | 35* |MouseFN0| A | S | D | F | G | | H | J | K | L | ;: | '" |
37* |--------+------+------+------+------+------| |------+------+------+------+------+--------| 36* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
38* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? | Shift | 37* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? | Shift |
39* `--------+------+------+------+------+------- `------+------+------+------+------+--------' 38* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
40* | `~ | ESC |MOUSE1|MOUSE2| | [{ | ]} | ESC | GUI | 39* | ~` | ESC |GUI/L |L1/RT | | L1/UP|GUI/DN| [{ | ]} |
41* `---------------------------' `---------------------------' 40* `---------------------------' `---------------------------'
42* ,-------------. ,-------------. 41* ,-------------. ,-------------.
43* | Ctrl | Alt | | Gui | Ctrl | 42* | CTRL | GUI | | ALT | GUI |
44* ,------|------|------| |------+------+------. 43* ,------|------|------| |------+------+------.
45* | | | Home | | PgUp | | | 44* | | | Home | | PgUp | | |
46* | BkSp | Del |------| |------|Return| Space| 45* | BkSp | Del |------| |------|Return| Space|
@@ -48,16 +47,15 @@ enum {
48* `--------------------' `--------------------' 47* `--------------------' `--------------------'
49*/ 48*/
50 49
51
52const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 50const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
53[QWERTY] = KEYMAP( 51[_QWERTY] = KEYMAP(
54 KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8, 52 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 , 53 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 , 54 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 , 55 KC_FN0 ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
58 KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B , 56 KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
59 KC_GRV ,KC_ESC, KC_BTN1,KC_BTN2, 57 KC_GRAVE, KC_ESC, KC_FN4, KC_FN5,
60 KC_LCTL,KC_LALT, 58 KC_LCTL,KC_LGUI,
61 KC_HOME, 59 KC_HOME,
62 KC_BSPC,KC_DEL ,KC_FN0 , 60 KC_BSPC,KC_DEL ,KC_FN0 ,
63 KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_FN0 ,KC_FN1 ,KC_FN2, KC_NO, RESET, 61 KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_FN0 ,KC_FN1 ,KC_FN2, KC_NO, RESET,
@@ -65,18 +63,45 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
65 KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS, 63 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, 64 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, 65 KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT,
68 KC_LBRC,KC_RBRC, KC_ESC, KC_RGUI, 66 KC_FN6, KC_FN7, KC_LBRC ,KC_RBRC,
69 KC_RGUI,KC_RCTL, 67 KC_RALT,KC_RGUI,
70 KC_PGUP, 68 KC_PGUP,
71 KC_PGDN,KC_ENTER ,KC_SPC 69 KC_PGDN,KC_ENTER ,KC_SPC
72 ), 70 ),
73[SYMB] = KEYMAP( 71
72/* _SYMBol level
73*
74* ,-------------------------------------------------------------------------------------------------------------------.
75* | | | | | | | | | | | | | | | | bOOT |
76* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
77* | | | * | # | | | | | | | | | |
78* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
79* | | / | [ | ] | | | | | | | | | |
80* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
81* | | | { | } | | | | | | | | | |
82* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
83* | | = | ( | ) | | | | | | | | | |
84* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
85* | | |GUI/L |L1/RT | | L1/UP|GUI/DN| { | } |
86* `---------------------------' `---------------------------'
87* ,-------------. ,-------------.
88* | CTRL | GUI | | ALT | GUI |
89* ,------|------|------| |------+------+------.
90* | | | Home | | PgUp | | |
91* | BkSp | Del |------| |------|Mouse1|Mouse2|
92* | | | End | | PgDn |LClick|Rclick|
93* `--------------------' `--------------------'
94*/
95
96
97
98[_SYMB] = KEYMAP(
74 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 99 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, 100 KC_TRNS, KC_TRNS, KC_ASTR, KC_HASH, KC_TRNS, KC_TRNS,
76 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 101 KC_TRNS, KC_SLSH, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS,
77 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 102 KC_TRNS, KC_TRNS, RSFT(KC_LBRC), RSFT(KC_RBRC), KC_TRNS, KC_TRNS,
78 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 103 KC_TRNS, KC_EQL, RSFT(KC_9), RSFT(KC_0), KC_TRNS, KC_TRNS,
79 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 104 KC_TRNS, KC_TRNS, KC_FN4, KC_FN5,
80 KC_TRNS, KC_TRNS, 105 KC_TRNS, KC_TRNS,
81 KC_TRNS, 106 KC_TRNS,
82 KC_TRNS, KC_TRNS, KC_TRNS, 107 KC_TRNS, KC_TRNS, KC_TRNS,
@@ -85,7 +110,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
85 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 110 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, 111 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, 112 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
88 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 113 KC_FN6, KC_FN7, KC_TRNS, KC_TRNS,
89 KC_TRNS, KC_TRNS, 114 KC_TRNS, KC_TRNS,
90 KC_TRNS, 115 KC_TRNS,
91 KC_TRNS, KC_TRNS, KC_TRNS 116 KC_TRNS, KC_TRNS, KC_TRNS
@@ -103,10 +128,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
103* |--------+------+------+------+------+------| |------+------+------+------+------+--------| 128* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
104* | | GuiZ | GUI X| GUI C| GUI_V|PgDown| | MWD | MDown|MS Dwn|MS_DR | ? | | 129* | | GuiZ | GUI X| GUI C| GUI_V|PgDown| | MWD | MDown|MS Dwn|MS_DR | ? | |
105* `--------+------+------+------+------+------- `------+------+------+------+------+--------' 130* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
106* | `~ | ESC | < | > | | { | } | ESC | | 131* | `~ | ESC | | | | | | { | } |
107* `---------------------------' `---------------------------' 132* `---------------------------' `---------------------------'
108* ,-------------. ,-------------. 133* ,-------------. ,-------------.
109* | Ctrl | Alt | | Gui | Ctrl | 134* | CTRL | GUI | | ALT | GUI |
110* ,------|------|------| |------+------+------. 135* ,------|------|------| |------+------+------.
111* | | | Home | | PgUp | | | 136* | | | Home | | PgUp | | |
112* | BkSp | Del |------| |------|Mouse1|Mouse2| 137* | BkSp | Del |------| |------|Mouse1|Mouse2|
@@ -115,13 +140,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
115*/ 140*/
116 141
117 142
118[MOUSE] = KEYMAP( 143[_MOUSE] = KEYMAP(
119 KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 144 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 , 145 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, 146 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), 147 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, 148 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, 149 KC_TRNS, KC_TRNS, KC_NO, KC_NO,
125 KC_TRNS, KC_TRNS, 150 KC_TRNS, KC_TRNS,
126 KC_TRNS, 151 KC_TRNS,
127 KC_TRNS, KC_TRNS, KC_TRNS, 152 KC_TRNS, KC_TRNS, KC_TRNS,
@@ -129,22 +154,77 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
129 KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_ACL2, 154 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, 155 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, 156 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, 157 KC_WH_D, M(A_MDL), KC_MS_D, M(A_MDR), RSFT(KC_LBRC), RSFT(KC_RBRC),
133 KC_LCBR, KC_RCBR, KC_ESC, KC_TRNS, 158 KC_LCBR, KC_RCBR, KC_NO, KC_NO,
134 KC_TRNS, KC_TRNS, 159 KC_TRNS, KC_TRNS,
135 KC_TRNS, 160 KC_TRNS,
136 KC_TRNS, KC_BTN1, KC_BTN2 161 KC_TRNS, KC_BTN1, KC_BTN2
137 ), 162 ),
138 163
139 164
165
166/* EMPTY
167*
168* ,-------------------------------------------------------------------------------------------------------------------.
169* | | | | | | | | | | | | | | | | bOOT |
170* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
171* | | | | | | | | | | | | | |
172* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
173* | | | | | | | | | | | | | |
174* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
175* | | | | | | | | | | | | | |
176* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
177* | | | | | | | | | | | | | |
178* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
179* | | | | | | | | | |
180* `---------------------------' `---------------------------'
181* ,-------------. ,-------------.
182* | Ctrl | Alt | | Gui | Ctrl |
183* ,------|------|------| |------+------+------.
184* | | | Home | | PgUp | | |
185* | BkSp | Del |------| |------|Mouse1|Mouse2|
186* | | | End | | PgDn |LClick|Rclick|
187* `--------------------' `--------------------'
188*/
189
190
191
192[_TRANS] = KEYMAP(
193 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
194 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
195 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
196 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
197 KC_TRNS, KC_TRNS, KC_FN10, KC_FN11, KC_TRNS, KC_TRNS,
198 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
199 KC_TRNS, KC_TRNS,
200 KC_TRNS,
201 KC_TRNS, KC_TRNS, KC_TRNS,
202 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0, KC_2,
203 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
204 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
205 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
206 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
207 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
208 KC_TRNS, KC_TRNS,
209 KC_TRNS,
210 KC_TRNS, KC_TRNS, KC_TRNS
211 ),
212
213
140}; 214};
141 215
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 216
147 217
218const uint16_t PROGMEM fn_actions[] = {
219 [0] = ACTION_LAYER_TAP_TOGGLE(_MOUSE) ,
220 [1] = ACTION_LAYER_TOGGLE(_MOUSE) ,
221 [2] = ACTION_LAYER_TAP_TOGGLE(_SYMB) ,
222 [5]= ACTION_LAYER_TAP_KEY(_SYMB,KC_RIGHT),
223 [4]= ACTION_MODS_TAP_KEY(MOD_LGUI,KC_LEFT),
224 [6]= ACTION_LAYER_TAP_KEY(_SYMB,KC_UP),
225 [7]= ACTION_MODS_TAP_KEY(MOD_LGUI,KC_DOWN),
226
227
148}; 228};
149 229
150const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) 230const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
@@ -214,18 +294,23 @@ void matrix_init_user(void) {
214} 294}
215 295
216void matrix_scan_user(void) { 296void matrix_scan_user(void) {
297
298#ifdef ALVICSTEP_CONFIG_H
217 int8_t layer = biton32(layer_state); 299 int8_t layer = biton32(layer_state);
218 300
219 switch (layer) { 301 switch (layer) {
220 case 1: 302 case 1:
221 all_led_off();
222 break;
223 case 2:
224 if (!(host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK))) { 303 if (!(host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK))) {
225 all_led_off(); 304 all_led_off();
226 caps_lock_led_on(); 305 caps_lock_led_on();
227 } 306 }
228 break; 307 break;
308
309 case 2:
310 if (!(host_keyboard_leds() & (1 << USB_LED_SCROLL_LOCK))) {
311 all_led_off();
312 scroll_lock_led_on();
313 }
229 case 0: 314 case 0:
230 all_led_off(); 315 all_led_off();
231 num_lock_led_on(); 316 num_lock_led_on();
@@ -233,6 +318,7 @@ void matrix_scan_user(void) {
233 default: 318 default:
234 break; 319 break;
235 } 320 }
321#endif
236 322
237} 323}
238 324
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/kinesis.c b/keyboards/kinesis/kinesis.c
index 1fee90e6f..7a6a1be54 100644
--- a/keyboards/kinesis/kinesis.c
+++ b/keyboards/kinesis/kinesis.c
@@ -1,106 +1 @@
1#include "kinesis.h" #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
index c04fbda15..66713731f 100644
--- a/keyboards/kinesis/kinesis.h
+++ b/keyboards/kinesis/kinesis.h
@@ -1,67 +1,23 @@
1#ifndef KINESIS_H 1#ifndef KINESIS_H
2#define KINESIS_H 2#define KINESIS_H
3 3
4#include "quantum.h" 4#ifdef SUBPROJECT_alvicstep
5 5 #include "alvicstep.h"
6 6#endif
7// The first section contains all of the arguements 7#ifdef SUBPROJECT_stapelberg
8// The second converts the arguments into a two-dimensional array 8 #include "stapelberg.h"
9#endif
9 10
10#define KEYMAP( \ 11#include "quantum.h"
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 12
48 13
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 */ 14void all_led_off(void);
15void all_led_on(void);
16void num_lock_led_on(void);
17void caps_lock_led_on(void);
18void scroll_lock_led_on(void);
19void keypad_led_on(void);
50 20
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 21
66 22
67#endif 23#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 @@
1kinesis-advantage keyboard firmware 1# Firmware for the Kinesis advantage keyboard
2======================
3 2
4## Kinesis specific information 3There are at least two different ways to replace the controller in this keyboard.
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 4
9If you replace the kinesis CPU as described in the doc folder, then this code should allow you to use QMK. 5The Stapelberg folder contains the docs and configuration for using the custom controller created by Michael Stapelberg.
10I've tested with a Teensy 2++, remember to change the CPU if you use a 32u4 instead.
11 6
12Not yet implemented: 7The 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.
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 8
9## Keymaps
10Both hardware solutions should work with the same keymaps
16 11
17 12
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 default`.
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 a keymap like this:
37
38```
39$ make [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/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 @@
1ifndef MAKEFILE_INCLUDED
2 include ../../../Makefile
3endif
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 @@
1#ifndef STAPELBERG_CONFIG_H
2#define STAPELBERG_CONFIG_H
3
4#include "../config.h"
5
6/* USB Device descriptor parameter */
7#define PRODUCT_ID 0x6060
8#define DEVICE_VER 0x0002
9
10/* key matrix size */
11#define MATRIX_ROWS 15
12#define MATRIX_COLS 7
13
14/*
15 * Keyboard Matrix Assignments
16 *
17 * Change this to how you wired your keyboard
18 * COLS: AVR pins used for columns, left to right
19 * ROWS: AVR pins used for rows, top to bottom
20 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
21 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
22 *
23*/
24#define MATRIX_ROW_PINS { D0, D1, D2, D3, D4, D5, D6, D7, C0, C1, C2, C3, C4, C5, C6 }
25#define MATRIX_COL_PINS { B0, B1, B2, B3, B4, B5, B6 }
26#define UNUSED_PINS
27
28/* COL2ROW or ROW2COL */
29#define DIODE_DIRECTION COL2ROW
30
31
32/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
33#define DEBOUNCING_DELAY 5
34
35/* don't know if this should be defined at the board or top level. Assuming board
36#define MOUSEKEY_DELAY 100
37#define MOUSEKEY_INTERVAL 20
38#define MOUSEKEY_MAX_SPEED 3
39#define MOUSEKEY_TIME_TO_MAX 10
40*/
41
42#define IGNORE_MOD_TAP_INTERRUPT
43
44/* key combination for magic key command */
45#define IS_COMMAND() ( \
46 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
47)
48
49
50#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 @@
1# kinesis_stapelberg keyboard firmware
2
3This folder contains the firmware customization required to run QMK on the custom controller for the Kinesis Advantage created by Michael Stapelberg.
4It differs from the `alvicstep keyboard in that the existing QMK Kinesis Advantage project uses the existing controller board provided by Kinesis.
5
6The controller board hardware is described
7[here](http://michael.stapelberg.de/Artikel/kinesis_custom_controller)
8
9Mapping the pin assignments was done using the corresponding matrix description provided at this
10[link](https://github.com/stapelberg/kinesis-firmware/blob/master/kb_kinesis/config.kspec)
11
12This code makes no attempt to drive the four LEDs provided on the controller board.
13
14
15## Building the Hardware
16
17If you want to perform this customization, these parts may be helpful.
18
19| Function | Quantity | Vendor | Part Number |
20| ------------------------------------------------------ | -------- | ------- | ------------ |
21| 13 pin connector for function keys and finger keywells | 4 | Digi-Key | WM14526-ND |
22| 10 pin headers for thumb clusters | 4 | Digi-Key | 609-3250-ND |
23| 8 pin cable for thumb clusters | 2 | Digi-Key | SAM8928-ND |
24| Teensy++ 2.0 | 1 | Digi-Key | 1528-1056-ND |
25| 2 pin right angle header for reset | 1 | Digi-Key | 3M9467-ND |
26| Reset cables | 2 | Sparkfun | PRT-09140 |
27
28The board and connections are shown here
29![](images/controller_board.jpg)
30
31The Teensy mounting detail can be seen here.
32I used a socket for prototyping.
33![](images/teensy_detail.jpg)
34
35
36Since 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.
37Shorting these two pins together will reset the board.
38I also put female to male header jumper cables on these so they could be accessed outside the enclosure.
39The exterior cables can be seen here.
40![](images/exterior_reset.jpg)
41
42
43## Keymaps
44
45### Default
46
47To build with the default keymap, run `make default` while in the
48`kinesis_stapelberg` working directory.
49
50### Dvorak
51
52This keymap contains a dvorak implementation as well as media and symbol layers.
53
54Run `make dvorak` while in the `kinesis_stapelberg` working directory.
55
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 @@
1ifndef QUANTUM_DIR
2 include ../../../Makefile
3endif
4
5# just silently stop, since we need to upload with teensy uploader
6upload: build
7
8
9
10
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 @@
1#include "stapelberg.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}
9
10void matrix_scan_kb(void) {
11 // put your looping keyboard code here
12 // runs every cycle (a lot)
13
14 matrix_scan_user();
15}
16
17bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
18 // put your per-action keyboard code here
19 // runs for every action, just before processing by the firmware
20
21 return process_record_user(keycode, record);
22}
23
24void led_set_kb(uint8_t usb_led) {
25 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
26
27 led_set_user(usb_led);
28}
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 @@
1#ifndef KINESIS_STAPELBERG_H
2#define KINESIS_STAPELBERG_H
3
4#include "quantum.h"
5
6// This a shortcut to help you visually see your layout.
7// The first section contains all of the arguments as on the physical keyboard
8// The second converts the arguments into the 2-D scanned array
9
10#define KEYMAP( \
11 kC0,kD0,kE0,kC1,kD1,kE1,kC2,kD2,kE2, \
12 k00,k10,k20,k30,k40,k50, \
13 k01,k11,k21,k31,k41,k51, \
14 k02,k12,k22,k32,k42,k52, \
15 k03,k13,k23,k33,k43,k53, \
16 k14,k24,k34,k54, \
17 k56,k55, \
18 k35, \
19 k36,k46,k25, \
20 kC3,kD3,kE3,kC4,kD4,kE4,kC5,kE5,kD5, \
21 k60,k70,k80,k90,kA0,kB0, \
22 k61,k71,k81,k91,kA1,kB1, \
23 k62,k72,k82,k92,kA2,kB2, \
24 k63,k73,k83,k93,kA3,kB3, \
25 k64,k84,k94,kA4, \
26 k96,k85, \
27 k86, \
28 k66,k75,k65 \
29) { \
30 { k00, k01, k02, k03, KC_NO, KC_NO, KC_NO }, \
31 { k10, k11, k12, k13, k14, KC_NO, KC_NO }, \
32 { k20, k21, k22, k23, k24, k25, KC_NO }, \
33 { k30, k31, k32, k33, k34, k35, k36 }, \
34 { k40, k41, k42, k43, KC_NO, KC_NO, k46 }, \
35 { k50, k51, k52, k53, k54, k55, k56 }, \
36 { k60, k61, k62, k63, k64, k65, k66 }, \
37 { k70, k71, k72, k73, KC_NO, k75, KC_NO }, \
38 { k80, k81, k82, k83, k84, k85, k86 }, \
39 { k90, k91, k92, k93, k94, KC_NO, k96 }, \
40 { kA0, kA1, kA2, kA3, kA4, KC_NO, KC_NO }, \
41 { kB0, kB1, kB2, kB3, KC_NO, KC_NO, KC_NO }, \
42 { kC0, kC1, kC2, kC3, kC4, kC5, KC_NO }, \
43 { kD0, kD1, kD2, kD3, kD4, kD5, KC_NO }, \
44 { kE0, kE1, kE2, kE3, kE4, kE5, KC_NO } \
45}
46
47/*
48This is the Stapelberg matrix as published at
49https://github.com/stapelberg/kinesis-firmware/blob/master/kb_kinesis/config.kspec
50Along with the pins for each row and column
51 PB0 PB1 PB2 PB3 PB4 PB5 PB6
52 kx0 kx1 kx2 kx3 kx4 kx5 kx6
53PD0 k0x Row: EQL TAB CAP LSH X2 -- --
54PD1 k1x Row: 1 Q A Z BQ -- --
55PD2 k2x Row: 2 W S X INS END --
56PD3 k3x Row: 3 E D C LFT HOM BAK
57PD4 k4x Row: 4 R F V -- -- DEL
58PD5 k5x Row: 5 T G B RT LAL LCT
59PD6 k6x Row: 6 Y H N UP SPC PGD
60PD7 k7x Row: 7 U J M -- RET --
61PB0 k8x Row: 8 I K COM DWN RCT PGU
62PB1 k9x Row: 9 O L PER LBR -- RAL
63PB2 kAx Row: 0 P SEM SLA RBR -- --
64PB3 kBx Row: MIN BSL APO RSH X1 -- --
65PB4 kCx Row: ESC F3 F6 F9 F12 PAU --
66PB5 kDx Row: F1 F4 F7 F10 PRT PRG --
67PB6 kEx Row: F2 F5 F8 F11 SLK KEY --
68*/
69
70
71
72#endif
diff --git a/keyboards/planck/keymaps/priyadi/Makefile b/keyboards/planck/keymaps/priyadi/Makefile
index d9d4f3d1d..336608b8c 100644
--- a/keyboards/planck/keymaps/priyadi/Makefile
+++ b/keyboards/planck/keymaps/priyadi/Makefile
@@ -10,7 +10,7 @@ COMMAND_ENABLE = no # 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 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 11BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls 12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = yes # Audio output on port C6 13AUDIO_ENABLE = yes # Audio output on port C6
14UNICODE_ENABLE = no # Unicode 14UNICODE_ENABLE = no # Unicode
15UNICODEMAP_ENABLE = yes # Unicode map 15UNICODEMAP_ENABLE = yes # Unicode map
16BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID 16BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/planck/keymaps/priyadi/keymap.c b/keyboards/planck/keymaps/priyadi/keymap.c
index f0dafebf3..2e979221a 100644
--- a/keyboards/planck/keymaps/priyadi/keymap.c
+++ b/keyboards/planck/keymaps/priyadi/keymap.c
@@ -11,6 +11,8 @@
11#include "process_unicode.h" 11#include "process_unicode.h"
12#include "quantum.h" 12#include "quantum.h"
13 13
14// #define TOLELOT_ENABLE
15
14extern keymap_config_t keymap_config; 16extern keymap_config_t keymap_config;
15 17
16enum layers { 18enum layers {
@@ -21,6 +23,8 @@ enum layers {
21 _NUM, 23 _NUM,
22 _FUNC, 24 _FUNC,
23 _EMOJI, 25 _EMOJI,
26 _GREEKU,
27 _GREEKL,
24 _GUI, 28 _GUI,
25}; 29};
26 30
@@ -36,6 +40,7 @@ enum planck_keycodes {
36 FUNC, 40 FUNC,
37 EMOJI, 41 EMOJI,
38 GUI, 42 GUI,
43 GREEK,
39 44
40 // os switchers 45 // os switchers
41 LINUX, 46 LINUX,
@@ -98,6 +103,59 @@ enum unicode_name {
98 SUN, // sun 103 SUN, // sun
99 MOON, // moon 104 MOON, // moon
100 SKULL, // skull 105 SKULL, // skull
106
107 // greek letters
108 UALPH,
109 UBETA,
110 UGAMM,
111 UDELT,
112 UEPSI,
113 UZETA,
114 UETA,
115 UTHET,
116 UIOTA,
117 UKAPP,
118 ULAMB,
119 UMU,
120 UNU,
121 UXI,
122 UOMIC,
123 UPI,
124 URHO,
125 USIGM,
126 UTAU,
127 UUPSI,
128 UPHI,
129 UCHI,
130 UPSI,
131 UOMEG,
132
133 LALPH,
134 LBETA,
135 LGAMM,
136 LDELT,
137 LEPSI,
138 LZETA,
139 LETA,
140 LTHET,
141 LIOTA,
142 LKAPP,
143 LLAMB,
144 LMU,
145 LNU,
146 LXI,
147 LOMIC,
148 LPI,
149 LRHO,
150 LSIGM,
151 LTAU,
152 LUPSI,
153 LPHI,
154 LCHI,
155 LPSI,
156 LOMEG,
157
158 FSIGM,
101}; 159};
102 160
103const uint32_t PROGMEM unicode_map[] = { 161const uint32_t PROGMEM unicode_map[] = {
@@ -148,6 +206,57 @@ const uint32_t PROGMEM unicode_map[] = {
148 [SUN] = 0x2600, 206 [SUN] = 0x2600,
149 [MOON] = 0x1F314, 207 [MOON] = 0x1F314,
150 [SKULL] = 0x1F480, 208 [SKULL] = 0x1F480,
209
210 // greek letters
211 [UALPH] = 0x0391,
212 [UBETA] = 0x0392,
213 [UGAMM] = 0x0393,
214 [UDELT] = 0x0394,
215 [UEPSI] = 0x0395,
216 [UZETA] = 0x0396,
217 [UETA] = 0x0397,
218 [UTHET] = 0x0398,
219 [UIOTA] = 0x0399,
220 [UKAPP] = 0x039A,
221 [ULAMB] = 0x039B,
222 [UMU] = 0x039C,
223 [UNU] = 0x039D,
224 [UXI] = 0x039E,
225 [UOMIC] = 0x039F,
226 [UPI] = 0x03A0,
227 [URHO] = 0x03A1,
228 [USIGM] = 0x03A3,
229 [UTAU] = 0x03A4,
230 [UUPSI] = 0x03A5,
231 [UPHI] = 0x03A6,
232 [UCHI] = 0x03A7,
233 [UPSI] = 0x03A8,
234 [UOMEG] = 0x03A9,
235 [LALPH] = 0x03B1,
236 [LBETA] = 0x03B2,
237 [LGAMM] = 0x03B3,
238 [LDELT] = 0x03B4,
239 [LEPSI] = 0x03B5,
240 [LZETA] = 0x03B6,
241 [LETA] = 0x03B7,
242 [LTHET] = 0x03B8,
243 [LIOTA] = 0x03B9,
244 [LKAPP] = 0x03BA,
245 [LLAMB] = 0x03BB,
246 [LMU] = 0x03BC,
247 [LNU] = 0x03BD,
248 [LXI] = 0x03BE,
249 [LOMIC] = 0x03BF,
250 [LPI] = 0x03C0,
251 [LRHO] = 0x03C1,
252 [LSIGM] = 0x03C3,
253 [LTAU] = 0x03C4,
254 [LUPSI] = 0x03C5,
255 [LPHI] = 0x03C6,
256 [LCHI] = 0x03C7,
257 [LPSI] = 0x03C8,
258 [LOMEG] = 0x03C9,
259 [FSIGM] = 0x03C2,
151}; 260};
152 261
153 262
@@ -174,14 +283,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
174 * |------+------+------+------+------+------|------+------+------+------+------+------| 283 * |------+------+------+------+------+------|------+------+------+------+------+------|
175 * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift | 284 * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
176 * |------+------+------+------+------+------+------+------+------+------+------+------| 285 * |------+------+------+------+------+------+------+------+------+------+------+------|
177 * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl | 286 * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |Greek |AltGr | Ctrl |
178 * `-----------------------------------------------------------------------------------' 287 * `-----------------------------------------------------------------------------------'
179 */ 288 */
180[_QWERTY] = { 289[_QWERTY] = {
181 {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, 290 {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
182 {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT }, 291 {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT },
183 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, 292 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT},
184 {KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL} 293 {KC_LCTL, KC_LALT, KC_LGUI, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, GREEK, KC_RALT, KC_RCTL}
185}, 294},
186 295
187/* Colemak 296/* Colemak
@@ -220,6 +329,42 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
220 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} 329 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
221}, 330},
222 331
332/* Uppercase Greek
333 * ,-----------------------------------------------------------------------------------.
334 * | | | | | | | | | | | | |
335 * |------+------+------+------+------+-------------+------+------+------+------+------|
336 * | | | | | | | | | | | | |
337 * |------+------+------+------+------+------+------+------+------+------+------+------|
338 * | | | | | | | | | | | | |
339 * |------+------+------+------+------+------+------+------+------+------+------+------|
340 * | | | | | | | | | | | | |
341 * `-----------------------------------------------------------------------------------'
342 */
343[_GREEKU] = {
344 {_______, _______, _______,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______},
345 {_______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), _______, _______},
346 {_______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), _______, _______, _______, _______},
347 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
348},
349
350/* Lowercase Greek
351 * ,-----------------------------------------------------------------------------------.
352 * | | | | | | | | | | | | |
353 * |------+------+------+------+------+-------------+------+------+------+------+------|
354 * | | | | | | | | | | | | |
355 * |------+------+------+------+------+------+------+------+------+------+------+------|
356 * | | | | | | | | | | | | |
357 * |------+------+------+------+------+------+------+------+------+------+------+------|
358 * | | | | | | | | | | | | |
359 * `-----------------------------------------------------------------------------------'
360 */
361[_GREEKL] = {
362 {_______, _______,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______},
363 {_______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), _______, _______},
364 {_______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), _______, _______, _______, _______},
365 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
366},
367
223/* Punc 368/* Punc
224 * ,-----------------------------------------------------------------------------------. 369 * ,-----------------------------------------------------------------------------------.
225 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` | 370 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` |
@@ -323,6 +468,7 @@ float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND);
323float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND); 468float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND);
324float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2)); 469float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2));
325float tone_release[][2] = SONG(MUSICAL_NOTE(_A3, 2)); 470float tone_release[][2] = SONG(MUSICAL_NOTE(_A3, 2));
471float tone_tolelot[][2] = SONG(Q__NOTE(_E5), Q__NOTE(_C5), Q__NOTE(_D5));
326#endif 472#endif
327 473
328void persistant_default_layer_set(uint16_t default_layer) { 474void persistant_default_layer_set(uint16_t default_layer) {
@@ -334,19 +480,61 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
334 // faux clicky 480 // faux clicky
335 // if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0); 481 // if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0);
336 #ifdef AUDIO_ENABLE 482 #ifdef AUDIO_ENABLE
483 #ifdef TOLELOT_ENABLE
484 if (record->event.pressed) {
485 PLAY_NOTE_ARRAY(tone_tolelot, false, 0);
486 }
487 #else
337 if (record->event.pressed) { 488 if (record->event.pressed) {
338 PLAY_NOTE_ARRAY(tone_click, false, 0); 489 PLAY_NOTE_ARRAY(tone_click, false, 0);
339 } else { 490 } else {
340 PLAY_NOTE_ARRAY(tone_release, false, 0); 491 PLAY_NOTE_ARRAY(tone_release, false, 0);
341 } 492 }
342 #endif 493 #endif
494 #endif
495
496 bool lshifted = keyboard_report->mods & MOD_BIT(KC_LSFT);
497 bool rshifted = keyboard_report->mods & MOD_BIT(KC_RSFT);
343 498
344 switch (keycode) { 499 switch (keycode) {
500 // Greek layer handling
501 case GREEK:
502 if (record->event.pressed) {
503 if (lshifted || rshifted) {
504 layer_on(_GREEKU);
505 layer_off(_GREEKL);
506 } else {
507 layer_on(_GREEKL);
508 layer_off(_GREEKU);
509 }
510 } else {
511 layer_off(_GREEKU);
512 layer_off(_GREEKL);
513 }
514 return false;
515 break;
516
517 case KC_LSFT:
518 case KC_RSFT:
519 ;
520 uint8_t layer = biton32(layer_state);
521 if (layer == _GREEKU || layer == _GREEKL) {
522 if (record->event.pressed) {
523 layer_on(_GREEKU);
524 layer_off(_GREEKL);
525 } else {
526 if (lshifted ^ rshifted) { // if only one shift is pressed
527 layer_on(_GREEKL);
528 layer_off(_GREEKU);
529 }
530 }
531 }
532 return true;
533 break;
534
345 // QWERTZ style comma and dot: semicolon and colon when shifted 535 // QWERTZ style comma and dot: semicolon and colon when shifted
346 case KC_COMM: 536 case KC_COMM:
347 if (record->event.pressed) { 537 if (record->event.pressed) {
348 bool lshifted = keyboard_report->mods & MOD_BIT(KC_LSFT);
349 bool rshifted = keyboard_report->mods & MOD_BIT(KC_RSFT);
350 if (lshifted || rshifted) { 538 if (lshifted || rshifted) {
351 if (lshifted) unregister_code(KC_LSFT); 539 if (lshifted) unregister_code(KC_LSFT);
352 if (rshifted) unregister_code(KC_RSFT); 540 if (rshifted) unregister_code(KC_RSFT);
diff --git a/keyboards/planck/keymaps/vifon/Makefile b/keyboards/planck/keymaps/vifon/Makefile
index 53660a2e7..15a7b736f 100644
--- a/keyboards/planck/keymaps/vifon/Makefile
+++ b/keyboards/planck/keymaps/vifon/Makefile
@@ -1,6 +1,3 @@
1# Please remove if no longer applicable
2$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
3$(warning Please disable some options in the Makefile to resolve)
4 1
5 2
6# Build Options 3# Build Options
@@ -10,7 +7,7 @@ $(warning Please disable some options in the Makefile to resolve)
10BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) 7BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
11MOUSEKEY_ENABLE = yes # Mouse keys(+4700) 8MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
12EXTRAKEY_ENABLE = yes # Audio control and System control(+450) 9EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
13CONSOLE_ENABLE = yes # Console for debug(+400) 10CONSOLE_ENABLE = no # Console for debug(+400)
14COMMAND_ENABLE = yes # Commands for debug and configuration 11COMMAND_ENABLE = yes # Commands for debug and configuration
15NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work 12NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
16BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality 13BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
diff --git a/keyboards/planck/keymaps/vifon/config.h b/keyboards/planck/keymaps/vifon/config.h
index 9cb0634fb..a08b37cbe 100644
--- a/keyboards/planck/keymaps/vifon/config.h
+++ b/keyboards/planck/keymaps/vifon/config.h
@@ -81,6 +81,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
81/* prevent the modifiers from being stuck, sacrificing some memory */ 81/* prevent the modifiers from being stuck, sacrificing some memory */
82#define PREVENT_STUCK_MODIFIERS 82#define PREVENT_STUCK_MODIFIERS
83 83
84/* A larger buffer for the dynamic macros as this keymap is not taking
85 * up that much memory.
86 */
87#define DYNAMIC_MACRO_SIZE 256
88
84#ifdef SUBPROJECT_rev3 89#ifdef SUBPROJECT_rev3
85 #include "rev3/config.h" 90 #include "rev3/config.h"
86#endif 91#endif
diff --git a/keyboards/planck/keymaps/vifon/keymap.c b/keyboards/planck/keymaps/vifon/keymap.c
index 80c4a516c..ee0c0ac36 100644
--- a/keyboards/planck/keymaps/vifon/keymap.c
+++ b/keyboards/planck/keymaps/vifon/keymap.c
@@ -62,7 +62,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
62[_PPG] = { /* Pure Pro: Gaming */ 62[_PPG] = { /* Pure Pro: Gaming */
63 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, 63 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
64 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, 64 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
65 {_______, _______, _______, _______, _______, _______, _______, _______, _______, DF(_RS), _______, _______}, 65 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
66 {_______, _______, XXXXXXX, _______, KM_RS , _______, _______, KM_LW , _______, _______, _______, _______}, 66 {_______, _______, XXXXXXX, _______, KM_RS , _______, _______, KM_LW , _______, _______, _______, _______},
67}, 67},
68[_NM] = { /* Numeric */ 68[_NM] = { /* Numeric */
@@ -90,7 +90,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
90 {_______, _______, KC_LGUI, KC_LALT, _______, _______, _______, _______, _______, _______, _______, _______} 90 {_______, _______, KC_LGUI, KC_LALT, _______, _______, _______, _______, _______, _______, _______, _______}
91}, 91},
92[_DYN]= { /* special */ 92[_DYN]= { /* special */
93 {_______, DYN_REC_START1, DYN_MACRO_PLAY1, _______, _______, _______, _______, _______, KC_INS, _______, KC_PSCR, KC_PAUS}, 93 {_______, DYN_REC_START1, DYN_MACRO_PLAY1, _______, _______, _______, _______, KC_APP, KC_INS, _______, KC_PSCR, KC_PAUS},
94 {_______, DYN_REC_START2, DYN_MACRO_PLAY2, _______, _______, _______, _______, _______, _______, KC_CAPS, KC_SLCK, KC_NLCK}, 94 {_______, DYN_REC_START2, DYN_MACRO_PLAY2, _______, _______, _______, _______, _______, _______, KC_CAPS, KC_SLCK, KC_NLCK},
95 {KM_SHLK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, 95 {KM_SHLK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
96 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} 96 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
diff --git a/keyboards/readme.md b/keyboards/readme.md
index 81a23c7e5..d2f41ad7e 100644
--- a/keyboards/readme.md
+++ b/keyboards/readme.md
@@ -51,5 +51,6 @@ These keyboards are part of the QMK repository, but their manufacturers are not
51* [S60-x](/keyboards/s60-x) &mdash; DIY compact keyboard designed by VinnyCordeiro for Sentraq. 51* [S60-x](/keyboards/s60-x) &mdash; DIY compact keyboard designed by VinnyCordeiro for Sentraq.
52* [Satan](/keyboards/satan) &mdash; A GH60 variant. 52* [Satan](/keyboards/satan) &mdash; A GH60 variant.
53* [SixKeyBoard](/keyboards/sixkeyboard) &mdash; A 6-key keyboard made by TechKeys. 53* [SixKeyBoard](/keyboards/sixkeyboard) &mdash; A 6-key keyboard made by TechKeys.
54* [TheVan 44](/keyboars/tv44) &mdash; A 44-key staggered keybard by Evangs. 54* [TheVan 44](/keyboards/tv44) &mdash; A 44-key staggered keybard by Evangs.
55* [WhiteFox](/keyboards/whitefox) &mdash; A 65% keyboard designed as a partnership by matt3o, Massdrop and Input Club
55* [Vision Division](/keyboards/vision_division) &mdash; Full Size / Split Linear Keyboard by IBNobody. 56* [Vision Division](/keyboards/vision_division) &mdash; Full Size / Split Linear Keyboard by IBNobody.
diff --git a/keyboards/tv44/keymaps/default/keymap.c b/keyboards/tv44/keymaps/default/keymap.c
index f3f989f2d..b9fe33a7c 100644
--- a/keyboards/tv44/keymaps/default/keymap.c
+++ b/keyboards/tv44/keymaps/default/keymap.c
@@ -30,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
30 [_QW] = { /* Qwerty */ 30 [_QW] = { /* Qwerty */
31 {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC }, 31 {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
32 {MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_L1) }, 32 {MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_L1) },
33 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_F, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) }, 33 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) },
34 {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } 34 {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) }
35 }, 35 },
36 [_DV] = { /* Dvorak */ 36 [_DV] = { /* Dvorak */
diff --git a/keyboards/whitefox/Makefile b/keyboards/whitefox/Makefile
new file mode 100644
index 000000000..4e2a6f00f
--- /dev/null
+++ b/keyboards/whitefox/Makefile
@@ -0,0 +1,3 @@
1ifndef MAKEFILE_INCLUDED
2 include ../../Makefile
3endif \ No newline at end of file
diff --git a/keyboards/whitefox/bootloader_defs.h b/keyboards/whitefox/bootloader_defs.h
new file mode 100644
index 000000000..c67153be6
--- /dev/null
+++ b/keyboards/whitefox/bootloader_defs.h
@@ -0,0 +1 @@
#define KIIBOHD_BOOTLOADER
diff --git a/keyboards/whitefox/chconf.h b/keyboards/whitefox/chconf.h
new file mode 100644
index 000000000..d9114ec85
--- /dev/null
+++ b/keyboards/whitefox/chconf.h
@@ -0,0 +1,524 @@
1/*
2 ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17/**
18 * @file templates/chconf.h
19 * @brief Configuration file template.
20 * @details A copy of this file must be placed in each project directory, it
21 * contains the application specific kernel settings.
22 *
23 * @addtogroup config
24 * @details Kernel related settings and hooks.
25 * @{
26 */
27
28#ifndef CHCONF_H
29#define CHCONF_H
30
31#define _CHIBIOS_RT_CONF_
32
33/*===========================================================================*/
34/**
35 * @name System timers settings
36 * @{
37 */
38/*===========================================================================*/
39
40/**
41 * @brief System time counter resolution.
42 * @note Allowed values are 16 or 32 bits.
43 */
44#define CH_CFG_ST_RESOLUTION 32
45
46/**
47 * @brief System tick frequency.
48 * @details Frequency of the system timer that drives the system ticks. This
49 * setting also defines the system tick time unit.
50 */
51#define CH_CFG_ST_FREQUENCY 100000
52
53/**
54 * @brief Time delta constant for the tick-less mode.
55 * @note If this value is zero then the system uses the classic
56 * periodic tick. This value represents the minimum number
57 * of ticks that is safe to specify in a timeout directive.
58 * The value one is not valid, timeouts are rounded up to
59 * this value.
60 */
61#define CH_CFG_ST_TIMEDELTA 0
62
63/** @} */
64
65/*===========================================================================*/
66/**
67 * @name Kernel parameters and options
68 * @{
69 */
70/*===========================================================================*/
71
72/**
73 * @brief Round robin interval.
74 * @details This constant is the number of system ticks allowed for the
75 * threads before preemption occurs. Setting this value to zero
76 * disables the preemption for threads with equal priority and the
77 * round robin becomes cooperative. Note that higher priority
78 * threads can still preempt, the kernel is always preemptive.
79 * @note Disabling the round robin preemption makes the kernel more compact
80 * and generally faster.
81 * @note The round robin preemption is not supported in tickless mode and
82 * must be set to zero in that case.
83 */
84#define CH_CFG_TIME_QUANTUM 20
85
86/**
87 * @brief Managed RAM size.
88 * @details Size of the RAM area to be managed by the OS. If set to zero
89 * then the whole available RAM is used. The core memory is made
90 * available to the heap allocator and/or can be used directly through
91 * the simplified core memory allocator.
92 *
93 * @note In order to let the OS manage the whole RAM the linker script must
94 * provide the @p __heap_base__ and @p __heap_end__ symbols.
95 * @note Requires @p CH_CFG_USE_MEMCORE.
96 */
97#define CH_CFG_MEMCORE_SIZE 0
98
99/**
100 * @brief Idle thread automatic spawn suppression.
101 * @details When this option is activated the function @p chSysInit()
102 * does not spawn the idle thread. The application @p main()
103 * function becomes the idle thread and must implement an
104 * infinite loop.
105 */
106#define CH_CFG_NO_IDLE_THREAD FALSE
107
108/* Use __WFI in the idle thread for waiting. Does lower the power
109 * consumption. */
110#define CORTEX_ENABLE_WFI_IDLE TRUE
111
112/** @} */
113
114/*===========================================================================*/
115/**
116 * @name Performance options
117 * @{
118 */
119/*===========================================================================*/
120
121/**
122 * @brief OS optimization.
123 * @details If enabled then time efficient rather than space efficient code
124 * is used when two possible implementations exist.
125 *
126 * @note This is not related to the compiler optimization options.
127 * @note The default is @p TRUE.
128 */
129#define CH_CFG_OPTIMIZE_SPEED TRUE
130
131/** @} */
132
133/*===========================================================================*/
134/**
135 * @name Subsystem options
136 * @{
137 */
138/*===========================================================================*/
139
140/**
141 * @brief Time Measurement APIs.
142 * @details If enabled then the time measurement APIs are included in
143 * the kernel.
144 *
145 * @note The default is @p TRUE.
146 */
147#define CH_CFG_USE_TM FALSE
148
149/**
150 * @brief Threads registry APIs.
151 * @details If enabled then the registry APIs are included in the kernel.
152 *
153 * @note The default is @p TRUE.
154 */
155#define CH_CFG_USE_REGISTRY TRUE
156
157/**
158 * @brief Threads synchronization APIs.
159 * @details If enabled then the @p chThdWait() function is included in
160 * the kernel.
161 *
162 * @note The default is @p TRUE.
163 */
164#define CH_CFG_USE_WAITEXIT TRUE
165
166/**
167 * @brief Semaphores APIs.
168 * @details If enabled then the Semaphores APIs are included in the kernel.
169 *
170 * @note The default is @p TRUE.
171 */
172#define CH_CFG_USE_SEMAPHORES TRUE
173
174/**
175 * @brief Semaphores queuing mode.
176 * @details If enabled then the threads are enqueued on semaphores by
177 * priority rather than in FIFO order.
178 *
179 * @note The default is @p FALSE. Enable this if you have special
180 * requirements.
181 * @note Requires @p CH_CFG_USE_SEMAPHORES.
182 */
183#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
184
185/**
186 * @brief Mutexes APIs.
187 * @details If enabled then the mutexes APIs are included in the kernel.
188 *
189 * @note The default is @p TRUE.
190 */
191#define CH_CFG_USE_MUTEXES TRUE
192
193/**
194 * @brief Enables recursive behavior on mutexes.
195 * @note Recursive mutexes are heavier and have an increased
196 * memory footprint.
197 *
198 * @note The default is @p FALSE.
199 * @note Requires @p CH_CFG_USE_MUTEXES.
200 */
201#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
202
203/**
204 * @brief Conditional Variables APIs.
205 * @details If enabled then the conditional variables APIs are included
206 * in the kernel.
207 *
208 * @note The default is @p TRUE.
209 * @note Requires @p CH_CFG_USE_MUTEXES.
210 */
211#define CH_CFG_USE_CONDVARS TRUE
212
213/**
214 * @brief Conditional Variables APIs with timeout.
215 * @details If enabled then the conditional variables APIs with timeout
216 * specification are included in the kernel.
217 *
218 * @note The default is @p TRUE.
219 * @note Requires @p CH_CFG_USE_CONDVARS.
220 */
221#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
222
223/**
224 * @brief Events Flags APIs.
225 * @details If enabled then the event flags APIs are included in the kernel.
226 *
227 * @note The default is @p TRUE.
228 */
229#define CH_CFG_USE_EVENTS TRUE
230
231/**
232 * @brief Events Flags APIs with timeout.
233 * @details If enabled then the events APIs with timeout specification
234 * are included in the kernel.
235 *
236 * @note The default is @p TRUE.
237 * @note Requires @p CH_CFG_USE_EVENTS.
238 */
239#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
240
241/**
242 * @brief Synchronous Messages APIs.
243 * @details If enabled then the synchronous messages APIs are included
244 * in the kernel.
245 *
246 * @note The default is @p TRUE.
247 */
248#define CH_CFG_USE_MESSAGES TRUE
249
250/**
251 * @brief Synchronous Messages queuing mode.
252 * @details If enabled then messages are served by priority rather than in
253 * FIFO order.
254 *
255 * @note The default is @p FALSE. Enable this if you have special
256 * requirements.
257 * @note Requires @p CH_CFG_USE_MESSAGES.
258 */
259#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
260
261/**
262 * @brief Mailboxes APIs.
263 * @details If enabled then the asynchronous messages (mailboxes) APIs are
264 * included in the kernel.
265 *
266 * @note The default is @p TRUE.
267 * @note Requires @p CH_CFG_USE_SEMAPHORES.
268 */
269#define CH_CFG_USE_MAILBOXES TRUE
270
271/**
272 * @brief Core Memory Manager APIs.
273 * @details If enabled then the core memory manager APIs are included
274 * in the kernel.
275 *
276 * @note The default is @p TRUE.
277 */
278#define CH_CFG_USE_MEMCORE TRUE
279
280/**
281 * @brief Heap Allocator APIs.
282 * @details If enabled then the memory heap allocator APIs are included
283 * in the kernel.
284 *
285 * @note The default is @p TRUE.
286 * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
287 * @p CH_CFG_USE_SEMAPHORES.
288 * @note Mutexes are recommended.
289 */
290#define CH_CFG_USE_HEAP TRUE
291
292/**
293 * @brief Memory Pools Allocator APIs.
294 * @details If enabled then the memory pools allocator APIs are included
295 * in the kernel.
296 *
297 * @note The default is @p TRUE.
298 */
299#define CH_CFG_USE_MEMPOOLS TRUE
300
301/**
302 * @brief Dynamic Threads APIs.
303 * @details If enabled then the dynamic threads creation APIs are included
304 * in the kernel.
305 *
306 * @note The default is @p TRUE.
307 * @note Requires @p CH_CFG_USE_WAITEXIT.
308 * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
309 */
310#define CH_CFG_USE_DYNAMIC TRUE
311
312/** @} */
313
314/*===========================================================================*/
315/**
316 * @name Debug options
317 * @{
318 */
319/*===========================================================================*/
320
321/**
322 * @brief Debug option, kernel statistics.
323 *
324 * @note The default is @p FALSE.
325 */
326#define CH_DBG_STATISTICS FALSE
327
328/**
329 * @brief Debug option, system state check.
330 * @details If enabled the correct call protocol for system APIs is checked
331 * at runtime.
332 *
333 * @note The default is @p FALSE.
334 */
335#define CH_DBG_SYSTEM_STATE_CHECK FALSE
336
337/**
338 * @brief Debug option, parameters checks.
339 * @details If enabled then the checks on the API functions input
340 * parameters are activated.
341 *
342 * @note The default is @p FALSE.
343 */
344#define CH_DBG_ENABLE_CHECKS FALSE
345
346/**
347 * @brief Debug option, consistency checks.
348 * @details If enabled then all the assertions in the kernel code are
349 * activated. This includes consistency checks inside the kernel,
350 * runtime anomalies and port-defined checks.
351 *
352 * @note The default is @p FALSE.
353 */
354#define CH_DBG_ENABLE_ASSERTS FALSE
355
356/**
357 * @brief Debug option, trace buffer.
358 * @details If enabled then the trace buffer is activated.
359 *
360 * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
361 */
362#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
363
364/**
365 * @brief Trace buffer entries.
366 * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
367 * different from @p CH_DBG_TRACE_MASK_DISABLED.
368 */
369#define CH_DBG_TRACE_BUFFER_SIZE 128
370
371/**
372 * @brief Debug option, stack checks.
373 * @details If enabled then a runtime stack check is performed.
374 *
375 * @note The default is @p FALSE.
376 * @note The stack check is performed in a architecture/port dependent way.
377 * It may not be implemented or some ports.
378 * @note The default failure mode is to halt the system with the global
379 * @p panic_msg variable set to @p NULL.
380 */
381#define CH_DBG_ENABLE_STACK_CHECK FALSE
382
383/**
384 * @brief Debug option, stacks initialization.
385 * @details If enabled then the threads working area is filled with a byte
386 * value when a thread is created. This can be useful for the
387 * runtime measurement of the used stack.
388 *
389 * @note The default is @p FALSE.
390 */
391#define CH_DBG_FILL_THREADS FALSE
392
393/**
394 * @brief Debug option, threads profiling.
395 * @details If enabled then a field is added to the @p thread_t structure that
396 * counts the system ticks occurred while executing the thread.
397 *
398 * @note The default is @p FALSE.
399 * @note This debug option is not currently compatible with the
400 * tickless mode.
401 */
402#define CH_DBG_THREADS_PROFILING FALSE
403
404/** @} */
405
406/*===========================================================================*/
407/**
408 * @name Kernel hooks
409 * @{
410 */
411/*===========================================================================*/
412
413/**
414 * @brief Threads descriptor structure extension.
415 * @details User fields added to the end of the @p thread_t structure.
416 */
417#define CH_CFG_THREAD_EXTRA_FIELDS \
418 /* Add threads custom fields here.*/
419
420/**
421 * @brief Threads initialization hook.
422 * @details User initialization code added to the @p chThdInit() API.
423 *
424 * @note It is invoked from within @p chThdInit() and implicitly from all
425 * the threads creation APIs.
426 */
427#define CH_CFG_THREAD_INIT_HOOK(tp) { \
428 /* Add threads initialization code here.*/ \
429}
430
431/**
432 * @brief Threads finalization hook.
433 * @details User finalization code added to the @p chThdExit() API.
434 */
435#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
436 /* Add threads finalization code here.*/ \
437}
438
439/**
440 * @brief Context switch hook.
441 * @details This hook is invoked just before switching between threads.
442 */
443#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
444 /* Context switch code here.*/ \
445}
446
447/**
448 * @brief ISR enter hook.
449 */
450#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
451 /* IRQ prologue code here.*/ \
452}
453
454/**
455 * @brief ISR exit hook.
456 */
457#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
458 /* IRQ epilogue code here.*/ \
459}
460
461/**
462 * @brief Idle thread enter hook.
463 * @note This hook is invoked within a critical zone, no OS functions
464 * should be invoked from here.
465 * @note This macro can be used to activate a power saving mode.
466 */
467#define CH_CFG_IDLE_ENTER_HOOK() { \
468 /* Idle-enter code here.*/ \
469}
470
471/**
472 * @brief Idle thread leave hook.
473 * @note This hook is invoked within a critical zone, no OS functions
474 * should be invoked from here.
475 * @note This macro can be used to deactivate a power saving mode.
476 */
477#define CH_CFG_IDLE_LEAVE_HOOK() { \
478 /* Idle-leave code here.*/ \
479}
480
481/**
482 * @brief Idle Loop hook.
483 * @details This hook is continuously invoked by the idle thread loop.
484 */
485#define CH_CFG_IDLE_LOOP_HOOK() { \
486 /* Idle loop code here.*/ \
487}
488
489/**
490 * @brief System tick event hook.
491 * @details This hook is invoked in the system tick handler immediately
492 * after processing the virtual timers queue.
493 */
494#define CH_CFG_SYSTEM_TICK_HOOK() { \
495 /* System tick event code here.*/ \
496}
497
498/**
499 * @brief System halt hook.
500 * @details This hook is invoked in case to a system halting error before
501 * the system is halted.
502 */
503#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
504 /* System halt code here.*/ \
505}
506
507/**
508 * @brief Trace hook.
509 * @details This hook is invoked each time a new record is written in the
510 * trace buffer.
511 */
512#define CH_CFG_TRACE_HOOK(tep) { \
513 /* Trace code here.*/ \
514}
515
516/** @} */
517
518/*===========================================================================*/
519/* Port-specific settings (override port settings defaulted in chcore.h). */
520/*===========================================================================*/
521
522#endif /* CHCONF_H */
523
524/** @} */
diff --git a/keyboards/whitefox/config.h b/keyboards/whitefox/config.h
new file mode 100644
index 000000000..b7116341f
--- /dev/null
+++ b/keyboards/whitefox/config.h
@@ -0,0 +1,78 @@
1/*
2Copyright 2015 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#define PREVENT_STUCK_MODIFIERS
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEED
25#define PRODUCT_ID 0x0F0F
26#define DEVICE_VER 0x0001
27/* in python2: list(u"whatever".encode('utf-16-le')) */
28/* at most 32 characters or the ugly hack in usb_main.c borks */
29#define MANUFACTURER "Input Club"
30#define USBSTR_MANUFACTURER 'I', '\x00', 'n', '\x00', 'p', '\x00', 'u', '\x00', 't', '\x00', ' ', '\x00', 'C', '\x00', 'l', '\x00', 'u', '\x00', 'b', '\x00'
31#define PRODUCT "WhiteFox/QMK"
32#define USBSTR_PRODUCT 'W', '\x00', 'h', '\x00', 'i', '\x00', 't', '\x00', 'e', '\x00', 'F', '\x00', 'o', '\x00', 'x', '\x00', ' ', '\x00'
33
34/* key matrix size */
35#define MATRIX_ROWS 9
36#define MATRIX_COLS 8
37
38/* define if matrix has ghost */
39//#define MATRIX_HAS_GHOST
40
41/* Set 0 if debouncing isn't needed */
42#define DEBOUNCE 6
43
44/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
45//#define LOCKING_SUPPORT_ENABLE
46/* Locking resynchronize hack */
47//#define LOCKING_RESYNC_ENABLE
48
49/* key combination for command */
50#define IS_COMMAND() ( \
51 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
52)
53
54/* Keymap for Infinity prototype */
55//#define INFINITY_PROTOTYPE
56
57/* Keymap for Infinity 1.1a (first revision with LED support) */
58//#define INFINITY_LED
59
60/*
61 * Feature disable options
62 * These options are also useful to firmware size reduction.
63 */
64
65/* disable debug print */
66//#define NO_DEBUG
67
68/* disable print */
69//#define NO_PRINT
70
71/* disable action features */
72//#define NO_ACTION_LAYER
73//#define NO_ACTION_TAPPING
74//#define NO_ACTION_ONESHOT
75//#define NO_ACTION_MACRO
76//#define NO_ACTION_FUNCTION
77
78#endif
diff --git a/keyboards/whitefox/halconf.h b/keyboards/whitefox/halconf.h
new file mode 100644
index 000000000..46b37a4f4
--- /dev/null
+++ b/keyboards/whitefox/halconf.h
@@ -0,0 +1,353 @@
1/*
2 ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17/**
18 * @file templates/halconf.h
19 * @brief HAL configuration header.
20 * @details HAL configuration file, this file allows to enable or disable the
21 * various device drivers from your application. You may also use
22 * this file in order to override the device drivers default settings.
23 *
24 * @addtogroup HAL_CONF
25 * @{
26 */
27
28#ifndef _HALCONF_H_
29#define _HALCONF_H_
30
31#include "mcuconf.h"
32
33/**
34 * @brief Enables the PAL subsystem.
35 */
36#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
37#define HAL_USE_PAL TRUE
38#endif
39
40/**
41 * @brief Enables the ADC subsystem.
42 */
43#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
44#define HAL_USE_ADC FALSE
45#endif
46
47/**
48 * @brief Enables the CAN subsystem.
49 */
50#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
51#define HAL_USE_CAN FALSE
52#endif
53
54/**
55 * @brief Enables the DAC subsystem.
56 */
57#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
58#define HAL_USE_DAC FALSE
59#endif
60
61/**
62 * @brief Enables the EXT subsystem.
63 */
64#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
65#define HAL_USE_EXT FALSE
66#endif
67
68/**
69 * @brief Enables the GPT subsystem.
70 */
71#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
72#define HAL_USE_GPT FALSE
73#endif
74
75/**
76 * @brief Enables the I2C subsystem.
77 */
78#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
79#define HAL_USE_I2C FALSE
80#endif
81
82/**
83 * @brief Enables the I2S subsystem.
84 */
85#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
86#define HAL_USE_I2S FALSE
87#endif
88
89/**
90 * @brief Enables the ICU subsystem.
91 */
92#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
93#define HAL_USE_ICU FALSE
94#endif
95
96/**
97 * @brief Enables the MAC subsystem.
98 */
99#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
100#define HAL_USE_MAC FALSE
101#endif
102
103/**
104 * @brief Enables the MMC_SPI subsystem.
105 */
106#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
107#define HAL_USE_MMC_SPI FALSE
108#endif
109
110/**
111 * @brief Enables the PWM subsystem.
112 */
113#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
114#define HAL_USE_PWM FALSE
115#endif
116
117/**
118 * @brief Enables the RTC subsystem.
119 */
120#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
121#define HAL_USE_RTC FALSE
122#endif
123
124/**
125 * @brief Enables the SDC subsystem.
126 */
127#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
128#define HAL_USE_SDC FALSE
129#endif
130
131/**
132 * @brief Enables the SERIAL subsystem.
133 */
134#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
135#define HAL_USE_SERIAL FALSE
136#endif
137
138/**
139 * @brief Enables the SERIAL over USB subsystem.
140 */
141#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
142#define HAL_USE_SERIAL_USB TRUE
143#endif
144
145/**
146 * @brief Enables the SPI subsystem.
147 */
148#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
149#define HAL_USE_SPI FALSE
150#endif
151
152/**
153 * @brief Enables the UART subsystem.
154 */
155#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
156#define HAL_USE_UART FALSE
157#endif
158
159/**
160 * @brief Enables the USB subsystem.
161 */
162#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
163#define HAL_USE_USB TRUE
164#endif
165
166/**
167 * @brief Enables the WDG subsystem.
168 */
169#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
170#define HAL_USE_WDG FALSE
171#endif
172
173/*===========================================================================*/
174/* ADC driver related settings. */
175/*===========================================================================*/
176
177/**
178 * @brief Enables synchronous APIs.
179 * @note Disabling this option saves both code and data space.
180 */
181#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
182#define ADC_USE_WAIT TRUE
183#endif
184
185/**
186 * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
187 * @note Disabling this option saves both code and data space.
188 */
189#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
190#define ADC_USE_MUTUAL_EXCLUSION TRUE
191#endif
192
193/*===========================================================================*/
194/* CAN driver related settings. */
195/*===========================================================================*/
196
197/**
198 * @brief Sleep mode related APIs inclusion switch.
199 */
200#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
201#define CAN_USE_SLEEP_MODE TRUE
202#endif
203
204/*===========================================================================*/
205/* I2C driver related settings. */
206/*===========================================================================*/
207
208/**
209 * @brief Enables the mutual exclusion APIs on the I2C bus.
210 */
211#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
212#define I2C_USE_MUTUAL_EXCLUSION TRUE
213#endif
214
215/*===========================================================================*/
216/* MAC driver related settings. */
217/*===========================================================================*/
218
219/**
220 * @brief Enables an event sources for incoming packets.
221 */
222#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
223#define MAC_USE_ZERO_COPY FALSE
224#endif
225
226/**
227 * @brief Enables an event sources for incoming packets.
228 */
229#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
230#define MAC_USE_EVENTS TRUE
231#endif
232
233/*===========================================================================*/
234/* MMC_SPI driver related settings. */
235/*===========================================================================*/
236
237/**
238 * @brief Delays insertions.
239 * @details If enabled this options inserts delays into the MMC waiting
240 * routines releasing some extra CPU time for the threads with
241 * lower priority, this may slow down the driver a bit however.
242 * This option is recommended also if the SPI driver does not
243 * use a DMA channel and heavily loads the CPU.
244 */
245#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
246#define MMC_NICE_WAITING TRUE
247#endif
248
249/*===========================================================================*/
250/* SDC driver related settings. */
251/*===========================================================================*/
252
253/**
254 * @brief Number of initialization attempts before rejecting the card.
255 * @note Attempts are performed at 10mS intervals.
256 */
257#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
258#define SDC_INIT_RETRY 100
259#endif
260
261/**
262 * @brief Include support for MMC cards.
263 * @note MMC support is not yet implemented so this option must be kept
264 * at @p FALSE.
265 */
266#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
267#define SDC_MMC_SUPPORT FALSE
268#endif
269
270/**
271 * @brief Delays insertions.
272 * @details If enabled this options inserts delays into the MMC waiting
273 * routines releasing some extra CPU time for the threads with
274 * lower priority, this may slow down the driver a bit however.
275 */
276#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
277#define SDC_NICE_WAITING TRUE
278#endif
279
280/*===========================================================================*/
281/* SERIAL driver related settings. */
282/*===========================================================================*/
283
284/**
285 * @brief Default bit rate.
286 * @details Configuration parameter, this is the baud rate selected for the
287 * default configuration.
288 */
289#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
290#define SERIAL_DEFAULT_BITRATE 38400
291#endif
292
293/**
294 * @brief Serial buffers size.
295 * @details Configuration parameter, you can change the depth of the queue
296 * buffers depending on the requirements of your application.
297 * @note The default is 64 bytes for both the transmission and receive
298 * buffers.
299 */
300#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
301#define SERIAL_BUFFERS_SIZE 16
302#endif
303
304/*===========================================================================*/
305/* SERIAL_USB driver related setting. */
306/*===========================================================================*/
307
308/**
309 * @brief Serial over USB buffers size.
310 * @details Configuration parameter, the buffer size must be a multiple of
311 * the USB data endpoint maximum packet size.
312 * @note The default is 64 bytes for both the transmission and receive
313 * buffers.
314 */
315#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
316#define SERIAL_USB_BUFFERS_SIZE 256
317#endif
318
319/*===========================================================================*/
320/* SPI driver related settings. */
321/*===========================================================================*/
322
323/**
324 * @brief Enables synchronous APIs.
325 * @note Disabling this option saves both code and data space.
326 */
327#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
328#define SPI_USE_WAIT TRUE
329#endif
330
331/**
332 * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
333 * @note Disabling this option saves both code and data space.
334 */
335#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
336#define SPI_USE_MUTUAL_EXCLUSION TRUE
337#endif
338
339/*===========================================================================*/
340/* USB driver related settings. */
341/*===========================================================================*/
342
343/**
344 * @brief Enables synchronous APIs.
345 * @note Disabling this option saves both code and data space.
346 */
347#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
348#define USB_USE_WAIT TRUE
349#endif
350
351#endif /* _HALCONF_H_ */
352
353/** @} */
diff --git a/keyboards/whitefox/keymaps/default/keymap.c b/keyboards/whitefox/keymaps/default/keymap.c
new file mode 100644
index 000000000..714f90659
--- /dev/null
+++ b/keyboards/whitefox/keymaps/default/keymap.c
@@ -0,0 +1,51 @@
1/*
2Copyright 2015 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#include "whitefox.h"
18
19const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 /* Layer 0: Default Layer
21 * ,---------------------------------------------------------------.
22 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|Ins|
23 * |---------------------------------------------------------------|
24 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|Del|
25 * |---------------------------------------------------------------|
26 * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Enter |PgU|
27 * |---------------------------------------------------------------|
28 * |Shif| | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgD|
29 * |---------------------------------------------------------------|
30 * |Ctrl|Gui |Alt | Space |Fn0 |Alt |Gui | |Lef|Dow|Rig|
31 * `---------------------------------------------------------------'
32 */
33 [0] = KEYMAP( \
34 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_BSLS,KC_GRV, KC_INS, \
35 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_BSPC, KC_DEL, \
36 KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS,KC_ENT, KC_PGUP,\
37 KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_PGDN,\
38 KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_FN0, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \
39 ),
40 [1] = KEYMAP( \
41 KC_TRNS,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_TRNS,KC_TRNS,KC_MUTE,\
42 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS,KC_TRNS, KC_TRNS,\
43 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_VOLU,\
44 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_PGUP,KC_VOLD,\
45 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_HOME,KC_PGDN,KC_END \
46 ),
47};
48
49const uint16_t fn_actions[] = {
50 [0] = ACTION_LAYER_MOMENTARY(1),
51};
diff --git a/keyboards/whitefox/keymaps/matt3o/keymap.c b/keyboards/whitefox/keymaps/matt3o/keymap.c
new file mode 100644
index 000000000..4455886a5
--- /dev/null
+++ b/keyboards/whitefox/keymaps/matt3o/keymap.c
@@ -0,0 +1,92 @@
1/*
2Copyright 2015 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#include "whitefox.h"
18
19const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 /* Layer 0: Default Layer
21 * ,---------------------------------------------------------------.
22 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|Ins|
23 * |---------------------------------------------------------------|
24 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|Del|
25 * |---------------------------------------------------------------|
26 * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Enter |PgU|
27 * |---------------------------------------------------------------|
28 * |Shif| | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgD|
29 * |---------------------------------------------------------------|
30 * |Ctrl|Gui |Alt | Space |Fn0 |Alt |Gui | |Lef|Dow|Rig|
31 * `---------------------------------------------------------------'
32 */
33 [0] = KEYMAP( \
34 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_BSLS,KC_GRV, KC_MUTE,\
35 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_BSPC, KC_DEL, \
36 KC_FN0, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS,KC_ENT, KC_PGUP,\
37 KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_PGDN,\
38 KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_FN1, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \
39 ),
40 [1] = KEYMAP( \
41 KC_TRNS,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_TRNS,KC_TRNS,KC_TRNS,\
42 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_DEL , KC_INS ,\
43 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_VOLU,\
44 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_PGUP,KC_VOLD,\
45 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_HOME,KC_PGDN,KC_END \
46 ),
47 [2] = KEYMAP( \
48 KC_SLEP,KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_FN2, \
49 KC_TRNS,KC_TRNS,KC_FN5 ,KC_FN6 ,KC_TRNS,KC_FN7 ,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_TRNS,KC_TRNS,KC_TRNS, KC_FN3, \
50 KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_FN4 ,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,\
51 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_CALC,KC_TRNS,KC_TRNS,KC_TRNS,KC_MAIL,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,\
52 KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS \
53 ),
54};
55
56/* Give numbers some descriptive names */
57#define ACTION_LEDS_ALL 1
58#define ACTION_LEDS_GAME 2
59
60const uint16_t fn_actions[] = {
61 [0] = ACTION_LAYER_MOMENTARY(1),
62 [1] = ACTION_LAYER_MOMENTARY(2),
63 [2] = ACTION_FUNCTION(ACTION_LEDS_ALL),
64 [3] = ACTION_FUNCTION(ACTION_LEDS_GAME),
65
66 [4] = ACTION_USAGE_CONSUMER(0x1B4),
67 [5] = ACTION_USAGE_CONSUMER(0x196),
68 [6] = ACTION_USAGE_CONSUMER(0x1A6),
69 [7] = ACTION_USAGE_CONSUMER(0x1A0),
70
71};
72
73/* custom action function */
74void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
75 /*
76 (void)opt;
77 switch(id) {
78 case ACTION_LEDS_ALL:
79 if(record->event.pressed) {
80 // signal the LED controller thread
81 chMBPost(&led_mailbox, LED_MSG_GAME_TOGGLE, TIME_IMMEDIATE);
82 }
83 break;
84 case ACTION_LEDS_GAME:
85 if(record->event.pressed) {
86 // signal the LED controller thread
87 chMBPost(&led_mailbox, LED_MSG_ALL_TOGGLE, TIME_IMMEDIATE);
88 }
89 break;
90 }
91 */
92}
diff --git a/keyboards/whitefox/led.c b/keyboards/whitefox/led.c
new file mode 100644
index 000000000..aed66c7c0
--- /dev/null
+++ b/keyboards/whitefox/led.c
@@ -0,0 +1,24 @@
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#include "hal.h"
19
20#include "led.h"
21
22
23void led_set(uint8_t usb_led) {
24}
diff --git a/keyboards/whitefox/matrix.c b/keyboards/whitefox/matrix.c
new file mode 100644
index 000000000..9202ab023
--- /dev/null
+++ b/keyboards/whitefox/matrix.c
@@ -0,0 +1,132 @@
1#include <stdint.h>
2#include <stdbool.h>
3#include <string.h>
4#include "hal.h"
5#include "timer.h"
6#include "wait.h"
7#include "print.h"
8#include "matrix.h"
9
10
11/*
12 * Matt3o's WhiteFox
13 * Column pins are input with internal pull-down. Row pins are output and strobe with high.
14 * Key is high or 1 when it turns on.
15 *
16 * col: { PTD0, PTD1, PTD4, PTD5, PTD6, PTD7, PTC1, PTC2 }
17 * row: { PTB2, PTB3, PTB18, PTB19, PTC0, PTC8, PTC9, PTC10, PTC11 }
18 */
19/* matrix state(1:on, 0:off) */
20static matrix_row_t matrix[MATRIX_ROWS];
21static matrix_row_t matrix_debouncing[MATRIX_ROWS];
22static bool debouncing = false;
23static uint16_t debouncing_time = 0;
24
25
26void matrix_init(void)
27{
28//debug_matrix = true;
29 /* Column(sense) */
30 palSetPadMode(GPIOD, 0, PAL_MODE_INPUT_PULLDOWN);
31 palSetPadMode(GPIOD, 1, PAL_MODE_INPUT_PULLDOWN);
32 palSetPadMode(GPIOD, 4, PAL_MODE_INPUT_PULLDOWN);
33 palSetPadMode(GPIOD, 5, PAL_MODE_INPUT_PULLDOWN);
34 palSetPadMode(GPIOD, 6, PAL_MODE_INPUT_PULLDOWN);
35 palSetPadMode(GPIOD, 7, PAL_MODE_INPUT_PULLDOWN);
36 palSetPadMode(GPIOC, 1, PAL_MODE_INPUT_PULLDOWN);
37 palSetPadMode(GPIOC, 2, PAL_MODE_INPUT_PULLDOWN);
38
39 /* Row(strobe) */
40 palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL);
41 palSetPadMode(GPIOB, 3, PAL_MODE_OUTPUT_PUSHPULL);
42 palSetPadMode(GPIOB, 18, PAL_MODE_OUTPUT_PUSHPULL);
43 palSetPadMode(GPIOB, 19, PAL_MODE_OUTPUT_PUSHPULL);
44 palSetPadMode(GPIOC, 0, PAL_MODE_OUTPUT_PUSHPULL);
45 palSetPadMode(GPIOC, 8, PAL_MODE_OUTPUT_PUSHPULL);
46 palSetPadMode(GPIOC, 9, PAL_MODE_OUTPUT_PUSHPULL);
47 palSetPadMode(GPIOC, 10, PAL_MODE_OUTPUT_PUSHPULL);
48 palSetPadMode(GPIOC, 11, PAL_MODE_OUTPUT_PUSHPULL);
49
50 memset(matrix, 0, MATRIX_ROWS);
51 memset(matrix_debouncing, 0, MATRIX_ROWS);
52}
53
54uint8_t matrix_scan(void)
55{
56 for (int row = 0; row < MATRIX_ROWS; row++) {
57 matrix_row_t data = 0;
58
59 // strobe row
60 switch (row) {
61 case 0: palSetPad(GPIOB, 2); break;
62 case 1: palSetPad(GPIOB, 3); break;
63 case 2: palSetPad(GPIOB, 18); break;
64 case 3: palSetPad(GPIOB, 19); break;
65 case 4: palSetPad(GPIOC, 0); break;
66 case 5: palSetPad(GPIOC, 8); break;
67 case 6: palSetPad(GPIOC, 9); break;
68 case 7: palSetPad(GPIOC, 10); break;
69 case 8: palSetPad(GPIOC, 11); break;
70 }
71
72 wait_us(20); // need wait to settle pin state
73
74 // read col data: { PTD0, PTD1, PTD4, PTD5, PTD6, PTD7, PTC1, PTC2 }
75 data = ((palReadPort(GPIOC) & 0x06UL) << 5) |
76 ((palReadPort(GPIOD) & 0xF0UL) >> 2) |
77 (palReadPort(GPIOD) & 0x03UL);
78
79 // un-strobe row
80 switch (row) {
81 case 0: palClearPad(GPIOB, 2); break;
82 case 1: palClearPad(GPIOB, 3); break;
83 case 2: palClearPad(GPIOB, 18); break;
84 case 3: palClearPad(GPIOB, 19); break;
85 case 4: palClearPad(GPIOC, 0); break;
86 case 5: palClearPad(GPIOC, 8); break;
87 case 6: palClearPad(GPIOC, 9); break;
88 case 7: palClearPad(GPIOC, 10); break;
89 case 8: palClearPad(GPIOC, 11); break;
90 }
91
92 if (matrix_debouncing[row] != data) {
93 matrix_debouncing[row] = data;
94 debouncing = true;
95 debouncing_time = timer_read();
96 }
97 }
98
99 if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
100 for (int row = 0; row < MATRIX_ROWS; row++) {
101 matrix[row] = matrix_debouncing[row];
102 }
103 debouncing = false;
104 }
105 return 1;
106}
107
108bool matrix_is_on(uint8_t row, uint8_t col)
109{
110 return (matrix[row] & (1<<col));
111}
112
113matrix_row_t matrix_get_row(uint8_t row)
114{
115 return matrix[row];
116}
117
118void matrix_print(void)
119{
120 xprintf("\nr/c 01234567\n");
121 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
122 xprintf("%X0: ", row);
123 matrix_row_t data = matrix_get_row(row);
124 for (int col = 0; col < MATRIX_COLS; col++) {
125 if (data & (1<<col))
126 xprintf("1");
127 else
128 xprintf("0");
129 }
130 xprintf("\n");
131 }
132}
diff --git a/keyboards/whitefox/mcuconf.h b/keyboards/whitefox/mcuconf.h
new file mode 100644
index 000000000..28f3c6cda
--- /dev/null
+++ b/keyboards/whitefox/mcuconf.h
@@ -0,0 +1,54 @@
1/*
2 ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17#ifndef _MCUCONF_H_
18#define _MCUCONF_H_
19
20#define K20x_MCUCONF
21
22/*
23 * HAL driver system settings.
24 */
25
26/* Select the MCU clocking mode below by enabling the appropriate block. */
27
28#define KINETIS_NO_INIT FALSE
29
30/* PEE mode - 48MHz system clock driven by external crystal. */
31#define KINETIS_MCG_MODE KINETIS_MCG_MODE_PEE
32#define KINETIS_PLLCLK_FREQUENCY 72000000UL
33#define KINETIS_SYSCLK_FREQUENCY 72000000UL
34#define KINETIS_BUSCLK_FREQUENCY 36000000UL
35#define KINETIS_FLASHCLK_FREQUENCY 24000000UL
36
37/*
38 * SERIAL driver system settings.
39 */
40#define KINETIS_SERIAL_USE_UART0 TRUE
41
42/*
43 * USB driver settings
44 */
45#define KINETIS_USB_USE_USB0 TRUE
46#define KINETIS_USB_USB0_IRQ_PRIORITY 5
47
48/*
49 * I2C driver settings
50 */
51#define KINETIS_I2C_USE_I2C0 TRUE
52#define KINETIS_I2C_I2C0_PRIORITY 4
53
54#endif /* _MCUCONF_H_ */
diff --git a/keyboards/whitefox/readme.md b/keyboards/whitefox/readme.md
new file mode 100644
index 000000000..0714ad563
--- /dev/null
+++ b/keyboards/whitefox/readme.md
@@ -0,0 +1,7 @@
1WhiteFox keyboard firmware
2======================
3
4This is an experimental port which came from the original TMK WhiteFox repo.
5
6The LED controller was not ported, as the original was a dirty hack and it would
7be good to have complete support.
diff --git a/keyboards/whitefox/rules.mk b/keyboards/whitefox/rules.mk
new file mode 100644
index 000000000..18b690f49
--- /dev/null
+++ b/keyboards/whitefox/rules.mk
@@ -0,0 +1,68 @@
1# project specific files
2SRC = matrix.c \
3 led.c
4
5## chip/board settings
6# - the next two should match the directories in
7# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
8# - For Teensies, FAMILY = KINETIS and SERIES is either
9# KL2x (LC) or K20x (3.0,3.1,3.2).
10# - For Infinity KB, SERIES = K20x
11MCU_FAMILY = KINETIS
12MCU_SERIES = K20x
13
14# Linker script to use
15# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
16# or <this_dir>/ld/
17# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
18# - LDSCRIPT =
19# - MKL26Z64 for Teensy LC
20# - MK20DX128 for Teensy 3.0
21# - MK20DX256 for Teensy 3.1 and 3.2
22# - MK20DX128BLDR4 for Infinity with Kiibohd bootloader
23# - MK20DX256BLDR8 for Infinity ErgoDox with Kiibohd bootloader
24MCU_LDSCRIPT = MK20DX256BLDR8
25
26# Startup code to use
27# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
28# - STARTUP =
29# - kl2x for Teensy LC
30# - k20x5 for Teensy 3.0 and Infinity KB
31# - k20x7 for Teensy 3.1 and 3.2
32MCU_STARTUP = k20x7
33
34# Board: it should exist either in <chibios>/os/hal/boards/
35# or <this_dir>/boards
36# - BOARD =
37# - PJRC_TEENSY_LC for Teensy LC
38# - PJRC_TEENSY_3 for Teensy 3.0
39# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
40# - MCHCK_K20 for Infinity KB
41BOARD = PJRC_TEENSY_3_1
42
43# Cortex version
44# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
45MCU = cortex-m4
46
47# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
48# I.e. 6 for Teensy LC; 7 for Teensy 3.x
49ARMV = 7
50
51# Vector table for application
52# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
53# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
54#OPT_DEFS = -DCORTEX_VTOR_INIT=0x00001000
55OPT_DEFS =
56
57# Build Options
58# comment out to disable the options.
59#
60BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration
61## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
62MOUSEKEY_ENABLE ?= yes # Mouse keys
63EXTRAKEY_ENABLE ?= yes # Audio control and System control
64#CONSOLE_ENABLE ?= yes # Console for debug
65COMMAND_ENABLE ?= yes # Commands for debug and configuration
66#SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
67NKRO_ENABLE ?= yes # USB Nkey Rollover
68CUSTOM_MATRIX ?= yes # Custom matrix file
diff --git a/keyboards/whitefox/whitefox.c b/keyboards/whitefox/whitefox.c
new file mode 100644
index 000000000..d35bf8338
--- /dev/null
+++ b/keyboards/whitefox/whitefox.c
@@ -0,0 +1,17 @@
1/*
2Copyright 2012,2013 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#include "whitefox.h"
diff --git a/keyboards/whitefox/whitefox.h b/keyboards/whitefox/whitefox.h
new file mode 100644
index 000000000..3b3c6bd21
--- /dev/null
+++ b/keyboards/whitefox/whitefox.h
@@ -0,0 +1,54 @@
1/*
2Copyright 2014 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#ifndef WHITEFOX_H
18#define WHITEFOX_H
19
20#include "quantum.h"
21
22/* WhiteFox
23 * ,---------------------------------------------------------------.
24 * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|Ins|
25 * |---------------------------------------------------------------|
26 * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|Del|
27 * |---------------------------------------------------------------|
28 * |CapsL | A| S| D| F| G| H| J| K| L| ;| '|Enter |PgU|
29 * |---------------------------------------------------------------|
30 * |Shif| | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgD|
31 * |---------------------------------------------------------------|
32 * |Ctrl|Gui |Alt | Space |App |Alt |Gui | |Lef|Dow|Rig|
33 * `---------------------------------------------------------------'
34 */
35
36#define KEYMAP( \
37 K00, K10, K20, K30, K40, K50, K60, K70, K80, K01, K11, K21, K31, K41, K51, K61, \
38 K71, K81, K02, K12, K22, K32, K42, K52, K62, K72, K82, K03, K13, K23, K33, \
39 K43, K53, K63, K73, K83, K04, K14, K24, K34, K44, K54, K64, K74, K84, K05, \
40 K15, K25, K35, K45, K55, K65, K75, K85, K06, K16, K26, K36, K46, K56, K66, \
41 K76, K86, K07, K17, K27, K37, K47, K57, K67, K77 \
42) { \
43 { K00, K01, K02, K03, K04, K05, K06, K07 }, \
44 { K10, K11, K12, K13, K14, K15, K16, K17 }, \
45 { K20, K21, K22, K23, K24, K25, K26, K27 }, \
46 { K30, K31, K32, K33, K34, K35, K36, K37 }, \
47 { K40, K41, K42, K43, K44, K45, K46, K47 }, \
48 { K50, K51, K52, K53, K54, K55, K56, K57 }, \
49 { K60, K61, K62, K63, K64, K65, K66, K67 }, \
50 { K70, K71, K72, K73, K74, K75, K76, K77 }, \
51 { K80, K81, K82, K83, K84, K85, K86, KC_NO } \
52}
53
54#endif
diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c
index cd3a610b4..a30e93ae3 100644
--- a/quantum/process_keycode/process_unicode.c
+++ b/quantum/process_keycode/process_unicode.c
@@ -1,6 +1,8 @@
1#include "process_unicode.h" 1#include "process_unicode.h"
2#include "action_util.h"
2 3
3static uint8_t input_mode; 4static uint8_t input_mode;
5uint8_t mods;
4 6
5__attribute__((weak)) 7__attribute__((weak))
6uint16_t hex_to_keycode(uint8_t hex) 8uint16_t hex_to_keycode(uint8_t hex)
@@ -25,6 +27,19 @@ uint8_t get_unicode_input_mode(void) {
25 27
26__attribute__((weak)) 28__attribute__((weak))
27void unicode_input_start (void) { 29void unicode_input_start (void) {
30 // save current mods
31 mods = keyboard_report->mods;
32
33 // unregister all mods to start from clean state
34 if (mods & MOD_BIT(KC_LSFT)) unregister_code(KC_LSFT);
35 if (mods & MOD_BIT(KC_RSFT)) unregister_code(KC_RSFT);
36 if (mods & MOD_BIT(KC_LCTL)) unregister_code(KC_LCTL);
37 if (mods & MOD_BIT(KC_RCTL)) unregister_code(KC_RCTL);
38 if (mods & MOD_BIT(KC_LALT)) unregister_code(KC_LALT);
39 if (mods & MOD_BIT(KC_RALT)) unregister_code(KC_RALT);
40 if (mods & MOD_BIT(KC_LGUI)) unregister_code(KC_LGUI);
41 if (mods & MOD_BIT(KC_RGUI)) unregister_code(KC_RGUI);
42
28 switch(input_mode) { 43 switch(input_mode) {
29 case UC_OSX: 44 case UC_OSX:
30 register_code(KC_LALT); 45 register_code(KC_LALT);
@@ -54,15 +69,25 @@ void unicode_input_start (void) {
54__attribute__((weak)) 69__attribute__((weak))
55void unicode_input_finish (void) { 70void unicode_input_finish (void) {
56 switch(input_mode) { 71 switch(input_mode) {
57 case UC_OSX: 72 case UC_OSX:
58 case UC_WIN: 73 case UC_WIN:
59 unregister_code(KC_LALT); 74 unregister_code(KC_LALT);
60 break; 75 break;
61 case UC_LNX: 76 case UC_LNX:
62 register_code(KC_SPC); 77 register_code(KC_SPC);
63 unregister_code(KC_SPC); 78 unregister_code(KC_SPC);
64 break; 79 break;
65 } 80 }
81
82 // reregister previously set mods
83 if (mods & MOD_BIT(KC_LSFT)) register_code(KC_LSFT);
84 if (mods & MOD_BIT(KC_RSFT)) register_code(KC_RSFT);
85 if (mods & MOD_BIT(KC_LCTL)) register_code(KC_LCTL);
86 if (mods & MOD_BIT(KC_RCTL)) register_code(KC_RCTL);
87 if (mods & MOD_BIT(KC_LALT)) register_code(KC_LALT);
88 if (mods & MOD_BIT(KC_RALT)) register_code(KC_RALT);
89 if (mods & MOD_BIT(KC_LGUI)) register_code(KC_LGUI);
90 if (mods & MOD_BIT(KC_RGUI)) register_code(KC_RGUI);
66} 91}
67 92
68void register_hex(uint16_t hex) { 93void register_hex(uint16_t hex) {
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h
index 5cd3c8e78..4853655f9 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -159,6 +159,8 @@ enum quantum_keycodes {
159#define MEH(kc) (kc | QK_LCTL | QK_LSFT | QK_LALT) 159#define MEH(kc) (kc | QK_LCTL | QK_LSFT | QK_LALT)
160#define LCAG(kc) (kc | QK_LCTL | QK_LALT | QK_LGUI) 160#define LCAG(kc) (kc | QK_LCTL | QK_LALT | QK_LGUI)
161#define ALTG(kc) (kc | QK_RCTL | QK_RALT) 161#define ALTG(kc) (kc | QK_RCTL | QK_RALT)
162#define SCMD(kc) (kc | QK_LGUI | QK_LSFT)
163#define SWIN(kc) SCMD(kc)
162 164
163#define MOD_HYPR 0xf 165#define MOD_HYPR 0xf
164#define MOD_MEH 0x7 166#define MOD_MEH 0x7
@@ -293,6 +295,8 @@ enum quantum_keycodes {
293#define MEH_T(kc) MT((MOD_LCTL | MOD_LSFT | MOD_LALT), kc) // Meh is a less hyper version of the Hyper key -- doesn't include Win or Cmd, so just alt+shift+ctrl 295#define MEH_T(kc) MT((MOD_LCTL | MOD_LSFT | MOD_LALT), kc) // Meh is a less hyper version of the Hyper key -- doesn't include Win or Cmd, so just alt+shift+ctrl
294#define LCAG_T(kc) MT((MOD_LCTL | MOD_LALT | MOD_LGUI), kc) // Left control alt and gui 296#define LCAG_T(kc) MT((MOD_LCTL | MOD_LALT | MOD_LGUI), kc) // Left control alt and gui
295#define ALL_T(kc) MT((MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI), kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/ 297#define ALL_T(kc) MT((MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI), kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
298#define SCMD_T(kc) MT((MOD_LGUI | MOD_LSFT), kc)
299#define SWIN_T(kc) SCMD_T(kc)
296 300
297// Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap 301// Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap
298#define KC_HYPR HYPR(KC_NO) 302#define KC_HYPR HYPR(KC_NO)
diff --git a/readme.md b/readme.md
index 90584cabc..d33c3ad01 100644
--- a/readme.md
+++ b/readme.md
@@ -31,7 +31,7 @@ The OLKB product firmwares are maintained by [Jack Humbert](https://github.com/j
31 31
32This is not a tiny project. While this is the main readme, there are many other files you might want to consult. Here are some points of interest: 32This is not a tiny project. While this is the main readme, there are many other files you might want to consult. Here are some points of interest:
33 33
34* [**The Wiki**](https://github.com/jackhumbert/qmk_firmware/wiki) - the entirity of the readme has been moved here 34* [**The Wiki**](https://github.com/jackhumbert/qmk_firmware/wiki) - the entirety of the readme has been moved here
35* The readme for your own keyboard: This is found under `keyboards/<your keyboards's name>/`. So for the ErgoDox EZ, it's [here](keyboards/ergodox/ez/); for the Planck, it's [here](keyboards/planck/) and so on. 35* The readme for your own keyboard: This is found under `keyboards/<your keyboards's name>/`. So for the ErgoDox EZ, it's [here](keyboards/ergodox/ez/); for the Planck, it's [here](keyboards/planck/) and so on.
36* The list of possible keycodes you can use in your keymap is actually spread out in a few different places: 36* The list of possible keycodes you can use in your keymap is actually spread out in a few different places:
37 * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes. 37 * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes.