From 9a37a020d215fdd8c9edacfefe719624924ffa03 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Wed, 14 Oct 2020 21:09:15 +0300 Subject: [PATCH] Fix Arduino PIN counts --- cores/esp32/esp32-hal-gpio.c | 2 -- cores/esp32/esp32-hal-gpio.h | 22 ++++++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/cores/esp32/esp32-hal-gpio.c b/cores/esp32/esp32-hal-gpio.c index fa98ef15..c8393591 100644 --- a/cores/esp32/esp32-hal-gpio.c +++ b/cores/esp32/esp32-hal-gpio.c @@ -28,14 +28,12 @@ #include "esp32/rom/ets_sys.h" #include "esp32/rom/gpio.h" #include "esp_intr_alloc.h" -#define NUM_OUPUT_PINS 34 #define GPIO_FUNC 2 #elif CONFIG_IDF_TARGET_ESP32S2 #include "esp32s2/rom/ets_sys.h" #include "esp32s2/rom/gpio.h" #include "esp_intr_alloc.h" #include "soc/periph_defs.h" -#define NUM_OUPUT_PINS 45 #define GPIO_FUNC 1 #else #error Target CONFIG_IDF_TARGET is not supported diff --git a/cores/esp32/esp32-hal-gpio.h b/cores/esp32/esp32-hal-gpio.h index ab63e755..b5f5b1fd 100644 --- a/cores/esp32/esp32-hal-gpio.h +++ b/cores/esp32/esp32-hal-gpio.h @@ -27,6 +27,16 @@ extern "C" { #include "esp32-hal.h" #include "soc/gpio_caps.h" +#if (CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3) +#define NUM_OUPUT_PINS 45 +#define PIN_DAC1 17 +#define PIN_DAC2 18 +#else +#define NUM_OUPUT_PINS 34 +#define PIN_DAC1 25 +#define PIN_DAC2 26 +#endif + #define LOW 0x0 #define HIGH 0x1 @@ -68,12 +78,12 @@ typedef struct { extern const esp32_gpioMux_t esp32_gpioMux[GPIO_PIN_COUNT]; extern const int8_t esp32_adc2gpio[20]; -#define digitalPinIsValid(pin) ((pin) < 40 && esp32_gpioMux[(pin)].reg) -#define digitalPinCanOutput(pin) ((pin) < 34 && esp32_gpioMux[(pin)].reg) -#define digitalPinToRtcPin(pin) (((pin) < 40)?esp32_gpioMux[(pin)].rtc:-1) -#define digitalPinToAnalogChannel(pin) (((pin) < 40)?esp32_gpioMux[(pin)].adc:-1) -#define digitalPinToTouchChannel(pin) (((pin) < 40)?esp32_gpioMux[(pin)].touch:-1) -#define digitalPinToDacChannel(pin) (((pin) == 25)?0:((pin) == 26)?1:-1) +#define digitalPinIsValid(pin) ((pin) < GPIO_PIN_COUNT && esp32_gpioMux[(pin)].reg) +#define digitalPinCanOutput(pin) ((pin) < NUM_OUPUT_PINS && esp32_gpioMux[(pin)].reg) +#define digitalPinToRtcPin(pin) (((pin) < GPIO_PIN_COUNT)?esp32_gpioMux[(pin)].rtc:-1) +#define digitalPinToAnalogChannel(pin) (((pin) < GPIO_PIN_COUNT)?esp32_gpioMux[(pin)].adc:-1) +#define digitalPinToTouchChannel(pin) (((pin) < GPIO_PIN_COUNT)?esp32_gpioMux[(pin)].touch:-1) +#define digitalPinToDacChannel(pin) (((pin) == PIN_DAC1)?0:((pin) == PIN_DAC2)?1:-1) void pinMode(uint8_t pin, uint8_t mode); void digitalWrite(uint8_t pin, uint8_t val);