@@ -32,38 +32,51 @@ extern "C" {
32
32
# include <syscalls.h> /** RedHat Newlib minimal stub */
33
33
#endif
34
34
35
- #define NOT_AN_INTERRUPT NC // -1
35
+ #define NOT_AN_INTERRUPT NC // -1
36
36
37
- #define NUM_DIGITAL_PINS DEND
38
- #define NUM_ANALOG_INPUTS (AEND-A0)
37
+ #define NUM_DIGITAL_PINS DEND
38
+ #define NUM_ANALOG_INPUTS (AEND-A0)
39
39
40
40
// Convert a digital pin number Dxx to a PinName Pxy
41
41
// Note: Analog pin is also a digital pin.
42
- #define digitalPinToPinName (p ) ((p < NUM_DIGITAL_PINS) ? digitalPin[p] : (STM_VALID_PINNAME(p))? (PinName)p : NC)
42
+ #define digitalPinToPinName (p ) ((p < NUM_DIGITAL_PINS) ? digitalPin[p] : NC)
43
43
// Convert a PinName Pxy to a digital pin number
44
44
uint32_t pinNametoDigitalPin (PinName p );
45
45
46
46
// Convert an analog pin number to a digital pin number
47
47
// Used by analogRead api to have A0 == 0
48
- #define analogInputToDigitalPin (p ) ((p < NUM_ANALOG_INPUTS) ? (p+A0) : p)
48
+ #define analogInputToDigitalPin (p ) ((p < NUM_ANALOG_INPUTS) ? (p+A0) : p)
49
49
// Convert an analog pin number Axx to a PinName Pxy
50
- #define analogInputToPinName (p ) (digitalPinToPinName(analogInputToDigitalPin(p)))
50
+ #define analogInputToPinName (p ) (digitalPinToPinName(analogInputToDigitalPin(p)))
51
51
// All pins could manage EXTI
52
- #define digitalPinToInterrupt (p ) ((p>=D0) && (p < NUM_DIGITAL_PINS ) ? p : NOT_AN_INTERRUPT)
52
+ #define digitalPinToInterrupt (p ) ((digitalPinIsValid(p ) ? p : NOT_AN_INTERRUPT)
53
53
54
- #define digitalPinHasI2C (p ) (pin_in_pinmap(digitalPinToPinName(p), PinMap_I2C_SDA) ||\
55
- pin_in_pinmap(digitalPinToPinName(p), PinMap_I2C_SCL))
56
- #define digitalPinHasPWM (p ) (pin_in_pinmap(digitalPinToPinName(p), PinMap_PWM))
57
- #define digitalPinHasSerial (p ) (pin_in_pinmap(digitalPinToPinName(p), PinMap_UART_RX) ||\
58
- pin_in_pinmap(digitalPinToPinName(p), PinMap_UART_TX))
59
- #define digitalPinHasSPI (p ) (pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_MOSI) ||\
60
- pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_MISO) ||\
61
- pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_SCLK) ||\
62
- pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_SSEL))
54
+ #define digitalPinHasI2C (p ) (pin_in_pinmap(digitalPinToPinName(p), PinMap_I2C_SDA) ||\
55
+ pin_in_pinmap(digitalPinToPinName(p), PinMap_I2C_SCL))
56
+ #define digitalPinHasPWM (p ) (pin_in_pinmap(digitalPinToPinName(p), PinMap_PWM))
57
+ #define digitalPinHasSerial (p ) (pin_in_pinmap(digitalPinToPinName(p), PinMap_UART_RX) ||\
58
+ pin_in_pinmap(digitalPinToPinName(p), PinMap_UART_TX))
59
+ #define digitalPinHasSPI (p ) (pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_MOSI) ||\
60
+ pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_MISO) ||\
61
+ pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_SCLK) ||\
62
+ pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_SSEL))
63
63
64
64
65
- #define digitalPinToPort (p ) ( get_GPIO_Port(digitalPinToPinName(p)) )
66
- #define digitalPinToBitMask (p ) ( STM_GPIO_PIN(digitalPinToPinName(p)) )
65
+ #define digitalPinToPort (p ) (get_GPIO_Port(digitalPinToPinName(p)))
66
+ #define digitalPinToBitMask (p ) (STM_GPIO_PIN(digitalPinToPinName(p)))
67
+
68
+ #define digitalPinIsValid (p ) (digitalPinToPinName(p) != NC)
69
+
70
+ // As some pin could be duplicated in digitalPin[]
71
+ // return first occurence of linked PinName (PYx)
72
+ #define digitalPinFirstOccurence (p ) (pinNametoDigitalPin(digitalPinToPinName(p)))
73
+
74
+ // Specific for Firmata. As some pins could be duplicated,
75
+ // ensure 'p' is not one of the serial pins
76
+ #if defined(PIN_SERIAL_RX ) && defined(PIN_SERIAL_TX )
77
+ #define pinIsSerial (p ) ((digitalPinFirstOccurence(p) == PIN_SERIAL_RX) ||\
78
+ (digitalPinFirstOccurence(p) == PIN_SERIAL_TX))
79
+ #endif
67
80
68
81
#ifdef __cplusplus
69
82
}
0 commit comments