From 0b23223516ed9ec6b3ff99ecdbde4172cee15975 Mon Sep 17 00:00:00 2001 From: Phil Schatzmann Date: Fri, 8 Sep 2023 16:32:49 +0200 Subject: [PATCH] AnalogDriverESP32 cleanup --- src/AudioAnalog/AnalogAudioBase.h | 78 ++++-------------------------- src/AudioAnalog/AnalogAudioESP32.h | 53 ++++++++++++++++++-- src/AudioConfig.h | 2 - 3 files changed, 60 insertions(+), 73 deletions(-) diff --git a/src/AudioAnalog/AnalogAudioBase.h b/src/AudioAnalog/AnalogAudioBase.h index 36ab3768c3..3131f4470f 100644 --- a/src/AudioAnalog/AnalogAudioBase.h +++ b/src/AudioAnalog/AnalogAudioBase.h @@ -34,27 +34,18 @@ class AnalogConfig : public AudioInfo { bool auto_clear = I2S_AUTO_CLEAR; bool uninstall_driver_on_end = true; int mode_internal; - - AnalogConfig() { - sample_rate = 44100; - bits_per_sample = 16; - channels = 2; - this->rx_tx_mode = TX_MODE; - // enable both channels - mode_internal = (I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN); - } + int adc_pin; /// Default constructor - AnalogConfig(RxTxMode rxtxMode) { + AnalogConfig(RxTxMode rxtxMode=TX_MODE) { sample_rate = 44100; bits_per_sample = 16; channels = 2; rx_tx_mode = rxtxMode; if (rx_tx_mode == RX_MODE) { mode_internal = (I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_ADC_BUILT_IN); - setInputPin1(PIN_ADC1); + adc_pin = PIN_ADC1; auto_clear = false; -// setInputPin2(PIN_ADC2); LOGI("I2S_MODE_ADC_BUILT_IN"); } else { mode_internal = (I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN); @@ -65,72 +56,23 @@ class AnalogConfig : public AudioInfo { /// Copy constructor AnalogConfig(const AnalogConfig &cfg) = default; - /// Defines an alternative input pin (for the left channel) - void setInputPin1(int pin=PIN_ADC1){ - setInputPin1(pin,0); - } - void logInfo() { AudioInfo::logInfo(); if (rx_tx_mode == TX_MODE){ LOGI("analog left output pin: %d", 25); LOGI("analog right output pin: %d", 26); } else { - LOGI("input pin1: %d", adc_pin[0]); - if (channels==2){ - LOGI("input pin2: %d", adc_pin[1]); - } + LOGI("input pin1: %d", adc_pin); } } - protected: - // input values - int adc_pin[2]; - adc_unit_t adc_unit[2]; - adc1_channel_t adc_channel[2]; - - /// Defines the current ADC pin. The following GPIO pins are supported: GPIO32-GPIO39 - void setInputPin1(int gpio, int channelIdx){ - this->adc_pin[channelIdx] = gpio; - switch(gpio){ - case 32: - adc_unit[channelIdx] = ADC_UNIT_1; - adc_channel[channelIdx] = ADC1_GPIO32_CHANNEL; - break; - case 33: - adc_unit[channelIdx] = ADC_UNIT_1; - adc_channel[channelIdx] = ADC1_GPIO33_CHANNEL; - break; - case 34: - adc_unit[channelIdx] = ADC_UNIT_1; - adc_channel[channelIdx] = ADC1_GPIO34_CHANNEL; - break; - case 35: - adc_unit[channelIdx] = ADC_UNIT_1; - adc_channel[channelIdx] = ADC1_GPIO35_CHANNEL; - break; - case 36: - adc_unit[channelIdx] = ADC_UNIT_1; - adc_channel[channelIdx] = ADC1_GPIO36_CHANNEL; - break; - case 37: - adc_unit[channelIdx] = ADC_UNIT_1; - adc_channel[channelIdx] = ADC1_GPIO37_CHANNEL; - break; - case 38: - adc_unit[channelIdx] = ADC_UNIT_1; - adc_channel[channelIdx] = ADC1_GPIO38_CHANNEL; - break; - case 39: - adc_unit[channelIdx] = ADC_UNIT_1; - adc_channel[channelIdx] = ADC1_GPIO39_CHANNEL; - break; + /// Defines an alternative input pin (for the left channel) + void setInputPin1(int pin){ + this->adc_pin = pin; + } - default: - LOGE( "%s - pin GPIO%d is not supported", __func__,gpio); - } - } #else + AnalogConfig() { sample_rate = 44100; bits_per_sample = 16; @@ -143,7 +85,7 @@ class AnalogConfig : public AudioInfo { AnalogConfig(RxTxMode rxtxMode) : AnalogConfig() { rx_tx_mode = rxtxMode; } - int start_pin = PIN_ANALOG_START; + int start_pin = PIN_ANALOG_START; #endif diff --git a/src/AudioAnalog/AnalogAudioESP32.h b/src/AudioAnalog/AnalogAudioESP32.h index 6ea55727f7..1e9b017e09 100644 --- a/src/AudioAnalog/AnalogAudioESP32.h +++ b/src/AudioAnalog/AnalogAudioESP32.h @@ -35,8 +35,7 @@ static inline uint16_t convert8DAC(int64_t value, int value_bits_per_sample){ class AnalogDriverESP32 : public AnalogDriverBase { public: /// Default constructor - AnalogDriverESP32() { - } + AnalogDriverESP32() = default; /// Destructor virtual ~AnalogDriverESP32() { @@ -93,8 +92,10 @@ class AnalogDriverESP32 : public AnalogDriverBase { switch (cfg.rx_tx_mode) { case RX_MODE: LOGI("RX_MODE"); + + setupInputPin(cfg.adc_pin); - if (i2s_set_adc_mode(cfg.adc_unit[0], cfg.adc_channel[0])!=ESP_OK) { + if (i2s_set_adc_mode(adc_unit, adc_channel)!=ESP_OK) { LOGE( "%s - %s", __func__, "i2s_driver_install"); return false; } @@ -207,6 +208,52 @@ class AnalogDriverESP32 : public AnalogDriverBase { bool is_driver_installed = false; size_t result=0; + // input values + adc_unit_t adc_unit; + adc1_channel_t adc_channel; + + /// Defines the current ADC pin. The following GPIO pins are supported: GPIO32-GPIO39 + void setupInputPin(int gpio){ + TRACED(); + + switch(gpio){ + case 32: + adc_unit = ADC_UNIT_1; + adc_channel = ADC1_GPIO32_CHANNEL; + break; + case 33: + adc_unit = ADC_UNIT_1; + adc_channel = ADC1_GPIO33_CHANNEL; + break; + case 34: + adc_unit = ADC_UNIT_1; + adc_channel = ADC1_GPIO34_CHANNEL; + break; + case 35: + adc_unit = ADC_UNIT_1; + adc_channel = ADC1_GPIO35_CHANNEL; + break; + case 36: + adc_unit = ADC_UNIT_1; + adc_channel = ADC1_GPIO36_CHANNEL; + break; + case 37: + adc_unit = ADC_UNIT_1; + adc_channel = ADC1_GPIO37_CHANNEL; + break; + case 38: + adc_unit = ADC_UNIT_1; + adc_channel = ADC1_GPIO38_CHANNEL; + break; + case 39: + adc_unit = ADC_UNIT_1; + adc_channel = ADC1_GPIO39_CHANNEL; + break; + + default: + LOGE( "%s - pin GPIO%d is not supported", __func__,gpio); + } + } // The internal DAC only supports 8 bit values - so we need to convert the data size_t outputStereo(const void *src, size_t size_bytes) { diff --git a/src/AudioConfig.h b/src/AudioConfig.h index b960edb494..e246a36c7b 100644 --- a/src/AudioConfig.h +++ b/src/AudioConfig.h @@ -211,7 +211,6 @@ #define SOFT_MUTE_VALUE 0 #define PIN_CS SS #define PIN_ADC1 34 -#define PIN_ADC2 14 #define I2S_AUTO_CLEAR true @@ -275,7 +274,6 @@ typedef uint32_t eps32_i2s_sample_rate_type; #define SOFT_MUTE_VALUE 0 #define PIN_CS SS #define PIN_ADC1 21 -#define PIN_ADC2 22 #define I2S_AUTO_CLEAR true