From d3ec5c081b7e43a5ee1ef43024a831a52c5e0b44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Tr=C3=B3jniak?= Date: Tue, 3 Sep 2024 20:08:41 +0200 Subject: [PATCH] fix: ESP32 gpiodriver interrupt pin number handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cast Pin number to integer after checking if it is integer. Now set_int can set interrupt on any pin, not only pin 2. Improved pin_int typing after casting to int Signed-off-by: Rafał Trójniak --- CHANGELOG.md | 1 + src/platforms/esp32/components/avm_builtins/gpio_driver.c | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1b430b39..399f4fef2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ instead ### Fixed - ESP32: content of `boot.avm` partition is not truncated anymore +- ESP32: Fixed gpio:set_int` to accept any pin, not only pin 2 ## [0.6.4] - 2024-08-18 diff --git a/src/platforms/esp32/components/avm_builtins/gpio_driver.c b/src/platforms/esp32/components/avm_builtins/gpio_driver.c index 7dcabf1f0..a0c3202c1 100644 --- a/src/platforms/esp32/components/avm_builtins/gpio_driver.c +++ b/src/platforms/esp32/components/avm_builtins/gpio_driver.c @@ -422,10 +422,10 @@ static term gpiodriver_set_int(Context *ctx, int32_t target_pid, term cmd) struct GPIOData *gpio_data = ctx->platform_data; - term gpio_num_term = term_to_int32(term_get_tuple_element(cmd, 1)); + term gpio_num_term = term_get_tuple_element(cmd, 1); gpio_num_t gpio_num; if (LIKELY(term_is_integer(gpio_num_term))) { - avm_int_t pin_int = term_to_int32(gpio_num_term); + int32_t pin_int = term_to_int32(gpio_num_term); if (UNLIKELY((pin_int < 0) || (pin_int >= GPIO_NUM_MAX))) { return ERROR_ATOM; } @@ -525,10 +525,10 @@ static term gpiodriver_remove_int(Context *ctx, term cmd) { struct GPIOData *gpio_data = ctx->platform_data; - term gpio_num_term = term_to_int32(term_get_tuple_element(cmd, 1)); + term gpio_num_term = term_get_tuple_element(cmd, 1); gpio_num_t gpio_num; if (LIKELY(term_is_integer(gpio_num_term))) { - avm_int_t pin_int = term_to_int32(gpio_num_term); + int32_t pin_int = term_to_int32(gpio_num_term); if (UNLIKELY((pin_int < 0) || (pin_int >= GPIO_NUM_MAX))) { return ERROR_ATOM; }