@@ -190,9 +190,10 @@ class CodecConfig : public codec_config_t {
190190 */
191191class AudioDriver {
192192 public:
193+
193194 // / Starts the processing
194195 virtual bool begin (CodecConfig codecCfg, DriverPins &pins) {
195- AD_LOGD (" AudioDriver::begin" );
196+ AD_LOGI (" AudioDriver::begin" );
196197 p_pins = &pins;
197198 pins.setSPIActiveForSD (codecCfg.sd_active );
198199 if (!setConfig (codecCfg)){
@@ -206,27 +207,22 @@ class AudioDriver {
206207 }
207208 // / changes the configuration
208209 virtual bool setConfig (CodecConfig codecCfg) {
210+ AD_LOGI (" AudioDriver::setConfig" );
209211 codec_cfg = codecCfg;
210212 if (!init (codec_cfg)) {
211- AD_LOGE (" AudioDriver::begin:: init failed" );
213+ AD_LOGE (" AudioDriver init failed" );
212214 return false ;
213- } else {
214- AD_LOGD (" AudioDriver::begin::init succeeded" );
215- }
215+ }
216216 codec_mode_t codec_mode = codec_cfg.get_mode ();
217217 if (!controlState (codec_mode)) {
218- AD_LOGE (" AudioDriver::begin:: controlState failed" );
218+ AD_LOGE (" AudioDriver controlState failed" );
219219 return false ;
220- } else {
221- AD_LOGD (" AudioDriver::begin::controlState succeeded" );
222- }
220+ }
223221 bool result = configInterface (codec_mode, codec_cfg.i2s );
224222 if (!result) {
225- AD_LOGE (" AudioDriver::begin:: configInterface failed" );
223+ AD_LOGE (" AudioDriver configInterface failed" );
226224 return false ;
227- } else {
228- AD_LOGD (" AudioDriver::begin::configInterface succeeded" );
229- }
225+ }
230226 return result;
231227 }
232228 // / Ends the processing: shut down dac and adc
@@ -250,28 +246,32 @@ class AudioDriver {
250246 // / Determines if setInputVolume() is supported
251247 virtual bool isInputVolumeSupported () { return false ; }
252248 // / Provides the pin information
253- DriverPins &pins () { return *p_pins; }
249+ virtual DriverPins &pins () { return *p_pins; }
254250
255251 // / Sets the PA Power pin to active or inactive
256252 bool setPAPower (bool enable) {
253+ if (p_pins == nullptr ) {
254+ AD_LOGI (" pins are null" );
255+ return false ;
256+ }
257257 GpioPin pin = pins ().getPinID (PinFunction::PA);
258258 if (pin == -1 ) {
259+ AD_LOGI (" PinFunction::PA not defined" );
259260 return false ;
260261 }
261262 AD_LOGI (" setPAPower pin %d -> %d" , pin, enable);
262263 digitalWrite (pin, enable ? HIGH : LOW);
263264 return true ;
264265 }
265266
266- // / Gets the number of I2S Interfaces
267- virtual int getI2SCount () { return 1 ; }
267+ operator bool () {return p_pins != nullptr ;}
268268
269269 protected:
270270 CodecConfig codec_cfg;
271271 DriverPins *p_pins = nullptr ;
272272
273273 // / Determine the TwoWire object from the I2C config or use Wire
274- TwoWire *getI2C () {
274+ virtual TwoWire *getI2C () {
275275 if (p_pins == nullptr ) return &Wire;
276276 auto i2c = pins ().getI2CPins (PinFunction::CODEC);
277277 if (!i2c) {
@@ -281,7 +281,7 @@ class AudioDriver {
281281 return result != nullptr ? result : &Wire;
282282 }
283283
284- int getI2CAddress () {
284+ virtual int getI2CAddress () {
285285 if (p_pins == nullptr ) return -1 ;
286286 auto i2c = pins ().getI2CPins (PinFunction::CODEC);
287287 if (i2c) {
@@ -316,8 +316,8 @@ class AudioDriver {
316316class NoDriverClass : public AudioDriver {
317317 public:
318318 virtual bool begin (CodecConfig codecCfg, DriverPins &pins) {
319- codec_cfg = codecCfg;
320- p_pins = &pins;
319+ // codec_cfg = codecCfg;
320+ // p_pins = &pins;
321321 return true ;
322322 }
323323 virtual bool end (void ) { return true ; }
@@ -390,6 +390,7 @@ class AudioDriverAD1938Class : public AudioDriver {
390390 return true ;
391391 }
392392 virtual bool setConfig (CodecConfig codecCfg) {
393+ assert (p_pins != nullptr );
393394 bool result = begin (codecCfg, *p_pins);
394395 return result;
395396 }
@@ -428,7 +429,6 @@ class AudioDriverAD1938Class : public AudioDriver {
428429
429430 protected:
430431 AD1938 ad1938;
431- DriverPins *p_pins = nullptr ;
432432 int volume = 100 ;
433433 int volumes[8 ] = {100 };
434434};
@@ -563,6 +563,7 @@ class AudioDriverCS42448Class : public AudioDriver {
563563 cs42448.setMute (false );
564564 }
565565 } else {
566+ assert (p_pins != nullptr );
566567 result = begin (codecCfg, *p_pins);
567568 }
568569 return result;
@@ -594,7 +595,6 @@ class AudioDriverCS42448Class : public AudioDriver {
594595
595596 protected:
596597 CS42448 cs42448;
597- DriverPins *p_pins = nullptr ;
598598 int volume = 100 ;
599599 CodecConfig cfg;
600600};
@@ -1414,27 +1414,35 @@ class AudioDriverPCM3168Class : public AudioDriver {
14141414class AudioDriverLyratMiniClass : public AudioDriver {
14151415 public:
14161416 bool begin (CodecConfig codecCfg, DriverPins &pins) {
1417- int rc = 0 ;
1418- if (codecCfg.output_device != DAC_OUTPUT_NONE)
1419- rc += !dac.begin (codecCfg, pins);
1420- if (codecCfg.input_device != ADC_INPUT_NONE)
1421- rc += !adc.begin (codecCfg, pins);
1422- return rc == 0 ;
1417+ AD_LOGI (" AudioDriverLyratMiniClass::begin" );
1418+ p_pins = &pins;
1419+ codec_cfg = codecCfg;
1420+ bool ok = true ;
1421+ if (codecCfg.output_device != DAC_OUTPUT_NONE){
1422+ AD_LOGI (" starting DAC" );
1423+ ok = dac.begin (codecCfg, pins);
1424+ }
1425+ if (codecCfg.input_device != ADC_INPUT_NONE){
1426+ AD_LOGI (" starting ADC" );
1427+ ok = ok && adc.begin (codecCfg, pins);
1428+ }
1429+ if (!ok) {
1430+ AD_LOGI (" AudioDriverLyratMiniClass::begin failed" );
1431+ }
1432+ return ok;
14231433 }
14241434 bool end (void ) {
14251435 int rc = 0 ;
14261436 rc += dac.end ();
14271437 rc += adc.end ();
1428- return rc == 0 ;
1438+ return rc == 2 ;
14291439 }
14301440 bool setMute (bool enable) { return dac.setMute (enable); }
14311441 bool setVolume (int volume) { return dac.setVolume (volume); }
14321442 int getVolume () { return dac.getVolume (); }
14331443 bool setInputVolume (int volume) { return adc.setVolume (volume); }
14341444 int getInputVolume () { return adc.getVolume (); }
14351445 bool isInputVolumeSupported () { return true ; }
1436- // Separate ADC and DAC I2S
1437- int getI2SCount () override { return 2 ; }
14381446
14391447 protected:
14401448 AudioDriverES8311Class dac;
0 commit comments