@@ -72,7 +72,7 @@ Firmata protocol and the actual pin numbers used by the Arduino
7272functions. Even though such mappings are often simple, pin
7373numbers received by Firmata protocol should always be used as
7474input to these macros, and the result of the macro should be
75- used with with any Arduino function.
75+ used with any Arduino function.
7676
7777When Firmata is extended to support a new pin mode or feature,
7878a pair of macros should be added and used for all hardware
@@ -144,6 +144,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
144144#define IS_PIN_SERVO (p ) (IS_PIN_DIGITAL(p) && (p) - 2 < MAX_SERVOS)
145145#define IS_PIN_I2C (p ) ((p) == 18 || (p) == 19)
146146#define IS_PIN_SPI (p ) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
147+ #define IS_PIN_INTERRUPT (p ) ((p)==2 || (p)==3)
147148#define PIN_TO_DIGITAL (p ) (p)
148149#define PIN_TO_ANALOG (p ) ((p) - 14)
149150#define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
@@ -160,6 +161,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
160161#define IS_PIN_SERVO (p ) ((p) >= 0 && (p) < MAX_SERVOS)
161162#define IS_PIN_I2C (p ) ((p) == SDA || (p) == SCL)
162163#define IS_PIN_SPI (p ) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
164+ #define IS_PIN_INTERRUPT (p ) 0
163165#define PIN_TO_DIGITAL (p ) (p)
164166#define PIN_TO_ANALOG (p ) ((p) - FIRST_ANALOG_PIN)
165167#define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
@@ -176,6 +178,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
176178#define IS_PIN_PWM (p ) digitalPinHasPWM(p)
177179#define IS_PIN_SERVO (p ) (IS_PIN_DIGITAL(p) && (p) - 2 < MAX_SERVOS)
178180#define IS_PIN_I2C (p ) ((p) == 18 || (p) == 19)
181+ #define IS_PIN_INTERRUPT (p ) ((p)==2 || (p)==3)
179182#define PIN_TO_DIGITAL (p ) (p)
180183#define PIN_TO_ANALOG (p ) ((p) - 14)
181184#define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
@@ -194,6 +197,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
194197#define IS_PIN_SERVO (p ) ((p) >= 2 && (p) - 2 < MAX_SERVOS)
195198#define IS_PIN_I2C (p ) ((p) == 20 || (p) == 21)
196199#define IS_PIN_SPI (p ) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
200+ #define IS_PIN_INTERRUPT (p ) ((p)==2 || (p)==3 || (p)==18 || (p)==19 || (p)==20 || (p)==21)
197201#define PIN_TO_DIGITAL (p ) (p)
198202#define PIN_TO_ANALOG (p ) ((p) - 54)
199203#define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
@@ -210,6 +214,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
210214#define IS_PIN_PWM (p ) digitalPinHasPWM(p)
211215#define IS_PIN_SERVO (p ) ((p) >= 2 && (p) - 2 < MAX_SERVOS)
212216#define IS_PIN_I2C (p ) ((p) == 20 || (p) == 21) // 70 71
217+ #define IS_PIN_INTERRUPT (p ) IS_PIN_DIGITAL(p)
213218#define PIN_TO_DIGITAL (p ) (p)
214219#define PIN_TO_ANALOG (p ) ((p) - 54)
215220#define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
@@ -227,6 +232,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
227232#define IS_PIN_SERVO (p ) ((p) >= 0 && (p) < MAX_SERVOS)
228233#define IS_PIN_I2C (p ) (0)
229234#define IS_PIN_SPI (p ) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
235+ #define IS_PIN_INTERRUPT (p ) ((p) == 0 || (p) == 1 || (p) == 2 ||(p) == 3 || (p) == 4 || (p) == 6 ||(p) == 7 ||(p) == 16)
230236#define PIN_TO_DIGITAL (p ) (p)
231237#define PIN_TO_ANALOG (p ) (0)
232238#define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
@@ -244,6 +250,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
244250#define IS_PIN_SERVO (p ) ((p) >= 0 && (p) < MAX_SERVOS)
245251#define IS_PIN_I2C (p ) ((p) == 5 || (p) == 6)
246252#define IS_PIN_SPI (p ) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
253+ #define IS_PIN_INTERRUPT (p ) ((p) == 5 || (p) == 6 || (p) == 7 || (p) == 8)
247254#define PIN_TO_DIGITAL (p ) (p)
248255#define PIN_TO_ANALOG (p ) (((p)<22)?21-(p):11)
249256#define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
@@ -260,6 +267,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
260267#define IS_PIN_PWM (p ) digitalPinHasPWM(p)
261268#define IS_PIN_SERVO (p ) ((p) >= 0 && (p) < MAX_SERVOS)
262269#define IS_PIN_I2C (p ) ((p) == 18 || (p) == 19)
270+ #define IS_PIN_INTERRUPT (p ) IS_PIN_DIGITAL(p)
263271#define PIN_TO_DIGITAL (p ) (p)
264272#define PIN_TO_ANALOG (p ) (((p)<=23)?(p)-14:(p)-24)
265273#define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
@@ -277,6 +285,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
277285#define IS_PIN_SERVO (p ) ((p) >= 0 && (p) < MAX_SERVOS)
278286#define IS_PIN_I2C (p ) ((p) == 0 || (p) == 1)
279287#define IS_PIN_SPI (p ) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
288+ #define IS_PIN_INTERRUPT (p ) ((p) == 0 || (p) == 1 || (p) == 2 ||(p) == 3 ||(p) == 18 ||(p) == 19 ||(p) == 36 ||(p) == 37)
280289#define PIN_TO_DIGITAL (p ) (p)
281290#define PIN_TO_ANALOG (p ) ((p) - 38)
282291#define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
@@ -294,6 +303,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
294303#define IS_PIN_SERVO (p ) ((p) >= 0 && (p) < MAX_SERVOS)
295304#define IS_PIN_I2C (p ) ((p) == 2 || (p) == 3)
296305#define IS_PIN_SPI (p ) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
306+ #define IS_PIN_INTERRUPT (p ) ((p)==0 || (p)==1 || (p)==2 || (p)==3 || (p)==7)
297307#define PIN_TO_DIGITAL (p ) (p)
298308#define PIN_TO_ANALOG (p ) (p) - 18
299309#define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
@@ -310,6 +320,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
310320#define IS_PIN_PWM (p ) digitalPinHasPWM(p)
311321#define IS_PIN_SERVO (p ) ((p) >= 0 && (p) < MAX_SERVOS)
312322#define IS_PIN_I2C (p ) ((p) == 16 || (p) == 17)
323+ #define IS_PIN_INTERRUPT (p ) ((p)==2 || (p)==10 || (p)==11)
313324#define PIN_TO_DIGITAL (p ) (p)
314325#define PIN_TO_ANALOG (p ) ((p) - 24)
315326#define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
@@ -326,6 +337,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
326337#define IS_PIN_PWM (p ) digitalPinHasPWM(p)
327338#define IS_PIN_SERVO (p ) ((p) >= 0 && (p) < MAX_SERVOS)
328339#define IS_PIN_I2C (p ) ((p) == 4 || (p) == 5)
340+ #define IS_PIN_INTERRUPT (p ) (0)
329341#define PIN_TO_DIGITAL (p ) (p)
330342#define PIN_TO_ANALOG (p ) ((p) - 36)
331343#define PIN_TO_PWM (p ) PIN_TO_DIGITAL(p)
@@ -338,8 +350,8 @@ writePort(port, value, bitmask): Write an 8 bit port.
338350#endif
339351
340352// as long this is not defined for all boards:
341- #ifndef IS_PIN_SPI ( p )
342- #define IS_PIN_SPI (p ) 0
353+ #ifndef IS_PIN_SPI
354+ #define IS_PIN_SPI (p ) (0)
343355#endif
344356
345357/*==============================================================================
@@ -400,6 +412,7 @@ static inline unsigned char writePort(byte port, byte value, byte bitmask)
400412 PORTC = (PORTC & maskC ) | valC ;
401413 sei ();
402414 }
415+ return 1 ;
403416#else
404417 byte pin = port * 8 ;
405418 if ((bitmask & 0x01 )) digitalWrite (PIN_TO_DIGITAL (pin + 0 ), (value & 0x01 ));
@@ -410,6 +423,7 @@ static inline unsigned char writePort(byte port, byte value, byte bitmask)
410423 if ((bitmask & 0x20 )) digitalWrite (PIN_TO_DIGITAL (pin + 5 ), (value & 0x20 ));
411424 if ((bitmask & 0x40 )) digitalWrite (PIN_TO_DIGITAL (pin + 6 ), (value & 0x40 ));
412425 if ((bitmask & 0x80 )) digitalWrite (PIN_TO_DIGITAL (pin + 7 ), (value & 0x80 ));
426+ return 1 ;
413427#endif
414428}
415429
0 commit comments