Skip to content

Commit 5f94df5

Browse files
committed
ESP32 adc config: add adc_unit
1 parent bc1ec9c commit 5f94df5

File tree

3 files changed

+27
-26
lines changed

3 files changed

+27
-26
lines changed

src/AudioTools/CoreAudio/AudioAnalog/AnalogConfigESP32V1.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ class AnalogConfigESP32V1 : public AudioInfo {
122122
uint8_t adc_attenuation = ADC_ATTEN_DB_12; // full voltage range of 3.9V
123123
uint8_t adc_bit_width = SOC_ADC_DIGI_MAX_BITWIDTH;
124124

125+
adc_unit_t adc_unit = ADC_UNIT;
125126
adc_channel_t adc_channels[NUM_ADC_CHANNELS] = ADC_CHANNELS;
126127

127128
/// Default constructor

src/AudioTools/CoreAudio/AudioAnalog/AnalogDriverESP32V1.h

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ class AnalogDriverESP32V1 : public AnalogDriverBase {
471471
if (!checkADCBitsPerSample()) return false;
472472

473473
if (adc_handle != nullptr) {
474-
LOGE("adc unit %u continuous is already initialized. Please call end() first!", ADC_UNIT);
474+
LOGE("adc unit %u continuous is already initialized. Please call end() first!", cfg.adc_unit);
475475
return false;
476476
}
477477

@@ -482,7 +482,7 @@ class AnalogDriverESP32V1 : public AnalogDriverBase {
482482
// Set the pins/channels to INIT state
483483
for (int i = 0; i < cfg.channels; i++) {
484484
adc_channel = cfg.adc_channels[i];
485-
adc_continuous_channel_to_io(ADC_UNIT, adc_channel, &io_pin);
485+
adc_continuous_channel_to_io(cfg.adc_unit, adc_channel, &io_pin);
486486
if (!perimanClearPinBus(io_pin)) {
487487
LOGE("perimanClearPinBus failed!");
488488
return false;
@@ -535,7 +535,7 @@ class AnalogDriverESP32V1 : public AnalogDriverBase {
535535
uint8_t ch = cfg.adc_channels[i];
536536
adc_pattern[i].atten = (uint8_t) cfg.adc_attenuation;
537537
adc_pattern[i].channel = (uint8_t)ch;
538-
adc_pattern[i].unit = (uint8_t) ADC_UNIT;
538+
adc_pattern[i].unit = (uint8_t) cfg.adc_unit;
539539
adc_pattern[i].bit_width = (uint8_t) cfg.adc_bit_width;
540540
}
541541

@@ -576,10 +576,10 @@ class AnalogDriverESP32V1 : public AnalogDriverBase {
576576
#ifdef ARDUINO
577577
for (int i = 0; i < cfg.channels; i++) {
578578
adc_channel = cfg.adc_channels[i];
579-
adc_continuous_channel_to_io(ADC_UNIT, adc_channel, &io_pin);
579+
adc_continuous_channel_to_io(cfg.adc_unit, adc_channel, &io_pin);
580580
// perimanSetPinBus: uint8_t pin, peripheral_bus_type_t type, void * bus, int8_t bus_num, int8_t bus_channel
581-
if (!perimanSetPinBus(io_pin, ESP32_BUS_TYPE_ADC_CONT, (void *)(ADC_UNIT + 1), ADC_UNIT, adc_channel)) {
582-
LOGE("perimanSetPinBus to Continuous an ADC Unit %u failed!", ADC_UNIT);
581+
if (!perimanSetPinBus(io_pin, ESP32_BUS_TYPE_ADC_CONT, (void *)(cfg.adc_unit + 1), cfg.adc_unit, adc_channel)) {
582+
LOGE("perimanSetPinBus to Continuous an ADC Unit %u failed!", cfg.adc_unit);
583583
return false;
584584
}
585585
}
@@ -662,7 +662,7 @@ class AnalogDriverESP32V1 : public AnalogDriverBase {
662662
for (int i = 0; i < cfg.channels; i++) {
663663
adc_channel_t adc_channel = cfg.adc_channels[i];
664664
int io_pin;
665-
adc_continuous_channel_to_io(ADC_UNIT, adc_channel, &io_pin);
665+
adc_continuous_channel_to_io(cfg.adc_unit, adc_channel, &io_pin);
666666
if (perimanGetPinBusType(io_pin) == ESP32_BUS_TYPE_ADC_CONT) {
667667
if (!perimanClearPinBus(io_pin)) {
668668
LOGE("perimanClearPinBus failed!");
@@ -702,9 +702,9 @@ class AnalogDriverESP32V1 : public AnalogDriverBase {
702702
// Lets make sure the adc channels are available
703703
for (int i = 0; i < cfg.channels; i++) {
704704
adc_channel = cfg.adc_channels[i];
705-
auto err = adc_continuous_channel_to_io(ADC_UNIT, adc_channel, &io_pin);
705+
auto err = adc_continuous_channel_to_io(cfg.adc_unit, adc_channel, &io_pin);
706706
if (err != ESP_OK) {
707-
LOGE("ADC channel %u is not available on ADC unit %u", adc_channel, ADC_UNIT);
707+
LOGE("ADC channel %u is not available on ADC unit %u", adc_channel, cfg.adc_unit);
708708
return false;
709709
} else {
710710
LOGI("ADC channel %u is on pin %u", adc_channel, io_pin);
@@ -761,25 +761,25 @@ class AnalogDriverESP32V1 : public AnalogDriverBase {
761761
#if ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED
762762
// curve fitting is preferred
763763
adc_cali_curve_fitting_config_t cali_config;
764-
cali_config.unit_id = ADC_UNIT;
764+
cali_config.unit_id = cfg.adc_unit;
765765
cali_config.atten = (adc_atten_t)cfg.adc_attenuation;
766766
cali_config.bitwidth = (adc_bitwidth_t)cfg.adc_bit_width;
767767
auto err = adc_cali_create_scheme_curve_fitting(&cali_config, &adc_cali_handle);
768768
#elif !defined(CONFIG_IDF_TARGET_ESP32H2)
769769
// line fitting is the alternative
770770
adc_cali_line_fitting_config_t cali_config;
771-
cali_config.unit_id = ADC_UNIT;
771+
cali_config.unit_id = cfg.adc_unit;
772772
cali_config.atten = (adc_atten_t)cfg.adc_attenuation;
773773
cali_config.bitwidth = (adc_bitwidth_t)cfg.adc_bit_width;
774774
auto err = adc_cali_create_scheme_line_fitting(&cali_config, &adc_cali_handle);
775775
#endif
776776
if (err != ESP_OK) {
777777
LOGE("creating calibration handle failed for ADC%d with atten %d and bitwidth %d",
778-
ADC_UNIT, cfg.adc_attenuation, cfg.adc_bit_width);
778+
cfg.adc_unit, cfg.adc_attenuation, cfg.adc_bit_width);
779779
return false;
780780
} else {
781781
LOGI("enabled calibration for ADC%d with atten %d and bitwidth %d",
782-
ADC_UNIT, cfg.adc_attenuation, cfg.adc_bit_width);
782+
cfg.adc_unit, cfg.adc_attenuation, cfg.adc_bit_width);
783783
}
784784
}
785785
return true;

src/AudioTools/CoreAudio/AudioAnalog/AnalogDriverESP32V2.h

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ class AnalogDriverESP32V1 : public AnalogDriverBase {
311311
if (!checkADCBitsPerSample()) return false;
312312

313313
if (adc_handle != nullptr) {
314-
LOGE("adc unit %u continuous is already initialized. Please call end() first!", ADC_UNIT);
314+
LOGE("adc unit %u continuous is already initialized. Please call end() first!", cfg.adc_unit);
315315
return false;
316316
}
317317

@@ -322,7 +322,7 @@ class AnalogDriverESP32V1 : public AnalogDriverBase {
322322
// Set the pins/channels to INIT state
323323
for (int i = 0; i < cfg.channels; i++) {
324324
adc_channel = cfg.adc_channels[i];
325-
adc_continuous_channel_to_io(ADC_UNIT, adc_channel, &io_pin);
325+
adc_continuous_channel_to_io(cfg.adc_unit, adc_channel, &io_pin);
326326
if (!perimanClearPinBus(io_pin)) {
327327
LOGE("perimanClearPinBus failed!");
328328
return false;
@@ -375,7 +375,7 @@ class AnalogDriverESP32V1 : public AnalogDriverBase {
375375
uint8_t ch = cfg.adc_channels[i];
376376
adc_pattern[i].atten = (uint8_t) cfg.adc_attenuation;
377377
adc_pattern[i].channel = (uint8_t)ch;
378-
adc_pattern[i].unit = (uint8_t) ADC_UNIT;
378+
adc_pattern[i].unit = (uint8_t) cfg.adc_unit;
379379
adc_pattern[i].bit_width = (uint8_t) cfg.adc_bit_width;
380380
}
381381

@@ -416,10 +416,10 @@ class AnalogDriverESP32V1 : public AnalogDriverBase {
416416
#ifdef ARDUINO
417417
for (int i = 0; i < cfg.channels; i++) {
418418
adc_channel = cfg.adc_channels[i];
419-
adc_continuous_channel_to_io(ADC_UNIT, adc_channel, &io_pin);
419+
adc_continuous_channel_to_io(cfg.adc_unit, adc_channel, &io_pin);
420420
// perimanSetPinBus: uint8_t pin, peripheral_bus_type_t type, void * bus, int8_t bus_num, int8_t bus_channel
421-
if (!perimanSetPinBus(io_pin, ESP32_BUS_TYPE_ADC_CONT, (void *)(ADC_UNIT + 1), ADC_UNIT, adc_channel)) {
422-
LOGE("perimanSetPinBus to Continuous an ADC Unit %u failed!", ADC_UNIT);
421+
if (!perimanSetPinBus(io_pin, ESP32_BUS_TYPE_ADC_CONT, (void *)(cfg.adc_unit + 1), cfg.adc_unit, adc_channel)) {
422+
LOGE("perimanSetPinBus to Continuous an ADC Unit %u failed!", cfg.adc_unit);
423423
return false;
424424
}
425425
}
@@ -485,7 +485,7 @@ class AnalogDriverESP32V1 : public AnalogDriverBase {
485485
for (int i = 0; i < cfg.channels; i++) {
486486
adc_channel_t adc_channel = cfg.adc_channels[i];
487487
int io_pin;
488-
adc_continuous_channel_to_io(ADC_UNIT, adc_channel, &io_pin);
488+
adc_continuous_channel_to_io(cfg.adc_unit, adc_channel, &io_pin);
489489
if (perimanGetPinBusType(io_pin) == ESP32_BUS_TYPE_ADC_CONT) {
490490
if (!perimanClearPinBus(io_pin)) {
491491
LOGE("perimanClearPinBus failed!");
@@ -525,9 +525,9 @@ class AnalogDriverESP32V1 : public AnalogDriverBase {
525525
// Lets make sure the adc channels are available
526526
for (int i = 0; i < cfg.channels; i++) {
527527
adc_channel = cfg.adc_channels[i];
528-
auto err = adc_continuous_channel_to_io(ADC_UNIT, adc_channel, &io_pin);
528+
auto err = adc_continuous_channel_to_io(cfg.adc_unit, adc_channel, &io_pin);
529529
if (err != ESP_OK) {
530-
LOGE("ADC channel %u is not available on ADC unit %u", adc_channel, ADC_UNIT);
530+
LOGE("ADC channel %u is not available on ADC unit %u", adc_channel, cfg.adc_unit);
531531
return false;
532532
} else {
533533
LOGI("ADC channel %u is on pin %u", adc_channel, io_pin);
@@ -585,25 +585,25 @@ class AnalogDriverESP32V1 : public AnalogDriverBase {
585585
#if ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED
586586
// curve fitting is preferred
587587
adc_cali_curve_fitting_config_t cali_config;
588-
cali_config.unit_id = ADC_UNIT;
588+
cali_config.unit_id = cfg.adc_unit;
589589
cali_config.atten = (adc_atten_t)cfg.adc_attenuation;
590590
cali_config.bitwidth = (adc_bitwidth_t)cfg.adc_bit_width;
591591
auto err = adc_cali_create_scheme_curve_fitting(&cali_config, &adc_cali_handle);
592592
#elif !defined(CONFIG_IDF_TARGET_ESP32H2)
593593
// line fitting is the alternative
594594
adc_cali_line_fitting_config_t cali_config;
595-
cali_config.unit_id = ADC_UNIT;
595+
cali_config.unit_id = cfg.adc_unit;
596596
cali_config.atten = (adc_atten_t)cfg.adc_attenuation;
597597
cali_config.bitwidth = (adc_bitwidth_t)cfg.adc_bit_width;
598598
auto err = adc_cali_create_scheme_line_fitting(&cali_config, &adc_cali_handle);
599599
#endif
600600
if (err != ESP_OK) {
601601
LOGE("creating calibration handle failed for ADC%d with atten %d and bitwidth %d",
602-
ADC_UNIT, cfg.adc_attenuation, cfg.adc_bit_width);
602+
cfg.adc_unit, cfg.adc_attenuation, cfg.adc_bit_width);
603603
return false;
604604
} else {
605605
LOGI("enabled calibration for ADC%d with atten %d and bitwidth %d",
606-
ADC_UNIT, cfg.adc_attenuation, cfg.adc_bit_width);
606+
cfg.adc_unit, cfg.adc_attenuation, cfg.adc_bit_width);
607607
}
608608
}
609609
return true;

0 commit comments

Comments
 (0)