From dcde0801ecb79fcba2301362cd35f59c12966df2 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 20 May 2021 12:19:00 +0200 Subject: [PATCH] RP2040: avoid implicit conversion from NinaPin to int Some sketches use a pattern like ``` int potpin = A5 ``` Since NinaPin was an enum, the implicit cast was taking place, and any subsequent call to analogRead() would not use the Nina functions. Works in conjunction with https://github.com/arduino-libraries/WiFiNINA/pull/180 --- cores/arduino/wiring_analog.cpp | 5 +++ variants/NANO_RP2040_CONNECT/nina_pins.cpp | 9 ++++++ variants/NANO_RP2040_CONNECT/nina_pins.h | 36 +++++++++++++++++----- 3 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 variants/NANO_RP2040_CONNECT/nina_pins.cpp diff --git a/cores/arduino/wiring_analog.cpp b/cores/arduino/wiring_analog.cpp index 8016e6f0b..aec8a47d0 100644 --- a/cores/arduino/wiring_analog.cpp +++ b/cores/arduino/wiring_analog.cpp @@ -135,4 +135,9 @@ void analogUpdate() void analogReadResolution(int bits) { read_resolution = bits; +} + +int getAnalogReadResolution() +{ + return read_resolution; } \ No newline at end of file diff --git a/variants/NANO_RP2040_CONNECT/nina_pins.cpp b/variants/NANO_RP2040_CONNECT/nina_pins.cpp new file mode 100644 index 000000000..5a4e8bfc1 --- /dev/null +++ b/variants/NANO_RP2040_CONNECT/nina_pins.cpp @@ -0,0 +1,9 @@ +#include "nina_pins.h" + +NinaPin LEDR(27); +NinaPin LEDG(25); +NinaPin LEDB(26); +NinaPin A4(34); +NinaPin A5(39); +NinaPin A6(36); +NinaPin A7(35); \ No newline at end of file diff --git a/variants/NANO_RP2040_CONNECT/nina_pins.h b/variants/NANO_RP2040_CONNECT/nina_pins.h index cc22646be..6309046b2 100644 --- a/variants/NANO_RP2040_CONNECT/nina_pins.h +++ b/variants/NANO_RP2040_CONNECT/nina_pins.h @@ -21,16 +21,36 @@ * TYPEDEF ******************************************************************************/ -enum NinaPin { - LEDR = 27, - LEDG = 25, - LEDB = 26, - A4 = 34, - A5 = 39, - A6 = 36, - A7 = 35 +int getAnalogReadResolution(); + +class NinaPin { +public: + NinaPin(int _pin) : pin(_pin) {}; + int get() { + return pin; + }; + int analogReadResolution() { + return getAnalogReadResolution(); + }; + bool operator== (NinaPin const & other) const { + return pin == other.pin; + } + //operator int() = delete; + __attribute__ ((error("Change me to a #define"))) operator int(); +private: + int pin; }; +extern NinaPin LEDR; +extern NinaPin LEDG; +extern NinaPin LEDB; +extern NinaPin A4; +extern NinaPin A5; +extern NinaPin A6; +extern NinaPin A7; + +#define NINA_PINS_AS_CLASS + /****************************************************************************** * FUNCTION DECLARATION ******************************************************************************/