From 4d76f39878667e27574343c0500f17edf5f5a588 Mon Sep 17 00:00:00 2001 From: ChuckMash <86080247+ChuckMash@users.noreply.github.com> Date: Sun, 17 Dec 2023 06:10:48 -0800 Subject: [PATCH] make sure setrate can be called for default value --- src/AudioOutputI2S.cpp | 10 +++++++++- src/AudioOutputI2S.h | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/AudioOutputI2S.cpp b/src/AudioOutputI2S.cpp index 01cf92b..584b4fc 100644 --- a/src/AudioOutputI2S.cpp +++ b/src/AudioOutputI2S.cpp @@ -33,6 +33,7 @@ AudioOutputI2S::AudioOutputI2S(int port, int output_mode, int dma_buf_count, int { this->portNo = port; this->i2sOn = false; + this->i2sRateSet = false; this->dma_buf_count = dma_buf_count; if (output_mode != EXTERNAL_I2S && output_mode != INTERNAL_DAC && output_mode != INTERNAL_PDM) { output_mode = EXTERNAL_I2S; @@ -56,6 +57,7 @@ AudioOutputI2S::AudioOutputI2S(int port, int output_mode, int dma_buf_count, int #elif defined(ARDUINO_ARCH_RP2040) AudioOutputI2S::AudioOutputI2S(long sampleRate, pin_size_t sck, pin_size_t data) { i2sOn = false; + i2sRateSet = false; mono = false; bps = 16; channels = 2; @@ -130,11 +132,12 @@ bool AudioOutputI2S::SetRate(int hz) { // TODO - have a list of allowable rates from constructor, check them - if(this->hertz == hz){ // hz already set to this + if(this->hertz == hz && this->i2sRateSet){ // hz already set to this return true; } this->hertz = hz; + if (i2sOn) { #ifdef ESP32 @@ -145,6 +148,10 @@ bool AudioOutputI2S::SetRate(int hz) i2s.setFrequency(hz); #endif } + + if(!this->i2sRateSet){ + this->i2sRateSet = true; + } return true; } @@ -406,5 +413,6 @@ bool AudioOutputI2S::stop() i2s.end(); #endif i2sOn = false; + i2sRateSet = false; return true; } diff --git a/src/AudioOutputI2S.h b/src/AudioOutputI2S.h index 015a91b..e01950a 100644 --- a/src/AudioOutputI2S.h +++ b/src/AudioOutputI2S.h @@ -62,10 +62,12 @@ class AudioOutputI2S : public AudioOutput bool mono; int lsb_justified; bool i2sOn; + bool i2sRateSet; int dma_buf_count; int use_apll; bool use_mclk; bool swap_clocks; + // We can restore the old values and free up these pins when in NoDAC mode uint32_t orig_bck; uint32_t orig_ws;