diff --git a/boards/xtensa/esp32/esp32-devkitc/src/esp32_buttons.c b/boards/xtensa/esp32/esp32-devkitc/src/esp32_buttons.c index 0bfc102c25f..0a33fb9636f 100644 --- a/boards/xtensa/esp32/esp32-devkitc/src/esp32_buttons.c +++ b/boards/xtensa/esp32/esp32-devkitc/src/esp32_buttons.c @@ -130,7 +130,7 @@ uint32_t board_buttons(void) int board_button_irq(int id, xcpt_t irqhandler, void *arg) { int ret; - DEBUGASSERT(id == BUTTON_BOOT); + DEBUGASSERT(id == 0); int irq = ESP32_PIN2IRQ(BUTTON_BOOT); diff --git a/boards/xtensa/esp32/esp32-ethernet-kit/src/esp32_buttons.c b/boards/xtensa/esp32/esp32-ethernet-kit/src/esp32_buttons.c index 274d35c2c16..1966dd76bea 100644 --- a/boards/xtensa/esp32/esp32-ethernet-kit/src/esp32_buttons.c +++ b/boards/xtensa/esp32/esp32-ethernet-kit/src/esp32_buttons.c @@ -130,7 +130,7 @@ uint32_t board_buttons(void) int board_button_irq(int id, xcpt_t irqhandler, void *arg) { int ret; - DEBUGASSERT(id == BUTTON_BOOT); + DEBUGASSERT(id == 0); int irq = ESP32_PIN2IRQ(BUTTON_BOOT); diff --git a/boards/xtensa/esp32/esp32-lyrat/src/esp32_buttons.c b/boards/xtensa/esp32/esp32-lyrat/src/esp32_buttons.c index a37ed78d8cc..b18fa984051 100644 --- a/boards/xtensa/esp32/esp32-lyrat/src/esp32_buttons.c +++ b/boards/xtensa/esp32/esp32-lyrat/src/esp32_buttons.c @@ -31,6 +31,7 @@ #include #include +#include #include #include #include @@ -39,6 +40,24 @@ #include "esp32-lyrat.h" +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +#ifndef ARRAY_SIZE +# define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) +#endif + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +static const int g_buttons[] = +{ + BUTTON_REC, + BUTTON_MODE +}; + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -56,9 +75,11 @@ uint32_t board_button_initialize(void) { - esp32_configgpio(BUTTON_MODE, INPUT_FUNCTION_3 | PULLUP); - esp32_configgpio(BUTTON_REC, INPUT_FUNCTION_3 | PULLUP); - return 1; + /* GPIOs 36 and 39 do not support PULLUP/PULLDOWN */ + + esp32_configgpio(BUTTON_MODE, INPUT_FUNCTION_3); + esp32_configgpio(BUTTON_REC, INPUT_FUNCTION_3); + return NUM_BUTTONS; } /**************************************************************************** @@ -77,22 +98,18 @@ uint32_t board_buttons(void) uint8_t ret = 0; int n = 0; - const uint8_t btn_id_arr[] = - { - BUTTON_REC, - BUTTON_MODE - }; - - for (uint8_t btn_id = 0; btn_id < sizeof(btn_id_arr); btn_id++) + for (uint8_t btn_id = 0; btn_id < ARRAY_SIZE(g_buttons); btn_id++) { iinfo("Reading button %d\n", btn_id); - bool b0 = esp32_gpioread(btn_id_arr[btn_id]); + + const int button_gpio = g_buttons[btn_id]; + bool b0 = esp32_gpioread(button_gpio); for (int i = 0; i < 10; i++) { up_mdelay(1); /* TODO */ - bool b1 = esp32_gpioread(btn_id_arr[btn_id]); + bool b1 = esp32_gpioread(button_gpio); if (b0 == b1) { @@ -139,8 +156,11 @@ uint32_t board_buttons(void) #ifdef CONFIG_ARCH_IRQBUTTONS int board_button_irq(int id, xcpt_t irqhandler, void *arg) { + DEBUGASSERT(id < ARRAY_SIZE(g_buttons)); + int ret; - int irq = ESP32_PIN2IRQ(id); + int pin = g_buttons[id]; + int irq = ESP32_PIN2IRQ(pin); if (NULL != irqhandler) { @@ -155,7 +175,7 @@ int board_button_irq(int id, xcpt_t irqhandler, void *arg) return ret; } - gpioinfo("Attach %p\n", irqhandler); + gpioinfo("Attach %p to pin %d\n", irqhandler, pin); gpioinfo("Enabling the interrupt\n"); @@ -165,7 +185,7 @@ int board_button_irq(int id, xcpt_t irqhandler, void *arg) } else { - gpioinfo("Disable the interrupt\n"); + gpioinfo("Disabled interrupts from pin %d\n", pin); esp32_gpioirqdisable(irq); } diff --git a/boards/xtensa/esp32/esp32-sparrow-kit/src/esp32_buttons.c b/boards/xtensa/esp32/esp32-sparrow-kit/src/esp32_buttons.c index 66096be6194..9c4b25f2ede 100644 --- a/boards/xtensa/esp32/esp32-sparrow-kit/src/esp32_buttons.c +++ b/boards/xtensa/esp32/esp32-sparrow-kit/src/esp32_buttons.c @@ -130,7 +130,7 @@ uint32_t board_buttons(void) int board_button_irq(int id, xcpt_t irqhandler, void *arg) { int ret; - DEBUGASSERT(id == BUTTON_BOOT); + DEBUGASSERT(id == 0); int irq = ESP32_PIN2IRQ(BUTTON_BOOT); diff --git a/boards/xtensa/esp32/esp32-wrover-kit/src/esp32_buttons.c b/boards/xtensa/esp32/esp32-wrover-kit/src/esp32_buttons.c index 0f028f6cc39..5d1fb4727c6 100644 --- a/boards/xtensa/esp32/esp32-wrover-kit/src/esp32_buttons.c +++ b/boards/xtensa/esp32/esp32-wrover-kit/src/esp32_buttons.c @@ -130,7 +130,7 @@ uint32_t board_buttons(void) int board_button_irq(int id, xcpt_t irqhandler, void *arg) { int ret; - DEBUGASSERT(id == BUTTON_BOOT); + DEBUGASSERT(id == 0); int irq = ESP32_PIN2IRQ(BUTTON_BOOT); diff --git a/boards/xtensa/esp32/lilygo_tbeam_lora_gps/src/esp32_buttons.c b/boards/xtensa/esp32/lilygo_tbeam_lora_gps/src/esp32_buttons.c index fce4b49d0e9..e3aad8508fc 100644 --- a/boards/xtensa/esp32/lilygo_tbeam_lora_gps/src/esp32_buttons.c +++ b/boards/xtensa/esp32/lilygo_tbeam_lora_gps/src/esp32_buttons.c @@ -130,7 +130,7 @@ uint32_t board_buttons(void) int board_button_irq(int id, xcpt_t irqhandler, void *arg) { int ret; - DEBUGASSERT(id == BUTTON_BOOT); + DEBUGASSERT(id == 0); int irq = ESP32_PIN2IRQ(BUTTON_BOOT); diff --git a/boards/xtensa/esp32/ttgo_eink5_v2/src/esp32_buttons.c b/boards/xtensa/esp32/ttgo_eink5_v2/src/esp32_buttons.c index 7ba55fb7470..baa74fd40ee 100644 --- a/boards/xtensa/esp32/ttgo_eink5_v2/src/esp32_buttons.c +++ b/boards/xtensa/esp32/ttgo_eink5_v2/src/esp32_buttons.c @@ -132,7 +132,7 @@ uint32_t board_buttons(void) int board_button_irq(int id, xcpt_t irqhandler, void *arg) { int ret; - DEBUGASSERT(id == BUTTON_BOOT); + DEBUGASSERT(id == 0); int irq = ESP32_PIN2IRQ(BUTTON_BOOT); diff --git a/boards/xtensa/esp32/ttgo_lora_esp32/src/esp32_buttons.c b/boards/xtensa/esp32/ttgo_lora_esp32/src/esp32_buttons.c index ae63ad80bfc..374713d8847 100644 --- a/boards/xtensa/esp32/ttgo_lora_esp32/src/esp32_buttons.c +++ b/boards/xtensa/esp32/ttgo_lora_esp32/src/esp32_buttons.c @@ -130,7 +130,7 @@ uint32_t board_buttons(void) int board_button_irq(int id, xcpt_t irqhandler, void *arg) { int ret; - DEBUGASSERT(id == BUTTON_BOOT); + DEBUGASSERT(id == 0); int irq = ESP32_PIN2IRQ(BUTTON_BOOT); diff --git a/boards/xtensa/esp32/ttgo_t_display_esp32/src/esp32_buttons.c b/boards/xtensa/esp32/ttgo_t_display_esp32/src/esp32_buttons.c index 38922beacf1..d46f4e37ca8 100644 --- a/boards/xtensa/esp32/ttgo_t_display_esp32/src/esp32_buttons.c +++ b/boards/xtensa/esp32/ttgo_t_display_esp32/src/esp32_buttons.c @@ -130,7 +130,7 @@ uint32_t board_buttons(void) int board_button_irq(int id, xcpt_t irqhandler, void *arg) { int ret; - DEBUGASSERT(id == BUTTON_BOOT); + DEBUGASSERT(id == 0); int irq = ESP32_PIN2IRQ(BUTTON_BOOT); diff --git a/boards/xtensa/esp32s3/esp32s3-devkit/src/esp32s3_buttons.c b/boards/xtensa/esp32s3/esp32s3-devkit/src/esp32s3_buttons.c index 9dabe6097c6..ace06b60f64 100644 --- a/boards/xtensa/esp32s3/esp32s3-devkit/src/esp32s3_buttons.c +++ b/boards/xtensa/esp32s3/esp32s3-devkit/src/esp32s3_buttons.c @@ -128,7 +128,7 @@ uint32_t board_buttons(void) int board_button_irq(int id, xcpt_t irqhandler, void *arg) { int ret; - DEBUGASSERT(id == BUTTON_BOOT); + DEBUGASSERT(id == 0); int irq = ESP32S3_PIN2IRQ(BUTTON_BOOT);