From dec6db6b40b65e6bfb1585527d817cfc9b93db02 Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Fri, 4 Aug 2023 14:26:43 +0200 Subject: [PATCH 1/2] io_pin_remap: fix tone() function mapping declaration Since tone() can have either 2 or 3 parameters, pass any argument after the first to the actual function implementation. --- cores/esp32/io_pin_remap.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/esp32/io_pin_remap.h b/cores/esp32/io_pin_remap.h index 4a23de4a829..cd5c93f8737 100644 --- a/cores/esp32/io_pin_remap.h +++ b/cores/esp32/io_pin_remap.h @@ -18,7 +18,7 @@ int8_t digitalPinFromGPIONumber(int8_t gpioPin); #define pulseInLong(pin, state, timeout) pulseInLong(digitalPinToGPIONumber(pin), state, timeout) #define pulseIn(pin, state, timeout) pulseIn(digitalPinToGPIONumber(pin), state, timeout) #define noTone(_pin) noTone(digitalPinToGPIONumber(_pin)) -#define tone(_pin, frequency, duration) tone(digitalPinToGPIONumber(_pin), frequency, duration) +#define tone(_pin, args...) tone(digitalPinToGPIONumber(_pin), args) // cores/esp32/esp32-hal.h #define analogGetChannel(pin) analogGetChannel(digitalPinToGPIONumber(pin)) From 9b402f021f5a4b79ddfed3ee6b2b7e0167fff30b Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Fri, 4 Aug 2023 14:28:50 +0200 Subject: [PATCH 2/2] io_pin_remap: add sanity checks to the core build Building with BOARD_HAS_PIN_REMAP but without setting ARDUINO_CORE_BUILD on core files is absolutely forbidden, as this would lead to multiple pin remappings being silently applied on the same numbers. Also advise the user when, on a board that has a custom pin mapping, - the core is being built without pin mapping support, or - the user explictly asked to use GPIO pin numbers. --- variants/arduino_nano_nora/io_pin_remap.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/variants/arduino_nano_nora/io_pin_remap.cpp b/variants/arduino_nano_nora/io_pin_remap.cpp index e53c500a328..2a18e029df2 100644 --- a/variants/arduino_nano_nora/io_pin_remap.cpp +++ b/variants/arduino_nano_nora/io_pin_remap.cpp @@ -1,4 +1,20 @@ -#ifndef BOARD_USES_HW_GPIO_NUMBERS +#if defined(BOARD_HAS_PIN_REMAP) && !defined(ARDUINO_CORE_BUILD) +// -DARDUINO_CORE_BUILD must be set for core files only, to avoid extra +// remapping steps that would create all sorts of issues in the core. +// Removing -DBOARD_HAS_PIN_REMAP at least does correctly restore the +// use of GPIO numbers in the API. +#error This build system is not supported. Please rebuild without BOARD_HAS_PIN_REMAP. +#endif + +#if !defined(BOARD_HAS_PIN_REMAP) +// This board uses pin mapping but the build system has disabled it +#warning The build system forces the Arduino API to use GPIO numbers on a board that has custom pin mapping. +#elif defined(BOARD_USES_HW_GPIO_NUMBERS) +// The user has chosen to disable pin mappin. +#warning The Arduino API will use GPIO numbers for this build. +#endif + +#if defined(BOARD_HAS_PIN_REMAP) && !defined(BOARD_USES_HW_GPIO_NUMBERS) #include "Arduino.h"