aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach Richard <Zach.Richard94@gmail.com>2017-12-14 00:20:44 -0500
committerJack Humbert <jack.humb@gmail.com>2017-12-14 00:20:44 -0500
commit8a1e656099a966966e7c81b08d9fb2770e8a61ad (patch)
treeac58f8c2d86982c6d59d09406399315e1a2fb874
parent56f266173c0eeaffcfff8ac4becd551585acfdae (diff)
downloadqmk_firmware-8a1e656099a966966e7c81b08d9fb2770e8a61ad.tar.gz
qmk_firmware-8a1e656099a966966e7c81b08d9fb2770e8a61ad.zip
new planck keymap, new feature - hybrid shift/enter action key (great for small keyboards!) (#2100)
* new planck keymap, new feature - hybrid shift/enter action key (great for small keyboards!) * corrected documentation to specify rules.mk file instead of Makefile
-rw-r--r--docs/feature_space_shift_cadet.md26
-rwxr-xr-xkeyboards/planck/keymaps/zrichard/config.h76
-rwxr-xr-xkeyboards/planck/keymaps/zrichard/keymap.c627
-rwxr-xr-xkeyboards/planck/keymaps/zrichard/rules.mk30
-rw-r--r--quantum/quantum.c23
-rw-r--r--quantum/quantum_keycodes.h3
6 files changed, 785 insertions, 0 deletions
diff --git a/docs/feature_space_shift_cadet.md b/docs/feature_space_shift_cadet.md
new file mode 100644
index 000000000..ad610b579
--- /dev/null
+++ b/docs/feature_space_shift_cadet.md
@@ -0,0 +1,26 @@
1## Space Cadet Shift Enter: The future, built in
2
3Based on the Space Cadet Shift by Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/)
4Essentially, you hit the Shift on its own, and it acts as the enter key. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds. This solution works better than using a macro since the timers defined in quantum allow us to tell when another key is pressed, rather than just having a janky timer than results in accidental endlines.
5
6To use it, use `KC_SFTENT` (Shift, Enter) for any Shift on your keymap.
7
8It's defaulted to work on US keyboards, but if you'd like to use a different key for Enter, you can define those in your `config.h` like this:
9
10 #define SFTENT_KEY KC_ENT
11
12
13The only other thing you're going to want to do is create a `rules.mk` in your keymap directory and set the following:
14
15```
16COMMAND_ENABLE = no # Commands for debug and configuration
17```
18
19This is just to keep the keyboard from going into command mode when you hold both Shift keys at the same time.
20
21
22
23
24
25PLEASE NOTE: this feature uses the same timers as the Space Cadet Shift feature, so using them in tandem may produce unwanted results.
26
diff --git a/keyboards/planck/keymaps/zrichard/config.h b/keyboards/planck/keymaps/zrichard/config.h
new file mode 100755
index 000000000..aa8991e01
--- /dev/null
+++ b/keyboards/planck/keymaps/zrichard/config.h
@@ -0,0 +1,76 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#ifndef CONFIG_USER_H
19#define CONFIG_USER_H
20
21#include "config_common.h"
22
23
24/* key matrix size */
25#define MATRIX_ROWS 4
26#define MATRIX_COLS 12
27
28/* Planck PCB default pin-out */
29#define MATRIX_ROW_PINS { D0, D5, B5, B6 }
30#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
31#define UNUSED_PINS
32
33/* Prevent use of disabled MIDI features in the keymap */
34//#define MIDI_ENABLE_STRICT 1
35
36/* enable basic MIDI features:
37 - MIDI notes can be sent when in Music mode is on
38*/
39#define MIDI_BASIC
40
41/* enable advanced MIDI features:
42 - MIDI notes can be added to the keymap
43 - Octave shift and transpose
44 - Virtual sustain, portamento, and modulation wheel
45 - etc.
46*/
47//#define MIDI_ADVANCED
48
49/*
50 * Feature disable options
51 * These options are also useful to firmware size reduction.
52 */
53
54/* disable debug print */
55#ifndef NO_DEBUG
56# define NO_DEBUG
57#endif
58
59/* disable print */
60// #ifndef NO_PRINT
61// # define NO_PRINT
62// #endif
63
64/* Only print user print statements */
65#define USER_PRINT
66
67#define BACKLIGHT_BREATHING
68
69/* disable action features */
70//#define NO_ACTION_LAYER
71//#define NO_ACTION_TAPPING
72//#define NO_ACTION_ONESHOT
73//#define NO_ACTION_MACRO
74//#define NO_ACTION_FUNCTION
75
76#endif
diff --git a/keyboards/planck/keymaps/zrichard/keymap.c b/keyboards/planck/keymaps/zrichard/keymap.c
new file mode 100755
index 000000000..c40492f5e
--- /dev/null
+++ b/keyboards/planck/keymaps/zrichard/keymap.c
@@ -0,0 +1,627 @@
1#include "planck.h"
2#include "action_layer.h"
3#include "eeconfig.h"
4#include "led.h"
5#include "mousekey.h"
6
7#ifdef AUDIO_ENABLE
8 #include "audio.h"
9 #include "song_list.h"
10#endif
11
12enum keyboard_layers {
13 LAYER_QWERTY = 0,
14 LAYER_UPPER,
15 LAYER_LOWER,
16 LAYER_FUNCTION,
17 LAYER_MOUSE,
18 LAYER_ADJUST,
19};
20enum keyboard_macros {
21 MACRO_QWERTY = 0,
22 MACRO_UPPER,
23 MACRO_LOWER,
24 MACRO_FUNCTION,
25 MACRO_MOUSE,
26 MACRO_TIMBRE_1,
27 MACRO_TIMBRE_2,
28 MACRO_TIMBRE_3,
29 MACRO_TIMBRE_4,
30 MACRO_TEMPO_U,
31 MACRO_TEMPO_D,
32 MACRO_TONE_DEFAULT,
33 MACRO_MUSIC_TOGGLE,
34 MACRO_AUDIO_TOGGLE,
35 MACRO_INC_VOICE,
36 MACRO_DEC_VOICE,
37 MACRO_BACKLIGHT,
38 MACRO_BREATH_TOGGLE,
39 MACRO_BREATH_SPEED_INC,
40 MACRO_BREATH_SPEED_DEC,
41 MACRO_BREATH_DEFAULT,
42 MACRO_MOUSE_MOVE_UL,
43 MACRO_MOUSE_MOVE_UR,
44 MACRO_MOUSE_MOVE_DL,
45 MACRO_MOUSE_MOVE_DR,
46 MACRO_HELP_1,
47 MACRO_HELP_2,
48 MACRO_HELP_3,
49 MACRO_HELP_4,
50 MACRO_HELP_5,
51 MACRO_HELP_6,
52 MACRO_HELP_7,
53 MACRO_HELP_8,
54 MACRO_HELP_9,
55 MACRO_MINE,
56 //MACRO_SHENT,
57};
58
59enum {
60 TD_SPENT = 0
61};
62
63#define M_QWRTY M(MACRO_QWERTY)
64#define M_UPPER M(MACRO_UPPER)
65#define M_LOWER M(MACRO_LOWER)
66#define M_FUNCT M(MACRO_FUNCTION)
67#define M_MOUSE M(MACRO_MOUSE)
68#define TIMBR_1 M(MACRO_TIMBRE_1)
69#define TIMBR_2 M(MACRO_TIMBRE_2)
70#define TIMBR_3 M(MACRO_TIMBRE_3)
71#define TIMBR_4 M(MACRO_TIMBRE_4)
72#define TMPO_UP M(MACRO_TEMPO_U)
73#define TMPO_DN M(MACRO_TEMPO_D)
74#define TMPO_DF M(MACRO_TONE_DEFAULT)
75#define M_BACKL M(MACRO_BACKLIGHT)
76#define M_BRTOG M(MACRO_BREATH_TOGGLE)
77#define M_BSPDU M(MACRO_BREATH_SPEED_INC)
78#define M_BSPDD M(MACRO_BREATH_SPEED_DEC)
79#define M_BDFLT M(MACRO_BREATH_DEFAULT)
80#define M_MS_UL M(MACRO_MOUSE_MOVE_UL)
81#define M_MS_UR M(MACRO_MOUSE_MOVE_UR)
82#define M_MS_DL M(MACRO_MOUSE_MOVE_DL)
83#define M_MS_DR M(MACRO_MOUSE_MOVE_DR)
84#define M_HELP1 M(MACRO_HELP_1)
85#define M_HELP2 M(MACRO_HELP_2)
86#define M_HELP3 M(MACRO_HELP_3)
87#define M_HELP4 M(MACRO_HELP_4)
88#define M_HELP5 M(MACRO_HELP_5)
89#define M_HELP6 M(MACRO_HELP_6)
90#define M_HELP7 M(MACRO_HELP_7)
91#define M_HELP8 M(MACRO_HELP_8)
92#define M_HELP9 M(MACRO_HELP_9)
93#define MY_MACRO M(MACRO_MINE)
94//#define M_SHENT M(MACRO_SHENT)
95
96
97#define VC_UP M(MACRO_INC_VOICE)
98#define VC_DOWN M(MACRO_DEC_VOICE)
99
100
101#define SC_UNDO LCTL(KC_Z)
102#define SC_REDO LCTL(KC_Y)
103#define SC_CUT LCTL(KC_X)
104#define SC_COPY LCTL(KC_C)
105#define SC_PSTE LCTL(KC_V)
106#define SC_SELA LCTL(KC_A)
107#define SC_SAVE LCTL(KC_S)
108#define SC_OPEN LCTL(KC_O)
109#define SC_ACLS LALT(KC_F4)
110#define SC_CCLS LCTL(KC_F4)
111
112#define TG_NKRO MAGIC_TOGGLE_NKRO
113#define OS_SHFT KC_FN0
114
115#define _______ KC_TRNS
116#define XXXXXXX KC_NO
117#define ________________ _______, _______
118#define XXXXXXXXXXXXXXXX XXXXXXX, XXXXXXX
119
120
121const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
122
123/* LAYER = LAYER_QWERTY
124 .-----------------------------------------------------------------------------------------------------------.
125 | ESC | Q | W | E | R | T | Y | U | I | O | P | BACKSP |
126 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
127 | TAB | A | S | D | F | G | H | J | K | L | ; | ' |
128 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
129 | LSHIFT | Z | X | C | V | B | N | M | , | . | UP | SH/ENT |
130 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
131 | LCTRL | LWIN | FN | LALT | LOWER | SPACE | SPACE | UPPER | MENU | LEFT | DOWN | RIGHT |
132 '-----------------------------------------------------------------------------------------------------------'
133*/
134[LAYER_QWERTY] = {
135 { KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC },
136 { KC_TAB , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT },
137 { KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_UP , KC_SFTENT /*M_SHENT*/ },
138 { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_LOWER, KC_SPC , KC_SPC , M_UPPER, KC_APP , KC_LEFT, KC_DOWN, KC_RGHT }
139},
140/* LAYER = LAYER_UPPER
141 .-----------------------------------------------------------------------------------------------------------.
142 | PRINT | F1 | F2 | F3 | F4 | NUM LK | KP / | KP 7 | KP 8 | KP 9 | KP - | DEL |
143 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
144 | PAUSE | F5 | F6 | F7 | F8 | SCR LK | KP * | KP 4 | KP 5 | KP 6 | KP + | HOME |
145 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
146 | ______ | F9 | F10 | F11 | F12 | PAUSE | KP 0 | KP 1 | KP 2 | KP 3 | KP ENT | END |
147 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
148 | ______ | ______ | ______ | ______ | LOWER | KP 0 | KP 0 | ______ | RALT | KP 0 | KP ENT | RTCTRL |
149 '-----------------------------------------------------------------------------------------------------------'
150*/
151[LAYER_UPPER] = {
152 { KC_PSCR, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, KC_DEL },
153 { KC_PAUS, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_SLCK, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_HOME },
154 { _______, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PAUS, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_END },
155 { _______, _______, _______, _______, M_LOWER, KC_KP_0, KC_KP_0, _______, KC_KP_0, KC_PDOT, KC_PENT, KC_RCTL }
156},
157/* LAYER = LAYER_LOWER
158 .-----------------------------------------------------------------------------------------------------------.
159 | ______ | $ | { | [ | ( | % | # | ) | ] | } | @ | PG UP |
160 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
161 | ______ | ^ | * | + | - | / | \ | _ | ' | " | ` | PG DN |
162 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
163 | ______ | | | & | ! | ~ | ; | : | = | < | > | ? | HOME |
164 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
165 | ______ | ______ | ______ | ______ | ______ | ______ | ______ | UPPER | ______ | ______ | ______ | END |
166 '-----------------------------------------------------------------------------------------------------------'
167*/
168[LAYER_LOWER] = {
169 { _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT , KC_PGUP },
170 { _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , KC_PGDN },
171 { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT , KC_GT , KC_QUES, KC_HOME },
172 { _______, _______, _______, _______, _______, _______, _______, M_UPPER, _______, _______, _______, KC_END }
173},
174/* LAYER = LAYER_FUNCTION
175 .-----------------------------------------------------------------------------------------------------------.
176 | XXXXXX | F13 | F14 | F15 | F16 | NUM LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
177 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
178 | XXXXXX | F17 | F18 | F19 | F20 | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
179 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
180 | ______ | F21 | F22 | F23 | F24 | CAP LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | VOL UP | MUTE |
181 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
182 | ______ | ______ | FN | ______ | ______ | PLAY | PLAY | ______ | ______ | PREV | VOL DN | NEXT |
183 '-----------------------------------------------------------------------------------------------------------'
184*/
185[LAYER_FUNCTION] = {
186 { XXXXXXX, KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
187 { XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
188 { _______, KC_F21 , KC_F22 , KC_F23 , KC_F24 , KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, KC_MUTE },
189 { _______, _______, M_FUNCT, _______, _______, KC_MPLY, KC_MPLY, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT }
190},
191/* LAYER = LAYER_MOUSE
192 .-----------------------------------------------------------------------------------------------------------.
193 | ESC | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS UL | MS U | MS UR | MS WHL | MS WHR |
194 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
195 | XXXXXX | MS BT5 | MS BT4 | MS BT3 | MS BT2 | XXXXXX | XXXXXX | MS L | XXXXXX | MS R | XXXXXX | MS WHU |
196 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
197 | ______ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS DL | MS D | MS DR | MS U | MS WHD |
198 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
199 | ______ | ______ | ______ | ______ | ______ | MS BT1 | MS BT1 | ______ | ______ | MS L | MS D | MS R |
200 '-----------------------------------------------------------------------------------------------------------'
201*/
202[LAYER_MOUSE] = {
203 { KC_ESC , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_UL, KC_MS_U, M_MS_UR, KC_WH_L, KC_WH_R },
204 { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, KC_MS_L, XXXXXXX, KC_MS_R, XXXXXXX, KC_WH_U },
205 { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_DL, KC_MS_D, M_MS_DR, KC_MS_U, KC_WH_D },
206 { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }
207},
208/* LAYER = LAYER_ADJUST
209 .-----------------------------------------------------------------------------------------------------------.
210 | XXXXXX | HELP 1 | HELP 2 | HELP 3 | HELP 4 | HELP 5 | HELP 6 | HELP 7 | HELP 8 | HELP 9 | MUSIC | AUDIO |
211 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
212 | XXXXXX | BRTOG | BRSPD+ | BRSPD- | BRDFLT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
213 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
214 | XXXXXX | QWERTY | XXXXXX | XXXXXX | BACKLT | RESET | XXXXXX | MOUSE | XXXXXX | XXXXXX | VOICE+ | MACRO |
215 |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
216 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | LOWER | XXXXXX | XXXXXX | UPPER | XXXXXX | TEMPO- | VOICE- | TEMPO+ |
217 '-----------------------------------------------------------------------------------------------------------'
218*/
219[LAYER_ADJUST] = {
220 { XXXXXXX, M_HELP1, M_HELP2, M_HELP3, M_HELP4, M_HELP5, M_HELP6, M_HELP7, M_HELP8, M_HELP9, MU_TOG , AU_TOG },
221 { XXXXXXX, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
222 { XXXXXXX, M_QWRTY, XXXXXXX, XXXXXXX, M_BACKL, RESET , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, MUV_IN , MY_MACRO},
223 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, TMPO_DN, MUV_DE , TMPO_UP }
224},
225
226};
227
228#ifdef AUDIO_ENABLE
229
230float tone_my_startup[][2] = SONG(QWERTY_SOUND);
231float tone_my_goodbye[][2] = SONG(QWERTY_SOUND);
232
233float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE);
234float tone_music_on[][2] = SONG(DOE_A_DEER);
235float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
236float tone_caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
237float tone_numlk_on[][2] = SONG(NUM_LOCK_ON_SOUND);
238float tone_numlk_off[][2] = SONG(NUM_LOCK_OFF_SOUND);
239float tone_scroll_on[][2] = SONG(SCROLL_LOCK_ON_SOUND);
240float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND);
241float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
242
243#endif /* AUDIO_ENABLE */
244
245void persistant_default_layer_set(uint16_t default_layer)
246{
247 eeconfig_update_default_layer(default_layer);
248 default_layer_set(default_layer);
249}
250
251const uint16_t PROGMEM fn_actions[] = {
252 [0] = ACTION_MODS_ONESHOT(MOD_RSFT),
253};
254
255const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
256{
257
258 // MACRODOWN only works in this function
259 switch(id)
260 {
261
262 case MACRO_HELP_1:
263 if (record->event.pressed)
264 {
265 //uprintf("1");
266 }
267 break;
268
269 case MACRO_HELP_2:
270 if (record->event.pressed)
271 {
272 //uprintf("2");
273 }
274 break;
275
276 case MACRO_HELP_3:
277 if (record->event.pressed)
278 {
279 //uprintf("3");
280 }
281 break;
282
283 case MACRO_HELP_4:
284 if (record->event.pressed)
285 {
286 //uprintf("4");
287 }
288 break;
289
290 case MACRO_HELP_5:
291 if (record->event.pressed)
292 {
293 //uprintf("5");
294 }
295 break;
296
297 case MACRO_HELP_6:
298 if (record->event.pressed)
299 {
300 //uprintf("6");
301 }
302 break;
303
304 case MACRO_HELP_7:
305 if (record->event.pressed)
306 {
307 //uprintf("7");
308 }
309 break;
310
311 case MACRO_HELP_8:
312 if (record->event.pressed)
313 {
314 //uprintf("8");
315 }
316 break;
317
318 case MACRO_HELP_9:
319 if (record->event.pressed)
320 {
321 //uprintf("9");
322 }
323 break;
324
325 case MACRO_BREATH_TOGGLE:
326 if (record->event.pressed)
327 {
328 breathing_toggle();
329 }
330 break;
331
332 case MACRO_BREATH_SPEED_INC:
333 if (record->event.pressed)
334 {
335 breathing_speed_inc(1);
336 }
337 break;
338
339 case MACRO_BREATH_SPEED_DEC:
340 if (record->event.pressed)
341 {
342 breathing_speed_dec(1);
343 }
344 break;
345
346 case MACRO_BREATH_DEFAULT:
347 if (record->event.pressed)
348 {
349 breathing_defaults();
350 }
351 break;
352
353 case MACRO_QWERTY:
354 if (record->event.pressed)
355 {
356 persistant_default_layer_set(1UL<<LAYER_QWERTY);
357 }
358 break;
359
360 case MACRO_UPPER:
361 if (record->event.pressed)
362 {
363 layer_on(LAYER_UPPER);
364 breathing_speed_set(2);
365 breathing_pulse();
366 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
367 }
368 else
369 {
370 layer_off(LAYER_UPPER);
371 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
372 }
373 break;
374
375 case MACRO_LOWER:
376 if (record->event.pressed)
377 {
378 layer_on(LAYER_LOWER);
379 breathing_speed_set(2);
380 breathing_pulse();
381 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
382 }
383 else
384 {
385 layer_off(LAYER_LOWER);
386 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
387 }
388 break;
389
390 case MACRO_FUNCTION:
391 if (record->event.pressed)
392 {
393 breathing_speed_set(3);
394 breathing_enable();
395 layer_on(LAYER_FUNCTION);
396 }
397 else
398 {
399 breathing_speed_set(1);
400 breathing_self_disable();
401 layer_off(LAYER_FUNCTION);
402 }
403 break;
404
405 case MACRO_MINE:
406 if(record->event.pressed)
407 {
408 return MACRO( I(03), T(R), T(O), T(O), T(T), W(10), T(TAB), W(10), T(T), T(O), T(O), T(R), T(ENTER), END );
409 }
410 break;
411
412 /*
413 case MACRO_SHENT:
414 if (record->event.pressed)
415 {
416 start = timer_read();
417 return MACRO( D(LSHIFT), END );
418 }
419 else
420 {
421 if (timer_elapsed(start) > 100)
422 {
423 return MACRO( U(LSHIFT), END);
424 }
425 else
426 {
427 return MACRO( U(LSHIFT), T(ENTER), END);
428 }
429 }
430 break;
431 */
432
433
434#ifdef BACKLIGHT_ENABLE
435 case MACRO_BACKLIGHT:
436 if (record->event.pressed)
437 {
438 backlight_step();
439 }
440#endif
441
442#ifdef MOUSEKEY_ENABLE
443
444 case MACRO_MOUSE:
445 if (record->event.pressed)
446 {
447 layer_invert(LAYER_MOUSE);
448 }
449 break;
450
451 case MACRO_MOUSE_MOVE_UL:
452 if (record->event.pressed)
453 {
454 mousekey_on(KC_MS_UP);
455 mousekey_on(KC_MS_LEFT);
456 }
457 else
458 {
459 mousekey_off(KC_MS_UP);
460 mousekey_off(KC_MS_LEFT);
461 }
462 break;
463
464 case MACRO_MOUSE_MOVE_UR:
465 if (record->event.pressed)
466 {
467 mousekey_on(KC_MS_UP);
468 mousekey_on(KC_MS_RIGHT);
469 }
470 else
471 {
472 mousekey_off(KC_MS_UP);
473 mousekey_off(KC_MS_RIGHT);
474 }
475 break;
476
477 case MACRO_MOUSE_MOVE_DL:
478 if (record->event.pressed)
479 {
480 mousekey_on(KC_MS_DOWN);
481 mousekey_on(KC_MS_LEFT);
482 }
483 else
484 {
485 mousekey_off(KC_MS_DOWN);
486 mousekey_off(KC_MS_LEFT);
487 }
488 break;
489
490 case MACRO_MOUSE_MOVE_DR:
491 if (record->event.pressed)
492 {
493 mousekey_on(KC_MS_DOWN);
494 mousekey_on(KC_MS_RIGHT);
495 }
496 else
497 {
498 mousekey_off(KC_MS_DOWN);
499 mousekey_off(KC_MS_RIGHT);
500 }
501 break;
502
503#endif /* MOUSEKEY_ENABLE */
504
505#ifdef AUDIO_ENABLE
506
507 case MACRO_TIMBRE_1:
508 if (record->event.pressed) set_timbre(TIMBRE_12);
509 break;
510
511 case MACRO_TIMBRE_2:
512 if (record->event.pressed) set_timbre(TIMBRE_25);
513 break;
514
515 case MACRO_TIMBRE_3:
516 if (record->event.pressed) set_timbre(TIMBRE_50);
517 break;
518
519 case MACRO_TIMBRE_4:
520 if (record->event.pressed) set_timbre(TIMBRE_75);
521 break;
522
523 case MACRO_TEMPO_U:
524 if (record->event.pressed) increase_tempo(10);
525 break;
526
527 case MACRO_TEMPO_D:
528 if (record->event.pressed) decrease_tempo(10);
529 break;
530
531 case MACRO_TONE_DEFAULT:
532 if (record->event.pressed)
533 {
534 set_timbre(TIMBRE_DEFAULT);
535 set_tempo(TEMPO_DEFAULT);
536 }
537 break;
538
539#endif /* AUDIO_ENABLE */
540
541 default:
542 break;
543
544 }
545 return MACRO_NONE;
546};
547
548
549
550#ifdef AUDIO_ENABLE
551
552void matrix_init_user(void)
553{
554 set_voice(default_voice);
555 startup_user();
556 println("Matrix Init");
557}
558
559void led_set_user(uint8_t usb_led)
560{
561 static uint8_t old_usb_led = 0;
562
563 _delay_ms(10); // gets rid of tick
564
565 if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK)))
566 {
567 // If CAPS LK LED is turning on...
568 PLAY_SONG(tone_caps_on);
569 }
570 else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK)))
571 {
572 // If CAPS LK LED is turning off...
573 PLAY_SONG(tone_caps_off);
574 }
575 else if ((usb_led & (1<<USB_LED_NUM_LOCK)) && !(old_usb_led & (1<<USB_LED_NUM_LOCK)))
576 {
577 // If NUM LK LED is turning on...
578 PLAY_SONG(tone_numlk_on);
579 }
580 else if (!(usb_led & (1<<USB_LED_NUM_LOCK)) && (old_usb_led & (1<<USB_LED_NUM_LOCK)))
581 {
582 // If NUM LED is turning off...
583 PLAY_SONG(tone_numlk_off);
584 }
585 else if ((usb_led & (1<<USB_LED_SCROLL_LOCK)) && !(old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
586 {
587 // If SCROLL LK LED is turning on...
588 PLAY_SONG(tone_scroll_on);
589 }
590 else if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)) && (old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
591 {
592 // If SCROLL LED is turning off...
593 PLAY_SONG(tone_scroll_off);
594 }
595 old_usb_led = usb_led;
596}
597
598
599void startup_user()
600{
601 _delay_ms(10); // gets rid of tick
602 PLAY_SONG(tone_my_startup);
603}
604
605void shutdown_user()
606{
607 PLAY_SONG(tone_my_goodbye);
608 _delay_ms(2000);
609 stop_all_notes();
610}
611
612void audio_on_user(void)
613{
614 PLAY_SONG(tone_audio_on);
615}
616
617void music_on_user(void)
618{
619 PLAY_SONG(tone_music_on);
620}
621
622void music_scale_user(void)
623{
624 PLAY_SONG(music_scale);
625}
626
627#endif /* AUDIO_ENABLE */
diff --git a/keyboards/planck/keymaps/zrichard/rules.mk b/keyboards/planck/keymaps/zrichard/rules.mk
new file mode 100755
index 000000000..0b87bc988
--- /dev/null
+++ b/keyboards/planck/keymaps/zrichard/rules.mk
@@ -0,0 +1,30 @@
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
5# NOTE: the maximum .hex file size on Planck is 7000h (28672 decimal)
6
7
8# Build Options
9# change to "no" to disable the options, or define them in the Makefile in
10# the appropriate keymap folder that will get included automatically
11#
12BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
13MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
14EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
15CONSOLE_ENABLE = no # Console for debug(+400)
16COMMAND_ENABLE = no # Commands for debug and configuration
17NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
18BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
19MIDI_ENABLE = yes # MIDI controls
20AUDIO_ENABLE = no # Audio output on port C6
21UNICODE_ENABLE = no # Unicode
22BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
23RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
24TAP_DANCE_ENABLE = no # Enable double or n tap macros
25# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
26SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
27
28ifndef QUANTUM_DIR
29 include ../../../../Makefile
30endif
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 52f19af98..c80975f21 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -162,6 +162,11 @@ void reset_keyboard(void) {
162 #define RSPC_KEY KC_0 162 #define RSPC_KEY KC_0
163#endif 163#endif
164 164
165// Shift / Enter setup
166#ifndef SFTENT_KEY
167 #define SFTENT_KEY KC_ENT
168#endif
169
165static bool shift_interrupted[2] = {0, 0}; 170static bool shift_interrupted[2] = {0, 0};
166static uint16_t scs_timer[2] = {0, 0}; 171static uint16_t scs_timer[2] = {0, 0};
167 172
@@ -552,6 +557,24 @@ bool process_record_quantum(keyrecord_t *record) {
552 } 557 }
553 return false; 558 return false;
554 } 559 }
560
561 case KC_SFTENT: {
562 if (record->event.pressed) {
563 shift_interrupted[1] = false;
564 scs_timer[1] = timer_read ();
565 register_mods(MOD_BIT(KC_RSFT));
566 }
567 else if (!shift_interrupted[1] && timer_elapsed(scs_timer[1]) < TAPPING_TERM) {
568 unregister_mods(MOD_BIT(KC_RSFT));
569 register_code(SFTENT_KEY);
570 unregister_code(SFTENT_KEY);
571 }
572 else {
573 unregister_mods(MOD_BIT(KC_RSFT));
574 }
575 return false;
576 }
577
555 case GRAVE_ESC: { 578 case GRAVE_ESC: {
556 uint8_t shifted = get_mods() & ((MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT) 579 uint8_t shifted = get_mods() & ((MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)
557 |MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))); 580 |MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)));
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h
index f2cb25718..453774d85 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -423,6 +423,9 @@ enum quantum_keycodes {
423 // Right shift, close paren 423 // Right shift, close paren
424 KC_RSPC, 424 KC_RSPC,
425 425
426 // Shift, Enter
427 KC_SFTENT,
428
426 // Printing 429 // Printing
427 PRINT_ON, 430 PRINT_ON,
428 PRINT_OFF, 431 PRINT_OFF,