You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ac...@apache.org on 2022/11/28 20:25:06 UTC

[nuttx] 02/02: boards: Fix buttons GPIO IRQ on ESP boards

This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit a926445995a6d5d2beec41e9fd6cfd7f1fdb2bac
Author: Lucas Saavedra Vaz <lu...@espressif.com>
AuthorDate: Mon Nov 28 11:21:59 2022 -0300

    boards: Fix buttons GPIO IRQ on ESP boards
---
 .../xtensa/esp32/esp32-devkitc/src/esp32_buttons.c |  2 +-
 .../esp32/esp32-ethernet-kit/src/esp32_buttons.c   |  2 +-
 .../xtensa/esp32/esp32-lyrat/src/esp32_buttons.c   | 50 +++++++++++++++-------
 .../esp32/esp32-sparrow-kit/src/esp32_buttons.c    |  2 +-
 .../esp32/esp32-wrover-kit/src/esp32_buttons.c     |  2 +-
 .../lilygo_tbeam_lora_gps/src/esp32_buttons.c      |  2 +-
 .../xtensa/esp32/ttgo_eink5_v2/src/esp32_buttons.c |  2 +-
 .../esp32/ttgo_lora_esp32/src/esp32_buttons.c      |  2 +-
 .../esp32/ttgo_t_display_esp32/src/esp32_buttons.c |  2 +-
 .../esp32s3/esp32s3-devkit/src/esp32s3_buttons.c   |  2 +-
 10 files changed, 44 insertions(+), 24 deletions(-)

diff --git a/boards/xtensa/esp32/esp32-devkitc/src/esp32_buttons.c b/boards/xtensa/esp32/esp32-devkitc/src/esp32_buttons.c
index 0bfc102c25..0a33fb9636 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 274d35c2c1..1966dd76be 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 a37ed78d8c..b18fa98405 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 <stdio.h>
 
 #include <nuttx/arch.h>
+#include <arch/board/board.h>
 #include <nuttx/board.h>
 #include <nuttx/irq.h>
 #include <arch/irq.h>
@@ -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 66096be619..9c4b25f2ed 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 0f028f6cc3..5d1fb4727c 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 fce4b49d0e..e3aad8508f 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 7ba55fb747..baa74fd40e 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 ae63ad80bf..374713d884 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 38922beacf..d46f4e37ca 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 9dabe6097c..ace06b60f6 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);