Skip to content

Commit

Permalink
Prevent warning on GPIO ISR service registration
Browse files Browse the repository at this point in the history
  • Loading branch information
LennartF22 committed Sep 28, 2024
1 parent 251bb7b commit b05975b
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions src/W5500.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,6 @@ std::unique_ptr<W5500> W5500::setup(int8_t pin_mosi, int8_t pin_miso, int8_t pin
gpio_reset_pin(static_cast<gpio_num_t>(pin_cs));
gpio_reset_pin(static_cast<gpio_num_t>(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);

auto bus_config = std::make_shared<SpiBusConfig>(
static_cast<gpio_num_t>(pin_mosi),
static_cast<gpio_num_t>(pin_miso),
Expand Down Expand Up @@ -105,7 +101,12 @@ std::unique_ptr<W5500> W5500::setup(int8_t pin_mosi, int8_t pin_miso, int8_t pin
if (!connection_check_interrupt(static_cast<gpio_num_t>(pin_int)))
return nullptr;

// Return to default state once again after connection check
// Use Arduino functions to temporarily attach interrupt to enable the GPIO ISR service
// (if we used ESP-IDF functions, a warning would be printed the first time anyone uses attachInterrupt)
attachInterrupt(pin_int, nullptr, FALLING);
detachInterrupt(pin_int);

// Return to default state once again after connection check and temporary interrupt registration
gpio_reset_pin(static_cast<gpio_num_t>(pin_int));

return std::unique_ptr<W5500>(new W5500(spi, static_cast<gpio_num_t>(pin_int)));
Expand Down

0 comments on commit b05975b

Please sign in to comment.