|
21 | 21 | */ |
22 | 22 | #pragma once |
23 | 23 |
|
| 24 | +#ifndef PINS_DEBUGGING |
| 25 | + #error "PINS_DEBUGGING not defined but tried to include debug header!" |
| 26 | +#endif |
| 27 | + |
24 | 28 | /** |
25 | 29 | * Pins Debugging for STM32 |
26 | 30 | * |
|
47 | 51 | // Only in ST's Arduino core (STM32duino, STM32Core) |
48 | 52 | #error "Expected NUM_DIGITAL_PINS not found" |
49 | 53 | #endif |
| 54 | +#ifndef NUM_ANALOG_INPUTS |
| 55 | + #error "Expected NUM_ANALOG_INPUTS not found" |
| 56 | +#endif |
50 | 57 |
|
51 | 58 | /** |
52 | 59 | * Life gets complicated if you want an easy to use 'M43 I' output (in port/pin order) |
@@ -124,10 +131,28 @@ const XrefInfo pin_xref[] PROGMEM = { |
124 | 131 | #define PORT_NUM(P) (((P) >> 4) & 0x0007) |
125 | 132 | #define PORT_ALPHA(P) ('A' + ((P) >> 4)) |
126 | 133 |
|
127 | | -#if NUM_ANALOG_FIRST >= NUM_DIGITAL_PINS |
128 | | - #define HAS_HIGH_ANALOG_PINS 1 |
| 134 | +/** |
| 135 | + * Translation of routines & variables used by pinsDebug.h |
| 136 | + */ |
| 137 | +#ifndef __STRINGIFY |
| 138 | + #define __STRINGIFY(x) #x |
| 139 | +#endif |
| 140 | +#define TOSTRING(x) __STRINGIFY(x) |
| 141 | +#define _STM32_PLATDEFPATH(x) TOSTRING(platdefs/x.h) |
| 142 | +#ifdef _STM32_PLATDEFS |
| 143 | + #if __has_include(_STM32_PLATDEFPATH(_STM32_PLATDEFS)) |
| 144 | + #include _STM32_PLATDEFPATH(_STM32_PLATDEFS) |
| 145 | + #endif |
129 | 146 | #endif |
130 | | -#ifndef NUM_ANALOG_LAST |
| 147 | + |
| 148 | +#ifndef NUM_ANALOG_FIRST |
| 149 | + #warning "Preprocessor macro NUM_ANALOG_FIRST is not defined but PINS_DEBUGGING is enabled; ignoring analog pin debug functions." |
| 150 | +#endif |
| 151 | + |
| 152 | +#ifdef NUM_ANALOG_FIRST |
| 153 | + #if NUM_ANALOG_FIRST >= NUM_DIGITAL_PINS |
| 154 | + #define HAS_HIGH_ANALOG_PINS 1 |
| 155 | + #endif |
131 | 156 | #define NUM_ANALOG_LAST ((NUM_ANALOG_FIRST) + (NUM_ANALOG_INPUTS) - 1) |
132 | 157 | #endif |
133 | 158 | #define NUMBER_PINS_TOTAL ((NUM_DIGITAL_PINS) + TERN0(HAS_HIGH_ANALOG_PINS, NUM_ANALOG_INPUTS)) |
@@ -186,8 +211,10 @@ bool getValidPinMode(const pin_t pin) { |
186 | 211 | } |
187 | 212 |
|
188 | 213 | int8_t digital_pin_to_analog_pin(const pin_t pin) { |
189 | | - if (WITHIN(pin, NUM_ANALOG_FIRST, NUM_ANALOG_LAST)) |
190 | | - return pin - NUM_ANALOG_FIRST; |
| 214 | + #ifdef NUM_ANALOG_FIRST |
| 215 | + if (WITHIN(pin, NUM_ANALOG_FIRST, NUM_ANALOG_LAST)) |
| 216 | + return pin - NUM_ANALOG_FIRST; |
| 217 | + #endif |
191 | 218 |
|
192 | 219 | const int8_t ind = digitalPinToAnalogIndex(pin); |
193 | 220 | return (ind < NUM_ANALOG_INPUTS) ? ind : -1; |
@@ -225,10 +252,12 @@ void printPinPort(const pin_t pin) { |
225 | 252 |
|
226 | 253 | // Print number to be used with M42 |
227 | 254 | int calc_p = pin; |
228 | | - if (pin > NUM_DIGITAL_PINS) { |
229 | | - calc_p -= NUM_ANALOG_FIRST; |
230 | | - if (calc_p > 7) calc_p += 8; |
231 | | - } |
| 255 | + #ifdef NUM_ANALOG_FIRST |
| 256 | + if (pin > NUM_DIGITAL_PINS) { |
| 257 | + calc_p -= NUM_ANALOG_FIRST; |
| 258 | + if (calc_p > 7) calc_p += 8; |
| 259 | + } |
| 260 | + #endif |
232 | 261 | SERIAL_ECHOPGM(" M42 P", calc_p); |
233 | 262 | SERIAL_CHAR(' '); |
234 | 263 | if (calc_p < 100) { |
|
0 commit comments