mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-30 21:02:32 +01:00 
			
		
		
		
	Stop sounds when suspended (#11553)
* fix stopping audio on suspend vs. startup sound * trim firmware size * fix stuck audio on startup (ARM)
This commit is contained in:
		
							parent
							
								
									db11a2a1fd
								
							
						
					
					
						commit
						ae4ee7553a
					
				| @ -83,6 +83,7 @@ void increase_tempo(uint8_t tempo_change); | |||||||
| void decrease_tempo(uint8_t tempo_change); | void decrease_tempo(uint8_t tempo_change); | ||||||
| 
 | 
 | ||||||
| void audio_init(void); | void audio_init(void); | ||||||
|  | void audio_startup(void); | ||||||
| 
 | 
 | ||||||
| #ifdef PWM_AUDIO | #ifdef PWM_AUDIO | ||||||
| void play_sample(uint8_t* s, uint16_t l, bool r); | void play_sample(uint8_t* s, uint16_t l, bool r); | ||||||
|  | |||||||
| @ -227,7 +227,9 @@ void audio_init() { | |||||||
| 
 | 
 | ||||||
|         audio_initialized = true; |         audio_initialized = true; | ||||||
|     } |     } | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
|  | void audio_startup() { | ||||||
|     if (audio_config.enable) { |     if (audio_config.enable) { | ||||||
|         PLAY_SONG(startup_song); |         PLAY_SONG(startup_song); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -281,6 +281,12 @@ void audio_init() { | |||||||
|     dacStart(&DACD1, &dac1cfg1); |     dacStart(&DACD1, &dac1cfg1); | ||||||
|     dacStart(&DACD2, &dac1cfg2); |     dacStart(&DACD2, &dac1cfg2); | ||||||
| 
 | 
 | ||||||
|  |     /*
 | ||||||
|  |      * Start the note timer | ||||||
|  |      */ | ||||||
|  |     gptStart(&GPTD8, &gpt8cfg1); | ||||||
|  |     gptStartContinuous(&GPTD8, 2U); | ||||||
|  | 
 | ||||||
|     /*
 |     /*
 | ||||||
|      * Starting GPT6/7 driver, it is used for triggering the DAC. |      * Starting GPT6/7 driver, it is used for triggering the DAC. | ||||||
|      */ |      */ | ||||||
| @ -295,10 +301,12 @@ void audio_init() { | |||||||
| 
 | 
 | ||||||
|     audio_initialized = true; |     audio_initialized = true; | ||||||
| 
 | 
 | ||||||
|  |     stop_all_notes(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void audio_startup() { | ||||||
|     if (audio_config.enable) { |     if (audio_config.enable) { | ||||||
|         PLAY_SONG(startup_song); |         PLAY_SONG(startup_song); | ||||||
|     } else { |  | ||||||
|         stop_all_notes(); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -638,6 +646,9 @@ bool is_playing_notes(void) { return playing_notes; } | |||||||
| bool is_audio_on(void) { return (audio_config.enable != 0); } | bool is_audio_on(void) { return (audio_config.enable != 0); } | ||||||
| 
 | 
 | ||||||
| void audio_toggle(void) { | void audio_toggle(void) { | ||||||
|  |     if (audio_config.enable) { | ||||||
|  |         stop_all_notes(); | ||||||
|  |     } | ||||||
|     audio_config.enable ^= 1; |     audio_config.enable ^= 1; | ||||||
|     eeconfig_update_audio(audio_config.raw); |     eeconfig_update_audio(audio_config.raw); | ||||||
|     if (audio_config.enable) { |     if (audio_config.enable) { | ||||||
|  | |||||||
| @ -29,6 +29,11 @@ | |||||||
| 
 | 
 | ||||||
| #define CPU_PRESCALER 8 | #define CPU_PRESCALER 8 | ||||||
| 
 | 
 | ||||||
|  | #ifndef STARTUP_SONG | ||||||
|  | #    define STARTUP_SONG SONG(STARTUP_SOUND) | ||||||
|  | #endif | ||||||
|  | float startup_song[][2] = STARTUP_SONG; | ||||||
|  | 
 | ||||||
| // Timer Abstractions
 | // Timer Abstractions
 | ||||||
| 
 | 
 | ||||||
| // TIMSK3 - Timer/Counter #3 Interrupt Mask Register
 | // TIMSK3 - Timer/Counter #3 Interrupt Mask Register
 | ||||||
| @ -155,6 +160,12 @@ void audio_init() { | |||||||
|     audio_initialized = true; |     audio_initialized = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void audio_startup() { | ||||||
|  |     if (audio_config.enable) { | ||||||
|  |         PLAY_SONG(startup_song); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void stop_all_notes() { | void stop_all_notes() { | ||||||
|     if (!audio_initialized) { |     if (!audio_initialized) { | ||||||
|         audio_init(); |         audio_init(); | ||||||
|  | |||||||
| @ -656,6 +656,26 @@ void matrix_init_quantum() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void matrix_scan_quantum() { | void matrix_scan_quantum() { | ||||||
|  | #if defined(AUDIO_ENABLE) | ||||||
|  |     // There are some tasks that need to be run a little bit
 | ||||||
|  |     // after keyboard startup, or else they will not work correctly
 | ||||||
|  |     // because of interaction with the USB device state, which
 | ||||||
|  |     // may still be in flux...
 | ||||||
|  |     //
 | ||||||
|  |     // At the moment the only feature that needs this is the
 | ||||||
|  |     // startup song.
 | ||||||
|  |     static bool     delayed_tasks_run  = false; | ||||||
|  |     static uint16_t delayed_task_timer = 0; | ||||||
|  |     if (!delayed_tasks_run) { | ||||||
|  |         if (!delayed_task_timer) { | ||||||
|  |             delayed_task_timer = timer_read(); | ||||||
|  |         } else if (timer_elapsed(delayed_task_timer) > 300) { | ||||||
|  |             audio_startup(); | ||||||
|  |             delayed_tasks_run = true; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| #if defined(AUDIO_ENABLE) && !defined(NO_MUSIC_MODE) | #if defined(AUDIO_ENABLE) && !defined(NO_MUSIC_MODE) | ||||||
|     matrix_scan_music(); |     matrix_scan_music(); | ||||||
| #endif | #endif | ||||||
|  | |||||||
| @ -97,8 +97,7 @@ static void power_down(uint8_t wdto) { | |||||||
|     led_set(leds_off); |     led_set(leds_off); | ||||||
| 
 | 
 | ||||||
| #    ifdef AUDIO_ENABLE | #    ifdef AUDIO_ENABLE | ||||||
|     // This sometimes disables the start-up noise, so it's been disabled
 |     stop_all_notes(); | ||||||
|     // stop_all_notes();
 |  | ||||||
| #    endif /* AUDIO_ENABLE */ | #    endif /* AUDIO_ENABLE */ | ||||||
| #    if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) | #    if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) | ||||||
|     rgblight_suspend(); |     rgblight_suspend(); | ||||||
| @ -157,6 +156,7 @@ __attribute__((weak)) void suspend_wakeup_init_user(void) {} | |||||||
|  * FIXME: needs doc |  * FIXME: needs doc | ||||||
|  */ |  */ | ||||||
| __attribute__((weak)) void suspend_wakeup_init_kb(void) { suspend_wakeup_init_user(); } | __attribute__((weak)) void suspend_wakeup_init_kb(void) { suspend_wakeup_init_user(); } | ||||||
|  | 
 | ||||||
| /** \brief run immediately after wakeup
 | /** \brief run immediately after wakeup
 | ||||||
|  * |  * | ||||||
|  * FIXME: needs doc |  * FIXME: needs doc | ||||||
|  | |||||||
| @ -12,6 +12,10 @@ | |||||||
| #include "led.h" | #include "led.h" | ||||||
| #include "wait.h" | #include "wait.h" | ||||||
| 
 | 
 | ||||||
|  | #ifdef AUDIO_ENABLE | ||||||
|  | #    include "audio.h" | ||||||
|  | #endif /* AUDIO_ENABLE */ | ||||||
|  | 
 | ||||||
| #ifdef BACKLIGHT_ENABLE | #ifdef BACKLIGHT_ENABLE | ||||||
| #    include "backlight.h" | #    include "backlight.h" | ||||||
| #endif | #endif | ||||||
| @ -65,6 +69,9 @@ void suspend_power_down(void) { | |||||||
| #if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) | #if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE) | ||||||
|     rgblight_suspend(); |     rgblight_suspend(); | ||||||
| #endif | #endif | ||||||
|  | #ifdef AUDIO_ENABLE | ||||||
|  |     stop_all_notes(); | ||||||
|  | #endif /* AUDIO_ENABLE */ | ||||||
| 
 | 
 | ||||||
|     suspend_power_down_kb(); |     suspend_power_down_kb(); | ||||||
|     // on AVR, this enables the watchdog for 15ms (max), and goes to
 |     // on AVR, this enables the watchdog for 15ms (max), and goes to
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Joshua Diamond
						Joshua Diamond