diff --git a/lib/CMT2300a/cmt_spi3.cpp b/lib/CMT2300a/cmt_spi3.cpp index 181bbb56..f6f912fb 100644 --- a/lib/CMT2300a/cmt_spi3.cpp +++ b/lib/CMT2300a/cmt_spi3.cpp @@ -15,25 +15,11 @@ void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin { paramLock = xSemaphoreCreateMutex(); - spi_host_device_t host_device; - if (!SpiManagerInst.claim_bus(host_device)) - ESP_ERROR_CHECK(ESP_FAIL); - - spi_bus_config_t buscfg = { - .mosi_io_num = pin_sdio, - .miso_io_num = -1, // single wire MOSI/MISO - .sclk_io_num = pin_clk, - .quadwp_io_num = -1, - .quadhd_io_num = -1, - .data4_io_num = -1, - .data5_io_num = -1, - .data6_io_num = -1, - .data7_io_num = -1, - .max_transfer_sz = 32, - .flags = 0, - .intr_flags = 0, - }; - ESP_ERROR_CHECK(spi_bus_initialize(host_device, &buscfg, SPI_DMA_DISABLED)); + auto bus_config = std::make_shared( + static_cast(pin_sdio), + GPIO_NUM_NC, + static_cast(pin_clk) + ); spi_device_interface_config_t devcfg = { .command_bits = 1, @@ -51,7 +37,10 @@ void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin .pre_cb = nullptr, .post_cb = nullptr, }; - ESP_ERROR_CHECK(spi_bus_add_device(host_device, &devcfg, &spi_reg)); + + spi_reg = SpiManagerInst.alloc_device("", bus_config, devcfg); + if (!spi_reg) + ESP_ERROR_CHECK(ESP_FAIL); // FiFo spi_device_interface_config_t devcfg2 = { @@ -70,7 +59,10 @@ void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin .pre_cb = nullptr, .post_cb = nullptr, }; - ESP_ERROR_CHECK(spi_bus_add_device(host_device, &devcfg2, &spi_fifo)); + + spi_fifo = SpiManagerInst.alloc_device("", bus_config, devcfg2); + if (!spi_fifo) + ESP_ERROR_CHECK(ESP_ERR_NOT_SUPPORTED); } void cmt_spi3_write(const uint8_t addr, const uint8_t data) diff --git a/src/W5500.cpp b/src/W5500.cpp index 93a9a316..3f274204 100644 --- a/src/W5500.cpp +++ b/src/W5500.cpp @@ -12,41 +12,22 @@ W5500::W5500(int8_t pin_mosi, int8_t pin_miso, int8_t pin_sclk, int8_t pin_cs, i eth_handle(nullptr), eth_netif(nullptr) { - spi_host_device_t host_device; - if (!SpiManagerInst.claim_bus(host_device)) - ESP_ERROR_CHECK(ESP_FAIL); - gpio_reset_pin(static_cast(pin_rst)); gpio_set_level(static_cast(pin_rst), 0); gpio_set_direction(static_cast(pin_rst), GPIO_MODE_OUTPUT); - gpio_reset_pin(static_cast(pin_mosi)); - gpio_reset_pin(static_cast(pin_miso)); - gpio_reset_pin(static_cast(pin_sclk)); gpio_reset_pin(static_cast(pin_cs)); - gpio_reset_pin(static_cast(pin_int)); esp_err_t err = gpio_install_isr_service(ARDUINO_ISR_FLAG); if (err != ESP_ERR_INVALID_STATE) // don't raise an error when ISR service is already installed ESP_ERROR_CHECK(err); - spi_bus_config_t bus_config { - .mosi_io_num = pin_mosi, - .miso_io_num = pin_miso, - .sclk_io_num = pin_sclk, - .quadwp_io_num = -1, - .quadhd_io_num = -1, - .data4_io_num = -1, - .data5_io_num = -1, - .data6_io_num = -1, - .data7_io_num = -1, - .max_transfer_sz = 0, // uses default value internally - .flags = 0, - .intr_flags = 0, - }; - - ESP_ERROR_CHECK(spi_bus_initialize(host_device, &bus_config, SPI_DMA_CH_AUTO)); + auto bus_config = std::make_shared( + static_cast(pin_mosi), + static_cast(pin_miso), + static_cast(pin_sclk) + ); spi_device_interface_config_t device_config { .command_bits = 16, // actually address phase @@ -65,8 +46,9 @@ W5500::W5500(int8_t pin_mosi, int8_t pin_miso, int8_t pin_sclk, int8_t pin_cs, i .post_cb = nullptr, }; - spi_device_handle_t spi; - ESP_ERROR_CHECK(spi_bus_add_device(host_device, &device_config, &spi)); + spi_device_handle_t spi = SpiManagerInst.alloc_device("", bus_config, device_config); + if (!spi) + ESP_ERROR_CHECK(ESP_FAIL); // Reset sequence delayMicroseconds(500);