@@ -353,14 +353,26 @@ class AudioDriverAD1938Class : public AudioDriver {
353
353
return result;
354
354
}
355
355
bool end (void ) override { return ad1938.end (); }
356
- bool setMute (bool enable) override { return ad1938.setMute (enable); }
356
+ bool setMute (bool mute) override { return ad1938.setMute (mute); }
357
+ // mutes an individual DAC
358
+ bool setMute (bool mute, int line) {
359
+ if (line > 7 ) return false ;
360
+ return ad1938.setVolumeDAC (line, mute ? 0.0 : (static_cast <float >(volumes[line]) / 100 .0f ));
361
+ }
362
+
357
363
// / Defines the Volume (in %) if volume is 0, mute is enabled,range is 0-100.
358
364
bool setVolume (int volume) override {
359
365
this ->volume = volume;
366
+ for (int j=0 ;j<8 ;j++){
367
+ volumes[j] = volume;
368
+ }
360
369
return ad1938.setVolume (static_cast <float >(volume) / 100 .0f );
361
370
}
362
- bool setVolume (int dac, float volume) {
363
- return ad1938.setVolumeDAC (dac, volume);
371
+ // / Defines the Volume per DAC (in %) if volume is 0, mute is enabled,range is 0-100.
372
+ bool setVolume (int volume, int line) {
373
+ if (line > 7 ) return false ;
374
+ volumes[line] = volume;
375
+ return ad1938.setVolumeDAC (static_cast <float >(volume) / 100 .0f , line);
364
376
}
365
377
366
378
int getVolume () override { return volume; }
@@ -375,6 +387,7 @@ class AudioDriverAD1938Class : public AudioDriver {
375
387
AD1938 ad1938;
376
388
DriverPins *p_pins = nullptr ;
377
389
int volume = 100 ;
390
+ int volumes[8 ] = {100 };
378
391
};
379
392
380
393
/* *
@@ -478,7 +491,7 @@ class AudioDriverCS43l22Class : public AudioDriver {
478
491
};
479
492
480
493
/* *
481
- * @brief Driver API for AD1938 TDS DAC/ADC
494
+ * @brief Driver API for CS42448 TDS DAC/ADC
482
495
* @author Phil Schatzmann
483
496
* @copyright GPLv3
484
497
*/
@@ -488,7 +501,7 @@ class AudioDriverCS42448Class : public AudioDriver {
488
501
cfg = codecCfg;
489
502
// setup pins
490
503
pins.begin ();
491
- // setup ad1938
504
+ // setup cs42448
492
505
cs42448.begin (cfg, getI2C (), getI2CAddress ());
493
506
cs42448.setMute (false );
494
507
return true ;
@@ -509,8 +522,8 @@ class AudioDriverCS42448Class : public AudioDriver {
509
522
}
510
523
bool end (void ) override { return cs42448.end (); }
511
524
bool setMute (bool enable) override { return cs42448.setMute (enable); }
512
- bool setMute (int channel, bool enable ) {
513
- return cs42448.setMuteDAC (channel , enable);
525
+ bool setMute (bool enable, int line ) {
526
+ return cs42448.setMuteDAC (line , enable);
514
527
}
515
528
// / Defines the Volume (in %) if volume is 0, mute is enabled,range is 0-100.
516
529
bool setVolume (int volume) override {
@@ -762,19 +775,27 @@ class AudioDriverES8374Class : public AudioDriver {
762
775
class AudioDriverES8388Class : public AudioDriver {
763
776
public:
764
777
bool setMute (bool mute) { return es8388_set_voice_mute (mute) == RESULT_OK; }
765
- // bool setMute(bool mute, int line) {
766
- // switch (line) {
767
- // case 1:
768
- // return es8388_config_output_device(DAC_OUTPUT_LINE1) == RESULT_OK;
769
- // break;
770
- // case 2:
771
- // return es8388_config_output_device(DAC_OUTPUT_LINE2) == RESULT_OK;
772
- // break;
773
- // default:
774
- // AD_LOGE("Invalid dac %d", volume);
775
- // return false;
776
- // }
777
- // }
778
+ // mute line: lines start at 0
779
+ bool setMute (bool mute, int line) {
780
+ bool line_active[2 ];
781
+ if (line > 1 ) {
782
+ AD_LOGD (" invalid line %d" , line);
783
+ return false ;
784
+ }
785
+ line_active[line] = !mute;
786
+ // mute is managed on line level, so deactivate global mute
787
+ setMute (false );
788
+ if (line_active[0 ] && line_active[1 ]) {
789
+ return es8388_config_output_device (DAC_OUTPUT_ALL) == RESULT_OK;
790
+ } else if (!line_active[0 ] && !line_active[1 ]) {
791
+ return es8388_config_output_device (DAC_OUTPUT_NONE) == RESULT_OK;
792
+ } else if (line_active[0 ]) {
793
+ return es8388_config_output_device (DAC_OUTPUT_LINE1) == RESULT_OK;
794
+ } else if (line_active[1 ]) {
795
+ return es8388_config_output_device (DAC_OUTPUT_LINE2) == RESULT_OK;
796
+ }
797
+ return false ;
798
+ }
778
799
bool setVolume (int volume) {
779
800
AD_LOGD (" volume %d" , volume);
780
801
return es8388_set_voice_volume (limitValue (volume)) == RESULT_OK;
0 commit comments