From 1f778060174b324902a1d3add1da253ebfc5c9fa Mon Sep 17 00:00:00 2001 From: bsongis Date: Wed, 10 Sep 2014 19:56:46 +0200 Subject: [PATCH] #1692 - We flush the queue instead of stopping the audio (the TADA sound is cut otherwise) --- radio/src/audio_arm.cpp | 9 +++++++++ radio/src/audio_arm.h | 3 +++ radio/src/audio_avr.h | 1 + radio/src/eeprom_raw.cpp | 2 +- radio/src/eeprom_rlc.cpp | 2 +- 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index b2dae928c..497597df7 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -931,6 +931,15 @@ void AudioQueue::stopAll() CoLeaveMutexSection(audioMutex); } +void AudioQueue::flush() +{ + CoEnterMutexSection(audioMutex); + widx = ridx; // clean the queue + varioContext.clear(); + backgroundContext.clear(); + CoLeaveMutexSection(audioMutex); +} + void audioEvent(uint8_t e, uint16_t f) { #if defined(HAPTIC) diff --git a/radio/src/audio_arm.h b/radio/src/audio_arm.h index 187f46e58..ae9ef06a3 100644 --- a/radio/src/audio_arm.h +++ b/radio/src/audio_arm.h @@ -163,6 +163,8 @@ class AudioQueue { void stopAll(); + void flush(); + void pause(uint16_t tLen); void stopSD(); @@ -328,6 +330,7 @@ void pushPrompt(uint16_t prompt, uint8_t id=0); #define PLAY_FILE(f, flags, id) audioQueue.playFile((f), (flags), (id)) #define STOP_PLAY(id) audioQueue.stopPlay((id)) #define AUDIO_RESET() audioQueue.stopAll() +#define AUDIO_FLUSH() audioQueue.flush() #if defined(SDCARD) extern tmr10ms_t timeAutomaticPromptsSilence; diff --git a/radio/src/audio_avr.h b/radio/src/audio_avr.h index 28ac65afa..5364c7369 100644 --- a/radio/src/audio_avr.h +++ b/radio/src/audio_avr.h @@ -154,6 +154,7 @@ void audioDefevent(uint8_t e); #define AUDIO_HEARTBEAT() audio.heartbeat() #define IS_AUDIO_BUSY() audio.busy() #define AUDIO_RESET() +#define AUDIO_FLUSH() #define PLAY_PHASE_OFF(phase) #define PLAY_PHASE_ON(phase) diff --git a/radio/src/eeprom_raw.cpp b/radio/src/eeprom_raw.cpp index 1af5cf3c8..5b8e1fd90 100644 --- a/radio/src/eeprom_raw.cpp +++ b/radio/src/eeprom_raw.cpp @@ -385,7 +385,7 @@ void eeLoadModel(uint8_t id) read32_eeprom_data((File_system[id+1].block_no << 12) + sizeof(struct t_eeprom_header), (uint8_t *)&g_model, size) ; } - AUDIO_RESET(); + AUDIO_FLUSH(); flightReset(); logicalSwitchesReset(); diff --git a/radio/src/eeprom_rlc.cpp b/radio/src/eeprom_rlc.cpp index 93bfa99de..e6c69b0ef 100644 --- a/radio/src/eeprom_rlc.cpp +++ b/radio/src/eeprom_rlc.cpp @@ -969,7 +969,7 @@ void eeLoadModel(uint8_t id) eeCheck(true); } - AUDIO_RESET(); + AUDIO_FLUSH(); flightReset(); logicalSwitchesReset();