make sure setrate can be called for default value

This commit is contained in:
ChuckMash 2023-12-17 06:10:48 -08:00 committed by GitHub
parent f72d75e267
commit 4d76f39878
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 1 deletions

View File

@ -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;
}

View File

@ -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;