1 /* Copyright 2015-2017 Jack Humbert
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 #include QMK_KEYBOARD_H
20 extern keymap_config_t keymap_config
;
32 enum planck_keycodes
{
41 #define LOWER MO(_LOWER)
42 #define RAISE MO(_RAISE)
44 const uint16_t PROGMEM keymaps
[][MATRIX_ROWS
][MATRIX_COLS
] = {
47 * ,-----------------------------------------------------------------------------------.
48 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
49 * |------+------+------+------+------+------+------+------+------+------+------+------|
50 * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
51 * |------+------+------+------+------+------+------+------+------+------+------+------|
52 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
53 * |------+------+------+------+------+------+------+------+------+------+------+------|
54 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
55 * `-----------------------------------------------------------------------------------'
57 [_QWERTY
] = LAYOUT_planck_grid(
58 KC_TAB
, KC_Q
, KC_W
, KC_E
, KC_R
, KC_T
, KC_Y
, KC_U
, KC_I
, KC_O
, KC_P
, KC_BSPC
,
59 KC_ESC
, KC_A
, KC_S
, KC_D
, KC_F
, KC_G
, KC_H
, KC_J
, KC_K
, KC_L
, KC_SCLN
, KC_QUOT
,
60 KC_LSFT
, KC_Z
, KC_X
, KC_C
, KC_V
, KC_B
, KC_N
, KC_M
, KC_COMM
, KC_DOT
, KC_SLSH
, KC_ENT
,
61 BACKLIT
, KC_LCTL
, KC_LALT
, KC_LGUI
, LOWER
, KC_SPC
, KC_SPC
, RAISE
, KC_LEFT
, KC_DOWN
, KC_UP
, KC_RGHT
65 * ,-----------------------------------------------------------------------------------.
66 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
67 * |------+------+------+------+------+------+------+------+------+------+------+------|
68 * | Esc | A | R | S | T | D | H | N | E | I | O | " |
69 * |------+------+------+------+------+------+------+------+------+------+------+------|
70 * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
71 * |------+------+------+------+------+------+------+------+------+------+------+------|
72 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
73 * `-----------------------------------------------------------------------------------'
75 [_COLEMAK
] = LAYOUT_planck_grid(
76 KC_TAB
, KC_Q
, KC_W
, KC_F
, KC_P
, KC_G
, KC_J
, KC_L
, KC_U
, KC_Y
, KC_SCLN
, KC_BSPC
,
77 KC_ESC
, KC_A
, KC_R
, KC_S
, KC_T
, KC_D
, KC_H
, KC_N
, KC_E
, KC_I
, KC_O
, KC_QUOT
,
78 KC_LSFT
, KC_Z
, KC_X
, KC_C
, KC_V
, KC_B
, KC_K
, KC_M
, KC_COMM
, KC_DOT
, KC_SLSH
, KC_ENT
,
79 BACKLIT
, KC_LCTL
, KC_LALT
, KC_LGUI
, LOWER
, KC_SPC
, KC_SPC
, RAISE
, KC_LEFT
, KC_DOWN
, KC_UP
, KC_RGHT
83 * ,-----------------------------------------------------------------------------------.
84 * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
85 * |------+------+------+------+------+------+------+------+------+------+------+------|
86 * | Esc | A | O | E | U | I | D | H | T | N | S | / |
87 * |------+------+------+------+------+------+------+------+------+------+------+------|
88 * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
89 * |------+------+------+------+------+------+------+------+------+------+------+------|
90 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
91 * `-----------------------------------------------------------------------------------'
93 [_DVORAK
] = LAYOUT_planck_grid(
94 KC_TAB
, KC_QUOT
, KC_COMM
, KC_DOT
, KC_P
, KC_Y
, KC_F
, KC_G
, KC_C
, KC_R
, KC_L
, KC_BSPC
,
95 KC_ESC
, KC_A
, KC_O
, KC_E
, KC_U
, KC_I
, KC_D
, KC_H
, KC_T
, KC_N
, KC_S
, KC_SLSH
,
96 KC_LSFT
, KC_SCLN
, KC_Q
, KC_J
, KC_K
, KC_X
, KC_B
, KC_M
, KC_W
, KC_V
, KC_Z
, KC_ENT
,
97 BACKLIT
, KC_LCTL
, KC_LALT
, KC_LGUI
, LOWER
, KC_SPC
, KC_SPC
, RAISE
, KC_LEFT
, KC_DOWN
, KC_UP
, KC_RGHT
101 * ,-----------------------------------------------------------------------------------.
102 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
103 * |------+------+------+------+------+------+------+------+------+------+------+------|
104 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
105 * |------+------+------+------+------+------+------+------+------+------+------+------|
106 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
107 * |------+------+------+------+------+------+------+------+------+------+------+------|
108 * | | | | | | | | Next | Vol- | Vol+ | Play |
109 * `-----------------------------------------------------------------------------------'
111 [_LOWER
] = LAYOUT_planck_grid(
112 KC_TILD
, KC_EXLM
, KC_AT
, KC_HASH
, KC_DLR
, KC_PERC
, KC_CIRC
, KC_AMPR
, KC_ASTR
, KC_LPRN
, KC_RPRN
, KC_BSPC
,
113 KC_DEL
, KC_F1
, KC_F2
, KC_F3
, KC_F4
, KC_F5
, KC_F6
, KC_UNDS
, KC_PLUS
, KC_LCBR
, KC_RCBR
, KC_PIPE
,
114 _______
, KC_F7
, KC_F8
, KC_F9
, KC_F10
, KC_F11
, KC_F12
, S(KC_NUHS
), S(KC_NUBS
), KC_HOME
, KC_END
, _______
,
115 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_MNXT
, KC_VOLD
, KC_VOLU
, KC_MPLY
119 * ,-----------------------------------------------------------------------------------.
120 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
121 * |------+------+------+------+------+------+------+------+------+------+------+------|
122 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
123 * |------+------+------+------+------+------+------+------+------+------+------+------|
124 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
125 * |------+------+------+------+------+------+------+------+------+------+------+------|
126 * | | | | | | | | Next | Vol- | Vol+ | Play |
127 * `-----------------------------------------------------------------------------------'
129 [_RAISE
] = LAYOUT_planck_grid(
130 KC_GRV
, KC_1
, KC_2
, KC_3
, KC_4
, KC_5
, KC_6
, KC_7
, KC_8
, KC_9
, KC_0
, KC_BSPC
,
131 KC_DEL
, KC_F1
, KC_F2
, KC_F3
, KC_F4
, KC_F5
, KC_F6
, KC_MINS
, KC_EQL
, KC_LBRC
, KC_RBRC
, KC_BSLS
,
132 _______
, KC_F7
, KC_F8
, KC_F9
, KC_F10
, KC_F11
, KC_F12
, KC_NUHS
, KC_NUBS
, KC_PGUP
, KC_PGDN
, _______
,
133 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, KC_MNXT
, KC_VOLD
, KC_VOLU
, KC_MPLY
136 /* Plover layer (http://opensteno.org)
137 * ,-----------------------------------------------------------------------------------.
138 * | # | # | # | # | # | # | # | # | # | # | # | # |
139 * |------+------+------+------+------+------+------+------+------+------+------+------|
140 * | | S | T | P | H | * | * | F | P | L | T | D |
141 * |------+------+------+------+------+------+------+------+------+------+------+------|
142 * | | S | K | W | R | * | * | R | B | G | S | Z |
143 * |------+------+------+------+------+------+------+------+------+------+------+------|
144 * | Exit | | | A | O | | E | U | | | |
145 * `-----------------------------------------------------------------------------------'
147 [_PLOVER
] = LAYOUT_planck_grid(
148 KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
, KC_1
,
149 XXXXXXX
, KC_Q
, KC_W
, KC_E
, KC_R
, KC_T
, KC_Y
, KC_U
, KC_I
, KC_O
, KC_P
, KC_LBRC
,
150 XXXXXXX
, KC_A
, KC_S
, KC_D
, KC_F
, KC_G
, KC_H
, KC_J
, KC_K
, KC_L
, KC_SCLN
, KC_QUOT
,
151 EXT_PLV
, XXXXXXX
, XXXXXXX
, KC_C
, KC_V
, XXXXXXX
, XXXXXXX
, KC_N
, KC_M
, XXXXXXX
, XXXXXXX
, XXXXXXX
154 /* Adjust (Lower + Raise)
155 * v------------------------RGB CONTROL--------------------v
156 * ,-----------------------------------------------------------------------------------
157 * | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
158 * |------+------+------+------+------+------+------+------+------+------+------+------|
159 * | | |MUSmod|Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
160 * |------+------+------+------+------+------+------+------+------+------+------+------|
161 * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
162 * |------+------+------+------+------+------+------+------+------+------+------+------|
163 * | | | | | | | | | | | |
164 * `-----------------------------------------------------------------------------------'
166 [_ADJUST
] = LAYOUT_planck_grid(
167 _______
, RESET
, DEBUG
, RGB_TOG
, RGB_MOD
, RGB_HUI
, RGB_HUD
, RGB_SAI
, RGB_SAD
, RGB_VAI
, RGB_VAD
, KC_DEL
,
168 _______
, _______
, MU_MOD
, AU_ON
, AU_OFF
, AG_NORM
, AG_SWAP
, QWERTY
, COLEMAK
, DVORAK
, PLOVER
, _______
,
169 _______
, MUV_DE
, MUV_IN
, MU_ON
, MU_OFF
, MI_ON
, MI_OFF
, TERM_ON
, TERM_OFF
, _______
, _______
, _______
,
170 _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
, _______
176 float plover_song
[][2] = SONG(PLOVER_SOUND
);
177 float plover_gb_song
[][2] = SONG(PLOVER_GOODBYE_SOUND
);
180 layer_state_t
layer_state_set_user(layer_state_t state
) {
181 return update_tri_layer_state(state
, _LOWER
, _RAISE
, _ADJUST
);
184 bool process_record_user(uint16_t keycode
, keyrecord_t
*record
) {
187 if (record
->event
.pressed
) {
188 print("mode just switched to qwerty and this is a huge string\n");
189 set_single_persistent_default_layer(_QWERTY
);
194 if (record
->event
.pressed
) {
195 set_single_persistent_default_layer(_COLEMAK
);
200 if (record
->event
.pressed
) {
201 set_single_persistent_default_layer(_DVORAK
);
206 if (record
->event
.pressed
) {
207 register_code(KC_RSFT
);
208 #ifdef BACKLIGHT_ENABLE
211 #ifdef KEYBOARD_planck_rev5
215 unregister_code(KC_RSFT
);
216 #ifdef KEYBOARD_planck_rev5
223 if (record
->event
.pressed
) {
226 PLAY_SONG(plover_song
);
232 if (!eeconfig_is_enabled()) {
235 keymap_config
.raw
= eeconfig_read_keymap();
236 keymap_config
.nkro
= 1;
237 eeconfig_update_keymap(keymap_config
.raw
);
242 if (record
->event
.pressed
) {
244 PLAY_SONG(plover_gb_song
);
254 bool muse_mode
= false;
255 uint8_t last_muse_note
= 0;
256 uint16_t muse_counter
= 0;
257 uint8_t muse_offset
= 70;
258 uint16_t muse_tempo
= 50;
260 void encoder_update(bool clockwise
) {
262 if (IS_LAYER_ON(_RAISE
)) {
277 #ifdef MOUSEKEY_ENABLE
278 tap_code(KC_MS_WH_DOWN
);
283 #ifdef MOUSEKEY_ENABLE
284 tap_code(KC_MS_WH_UP
);
292 void dip_switch_update_user(uint8_t index
, bool active
) {
296 static bool play_sound
= false;
300 if (play_sound
) { PLAY_SONG(plover_song
); }
305 if (play_sound
) { PLAY_SONG(plover_gb_song
); }
323 void matrix_scan_user(void) {
326 if (muse_counter
== 0) {
327 uint8_t muse_note
= muse_offset
+ SCALE
[muse_clock_pulse()];
328 if (muse_note
!= last_muse_note
) {
329 stop_note(compute_freq_for_midi_note(last_muse_note
));
330 play_note(compute_freq_for_midi_note(muse_note
), 0xF);
331 last_muse_note
= muse_note
;
334 muse_counter
= (muse_counter
+ 1) % muse_tempo
;
344 bool music_mask_user(uint16_t keycode
) {