mirror of
https://github.com/esphome/esphome.git
synced 2024-11-27 09:18:00 +01:00
Cleaning up code
This commit is contained in:
parent
3d5c6224e3
commit
1e14dbf2ce
4 changed files with 118 additions and 233 deletions
|
@ -5,7 +5,7 @@ import esphome.codegen as cg
|
|||
import esphome.final_validate as fv
|
||||
|
||||
from esphome.components import esp32
|
||||
from esphome.components.i2c import I2CDevice, i2c_ns, I2CBus
|
||||
from esphome.components.i2c import i2c_ns, I2CBus
|
||||
|
||||
|
||||
from esphome.const import CONF_ID, CONF_BOARD
|
||||
|
@ -94,7 +94,6 @@ async def to_code(config):
|
|||
# esp32.add_idf_sdkconfig_option("CONFIG_SPIRAM_BOOT_INIT", True)
|
||||
# esp32.add_idf_sdkconfig_option("CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY", True)
|
||||
|
||||
|
||||
esp32.add_extra_script(
|
||||
"pre",
|
||||
"apply_adf_patches.py",
|
||||
|
@ -105,16 +104,22 @@ async def to_code(config):
|
|||
"https://github.com/X-Ryl669/esp-adf/raw/with-i2c-cb/idf_patches/idf_v4.4_freertos.patch",
|
||||
)
|
||||
|
||||
|
||||
# I2C Bus below
|
||||
ADFI2CBus = i2c_ns.class_("ADFI2CBus", I2CBus, cg.Component)
|
||||
|
||||
|
||||
# Patch the I2C config schema to use the right I2C bus
|
||||
def _patch_idfi2cbus(config):
|
||||
from esphome.cpp_generator import MockObjClass
|
||||
|
||||
if "i2c" in fv.full_config.get():
|
||||
for i2c_inst in fv.full_config.get()["i2c"]:
|
||||
i2c_inst["id"].type = MockObjClass("i2c::ADFI2CBus", parents = i2c_inst["id"].type._parents)
|
||||
i2c_inst["id"].type = MockObjClass(
|
||||
"i2c::ADFI2CBus", parents=i2c_inst["id"].type._parents
|
||||
)
|
||||
|
||||
return config
|
||||
|
||||
|
||||
FINAL_VALIDATE_SCHEMA = _patch_idfi2cbus
|
||||
|
|
|
@ -8,16 +8,12 @@
|
|||
#include <cstring>
|
||||
#include <cinttypes>
|
||||
|
||||
|
||||
namespace esphome {
|
||||
namespace i2c {
|
||||
|
||||
|
||||
static const char *const TAG = "i2c.adf";
|
||||
|
||||
static void recover_i2c_hard(i2c_port_t, void* bus) {
|
||||
((ADFI2CBus*)bus)->recover_();
|
||||
}
|
||||
static void recover_i2c_hard(i2c_port_t, void *bus) { ((ADFI2CBus *) bus)->recover_(); }
|
||||
|
||||
void ADFI2CBus::setup() {
|
||||
ESP_LOGCONFIG(TAG, "Setting up I2C bus...");
|
||||
|
@ -30,7 +26,9 @@ void ADFI2CBus::setup() {
|
|||
next_port = I2C_NUM_MAX;
|
||||
#endif
|
||||
if (port == I2C_NUM_MAX) {
|
||||
ESP_LOGE(TAG, "Too many I2C buses configured"); this->mark_failed(); return;
|
||||
ESP_LOGE(TAG, "Too many I2C buses configured");
|
||||
this->mark_failed();
|
||||
return;
|
||||
}
|
||||
|
||||
// Recovery is disabled by default in adf since any esp-adf component that needed the I2C bus
|
||||
|
@ -95,9 +93,7 @@ void ADFI2CBus::dump_config() {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
struct ReadVCmd
|
||||
{
|
||||
struct ReadVCmd {
|
||||
uint8_t address;
|
||||
ReadBuffer *buffers;
|
||||
size_t cnt;
|
||||
|
@ -167,7 +163,6 @@ struct ReadVCmd
|
|||
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
};
|
||||
// Calling stub for I2C port
|
||||
static void i2c_readv(i2c_port_t port, void *arg) {
|
||||
|
@ -190,16 +185,15 @@ ErrorCode ADFI2CBus::readv(uint8_t address, ReadBuffer *buffers, size_t cnt) {
|
|||
return ERROR_OK;
|
||||
}
|
||||
|
||||
struct WriteVCmd
|
||||
{
|
||||
struct WriteVCmd {
|
||||
uint8_t address;
|
||||
WriteBuffer *buffers;
|
||||
size_t cnt;
|
||||
bool stop;
|
||||
ErrorCode code{ERROR_UNKNOWN};
|
||||
|
||||
WriteVCmd(uint8_t address, WriteBuffer * buffers, size_t cnt, bool stop) : address(address), buffers(buffers), cnt(cnt), stop(stop) {}
|
||||
|
||||
WriteVCmd(uint8_t address, WriteBuffer *buffers, size_t cnt, bool stop)
|
||||
: address(address), buffers(buffers), cnt(cnt), stop(stop) {}
|
||||
|
||||
ErrorCode write(i2c_port_t port) {
|
||||
#ifdef ESPHOME_LOG_HAS_VERY_VERBOSE
|
||||
|
@ -287,14 +281,12 @@ ErrorCode ADFI2CBus::writev(uint8_t address, WriteBuffer *buffers, size_t cnt, b
|
|||
return ERROR_OK;
|
||||
}
|
||||
|
||||
|
||||
/// Perform I2C bus recovery, see:
|
||||
/// https://www.nxp.com/docs/en/user-guide/UM10204.pdf
|
||||
/// https://www.analog.com/media/en/technical-documentation/application-notes/54305147357414AN686_0.pdf
|
||||
void ADFI2CBus::recover_() {
|
||||
ESP_LOGI(TAG, "Performing I2C bus recovery");
|
||||
|
||||
|
||||
const gpio_num_t scl_pin = static_cast<gpio_num_t>(scl_pin_);
|
||||
const gpio_num_t sda_pin = static_cast<gpio_num_t>(sda_pin_);
|
||||
|
||||
|
@ -402,7 +394,6 @@ void ADFI2CBus::recover_() {
|
|||
recovery_result_ = RECOVERY_COMPLETED;
|
||||
}
|
||||
|
||||
|
||||
} // namespace i2c
|
||||
} // namespace esphome
|
||||
|
||||
|
|
|
@ -82,39 +82,7 @@ void ESPADFMicrophone::read_task(void *params) {
|
|||
*/
|
||||
audio_pipeline_cfg_t pipeline_cfg = DEFAULT_AUDIO_PIPELINE_CONFIG();
|
||||
audio_pipeline_handle_t pipeline = audio_pipeline_init(&pipeline_cfg);
|
||||
/*
|
||||
i2s_driver_config_t i2s_config = {};
|
||||
i2s_config.mode = (i2s_mode_t) (I2S_MODE_MASTER | I2S_MODE_RX);
|
||||
i2s_config.sample_rate = 16000;
|
||||
i2s_config.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT;
|
||||
i2s_config.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT;
|
||||
i2s_config.communication_format = I2S_COMM_FORMAT_STAND_I2S;
|
||||
i2s_config.intr_alloc_flags = ESP_INTR_FLAG_LEVEL2 | ESP_INTR_FLAG_IRAM;
|
||||
i2s_config.dma_buf_count = 8;
|
||||
i2s_config.dma_buf_len = 128;
|
||||
i2s_config.use_apll = false;
|
||||
i2s_config.tx_desc_auto_clear = true;
|
||||
i2s_config.fixed_mclk = 0;
|
||||
i2s_config.mclk_multiple = I2S_MCLK_MULTIPLE_256;
|
||||
i2s_config.bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT;
|
||||
|
||||
i2s_stream_cfg_t i2s_cfg = {};
|
||||
i2s_cfg.type = AUDIO_STREAM_READER;
|
||||
i2s_cfg.i2s_config = i2s_config;
|
||||
i2s_cfg.i2s_port = static_cast<i2s_port_t>(CODEC_ADC_I2S_PORT);
|
||||
i2s_cfg.use_alc = false;
|
||||
i2s_cfg.volume = 0;
|
||||
i2s_cfg.out_rb_size = I2S_STREAM_RINGBUFFER_SIZE;
|
||||
i2s_cfg.task_stack = I2S_STREAM_TASK_STACK;
|
||||
i2s_cfg.task_core = I2S_STREAM_TASK_CORE;
|
||||
i2s_cfg.task_prio = I2S_STREAM_TASK_PRIO;
|
||||
i2s_cfg.stack_in_ext = false;
|
||||
i2s_cfg.multi_out_num = 0;
|
||||
i2s_cfg.uninstall_drv = true;
|
||||
i2s_cfg.need_expand = false;
|
||||
i2s_cfg.expand_src_bits = I2S_BITS_PER_SAMPLE_16BIT;
|
||||
*/
|
||||
//i2s_stream_cfg_t i2s_cfg = I2S_STREAM_CFG_DEFAULT_WITH_PARA(CODEC_ADC_I2S_PORT, 48000, 16, AUDIO_STREAM_READER);
|
||||
i2s_stream_cfg_t i2s_cfg = {};
|
||||
memset(&i2s_cfg, 0, sizeof(i2s_cfg));
|
||||
i2s_cfg.type = AUDIO_STREAM_READER;
|
||||
|
@ -143,28 +111,7 @@ void ESPADFMicrophone::read_task(void *params) {
|
|||
i2s_cfg.i2s_config.tx_desc_auto_clear = true;
|
||||
i2s_cfg.i2s_config.fixed_mclk = 0;
|
||||
audio_element_handle_t i2s_stream_reader = i2s_stream_init(&i2s_cfg);
|
||||
/*
|
||||
rsp_filter_cfg_t rsp_cfg = {
|
||||
.src_rate = 16000,
|
||||
.src_ch = 2,
|
||||
.dest_rate = 16000,
|
||||
.dest_bits = 16,
|
||||
.dest_ch = 1,
|
||||
.src_bits = I2S_BITS_PER_SAMPLE_16BIT,
|
||||
.mode = RESAMPLE_DECODE_MODE,
|
||||
.max_indata_bytes = RSP_FILTER_BUFFER_BYTE,
|
||||
.out_len_bytes = RSP_FILTER_BUFFER_BYTE,
|
||||
.type = ESP_RESAMPLE_TYPE_AUTO,
|
||||
.complexity = 2,
|
||||
.down_ch_idx = 0,
|
||||
.prefer_flag = ESP_RSP_PREFER_TYPE_SPEED,
|
||||
.out_rb_size = RSP_FILTER_RINGBUFFER_SIZE,
|
||||
.task_stack = RSP_FILTER_TASK_STACK,
|
||||
.task_core = RSP_FILTER_TASK_CORE,
|
||||
.task_prio = RSP_FILTER_TASK_PRIO,
|
||||
.stack_in_ext = true,
|
||||
};
|
||||
*/
|
||||
|
||||
rsp_filter_cfg_t rsp_cfg = {};
|
||||
memset(&rsp_cfg, 0, sizeof(rsp_cfg)); // DEFAULT_RESAMPLE_FILTER_CONFIG();
|
||||
rsp_cfg.src_rate = 16000;
|
||||
|
@ -187,6 +134,7 @@ void ESPADFMicrophone::read_task(void *params) {
|
|||
rsp_cfg.stack_in_ext = true;
|
||||
audio_element_handle_t filter = rsp_filter_init(&rsp_cfg);
|
||||
|
||||
/*
|
||||
algorithm_stream_cfg_t algo_cfg = {
|
||||
.input_type = ALGORITHM_STREAM_INPUT_TYPE1,
|
||||
.task_stack = 10 * 1024,
|
||||
|
@ -209,8 +157,8 @@ void ESPADFMicrophone::read_task(void *params) {
|
|||
.aec_low_cost = false,
|
||||
};
|
||||
|
||||
// audio_element_handle_t algo_stream = algo_stream_init(&algo_cfg);
|
||||
|
||||
audio_element_handle_t algo_stream = algo_stream_init(&algo_cfg);
|
||||
*/
|
||||
raw_stream_cfg_t raw_cfg = {
|
||||
.type = AUDIO_STREAM_READER,
|
||||
.out_rb_size = 8 * 1024,
|
||||
|
@ -230,16 +178,13 @@ void ESPADFMicrophone::read_task(void *params) {
|
|||
};
|
||||
audio_pipeline_link(pipeline, &link_tag[0], 3);
|
||||
|
||||
/* // Set the event listener for the pipeline, else it'll fill itself and crash
|
||||
/*
|
||||
// Set the event listener for the pipeline, else it'll fill itself and crash
|
||||
audio_event_iface_cfg_t evt_cfg = AUDIO_EVENT_IFACE_DEFAULT_CFG();
|
||||
audio_event_iface_handle_t evt = audio_event_iface_init(&evt_cfg);
|
||||
audio_pipeline_set_listener(pipeline, evt);
|
||||
esp_periph_config_t periph_cfg = DEFAULT_ESP_PERIPH_SET_CONFIG();
|
||||
esp_periph_set_handle_t set = esp_periph_set_init(&periph_cfg);
|
||||
|
||||
// Initialize SD Card peripheral
|
||||
// audio_board_sdcard_init(set, SD_MODE_1_LINE);
|
||||
audio_event_iface_set_listener(esp_periph_set_get_event_iface(set), evt);
|
||||
ESP_LOGW(TAG, "audio pipeline listener installed");
|
||||
*/
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
namespace esphome {
|
||||
namespace esp_adf {
|
||||
|
||||
static const size_t BUFFER_COUNT = 20;
|
||||
static const size_t BUFFER_COUNT = 25;
|
||||
|
||||
static const char *const TAG = "esp_adf.speaker";
|
||||
|
||||
|
@ -50,41 +50,6 @@ void ESPADFSpeaker::player_task(void *params) {
|
|||
};
|
||||
audio_pipeline_handle_t pipeline = audio_pipeline_init(&pipeline_cfg);
|
||||
|
||||
/* i2s_driver_config_t i2s_config = {};
|
||||
i2s_config.mode = (i2s_mode_t) (I2S_MODE_MASTER | I2S_MODE_TX);
|
||||
i2s_config.sample_rate = 16000;
|
||||
i2s_config.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT;
|
||||
i2s_config.channel_format = I2S_CHANNEL_FMT_ONLY_RIGHT;
|
||||
i2s_config.communication_format = I2S_COMM_FORMAT_STAND_I2S;
|
||||
i2s_config.intr_alloc_flags = ESP_INTR_FLAG_LEVEL2 | ESP_INTR_FLAG_IRAM;
|
||||
i2s_config.dma_buf_count = 8;
|
||||
i2s_config.dma_buf_len = 1024;
|
||||
i2s_config.use_apll = false;
|
||||
i2s_config.tx_desc_auto_clear = true;
|
||||
i2s_config.fixed_mclk = 0;
|
||||
i2s_config.mclk_multiple = I2S_MCLK_MULTIPLE_256;
|
||||
i2s_config.bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT;
|
||||
|
||||
|
||||
|
||||
i2s_stream_cfg_t i2s_cfg = {};
|
||||
i2s_cfg.type = AUDIO_STREAM_WRITER;
|
||||
i2s_cfg.i2s_config = i2s_config;
|
||||
i2s_cfg.i2s_port = I2S_NUM_0;
|
||||
i2s_cfg.use_alc = false;
|
||||
i2s_cfg.volume = 0;
|
||||
i2s_cfg.out_rb_size = I2S_STREAM_RINGBUFFER_SIZE;
|
||||
i2s_cfg.task_stack = I2S_STREAM_TASK_STACK;
|
||||
i2s_cfg.task_core = I2S_STREAM_TASK_CORE;
|
||||
i2s_cfg.task_prio = I2S_STREAM_TASK_PRIO;
|
||||
i2s_cfg.stack_in_ext = false;
|
||||
i2s_cfg.multi_out_num = 0;
|
||||
i2s_cfg.uninstall_drv = true;
|
||||
i2s_cfg.need_expand = false;
|
||||
i2s_cfg.expand_src_bits = I2S_BITS_PER_SAMPLE_16BIT;
|
||||
|
||||
audio_element_handle_t i2s_stream_writer = i2s_stream_init(&i2s_cfg);
|
||||
*/
|
||||
i2s_stream_cfg_t i2s_cfg = {};
|
||||
memset(&i2s_cfg, 0, sizeof(i2s_cfg));
|
||||
i2s_cfg.type = AUDIO_STREAM_WRITER;
|
||||
|
@ -115,29 +80,8 @@ void ESPADFSpeaker::player_task(void *params) {
|
|||
i2s_cfg.i2s_config.bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT;
|
||||
|
||||
audio_element_handle_t i2s_stream_writer = i2s_stream_init(&i2s_cfg);
|
||||
|
||||
rsp_filter_cfg_t rsp_cfg = {};
|
||||
/*
|
||||
.src_rate = 16000,
|
||||
.src_ch = 1,
|
||||
.dest_rate = 16000,
|
||||
.dest_bits = 16,
|
||||
.dest_ch = 2,
|
||||
.src_bits = 16,
|
||||
.mode = RESAMPLE_DECODE_MODE,
|
||||
.max_indata_bytes = RSP_FILTER_BUFFER_BYTE,
|
||||
.out_len_bytes = RSP_FILTER_BUFFER_BYTE,
|
||||
.type = ESP_RESAMPLE_TYPE_AUTO,
|
||||
.complexity = 2,
|
||||
.down_ch_idx = 0,
|
||||
.prefer_flag = ESP_RSP_PREFER_TYPE_SPEED,
|
||||
.out_rb_size = RSP_FILTER_RINGBUFFER_SIZE,
|
||||
.task_stack = RSP_FILTER_TASK_STACK,
|
||||
.task_core = RSP_FILTER_TASK_CORE,
|
||||
.task_prio = RSP_FILTER_TASK_PRIO,
|
||||
.stack_in_ext = true,
|
||||
};
|
||||
*/
|
||||
rsp_filter_cfg_t rsp_cfg = {};
|
||||
rsp_cfg.src_rate = 16000;
|
||||
rsp_cfg.src_ch = 1;
|
||||
rsp_cfg.src_bits = 16;
|
||||
|
@ -157,7 +101,7 @@ void ESPADFSpeaker::player_task(void *params) {
|
|||
rsp_cfg.task_prio = RSP_FILTER_TASK_PRIO;
|
||||
rsp_cfg.stack_in_ext = true;
|
||||
audio_element_handle_t filter = rsp_filter_init(&rsp_cfg);
|
||||
|
||||
*/
|
||||
raw_stream_cfg_t raw_cfg = {
|
||||
.type = AUDIO_STREAM_WRITER,
|
||||
.out_rb_size = 8 * 1024,
|
||||
|
@ -165,7 +109,7 @@ void ESPADFSpeaker::player_task(void *params) {
|
|||
audio_element_handle_t raw_write = raw_stream_init(&raw_cfg);
|
||||
|
||||
audio_pipeline_register(pipeline, raw_write, "raw");
|
||||
audio_pipeline_register(pipeline, filter, "filter");
|
||||
// audio_pipeline_register(pipeline, filter, "filter");
|
||||
audio_pipeline_register(pipeline, i2s_stream_writer, "i2s");
|
||||
|
||||
const char *link_tag[3] = {
|
||||
|
|
Loading…
Reference in a new issue