aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2016-05-09 13:17:15 -0400
committerJack Humbert <jack.humb@gmail.com>2016-05-09 13:17:15 -0400
commit3f02637f4dd765803671c2611191beb096d60b36 (patch)
treec11714b62494097226253d3951de2472e7954129
parent684793360cdb08ac1e50a6d27e1796fadd527adb (diff)
downloadqmk_firmware-3f02637f4dd765803671c2611191beb096d60b36.tar.gz
qmk_firmware-3f02637f4dd765803671c2611191beb096d60b36.zip
Backlight Breathing for Planck and Atomic
* Updated personal layouts * tweaked personal * Nightly - Audio Cleanup Refactored the LUTs. Abstracted some of the registers out of audio to use more functional names. Split audio into audio and audio_pwm. WIP * nightly - collapsed code * Added check for note playing to LEDs * Usability tweaks * TWEAE * nightly added extra kcs to keymap common * turned on Plank audio * Added backlight breathing to atomic * reverted accidental merge * adds backlight pulse to planck
-rw-r--r--keyboard/atomic/atomic.c260
-rw-r--r--keyboard/atomic/atomic.h16
-rw-r--r--keyboard/atomic/keymaps/pvc/config.h3
-rw-r--r--keyboard/atomic/keymaps/pvc/keymap.c357
-rw-r--r--keyboard/atomic/keymaps/pvc/makefile.mk2
-rw-r--r--keyboard/planck/keymaps/experimental/README.md2
-rw-r--r--keyboard/planck/keymaps/experimental/keymap.c383
-rw-r--r--keyboard/planck/keymaps/experimental/makefile.mk2
-rw-r--r--keyboard/planck/keymaps/pvc/keymap.c13
-rw-r--r--keyboard/planck/keymaps/pvc/makefile.mk6
-rw-r--r--keyboard/planck/planck.c221
-rw-r--r--keyboard/planck/planck.h18
-rw-r--r--quantum/audio/audio.c4
-rw-r--r--quantum/audio/audio.h11
-rw-r--r--quantum/keymap_common.h18
-rw-r--r--quantum/keymap_midi.h10
-rw-r--r--quantum/quantum.mk6
-rw-r--r--tmk_core/common/backlight.c5
-rw-r--r--tmk_core/common/backlight.h1
-rw-r--r--tmk_core/common/command.c4
-rw-r--r--tmk_core/common/nodebug.h12
21 files changed, 1153 insertions, 201 deletions
diff --git a/keyboard/atomic/atomic.c b/keyboard/atomic/atomic.c
index 399649716..b4b261457 100644
--- a/keyboard/atomic/atomic.c
+++ b/keyboard/atomic/atomic.c
@@ -2,27 +2,27 @@
2 2
3__attribute__ ((weak)) 3__attribute__ ((weak))
4void matrix_init_user(void) { 4void matrix_init_user(void) {
5 // leave this function blank - it can be defined in a keymap file 5 // leave this function blank - it can be defined in a keymap file
6}; 6};
7 7
8__attribute__ ((weak)) 8__attribute__ ((weak))
9void matrix_scan_user(void) { 9void matrix_scan_user(void) {
10 // leave this function blank - it can be defined in a keymap file 10 // leave this function blank - it can be defined in a keymap file
11} 11}
12 12
13__attribute__ ((weak)) 13__attribute__ ((weak))
14void process_action_user(keyrecord_t *record) { 14void process_action_user(keyrecord_t *record) {
15 // leave this function blank - it can be defined in a keymap file 15 // leave this function blank - it can be defined in a keymap file
16} 16}
17 17
18__attribute__ ((weak)) 18__attribute__ ((weak))
19void led_set_user(uint8_t usb_led) { 19void led_set_user(uint8_t usb_led) {
20 // leave this function blank - it can be defined in a keymap file 20 // leave this function blank - it can be defined in a keymap file
21} 21}
22 22
23void matrix_init_kb(void) { 23void matrix_init_kb(void) {
24 // put your keyboard start-up code here 24 // put your keyboard start-up code here
25 // runs once when the firmware starts up 25 // runs once when the firmware starts up
26 26
27 MCUCR |= (1<<JTD); 27 MCUCR |= (1<<JTD);
28 MCUCR |= (1<<JTD); 28 MCUCR |= (1<<JTD);
@@ -35,31 +35,39 @@ void matrix_init_kb(void) {
35 DDRE |= (1<<6); 35 DDRE |= (1<<6);
36 PORTE |= (1<<6); 36 PORTE |= (1<<6);
37 37
38 matrix_init_user(); 38 matrix_init_user();
39} 39}
40 40
41void matrix_scan_kb(void) { 41void matrix_scan_kb(void) {
42 // put your looping keyboard code here 42 // put your looping keyboard code here
43 // runs every cycle (a lot) 43 // runs every cycle (a lot)
44 44
45 matrix_scan_user(); 45 matrix_scan_user();
46} 46}
47 47
48void process_action_kb(keyrecord_t *record) { 48void process_action_kb(keyrecord_t *record) {
49 // put your per-action keyboard code here 49 // put your per-action keyboard code here
50 // runs for every action, just before processing by the firmware 50 // runs for every action, just before processing by the firmware
51 51
52 process_action_user(record); 52 process_action_user(record);
53} 53}
54 54
55void led_set_kb(uint8_t usb_led) { 55void led_set_kb(uint8_t usb_led) {
56 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here 56 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
57 57
58 led_set_user(usb_led); 58 led_set_user(usb_led);
59} 59}
60 60
61#ifdef BACKLIGHT_ENABLE 61#ifdef BACKLIGHT_ENABLE
62#define CHANNEL OCR1C 62#define CHANNEL OCR1C
63#define BREATHING_NO_HALT 0
64#define BREATHING_HALT_OFF 1
65#define BREATHING_HALT_ON 2
66
67static uint8_t breath_intensity;
68static uint8_t breath_speed;
69static uint16_t breathing_index;
70static uint8_t breathing_halt;
63 71
64void backlight_init_ports() 72void backlight_init_ports()
65{ 73{
@@ -67,54 +75,250 @@ void backlight_init_ports()
67 // Setup PB7 as output and output low. 75 // Setup PB7 as output and output low.
68 DDRB |= (1<<7); 76 DDRB |= (1<<7);
69 PORTB &= ~(1<<7); 77 PORTB &= ~(1<<7);
70 78
71 // Use full 16-bit resolution. 79 // Use full 16-bit resolution.
72 ICR1 = 0xFFFF; 80 ICR1 = 0xFFFF;
73 81
74 // I could write a wall of text here to explain... but TL;DW 82 // I could write a wall of text here to explain... but TL;DW
75 // Go read the ATmega32u4 datasheet. 83 // Go read the ATmega32u4 datasheet.
76 // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on 84 // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
77 85
78 // Pin PB7 = OCR1C (Timer 1, Channel C) 86 // Pin PB7 = OCR1C (Timer 1, Channel C)
79 // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0 87 // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
80 // (i.e. start high, go low when counter matches.) 88 // (i.e. start high, go low when counter matches.)
81 // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0 89 // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
82 // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1 90 // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
83 91
84 TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010; 92 TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
85 TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; 93 TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
86 94
87 backlight_init(); 95 backlight_init();
96 breathing_defaults();
88} 97}
89 98
90void backlight_set(uint8_t level) 99void backlight_set(uint8_t level)
91{ 100{
101 // Prevent backlight blink on lowest level
102 PORTB &= ~(_BV(PORTB7));
103
92 if ( level == 0 ) 104 if ( level == 0 )
93 { 105 {
94 // Turn off PWM control on PB7, revert to output low. 106 // Turn off PWM control on PB7, revert to output low.
95 TCCR1A &= ~(_BV(COM1C1)); 107 TCCR1A &= ~(_BV(COM1C1));
108
109 // Set the brightness to 0
96 CHANNEL = 0x0; 110 CHANNEL = 0x0;
97 // Prevent backlight blink on lowest level
98 PORTB &= ~(_BV(PORTB7));
99 } 111 }
100 else if ( level == BACKLIGHT_LEVELS ) 112 else if ( level >= BACKLIGHT_LEVELS )
101 { 113 {
102 // Prevent backlight blink on lowest level
103 PORTB &= ~(_BV(PORTB7));
104 // Turn on PWM control of PB7 114 // Turn on PWM control of PB7
105 TCCR1A |= _BV(COM1C1); 115 TCCR1A |= _BV(COM1C1);
106 // Set the brightness 116
117 // Set the brightness to max
107 CHANNEL = 0xFFFF; 118 CHANNEL = 0xFFFF;
108 } 119 }
109 else 120 else
110 { 121 {
111 // Prevent backlight blink on lowest level
112 PORTB &= ~(_BV(PORTB7));
113 // Turn on PWM control of PB7 122 // Turn on PWM control of PB7
114 TCCR1A |= _BV(COM1C1); 123 TCCR1A |= _BV(COM1C1);
124
115 // Set the brightness 125 // Set the brightness
116 CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); 126 CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
117 } 127 }
128 breathing_intensity_default();
129}
130
131
132void breathing_enable(void)
133{
134 if (get_backlight_level() == 0)
135 {
136 breathing_index = 0;
137 }
138 else
139 {
140 // Set breathing_index to be at the midpoint (brightest point)
141 breathing_index = 0x20 << breath_speed;
142 }
143
144 breathing_halt = BREATHING_NO_HALT;
145
146 // Enable breathing interrupt
147 TIMSK1 |= _BV(OCIE1A);
148}
149
150void breathing_pulse(void)
151{
152 if (get_backlight_level() == 0)
153 {
154 breathing_index = 0;
155 }
156 else
157 {
158 // Set breathing_index to be at the midpoint + 1 (brightest point)
159 breathing_index = 0x21 << breath_speed;
160 }
161
162 breathing_halt = BREATHING_HALT_ON;
163
164 // Enable breathing interrupt
165 TIMSK1 |= _BV(OCIE1A);
166}
167
168void breathing_disable(void)
169{
170 // Disable breathing interrupt
171 TIMSK1 &= ~_BV(OCIE1A);
172 backlight_set(get_backlight_level());
173}
174
175void breathing_self_disable(void)
176{
177 if (get_backlight_level() == 0)
178 {
179 breathing_halt = BREATHING_HALT_OFF;
180 }
181 else
182 {
183 breathing_halt = BREATHING_HALT_ON;
184 }
185
186 //backlight_set(get_backlight_level());
187}
188
189void breathing_toggle(void)
190{
191 if (!is_breathing())
192 {
193 if (get_backlight_level() == 0)
194 {
195 breathing_index = 0;
196 }
197 else
198 {
199 // Set breathing_index to be at the midpoint + 1 (brightest point)
200 breathing_index = 0x21 << breath_speed;
201 }
202
203 breathing_halt = BREATHING_NO_HALT;
204 }
205
206 // Toggle breathing interrupt
207 TIMSK1 ^= _BV(OCIE1A);
208
209 // Restore backlight level
210 if (!is_breathing())
211 {
212 backlight_set(get_backlight_level());
213 }
214}
215
216bool is_breathing(void)
217{
218 return (TIMSK1 && _BV(OCIE1A));
219}
220
221void breathing_intensity_default(void)
222{
223 //breath_intensity = (uint8_t)((uint16_t)100 * (uint16_t)get_backlight_level() / (uint16_t)BACKLIGHT_LEVELS);
224 breath_intensity = ((BACKLIGHT_LEVELS - get_backlight_level()) * ((BACKLIGHT_LEVELS + 1) / 2));
225}
226
227void breathing_intensity_set(uint8_t value)
228{
229 breath_intensity = value;
230}
231
232void breathing_speed_default(void)
233{
234 breath_speed = 4;
235}
236
237void breathing_speed_set(uint8_t value)
238{
239 bool is_breathing_now = is_breathing();
240 uint8_t old_breath_speed = breath_speed;
241
242 if (is_breathing_now)
243 {
244 // Disable breathing interrupt
245 TIMSK1 &= ~_BV(OCIE1A);
246 }
247
248 breath_speed = value;
249
250 if (is_breathing_now)
251 {
252 // Adjust index to account for new speed
253 breathing_index = (( (uint8_t)( (breathing_index) >> old_breath_speed ) ) & 0x3F) << breath_speed;
254
255 // Enable breathing interrupt
256 TIMSK1 |= _BV(OCIE1A);
257 }
258
259}
260
261void breathing_speed_inc(uint8_t value)
262{
263 if ((uint16_t)(breath_speed - value) > 10 )
264 {
265 breathing_speed_set(0);
266 }
267 else
268 {
269 breathing_speed_set(breath_speed - value);
270 }
271}
272
273void breathing_speed_dec(uint8_t value)
274{
275 if ((uint16_t)(breath_speed + value) > 10 )
276 {
277 breathing_speed_set(10);
278 }
279 else
280 {
281 breathing_speed_set(breath_speed + value);
282 }
283}
284
285void breathing_defaults(void)
286{
287 breathing_intensity_default();
288 breathing_speed_default();
289 breathing_halt = BREATHING_NO_HALT;
290}
291
292/* Breathing Sleep LED brighness(PWM On period) table
293 * (64[steps] * 4[duration]) / 64[PWM periods/s] = 4 second breath cycle
294 *
295 * http://www.wolframalpha.com/input/?i=%28sin%28+x%2F64*pi%29**8+*+255%2C+x%3D0+to+63
296 * (0..63).each {|x| p ((sin(x/64.0*PI)**8)*255).to_i }
297 */
298static const uint8_t breathing_table[64] PROGMEM = {
299 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 6, 10,
300 15, 23, 32, 44, 58, 74, 93, 113, 135, 157, 179, 199, 218, 233, 245, 252,
301255, 252, 245, 233, 218, 199, 179, 157, 135, 113, 93, 74, 58, 44, 32, 23,
302 15, 10, 6, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
303};
304
305ISR(TIMER1_COMPA_vect)
306{
307 // CHANNEL = (pgm_read_byte(&breathing_table[ ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F ] )) * breath_intensity;
308
309
310 uint8_t local_index = ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F;
311
312 if (((breathing_halt == BREATHING_HALT_ON) && (local_index == 0x20)) || ((breathing_halt == BREATHING_HALT_OFF) && (local_index == 0x3F)))
313 {
314 // Disable breathing interrupt
315 TIMSK1 &= ~_BV(OCIE1A);
316 }
317
318 CHANNEL = (uint16_t)(((uint16_t)pgm_read_byte(&breathing_table[local_index]) * 257)) >> breath_intensity;
319
118} 320}
119 321
322
323
120#endif \ No newline at end of file 324#endif \ No newline at end of file
diff --git a/keyboard/atomic/atomic.h b/keyboard/atomic/atomic.h
index 0c7aeb1cc..845a9043e 100644
--- a/keyboard/atomic/atomic.h
+++ b/keyboard/atomic/atomic.h
@@ -33,4 +33,20 @@ void process_action_user(keyrecord_t *record);
33void led_set_user(uint8_t usb_led); 33void led_set_user(uint8_t usb_led);
34void backlight_init_ports(void); 34void backlight_init_ports(void);
35 35
36void breathing_enable(void);
37void breathing_pulse(void);
38void breathing_disable(void);
39void breathing_self_disable(void);
40void breathing_toggle(void);
41bool is_breathing(void);
42
43
44void breathing_defaults(void);
45void breathing_intensity_default(void);
46void breathing_speed_default(void);
47void breathing_speed_set(uint8_t value);
48void breathing_speed_inc(uint8_t value);
49void breathing_speed_dec(uint8_t value);
50
51
36#endif \ No newline at end of file 52#endif \ No newline at end of file
diff --git a/keyboard/atomic/keymaps/pvc/config.h b/keyboard/atomic/keymaps/pvc/config.h
index 034bc5dc5..5e956286b 100644
--- a/keyboard/atomic/keymaps/pvc/config.h
+++ b/keyboard/atomic/keymaps/pvc/config.h
@@ -22,7 +22,7 @@ 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 25#define PRODUCT_ID 0x0419
26#define DEVICE_VER 0x0001 26#define DEVICE_VER 0x0001
27#define MANUFACTURER Ortholinear Keyboards 27#define MANUFACTURER Ortholinear Keyboards
28#define PRODUCT The Atomic Keyboard 28#define PRODUCT The Atomic Keyboard
@@ -162,5 +162,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
162//#define VIBRATO_ENABLE 162//#define VIBRATO_ENABLE
163//#define VIBRATO_STRENGTH_ENABLE 163//#define VIBRATO_STRENGTH_ENABLE
164 164
165
166#endif 165#endif
diff --git a/keyboard/atomic/keymaps/pvc/keymap.c b/keyboard/atomic/keymaps/pvc/keymap.c
index 3d604a868..ff7384268 100644
--- a/keyboard/atomic/keymaps/pvc/keymap.c
+++ b/keyboard/atomic/keymaps/pvc/keymap.c
@@ -8,41 +8,44 @@
8 #include "song_list.h" 8 #include "song_list.h"
9#endif 9#endif
10 10
11#define LAYER_QWERTY 0 11#define LAYER_QWERTY 0
12#define LAYER_COLEMAK 1 12#define LAYER_COLEMAK 1
13#define LAYER_DVORAK 2 13#define LAYER_DVORAK 2
14#define LAYER_RAISE 3 14#define LAYER_UPPER 3
15#define LAYER_LOWER 4 15#define LAYER_LOWER 4
16#define LAYER_FUNCTION 5 16#define LAYER_FUNCTION 5
17#define LAYER_MOUSE 6 17#define LAYER_MOUSE 6
18#define LAYER_MUSIC 7 18#define LAYER_MUSIC 7
19#define LAYER_ADJUST 8 19#define LAYER_ADJUST 8
20 20
21#define MACRO_QWERTY 0 21#define MACRO_QWERTY 0
22#define MACRO_COLEMAK 1 22#define MACRO_COLEMAK 1
23#define MACRO_DVORAK 2 23#define MACRO_DVORAK 2
24#define MACRO_RAISE 3 24#define MACRO_UPPER 3
25#define MACRO_LOWER 4 25#define MACRO_LOWER 4
26#define MACRO_FUNCTION 5 26#define MACRO_FUNCTION 5
27#define MACRO_MOUSE 6 27#define MACRO_MOUSE 6
28#define MACRO_TIMBRE_1 7 28#define MACRO_TIMBRE_1 7
29#define MACRO_TIMBRE_2 8 29#define MACRO_TIMBRE_2 8
30#define MACRO_TIMBRE_3 9 30#define MACRO_TIMBRE_3 9
31#define MACRO_TIMBRE_4 10 31#define MACRO_TIMBRE_4 10
32#define MACRO_TEMPO_U 11 32#define MACRO_TEMPO_U 11
33#define MACRO_TEMPO_D 12 33#define MACRO_TEMPO_D 12
34#define MACRO_TONE_DEFAULT 13 34#define MACRO_TONE_DEFAULT 13
35#define MACRO_MUSIC_ON 14 35#define MACRO_MUSIC_TOGGLE 14
36#define MACRO_MUSIC_OFF 15 36#define MACRO_AUDIO_TOGGLE 16
37#define MACRO_AUDIO_ON 16 37#define MACRO_INC_VOICE 18
38#define MACRO_AUDIO_OFF 17 38#define MACRO_DEC_VOICE 19
39#define MACRO_INC_VOICE 18 39#define MACRO_BACKLIGHT 20
40#define MACRO_DEC_VOICE 19 40#define MACRO_BREATH_TOGGLE 21
41#define MACRO_BREATH_SPEED_INC 23
42#define MACRO_BREATH_SPEED_DEC 24
43#define MACRO_BREATH_DEFAULT 25
41 44
42#define M_QWRTY M(MACRO_QWERTY) 45#define M_QWRTY M(MACRO_QWERTY)
43#define M_COLMK M(MACRO_COLEMAK) 46#define M_COLMK M(MACRO_COLEMAK)
44#define M_DVORK M(MACRO_DVORAK) 47#define M_DVORK M(MACRO_DVORAK)
45#define M_RAISE M(MACRO_RAISE) 48#define M_UPPER M(MACRO_UPPER)
46#define M_LOWER M(MACRO_LOWER) 49#define M_LOWER M(MACRO_LOWER)
47#define M_FUNCT M(MACRO_FUNCTION) 50#define M_FUNCT M(MACRO_FUNCTION)
48#define M_MOUSE M(MACRO_MOUSE) 51#define M_MOUSE M(MACRO_MOUSE)
@@ -53,12 +56,15 @@
53#define TMPO_UP M(MACRO_TEMPO_U) 56#define TMPO_UP M(MACRO_TEMPO_U)
54#define TMPO_DN M(MACRO_TEMPO_D) 57#define TMPO_DN M(MACRO_TEMPO_D)
55#define TMPO_DF M(MACRO_TONE_DEFAULT) 58#define TMPO_DF M(MACRO_TONE_DEFAULT)
59#define M_BACKL M(MACRO_BACKLIGHT)
60#define M_BRTOG M(MACRO_BREATH_TOGGLE)
61#define M_BSPDU M(MACRO_BREATH_SPEED_INC)
62#define M_BSPDD M(MACRO_BREATH_SPEED_DEC)
63#define M_BDFLT M(MACRO_BREATH_DEFAULT)
56 64
57 65
58#define MUS_ON M(MACRO_MUSIC_ON) 66#define MUS_TOG M(MACRO_MUSIC_TOGGLE)
59#define MUS_OFF M(MACRO_MUSIC_OFF) 67#define AUD_TOG M(MACRO_AUDIO_TOGGLE)
60#define AUD_OFF M(MACRO_AUDIO_OFF)
61#define AUD_ON M(MACRO_AUDIO_ON)
62#define VC_UP M(MACRO_INC_VOICE) 68#define VC_UP M(MACRO_INC_VOICE)
63#define VC_DOWN M(MACRO_DEC_VOICE) 69#define VC_DOWN M(MACRO_DEC_VOICE)
64 70
@@ -74,6 +80,7 @@
74#define SC_ACLS LALT(KC_F4) 80#define SC_ACLS LALT(KC_F4)
75#define SC_CCLS LCTL(KC_F4) 81#define SC_CCLS LCTL(KC_F4)
76 82
83#define OS_SHFT KC_FN0
77 84
78#define _______ KC_TRNS 85#define _______ KC_TRNS
79#define XXXXXXX KC_NO 86#define XXXXXXX KC_NO
@@ -92,16 +99,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
92 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| 99 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
93 * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | 100 * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN |
94 * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| 101 * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
95 * | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT | 102 * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT |
96 * '--------------------------------------------------------------------------------------------------------------------------------------' 103 * '--------------------------------------------------------------------------------------------------------------------------------------'
97 */ 104 */
98 105
99 [LAYER_QWERTY] = { /* QWERTY */ 106 [LAYER_QWERTY] = { // QWERTY
100 { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, 107 { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC },
101 { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, 108 { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
102 { 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_ENT, KC_ENT, KC_PGUP }, 109 { 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_ENT, KC_ENT, KC_PGUP },
103 { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, 110 { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
104 { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, 111 { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
105 }, 112 },
106 113
107 /* COLEMAK 114 /* COLEMAK
@@ -114,17 +121,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
114 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| 121 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
115 * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | 122 * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN |
116 * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| 123 * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
117 * | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT | 124 * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT |
118 * '--------------------------------------------------------------------------------------------------------------------------------------' 125 * '--------------------------------------------------------------------------------------------------------------------------------------'
119 */ 126 */
120 127
121 [LAYER_COLEMAK] = { /* COLEMAK */ 128 [LAYER_COLEMAK] = { // COLEMAK
122 { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, 129 { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC },
123 { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, 130 { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
124 { KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, 131 { KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP },
125 { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, 132 { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
126 { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, 133 { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
127 }, 134},
128 135
129/* DVORAK 136/* DVORAK
130 * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. 137 * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
@@ -136,35 +143,63 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
136 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| 143 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
137 * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN | 144 * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN |
138 * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| 145 * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
139 * | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT | 146 * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT |
140 * '--------------------------------------------------------------------------------------------------------------------------------------' 147 * '--------------------------------------------------------------------------------------------------------------------------------------'
141 */ 148 */
142 149
143 [LAYER_DVORAK] = { /* DVORAK */ 150 [LAYER_DVORAK] = { // DVORAK
144 { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_BSPC }, 151 { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_BSPC },
145 { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL }, 152 { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL },
146 { KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_ENT, KC_PGUP }, 153 { KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_ENT, KC_PGUP },
147 { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, 154 { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
148 { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, 155 { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
149 }, 156 },
150 157
151 [LAYER_RAISE] = { /* RAISED */ 158/* UPPER
152 { KC_TILD, KC_PSCR, KC_PAUS, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, 159 * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
153 { _______, KC_F1, KC_F2, KC_F3, KC_F4, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS }, 160 * | PRINT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | / | * | - | NUM LK | SCR LK | XXXXXX . PAUSE |
154 { _______, KC_F5, KC_F6, KC_F7, KC_F8, _______, _______, _______, _______, _______, _______, _______, ________________, KC_HOME }, 161 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
155 { _______, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, ________________, _______, KC_END }, 162 * | | F1 | F2 | F3 | F4 | | | 7 | 8 | 9 | + | ~ | | | INS |
156 { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, 163 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
164 * | CAP LK | F5 | F6 | F7 | F8 | | | 4 | 5 | 6 | + | ` | XXXXXX . | HOME |
165 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
166 * | | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | ENTER | XXXXXX . | | END |
167 * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
168 * | | | | | | 0 | | RALT | . | ENTER | | | | |
169 * '--------------------------------------------------------------------------------------------------------------------------------------'
170 */
171
172 [LAYER_UPPER] = { // UPPER
173 { KC_PSCR, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, XXXXXXX, XXXXXXX, KC_SLCK, KC_PAUS, KC_PAUS },
174 { _______, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS },
175 { KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, ________________, KC_HOME },
176 { _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, ________________, _______, KC_END },
177 { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ },
157 }, 178 },
158 179
159 [LAYER_LOWER] = { /* LOWERED */ 180/* LOWER
160 { KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, 181 * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
161 { _______, KC_F13, KC_F14, KC_F15, KC_F16, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS }, 182 * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . BACKSP |
162 { _______, KC_F17, KC_F18, KC_F19, KC_F20, _______, _______, _______, _______, _______, _______, _______, ________________, KC_HOME }, 183 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
163 { _______, KC_F21, KC_F22, KC_F23, KC_F24, _______, _______, _______, _______, _______, _______, ________________, _______, KC_END }, 184 * | | $ | { | [ | ( | % | # | ) | ] | } | @ | | | | INS |
164 { _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, _______, _______, _______, _______, _______, _______, _______ }, 185 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
186 * | | ^ | * | + | - | ; | : | _ | ' | " | ` | | XXXXXX . | HOME |
187 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
188 * | | | | & | ! | ~ | / | \ | = | < | > | ? | XXXXXX . | | END |
189 * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
190 * | | | | | | | | | | | | | | |
191 * '--------------------------------------------------------------------------------------------------------------------------------------'
192 */
193
194 [LAYER_LOWER] = { // LOWER
195 { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ },
196 { _______, KC_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, _______, _______, _______, KC_INS },
197 { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SCLN, KC_COLN, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, _______, ________________, KC_HOME },
198 { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SLSH, KC_BSLS, KC_EQL, KC_LT, KC_GT, KC_QUES, ________________, _______, KC_END },
199 { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ },
165 }, 200 },
166 201
167 [LAYER_FUNCTION] = { /* FUNCTION */ 202 [LAYER_FUNCTION] = { // FUNCTION
168 { KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, 203 { KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ },
169 { KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, KC_PAUS }, 204 { KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, KC_PAUS },
170 { KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_PSCR }, 205 { KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_PSCR },
@@ -174,7 +209,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
174 209
175#ifdef MOUSEKEY_ENABLE 210#ifdef MOUSEKEY_ENABLE
176 211
177 [LAYER_MOUSE] = { /* MOUSE */ 212 [LAYER_MOUSE] = { // MOUSE
178 { _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX }, 213 { _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX },
179 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, 214 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
180 { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U }, 215 { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U },
@@ -184,25 +219,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
184 219
185#endif 220#endif
186 221
187 [LAYER_MUSIC] = { /* MUSIC */ 222 [LAYER_MUSIC] = { // MUSIC
188 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, 223 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
189 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, 224 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
190 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, 225 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
191 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, 226 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
192 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_RAISE, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, 227 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
193 }, 228 },
194 229
195 [LAYER_ADJUST] = { /* ADJUST */ 230 [LAYER_ADJUST] = { // ADJUST
196 { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, MUS_ON, MUS_OFF, AUD_ON, AUD_OFF, ________________ }, 231 { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MUS_TOG, AUD_TOG, ________________ },
197 { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, 232 { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
198 { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, 233 { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ },
199 { _______, _______, _______, _______, _______, RESET, _______, M_MOUSE, _______, _______, _______, ________________, VC_UP, _______ }, 234 { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, ________________, VC_UP, _______ },
200 { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, VC_DOWN, _______ }, 235 { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, VC_DOWN, _______ },
201 }, 236 },
202 237
203 238
204/* 239/*
205 [LAYER_EMPTY] = { 240 [LAYER_EMPTY] = { // LAYER
206 { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________ }, 241 { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________ },
207 { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, 242 { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
208 { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, 243 { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ },
@@ -241,6 +276,7 @@ void persistant_default_layer_set(uint16_t default_layer)
241} 276}
242 277
243const uint16_t PROGMEM fn_actions[] = { 278const uint16_t PROGMEM fn_actions[] = {
279 [0] = ACTION_MODS_ONESHOT(MOD_LSFT),
244}; 280};
245 281
246const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) 282const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
@@ -250,13 +286,41 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
250 switch(id) 286 switch(id)
251 { 287 {
252 288
289 case MACRO_BREATH_TOGGLE:
290 if (record->event.pressed)
291 {
292 breathing_toggle();
293 }
294 break;
295
296 case MACRO_BREATH_SPEED_INC:
297 if (record->event.pressed)
298 {
299 breathing_speed_inc(1);
300 }
301 break;
302
303 case MACRO_BREATH_SPEED_DEC:
304 if (record->event.pressed)
305 {
306 breathing_speed_dec(1);
307 }
308 break;
309
310 case MACRO_BREATH_DEFAULT:
311 if (record->event.pressed)
312 {
313 breathing_defaults();
314 }
315 break;
316
253 case MACRO_QWERTY: 317 case MACRO_QWERTY:
254 if (record->event.pressed) 318 if (record->event.pressed)
255 { 319 {
256 persistant_default_layer_set(1UL<<LAYER_QWERTY); 320 persistant_default_layer_set(1UL<<LAYER_QWERTY);
257 #ifdef AUDIO_ENABLE 321 #ifdef AUDIO_ENABLE
258 PLAY_NOTE_ARRAY(tone_qwerty, false, STACCATO); 322 PLAY_NOTE_ARRAY(tone_qwerty, false, STACCATO);
259 #endif /* AUDIO_ENABLE */ 323 #endif /* AUDIO_ENABLE */
260 } 324 }
261 break; 325 break;
262 326
@@ -264,9 +328,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
264 if (record->event.pressed) 328 if (record->event.pressed)
265 { 329 {
266 persistant_default_layer_set(1UL<<LAYER_COLEMAK); 330 persistant_default_layer_set(1UL<<LAYER_COLEMAK);
267 #ifdef AUDIO_ENABLE 331 #ifdef AUDIO_ENABLE
268 PLAY_NOTE_ARRAY(tone_colemak, false, STACCATO); 332 PLAY_NOTE_ARRAY(tone_colemak, false, STACCATO);
269 #endif /* AUDIO_ENABLE */ 333 #endif /* AUDIO_ENABLE */
270 } 334 }
271 break; 335 break;
272 336
@@ -274,22 +338,24 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
274 if (record->event.pressed) 338 if (record->event.pressed)
275 { 339 {
276 persistant_default_layer_set(1UL<<LAYER_DVORAK); 340 persistant_default_layer_set(1UL<<LAYER_DVORAK);
277 #ifdef AUDIO_ENABLE 341 #ifdef AUDIO_ENABLE
278 PLAY_NOTE_ARRAY(tone_dvorak, false, STACCATO); 342 PLAY_NOTE_ARRAY(tone_dvorak, false, STACCATO);
279 #endif /* AUDIO_ENABLE */ 343 #endif /* AUDIO_ENABLE */
280 } 344 }
281 break; 345 break;
282 346
283 case MACRO_RAISE: 347 case MACRO_UPPER:
284 if (record->event.pressed) 348 if (record->event.pressed)
285 { 349 {
286 layer_on(LAYER_RAISE); 350 layer_on(LAYER_UPPER);
287 update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); 351 breathing_speed_set(2);
352 breathing_pulse();
353 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
288 } 354 }
289 else 355 else
290 { 356 {
291 layer_off(LAYER_RAISE); 357 layer_off(LAYER_UPPER);
292 update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); 358 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
293 } 359 }
294 break; 360 break;
295 361
@@ -297,22 +363,28 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
297 if (record->event.pressed) 363 if (record->event.pressed)
298 { 364 {
299 layer_on(LAYER_LOWER); 365 layer_on(LAYER_LOWER);
300 update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); 366 breathing_speed_set(2);
367 breathing_pulse();
368 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
301 } 369 }
302 else 370 else
303 { 371 {
304 layer_off(LAYER_LOWER); 372 layer_off(LAYER_LOWER);
305 update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); 373 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
306 } 374 }
307 break; 375 break;
308 376
309 case MACRO_FUNCTION: 377 case MACRO_FUNCTION:
310 if (record->event.pressed) 378 if (record->event.pressed)
311 { 379 {
380 breathing_speed_set(3);
381 breathing_enable();
312 layer_on(LAYER_FUNCTION); 382 layer_on(LAYER_FUNCTION);
313 } 383 }
314 else 384 else
315 { 385 {
386 breathing_speed_set(1);
387 breathing_self_disable();
316 layer_off(LAYER_FUNCTION); 388 layer_off(LAYER_FUNCTION);
317 } 389 }
318 break; 390 break;
@@ -362,42 +434,34 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
362 } 434 }
363 break; 435 break;
364 436
365 case MACRO_AUDIO_OFF: 437 case MACRO_AUDIO_TOGGLE:
366 if (record->event.pressed)
367 {
368 #ifdef AUDIO_ENABLE
369 audio_off();
370 #endif
371 }
372 break;
373
374 case MACRO_AUDIO_ON:
375 if (record->event.pressed) 438 if (record->event.pressed)
376 { 439 {
377 #ifdef AUDIO_ENABLE 440 if (is_audio_on())
378 audio_on(); 441 {
379 PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO); 442 audio_off();
380 #endif 443 }
444 else
445 {
446 audio_on();
447 PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO);
448 }
381 } 449 }
382 break; 450 break;
383 451
384 case MACRO_MUSIC_ON: 452 case MACRO_MUSIC_TOGGLE:
385 if (record->event.pressed) 453 if (record->event.pressed)
386 { 454 {
387 #ifdef AUDIO_ENABLE 455 if (IS_LAYER_ON(LAYER_MUSIC))
456 {
457 layer_off(LAYER_MUSIC);
458 stop_all_notes();
459 }
460 else
461 {
388 PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO); 462 PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO);
389 layer_on(LAYER_MUSIC); 463 layer_on(LAYER_MUSIC);
390 #endif 464 }
391 }
392 break;
393
394 case MACRO_MUSIC_OFF:
395 if (record->event.pressed)
396 {
397 #ifdef AUDIO_ENABLE
398 layer_off(LAYER_MUSIC);
399 stop_all_notes();
400 #endif
401 } 465 }
402 break; 466 break;
403 467
@@ -423,6 +487,14 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
423 487
424#endif /* AUDIO_ENABLE */ 488#endif /* AUDIO_ENABLE */
425 489
490#ifdef BACKLIGHT_ENABLE
491 case MACRO_BACKLIGHT:
492 if (record->event.pressed)
493 {
494 backlight_step();
495 }
496#endif
497
426 default: 498 default:
427 break; 499 break;
428 500
@@ -467,39 +539,39 @@ void led_set_user(uint8_t usb_led)
467 539
468 _delay_ms(10); // gets rid of tick 540 _delay_ms(10); // gets rid of tick
469 541
470 if (!is_playing_notes()) 542 if (!is_playing_notes())
471 { 543 {
472 if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK))) 544 if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK)))
473 { 545 {
474 // If CAPS LK LED is turning on... 546 // If CAPS LK LED is turning on...
475 PLAY_NOTE_ARRAY(tone_caps_on, false, LEGATO); 547 PLAY_NOTE_ARRAY(tone_caps_on, false, LEGATO);
476 } 548 }
477 else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK))) 549 else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK)))
478 { 550 {
479 // If CAPS LK LED is turning off... 551 // If CAPS LK LED is turning off...
480 PLAY_NOTE_ARRAY(tone_caps_off, false, LEGATO); 552 PLAY_NOTE_ARRAY(tone_caps_off, false, LEGATO);
481 } 553 }
482 else if ((usb_led & (1<<USB_LED_NUM_LOCK)) && !(old_usb_led & (1<<USB_LED_NUM_LOCK))) 554 else if ((usb_led & (1<<USB_LED_NUM_LOCK)) && !(old_usb_led & (1<<USB_LED_NUM_LOCK)))
483 { 555 {
484 // If NUM LK LED is turning on... 556 // If NUM LK LED is turning on...
485 PLAY_NOTE_ARRAY(tone_numlk_on, false, LEGATO); 557 PLAY_NOTE_ARRAY(tone_numlk_on, false, LEGATO);
486 } 558 }
487 else if (!(usb_led & (1<<USB_LED_NUM_LOCK)) && (old_usb_led & (1<<USB_LED_NUM_LOCK))) 559 else if (!(usb_led & (1<<USB_LED_NUM_LOCK)) && (old_usb_led & (1<<USB_LED_NUM_LOCK)))
488 { 560 {
489 // If NUM LED is turning off... 561 // If NUM LED is turning off...
490 PLAY_NOTE_ARRAY(tone_numlk_off, false, LEGATO); 562 PLAY_NOTE_ARRAY(tone_numlk_off, false, LEGATO);
491 } 563 }
492 else if ((usb_led & (1<<USB_LED_SCROLL_LOCK)) && !(old_usb_led & (1<<USB_LED_SCROLL_LOCK))) 564 else if ((usb_led & (1<<USB_LED_SCROLL_LOCK)) && !(old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
493 { 565 {
494 // If SCROLL LK LED is turning on... 566 // If SCROLL LK LED is turning on...
495 PLAY_NOTE_ARRAY(tone_scroll_on, false, LEGATO); 567 PLAY_NOTE_ARRAY(tone_scroll_on, false, LEGATO);
496 } 568 }
497 else if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)) && (old_usb_led & (1<<USB_LED_SCROLL_LOCK))) 569 else if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)) && (old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
498 { 570 {
499 // If SCROLL LED is turning off... 571 // If SCROLL LED is turning off...
500 PLAY_NOTE_ARRAY(tone_scroll_off, false, LEGATO); 572 PLAY_NOTE_ARRAY(tone_scroll_off, false, LEGATO);
501 } 573 }
502 } 574 }
503 575
504 old_usb_led = usb_led; 576 old_usb_led = usb_led;
505} 577}
@@ -514,7 +586,8 @@ void play_startup_tone()
514void play_goodbye_tone() 586void play_goodbye_tone()
515{ 587{
516 PLAY_NOTE_ARRAY(tone_my_goodbye, false, STACCATO); 588 PLAY_NOTE_ARRAY(tone_my_goodbye, false, STACCATO);
517 _delay_ms(1000); 589 _delay_ms(2000);
590 stop_all_notes();
518} 591}
519 592
520#endif /* AUDIO_ENABLE */ \ No newline at end of file 593#endif /* AUDIO_ENABLE */ \ No newline at end of file
diff --git a/keyboard/atomic/keymaps/pvc/makefile.mk b/keyboard/atomic/keymaps/pvc/makefile.mk
index eefa42855..f7798b09d 100644
--- a/keyboard/atomic/keymaps/pvc/makefile.mk
+++ b/keyboard/atomic/keymaps/pvc/makefile.mk
@@ -4,7 +4,7 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
4CONSOLE_ENABLE = no # Console for debug(+400) 4CONSOLE_ENABLE = no # Console for debug(+400)
5COMMAND_ENABLE = yes # Commands for debug and configuration 5COMMAND_ENABLE = yes # Commands for debug and configuration
6NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work 6NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
7BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality 7BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
8MIDI_ENABLE = no # MIDI controls 8MIDI_ENABLE = no # MIDI controls
9AUDIO_ENABLE = yes # Audio output on port C6 9AUDIO_ENABLE = yes # Audio output on port C6
10UNICODE_ENABLE = no # Unicode 10UNICODE_ENABLE = no # Unicode
diff --git a/keyboard/planck/keymaps/experimental/README.md b/keyboard/planck/keymaps/experimental/README.md
new file mode 100644
index 000000000..de9680b49
--- /dev/null
+++ b/keyboard/planck/keymaps/experimental/README.md
@@ -0,0 +1,2 @@
1# The Default Planck Layout
2
diff --git a/keyboard/planck/keymaps/experimental/keymap.c b/keyboard/planck/keymaps/experimental/keymap.c
new file mode 100644
index 000000000..fc3ac4a97
--- /dev/null
+++ b/keyboard/planck/keymaps/experimental/keymap.c
@@ -0,0 +1,383 @@
1// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
2// this is the style you want to emulate.
3
4#include "planck.h"
5#include "action_layer.h"
6#ifdef AUDIO_ENABLE
7 #include "audio.h"
8#endif
9#include "eeconfig.h"
10
11extern keymap_config_t keymap_config;
12
13// Each layer gets a name for readability, which is then used in the keymap matrix below.
14// The underscores don't mean anything - you can have a layer called STUFF or any other name.
15// Layer names don't all need to be of the same length, obviously, and you can also skip them
16// entirely and just use numbers.
17#define _QWERTY 0
18#define _COLEMAK 1
19#define _DVORAK 2
20#define _LOWER 3
21#define _RAISE 4
22#define _MUSIC 5
23#define _PLOVER 6
24#define _ADJUST 16
25
26// Macro name shortcuts
27#define QWERTY M(_QWERTY)
28#define COLEMAK M(_COLEMAK)
29#define DVORAK M(_DVORAK)
30#define LOWER M(_LOWER)
31#define RAISE M(_RAISE)
32#define M_BL 5
33#define AUD_OFF M(6)
34#define AUD_ON M(7)
35#define MUS_OFF M(8)
36#define MUS_ON M(9)
37#define VC_IN M(10)
38#define VC_DE M(11)
39#define PLOVER M(12)
40#define EXT_PLV M(13)
41
42// Fillers to make layering more clear
43#define _______ KC_TRNS
44#define XXXXXXX KC_NO
45
46const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
47
48/* Qwerty
49 * ,-----------------------------------------------------------------------------------.
50 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
51 * |------+------+------+------+------+-------------+------+------+------+------+------|
52 * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
53 * |------+------+------+------+------+------|------+------+------+------+------+------|
54 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
55 * |------+------+------+------+------+------+------+------+------+------+------+------|
56 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
57 * `-----------------------------------------------------------------------------------'
58 */
59[_QWERTY] = {
60 {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
61 {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
62 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
63 {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
64},
65
66/* Colemak
67 * ,-----------------------------------------------------------------------------------.
68 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
69 * |------+------+------+------+------+-------------+------+------+------+------+------|
70 * | Esc | A | R | S | T | D | H | N | E | I | O | " |
71 * |------+------+------+------+------+------|------+------+------+------+------+------|
72 * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
73 * |------+------+------+------+------+------+------+------+------+------+------+------|
74 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
75 * `-----------------------------------------------------------------------------------'
76 */
77[_COLEMAK] = {
78 {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
79 {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
80 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
81 {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
82},
83
84/* Dvorak
85 * ,-----------------------------------------------------------------------------------.
86 * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
87 * |------+------+------+------+------+-------------+------+------+------+------+------|
88 * | Esc | A | O | E | U | I | D | H | T | N | S | / |
89 * |------+------+------+------+------+------|------+------+------+------+------+------|
90 * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
91 * |------+------+------+------+------+------+------+------+------+------+------+------|
92 * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
93 * `-----------------------------------------------------------------------------------'
94 */
95[_DVORAK] = {
96 {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
97 {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
98 {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
99 {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
100},
101
102/* Lower
103 * ,-----------------------------------------------------------------------------------.
104 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
105 * |------+------+------+------+------+-------------+------+------+------+------+------|
106 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
107 * |------+------+------+------+------+------|------+------+------+------+------+------|
108 * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
109 * |------+------+------+------+------+------+------+------+------+------+------+------|
110 * | | | | | | | | Next | Vol- | Vol+ | Play |
111 * `-----------------------------------------------------------------------------------'
112 */
113[_LOWER] = {
114 {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
115 {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
116 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______},
117 {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
118},
119
120/* Raise
121 * ,-----------------------------------------------------------------------------------.
122 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
123 * |------+------+------+------+------+-------------+------+------+------+------+------|
124 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
125 * |------+------+------+------+------+------|------+------+------+------+------+------|
126 * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
127 * |------+------+------+------+------+------+------+------+------+------+------+------|
128 * | | | | | | | | Next | Vol- | Vol+ | Play |
129 * `-----------------------------------------------------------------------------------'
130 */
131[_RAISE] = {
132 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
133 {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
134 {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______},
135 {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
136},
137
138/* Music (reserved for process_action_user)
139 *
140 */
141[_MUSIC] = {
142 {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
143 {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
144 {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
145 {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
146},
147
148/* Plover layer (http://opensteno.org)
149 * ,-----------------------------------------------------------------------------------.
150 * | # | # | # | # | # | # | # | # | # | # | # | # |
151 * |------+------+------+------+------+-------------+------+------+------+------+------|
152 * | | S | T | P | H | * | * | F | P | L | T | D |
153 * |------+------+------+------+------+------|------+------+------+------+------+------|
154 * | | S | K | W | R | * | * | R | B | G | S | Z |
155 * |------+------+------+------+------+------+------+------+------+------+------+------|
156 * | Exit | | | A | O | | E | U | | | |
157 * `-----------------------------------------------------------------------------------'
158 */
159
160[_PLOVER] = {
161 {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
162 {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
163 {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
164 {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
165},
166
167/* Adjust (Lower + Raise)
168 * ,-----------------------------------------------------------------------------------.
169 * | | Reset| | | | | | | | | | Del |
170 * |------+------+------+------+------+-------------+------+------+------+------+------|
171 * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
172 * |------+------+------+------+------+------|------+------+------+------+------+------|
173 * | |Voice-|Voice+|Mus on|Musoff| | | | | | | |
174 * |------+------+------+------+------+------+------+------+------+------+------+------|
175 * | | | | | | | | | | | |
176 * `-----------------------------------------------------------------------------------'
177 */
178[_ADJUST] = {
179 {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
180 {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______},
181 {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
182 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
183}
184
185
186};
187
188const uint16_t PROGMEM fn_actions[] = {
189
190};
191
192#ifdef AUDIO_ENABLE
193float tone_startup[][2] = {
194 {440.0*pow(2.0,(31)/12.0), 12},
195 {440.0*pow(2.0,(28)/12.0), 8},
196 {440.0*pow(2.0,(19)/12.0), 8},
197 {440.0*pow(2.0,(24)/12.0), 8},
198 {440.0*pow(2.0,(28)/12.0), 20}
199};
200
201float tone_qwerty[][2] = SONG(QWERTY_SOUND);
202float tone_dvorak[][2] = SONG(DVORAK_SOUND);
203float tone_colemak[][2] = SONG(COLEMAK_SOUND);
204float tone_plover[][2] = SONG(PLOVER_SOUND);
205float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
206
207float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
208float goodbye[][2] = SONG(GOODBYE_SOUND);
209#endif
210
211
212void persistant_default_layer_set(uint16_t default_layer) {
213 eeconfig_update_default_layer(default_layer);
214 default_layer_set(default_layer);
215}
216
217const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
218{
219 switch(id) {
220 case _QWERTY:
221 if (record->event.pressed) {
222 #ifdef AUDIO_ENABLE
223 PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
224 #endif
225 persistant_default_layer_set(1UL<<_QWERTY);
226 }
227 break;
228 case _COLEMAK:
229 if (record->event.pressed) {
230 #ifdef AUDIO_ENABLE
231 PLAY_NOTE_ARRAY(tone_colemak, false, 0);
232 #endif
233 persistant_default_layer_set(1UL<<_COLEMAK);
234 }
235 break;
236 case _DVORAK:
237 if (record->event.pressed) {
238 #ifdef AUDIO_ENABLE
239 PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
240 #endif
241 persistant_default_layer_set(1UL<<_DVORAK);
242 }
243 break;
244 case _LOWER:
245 if (record->event.pressed) {
246 layer_on(_LOWER);
247 breathing_speed_set(2);
248 breathing_pulse();
249 update_tri_layer(_LOWER, _RAISE, _ADJUST);
250 } else {
251 layer_off(_LOWER);
252 update_tri_layer(_LOWER, _RAISE, _ADJUST);
253 }
254 break;
255 case _RAISE:
256 if (record->event.pressed) {
257 layer_on(_RAISE);
258 breathing_speed_set(2);
259 breathing_pulse();
260 update_tri_layer(_LOWER, _RAISE, _ADJUST);
261 } else {
262 layer_off(_RAISE);
263 update_tri_layer(_LOWER, _RAISE, _ADJUST);
264 }
265 break;
266 case M_BL:
267 if (record->event.pressed) {
268 register_code(KC_RSFT);
269 #ifdef BACKLIGHT_ENABLE
270 backlight_step();
271 #endif
272 } else {
273 unregister_code(KC_RSFT);
274 }
275 break;
276 case 6:
277 if (record->event.pressed) {
278 #ifdef AUDIO_ENABLE
279 audio_off();
280 #endif
281 }
282 break;
283 case 7:
284 if (record->event.pressed) {
285 #ifdef AUDIO_ENABLE
286 audio_on();
287 PLAY_NOTE_ARRAY(tone_startup, false, 0);
288 #endif
289 }
290 break;
291 case 8:
292 if (record->event.pressed) {
293 #ifdef AUDIO_ENABLE
294 layer_off(_MUSIC);
295 stop_all_notes();
296 #endif
297 }
298 break;
299 case 9:
300 if (record->event.pressed) {
301 #ifdef AUDIO_ENABLE
302 PLAY_NOTE_ARRAY(music_scale, false, 0);
303 layer_on(_MUSIC);
304 #endif
305 }
306 break;
307 case 10:
308 if (record->event.pressed) {
309 #ifdef AUDIO_ENABLE
310 voice_iterate();
311 PLAY_NOTE_ARRAY(music_scale, false, 0);
312 #endif
313 }
314 break;
315 case 11:
316 if (record->event.pressed) {
317 #ifdef AUDIO_ENABLE
318 voice_deiterate();
319 PLAY_NOTE_ARRAY(music_scale, false, 0);
320 #endif
321 }
322 break;
323 case 12:
324 if (record->event.pressed) {
325 #ifdef AUDIO_ENABLE
326 stop_all_notes();
327 PLAY_NOTE_ARRAY(tone_plover, false, 0);
328 #endif
329 layer_off(_RAISE);
330 layer_off(_LOWER);
331 layer_off(_ADJUST);
332 layer_off(_MUSIC);
333 layer_on(_PLOVER);
334 if (!eeconfig_is_enabled()) {
335 eeconfig_init();
336 }
337 keymap_config.raw = eeconfig_read_keymap();
338 keymap_config.nkro = 1;
339 eeconfig_update_keymap(keymap_config.raw);
340 }
341 break;
342 case 13:
343 if (record->event.pressed) {
344 #ifdef AUDIO_ENABLE
345 PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
346 #endif
347 layer_off(_PLOVER);
348 }
349 break;
350
351 }
352 return MACRO_NONE;
353};
354
355void matrix_init_user(void) {
356 #ifdef AUDIO_ENABLE
357 _delay_ms(20); // stops the tick
358 PLAY_NOTE_ARRAY(tone_startup, false, 0);
359 #endif
360}
361
362#ifdef AUDIO_ENABLE
363void play_goodbye_tone()
364{
365 PLAY_NOTE_ARRAY(goodbye, false, 0);
366 _delay_ms(150);
367}
368
369uint8_t starting_note = 0x0C;
370int offset = 0;
371
372void process_action_user(keyrecord_t *record) {
373
374 if (IS_LAYER_ON(_MUSIC)) {
375 if (record->event.pressed) {
376 play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
377 } else {
378 stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
379 }
380 }
381
382}
383#endif
diff --git a/keyboard/planck/keymaps/experimental/makefile.mk b/keyboard/planck/keymaps/experimental/makefile.mk
new file mode 100644
index 000000000..99fbfbd0b
--- /dev/null
+++ b/keyboard/planck/keymaps/experimental/makefile.mk
@@ -0,0 +1,2 @@
1AUDIO_ENABLE = yes
2NKRO_ENABLE = yes \ No newline at end of file
diff --git a/keyboard/planck/keymaps/pvc/keymap.c b/keyboard/planck/keymaps/pvc/keymap.c
index 830b00a4c..177f04484 100644
--- a/keyboard/planck/keymaps/pvc/keymap.c
+++ b/keyboard/planck/keymaps/pvc/keymap.c
@@ -38,6 +38,7 @@
38#define MACRO_AUDIO_OFF 17 38#define MACRO_AUDIO_OFF 17
39#define MACRO_INC_VOICE 18 39#define MACRO_INC_VOICE 18
40#define MACRO_DEC_VOICE 19 40#define MACRO_DEC_VOICE 19
41#define MACRO_BACKLIGHT 20
41 42
42#define M_QWRTY M(MACRO_QWERTY) 43#define M_QWRTY M(MACRO_QWERTY)
43#define M_COLMK M(MACRO_COLEMAK) 44#define M_COLMK M(MACRO_COLEMAK)
@@ -53,6 +54,7 @@
53#define TMPO_UP M(MACRO_TEMPO_U) 54#define TMPO_UP M(MACRO_TEMPO_U)
54#define TMPO_DN M(MACRO_TEMPO_D) 55#define TMPO_DN M(MACRO_TEMPO_D)
55#define TMPO_DF M(MACRO_TONE_DEFAULT) 56#define TMPO_DF M(MACRO_TONE_DEFAULT)
57#define M_BACKL M(MACRO_BACKLIGHT)
56 58
57 59
58#define MUS_ON M(MACRO_MUSIC_ON) 60#define MUS_ON M(MACRO_MUSIC_ON)
@@ -217,7 +219,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
217 [LAYER_ADJUST] = { /* ADJUST */ 219 [LAYER_ADJUST] = { /* ADJUST */
218 { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, MUS_ON, MUS_OFF, AUD_ON, AUD_OFF }, 220 { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, MUS_ON, MUS_OFF, AUD_ON, AUD_OFF },
219 { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______ }, 221 { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______ },
220 { _______, _______, _______, _______, _______, RESET, _______, M_MOUSE, _______, _______, _______, _______ }, 222 { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, _______ },
221 { _______, _______, _______, _______, _______, _______, _______, _______, VC_UP, VC_DOWN, _______, _______ }, 223 { _______, _______, _______, _______, _______, _______, _______, _______, VC_UP, VC_DOWN, _______, _______ },
222 }, 224 },
223 225
@@ -337,6 +339,15 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
337 } 339 }
338 break; 340 break;
339 341
342
343#ifdef BACKLIGHT_ENABLE
344 case MACRO_BACKLIGHT:
345 if (record->event.pressed)
346 {
347 backlight_step();
348 }
349#endif
350
340#ifdef MOUSEKEY_ENABLE 351#ifdef MOUSEKEY_ENABLE
341 352
342 case MACRO_MOUSE: 353 case MACRO_MOUSE:
diff --git a/keyboard/planck/keymaps/pvc/makefile.mk b/keyboard/planck/keymaps/pvc/makefile.mk
index b3f1b9e51..f7798b09d 100644
--- a/keyboard/planck/keymaps/pvc/makefile.mk
+++ b/keyboard/planck/keymaps/pvc/makefile.mk
@@ -1,12 +1,12 @@
1BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) 1BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
2MOUSEKEY_ENABLE = yes # Mouse keys(+4700) 2MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
3EXTRAKEY_ENABLE = yes # Audio control and System control(+450) 3EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
4CONSOLE_ENABLE = yes # Console for debug(+400) 4CONSOLE_ENABLE = no # Console for debug(+400)
5COMMAND_ENABLE = yes # Commands for debug and configuration 5COMMAND_ENABLE = yes # Commands for debug and configuration
6NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work 6NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
7BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality 7BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
8MIDI_ENABLE = no # MIDI controls 8MIDI_ENABLE = no # MIDI controls
9AUDIO_ENABLE = no # Audio output on port C6 9AUDIO_ENABLE = yes # Audio output on port C6
10UNICODE_ENABLE = no # Unicode 10UNICODE_ENABLE = no # Unicode
11BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID 11BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
12RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. 12RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
diff --git a/keyboard/planck/planck.c b/keyboard/planck/planck.c
index 655850150..446353dbf 100644
--- a/keyboard/planck/planck.c
+++ b/keyboard/planck/planck.c
@@ -9,6 +9,9 @@ void matrix_scan_user(void) {}
9__attribute__ ((weak)) 9__attribute__ ((weak))
10void process_action_user(keyrecord_t *record) {} 10void process_action_user(keyrecord_t *record) {}
11 11
12__attribute__ ((weak))
13void led_set_user(uint8_t usb_led) {}
14
12void matrix_init_kb(void) { 15void matrix_init_kb(void) {
13#ifdef BACKLIGHT_ENABLE 16#ifdef BACKLIGHT_ENABLE
14 backlight_init_ports(); 17 backlight_init_ports();
@@ -33,8 +36,22 @@ void process_action_kb(keyrecord_t *record) {
33 process_action_user(record); 36 process_action_user(record);
34} 37}
35 38
39void led_set_kb(uint8_t usb_led) {
40 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
41
42 led_set_user(usb_led);
43}
44
36#ifdef BACKLIGHT_ENABLE 45#ifdef BACKLIGHT_ENABLE
37#define CHANNEL OCR1C 46#define CHANNEL OCR1C
47#define BREATHING_NO_HALT 0
48#define BREATHING_HALT_OFF 1
49#define BREATHING_HALT_ON 2
50
51static uint8_t breath_intensity;
52static uint8_t breath_speed;
53static uint16_t breathing_index;
54static uint8_t breathing_halt;
38 55
39void backlight_init_ports() 56void backlight_init_ports()
40{ 57{
@@ -60,22 +77,22 @@ void backlight_init_ports()
60 TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; 77 TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
61 78
62 backlight_init(); 79 backlight_init();
80 breathing_defaults();
63} 81}
64 82
65void backlight_set(uint8_t level) 83void backlight_set(uint8_t level)
66{ 84{
85 // Prevent backlight blink on lowest level
86 PORTB &= ~(_BV(PORTB7));
87
67 if ( level == 0 ) 88 if ( level == 0 )
68 { 89 {
69 // Turn off PWM control on PB7, revert to output low. 90 // Turn off PWM control on PB7, revert to output low.
70 TCCR1A &= ~(_BV(COM1C1)); 91 TCCR1A &= ~(_BV(COM1C1));
71 CHANNEL = 0x0; 92 CHANNEL = 0x0;
72 // Prevent backlight blink on lowest level
73 PORTB &= ~(_BV(PORTB7));
74 } 93 }
75 else if ( level == BACKLIGHT_LEVELS ) 94 else if ( level == BACKLIGHT_LEVELS )
76 { 95 {
77 // Prevent backlight blink on lowest level
78 PORTB &= ~(_BV(PORTB7));
79 // Turn on PWM control of PB7 96 // Turn on PWM control of PB7
80 TCCR1A |= _BV(COM1C1); 97 TCCR1A |= _BV(COM1C1);
81 // Set the brightness 98 // Set the brightness
@@ -83,13 +100,205 @@ void backlight_set(uint8_t level)
83 } 100 }
84 else 101 else
85 { 102 {
86 // Prevent backlight blink on lowest level
87 PORTB &= ~(_BV(PORTB7));
88 // Turn on PWM control of PB7 103 // Turn on PWM control of PB7
89 TCCR1A |= _BV(COM1C1); 104 TCCR1A |= _BV(COM1C1);
90 // Set the brightness 105 // Set the brightness
91 CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); 106 CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
92 } 107 }
108 breathing_intensity_default();
109}
110
111
112void breathing_enable(void)
113{
114 if (get_backlight_level() == 0)
115 {
116 breathing_index = 0;
117 }
118 else
119 {
120 // Set breathing_index to be at the midpoint (brightest point)
121 breathing_index = 0x20 << breath_speed;
122 }
123
124 breathing_halt = BREATHING_NO_HALT;
125
126 // Enable breathing interrupt
127 TIMSK1 |= _BV(OCIE1A);
128}
129
130void breathing_pulse(void)
131{
132 if (get_backlight_level() == 0)
133 {
134 breathing_index = 0;
135 }
136 else
137 {
138 // Set breathing_index to be at the midpoint + 1 (brightest point)
139 breathing_index = 0x21 << breath_speed;
140 }
141
142 breathing_halt = BREATHING_HALT_ON;
143
144 // Enable breathing interrupt
145 TIMSK1 |= _BV(OCIE1A);
93} 146}
94 147
148void breathing_disable(void)
149{
150 // Disable breathing interrupt
151 TIMSK1 &= ~_BV(OCIE1A);
152 backlight_set(get_backlight_level());
153}
154
155void breathing_self_disable(void)
156{
157 if (get_backlight_level() == 0)
158 {
159 breathing_halt = BREATHING_HALT_OFF;
160 }
161 else
162 {
163 breathing_halt = BREATHING_HALT_ON;
164 }
165
166 //backlight_set(get_backlight_level());
167}
168
169void breathing_toggle(void)
170{
171 if (!is_breathing())
172 {
173 if (get_backlight_level() == 0)
174 {
175 breathing_index = 0;
176 }
177 else
178 {
179 // Set breathing_index to be at the midpoint + 1 (brightest point)
180 breathing_index = 0x21 << breath_speed;
181 }
182
183 breathing_halt = BREATHING_NO_HALT;
184 }
185
186 // Toggle breathing interrupt
187 TIMSK1 ^= _BV(OCIE1A);
188
189 // Restore backlight level
190 if (!is_breathing())
191 {
192 backlight_set(get_backlight_level());
193 }
194}
195
196bool is_breathing(void)
197{
198 return (TIMSK1 && _BV(OCIE1A));
199}
200
201void breathing_intensity_default(void)
202{
203 //breath_intensity = (uint8_t)((uint16_t)100 * (uint16_t)get_backlight_level() / (uint16_t)BACKLIGHT_LEVELS);
204 breath_intensity = ((BACKLIGHT_LEVELS - get_backlight_level()) * ((BACKLIGHT_LEVELS + 1) / 2));
205}
206
207void breathing_intensity_set(uint8_t value)
208{
209 breath_intensity = value;
210}
211
212void breathing_speed_default(void)
213{
214 breath_speed = 4;
215}
216
217void breathing_speed_set(uint8_t value)
218{
219 bool is_breathing_now = is_breathing();
220 uint8_t old_breath_speed = breath_speed;
221
222 if (is_breathing_now)
223 {
224 // Disable breathing interrupt
225 TIMSK1 &= ~_BV(OCIE1A);
226 }
227
228 breath_speed = value;
229
230 if (is_breathing_now)
231 {
232 // Adjust index to account for new speed
233 breathing_index = (( (uint8_t)( (breathing_index) >> old_breath_speed ) ) & 0x3F) << breath_speed;
234
235 // Enable breathing interrupt
236 TIMSK1 |= _BV(OCIE1A);
237 }
238
239}
240
241void breathing_speed_inc(uint8_t value)
242{
243 if ((uint16_t)(breath_speed - value) > 10 )
244 {
245 breathing_speed_set(0);
246 }
247 else
248 {
249 breathing_speed_set(breath_speed - value);
250 }
251}
252
253void breathing_speed_dec(uint8_t value)
254{
255 if ((uint16_t)(breath_speed + value) > 10 )
256 {
257 breathing_speed_set(10);
258 }
259 else
260 {
261 breathing_speed_set(breath_speed + value);
262 }
263}
264
265void breathing_defaults(void)
266{
267 breathing_intensity_default();
268 breathing_speed_default();
269 breathing_halt = BREATHING_NO_HALT;
270}
271
272/* Breathing Sleep LED brighness(PWM On period) table
273 * (64[steps] * 4[duration]) / 64[PWM periods/s] = 4 second breath cycle
274 *
275 * http://www.wolframalpha.com/input/?i=%28sin%28+x%2F64*pi%29**8+*+255%2C+x%3D0+to+63
276 * (0..63).each {|x| p ((sin(x/64.0*PI)**8)*255).to_i }
277 */
278static const uint8_t breathing_table[64] PROGMEM = {
279 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 6, 10,
280 15, 23, 32, 44, 58, 74, 93, 113, 135, 157, 179, 199, 218, 233, 245, 252,
281255, 252, 245, 233, 218, 199, 179, 157, 135, 113, 93, 74, 58, 44, 32, 23,
282 15, 10, 6, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
283};
284
285ISR(TIMER1_COMPA_vect)
286{
287 // CHANNEL = (pgm_read_byte(&breathing_table[ ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F ] )) * breath_intensity;
288
289
290 uint8_t local_index = ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F;
291
292 if (((breathing_halt == BREATHING_HALT_ON) && (local_index == 0x20)) || ((breathing_halt == BREATHING_HALT_OFF) && (local_index == 0x3F)))
293 {
294 // Disable breathing interrupt
295 TIMSK1 &= ~_BV(OCIE1A);
296 }
297
298 CHANNEL = (uint16_t)(((uint16_t)pgm_read_byte(&breathing_table[local_index]) * 257)) >> breath_intensity;
299
300}
301
302
303
95#endif \ No newline at end of file 304#endif \ No newline at end of file
diff --git a/keyboard/planck/planck.h b/keyboard/planck/planck.h
index c5b59d999..cfd4956bf 100644
--- a/keyboard/planck/planck.h
+++ b/keyboard/planck/planck.h
@@ -45,4 +45,22 @@ void matrix_init_user(void);
45void matrix_scan_user(void); 45void matrix_scan_user(void);
46void process_action_user(keyrecord_t *record); 46void process_action_user(keyrecord_t *record);
47 47
48void led_set_user(uint8_t usb_led);
49void backlight_init_ports(void);
50
51void breathing_enable(void);
52void breathing_pulse(void);
53void breathing_disable(void);
54void breathing_self_disable(void);
55void breathing_toggle(void);
56bool is_breathing(void);
57
58
59void breathing_defaults(void);
60void breathing_intensity_default(void);
61void breathing_speed_default(void);
62void breathing_speed_set(uint8_t value);
63void breathing_speed_inc(uint8_t value);
64void breathing_speed_dec(uint8_t value);
65
48#endif 66#endif
diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c
index 3a7f0f556..27b64f8c9 100644
--- a/quantum/audio/audio.c
+++ b/quantum/audio/audio.c
@@ -374,6 +374,10 @@ bool is_playing_notes(void) {
374 return playing_notes; 374 return playing_notes;
375} 375}
376 376
377bool is_audio_on(void) {
378 return (audio_config.enable != 0);
379}
380
377void audio_toggle(void) { 381void audio_toggle(void) {
378 audio_config.enable ^= 1; 382 audio_config.enable ^= 1;
379 eeconfig_update_audio(audio_config.raw); 383 eeconfig_update_audio(audio_config.raw);
diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h
index 3d706587a..4ba879bbb 100644
--- a/quantum/audio/audio.h
+++ b/quantum/audio/audio.h
@@ -25,6 +25,7 @@ typedef union {
25 }; 25 };
26} audio_config_t; 26} audio_config_t;
27 27
28bool is_audio_on(void);
28void audio_toggle(void); 29void audio_toggle(void);
29void audio_on(void); 30void audio_on(void);
30void audio_off(void); 31void audio_off(void);
@@ -71,11 +72,11 @@ void stop_note(float freq);
71void stop_all_notes(void); 72void stop_all_notes(void);
72void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest); 73void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest);
73 74
74#define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \ 75#define SCALE (int8_t []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \
75 0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \ 76 0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \
76 0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \ 77 0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \
77 0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \ 78 0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \
78 0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), } 79 0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), }
79 80
80// These macros are used to allow play_notes to play an array of indeterminate 81// These macros are used to allow play_notes to play an array of indeterminate
81// length. This works around the limitation of C's sizeof operation on pointers. 82// length. This works around the limitation of C's sizeof operation on pointers.
diff --git a/quantum/keymap_common.h b/quantum/keymap_common.h
index 8c27e9035..322fda498 100644
--- a/quantum/keymap_common.h
+++ b/quantum/keymap_common.h
@@ -87,8 +87,11 @@ extern const uint16_t fn_actions[];
87#define KC_EXCLAIM KC_EXLM 87#define KC_EXCLAIM KC_EXLM
88 88
89#define KC_AT LSFT(KC_2) // @ 89#define KC_AT LSFT(KC_2) // @
90
91
90#define KC_HASH LSFT(KC_3) // # 92#define KC_HASH LSFT(KC_3) // #
91 93
94
92#define KC_DLR LSFT(KC_4) // $ 95#define KC_DLR LSFT(KC_4) // $
93#define KC_DOLLAR KC_DLR 96#define KC_DOLLAR KC_DLR
94 97
@@ -110,11 +113,13 @@ extern const uint16_t fn_actions[];
110#define KC_RPRN LSFT(KC_0) // ) 113#define KC_RPRN LSFT(KC_0) // )
111#define KC_RIGHT_PAREN KC_RPRN 114#define KC_RIGHT_PAREN KC_RPRN
112 115
116
113#define KC_UNDS LSFT(KC_MINS) // _ 117#define KC_UNDS LSFT(KC_MINS) // _
114#define KC_UNDERSCORE KC_UNDS 118#define KC_UNDERSCORE KC_UNDS
115 119
116#define KC_PLUS LSFT(KC_EQL) // + 120#define KC_PLUS LSFT(KC_EQL) // +
117 121
122
118#define KC_LCBR LSFT(KC_LBRC) // { 123#define KC_LCBR LSFT(KC_LBRC) // {
119#define KC_LEFT_CURLY_BRACE KC_LCBR 124#define KC_LEFT_CURLY_BRACE KC_LCBR
120 125
@@ -132,6 +137,19 @@ extern const uint16_t fn_actions[];
132 137
133#define KC_PIPE LSFT(KC_BSLS) // | 138#define KC_PIPE LSFT(KC_BSLS) // |
134 139
140#define KC_LT LSFT(KC_COMM) // <
141
142
143#define KC_GT LSFT(KC_DOT) // >
144
145
146#define KC_QUES LSFT(KC_SLSH) // ?
147#define KC_QUESTION KC_QUES
148
149
150#define KC_DQT LSFT(KC_QUOT) // "
151#define KC_DOUBLE_QUOTE KC_DQT
152
135#define KC_DELT KC_DELETE // Del key (four letter code) 153#define KC_DELT KC_DELETE // Del key (four letter code)
136 154
137// Alias for function layers than expand past FN31 155// Alias for function layers than expand past FN31
diff --git a/quantum/keymap_midi.h b/quantum/keymap_midi.h
index 795f26380..3a2bf3aff 100644
--- a/quantum/keymap_midi.h
+++ b/quantum/keymap_midi.h
@@ -25,11 +25,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
25 25
26#define CHNL(note, channel) (note + (channel << 8)) 26#define CHNL(note, channel) (note + (channel << 8))
27 27
28#define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \ 28#define SCALE (int8_t []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \
29 0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \ 29 0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \
30 0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \ 30 0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \
31 0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \ 31 0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \
32 0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), } 32 0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), }
33 33
34#define N_CN1 (0x600C + (12 * -1) + 0 ) 34#define N_CN1 (0x600C + (12 * -1) + 0 )
35#define N_CN1S (0x600C + (12 * -1) + 1 ) 35#define N_CN1S (0x600C + (12 * -1) + 1 )
diff --git a/quantum/quantum.mk b/quantum/quantum.mk
index ff34c463a..5f4c2f045 100644
--- a/quantum/quantum.mk
+++ b/quantum/quantum.mk
@@ -28,9 +28,9 @@ ifeq ($(strip $(MIDI_ENABLE)), yes)
28endif 28endif
29 29
30ifeq ($(strip $(AUDIO_ENABLE)), yes) 30ifeq ($(strip $(AUDIO_ENABLE)), yes)
31 SRC += $(QUANTUM_DIR)/audio/audio.c 31 SRC += $(QUANTUM_DIR)/audio/audio.c
32 SRC += $(QUANTUM_DIR)/audio/voices.c 32 SRC += $(QUANTUM_DIR)/audio/voices.c
33 SRC += $(QUANTUM_DIR)/audio/luts.c 33 SRC += $(QUANTUM_DIR)/audio/luts.c
34endif 34endif
35 35
36ifeq ($(strip $(UNICODE_ENABLE)), yes) 36ifeq ($(strip $(UNICODE_ENABLE)), yes)
diff --git a/tmk_core/common/backlight.c b/tmk_core/common/backlight.c
index 2f6fc1cd6..c9e8fd3fd 100644
--- a/tmk_core/common/backlight.c
+++ b/tmk_core/common/backlight.c
@@ -83,3 +83,8 @@ void backlight_level(uint8_t level)
83 eeconfig_update_backlight(backlight_config.raw); 83 eeconfig_update_backlight(backlight_config.raw);
84 backlight_set(backlight_config.level); 84 backlight_set(backlight_config.level);
85} 85}
86
87uint8_t get_backlight_level(void)
88{
89 return backlight_config.level;
90} \ No newline at end of file
diff --git a/tmk_core/common/backlight.h b/tmk_core/common/backlight.h
index 525ec8bbe..f57309267 100644
--- a/tmk_core/common/backlight.h
+++ b/tmk_core/common/backlight.h
@@ -36,5 +36,6 @@ void backlight_toggle(void);
36void backlight_step(void); 36void backlight_step(void);
37void backlight_set(uint8_t level); 37void backlight_set(uint8_t level);
38void backlight_level(uint8_t level); 38void backlight_level(uint8_t level);
39uint8_t get_backlight_level(void);
39 40
40#endif 41#endif
diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c
index f06abaf7f..9edcc42a0 100644
--- a/tmk_core/common/command.c
+++ b/tmk_core/common/command.c
@@ -357,9 +357,11 @@ static bool command_common(uint8_t code)
357 clear_keyboard(); // clear to prevent stuck keys 357 clear_keyboard(); // clear to prevent stuck keys
358 print("\n\nJumping to bootloader... "); 358 print("\n\nJumping to bootloader... ");
359 #ifdef AUDIO_ENABLE 359 #ifdef AUDIO_ENABLE
360 stop_all_notes();
360 play_goodbye_tone(); 361 play_goodbye_tone();
362 #else
363 _delay_ms(1000);
361 #endif 364 #endif
362 _delay_ms(1000);
363 bootloader_jump(); // not return 365 bootloader_jump(); // not return
364 break; 366 break;
365 367
diff --git a/tmk_core/common/nodebug.h b/tmk_core/common/nodebug.h
index 93309ada4..5e18656e5 100644
--- a/tmk_core/common/nodebug.h
+++ b/tmk_core/common/nodebug.h
@@ -16,10 +16,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/ 16*/
17 17
18#ifndef NODEBUG_H 18#ifndef NODEBUG_H
19#define NODEBUG_H 1 19#define NODEBUG_H
20 20
21#define NO_DEBUG 21#ifndef NO_DEBUG
22#include "debug.h" 22 #define NO_DEBUG
23#undef NO_DEBUG 23 #include "debug.h"
24 #undef NO_DEBUG
25#else
26 #include "debug.h"
27#endif
24 28
25#endif 29#endif