diff --git a/radio/src/targets/horus/audio_spi_driver.cpp b/radio/src/targets/horus/audio_spi_driver.cpp index 32ef0f906..4fded888d 100644 --- a/radio/src/targets/horus/audio_spi_driver.cpp +++ b/radio/src/targets/horus/audio_spi_driver.cpp @@ -134,6 +134,12 @@ void audioSpiInit(void) SPI_I2S_ClearFlag(AUDIO_SPI, SPI_I2S_FLAG_TXE); } +void audioWaitReady() +{ + // The audio amp needs ~2s to start + RTOS_WAIT_MS(2000); // 2s +} + void audioSpiSetSpeed(uint8_t speed) { AUDIO_SPI->CR1 &= 0xFFC7; // Fsck=Fcpu/256 diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index 18025d13b..c68793d38 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -564,11 +564,7 @@ void audioConsumeCurrentBuffer(); #define audioEnableIrq() // interrupts must stay enabled on Horus #if defined(PCBX12S) #define setSampleRate(freq) -inline void audioWaitReady() -{ - // The audio amp needs ~2s to start - RTOS_WAIT_MS(2000); // 2s -} +void audioWaitReady(); #else void setSampleRate(uint32_t frequency); #define audioWaitReady() diff --git a/radio/src/targets/nv14/audio_spi_driver.cpp b/radio/src/targets/nv14/audio_spi_driver.cpp index a71bbd38f..f21b5c46f 100644 --- a/radio/src/targets/nv14/audio_spi_driver.cpp +++ b/radio/src/targets/nv14/audio_spi_driver.cpp @@ -378,26 +378,37 @@ void audioAmpInit() bool hardResetDone = false; bool softResetDone = false; -bool isAudioReady() { +bool isAudioReady() +{ return hardResetDone && softResetDone; } -bool audioChipReset(){ +void audioWaitReady() +{ + while (!isAudioReady()) { + audioChipReset(); + RTOS_WAIT_MS(1000); + } +} + +bool audioChipReset() +{ audioSpiSetSpeed(SPI_SPEED_64); - if(!hardResetDone) { + if (!hardResetDone) { hardResetDone = audioHardReset() > 0; softResetDone = false; } - if(!softResetDone) { + if (!softResetDone) { softResetDone = audioSoftReset() > 0; } audioSpiSetSpeed(SPI_SPEED_8); - if(hardResetDone && softResetDone) { + if (hardResetDone && softResetDone) { audioSendRiffHeader(); audioOn(); } return hardResetDone && softResetDone; } + void audioInit() { audioAmpInit(); @@ -422,9 +433,10 @@ void audioSetCurrentBuffer(const AudioBuffer * buffer) void audioConsumeCurrentBuffer() { - if(!hardResetDone || !softResetDone) { + if (!hardResetDone || !softResetDone) { return; } + if (newVolume >= 0) { uint8_t value = newVolume; audioSpiWriteCmd(SPI_VOL, (value << 8) + value); diff --git a/radio/src/targets/nv14/board.h b/radio/src/targets/nv14/board.h index 90dc4e828..6de6c827d 100644 --- a/radio/src/targets/nv14/board.h +++ b/radio/src/targets/nv14/board.h @@ -464,13 +464,7 @@ void audioOn(); void audioOff(); bool isAudioReady(); bool audioChipReset(); -inline void audioWaitReady() -{ - while (!isAudioReady()) { - audioChipReset(); - RTOS_WAIT_MS(1000); - } -} +void audioWaitReady(); #define SPI_SPEED_2 0 #define SPI_SPEED_4 1