/* audio is2 support for ESP32-S3 box and box lite Copyright (C) 2022 Gerhard Mutz and Theo Arends This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifdef ESP32 #ifdef ESP32S3_BOX #include #include #include #include #include #define S3BOX_APWR_GPIO 46 void S3boxAudioPower(uint8_t pwr) { digitalWrite(S3BOX_APWR_GPIO, pwr); } // box lite dac init uint32_t ES8156_init() { uint32_t ret_val = ESP_OK; if (I2cSetDevice(ES8156_ADDR, 1)) { I2cSetActiveFound(ES8156_ADDR, "ES8156-I2C", 1); audio_hal_codec_config_t cfg = { .i2s_iface = { .mode = AUDIO_HAL_MODE_SLAVE, .bits = AUDIO_HAL_BIT_LENGTH_16BITS, } }; ret_val |= es8156_codec_init(&Wire1, &cfg); ret_val |= es8156_codec_set_voice_volume(75); } return ret_val; } // box lite adc init uint32_t es7243e_init() { uint32_t ret_val = ESP_OK; if (I2cSetDevice(ES7243_ADDR, 1)) { I2cSetActiveFound(ES7243_ADDR, "ES7243e-I2C", 1); audio_hal_codec_config_t cfg = { .i2s_iface = { .mode = AUDIO_HAL_MODE_SLAVE, .bits = AUDIO_HAL_BIT_LENGTH_16BITS, } }; ret_val |= es7243e_adc_init(&Wire1, &cfg); } return ret_val; } // box adc init uint32_t es7210_init() { uint32_t ret_val = ESP_OK; if (I2cSetDevice(ES7210_ADDR, 1)) { I2cSetActiveFound(ES7210_ADDR, "ES7210-I2C", 1); audio_hal_codec_config_t cfg = { .adc_input = AUDIO_HAL_ADC_INPUT_ALL, .codec_mode = AUDIO_HAL_CODEC_MODE_ENCODE, .i2s_iface = { .mode = AUDIO_HAL_MODE_SLAVE, .fmt = AUDIO_HAL_I2S_NORMAL, .samples = AUDIO_HAL_16K_SAMPLES, .bits = AUDIO_HAL_BIT_LENGTH_16BITS, }, }; ret_val |= es7210_adc_init(&Wire1, &cfg); ret_val |= es7210_adc_config_i2s(cfg.codec_mode, &cfg.i2s_iface); ret_val |= es7210_adc_set_gain((es7210_input_mics_t)(ES7210_INPUT_MIC1 | ES7210_INPUT_MIC2), (es7210_gain_value_t) GAIN_37_5DB); ret_val |= es7210_adc_set_gain((es7210_input_mics_t)(ES7210_INPUT_MIC3 | ES7210_INPUT_MIC4), (es7210_gain_value_t) GAIN_0DB); ret_val |= es7210_adc_ctrl_state(cfg.codec_mode, AUDIO_HAL_CTRL_START); } return ret_val; } // box dac init uint32_t ES8311_init() { uint32_t ret_val = ESP_OK; if (I2cSetDevice(ES8311_ADDR, 1)) { I2cSetActiveFound(ES8311_ADDR, "ES8311-I2C", 1); audio_hal_codec_config_t cfg = { .dac_output = AUDIO_HAL_DAC_OUTPUT_LINE1, .codec_mode = AUDIO_HAL_CODEC_MODE_DECODE, .i2s_iface = { .mode = AUDIO_HAL_MODE_SLAVE, .fmt = AUDIO_HAL_I2S_NORMAL, .samples = AUDIO_HAL_16K_SAMPLES, .bits = AUDIO_HAL_BIT_LENGTH_16BITS, }, }; ret_val |= es8311_codec_init(&Wire1, &cfg); ret_val |= es8311_set_bits_per_sample(cfg.i2s_iface.bits); ret_val |= es8311_config_fmt((es_i2s_fmt_t)cfg.i2s_iface.fmt); ret_val |= es8311_codec_set_voice_volume(75); ret_val |= es8311_codec_ctrl_state(cfg.codec_mode, AUDIO_HAL_CTRL_START); } return ret_val; } void S3boxInit(void) { if (TasmotaGlobal.i2c_enabled[1]) { // box lite ES8156_init(); es7243e_init(); // box full ES8311_init(); es7210_init(); pinMode(S3BOX_APWR_GPIO , OUTPUT); } } #endif // ESP32S3_BOX #ifdef USE_W8960 #include void W8960_Init1(void) { if (TasmotaGlobal.i2c_enabled[1]) { if (I2cSetDevice(W8960_ADDR, 1)) { I2cSetActiveFound(W8960_ADDR, "W8960-I2C", 1); W8960_Init(&Wire1); } } } #endif // USE_W8960 #endif // ESP32