diff options
| -rw-r--r-- | keyboard/atomic/keymaps/pvc/keymap.c | 373 | ||||
| -rw-r--r-- | keyboard/preonic/keymaps/default/keymap.c | 7 | ||||
| -rw-r--r-- | quantum/audio.c | 59 | ||||
| -rw-r--r-- | quantum/audio.h | 7 | ||||
| -rw-r--r-- | quantum/keymap_common.c | 15 | ||||
| -rw-r--r-- | quantum/musical_notes.h | 49 | ||||
| -rw-r--r-- | quantum/song_list.h | 23 | ||||
| -rw-r--r-- | tmk_core/common/action.c | 8 | ||||
| -rw-r--r-- | tmk_core/common/action_layer.c | 12 | ||||
| -rw-r--r-- | tmk_core/common/action_macro.c | 8 | ||||
| -rw-r--r-- | tmk_core/common/action_tapping.c | 11 | ||||
| -rw-r--r-- | tmk_core/common/command.c | 25 | ||||
| -rw-r--r-- | tmk_core/common/print.h | 12 | ||||
| -rw-r--r-- | tmk_core/protocol/lufa/lufa.c | 18 | 
14 files changed, 361 insertions, 266 deletions
| diff --git a/keyboard/atomic/keymaps/pvc/keymap.c b/keyboard/atomic/keymaps/pvc/keymap.c index c2081f525e..aaef6b041d 100644 --- a/keyboard/atomic/keymaps/pvc/keymap.c +++ b/keyboard/atomic/keymaps/pvc/keymap.c @@ -3,7 +3,7 @@  #ifdef AUDIO_ENABLE  #include "audio.h" -#include "musical_notes.h" +#include "song_list.h"  #endif @@ -17,6 +17,13 @@  #define M_LW 1  #define M_RS 2  #define M_FN 3 +#define M_T1 4 +#define M_T2 5 +#define M_T3 6 +#define M_T4 7 +#define M_TU 8 +#define M_TD 9 +#define M_DF 10  #define _______ KC_TRNS @@ -63,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {    { KC_NLCK, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  ___T___, ___T___  },    { KC_SLCK, KC_F13,  KC_F14,  KC_F15,  KC_F16,  KC_F17,  KC_F18,  KC_F19,  KC_F20,  KC_F21,  KC_F22,  KC_F23,  KC_F24,  KC_PAUS, KC_PSCR  },    { KC_CAPS, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_ACL0, KC_ACL2, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, ___T___, ___T___, KC_WH_U  }, -  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ___T___, ___T___, KC_MS_U, KC_WH_D  }, +  { _______, M(M_T1), M(M_T2), M(M_T3), M(M_T4), M(M_TU), M(M_TD), M(M_DF), _______, _______, _______, ___T___, ___T___, KC_MS_U, KC_WH_D  },    { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R  },   },   [_AD] = { /* ADJUST */ @@ -76,139 +83,124 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {  }; +  #ifdef AUDIO_ENABLE +float start_up[][2] = SONG(ODE_TO_JOY); +float tone_lw[][2] = { +	Q__NOTE(_C4   ) , +	Q__NOTE(_CS4  ) , +	Q__NOTE(_D4   ) , +	Q__NOTE(_DS4  ) , +	Q__NOTE(_E4   ) , +	Q__NOTE(_F4   ) , +	Q__NOTE(_FS4  ) , +	Q__NOTE(_G4   ) , +	Q__NOTE(_GS4  ) , +	Q__NOTE(_A4   ) , +	Q__NOTE(_AS4  ) , -float tone_lw[][2] = { -/* -Q_NOTE(_C1   ) , -Q_NOTE(_CS1  ) , -Q_NOTE(_D1   ) , -Q_NOTE(_DS1  ) , -Q_NOTE(_E1   ) , -Q_NOTE(_F1   ) , -Q_NOTE(_FS1  ) , -Q_NOTE(_G1   ) , -Q_NOTE(_GS1  ) , -Q_NOTE(_A1   ) , -Q_NOTE(_AS1  ) , -Q_NOTE(_B1   ) , -*/ - -Q_NOTE(_C4   ) , -Q_NOTE(_CS4  ) , -Q_NOTE(_D4   ) , -Q_NOTE(_DS4  ) , -Q_NOTE(_E4   ) , -Q_NOTE(_F4   ) , -Q_NOTE(_FS4  ) , -Q_NOTE(_G4   ) , -Q_NOTE(_GS4  ) , -Q_NOTE(_A4   ) , -Q_NOTE(_AS4  ) , -Q_NOTE(_B1   ) , - - -Q_NOTE(_C2   ) , -Q_NOTE(_CS2  ) , -Q_NOTE(_D2   ) , -Q_NOTE(_DS2  ) , -Q_NOTE(_E2   ) , -Q_NOTE(_F2   ) , -Q_NOTE(_FS2  ) , -Q_NOTE(_G2   ) , -Q_NOTE(_GS2  ) , -Q_NOTE(_A2   ) , -Q_NOTE(_AS2  ) , -Q_NOTE(_B2   ) , -Q_NOTE(_C3   ) , -Q_NOTE(_CS3  ) , -Q_NOTE(_D3   ) , -Q_NOTE(_DS3  ) , -Q_NOTE(_E3   ) , -Q_NOTE(_F3   ) , -Q_NOTE(_FS3  ) , -Q_NOTE(_G3   ) , -Q_NOTE(_GS3  ) , -Q_NOTE(_A3   ) , -Q_NOTE(_AS3  ) , -Q_NOTE(_B3   ) , -Q_NOTE(_C4   ) , -Q_NOTE(_CS4  ) , -Q_NOTE(_D4   ) , -Q_NOTE(_DS4  ) , -Q_NOTE(_E4   ) , -Q_NOTE(_F4   ) , -Q_NOTE(_FS4  ) , -Q_NOTE(_G4   ) , -Q_NOTE(_GS4  ) , -Q_NOTE(_A4   ) , -Q_NOTE(_AS4  ) , -Q_NOTE(_B4   ) , -Q_NOTE(_C5   ) , -Q_NOTE(_CS5  ) , -Q_NOTE(_D5   ) , -Q_NOTE(_DS5  ) , -Q_NOTE(_E5   ) , -Q_NOTE(_F5   ) , -Q_NOTE(_FS5  ) , -Q_NOTE(_G5   ) , -Q_NOTE(_GS5  ) , -Q_NOTE(_A5   ) , -Q_NOTE(_AS5  ) , -Q_NOTE(_B5   ) , -Q_NOTE(_C6   ) , -Q_NOTE(_CS6  ) , -Q_NOTE(_D6   ) , -Q_NOTE(_DS6  ) , -Q_NOTE(_E6   ) , -Q_NOTE(_F6   ) , -Q_NOTE(_FS6  ) , -Q_NOTE(_G6   ) , -Q_NOTE(_GS6  ) , -Q_NOTE(_A6   ) , -Q_NOTE(_AS6  ) , -Q_NOTE(_B6   ) , -Q_NOTE(_C7   ) , -Q_NOTE(_CS7  ) , -Q_NOTE(_D7   ) , -Q_NOTE(_DS7  ) , -Q_NOTE(_E7   ) , -Q_NOTE(_F7   ) , -Q_NOTE(_FS7  ) , -Q_NOTE(_G7   ) , -Q_NOTE(_GS7  ) , -Q_NOTE(_A7   ) , -Q_NOTE(_AS7  ) , -Q_NOTE(_B7   ) , -Q_NOTE(_C8   ) , -Q_NOTE(_CS8  ) , -Q_NOTE(_D8   ) , -Q_NOTE(_DS8  ) , -Q_NOTE(_E8   ) , -Q_NOTE(_F8   ) , -Q_NOTE(_FS8  ) , -Q_NOTE(_G8   ) , -Q_NOTE(_GS8  ) , -Q_NOTE(_A8   ) , -Q_NOTE(_AS8  ) , -Q_NOTE(_B8   ) , +	Q__NOTE(_B1   ) , +	Q__NOTE(_C2   ) , +	Q__NOTE(_CS2  ) , +	Q__NOTE(_D2   ) , +	Q__NOTE(_DS2  ) , +	Q__NOTE(_E2   ) , +	Q__NOTE(_F2   ) , +	Q__NOTE(_FS2  ) , +	Q__NOTE(_G2   ) , +	Q__NOTE(_GS2  ) , +	Q__NOTE(_A2   ) , +	Q__NOTE(_AS2  ) , +	Q__NOTE(_B2   ) , +	Q__NOTE(_C3   ) , +	Q__NOTE(_CS3  ) , +	Q__NOTE(_D3   ) , +	Q__NOTE(_DS3  ) , +	Q__NOTE(_E3   ) , +	Q__NOTE(_F3   ) , +	Q__NOTE(_FS3  ) , +	Q__NOTE(_G3   ) , +	Q__NOTE(_GS3  ) , +	Q__NOTE(_A3   ) , +	Q__NOTE(_AS3  ) , +	Q__NOTE(_B3   ) , +	Q__NOTE(_C4   ) , +	Q__NOTE(_CS4  ) , +	Q__NOTE(_D4   ) , +	Q__NOTE(_DS4  ) , +	Q__NOTE(_E4   ) , +	Q__NOTE(_F4   ) , +	Q__NOTE(_FS4  ) , +	Q__NOTE(_G4   ) , +	Q__NOTE(_GS4  ) , +	Q__NOTE(_A4   ) , +	Q__NOTE(_AS4  ) , +	Q__NOTE(_B4   ) , +	Q__NOTE(_C5   ) , +	Q__NOTE(_CS5  ) , +	Q__NOTE(_D5   ) , +	Q__NOTE(_DS5  ) , +	Q__NOTE(_E5   ) , +	Q__NOTE(_F5   ) , +	Q__NOTE(_FS5  ) , +	Q__NOTE(_G5   ) , +	Q__NOTE(_GS5  ) , +	Q__NOTE(_A5   ) , +	Q__NOTE(_AS5  ) , +	Q__NOTE(_B5   ) , +	Q__NOTE(_C6   ) , +	Q__NOTE(_CS6  ) , +	Q__NOTE(_D6   ) , +	Q__NOTE(_DS6  ) , +	Q__NOTE(_E6   ) , +	Q__NOTE(_F6   ) , +	Q__NOTE(_FS6  ) , +	Q__NOTE(_G6   ) , +	Q__NOTE(_GS6  ) , +	Q__NOTE(_A6   ) , +	Q__NOTE(_AS6  ) , +	Q__NOTE(_B6   ) , +	Q__NOTE(_C7   ) , +	Q__NOTE(_CS7  ) , +	Q__NOTE(_D7   ) , +	Q__NOTE(_DS7  ) , +	Q__NOTE(_E7   ) , +	Q__NOTE(_F7   ) , +	Q__NOTE(_FS7  ) , +	Q__NOTE(_G7   ) , +	Q__NOTE(_GS7  ) , +	Q__NOTE(_A7   ) , +	Q__NOTE(_AS7  ) , +	Q__NOTE(_B7   ) , +	Q__NOTE(_C8   ) , +	Q__NOTE(_CS8  ) , +	Q__NOTE(_D8   ) , +	Q__NOTE(_DS8  ) , +	Q__NOTE(_E8   ) , +	Q__NOTE(_F8   ) , +	Q__NOTE(_FS8  ) , +	Q__NOTE(_G8   ) , +	Q__NOTE(_GS8  ) , +	Q__NOTE(_A8   ) , +	Q__NOTE(_AS8  ) , +	Q__NOTE(_B8   ) ,  }; -float tone_rs[][2] = { -Q_NOTE(_A4   ) , -Q_NOTE(_A4   ) , -Q_NOTE(_A4   ) , -Q_NOTE(_A4   ) , -Q_NOTE(_AS8  ) , -Q_NOTE(_B8   ) , -}; +float tone_rs[][2] = SONG(ROCK_A_BYE_BABY); + +void matrix_init_user(void) { +	init_notes(); +	PLAY_NOTE_ARRAY(start_up, false, STACCATO); +	println("Matrix Init"); +}  #endif +  void update_quad_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3, uint8_t layer4, bool order)  {  	if (order) @@ -241,69 +233,82 @@ void update_quad_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3, uint8_t l  const uint16_t PROGMEM fn_actions[] = {  }; -//#define MUSIC_ARRAY_SIZE(x) (((int)(sizeof(x) / (sizeof(x[0][0])))) / 2)  const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)  { -  // MACRODOWN only works in this function -      switch(id) { -        case M_LW: -          if (record->event.pressed) { -            #ifdef AUDIO_ENABLE -              println("PlayNotes LW"); -              PLAY_NOTE_ARRAY(tone_lw, false, STACCATO); -            #endif -            layer_on(_LW); -            update_tri_layer(_LW, _RS, _FN); -          } else { -            layer_off(_LW); -            update_tri_layer(_LW, _RS, _FN); -          } -          break; -        case M_RS: -          if (record->event.pressed) { -            #ifdef AUDIO_ENABLE -              println("PlayNotes RS"); -              PLAY_NOTE_ARRAY(tone_rs, false, LEGATO); -            #endif -            layer_on(_RS); -            update_tri_layer(_LW, _RS, _FN); -          } else { -            layer_off(_RS); -            update_tri_layer(_LW, _RS, _FN); -          } -          break; -		default: -        	break; -      } -    return MACRO_NONE; -}; +	// MACRODOWN only works in this function +	switch(id) +	{ +		case M_LW: +			if (record->event.pressed) { +				#ifdef AUDIO_ENABLE +				PLAY_NOTE_ARRAY(tone_lw, false, STACCATO); +				#endif +				layer_on(_LW); +				update_tri_layer(_LW, _RS, _AD); +			} else { +				layer_off(_LW); +				update_tri_layer(_LW, _RS, _AD); +			} +			break; +		case M_RS: +			if (record->event.pressed) { +				#ifdef AUDIO_ENABLE +				PLAY_NOTE_ARRAY(tone_rs, false, LEGATO); +				#endif +				layer_on(_RS); +				update_tri_layer(_LW, _RS, _AD); +			} else { +				layer_off(_RS); +				update_tri_layer(_LW, _RS, _AD); +			} +			break; -#ifdef AUDIO_ENABLE -float start_up[][2] = { -Q_NOTE(_E4   ) , -Q_NOTE(_E4   ) , -Q_NOTE(_F4   ) , -Q_NOTE(_G4   ) , -Q_NOTE(_G4   ) , -Q_NOTE(_F4   ) , -Q_NOTE(_E4   ) , -Q_NOTE(_D4   ) , -Q_NOTE(_C4   ) , -Q_NOTE(_C4   ) , -Q_NOTE(_D4   ) , -Q_NOTE(_E4   ) , -H_NOTE(_E4   ) , -Q_NOTE(_D4   ) , -H_NOTE(_D4   ) , -}; -#endif +		case M_FN: +			if (record->event.pressed) { +				layer_on(_FN); +			} else { +				layer_off(_FN); +			} +			break; -void matrix_init_user(void) { -  #ifdef AUDIO_ENABLE -    init_notes(); -    PLAY_NOTE_ARRAY(start_up, false, STACCATO); -    println("Matrix Init"); -  #endif -} +		case M_T1: +			if (record->event.pressed) set_timbre(TIMBRE_12); +			break; + +		case M_T2: +			if (record->event.pressed) set_timbre(TIMBRE_25); +			break; + +		case M_T3: +			if (record->event.pressed) set_timbre(TIMBRE_50); +			break; + +		case M_T4: +			if (record->event.pressed) set_timbre(TIMBRE_75); +			break; + + +		case M_TU: +			if (record->event.pressed) increase_tempo(10); +			break; + +		case M_TD: +			if (record->event.pressed) decrease_tempo(10); +			break; + +		case M_DF: +			if (record->event.pressed) +			{ +				set_timbre(TIMBRE_DEFAULT); +				set_tempo(TEMPO_DEFAULT); +			} +			break; + +		default: +			break; + +	} +	return MACRO_NONE; +};
\ No newline at end of file diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c index 48bc72dab7..2591af9f02 100644 --- a/keyboard/preonic/keymaps/default/keymap.c +++ b/keyboard/preonic/keymaps/default/keymap.c @@ -224,6 +224,7 @@ float tone_music[][2] = {    {440.0*pow(2.0,(23)/12.0), 8},    {440.0*pow(2.0,(24)/12.0), 8}  }; +float ode_to_joy[][2] = SONG(ODE_TO_JOY);  #endif  void persistant_default_layer_set(uint16_t default_layer) { @@ -312,7 +313,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)          case 9:            if (record->event.pressed) {              #ifdef AUDIO_ENABLE -              PLAY_NOTE_ARRAY(tone_music, false, 0); +              init_notes(); +              set_tempo(150); +              PLAY_NOTE_ARRAY(ode_to_joy, false, .25);                layer_on(_MUSIC);              #endif            } @@ -339,6 +342,6 @@ void process_action_user(keyrecord_t *record) {  void matrix_init_user(void) {    #ifdef AUDIO_ENABLE      init_notes(); -    play_notes(&start_up, false, 0); +    PLAY_NOTE_ARRAY(start_up, false, 0);    #endif  } diff --git a/quantum/audio.c b/quantum/audio.c index 6bd6532a3a..e0413051a0 100644 --- a/quantum/audio.c +++ b/quantum/audio.c @@ -4,7 +4,7 @@  #include <avr/pgmspace.h>  #include <avr/interrupt.h>  #include <avr/io.h> - +#include "print.h"  #include "audio.h"  #include "keymap_common.h" @@ -57,9 +57,11 @@ bool notes = false;  bool note = false;  float note_frequency = 0;  float note_length = 0; +float note_tempo = TEMPO_DEFAULT; +float note_timbre = TIMBRE_DEFAULT;  uint16_t note_position = 0;  float (* notes_pointer)[][2]; -uint8_t notes_length; +uint8_t notes_count;  bool notes_repeat;  float notes_rest;  bool note_resting = false; @@ -255,7 +257,8 @@ ISR(TIMER3_COMPA_vect) {                      place = 0.0;                  }                  ICR3 = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)); // Set max to the period -                OCR3A = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)) >> 1 * duty_place; // Set compare to half the period +                OCR3A = (int)((((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)) * note_timbre); // Set compare to half the period +                //OCR3A = (int)(((double)F_CPU) / (frequencies[voice_place] * CPU_PRESCALER)) >> 1 * duty_place; // Set compare to half the period                  place++;                  // if (duty_counter > (frequencies[voice_place] / 500)) {                  //     duty_place = (duty_place % 3) + 1; @@ -288,7 +291,7 @@ ISR(TIMER3_COMPA_vect) {          #else              if (note_frequency > 0) {                  ICR3 = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)); // Set max to the period -                OCR3A = (int)(((double)F_CPU) / (note_frequency * CPU_PRESCALER)) >> 1; // Set compare to half the period +                OCR3A = (int)((((double)F_CPU) / (note_frequency * CPU_PRESCALER)) * note_timbre); // Set compare to half the period              } else {                  ICR3 = 0;                  OCR3A = 0; @@ -304,7 +307,7 @@ ISR(TIMER3_COMPA_vect) {              end_of_note = (note_position >= (note_length * 0x7FF));          if (end_of_note) {              current_note++; -            if (current_note >= notes_length) { +            if (current_note >= notes_count) {                  if (notes_repeat) {                      current_note = 0;                  } else { @@ -327,10 +330,10 @@ ISR(TIMER3_COMPA_vect) {                  note_resting = false;                  #ifdef PWM_AUDIO                      note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE; -                    note_length = (*notes_pointer)[current_note][1]; +                    note_length = (*notes_pointer)[current_note][1] * (note_tempo / 100);                  #else                      note_frequency = (*notes_pointer)[current_note][0]; -                    note_length = (*notes_pointer)[current_note][1] / 4; +                    note_length = ((*notes_pointer)[current_note][1] / 4) * (note_tempo / 100);                  #endif              }              note_position = 0; @@ -344,15 +347,16 @@ ISR(TIMER3_COMPA_vect) {      }  } -void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat, float n_rest) { +void play_notes(float (*np)[][2], uint8_t n_count, bool n_repeat, float n_rest) {  if (audio_config.enable) {      if (note)          stop_all_notes(); +    notes = true;      notes_pointer = np; -    notes_length = n_length; +    notes_count = n_count;      notes_repeat = n_repeat;      notes_rest = n_rest; @@ -360,10 +364,10 @@ if (audio_config.enable) {      current_note = 0;      #ifdef PWM_AUDIO          note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE; -        note_length = (*notes_pointer)[current_note][1]; +        note_length = (*notes_pointer)[current_note][1] * (note_tempo / 100);      #else          note_frequency = (*notes_pointer)[current_note][0]; -        note_length = (*notes_pointer)[current_note][1] / 4; +        note_length = ((*notes_pointer)[current_note][1] / 4) * (note_tempo / 100);      #endif      note_position = 0; @@ -375,7 +379,6 @@ if (audio_config.enable) {          TCCR3A |= _BV(COM3A1);      #endif -    notes = true;  }  } @@ -405,6 +408,7 @@ if (audio_config.enable && voices < 8) {      if (notes)          stop_all_notes(); +    note = true;      #ifdef PWM_AUDIO          freq = freq / SAMPLE_RATE;      #endif @@ -436,7 +440,34 @@ if (audio_config.enable && voices < 8) {          TCCR3A |= _BV(COM3A1);      #endif -    note = true;  } -}
\ No newline at end of file +} + +void set_timbre(float timbre) +{ +	note_timbre = timbre; +} + +void set_tempo(float tempo) +{ +	note_tempo = tempo; +} + +void decrease_tempo(uint8_t tempo_change) +{ +	note_tempo += (float) tempo_change; +} + +void increase_tempo(uint8_t tempo_change) +{ +	if (note_tempo - (float) tempo_change < 10) +		{ +			note_tempo = 10; +		} +	else +		{ +		note_tempo -= (float) tempo_change; +		} +} + diff --git a/quantum/audio.h b/quantum/audio.h index e1bc23ffed..05d314c940 100644 --- a/quantum/audio.h +++ b/quantum/audio.h @@ -3,6 +3,7 @@  #include <avr/io.h>  #include <util/delay.h>  #include "musical_notes.h" +#include "song_list.h"  #ifndef AUDIO_H  #define AUDIO_H @@ -24,8 +25,12 @@ void play_note(double freq, int vol);  void stop_note(double freq);  void stop_all_notes(void);  void init_notes(void); -void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat, float n_rest); +void play_notes(float (*np)[][2], uint8_t n_count, bool n_repeat, float n_rest); +void set_timbre(float timbre); +void set_tempo(float tempo); +void increase_tempo(uint8_t tempo_change); +void decrease_tempo(uint8_t tempo_change);  #define SCALE (int []){ 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), \ diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index d38e6fdb20..2001438b90 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -26,6 +26,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "backlight.h"  #include "keymap_midi.h"  #include "bootloader.h" +#include "eeconfig.h"  extern keymap_config_t keymap_config; @@ -33,15 +34,13 @@ extern keymap_config_t keymap_config;  #include <inttypes.h>  #ifdef AUDIO_ENABLE      #include "audio.h" +      #ifndef TONE_GOODBYE -    #define TONE_GOODBYE { \ -        {440.0*pow(2.0,(31)/12.0), 8}, \ -        {440.0*pow(2.0,(24)/12.0), 8}, \ -        {440.0*pow(2.0,(19)/12.0), 12}, \ -    }  -    #endif -    float tone_goodbye[][2] = TONE_GOODBYE; -#endif +    	#define TONE_GOODBYE OLKB_GOODBYE +    #endif /*! TONE_GOODBYE */ + +    float tone_goodbye[][2] = SONG(TONE_GOODBYE); +#endif /* AUDIO_ENABLE */  static action_t keycode_to_action(uint16_t keycode); diff --git a/quantum/musical_notes.h b/quantum/musical_notes.h index 837f6a069d..ccdc34f270 100644 --- a/quantum/musical_notes.h +++ b/quantum/musical_notes.h @@ -2,22 +2,38 @@  #define MUSICAL_NOTES_H  // Tempo Placeholder -#define TEMPO 120 +#define TEMPO_DEFAULT 100 + + +#define SONG(notes...) { notes }  // Note Types -#define WHOLE_NOTE(note)     {(NOTE##note), 64} -#define HALF_NOTE(note)      {(NOTE##note), 32} -#define QUARTER_NOTE(note)   {(NOTE##note), 16} -#define EIGHTH_NOTE(note)    {(NOTE##note), 8} -#define SIXTEENTH_NOTE(note) {(NOTE##note), 4} +#define MUSICAL_NOTE(note, duration)   {(NOTE##note), duration} +#define WHOLE_NOTE(note)               MUSICAL_NOTE(note, 64) +#define HALF_NOTE(note)                MUSICAL_NOTE(note, 32) +#define QUARTER_NOTE(note)             MUSICAL_NOTE(note, 16) +#define EIGHTH_NOTE(note)              MUSICAL_NOTE(note,  8) +#define SIXTEENTH_NOTE(note)           MUSICAL_NOTE(note,  4) + +#define WHOLE_DOT_NOTE(note)           MUSICAL_NOTE(note, 64+32) +#define HALF_DOT_NOTE(note)            MUSICAL_NOTE(note, 32+16) +#define QUARTER_DOT_NOTE(note)         MUSICAL_NOTE(note, 16+8) +#define EIGHTH_DOT_NOTE(note)          MUSICAL_NOTE(note,  8+4) +#define SIXTEENTH_DOT_NOTE(note)       MUSICAL_NOTE(note,  4+2) -// Note Types Short -#define W_NOTE(n) WHOLE_NOTE(n) -#define H_NOTE(n) HALF_NOTE(n) -#define Q_NOTE(n) QUARTER_NOTE(n) -#define E_NOTE(n) EIGTH_NOTE(n) -#define S_NOTE(n) SIXTEENTH_NOTE(n) +// Note Type Shortcuts +#define M__NOTE(note, duration)        MUSICAL_NOTE(note, duration) +#define W__NOTE(n)                     WHOLE_NOTE(n) +#define H__NOTE(n)                     HALF_NOTE(n) +#define Q__NOTE(n)                     QUARTER_NOTE(n) +#define E__NOTE(n)                     EIGHTH_NOTE(n) +#define S__NOTE(n)                     SIXTEENTH_NOTE(n) +#define WD_NOTE(n)                     WHOLE_DOT_NOTE(n) +#define HD_NOTE(n)                     HALF_DOT_NOTE(n) +#define QD_NOTE(n)                     QUARTER_DOT_NOTE(n) +#define ED_NOTE(n)                     EIGHTH_DOT_NOTE(n) +#define SD_NOTE(n)                     SIXTEENTH_DOT_NOTE(n)  // Note Styles  // Staccato makes sure there is a rest between each note. Think: TA TA TA @@ -25,6 +41,15 @@  #define STACCATO 0.01  #define LEGATO   0 +// Note Timbre +// Changes how the notes sound +#define TIMBRE_12       0.125 +#define TIMBRE_25       0.250 +#define TIMBRE_50       0.500 +#define TIMBRE_75       0.750 +#define TIMBRE_DEFAULT  TIMBRE_50 + +  // Notes - # = Octave  #define NOTE_REST         0.00  #define NOTE_C0          16.35 diff --git a/quantum/song_list.h b/quantum/song_list.h new file mode 100644 index 0000000000..b626c3fa6b --- /dev/null +++ b/quantum/song_list.h @@ -0,0 +1,23 @@ +#include "musical_notes.h" + +#ifndef SONG_LIST_H +#define SONG_LIST_H + +#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), \ +	Q__NOTE(_C4), Q__NOTE(_C4), Q__NOTE(_D4), Q__NOTE(_E4), \ +	QD_NOTE(_E4), E__NOTE(_D4), H__NOTE(_D4), + +#define ROCK_A_BYE_BABY                            \ +	QD_NOTE(_B4), E__NOTE(_D4), Q__NOTE(_B5),      \ +	H__NOTE(_A5), Q__NOTE(_G5),                    \ +	QD_NOTE(_B4), E__NOTE(_D5), Q__NOTE(_G5),      \ +	H__NOTE(_FS5), + +#define OLKB_GOODBYE \ +	E__NOTE(_E7),    \ +	E__NOTE(_A6),    \ +	ED_NOTE(_E6), + +#endif diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index f9e6c17dc3..0162fbd632 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -27,11 +27,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "action_util.h"  #include "action.h" -#ifdef DEBUG_ACTION +//#ifdef DEBUG_ACTION  #include "debug.h" -#else -#include "nodebug.h" -#endif +//#else +//#include "nodebug.h" +//#endif  void action_exec(keyevent_t event) diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c index e817c0d515..845fbbb210 100644 --- a/tmk_core/common/action_layer.c +++ b/tmk_core/common/action_layer.c @@ -4,14 +4,14 @@  #include "util.h"  #include "action_layer.h" -#ifdef DEBUG_ACTION +//#ifdef DEBUG_ACTION  #include "debug.h" -#else -#include "nodebug.h" -#endif +//#else +//#include "nodebug.h" +//#endif -/*  +/*   * Default Layer State   */  uint32_t default_layer_state = 0; @@ -52,7 +52,7 @@ void default_layer_xor(uint32_t state)  #ifndef NO_ACTION_LAYER -/*  +/*   * Keymap Layer State   */  uint32_t layer_state = 0; diff --git a/tmk_core/common/action_macro.c b/tmk_core/common/action_macro.c index 7726b11907..cc78c82327 100644 --- a/tmk_core/common/action_macro.c +++ b/tmk_core/common/action_macro.c @@ -19,11 +19,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "action_macro.h"  #include "wait.h" -#ifdef DEBUG_ACTION +//#ifdef DEBUG_ACTION  #include "debug.h" -#else -#include "nodebug.h" -#endif +//#else +//#include "nodebug.h" +//#endif  #ifndef NO_ACTION_MACRO diff --git a/tmk_core/common/action_tapping.c b/tmk_core/common/action_tapping.c index 826c233096..6b6fa1dfe2 100644 --- a/tmk_core/common/action_tapping.c +++ b/tmk_core/common/action_tapping.c @@ -6,11 +6,11 @@  #include "keycode.h"  #include "timer.h" -#ifdef DEBUG_ACTION +//#ifdef DEBUG_ACTION  #include "debug.h" -#else -#include "nodebug.h" -#endif +//#else +//#include "nodebug.h" +//#endif  #ifndef NO_ACTION_TAPPING @@ -139,7 +139,7 @@ bool process_tapping(keyrecord_t *keyp)                      if (event.pressed) {                          tapping_key.tap.interrupted = true;                      } -                    // enqueue  +                    // enqueue                      return false;                  }              } @@ -324,6 +324,7 @@ bool waiting_buffer_typed(keyevent_t event)      return false;  } +__attribute__((unused))  bool waiting_buffer_has_anykey_pressed(void)  {      for (uint8_t i = waiting_buffer_tail; i != waiting_buffer_head; i = (i + 1) % WAITING_BUFFER_SIZE) { diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c index b4cd3ca56b..7572b95979 100644 --- a/tmk_core/common/command.c +++ b/tmk_core/common/command.c @@ -122,7 +122,7 @@ static void command_common_help(void)  		STR(MAGIC_KEY_VERSION     ) ":	Version\n"  		STR(MAGIC_KEY_STATUS      ) ":	Status\n"  		STR(MAGIC_KEY_CONSOLE     ) ":	Activate Console Mode\n" -		 +  #if MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM  		STR(MAGIC_KEY_LAYER0      ) ":	Switch to Layer 0\n"  		STR(MAGIC_KEY_LAYER1      ) ":	Switch to Layer 1\n" @@ -136,11 +136,11 @@ static void command_common_help(void)  		STR(MAGIC_KEY_LAYER9      ) ":	Switch to Layer 9\n"  #endif -#if MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS							 +#if MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  		                            "F1-F10:	Switch to Layer 0-9 (F10 = L0)\n"  #endif -#if MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS							 +#if MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  		                            "0-9:	Switch to Layer 0-9\n"  #endif @@ -251,6 +251,7 @@ static void print_status(void)  #ifdef BOOTMAGIC_ENABLE  static void print_eeconfig(void)  { +#ifndef NO_PRINT      print("default_layer: "); print_dec(eeconfig_read_default_layer()); print("\n");      debug_config_t dc; @@ -279,9 +280,12 @@ static void print_eeconfig(void)      print("backlight_config.raw: "); print_hex8(bc.raw); print("\n");      print(".enable: "); print_dec(bc.enable); print("\n");      print(".level: "); print_dec(bc.level); print("\n"); -#endif +#endif /* BACKLIGHT_ENABLE */ + +#endif /* !NO_PRINT */ +  } -#endif +#endif /* BOOTMAGIC_ENABLE */  static bool command_common(uint8_t code)  { @@ -305,7 +309,7 @@ static bool command_common(uint8_t code)  #ifdef BOOTMAGIC_ENABLE  		// print stored eeprom config -        case MAGIC_KC(MAGIC_KEY_EEPROM):         +        case MAGIC_KC(MAGIC_KEY_EEPROM):              print("eeconfig:\n");              print_eeconfig();              break; @@ -369,7 +373,7 @@ static bool command_common(uint8_t code)              break;          // debug matrix toggle -        case MAGIC_KC(MAGIC_KEY_DEBUG_MATRIX):  +        case MAGIC_KC(MAGIC_KEY_DEBUG_MATRIX):              debug_matrix = !debug_matrix;              if (debug_matrix) {                  print("\nmatrix: on\n"); @@ -380,7 +384,7 @@ static bool command_common(uint8_t code)              break;          // debug keyboard toggle -        case MAGIC_KC(MAGIC_KEY_DEBUG_KBD):  +        case MAGIC_KC(MAGIC_KEY_DEBUG_KBD):              debug_keyboard = !debug_keyboard;              if (debug_keyboard) {                  print("\nkeyboard: on\n"); @@ -551,6 +555,7 @@ static uint8_t mousekey_param = 0;  static void mousekey_param_print(void)  { +#ifndef NO_PRINT      print("\n\t- Values -\n");      print("1: delay(*10ms): "); pdec(mk_delay); print("\n");      print("2: interval(ms): "); pdec(mk_interval); print("\n"); @@ -558,6 +563,8 @@ static void mousekey_param_print(void)      print("4: time_to_max: "); pdec(mk_time_to_max); print("\n");      print("5: wheel_max_speed: "); pdec(mk_wheel_max_speed); print("\n");      print("6: wheel_time_to_max: "); pdec(mk_wheel_time_to_max); print("\n"); +#endif /* !NO_PRINT */ +  }  //#define PRINT_SET_VAL(v)  print(#v " = "); print_dec(v); print("\n"); @@ -677,7 +684,7 @@ static void mousekey_console_help(void)            "pgdown:	-10\n"            "\n"            "speed = delta * max_speed * (repeat / time_to_max)\n"); -    xprintf("where delta: cursor=%d, wheel=%d\n"  +    xprintf("where delta: cursor=%d, wheel=%d\n"              "See http://en.wikipedia.org/wiki/Mouse_keys\n", MOUSEKEY_MOVE_DELTA,  MOUSEKEY_WHEEL_DELTA);  } diff --git a/tmk_core/common/print.h b/tmk_core/common/print.h index c0e9e14309..4f3dde65aa 100644 --- a/tmk_core/common/print.h +++ b/tmk_core/common/print.h @@ -2,17 +2,17 @@  /* Very basic print functions, intended to be used with usb_debug_only.c   * http://www.pjrc.com/teensy/   * Copyright (c) 2008 PJRC.COM, LLC - *  + *   * 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   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell   * copies of the Software, and to permit persons to whom the Software is   * furnished to do so, subject to the following conditions: - *  + *   * The above copyright notice and this permission notice shall be included in   * all copies or substantial portions of the Software. - *  + *   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -91,9 +91,9 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));  #else   /* NO_PRINT */ -#define xprintf -#define print -#define println +#define xprintf(fmt, ...) +#define print(s) +#define println(s)  #define print_set_sendchar(func)  #define print_dec(data)  #define print_decs(data) diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index 5d40dcf7b2..f03f9a9b92 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -1,4 +1,4 @@ -/*  +/*   * Copyright 2012 Jun Wako <[email protected]>   * This file is based on:   *     LUFA-120219/Demos/Device/Lowlevel/KeyboardMouse @@ -152,10 +152,10 @@ static void Console_Task(void)          {              /* Create a temporary buffer to hold the read in report from the host */              uint8_t ConsoleData[CONSOLE_EPSIZE]; -  +              /* Read Console Report Data */              Endpoint_Read_Stream_LE(&ConsoleData, sizeof(ConsoleData), NULL); -  +              /* Process Console Report Data */              //ProcessConsoleHIDReport(ConsoleData);          } @@ -183,10 +183,6 @@ static void Console_Task(void)      Endpoint_SelectEndpoint(ep);  } -#else -static void Console_Task(void) -{ -}  #endif @@ -216,7 +212,7 @@ void EVENT_USB_Device_Disconnect(void)      print("[D]");      /* For battery powered device */      USB_IsInitialized = false; -/* TODO: This doesn't work. After several plug in/outs can not be enumerated.  +/* TODO: This doesn't work. After several plug in/outs can not be enumerated.      if (USB_IsInitialized) {          USB_Disable();  // Disable all interrupts  	USB_Controller_Enable(); @@ -313,7 +309,7 @@ void EVENT_USB_Device_ConfigurationChanged(void)  #ifdef MIDI_ENABLE      ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE); -    ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE);     +    ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE);  #endif  } @@ -439,7 +435,7 @@ void EVENT_USB_Device_ControlRequest(void)  }  /******************************************************************************* - * Host driver  + * Host driver   ******************************************************************************/  static uint8_t keyboard_leds(void)  { @@ -563,7 +559,7 @@ static void send_consumer(uint16_t data)      bluefruit_serial_send(0x00);      bluefruit_serial_send(0x02);      bluefruit_serial_send((bitmap>>8)&0xFF); -    bluefruit_serial_send(bitmap&0xFF);  +    bluefruit_serial_send(bitmap&0xFF);      bluefruit_serial_send(0x00);      bluefruit_serial_send(0x00);      bluefruit_serial_send(0x00); | 
