diff options
Diffstat (limited to 'quantum')
87 files changed, 2164 insertions, 792 deletions
| diff --git a/quantum/analog.c b/quantum/analog.c index 49b84ee0e8..1ec38df75d 100644 --- a/quantum/analog.c +++ b/quantum/analog.c @@ -1,3 +1,19 @@ +/* Copyright 2015 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  // Simple analog to digitial conversion  #include <avr/io.h> diff --git a/quantum/analog.h b/quantum/analog.h index 9b95a93bef..8d93de7dc2 100644 --- a/quantum/analog.h +++ b/quantum/analog.h @@ -1,3 +1,19 @@ +/* Copyright 2015 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef _analog_h_included__  #define _analog_h_included__ diff --git a/quantum/api.c b/quantum/api.c index 6a7c0a4332..52dfe23e17 100644 --- a/quantum/api.c +++ b/quantum/api.c @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include "api.h"  #include "quantum.h" @@ -176,4 +192,4 @@ void process_api(uint16_t length, uint8_t * data) {          // #endif      } -}
\ No newline at end of file +} diff --git a/quantum/api.h b/quantum/api.h index 00dcdb8954..efc0ddca12 100644 --- a/quantum/api.h +++ b/quantum/api.h @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef _API_H_  #define _API_H_ @@ -56,4 +72,4 @@ bool process_api_keyboard(uint8_t length, uint8_t * data);  __attribute__ ((weak))  bool process_api_user(uint8_t length, uint8_t * data); -#endif
\ No newline at end of file +#endif diff --git a/quantum/api/api_sysex.c b/quantum/api/api_sysex.c index 868f854b92..6a2ee90124 100644 --- a/quantum/api/api_sysex.c +++ b/quantum/api/api_sysex.c @@ -1,3 +1,18 @@ +/* Copyright 2016 Jack Humbert, Fred Sundvik + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #include "api_sysex.h"  #include "sysex_tools.h"  #include "print.h" diff --git a/quantum/api/api_sysex.h b/quantum/api/api_sysex.h index b947b60e54..a23f00f572 100644 --- a/quantum/api/api_sysex.h +++ b/quantum/api/api_sysex.h @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef _API_SYSEX_H_  #define _API_SYSEX_H_ @@ -7,4 +23,4 @@ void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes,  #define SEND_BYTES(mt, dt, b, l) send_bytes_sysex(mt, dt, b, l) -#endif
\ No newline at end of file +#endif diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c index 2a315fd168..597073611a 100644 --- a/quantum/audio/audio.c +++ b/quantum/audio/audio.c @@ -1,3 +1,18 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #include <stdio.h>  #include <string.h>  //#include <math.h> @@ -89,15 +104,15 @@ void audio_init()      }      audio_config.raw = eeconfig_read_audio(); -	// Set port PC6 (OC3A and /OC4A) as output +    // Set port PC6 (OC3A and /OC4A) as output      DDRC |= _BV(PORTC6);      DISABLE_AUDIO_COUNTER_3_ISR; -	// TCCR3A / TCCR3B: Timer/Counter #3 Control Registers -	// Compare Output Mode (COM3An) = 0b00 = Normal port operation, OC3A disconnected from PC6 -	// Waveform Generation Mode (WGM3n) = 0b1110 = Fast PWM Mode 14 (Period = ICR3, Duty Cycle = OCR3A) -	// Clock Select (CS3n) = 0b010 = Clock / 8 +    // TCCR3A / TCCR3B: Timer/Counter #3 Control Registers +    // Compare Output Mode (COM3An) = 0b00 = Normal port operation, OC3A disconnected from PC6 +    // Waveform Generation Mode (WGM3n) = 0b1110 = Fast PWM Mode 14 (Period = ICR3, Duty Cycle = OCR3A) +    // Clock Select (CS3n) = 0b010 = Clock / 8      TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30);      TCCR3B = (1 << WGM33)  | (1 << WGM32)  | (0 << CS32)  | (1 << CS31) | (0 << CS30); @@ -106,6 +121,8 @@ void audio_init()  void stop_all_notes()  { +    dprintf("audio stop all notes"); +      if (!audio_initialized) {          audio_init();      } @@ -128,6 +145,8 @@ void stop_all_notes()  void stop_note(float freq)  { +    dprintf("audio stop note freq=%d", (int)freq); +      if (playing_note) {          if (!audio_initialized) {              audio_init(); @@ -183,159 +202,161 @@ float vibrato(float average_freq) {  ISR(TIMER3_COMPA_vect)  { -	float freq; - -	if (playing_note) { -		if (voices > 0) { -			if (polyphony_rate > 0) { -				if (voices > 1) { -					voice_place %= voices; -					if (place++ > (frequencies[voice_place] / polyphony_rate / CPU_PRESCALER)) { -						voice_place = (voice_place + 1) % voices; -						place = 0.0; -					} -				} - -				#ifdef VIBRATO_ENABLE -					if (vibrato_strength > 0) { -						freq = vibrato(frequencies[voice_place]); -					} else { -						freq = frequencies[voice_place]; -					} -				#else -					freq = frequencies[voice_place]; -				#endif -			} else { -				if (glissando) { -					if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440/frequencies[voices - 1]/12/2)) { -						frequency = frequency * pow(2, 440/frequency/12/2); -					} else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440/frequencies[voices - 1]/12/2)) { -						frequency = frequency * pow(2, -440/frequency/12/2); -					} else { -						frequency = frequencies[voices - 1]; -					} -				} else { -					frequency = frequencies[voices - 1]; -				}				 - -				#ifdef VIBRATO_ENABLE -					if (vibrato_strength > 0) { -						freq = vibrato(frequency); -					} else { -						freq = frequency; -					} -				#else -					freq = frequency; -				#endif -			} - -			if (envelope_index < 65535) { -				envelope_index++; -			} - -			freq = voice_envelope(freq); - -			if (freq < 30.517578125) { -				freq = 30.52; -			} - -			TIMER_3_PERIOD = (uint16_t)(((float)F_CPU) / (freq * CPU_PRESCALER)); -			TIMER_3_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); -		} -	} - -	if (playing_notes) { -		if (note_frequency > 0) { -			#ifdef VIBRATO_ENABLE -				if (vibrato_strength > 0) { -					freq = vibrato(note_frequency); -				} else { -					freq = note_frequency; -				} -			#else -					freq = note_frequency; -			#endif - -			if (envelope_index < 65535) { -				envelope_index++; -			} -			freq = voice_envelope(freq); - -			TIMER_3_PERIOD = (uint16_t)(((float)F_CPU) / (freq * CPU_PRESCALER)); -			TIMER_3_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); -		} else { -			TIMER_3_PERIOD = 0; -			TIMER_3_DUTY_CYCLE = 0; -		} - -		note_position++; -		bool end_of_note = false; -		if (TIMER_3_PERIOD > 0) { -			end_of_note = (note_position >= (note_length / TIMER_3_PERIOD * 0xFFFF)); -		} else { -			end_of_note = (note_position >= (note_length * 0x7FF)); -		} - -		if (end_of_note) { -			current_note++; -			if (current_note >= notes_count) { -				if (notes_repeat) { -					current_note = 0; -				} else { -					DISABLE_AUDIO_COUNTER_3_ISR; -					DISABLE_AUDIO_COUNTER_3_OUTPUT; -					playing_notes = false; -					return; -				} -			} -			if (!note_resting && (notes_rest > 0)) { -				note_resting = true; -				note_frequency = 0; -				note_length = notes_rest; -				current_note--; -			} else { -				note_resting = false; -				envelope_index = 0; -				note_frequency = (*notes_pointer)[current_note][0]; -				note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100); -			} - -			note_position = 0; -		} -	} - -	if (!audio_config.enable) { -		playing_notes = false; -		playing_note = false; -	} +    float freq; + +    if (playing_note) { +        if (voices > 0) { +            if (polyphony_rate > 0) { +                if (voices > 1) { +                    voice_place %= voices; +                    if (place++ > (frequencies[voice_place] / polyphony_rate / CPU_PRESCALER)) { +                        voice_place = (voice_place + 1) % voices; +                        place = 0.0; +                    } +                } + +                #ifdef VIBRATO_ENABLE +                    if (vibrato_strength > 0) { +                        freq = vibrato(frequencies[voice_place]); +                    } else { +                        freq = frequencies[voice_place]; +                    } +                #else +                    freq = frequencies[voice_place]; +                #endif +            } else { +                if (glissando) { +                    if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440/frequencies[voices - 1]/12/2)) { +                        frequency = frequency * pow(2, 440/frequency/12/2); +                    } else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440/frequencies[voices - 1]/12/2)) { +                        frequency = frequency * pow(2, -440/frequency/12/2); +                    } else { +                        frequency = frequencies[voices - 1]; +                    } +                } else { +                    frequency = frequencies[voices - 1]; +                } + +                #ifdef VIBRATO_ENABLE +                    if (vibrato_strength > 0) { +                        freq = vibrato(frequency); +                    } else { +                        freq = frequency; +                    } +                #else +                    freq = frequency; +                #endif +            } + +            if (envelope_index < 65535) { +                envelope_index++; +            } + +            freq = voice_envelope(freq); + +            if (freq < 30.517578125) { +                freq = 30.52; +            } + +            TIMER_3_PERIOD = (uint16_t)(((float)F_CPU) / (freq * CPU_PRESCALER)); +            TIMER_3_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); +        } +    } + +    if (playing_notes) { +        if (note_frequency > 0) { +            #ifdef VIBRATO_ENABLE +                if (vibrato_strength > 0) { +                    freq = vibrato(note_frequency); +                } else { +                    freq = note_frequency; +                } +            #else +                    freq = note_frequency; +            #endif + +            if (envelope_index < 65535) { +                envelope_index++; +            } +            freq = voice_envelope(freq); + +            TIMER_3_PERIOD = (uint16_t)(((float)F_CPU) / (freq * CPU_PRESCALER)); +            TIMER_3_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); +        } else { +            TIMER_3_PERIOD = 0; +            TIMER_3_DUTY_CYCLE = 0; +        } + +        note_position++; +        bool end_of_note = false; +        if (TIMER_3_PERIOD > 0) { +            end_of_note = (note_position >= (note_length / TIMER_3_PERIOD * 0xFFFF)); +        } else { +            end_of_note = (note_position >= (note_length * 0x7FF)); +        } + +        if (end_of_note) { +            current_note++; +            if (current_note >= notes_count) { +                if (notes_repeat) { +                    current_note = 0; +                } else { +                    DISABLE_AUDIO_COUNTER_3_ISR; +                    DISABLE_AUDIO_COUNTER_3_OUTPUT; +                    playing_notes = false; +                    return; +                } +            } +            if (!note_resting && (notes_rest > 0)) { +                note_resting = true; +                note_frequency = 0; +                note_length = notes_rest; +                current_note--; +            } else { +                note_resting = false; +                envelope_index = 0; +                note_frequency = (*notes_pointer)[current_note][0]; +                note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100); +            } + +            note_position = 0; +        } +    } + +    if (!audio_config.enable) { +        playing_notes = false; +        playing_note = false; +    }  }  void play_note(float freq, int vol) { +    dprintf("audio play note freq=%d vol=%d", (int)freq, vol); +      if (!audio_initialized) {          audio_init();      } -	if (audio_config.enable && voices < 8) { -	    DISABLE_AUDIO_COUNTER_3_ISR; +    if (audio_config.enable && voices < 8) { +        DISABLE_AUDIO_COUNTER_3_ISR; -	    // Cancel notes if notes are playing -	    if (playing_notes) -	        stop_all_notes(); +        // Cancel notes if notes are playing +        if (playing_notes) +            stop_all_notes(); -	    playing_note = true; +        playing_note = true; -	    envelope_index = 0; +        envelope_index = 0; -	    if (freq > 0) { -	        frequencies[voices] = freq; -	        volumes[voices] = vol; -	        voices++; -	    } +        if (freq > 0) { +            frequencies[voices] = freq; +            volumes[voices] = vol; +            voices++; +        }          ENABLE_AUDIO_COUNTER_3_ISR;          ENABLE_AUDIO_COUNTER_3_OUTPUT; -	} +    }  } @@ -346,37 +367,37 @@ void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest)          audio_init();      } -	if (audio_config.enable) { +    if (audio_config.enable) { -	    DISABLE_AUDIO_COUNTER_3_ISR; +        DISABLE_AUDIO_COUNTER_3_ISR; -		// Cancel note if a note is playing -	    if (playing_note) -	        stop_all_notes(); +        // Cancel note if a note is playing +        if (playing_note) +            stop_all_notes(); -	    playing_notes = true; +        playing_notes = true; -	    notes_pointer = np; -	    notes_count = n_count; -	    notes_repeat = n_repeat; -	    notes_rest = n_rest; +        notes_pointer = np; +        notes_count = n_count; +        notes_repeat = n_repeat; +        notes_rest = n_rest; -	    place = 0; -	    current_note = 0; +        place = 0; +        current_note = 0;          note_frequency = (*notes_pointer)[current_note][0];          note_length = ((*notes_pointer)[current_note][1] / 4) * (((float)note_tempo) / 100); -	    note_position = 0; +        note_position = 0;          ENABLE_AUDIO_COUNTER_3_ISR;          ENABLE_AUDIO_COUNTER_3_OUTPUT; -	} +    }  }  bool is_playing_notes(void) { -	return playing_notes; +    return playing_notes;  }  bool is_audio_on(void) { diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h index 47f326ea0a..27fdc2ab63 100644 --- a/quantum/audio/audio.h +++ b/quantum/audio/audio.h @@ -1,3 +1,18 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef AUDIO_H  #define AUDIO_H @@ -88,4 +103,4 @@ void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest)  bool is_playing_notes(void); -#endif
\ No newline at end of file +#endif diff --git a/quantum/audio/audio_pwm.c b/quantum/audio/audio_pwm.c index f820eec1be..ded86edeea 100644 --- a/quantum/audio/audio_pwm.c +++ b/quantum/audio/audio_pwm.c @@ -1,3 +1,18 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #include <stdio.h>  #include <string.h>  //#include <math.h> diff --git a/quantum/audio/luts.c b/quantum/audio/luts.c index 9f3de9a05c..57f2d5924c 100644 --- a/quantum/audio/luts.c +++ b/quantum/audio/luts.c @@ -1,3 +1,19 @@ +/* Copyright 2016 IBNobody + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include <avr/io.h>  #include <avr/interrupt.h>  #include <avr/pgmspace.h> diff --git a/quantum/audio/luts.h b/quantum/audio/luts.h index 7df3078a7f..155e34e88d 100644 --- a/quantum/audio/luts.h +++ b/quantum/audio/luts.h @@ -1,3 +1,19 @@ +/* Copyright 2016 IBNobody + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include <avr/io.h>  #include <avr/interrupt.h>  #include <avr/pgmspace.h> @@ -12,4 +28,4 @@  extern const float vibrato_lut[VIBRATO_LUT_LENGTH];  extern const uint16_t frequency_lut[FREQUENCY_LUT_LENGTH]; -#endif /* LUTS_H */
\ No newline at end of file +#endif /* LUTS_H */ diff --git a/quantum/audio/musical_notes.h b/quantum/audio/musical_notes.h index b08d16a6fa..a3aaa2f199 100644 --- a/quantum/audio/musical_notes.h +++ b/quantum/audio/musical_notes.h @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef MUSICAL_NOTES_H  #define MUSICAL_NOTES_H @@ -214,4 +230,4 @@  #define NOTE_BF8 NOTE_AS8 -#endif
\ No newline at end of file +#endif diff --git a/quantum/audio/song_list.h b/quantum/audio/song_list.h index 8022ca6729..db2d1a94cd 100644 --- a/quantum/audio/song_list.h +++ b/quantum/audio/song_list.h @@ -1,8 +1,27 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #include "musical_notes.h"  #ifndef SONG_LIST_H  #define SONG_LIST_H +#define COIN_SOUND \ +    E__NOTE(_A5  ),\ +    HD_NOTE(_E6  ), +  #define ODE_TO_JOY                                          \      Q__NOTE(_E4), Q__NOTE(_E4), Q__NOTE(_F4), Q__NOTE(_G4), \      Q__NOTE(_G4), Q__NOTE(_F4), Q__NOTE(_E4), Q__NOTE(_D4), \ @@ -122,4 +141,39 @@      E__NOTE(_E5),          \      E__NOTE(_D5), +#define UNICODE_WINDOWS \ +    E__NOTE(_B5),       \ +    S__NOTE(_E6), + +#define UNICODE_LINUX \ +    E__NOTE(_E6),     \ +    S__NOTE(_B5), + +#define COIN_SOUND \ +    E__NOTE(_A5  ),      \ +    HD_NOTE(_E6  ), + +#define ONE_UP_SOUND \ +    Q__NOTE(_E6  ),  \ +    Q__NOTE(_G6  ),  \ +    Q__NOTE(_E7  ),  \ +    Q__NOTE(_C7  ),  \ +    Q__NOTE(_D7  ),  \ +    Q__NOTE(_G7  ), + +#define SONIC_RING \ +    E__NOTE(_E6),  \ +    E__NOTE(_G6),  \ +    HD_NOTE(_C7), + +#define ZELDA_PUZZLE \ +    Q__NOTE(_G5),     \ +    Q__NOTE(_FS5),    \ +    Q__NOTE(_DS5),     \ +    Q__NOTE(_A4),    \ +    Q__NOTE(_GS4),     \ +    Q__NOTE(_E5),     \ +    Q__NOTE(_GS5),     \ +    HD_NOTE(_C6), +  #endif diff --git a/quantum/audio/voices.c b/quantum/audio/voices.c index c2edb75f01..54ebd423b1 100644 --- a/quantum/audio/voices.c +++ b/quantum/audio/voices.c @@ -1,3 +1,18 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #include "voices.h"  #include "audio.h"  #include "stdlib.h" diff --git a/quantum/audio/voices.h b/quantum/audio/voices.h index 52f7e006d6..9403a6b5e7 100644 --- a/quantum/audio/voices.h +++ b/quantum/audio/voices.h @@ -1,3 +1,18 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #include <stdint.h>  #include <stdbool.h>  #include <avr/io.h> @@ -32,4 +47,4 @@ void set_voice(voice_type v);  void voice_iterate(void);  void voice_deiterate(void); -#endif
\ No newline at end of file +#endif diff --git a/quantum/audio/wave.h b/quantum/audio/wave.h index 6ebc348519..f15615dd1b 100644 --- a/quantum/audio/wave.h +++ b/quantum/audio/wave.h @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include <avr/io.h>  #include <avr/interrupt.h>  #include <avr/pgmspace.h> @@ -262,4 +278,4 @@ const uint8_t sinewave[] PROGMEM= //2048 values  0x76,0x77,0x77,0x77,0x78,0x78,0x78,0x79,  0x79,0x7a,0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,  0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f -};
\ No newline at end of file +}; diff --git a/quantum/config_common.h b/quantum/config_common.h index 28f68b9c70..c88e02d918 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h @@ -1,3 +1,19 @@ +/* Copyright 2015-2017 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef CONFIG_DEFINITIONS_H  #define CONFIG_DEFINITIONS_H diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index e6dbc5b9c1..64093f293e 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  /* Author: Wojciech Siewierski < wojciech dot siewierski at onet dot pl > */  #ifndef DYNAMIC_MACROS_H  #define DYNAMIC_MACROS_H diff --git a/quantum/keycode_config.c b/quantum/keycode_config.c index 6d90781a17..4f7bc525ec 100644 --- a/quantum/keycode_config.c +++ b/quantum/keycode_config.c @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include "keycode_config.h"  extern keymap_config_t keymap_config; @@ -71,4 +87,4 @@ uint16_t keycode_config(uint16_t keycode) {          default:              return keycode;      } -}
\ No newline at end of file +} diff --git a/quantum/keycode_config.h b/quantum/keycode_config.h index c15b0d32f8..293fefecfb 100644 --- a/quantum/keycode_config.h +++ b/quantum/keycode_config.h @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include "eeconfig.h"  #include "keycode.h" diff --git a/quantum/keymap.h b/quantum/keymap.h index c000d2da8e..5d64be19c8 100644 --- a/quantum/keymap.h +++ b/quantum/keymap.h @@ -1,5 +1,5 @@  /* -Copyright 2012,2013 Jun Wako <[email protected]> +Copyright 2012-2016 Jun Wako <[email protected]>  This program is free software: you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 002eabd85e..6cf4f031ff 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -1,5 +1,5 @@  /* -Copyright 2012,2013 Jun Wako <[email protected]> +Copyright 2012-2017 Jun Wako <[email protected]>  This program is free software: you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by diff --git a/quantum/keymap_extras/keymap_bepo.h b/quantum/keymap_extras/keymap_bepo.h index e5ef39552a..013559e96d 100644 --- a/quantum/keymap_extras/keymap_bepo.h +++ b/quantum/keymap_extras/keymap_bepo.h @@ -1,3 +1,18 @@ +/* Copyright 2016 Didier Loiseau + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  /* Keymap macros for the French BÉPO layout - http://bepo.fr */  #ifndef KEYMAP_BEPO_H  #define KEYMAP_BEPO_H diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h index 0bc20c7b9c..1d45bee32e 100644 --- a/quantum/keymap_extras/keymap_canadian_multilingual.h +++ b/quantum/keymap_extras/keymap_canadian_multilingual.h @@ -1,3 +1,18 @@ +/* Copyright 2016 Didier Loiseau + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef KEYMAP_CANADIAN_MULTILINGUAG_H  #define KEYMAP_CANADIAN_MULTILINGUAG_H diff --git a/quantum/keymap_extras/keymap_colemak.h b/quantum/keymap_extras/keymap_colemak.h index b8d6157484..2d3f9c06a5 100644 --- a/quantum/keymap_extras/keymap_colemak.h +++ b/quantum/keymap_extras/keymap_colemak.h @@ -1,3 +1,18 @@ +/* Copyright 2015-2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef KEYMAP_COLEMAK_H  #define KEYMAP_COLEMAK_H diff --git a/quantum/keymap_extras/keymap_dvorak.h b/quantum/keymap_extras/keymap_dvorak.h index a0feed850d..b1d5604baf 100644 --- a/quantum/keymap_extras/keymap_dvorak.h +++ b/quantum/keymap_extras/keymap_dvorak.h @@ -1,3 +1,18 @@ +/* Copyright 2015-2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef KEYMAP_DVORAK_H  #define KEYMAP_DVORAK_H diff --git a/quantum/keymap_extras/keymap_dvp.h b/quantum/keymap_extras/keymap_dvp.h index 83f49a52b5..50e2d1f461 100644 --- a/quantum/keymap_extras/keymap_dvp.h +++ b/quantum/keymap_extras/keymap_dvp.h @@ -1,3 +1,19 @@ +/* Copyright 2016 Artyom Mironov + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef KEYMAP_DVP_H  #define KEYMAP_DVP_H diff --git a/quantum/keymap_extras/keymap_fr_ch.h b/quantum/keymap_extras/keymap_fr_ch.h index 87d4bb24cf..c0ca832a6f 100644 --- a/quantum/keymap_extras/keymap_fr_ch.h +++ b/quantum/keymap_extras/keymap_fr_ch.h @@ -1,3 +1,18 @@ +/* Copyright 2016 Vincent Pochet + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef KEYMAP_FR_CH  #define KEYMAP_FR_CH diff --git a/quantum/keymap_extras/keymap_french.h b/quantum/keymap_extras/keymap_french.h index 401bbdf644..3308dc5f77 100644 --- a/quantum/keymap_extras/keymap_french.h +++ b/quantum/keymap_extras/keymap_french.h @@ -1,3 +1,18 @@ +/* Copyright 2015-2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef KEYMAP_FRENCH_H  #define KEYMAP_FRENCH_H diff --git a/quantum/keymap_extras/keymap_french_osx.h b/quantum/keymap_extras/keymap_french_osx.h index 004d73ee23..ecade3fe98 100644 --- a/quantum/keymap_extras/keymap_french_osx.h +++ b/quantum/keymap_extras/keymap_french_osx.h @@ -1,3 +1,18 @@ +/* Copyright 2016 Sébastien Pérochon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef KEYMAP_FRENCH_OSX_H  #define KEYMAP_FRENCH_OSX_H @@ -74,4 +89,4 @@  #define FR_PIPE	LSFT(LALT(KC_L))  #define FR_BSLS	LSFT(LALT(FR_COLN)) -#endif
\ No newline at end of file +#endif diff --git a/quantum/keymap_extras/keymap_german.h b/quantum/keymap_extras/keymap_german.h index 7e2e0ed44e..e007c26ef5 100644 --- a/quantum/keymap_extras/keymap_german.h +++ b/quantum/keymap_extras/keymap_german.h @@ -1,3 +1,19 @@ +/* Copyright 2015-2016 Matthias Schmidtt + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef KEYMAP_GERMAN  #define KEYMAP_GERMAN diff --git a/quantum/keymap_extras/keymap_german_ch.h b/quantum/keymap_extras/keymap_german_ch.h index b66d582a44..8332e00af3 100644 --- a/quantum/keymap_extras/keymap_german_ch.h +++ b/quantum/keymap_extras/keymap_german_ch.h @@ -1,3 +1,18 @@ +/* Copyright 2016 heartsekai + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef KEYMAP_SWISS_GERMAN  #define KEYMAP_SWISS_GERMAN diff --git a/quantum/keymap_extras/keymap_german_osx.h b/quantum/keymap_extras/keymap_german_osx.h index f63f066183..798bb75798 100644 --- a/quantum/keymap_extras/keymap_german_osx.h +++ b/quantum/keymap_extras/keymap_german_osx.h @@ -1,3 +1,18 @@ +/* Copyright 2016 Stephen Bösebeck + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef KEYMAP_GERMAN_OSX  #define KEYMAP_GERMAN_OSX diff --git a/quantum/keymap_extras/keymap_jp.h b/quantum/keymap_extras/keymap_jp.h index e81b5952e0..fb74bce8d4 100644 --- a/quantum/keymap_extras/keymap_jp.h +++ b/quantum/keymap_extras/keymap_jp.h @@ -1,4 +1,19 @@ -/* JP106-layout (Japanese Standard) +/* Copyright 2016 h-youhei + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + * + * JP106-layout (Japanese Standard)   *   * For more information, see   * http://www2d.biglobe.ne.jp/~msyk/keyboard/layout/usbkeycode.html diff --git a/quantum/keymap_extras/keymap_neo2.h b/quantum/keymap_extras/keymap_neo2.h index 80439af347..174f4a6eec 100644 --- a/quantum/keymap_extras/keymap_neo2.h +++ b/quantum/keymap_extras/keymap_neo2.h @@ -1,3 +1,18 @@ +/* Copyright 2016 Matthias Schmitt + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef KEYMAP_NEO2  #define KEYMAP_NEO2 diff --git a/quantum/keymap_extras/keymap_nordic.h b/quantum/keymap_extras/keymap_nordic.h index 9b0ef35ca9..6b34db5588 100644 --- a/quantum/keymap_extras/keymap_nordic.h +++ b/quantum/keymap_extras/keymap_nordic.h @@ -1,3 +1,18 @@ +/* Copyright 2015-2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef KEYMAP_NORDIC_H  #define KEYMAP_NORDIC_H diff --git a/quantum/keymap_extras/keymap_norwegian.h b/quantum/keymap_extras/keymap_norwegian.h index 5c4e8c4955..b7128973aa 100644 --- a/quantum/keymap_extras/keymap_norwegian.h +++ b/quantum/keymap_extras/keymap_norwegian.h @@ -1,3 +1,18 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef KEYMAP_NORWEGIAN_H  #define KEYMAP_NORWEGIAN_H diff --git a/quantum/keymap_extras/keymap_plover.h b/quantum/keymap_extras/keymap_plover.h index 9b88f7d84d..de6d8c53f3 100644 --- a/quantum/keymap_extras/keymap_plover.h +++ b/quantum/keymap_extras/keymap_plover.h @@ -1,3 +1,18 @@ +/* Copyright 2016 James Kay + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef KEYMAP_PLOVER_H  #define KEYMAP_PLOVER_H diff --git a/quantum/keymap_extras/keymap_russian.h b/quantum/keymap_extras/keymap_russian.h deleted file mode 100644 index 237e9abde3..0000000000 --- a/quantum/keymap_extras/keymap_russian.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef KEYMAP_RUSSIAN_H -#define KEYMAP_RUSSIAN_H - -#include "keymap.h" - -// Normal Chracters      // reg   SHIFT -#define RU_A     KC_F    // а and А -#define RU_BE    KC_COMM // б and Б -#define RU_VE    KC_D    // в and В -#define RU_GHE   KC_U    // г and Г -#define RU_DE    KC_L    // д and Д -#define RU_IE    KC_T    // е and Е -#define RU_IO    KC_GRV  // ё and Ё -#define RU_ZHE   KC_SCLN // ж and Ж -#define RU_ZE    KC_P    // з and З -#define RU_I     KC_B    // и and И -#define RU_SRT_I KC_Q    // й and Й -#define RU_KA    KC_R    // к and К -#define RU_EL    KC_K    // л and Л -#define RU_EM    KC_V    // м and М -#define RU_EN    KC_Y    // н and Н -#define RU_O     KC_J    // о and О -#define RU_PE    KC_G    // п and П -#define RU_ER    KC_H    // р and Р -#define RU_ES    KC_C    // с and С -#define RU_TE    KC_N    // т and Т -#define RU_U     KC_E    // у and У -#define RU_EF    KC_A    // ф and Ф -#define RU_HA    KC_LBRC // х and Х -#define RU_TSE   KC_W    // ц and Ц -#define RU_CHE   KC_X    // ч and Ч -#define RU_SHA   KC_I    // ш and Ш -#define RU_SHCHA KC_O    // щ and Щ -#define RU_HSIGN KC_RBRC // ъ and Ъ -#define RU_YERU  KC_S    // ы and Ы -#define RU_SSIGN KC_M    // ь and Ь -#define RU_E     KC_QUOT // э and Э -#define RU_YU    KC_DOT  // ю and Ю -#define RU_YA    KC_Z    // я and Я - -#define RU_1     KC_1    // 1 and ! -#define RU_2     KC_2    // 2 and " -#define RU_3     KC_3    // 3 and № -#define RU_4     KC_4    // 4 and ; -#define RU_5     KC_5    // 5 and % -#define RU_6     KC_6    // 6 and : -#define RU_7     KC_7    // 7 and ? -#define RU_8     KC_8    // 8 and * -#define RU_9     KC_9    // 9 and ( -#define RU_0     KC_0    // 0 and ) - -#define RU_MINS  KC_MINS // - and _ -#define RU_EQL   KC_EQL  // = and + -#define RU_BSLS  KC_BSLS // \ and / -#define RU_DOT   KC_SLSH // . and , - -// Shifted Chracters -#define RU_EXLM LSFT(RU_1) // ! -#define RU_DQUT LSFT(RU_2) // " -#define RU_NMRO LSFT(RU_3) // № -#define RU_SCLN LSFT(RU_4) // ; -#define RU_PERC LSFT(RU_5) // % -#define RU_COLN LSFT(RU_6) // : -#define RU_QUES LSFT(RU_7) // ? -#define RU_ASTR LSFT(RU_8) // * -#define RU_LPRN LSFT(RU_9) // ( -#define RU_RPRN LSFT(RU_0) // ) - -#define RU_UNDR LSFT(RU_MINS) // _ -#define RU_PLUS LSFT(RU_EQL)  // + -#define RU_SLSH LSFT(RU_BSLS) // / -#define RU_COMM LSFT(RU_DOT)  // , - -// Alt Gr-ed characters -#define RU_RUBL RALT(RU_8) // ₽ - -#endif diff --git a/quantum/keymap_extras/keymap_spanish.h b/quantum/keymap_extras/keymap_spanish.h index 4ba568af23..3a5787e9c4 100644 --- a/quantum/keymap_extras/keymap_spanish.h +++ b/quantum/keymap_extras/keymap_spanish.h @@ -1,3 +1,18 @@ +/* Copyright 2015-2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef KEYMAP_SPANISH_H  #define KEYMAP_SPANISH_H diff --git a/quantum/keymap_extras/keymap_uk.h b/quantum/keymap_extras/keymap_uk.h index 00c87afc3e..9d02efe04a 100644 --- a/quantum/keymap_extras/keymap_uk.h +++ b/quantum/keymap_extras/keymap_uk.h @@ -1,3 +1,18 @@ +/* Copyright 2015-2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef KEYMAP_UK_H  #define KEYMAP_UK_H diff --git a/quantum/keymap_extras/keymap_unicode_cyrillic.h b/quantum/keymap_extras/keymap_unicode_cyrillic.h deleted file mode 100644 index a40626d911..0000000000 --- a/quantum/keymap_extras/keymap_unicode_cyrillic.h +++ /dev/null @@ -1,163 +0,0 @@ -#ifndef KEYMAP_CYRILLIC_H -#define KEYMAP_CYRILLIC_H - -#include "keymap.h" - -/* - * This is based off of - * https://en.wikipedia.org/wiki/Cyrillic_script - * - * Unicode is iffy, a software implementation is preferred - */ - -// Capital                   Char russian/ukrainian/bulgarian -#define CY_A     UC(0x0410) // А  rus ukr bul -#define CY_BE    UC(0x0411) // Б  rus ukr bul -#define CY_VE    UC(0x0412) // В  rus ukr bul -#define CY_GHE   UC(0x0413) // Г  rus ukr bul -#define CY_GHEUP UC(0x0490) // Ґ      ukr -#define CY_DE    UC(0x0414) // Д  rus ukr bul -#define CY_DJE   UC(0x0402) // Ђ -#define CY_GJE   UC(0x0403) // Ѓ -#define CY_IE    UC(0x0415) // Е  rus ukr bul -#define CY_IO    UC(0x0401) // Ё  rus -#define CY_UIE   UC(0x0404) // Є      ukr -#define CY_ZHE   UC(0x0416) // Ж  rus ukr bul -#define CY_ZE    UC(0x0417) // З  rus ukr bul -#define CY_DZE   UC(0x0405) // Ѕ -#define CY_I     UC(0x0418) // И  rus ukr bul -#define CY_B_U_I UC(0x0406) // І      ukr -#define CY_YI    UC(0x0407) // Ї      ukr -#define CY_SRT_I UC(0x0419) // Й  rus ukr bul -#define CY_JE    UC(0x0408) // Ј -#define CY_KA    UC(0x041a) // К  rus ukr bul -#define CY_EL    UC(0x041b) // Л  rus ukr bul -#define CY_LJE   UC(0x0409) // Љ -#define CY_EM    UC(0x041c) // М  rus ukr bul -#define CY_EN    UC(0x041d) // Н  rus ukr bul -#define CY_NJE   UC(0x040a) // Њ -#define CY_O     UC(0x041e) // О  rus ukr bul -#define CY_PE    UC(0x041f) // П  rus ukr bul -#define CY_ER    UC(0x0420) // Р  rus ukr bul -#define CY_ES    UC(0x0421) // С  rus ukr bul -#define CY_TE    UC(0x0422) // Т  rus ukr bul -#define CY_TSHE  UC(0x040b) // Ћ -#define CY_KJE   UC(0x040c) // Ќ -#define CY_U     UC(0x0423) // У  rus ukr bul -#define CY_SRT_U UC(0x040e) // Ў -#define CY_EF    UC(0x0424) // Ф  rus ukr bul -#define CY_HA    UC(0x0425) // Х  rus     bul -#define CY_TSE   UC(0x0426) // Ц  rus ukr bul -#define CY_CHE   UC(0x0427) // Ч  rus ukr bul -#define CY_DZHE  UC(0x040f) // Џ -#define CY_SHA   UC(0x0428) // Ш  rus ukr bul -#define CY_SHCHA UC(0x0429) // Щ  rus ukr bul -#define CY_HSIGN UC(0x042a) // Ъ  rus     bul -#define CY_YERU  UC(0x042b) // Ы  rus -#define CY_SSIGN UC(0x042c) // Ь  rus ukr bul -#define CY_E     UC(0x042d) // Э  rus -#define CY_YU    UC(0x042e) // Ю  rus ukr bul -#define CY_YA    UC(0x042f) // Я  rus ukr bul -// Important Cyrillic non-Slavic letters -#define CY_PALOCHKA UC(0x04c0) // Ӏ -#define CY_SCHWA UC(0x04d8) // Ә -#define CY_GHE_S UC(0x0492) // Ғ -#define CY_ZE_D  UC(0x0498) // Ҙ -#define CY_ES_D  UC(0x04aa) // Ҫ -#define CY_BR_KA UC(0x04a0) // Ҡ -#define CY_ZHE_D UC(0x0496) // Җ -#define CY_KA_D  UC(0x049a) // Қ -#define CY_EN_D  UC(0x04a2) // Ң -#define CY_ENGHE UC(0x04a4) // Ҥ -#define CY_BRD_O UC(0x04e8) // Ө -#define CY_STR_U UC(0x04ae) // Ү -#define CY_S_U_S UC(0x04b0) // Ұ -#define CY_SHHA  UC(0x04ba) // Һ -#define CY_HA_D  UC(0x04b2) // Ҳ - - -// Small -#define CY_a     UC(0x0430) // a  rus ukr bul -#define CY_be    UC(0x0431) // б  rus ukr bul -#define CY_ve    UC(0x0432) // в  rus ukr bul -#define CY_ghe   UC(0x0433) // г  rus ukr bul -#define CY_gheup UC(0x0491) // ґ      ukr -#define CY_de    UC(0x0434) // д  rus ukr bul -#define CY_dje   UC(0x0452) // ђ -#define CY_gje   UC(0x0453) // ѓ -#define CY_ie    UC(0x0435) // е  rus ukr bul -#define CY_io    UC(0x0451) // ё  rus -#define CY_uie   UC(0x0454) // є      ukr -#define CY_zhe   UC(0x0436) // ж  rus ukr bul -#define CY_ze    UC(0x0437) // з  rus ukr bul -#define CY_dze   UC(0x0455) // ѕ -#define CY_i     UC(0x0438) // и  rus ukr bul -#define CY_b_u_i UC(0x0456) // і      ukr -#define CY_yi    UC(0x0457) // ї      ukr -#define CY_srt_i UC(0x0439) // й  rus ukr bul -#define CY_je    UC(0x0458) // ј -#define CY_ka    UC(0x043a) // к  rus ukr bul -#define CY_el    UC(0x043b) // л  rus ukr bul -#define CY_lje   UC(0x0459) // љ -#define CY_em    UC(0x043c) // м  rus ukr bul -#define CY_en    UC(0x043d) // н  rus ukr bul -#define CY_nje   UC(0x045a) // њ -#define CY_o     UC(0x043e) // о  rus ukr bul -#define CY_pe    UC(0x043f) // п  rus ukr bul -#define CY_er    UC(0x0440) // р  rus ukr bul -#define CY_es    UC(0x0441) // с  rus ukr bul -#define CY_te    UC(0x0442) // т  rus ukr bul -#define CY_tshe  UC(0x045b) // ћ -#define CY_kje   UC(0x045c) // ќ -#define CY_u     UC(0x0443) // у  rus ukr bul -#define CY_srt_u UC(0x045e) // ў -#define CY_ef    UC(0x0444) // ф  rus ukr bul -#define CY_ha    UC(0x0445) // х  rus ukr bul -#define CY_tse   UC(0x0446) // ц  rus ukr bul -#define CY_che   UC(0x0447) // ч  rus ukr bul -#define CY_dzhe  UC(0x045f) // џ -#define CY_sha   UC(0x0448) // ш  rus ukr bul -#define CY_shcha UC(0x0449) // щ  rus ukr bul -#define CY_hsign UC(0x044a) // ъ  rus     bul -#define CY_yeru  UC(0x044b) // ы  rus -#define CY_ssign UC(0x044c) // ь  rus ukr bul -#define CY_e     UC(0x044d) // э  rus -#define CY_yu    UC(0x044e) // ю  rus ukr bul -#define CY_ya    UC(0x044f) // я  rus ukr bul -// Important Cyrillic non-Slavic letters -#define CY_palochka UC(0x04cf) // ӏ -#define CY_schwa UC(0x04d9) // ә -#define CY_ghe_s UC(0x0493) // ғ -#define CY_ze_d  UC(0x0499) // ҙ -#define CY_es_d  UC(0x04ab) // ҫ -#define CY_br_ka UC(0x04a1) // ҡ -#define CY_zhe_d UC(0x0497) // җ -#define CY_ka_d  UC(0x049b) // қ -#define CY_en_d  UC(0x04a3) // ң -#define CY_enghe UC(0x04a5) // ҥ -#define CY_brd_o UC(0x04e9) // ө -#define CY_str_u UC(0x04af) // ү -#define CY_s_u_s UC(0x04b1) // ұ -#define CY_shha  UC(0x04bb) // һ -#define CY_ha_d  UC(0x04b3) // ҳ - - -// Extra -#define CY_slr_ve UC(0x1c80) // ᲀ CYRILLIC SMALL LETTER ROUNDED VE -#define CY_ll_de  UC(0x1c81) // ᲁ CYRILLIC SMALL LETTER LONG-LEGGED DE -#define CY_ZEMLYA UC(0xa640) // Ꙁ CYRILLIC CAPITAL LETTER ZEMLYA -#define CY_zemlya UC(0xa641) // ꙁ CYRILLIC SMALL LETTER ZEMLYA -#define CY_RV_DZE UC(0xa644) // Ꙅ CYRILLIC CAPITAL LETTER REVERSED DZE -#define CY_rv_DZE UC(0xa645) // ꙅ CYRILLIC SMALL LETTER REVERSED DZE -#define CY_slw_es UC(0x1c83) // ᲃ CYRILLIC SMALL LETTER WIDE ES -#define CY_st_te  UC(0x1c84) // ᲄ CYRILLIC SMALL LETTER TALL TE -#define CY_3l_te  UC(0x1c85) // ᲅ CYRILLIC SMALL LETTER THREE-LEGGED TE -#define CY_thsign UC(0x1c86) // ᲆ CYRILLIC SMALL LETTER TALL HARD SIGN -#define CY_YERUBY UC(0xa650) // Ꙑ CYRILLIC CAPITAL LETTER YERU WITH BACK YER -#define CY_yeruby UC(0xa651) // ꙑ CYRILLIC SMALL LETTER YERU WITH BACK YER -#define CY_RUBL   UC(0x20bd) // ₽ -#define CY_NMRO   UC(0x2116) // № - -// The letters Zje and Sje are made for other letters and accent marks - -#endif diff --git a/quantum/light_ws2812.c b/quantum/light_ws2812.c index 55bdd9cd81..2506e3d8ec 100755 --- a/quantum/light_ws2812.c +++ b/quantum/light_ws2812.c @@ -7,7 +7,18 @@  * Jan 18th, 2014  v2.0b Initial Version  * Nov 29th, 2015  v2.3  Added SK6812RGBW support  * -* License: GNU GPL v2 (see License.txt) +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program.  If not, see <http://www.gnu.org/licenses/>.  */  #include "light_ws2812.h" diff --git a/quantum/light_ws2812.h b/quantum/light_ws2812.h index 2f78c20fc1..60924a0fb6 100755 --- a/quantum/light_ws2812.h +++ b/quantum/light_ws2812.h @@ -6,8 +6,18 @@   *   * Please do not change this file! All configuration is handled in "ws2812_config.h"   * - * License: GNU GPL v2 (see License.txt) - + + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>.   */  #ifndef LIGHT_WS2812_H_ diff --git a/quantum/matrix.c b/quantum/matrix.c index ac523482ad..5337e2626b 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -1,6 +1,5 @@  /* -Copyright 2012 Jun Wako -Copyright 2014 Jack Humbert +Copyright 2012-2017 Jun Wako, Jack Humbert  This program is free software: you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by diff --git a/quantum/pincontrol.h b/quantum/pincontrol.h index 36ce29ef22..d77977ebe2 100644 --- a/quantum/pincontrol.h +++ b/quantum/pincontrol.h @@ -1,3 +1,18 @@ +/* Copyright 2016 Wez Furlong + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #pragma once  // Some helpers for controlling gpio pins  #include <avr/io.h> diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c new file mode 100644 index 0000000000..0b6380ed39 --- /dev/null +++ b/quantum/process_keycode/process_audio.c @@ -0,0 +1,62 @@ +#include "audio.h" +#include "process_audio.h" + +static float compute_freq_for_midi_note(uint8_t note) +{ +    // https://en.wikipedia.org/wiki/MIDI_tuning_standard +    return pow(2.0, (note - 69) / 12.0) * 440.0f; +} + +bool process_audio(uint16_t keycode, keyrecord_t *record) { + +    if (keycode == AU_ON && record->event.pressed) { +      audio_on(); +      return false; +    } + +    if (keycode == AU_OFF && record->event.pressed) { +      audio_off(); +      return false; +    } + +    if (keycode == AU_TOG && record->event.pressed) { +        if (is_audio_on()) +        { +            audio_off(); +        } +        else +        { +            audio_on(); +        } +        return false; +    } + +    if (keycode == MUV_IN && record->event.pressed) { +        voice_iterate(); +        music_scale_user(); +        return false; +    } + +    if (keycode == MUV_DE && record->event.pressed) { +        voice_deiterate(); +        music_scale_user(); +        return false; +    } + +    return true; +} + +void process_audio_noteon(uint8_t note) { +    play_note(compute_freq_for_midi_note(note), 0xF); +} + +void process_audio_noteoff(uint8_t note) { +    stop_note(compute_freq_for_midi_note(note)); +} + +void process_audio_all_notes_off(void) { +    stop_all_notes(); +} + +__attribute__ ((weak)) +void audio_on_user() {}
\ No newline at end of file diff --git a/quantum/process_keycode/process_audio.h b/quantum/process_keycode/process_audio.h new file mode 100644 index 0000000000..7ac15b7330 --- /dev/null +++ b/quantum/process_keycode/process_audio.h @@ -0,0 +1,11 @@ +#ifndef PROCESS_AUDIO_H +#define PROCESS_AUDIO_H + +bool process_audio(uint16_t keycode, keyrecord_t *record); +void process_audio_noteon(uint8_t note); +void process_audio_noteoff(uint8_t note); +void process_audio_all_notes_off(void); + +void audio_on_user(void); + +#endif
\ No newline at end of file diff --git a/quantum/process_keycode/process_chording.c b/quantum/process_keycode/process_chording.c index d7814629f3..6c6ebe300a 100644 --- a/quantum/process_keycode/process_chording.c +++ b/quantum/process_keycode/process_chording.c @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include "process_chording.h"  bool keys_chord(uint8_t keys[]) { @@ -57,4 +73,4 @@ bool process_chording(uint16_t keycode, keyrecord_t *record) {      }    }    return true; -}
\ No newline at end of file +} diff --git a/quantum/process_keycode/process_chording.h b/quantum/process_keycode/process_chording.h index 49c97db3bc..8c0f4862a8 100644 --- a/quantum/process_keycode/process_chording.h +++ b/quantum/process_keycode/process_chording.h @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef PROCESS_CHORDING_H  #define PROCESS_CHORDING_H @@ -13,4 +29,4 @@ uint8_t chord_key_down = 0;  bool process_chording(uint16_t keycode, keyrecord_t *record); -#endif
\ No newline at end of file +#endif diff --git a/quantum/process_keycode/process_combo.c b/quantum/process_keycode/process_combo.c index e2189ad98b..58d45add22 100644 --- a/quantum/process_keycode/process_combo.c +++ b/quantum/process_keycode/process_combo.c @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include "process_combo.h"  #include "print.h" diff --git a/quantum/process_keycode/process_combo.h b/quantum/process_keycode/process_combo.h index 847f2b7376..a5dbd788a4 100644 --- a/quantum/process_keycode/process_combo.h +++ b/quantum/process_keycode/process_combo.h @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef PROCESS_COMBO_H  #define PROCESS_COMBO_H diff --git a/quantum/process_keycode/process_leader.c b/quantum/process_keycode/process_leader.c index e53d221e75..473906d657 100644 --- a/quantum/process_keycode/process_leader.c +++ b/quantum/process_keycode/process_leader.c @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include "process_leader.h"  __attribute__ ((weak)) @@ -35,4 +51,4 @@ bool process_leader(uint16_t keycode, keyrecord_t *record) {      }    }    return true; -}
\ No newline at end of file +} diff --git a/quantum/process_keycode/process_leader.h b/quantum/process_keycode/process_leader.h index c83db8abbd..da7a3d2ef7 100644 --- a/quantum/process_keycode/process_leader.h +++ b/quantum/process_keycode/process_leader.h @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef PROCESS_LEADER_H  #define PROCESS_LEADER_H @@ -20,4 +36,4 @@ void leader_end(void);  #define LEADER_EXTERNS() extern bool leading; extern uint16_t leader_time; extern uint16_t leader_sequence[5]; extern uint8_t leader_sequence_size  #define LEADER_DICTIONARY() if (leading && timer_elapsed(leader_time) > LEADER_TIMEOUT) -#endif
\ No newline at end of file +#endif diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 577dad43ac..9184feaae8 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -1,68 +1,253 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #include "process_midi.h" -bool midi_activated = false; -uint8_t midi_starting_note = 0x0C; -int midi_offset = 7; - -bool process_midi(uint16_t keycode, keyrecord_t *record) { -    if (keycode == MI_ON && record->event.pressed) { -      midi_activated = true; -#ifdef AUDIO_ENABLE -      music_scale_user(); -#endif -      return false; -    } +#ifdef MIDI_ENABLE +#include "midi.h" + +#ifdef MIDI_BASIC + +void process_midi_basic_noteon(uint8_t note)  +{ +    midi_send_noteon(&midi_device, 0, note, 128); +} + +void process_midi_basic_noteoff(uint8_t note) +{ +    midi_send_noteoff(&midi_device, 0, note, 0); +} + +void process_midi_all_notes_off(void) +{ +    midi_send_cc(&midi_device, 0, 0x7B, 0); +} + +#endif // MIDI_BASIC + +#ifdef MIDI_ADVANCED + +#include "timer.h" + +static uint8_t tone_status[MIDI_TONE_COUNT]; + +static uint8_t midi_modulation; +static int8_t midi_modulation_step; +static uint16_t midi_modulation_timer; + +inline uint8_t compute_velocity(uint8_t setting) +{ +    return (setting + 1) * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN + 1)); +} -    if (keycode == MI_OFF && record->event.pressed) { -      midi_activated = false; -      midi_send_cc(&midi_device, 0, 0x7B, 0); -      return false; +void midi_init(void) +{ +    midi_config.octave = MI_OCT_2 - MIDI_OCTAVE_MIN; +    midi_config.transpose = 0; +    midi_config.velocity = (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN); +    midi_config.channel = 0; +    midi_config.modulation_interval = 8; + +    for (uint8_t i = 0; i < MIDI_TONE_COUNT; i++) +    { +        tone_status[i] = MIDI_INVALID_NOTE;      } -    if (midi_activated) { -      if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) { -          if (record->event.pressed) { -              midi_starting_note++; // Change key -              midi_send_cc(&midi_device, 0, 0x7B, 0); -          } -          return false; -      } -      if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) { -          if (record->event.pressed) { -              midi_starting_note--; // Change key -              midi_send_cc(&midi_device, 0, 0x7B, 0); -          } -          return false; -      } -      if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { -          midi_offset++; // Change scale -          midi_send_cc(&midi_device, 0, 0x7B, 0); -          return false; -      } -      if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { -          midi_offset--; // Change scale -          midi_send_cc(&midi_device, 0, 0x7B, 0); -          return false; -      } -      // basic -      // uint8_t note = (midi_starting_note + SCALE[record->event.key.col + midi_offset])+12*(MATRIX_ROWS - record->event.key.row); -      // advanced -      // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+12*(MATRIX_ROWS - record->event.key.row); -      // guitar -      uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+5*(MATRIX_ROWS - record->event.key.row); -      // violin -      // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+7*(MATRIX_ROWS - record->event.key.row); - -      if (record->event.pressed) { -        // midi_send_noteon(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127); -        midi_send_noteon(&midi_device, 0, note, 127); -      } else { -        // midi_send_noteoff(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127); -        midi_send_noteoff(&midi_device, 0, note, 127); -      } - -      if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through -        return false; +    midi_modulation = 0; +    midi_modulation_step = 0; +    midi_modulation_timer = 0; +} + +void midi_task(void) +{ +    if (timer_elapsed(midi_modulation_timer) < midi_config.modulation_interval) +        return; +    midi_modulation_timer = timer_read(); + +    if (midi_modulation_step != 0) +    { +        dprintf("midi modulation %d\n", midi_modulation); +        midi_send_cc(&midi_device, midi_config.channel, 0x1, midi_modulation); + +        if (midi_modulation_step < 0 && midi_modulation < -midi_modulation_step) { +            midi_modulation = 0; +            midi_modulation_step = 0; +            return; +        } + +        midi_modulation += midi_modulation_step; + +        if (midi_modulation > 127) +            midi_modulation = 127;      } -  return true;  } + +uint8_t midi_compute_note(uint16_t keycode) +{ +    return 12 * midi_config.octave + (keycode - MIDI_TONE_MIN) + midi_config.transpose; +} + +bool process_midi(uint16_t keycode, keyrecord_t *record) +{ +    switch (keycode) { +        case MIDI_TONE_MIN ... MIDI_TONE_MAX: +        { +            uint8_t channel = midi_config.channel; +            uint8_t tone = keycode - MIDI_TONE_MIN; +            uint8_t velocity = compute_velocity(midi_config.velocity); +            if (record->event.pressed) { +                uint8_t note = midi_compute_note(keycode); +                midi_send_noteon(&midi_device, channel, note, velocity); +                dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity); +                tone_status[tone] = note; +            } +            else { +                uint8_t note = tone_status[tone]; +                if (note != MIDI_INVALID_NOTE) +                { +                    midi_send_noteoff(&midi_device, channel, note, velocity); +                    dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity); +                } +                tone_status[tone] = MIDI_INVALID_NOTE; +            } +            return false; +        } +        case MIDI_OCTAVE_MIN ... MIDI_OCTAVE_MAX: +            if (record->event.pressed) { +                midi_config.octave = keycode - MIDI_OCTAVE_MIN; +                dprintf("midi octave %d\n", midi_config.octave); +            } +            return false; +        case MI_OCTD: +            if (record->event.pressed && midi_config.octave > 0) { +                midi_config.octave--; +                dprintf("midi octave %d\n", midi_config.octave); +            } +            return false; +        case MI_OCTU: +            if (record->event.pressed && midi_config.octave < (MIDI_OCTAVE_MAX - MIDI_OCTAVE_MIN)) { +                midi_config.octave++; +                dprintf("midi octave %d\n", midi_config.octave); +            } +            return false; +        case MIDI_TRANSPOSE_MIN ... MIDI_TRANSPOSE_MAX: +            if (record->event.pressed) { +                midi_config.transpose = keycode - MI_TRNS_0; +                dprintf("midi transpose %d\n", midi_config.transpose); +            } +            return false; +        case MI_TRNSD: +            if (record->event.pressed && midi_config.transpose > (MIDI_TRANSPOSE_MIN - MI_TRNS_0)) { +                midi_config.transpose--; +                dprintf("midi transpose %d\n", midi_config.transpose); +            } +            return false; +        case MI_TRNSU: +            if (record->event.pressed && midi_config.transpose < (MIDI_TRANSPOSE_MAX - MI_TRNS_0)) { +                const bool positive = midi_config.transpose > 0; +                midi_config.transpose++; +                if (positive && midi_config.transpose < 0) +                    midi_config.transpose--; +                dprintf("midi transpose %d\n", midi_config.transpose); +            } +            return false; +        case MIDI_VELOCITY_MIN ... MIDI_VELOCITY_MAX: +            if (record->event.pressed) { +                midi_config.velocity = keycode - MIDI_VELOCITY_MIN; +                dprintf("midi velocity %d\n", midi_config.velocity); +            } +            return false; +        case MI_VELD: +            if (record->event.pressed && midi_config.velocity > 0) { +                midi_config.velocity--; +                dprintf("midi velocity %d\n", midi_config.velocity); +            } +            return false; +        case MI_VELU: +            if (record->event.pressed) { +                midi_config.velocity++; +                dprintf("midi velocity %d\n", midi_config.velocity); +            } +            return false; +        case MIDI_CHANNEL_MIN ... MIDI_CHANNEL_MAX: +            if (record->event.pressed) { +                midi_config.channel = keycode - MIDI_CHANNEL_MIN; +                dprintf("midi channel %d\n", midi_config.channel); +            } +            return false; +        case MI_CHD: +            if (record->event.pressed) { +                midi_config.channel--; +                dprintf("midi channel %d\n", midi_config.channel); +            } +            return false; +        case MI_CHU: +            if (record->event.pressed) { +                midi_config.channel++; +                dprintf("midi channel %d\n", midi_config.channel); +            } +            return false; +        case MI_ALLOFF: +            if (record->event.pressed) { +                midi_send_cc(&midi_device, midi_config.channel, 0x7B, 0); +                dprintf("midi all notes off\n"); +            } +            return false; +        case MI_SUS: +            midi_send_cc(&midi_device, midi_config.channel, 0x40, record->event.pressed ? 127 : 0); +            dprintf("midi sustain %d\n", record->event.pressed); +            return false; +        case MI_PORT: +            midi_send_cc(&midi_device, midi_config.channel, 0x41, record->event.pressed ? 127 : 0); +            dprintf("midi portamento %d\n", record->event.pressed); +            return false; +        case MI_SOST: +            midi_send_cc(&midi_device, midi_config.channel, 0x42, record->event.pressed ? 127 : 0); +            dprintf("midi sostenuto %d\n", record->event.pressed); +            return false; +        case MI_SOFT: +            midi_send_cc(&midi_device, midi_config.channel, 0x43, record->event.pressed ? 127 : 0); +            dprintf("midi soft %d\n", record->event.pressed); +            return false; +        case MI_LEG: +            midi_send_cc(&midi_device, midi_config.channel, 0x43, record->event.pressed ? 127 : 0); +            dprintf("midi legato %d\n", record->event.pressed); +            return false; +        case MI_MOD: +            midi_modulation_step = record->event.pressed ? 1 : -1; +            return false; +        case MI_MODSD: +            if (record->event.pressed) { +                midi_config.modulation_interval++; +                // prevent overflow +                if (midi_config.modulation_interval == 0) +                    midi_config.modulation_interval--; +                dprintf("midi modulation interval %d\n", midi_config.modulation_interval); +            } +            return false; +        case MI_MODSU: +            if (record->event.pressed && midi_config.modulation_interval > 0) { +                midi_config.modulation_interval--; +                dprintf("midi modulation interval %d\n", midi_config.modulation_interval); +            } +            return false; +    }; + +    return true; +} + +#endif // MIDI_ADVANCED + +#endif // MIDI_ENABLE diff --git a/quantum/process_keycode/process_midi.h b/quantum/process_keycode/process_midi.h index acd4fc1b16..ccac8981a6 100644 --- a/quantum/process_keycode/process_midi.h +++ b/quantum/process_keycode/process_midi.h @@ -1,207 +1,56 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef PROCESS_MIDI_H  #define PROCESS_MIDI_H  #include "quantum.h" -bool process_midi(uint16_t keycode, keyrecord_t *record); +#ifdef MIDI_ENABLE + +#ifdef MIDI_BASIC +void process_midi_basic_noteon(uint8_t note); +void process_midi_basic_noteoff(uint8_t note); +void process_midi_all_notes_off(void); +#endif -#define MIDI(n) ((n) | 0x6000) -#define MIDI12 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000 +#ifdef MIDI_ADVANCED +typedef union { +  uint32_t raw; +  struct { +    uint8_t octave              :4; +    int8_t transpose            :4; +    uint8_t velocity            :4; +    uint8_t channel             :4; +    uint8_t modulation_interval :4; +  }; +} midi_config_t; + +midi_config_t midi_config; + +void midi_init(void); +void midi_task(void); +bool process_midi(uint16_t keycode, keyrecord_t *record); -#define CHNL(note, channel) (note + (channel << 8)) +#define MIDI_INVALID_NOTE 0xFF +#define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1) -#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), \ -                           0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \ -                           0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \ -                           0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \ -                           0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), } +uint8_t midi_compute_note(uint16_t keycode); +#endif // MIDI_ADVANCED -#define N_CN1  (0x600C + (12 * -1) + 0 ) -#define N_CN1S (0x600C + (12 * -1) + 1 ) -#define N_DN1F (0x600C + (12 * -1) + 1 ) -#define N_DN1  (0x600C + (12 * -1) + 2 ) -#define N_DN1S (0x600C + (12 * -1) + 3 ) -#define N_EN1F (0x600C + (12 * -1) + 3 ) -#define N_EN1  (0x600C + (12 * -1) + 4 ) -#define N_FN1  (0x600C + (12 * -1) + 5 ) -#define N_FN1S (0x600C + (12 * -1) + 6 ) -#define N_GN1F (0x600C + (12 * -1) + 6 ) -#define N_GN1  (0x600C + (12 * -1) + 7 ) -#define N_GN1S (0x600C + (12 * -1) + 8 ) -#define N_AN1F (0x600C + (12 * -1) + 8 ) -#define N_AN1  (0x600C + (12 * -1) + 9 ) -#define N_AN1S (0x600C + (12 * -1) + 10) -#define N_BN1F (0x600C + (12 * -1) + 10) -#define N_BN1  (0x600C + (12 * -1) + 11) -#define N_C0   (0x600C + (12 *  0) + 0 ) -#define N_C0S  (0x600C + (12 *  0) + 1 ) -#define N_D0F  (0x600C + (12 *  0) + 1 ) -#define N_D0   (0x600C + (12 *  0) + 2 ) -#define N_D0S  (0x600C + (12 *  0) + 3 ) -#define N_E0F  (0x600C + (12 *  0) + 3 ) -#define N_E0   (0x600C + (12 *  0) + 4 ) -#define N_F0   (0x600C + (12 *  0) + 5 ) -#define N_F0S  (0x600C + (12 *  0) + 6 ) -#define N_G0F  (0x600C + (12 *  0) + 6 ) -#define N_G0   (0x600C + (12 *  0) + 7 ) -#define N_G0S  (0x600C + (12 *  0) + 8 ) -#define N_A0F  (0x600C + (12 *  0) + 8 ) -#define N_A0   (0x600C + (12 *  0) + 9 ) -#define N_A0S  (0x600C + (12 *  0) + 10) -#define N_B0F  (0x600C + (12 *  0) + 10) -#define N_B0   (0x600C + (12 *  0) + 11) -#define N_C1   (0x600C + (12 *  1) + 0 ) -#define N_C1S  (0x600C + (12 *  1) + 1 ) -#define N_D1F  (0x600C + (12 *  1) + 1 ) -#define N_D1   (0x600C + (12 *  1) + 2 ) -#define N_D1S  (0x600C + (12 *  1) + 3 ) -#define N_E1F  (0x600C + (12 *  1) + 3 ) -#define N_E1   (0x600C + (12 *  1) + 4 ) -#define N_F1   (0x600C + (12 *  1) + 5 ) -#define N_F1S  (0x600C + (12 *  1) + 6 ) -#define N_G1F  (0x600C + (12 *  1) + 6 ) -#define N_G1   (0x600C + (12 *  1) + 7 ) -#define N_G1S  (0x600C + (12 *  1) + 8 ) -#define N_A1F  (0x600C + (12 *  1) + 8 ) -#define N_A1   (0x600C + (12 *  1) + 9 ) -#define N_A1S  (0x600C + (12 *  1) + 10) -#define N_B1F  (0x600C + (12 *  1) + 10) -#define N_B1   (0x600C + (12 *  1) + 11) -#define N_C2   (0x600C + (12 *  2) + 0 ) -#define N_C2S  (0x600C + (12 *  2) + 1 ) -#define N_D2F  (0x600C + (12 *  2) + 1 ) -#define N_D2   (0x600C + (12 *  2) + 2 ) -#define N_D2S  (0x600C + (12 *  2) + 3 ) -#define N_E2F  (0x600C + (12 *  2) + 3 ) -#define N_E2   (0x600C + (12 *  2) + 4 ) -#define N_F2   (0x600C + (12 *  2) + 5 ) -#define N_F2S  (0x600C + (12 *  2) + 6 ) -#define N_G2F  (0x600C + (12 *  2) + 6 ) -#define N_G2   (0x600C + (12 *  2) + 7 ) -#define N_G2S  (0x600C + (12 *  2) + 8 ) -#define N_A2F  (0x600C + (12 *  2) + 8 ) -#define N_A2   (0x600C + (12 *  2) + 9 ) -#define N_A2S  (0x600C + (12 *  2) + 10) -#define N_B2F  (0x600C + (12 *  2) + 10) -#define N_B2   (0x600C + (12 *  2) + 11) -#define N_C3   (0x600C + (12 *  3) + 0 ) -#define N_C3S  (0x600C + (12 *  3) + 1 ) -#define N_D3F  (0x600C + (12 *  3) + 1 ) -#define N_D3   (0x600C + (12 *  3) + 2 ) -#define N_D3S  (0x600C + (12 *  3) + 3 ) -#define N_E3F  (0x600C + (12 *  3) + 3 ) -#define N_E3   (0x600C + (12 *  3) + 4 ) -#define N_F3   (0x600C + (12 *  3) + 5 ) -#define N_F3S  (0x600C + (12 *  3) + 6 ) -#define N_G3F  (0x600C + (12 *  3) + 6 ) -#define N_G3   (0x600C + (12 *  3) + 7 ) -#define N_G3S  (0x600C + (12 *  3) + 8 ) -#define N_A3F  (0x600C + (12 *  3) + 8 ) -#define N_A3   (0x600C + (12 *  3) + 9 ) -#define N_A3S  (0x600C + (12 *  3) + 10) -#define N_B3F  (0x600C + (12 *  3) + 10) -#define N_B3   (0x600C + (12 *  3) + 11) -#define N_C4   (0x600C + (12 *  4) + 0 ) -#define N_C4S  (0x600C + (12 *  4) + 1 ) -#define N_D4F  (0x600C + (12 *  4) + 1 ) -#define N_D4   (0x600C + (12 *  4) + 2 ) -#define N_D4S  (0x600C + (12 *  4) + 3 ) -#define N_E4F  (0x600C + (12 *  4) + 3 ) -#define N_E4   (0x600C + (12 *  4) + 4 ) -#define N_F4   (0x600C + (12 *  4) + 5 ) -#define N_F4S  (0x600C + (12 *  4) + 6 ) -#define N_G4F  (0x600C + (12 *  4) + 6 ) -#define N_G4   (0x600C + (12 *  4) + 7 ) -#define N_G4S  (0x600C + (12 *  4) + 8 ) -#define N_A4F  (0x600C + (12 *  4) + 8 ) -#define N_A4   (0x600C + (12 *  4) + 9 ) -#define N_A4S  (0x600C + (12 *  4) + 10) -#define N_B4F  (0x600C + (12 *  4) + 10) -#define N_B4   (0x600C + (12 *  4) + 11) -#define N_C5   (0x600C + (12 *  5) + 0 ) -#define N_C5S  (0x600C + (12 *  5) + 1 ) -#define N_D5F  (0x600C + (12 *  5) + 1 ) -#define N_D5   (0x600C + (12 *  5) + 2 ) -#define N_D5S  (0x600C + (12 *  5) + 3 ) -#define N_E5F  (0x600C + (12 *  5) + 3 ) -#define N_E5   (0x600C + (12 *  5) + 4 ) -#define N_F5   (0x600C + (12 *  5) + 5 ) -#define N_F5S  (0x600C + (12 *  5) + 6 ) -#define N_G5F  (0x600C + (12 *  5) + 6 ) -#define N_G5   (0x600C + (12 *  5) + 7 ) -#define N_G5S  (0x600C + (12 *  5) + 8 ) -#define N_A5F  (0x600C + (12 *  5) + 8 ) -#define N_A5   (0x600C + (12 *  5) + 9 ) -#define N_A5S  (0x600C + (12 *  5) + 10) -#define N_B5F  (0x600C + (12 *  5) + 10) -#define N_B5   (0x600C + (12 *  5) + 11) -#define N_C6   (0x600C + (12 *  6) + 0 ) -#define N_C6S  (0x600C + (12 *  6) + 1 ) -#define N_D6F  (0x600C + (12 *  6) + 1 ) -#define N_D6   (0x600C + (12 *  6) + 2 ) -#define N_D6S  (0x600C + (12 *  6) + 3 ) -#define N_E6F  (0x600C + (12 *  6) + 3 ) -#define N_E6   (0x600C + (12 *  6) + 4 ) -#define N_F6   (0x600C + (12 *  6) + 5 ) -#define N_F6S  (0x600C + (12 *  6) + 6 ) -#define N_G6F  (0x600C + (12 *  6) + 6 ) -#define N_G6   (0x600C + (12 *  6) + 7 ) -#define N_G6S  (0x600C + (12 *  6) + 8 ) -#define N_A6F  (0x600C + (12 *  6) + 8 ) -#define N_A6   (0x600C + (12 *  6) + 9 ) -#define N_A6S  (0x600C + (12 *  6) + 10) -#define N_B6F  (0x600C + (12 *  6) + 10) -#define N_B6   (0x600C + (12 *  6) + 11) -#define N_C7   (0x600C + (12 *  7) + 0 ) -#define N_C7S  (0x600C + (12 *  7) + 1 ) -#define N_D7F  (0x600C + (12 *  7) + 1 ) -#define N_D7   (0x600C + (12 *  7) + 2 ) -#define N_D7S  (0x600C + (12 *  7) + 3 ) -#define N_E7F  (0x600C + (12 *  7) + 3 ) -#define N_E7   (0x600C + (12 *  7) + 4 ) -#define N_F7   (0x600C + (12 *  7) + 5 ) -#define N_F7S  (0x600C + (12 *  7) + 6 ) -#define N_G7F  (0x600C + (12 *  7) + 6 ) -#define N_G7   (0x600C + (12 *  7) + 7 ) -#define N_G7S  (0x600C + (12 *  7) + 8 ) -#define N_A7F  (0x600C + (12 *  7) + 8 ) -#define N_A7   (0x600C + (12 *  7) + 9 ) -#define N_A7S  (0x600C + (12 *  7) + 10) -#define N_B7F  (0x600C + (12 *  7) + 10) -#define N_B7   (0x600C + (12 *  7) + 11) -#define N_C8   (0x600C + (12 *  8) + 0 ) -#define N_C8S  (0x600C + (12 *  8) + 1 ) -#define N_D8F  (0x600C + (12 *  8) + 1 ) -#define N_D8   (0x600C + (12 *  8) + 2 ) -#define N_D8S  (0x600C + (12 *  8) + 3 ) -#define N_E8F  (0x600C + (12 *  8) + 3 ) -#define N_E8   (0x600C + (12 *  8) + 4 ) -#define N_F8   (0x600C + (12 *  8) + 5 ) -#define N_F8S  (0x600C + (12 *  8) + 6 ) -#define N_G8F  (0x600C + (12 *  8) + 6 ) -#define N_G8   (0x600C + (12 *  8) + 7 ) -#define N_G8S  (0x600C + (12 *  8) + 8 ) -#define N_A8F  (0x600C + (12 *  8) + 8 ) -#define N_A8   (0x600C + (12 *  8) + 9 ) -#define N_A8S  (0x600C + (12 *  8) + 10) -#define N_B8F  (0x600C + (12 *  8) + 10) -#define N_B8   (0x600C + (12 *  8) + 11) -#define N_C8   (0x600C + (12 *  8) + 0 ) -#define N_C8S  (0x600C + (12 *  8) + 1 ) -#define N_D8F  (0x600C + (12 *  8) + 1 ) -#define N_D8   (0x600C + (12 *  8) + 2 ) -#define N_D8S  (0x600C + (12 *  8) + 3 ) -#define N_E8F  (0x600C + (12 *  8) + 3 ) -#define N_E8   (0x600C + (12 *  8) + 4 ) -#define N_F8   (0x600C + (12 *  8) + 5 ) -#define N_F8S  (0x600C + (12 *  8) + 6 ) -#define N_G8F  (0x600C + (12 *  8) + 6 ) -#define N_G8   (0x600C + (12 *  8) + 7 ) -#define N_G8S  (0x600C + (12 *  8) + 8 ) -#define N_A8F  (0x600C + (12 *  8) + 8 ) -#define N_A8   (0x600C + (12 *  8) + 9 ) -#define N_A8S  (0x600C + (12 *  8) + 10) -#define N_B8F  (0x600C + (12 *  8) + 10) -#define N_B8   (0x600C + (12 *  8) + 11) +#endif // MIDI_ENABLE -#endif
\ No newline at end of file +#endif diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c index 1e2648bff5..217dca2807 100644 --- a/quantum/process_keycode/process_music.c +++ b/quantum/process_keycode/process_music.c @@ -1,5 +1,29 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #include "process_music.h" +#ifdef AUDIO_ENABLE +#include "process_audio.h" +#endif +#if defined(MIDI_ENABLE) && defined(MIDI_BASIC) +#include "process_midi.h" +#endif + +#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC)) +  bool music_activated = false;  uint8_t music_starting_note = 0x0C;  int music_offset = 7; @@ -8,36 +32,41 @@ int music_offset = 7;  static bool music_sequence_recording = false;  static bool music_sequence_recorded = false;  static bool music_sequence_playing = false; -static float music_sequence[16] = {0}; +static uint8_t music_sequence[16] = {0};  static uint8_t music_sequence_count = 0;  static uint8_t music_sequence_position = 0;  static uint16_t music_sequence_timer = 0;  static uint16_t music_sequence_interval = 100; -bool process_music(uint16_t keycode, keyrecord_t *record) { +static void music_noteon(uint8_t note) { +    #ifdef AUDIO_ENABLE +    process_audio_noteon(note); +    #endif +    #if defined(MIDI_ENABLE) && defined(MIDI_BASIC) +    process_midi_basic_noteon(note); +    #endif +} -    if (keycode == AU_ON && record->event.pressed) { -      audio_on(); -      return false; -    } +static void music_noteoff(uint8_t note) { +    #ifdef AUDIO_ENABLE +    process_audio_noteoff(note); +    #endif +    #if defined(MIDI_ENABLE) && defined(MIDI_BASIC) +    process_midi_basic_noteoff(note); +    #endif +} -    if (keycode == AU_OFF && record->event.pressed) { -      audio_off(); -      return false; -    } +void music_all_notes_off(void) { +    #ifdef AUDIO_ENABLE +    process_audio_all_notes_off(); +    #endif +    #if defined(MIDI_ENABLE) && defined(MIDI_BASIC) +    process_midi_all_notes_off(); +    #endif +} -    if (keycode == AU_TOG && record->event.pressed) { -        if (is_audio_on()) -        { -            audio_off(); -        } -        else -        { -            audio_on(); -        } -      return false; -    } +bool process_music(uint16_t keycode, keyrecord_t *record) {      if (keycode == MU_ON && record->event.pressed) {          music_on(); @@ -61,22 +90,10 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {          return false;      } -    if (keycode == MUV_IN && record->event.pressed) { -        voice_iterate(); -        music_scale_user(); -        return false; -    } - -    if (keycode == MUV_DE && record->event.pressed) { -        voice_deiterate(); -        music_scale_user(); -        return false; -    } -      if (music_activated) {        if (keycode == KC_LCTL && record->event.pressed) { // Start recording -        stop_all_notes(); +        music_all_notes_off();          music_sequence_recording = true;          music_sequence_recorded = false;          music_sequence_playing = false; @@ -85,7 +102,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {        }        if (keycode == KC_LALT && record->event.pressed) { // Stop recording/playing -        stop_all_notes(); +        music_all_notes_off();          if (music_sequence_recording) { // was recording            music_sequence_recorded = true;          } @@ -95,7 +112,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {        }        if (keycode == KC_LGUI && record->event.pressed && music_sequence_recorded) { // Start playing -        stop_all_notes(); +        music_all_notes_off();          music_sequence_recording = false;          music_sequence_playing = true;          music_sequence_position = 0; @@ -114,32 +131,34 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {              music_sequence_interval+=10;          return false;        } +        #define MUSIC_MODE_GUITAR        #ifdef MUSIC_MODE_CHROMATIC -      float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + record->event.key.col + music_offset)/12.0+(MATRIX_ROWS - record->event.key.row)); +      uint8_t note = (music_starting_note + record->event.key.col + music_offset - 3)+12*(MATRIX_ROWS - record->event.key.row);        #elif defined(MUSIC_MODE_GUITAR) -      float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + record->event.key.col + music_offset)/12.0+(float)(MATRIX_ROWS - record->event.key.row + 7)*5.0/12); +      uint8_t note = (music_starting_note + record->event.key.col + music_offset + 32)+5*(MATRIX_ROWS - record->event.key.row);        #elif defined(MUSIC_MODE_VIOLIN) -      float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + record->event.key.col + music_offset)/12.0+(float)(MATRIX_ROWS - record->event.key.row + 5)*7.0/12); +      uint8_t note = (music_starting_note + record->event.key.col + music_offset + 32)+7*(MATRIX_ROWS - record->event.key.row);        #else -      float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + SCALE[record->event.key.col + music_offset])/12.0+(MATRIX_ROWS - record->event.key.row)); +      uint8_t note = (music_starting_note + SCALE[record->event.key.col + music_offset] - 3)+12*(MATRIX_ROWS - record->event.key.row);        #endif        if (record->event.pressed) { -        play_note(freq, 0xF); +        music_noteon(note);          if (music_sequence_recording) { -          music_sequence[music_sequence_count] = freq; +          music_sequence[music_sequence_count] = note;            music_sequence_count++;          }        } else { -        stop_note(freq); +        music_noteoff(note);        }        if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through          return false;      } -  return true; + +    return true;  }  bool is_music_on(void) { @@ -161,26 +180,26 @@ void music_on(void) {  void music_off(void) {      music_activated = 0; -    stop_all_notes(); +    music_all_notes_off();  } - -__attribute__ ((weak)) -void music_on_user() {} - -__attribute__ ((weak)) -void audio_on_user() {} - -__attribute__ ((weak)) -void music_scale_user() {} -  void matrix_scan_music(void) {    if (music_sequence_playing) {      if ((music_sequence_timer == 0) || (timer_elapsed(music_sequence_timer) > music_sequence_interval)) {        music_sequence_timer = timer_read(); -      stop_note(music_sequence[(music_sequence_position - 1 < 0)?(music_sequence_position - 1 + music_sequence_count):(music_sequence_position - 1)]); -      play_note(music_sequence[music_sequence_position], 0xF); +      uint8_t prev_note = music_sequence[(music_sequence_position - 1 < 0)?(music_sequence_position - 1 + music_sequence_count):(music_sequence_position - 1)]; +      uint8_t next_note = music_sequence[music_sequence_position]; +      music_noteoff(prev_note); +      music_noteon(next_note);        music_sequence_position = (music_sequence_position + 1) % music_sequence_count;      }    }  } + +__attribute__ ((weak)) +void music_on_user() {} + +__attribute__ ((weak)) +void music_scale_user() {} + +#endif // defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
\ No newline at end of file diff --git a/quantum/process_keycode/process_music.h b/quantum/process_keycode/process_music.h index 318b3e3875..8dfbf041f4 100644 --- a/quantum/process_keycode/process_music.h +++ b/quantum/process_keycode/process_music.h @@ -1,8 +1,26 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef PROCESS_MUSIC_H  #define PROCESS_MUSIC_H  #include "quantum.h" +#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC)) +  bool process_music(uint16_t keycode, keyrecord_t *record);  bool is_music_on(void); @@ -10,9 +28,9 @@ void music_toggle(void);  void music_on(void);  void music_off(void); -void audio_on_user(void);  void music_on_user(void);  void music_scale_user(void); +void music_all_notes_off(void);  void matrix_scan_music(void); @@ -24,4 +42,6 @@ void matrix_scan_music(void);                             0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), }  #endif -#endif
\ No newline at end of file +#endif // defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC)) + +#endif diff --git a/quantum/process_keycode/process_printer.c b/quantum/process_keycode/process_printer.c index 2e11dd366c..807f7a0b91 100644 --- a/quantum/process_keycode/process_printer.c +++ b/quantum/process_keycode/process_printer.c @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include "process_printer.h"  #include "action_util.h" @@ -251,4 +267,4 @@ bool process_printer(uint16_t keycode, keyrecord_t *record) {  	}  	return true; -}
\ No newline at end of file +} diff --git a/quantum/process_keycode/process_printer.h b/quantum/process_keycode/process_printer.h index fdd36d75a8..aa494ac8a7 100644 --- a/quantum/process_keycode/process_printer.h +++ b/quantum/process_keycode/process_printer.h @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef PROCESS_PRINTER_H  #define PROCESS_PRINTER_H @@ -5,4 +21,4 @@  #include "protocol/serial.h" -#endif
\ No newline at end of file +#endif diff --git a/quantum/process_keycode/process_printer_bb.c b/quantum/process_keycode/process_printer_bb.c index 1924d03774..55d3b552b2 100644 --- a/quantum/process_keycode/process_printer_bb.c +++ b/quantum/process_keycode/process_printer_bb.c @@ -1,3 +1,19 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include "process_printer.h"  #include "action_util.h" @@ -257,4 +273,4 @@ bool process_printer(uint16_t keycode, keyrecord_t *record) {  	}  	return true; -}
\ No newline at end of file +} diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index 403dca5380..b807ec3c30 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -1,6 +1,23 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #include "quantum.h"  #include "action_tapping.h" +uint8_t get_oneshot_mods(void); +  static uint16_t last_td;  static int8_t highest_td = -1; diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h index 726752ecc7..330809f83a 100644 --- a/quantum/process_keycode/process_tap_dance.h +++ b/quantum/process_keycode/process_tap_dance.h @@ -1,3 +1,18 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef PROCESS_TAP_DANCE_H  #define PROCESS_TAP_DANCE_H diff --git a/quantum/process_keycode/process_ucis.c b/quantum/process_keycode/process_ucis.c index 4ad2533b08..86c0937f5e 100644 --- a/quantum/process_keycode/process_ucis.c +++ b/quantum/process_keycode/process_ucis.c @@ -1,3 +1,19 @@ +/* Copyright 2017 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include "process_ucis.h"  qk_ucis_state_t qk_ucis_state; @@ -130,4 +146,4 @@ bool process_ucis (uint16_t keycode, keyrecord_t *record) {      return false;    }    return true; -}
\ No newline at end of file +} diff --git a/quantum/process_keycode/process_ucis.h b/quantum/process_keycode/process_ucis.h index 4332f57b35..3f736a709f 100644 --- a/quantum/process_keycode/process_ucis.h +++ b/quantum/process_keycode/process_ucis.h @@ -1,3 +1,19 @@ +/* Copyright 2017 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef PROCESS_UCIS_H  #define PROCESS_UCIS_H diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c index ccae6fdcad..678a15234d 100644 --- a/quantum/process_keycode/process_unicode.c +++ b/quantum/process_keycode/process_unicode.c @@ -1,8 +1,29 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #include "process_unicode.h"  #include "action_util.h" +static uint8_t first_flag = 0; +  bool process_unicode(uint16_t keycode, keyrecord_t *record) {    if (keycode > QK_UNICODE && record->event.pressed) { +    if (first_flag == 0) { +      set_unicode_input_mode(eeprom_read_byte(EECONFIG_UNICODEMODE)); +      first_flag = 1; +    }      uint16_t unicode = keycode & 0x7FFF;      unicode_input_start();      register_hex(unicode); diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h index 4c21f11eb9..c525b74f03 100644 --- a/quantum/process_keycode/process_unicode.h +++ b/quantum/process_keycode/process_unicode.h @@ -1,3 +1,18 @@ +/* Copyright 2016 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef PROCESS_UNICODE_H  #define PROCESS_UNICODE_H diff --git a/quantum/process_keycode/process_unicode_common.c b/quantum/process_keycode/process_unicode_common.c index 31bc3b7ab3..1dbdec3e71 100644 --- a/quantum/process_keycode/process_unicode_common.c +++ b/quantum/process_keycode/process_unicode_common.c @@ -1,10 +1,28 @@ +/* Copyright 2017 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include "process_unicode_common.h" +static uint8_t input_mode;  uint8_t mods;  void set_unicode_input_mode(uint8_t os_target)  {    input_mode = os_target; +  eeprom_update_byte(EECONFIG_UNICODEMODE, os_target);  }  uint8_t get_unicode_input_mode(void) { @@ -76,10 +94,22 @@ void unicode_input_finish (void) {    if (mods & MOD_BIT(KC_RGUI)) register_code(KC_RGUI);  } +__attribute__((weak)) +uint16_t hex_to_keycode(uint8_t hex) +{ +  if (hex == 0x0) { +    return KC_0; +  } else if (hex < 0xA) { +    return KC_1 + (hex - 0x1); +  } else { +    return KC_A + (hex - 0xA); +  } +} +  void register_hex(uint16_t hex) {    for(int i = 3; i >= 0; i--) {      uint8_t digit = ((hex >> (i*4)) & 0xF);      register_code(hex_to_keycode(digit));      unregister_code(hex_to_keycode(digit));    } -}
\ No newline at end of file +} diff --git a/quantum/process_keycode/process_unicode_common.h b/quantum/process_keycode/process_unicode_common.h index 864693cdd0..f5be1da5cb 100644 --- a/quantum/process_keycode/process_unicode_common.h +++ b/quantum/process_keycode/process_unicode_common.h @@ -1,3 +1,19 @@ +/* Copyright 2017 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef PROCESS_UNICODE_COMMON_H  #define PROCESS_UNICODE_COMMON_H @@ -129,4 +145,4 @@ void register_hex(uint16_t hex);  #define UC_TILD	UC(0x007E)  #define UC_DEL	UC(0x007F) -#endif
\ No newline at end of file +#endif diff --git a/quantum/process_keycode/process_unicodemap.c b/quantum/process_keycode/process_unicodemap.c index 68a593a186..0227fbdd7b 100644 --- a/quantum/process_keycode/process_unicodemap.c +++ b/quantum/process_keycode/process_unicodemap.c @@ -1,3 +1,19 @@ +/* Copyright 2017 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include "process_unicodemap.h"  #include "process_unicode_common.h" @@ -53,4 +69,4 @@ bool process_unicode_map(uint16_t keycode, keyrecord_t *record) {      }    }    return true; -}
\ No newline at end of file +} diff --git a/quantum/process_keycode/process_unicodemap.h b/quantum/process_keycode/process_unicodemap.h index 64a7a01090..929c88c0b6 100644 --- a/quantum/process_keycode/process_unicodemap.h +++ b/quantum/process_keycode/process_unicodemap.h @@ -1,3 +1,19 @@ +/* Copyright 2017 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef PROCESS_UNICODEMAP_H  #define PROCESS_UNICODEMAP_H @@ -6,4 +22,4 @@  void unicode_map_input_error(void);  bool process_unicode_map(uint16_t keycode, keyrecord_t *record); -#endif
\ No newline at end of file +#endif diff --git a/quantum/quantum.c b/quantum/quantum.c index 4a6d0355fa..62d9ef9232 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -1,3 +1,19 @@ +/* Copyright 2016-2017 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include "quantum.h"  #ifdef PROTOCOL_LUFA  #include "outputselect.h" @@ -7,6 +23,9 @@  #define TAPPING_TERM 200  #endif +#include "backlight.h" +extern backlight_config_t backlight_config; +  #ifdef FAUXCLICKY_ENABLE  #include "fauxclicky.h"  #endif @@ -95,8 +114,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {  void reset_keyboard(void) {    clear_keyboard(); -#ifdef AUDIO_ENABLE -  stop_all_notes(); +#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_ENABLE_BASIC)) +  music_all_notes_off();    shutdown_user();  #endif    wait_ms(250); @@ -150,10 +169,13 @@ bool process_record_quantum(keyrecord_t *record) {    if (!(      process_record_kb(keycode, record) && -  #ifdef MIDI_ENABLE +  #if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)      process_midi(keycode, record) &&    #endif    #ifdef AUDIO_ENABLE +    process_audio(keycode, record) && +  #endif +  #if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))      process_music(keycode, record) &&    #endif    #ifdef TAP_DANCE_ENABLE @@ -291,14 +313,6 @@ bool process_record_quantum(keyrecord_t *record) {        return false;        break;      #endif -    #ifdef ADAFRUIT_BLE_ENABLE -    case OUT_BLE: -      if (record->event.pressed) { -        set_output(OUTPUT_ADAFRUIT_BLE); -      } -      return false; -      break; -    #endif      #endif      case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_NKRO:        if (record->event.pressed) { @@ -601,6 +615,10 @@ void matrix_scan_quantum() {      matrix_scan_combo();    #endif +  #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_PIN) +    backlight_task(); +  #endif +    matrix_scan_kb();  } @@ -668,13 +686,13 @@ __attribute__ ((weak))  void backlight_set(uint8_t level)  {    // Prevent backlight blink on lowest level -  #if BACKLIGHT_ON_STATE == 0 -    // PORTx &= ~n -    _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF); -  #else -    // PORTx |= n -    _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); -  #endif +  // #if BACKLIGHT_ON_STATE == 0 +  //   // PORTx &= ~n +  //   _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF); +  // #else +  //   // PORTx |= n +  //   _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); +  // #endif    if ( level == 0 ) {      #ifndef NO_BACKLIGHT_CLOCK @@ -682,13 +700,13 @@ void backlight_set(uint8_t level)        TCCR1A &= ~(_BV(COM1x1));        OCR1x = 0x0;      #else -      #if BACKLIGHT_ON_STATE == 0 -        // PORTx |= n -        _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); -      #else -        // PORTx &= ~n -        _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF); -      #endif +      // #if BACKLIGHT_ON_STATE == 0 +      //   // PORTx |= n +      //   _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); +      // #else +      //   // PORTx &= ~n +      //   _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF); +      // #endif      #endif    }     #ifndef NO_BACKLIGHT_CLOCK @@ -711,6 +729,30 @@ void backlight_set(uint8_t level)    #endif  } +uint8_t backlight_tick = 0; + +void backlight_task(void) { +  #ifdef NO_BACKLIGHT_CLOCK +  if ((0xFFFF >> ((BACKLIGHT_LEVELS - backlight_config.level) * ((BACKLIGHT_LEVELS + 1) / 2))) & (1 << backlight_tick)) {  +    #if BACKLIGHT_ON_STATE == 0 +      // PORTx &= ~n +      _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF); +    #else +      // PORTx |= n +      _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); +    #endif +  } else { +    #if BACKLIGHT_ON_STATE == 0 +      // PORTx |= n +      _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); +    #else +      // PORTx &= ~n +      _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF); +    #endif +  } +  backlight_tick = (backlight_tick + 1) % 16; +  #endif +}  #ifdef BACKLIGHT_BREATHING diff --git a/quantum/quantum.h b/quantum/quantum.h index 580d51202a..2bf18d095e 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -1,3 +1,18 @@ +/* Copyright 2016-2017 Erez Zukerman, Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef QUANTUM_H  #define QUANTUM_H @@ -35,11 +50,16 @@ extern uint32_t default_layer_state;  #ifdef MIDI_ENABLE  	#include <lufa.h> +#ifdef MIDI_ADVANCED  	#include "process_midi.h"  #endif +#endif // MIDI_ENABLE  #ifdef AUDIO_ENABLE - 	#include "audio.h" + 	#include "process_audio.h" +#endif + +#if defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))  	#include "process_music.h"  #endif @@ -103,6 +123,7 @@ void unregister_code16 (uint16_t code);  #ifdef BACKLIGHT_ENABLE  void backlight_init_ports(void); +void backlight_task(void);  #ifdef BACKLIGHT_BREATHING  void breathing_enable(void); diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index 63b626926d..7354ae0da1 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -1,7 +1,31 @@ - +/* Copyright 2016-2017 Jack Humbert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef QUANTUM_KEYCODES_H  #define QUANTUM_KEYCODES_H +#ifndef MIDI_ENABLE_STRICT +#define MIDI_ENABLE_STRICT 0 +#endif + +#if !MIDI_ENABLE_STRICT || (defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)) +#ifndef MIDI_TONE_KEYCODE_OCTAVES +#define MIDI_TONE_KEYCODE_OCTAVES 3 +#endif +#endif +  enum quantum_keycodes {      // Ranges used in shortucuts - not to be used directly      QK_TMK                = 0x0000, @@ -107,9 +131,230 @@ enum quantum_keycodes {      MUV_IN,      MUV_DE, -    // Midi mode on/off -    MIDI_ON, -    MIDI_OFF, +    // Midi +#if !MIDI_ENABLE_STRICT || (defined(MIDI_ENABLE) && defined(MIDI_BASIC)) +    MI_ON,  // send midi notes when music mode is enabled +    MI_OFF, // don't send midi notes when music mode is enabled +#endif + +#if !MIDI_ENABLE_STRICT || (defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)) +    MIDI_TONE_MIN, + +#if !MIDI_ENABLE_STRICT || MIDI_TONE_KEYCODE_OCTAVES > 0 +    MI_C = MIDI_TONE_MIN, +    MI_Cs, +    MI_Db = MI_Cs, +    MI_D, +    MI_Ds, +    MI_Eb = MI_Ds, +    MI_E, +    MI_F, +    MI_Fs, +    MI_Gb = MI_Fs, +    MI_G, +    MI_Gs, +    MI_Ab = MI_Gs, +    MI_A, +    MI_As, +    MI_Bb = MI_As, +    MI_B, +#endif + +#if !MIDI_ENABLE_STRICT || MIDI_TONE_KEYCODE_OCTAVES > 1 +    MI_C_1, +    MI_Cs_1, +    MI_Db_1 = MI_Cs_1, +    MI_D_1, +    MI_Ds_1, +    MI_Eb_1 = MI_Ds_1, +    MI_E_1, +    MI_F_1, +    MI_Fs_1, +    MI_Gb_1 = MI_Fs_1, +    MI_G_1, +    MI_Gs_1, +    MI_Ab_1 = MI_Gs_1, +    MI_A_1, +    MI_As_1, +    MI_Bb_1 = MI_As_1, +    MI_B_1, +#endif + +#if !MIDI_ENABLE_STRICT || MIDI_TONE_KEYCODE_OCTAVES > 2 +    MI_C_2, +    MI_Cs_2, +    MI_Db_2 = MI_Cs_2, +    MI_D_2, +    MI_Ds_2, +    MI_Eb_2 = MI_Ds_2, +    MI_E_2, +    MI_F_2, +    MI_Fs_2, +    MI_Gb_2 = MI_Fs_2, +    MI_G_2, +    MI_Gs_2, +    MI_Ab_2 = MI_Gs_2, +    MI_A_2, +    MI_As_2, +    MI_Bb_2 = MI_As_2, +    MI_B_2, +#endif + +#if !MIDI_ENABLE_STRICT || MIDI_TONE_KEYCODE_OCTAVES > 3 +    MI_C_3, +    MI_Cs_3, +    MI_Db_3 = MI_Cs_3, +    MI_D_3, +    MI_Ds_3, +    MI_Eb_3 = MI_Ds_3, +    MI_E_3, +    MI_F_3, +    MI_Fs_3, +    MI_Gb_3 = MI_Fs_3, +    MI_G_3, +    MI_Gs_3, +    MI_Ab_3 = MI_Gs_3, +    MI_A_3, +    MI_As_3, +    MI_Bb_3 = MI_As_3, +    MI_B_3, +#endif + +#if !MIDI_ENABLE_STRICT || MIDI_TONE_KEYCODE_OCTAVES > 4 +    MI_C_4, +    MI_Cs_4, +    MI_Db_4 = MI_Cs_4, +    MI_D_4, +    MI_Ds_4, +    MI_Eb_4 = MI_Ds_4, +    MI_E_4, +    MI_F_4, +    MI_Fs_4, +    MI_Gb_4 = MI_Fs_4, +    MI_G_4, +    MI_Gs_4, +    MI_Ab_4 = MI_Gs_4, +    MI_A_4, +    MI_As_4, +    MI_Bb_4 = MI_As_4, +    MI_B_4, +#endif + +#if !MIDI_ENABLE_STRICT || MIDI_TONE_KEYCODE_OCTAVES > 5 +    MI_C_5, +    MI_Cs_5, +    MI_Db_5 = MI_Cs_5, +    MI_D_5, +    MI_Ds_5, +    MI_Eb_5 = MI_Ds_5, +    MI_E_5, +    MI_F_5, +    MI_Fs_5, +    MI_Gb_5 = MI_Fs_5, +    MI_G_5, +    MI_Gs_5, +    MI_Ab_5 = MI_Gs_5, +    MI_A_5, +    MI_As_5, +    MI_Bb_5 = MI_As_5, +    MI_B_5, +#endif + +#if !MIDI_ENABLE_STRICT || MIDI_TONE_KEYCODE_OCTAVES > 5 +    MIDI_TONE_MAX = MI_B_5, +#elif MIDI_TONE_KEYCODE_OCTAVES > 4 +    MIDI_TONE_MAX = MI_B_4, +#elif MIDI_TONE_KEYCODE_OCTAVES > 3 +    MIDI_TONE_MAX = MI_B_3, +#elif MIDI_TONE_KEYCODE_OCTAVES > 2 +    MIDI_TONE_MAX = MI_B_2, +#elif MIDI_TONE_KEYCODE_OCTAVES > 1 +    MIDI_TONE_MAX = MI_B_1, +#elif MIDI_TONE_KEYCODE_OCTAVES > 0 +    MIDI_TONE_MAX = MI_B, +#endif + +    MIDI_OCTAVE_MIN, +    MI_OCT_N2 = MIDI_OCTAVE_MIN, +    MI_OCT_N1, +    MI_OCT_0, +    MI_OCT_1, +    MI_OCT_2, +    MI_OCT_3, +    MI_OCT_4, +    MI_OCT_5, +    MI_OCT_6, +    MI_OCT_7, +    MIDI_OCTAVE_MAX = MI_OCT_7, +    MI_OCTD, // octave down +    MI_OCTU, // octave up + +    MIDI_TRANSPOSE_MIN, +    MI_TRNS_N6 = MIDI_TRANSPOSE_MIN, +    MI_TRNS_N5, +    MI_TRNS_N4, +    MI_TRNS_N3, +    MI_TRNS_N2, +    MI_TRNS_N1, +    MI_TRNS_0, +    MI_TRNS_1, +    MI_TRNS_2, +    MI_TRNS_3, +    MI_TRNS_4, +    MI_TRNS_5, +    MI_TRNS_6, +    MIDI_TRANSPOSE_MAX = MI_TRNS_6, +    MI_TRNSD, // transpose down +    MI_TRNSU, // transpose up + +    MIDI_VELOCITY_MIN, +    MI_VEL_1 = MIDI_VELOCITY_MIN, +    MI_VEL_2, +    MI_VEL_3, +    MI_VEL_4, +    MI_VEL_5, +    MI_VEL_6, +    MI_VEL_7, +    MI_VEL_8, +    MI_VEL_9, +    MI_VEL_10, +    MIDI_VELOCITY_MAX = MI_VEL_10, +    MI_VELD, // velocity down +    MI_VELU, // velocity up + +    MIDI_CHANNEL_MIN, +    MI_CH1 = MIDI_CHANNEL_MIN, +    MI_CH2, +    MI_CH3, +    MI_CH4, +    MI_CH5, +    MI_CH6, +    MI_CH7, +    MI_CH8, +    MI_CH9, +    MI_CH10, +    MI_CH11, +    MI_CH12, +    MI_CH13, +    MI_CH14, +    MI_CH15, +    MI_CH16, +    MIDI_CHANNEL_MAX = MI_CH16, +    MI_CHD, // previous channel +    MI_CHU, // next channel + +    MI_ALLOFF, // all notes off + +    MI_SUS, // sustain +    MI_PORT, // portamento +    MI_SOST, // sostenuto +    MI_SOFT, // soft pedal +    MI_LEG,  // legato + +    MI_MOD, // modulation +    MI_MODSD, // decrease modulation speed +    MI_MODSU, // increase modulation speed +#endif // MIDI_ADVANCED      // Backlight functionality      BL_0, @@ -159,9 +404,6 @@ enum quantum_keycodes {  #ifdef BLUETOOTH_ENABLE      OUT_BT,  #endif -#ifdef ADAFRUIT_BLE_ENABLE -    OUT_BLE, -#endif      // always leave at the end      SAFE_RANGE @@ -183,6 +425,7 @@ enum quantum_keycodes {  #define ALTG(kc) (kc | QK_RCTL | QK_RALT)  #define SCMD(kc) (kc | QK_LGUI | QK_LSFT)  #define SWIN(kc) SCMD(kc) +#define LCA(kc) (kc | QK_LCTL | QK_LALT)  #define MOD_HYPR 0xf  #define MOD_MEH 0x7 @@ -281,9 +524,6 @@ enum quantum_keycodes {  #define BL_ON  BL_9  #define BL_OFF BL_0 -#define MI_ON MIDI_ON -#define MI_OFF MIDI_OFF -  // GOTO layer - 16 layers max  // when:  // ON_PRESS    = 1 @@ -339,6 +579,7 @@ enum quantum_keycodes {  #define ALL_T(kc) MT((MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI), kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/  #define SCMD_T(kc) MT((MOD_LGUI | MOD_LSFT), kc)  #define SWIN_T(kc) SCMD_T(kc) +#define LCA_T(kc) MT((MOD_LCTL | MOD_LALT), kc) // Left control and left alt  // Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap  #define KC_HYPR HYPR(KC_NO) diff --git a/quantum/rgblight.c b/quantum/rgblight.c index dd1b91c63c..eff70aae1d 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -1,3 +1,18 @@ +/* Copyright 2016-2017 Yang Liu + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #include <avr/eeprom.h>  #include <avr/interrupt.h>  #include <util/delay.h> diff --git a/quantum/rgblight.h b/quantum/rgblight.h index 2b3e791bf8..92130192ce 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -1,3 +1,18 @@ +/* Copyright 2017 Yang Liu + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef RGBLIGHT_H  #define RGBLIGHT_H diff --git a/quantum/serial_link/LICENSE b/quantum/serial_link/LICENSE index d7cc3198cb..d13cc4b26a 100644 --- a/quantum/serial_link/LICENSE +++ b/quantum/serial_link/LICENSE @@ -1,7 +1,5 @@  The MIT License (MIT) -Copyright (c) 2016 Fred Sundvik -  Permission is hereby granted, free of charge, to any person obtaining a copy  of this software and associated documentation files (the "Software"), to deal  in the Software without restriction, including without limitation the rights diff --git a/quantum/template/Makefile b/quantum/template/Makefile index 4e2a6f00fd..840dc9a286 100644 --- a/quantum/template/Makefile +++ b/quantum/template/Makefile @@ -1,3 +1,18 @@ +# Copyright 2013 Jun Wako <[email protected]> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. +  ifndef MAKEFILE_INCLUDED  	include ../../Makefile -endif
\ No newline at end of file +endif diff --git a/quantum/template/config.h b/quantum/template/config.h index c61c4a6181..dbca45765d 100644 --- a/quantum/template/config.h +++ b/quantum/template/config.h @@ -1,5 +1,5 @@  /* -Copyright 2012 Jun Wako <[email protected]> +Copyright 2017 REPLACE_WITH_YOUR_NAME  This program is free software: you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by @@ -159,4 +159,27 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  //#define NO_ACTION_MACRO  //#define NO_ACTION_FUNCTION +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: +   - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: +   - MIDI notes can be added to the keymap +   - Octave shift and transpose +   - Virtual sustain, portamento, and modulation wheel +   - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 +  #endif diff --git a/quantum/template/keymaps/default/Makefile b/quantum/template/keymaps/default/Makefile index f4671a9d11..b8879076bd 100644 --- a/quantum/template/keymaps/default/Makefile +++ b/quantum/template/keymaps/default/Makefile @@ -1,4 +1,20 @@ -# Build Options +# Copyright 2013 Jun Wako <[email protected]> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. + + +# QMK Build Options  #   change to "no" to disable the options, or define them in the Makefile in   #   the appropriate keymap folder that will get included automatically  # @@ -9,7 +25,7 @@ CONSOLE_ENABLE = no         # Console for debug(+400)  COMMAND_ENABLE = yes        # Commands for debug and configuration  NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work  BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality -MIDI_ENABLE = no            # MIDI controls +MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)  AUDIO_ENABLE = no           # Audio output on port C6  UNICODE_ENABLE = no         # Unicode  BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID @@ -18,4 +34,4 @@ SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend  ifndef QUANTUM_DIR  	include ../../../../Makefile -endif
\ No newline at end of file +endif diff --git a/quantum/template/keymaps/default/config.h b/quantum/template/keymaps/default/config.h index df06a26206..f52a97bbc8 100644 --- a/quantum/template/keymaps/default/config.h +++ b/quantum/template/keymaps/default/config.h @@ -1,3 +1,19 @@ +/* Copyright 2017 REPLACE_WITH_YOUR_NAME + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef CONFIG_USER_H  #define CONFIG_USER_H @@ -5,4 +21,4 @@  // place overrides here -#endif
\ No newline at end of file +#endif diff --git a/quantum/template/keymaps/default/keymap.c b/quantum/template/keymaps/default/keymap.c index e28a4723e9..a123cd7bab 100644 --- a/quantum/template/keymaps/default/keymap.c +++ b/quantum/template/keymaps/default/keymap.c @@ -1,3 +1,18 @@ +/* Copyright 2017 REPLACE_WITH_YOUR_NAME + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #include "%KEYBOARD%.h"  const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -41,4 +56,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {  void led_set_user(uint8_t usb_led) { -}
\ No newline at end of file +} diff --git a/quantum/template/rules.mk b/quantum/template/rules.mk index bad3387bf4..a1f9377d87 100644 --- a/quantum/template/rules.mk +++ b/quantum/template/rules.mk @@ -61,7 +61,7 @@ SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend  # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work  NKRO_ENABLE ?= no            # USB Nkey Rollover  BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality on B7 by default -MIDI_ENABLE ?= no            # MIDI controls +MIDI_ENABLE ?= no            # MIDI support (+2400 to 4200, depending on config)  UNICODE_ENABLE ?= no         # Unicode  BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID  AUDIO_ENABLE ?= no           # Audio output on port C6 diff --git a/quantum/template/template.c b/quantum/template/template.c index 5ef349583c..97f788654b 100644 --- a/quantum/template/template.c +++ b/quantum/template/template.c @@ -1,3 +1,18 @@ +/* Copyright 2017 REPLACE_WITH_YOUR_NAME + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #include "%KEYBOARD%.h"  void matrix_init_kb(void) { diff --git a/quantum/template/template.h b/quantum/template/template.h index cd78a54e3e..7e2b14f3c1 100644 --- a/quantum/template/template.h +++ b/quantum/template/template.h @@ -1,3 +1,18 @@ +/* Copyright 2017 REPLACE_WITH_YOUR_NAME + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */  #ifndef %KEYBOARD_UPPERCASE%_H  #define %KEYBOARD_UPPERCASE%_H @@ -5,7 +20,7 @@  // This a shortcut to help you visually see your layout.  // The following is an example using the Planck MIT layout -// The first section contains all of the arguements +// The first section contains all of the arguments  // The second converts the arguments into a two-dimensional array  #define KEYMAP( \      k00, k01, k02, \ diff --git a/quantum/variable_trace.c b/quantum/variable_trace.c index de580244c3..713747cfc2 100644 --- a/quantum/variable_trace.c +++ b/quantum/variable_trace.c @@ -1,3 +1,19 @@ +/* Copyright 2016 Fred Sundvik + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #include "variable_trace.h"  #include <stddef.h>  #include <string.h> diff --git a/quantum/variable_trace.h b/quantum/variable_trace.h index 46bd827861..dacc13858d 100644 --- a/quantum/variable_trace.h +++ b/quantum/variable_trace.h @@ -1,3 +1,19 @@ +/* Copyright 2016 Fred Sundvik + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ +  #ifndef VARIABLE_TRACE_H  #define VARIABLE_TRACE_H | 
