Skip to content

Commit ed710fe

Browse files
authored
Merge pull request #43 from fpistm/firmata_update
Firmata update
2 parents 768604c + 8d0c06d commit ed710fe

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+3368
-1503
lines changed

cores/arduino/pins_arduino.h

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,39 @@
2828
// API compatibility
2929
#include "variant.h"
3030

31+
#define NOT_AN_INTERRUPT NC // -1
32+
3133
#define NUM_DIGITAL_PINS DEND
3234
#define NUM_ANALOG_INPUTS (AEND-A0)
3335

3436
// Convert a digital pin number Dxx to a PinName Pxy
3537
// Note: Analog pin is also a digital pin.
36-
#define digitalPinToPinName(p) ((p < NUM_DIGITAL_PINS) ? digitalPin[p] : (STM_VALID_PINNAME(p))? (PinName)p : NC)
38+
#define digitalPinToPinName(p) ((p < NUM_DIGITAL_PINS) ? digitalPin[p] : (STM_VALID_PINNAME(p))? (PinName)p : NC)
3739
// Convert a PinName Pxy to a digital pin number
3840
uint32_t pinNametoDigitalPin(PinName p);
3941

4042
// Convert an analog pin number to a digital pin number
4143
// Used by analogRead api to have A0 == 0
4244
#define analogInputToDigitalPin(p) ((p < NUM_ANALOG_INPUTS) ? (p+A0) : p)
4345
// Convert an analog pin number Axx to a PinName Pxy
44-
#define analogInputToPinName(p) (digitalPinToPinName(analogInputToDigitalPin(p)))
46+
#define analogInputToPinName(p) (digitalPinToPinName(analogInputToDigitalPin(p)))
4547
// All pins could manage EXTI
46-
#define digitalPinToInterrupt(p) (p)
48+
#define digitalPinToInterrupt(p) ((p>=D0) && (p < NUM_DIGITAL_PINS) ? p : NOT_AN_INTERRUPT)
49+
50+
#define digitalPinHasI2C(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_I2C_SDA) ||\
51+
pin_in_pinmap(digitalPinToPinName(p), PinMap_I2C_SCL))
52+
#define digitalPinHasPWM(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_PWM))
53+
#define digitalPinHasSerial(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_UART_RX) ||\
54+
pin_in_pinmap(digitalPinToPinName(p), PinMap_UART_TX))
55+
#define digitalPinHasSPI(p) (pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_MOSI) ||\
56+
pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_MISO) ||\
57+
pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_SCLK) ||\
58+
pin_in_pinmap(digitalPinToPinName(p), PinMap_SPI_SSEL))
59+
60+
61+
#define digitalPinToPort(p) ( get_GPIO_Port(digitalPinToPinName(p)) )
62+
#define digitalPinToBitMask(p) ( STM_GPIO_PIN(digitalPinToPinName(p)) )
63+
4764

48-
#define digitalPinToPort(p) ( get_GPIO_Port(digitalPinToPinName(p)) )
49-
#define digitalPinToBitMask(p) ( STM_GPIO_PIN(digitalPinToPinName(p)) )
5065

51-
#endif /*_PINS_ARDUINO_H_*/
66+
#endif /*_PINS_ARDUINO_H_*/

libraries/Firmata/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.DS_Store

libraries/Firmata/Boards.h

Lines changed: 122 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
Boards.h - Hardware Abstraction Layer for Firmata library
33
Copyright (c) 2006-2008 Hans-Christoph Steiner. All rights reserved.
4-
Copyright (C) 2009-2015 Jeff Hoefs. All rights reserved.
4+
Copyright (C) 2009-2017 Jeff Hoefs. All rights reserved.
55
66
This library is free software; you can redistribute it and/or
77
modify it under the terms of the GNU Lesser General Public
@@ -10,7 +10,7 @@
1010
1111
See file LICENSE.txt for further informations on licensing terms.
1212
13-
Last updated December 19th, 2015
13+
Last updated March 16th, 2017
1414
*/
1515

1616
#ifndef Firmata_Boards_h
@@ -260,6 +260,23 @@ writePort(port, value, bitmask): Write an 8 bit port.
260260
#define PIN_TO_SERVO(p) (p) // deprecated since v2.4
261261

262262

263+
// Arduino MKRZero
264+
#elif defined(ARDUINO_SAMD_MKRZERO)
265+
#define TOTAL_ANALOG_PINS 7
266+
#define TOTAL_PINS 34 // 8 digital + 3 spi + 2 i2c + 2 uart + 7 analog + 3 usb + 1 aref + 5 sd + 1 bottom pad + 1 led + 1 battery adc
267+
#define IS_PIN_DIGITAL(p) ((((p) >= 0 && (p) <= 21) || (p) == 32) && !IS_PIN_SERIAL(p))
268+
#define IS_PIN_ANALOG(p) (((p) >= 15 && (p) < 15 + TOTAL_ANALOG_PINS) || (p) == 33)
269+
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
270+
#define IS_PIN_SERVO(p) (IS_PIN_DIGITAL(p) && (p) < MAX_SERVOS) // deprecated since v2.4
271+
#define IS_PIN_I2C(p) ((p) == 11 || (p) == 12) // SDA = 11, SCL = 12
272+
#define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
273+
#define IS_PIN_SERIAL(p) ((p) == PIN_SERIAL1_RX || (p) == PIN_SERIAL1_TX) //defined in variant.h RX = 13, TX = 14
274+
#define PIN_TO_DIGITAL(p) (p)
275+
#define PIN_TO_ANALOG(p) ((p) - 15)
276+
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
277+
#define PIN_TO_SERVO(p) (p) // deprecated since v2.4
278+
279+
263280
// Arduino Zero
264281
// Note this will work with an Arduino Zero Pro, but not with an Arduino M0 Pro
265282
// Arduino M0 Pro does not properly map pins to the board labeled pin numbers
@@ -282,8 +299,23 @@ writePort(port, value, bitmask): Write an 8 bit port.
282299
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
283300
#define PIN_TO_SERVO(p) (p) // deprecated since v2.4
284301

302+
// Arduino Primo
303+
#elif defined(ARDUINO_PRIMO)
304+
#define TOTAL_ANALOG_PINS 6
305+
#define TOTAL_PINS 22 //14 digital + 6 analog + 2 i2c
306+
#define VERSION_BLINK_PIN LED_BUILTIN
307+
#define IS_PIN_DIGITAL(p) ((p) >= 2 && (p) < 20)
308+
#define IS_PIN_ANALOG(p) ((p) >= 14 && (p) < 20)
309+
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
310+
#define IS_PIN_SERVO(p) (IS_PIN_DIGITAL(p) && (p) < MAX_SERVOS+2)
311+
#define IS_PIN_I2C(p) ((p) == PIN_WIRE_SDA || (p) == PIN_WIRE_SCL) // SDA = 20, SCL = 21
312+
#define IS_PIN_SPI(p) ((p) == SS || (p)== MOSI || (p) == MISO || (p == SCK)) // 10, 11, 12, 13
313+
#define PIN_TO_DIGITAL(p) (p)
314+
#define PIN_TO_ANALOG(p) ((p) - 14)
315+
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
316+
#define PIN_TO_SERVO(p) (p)
285317

286-
// Teensy 1.0
318+
// Arduino 101
287319
#elif defined(_VARIANT_ARDUINO_101_X_)
288320
#define TOTAL_ANALOG_PINS NUM_ANALOG_INPUTS
289321
#define TOTAL_PINS NUM_DIGITAL_PINS // 15 digital (including ATN pin) + 6 analog
@@ -343,6 +375,36 @@ writePort(port, value, bitmask): Write an 8 bit port.
343375
#define PIN_TO_SERVO(p) (p)
344376

345377

378+
// Teensy 3.5 and 3.6
379+
// reference: https://github.com/PaulStoffregen/cores/blob/master/teensy3/pins_arduino.h
380+
#elif defined(__MK64FX512__) || defined(__MK66FX1M0__)
381+
#define TOTAL_ANALOG_PINS 27 // 3.5 has 27 and 3.6 has 25
382+
#define TOTAL_PINS 70 // 43 digital + 21 analog-digital + 6 analog (64-69)
383+
#define VERSION_BLINK_PIN 13
384+
#define PIN_SERIAL1_RX 0
385+
#define PIN_SERIAL1_TX 1
386+
#define PIN_SERIAL2_RX 9
387+
#define PIN_SERIAL2_TX 10
388+
#define PIN_SERIAL3_RX 7
389+
#define PIN_SERIAL3_TX 8
390+
// The following 2 UARTs are not yet available via SerialFirmata
391+
#define PIN_SERIAL4_RX 31
392+
#define PIN_SERIAL5_TX 32
393+
#define PIN_SERIAL6_RX 34
394+
#define PIN_SERIAL6_TX 33
395+
#define IS_PIN_DIGITAL(p) ((p) >= 0 && (p) <= 63)
396+
#define IS_PIN_ANALOG(p) (((p) >= 14 && (p) <= 23) || ((p) >= 31 && (p) <= 39) || ((p) >= 49 && (p) <= 50) || ((p) >= 64 && (p) <= 69))
397+
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
398+
#define IS_PIN_SERVO(p) ((p) >= 0 && (p) < MAX_SERVOS)
399+
#define IS_PIN_I2C(p) ((p) == 18 || (p) == 19)
400+
#define IS_PIN_SERIAL(p) (((p) > 6 && (p) < 11) || ((p) == 0 || (p) == 1))
401+
#define PIN_TO_DIGITAL(p) (p)
402+
// A0-A9 = D14-D23; A12-A20 = D31-D39; A23-A24 = D49-D50; A10-A11 = D64-D65; A21-A22 = D66-D67; A25-A26 = D68-D69
403+
#define PIN_TO_ANALOG(p) (((p) <= 23) ? (p) - 14 : (((p) <= 39) ? (p) - 19 : (((p) <= 50) ? (p) - 26 : (((p) <= 65) ? (p) - 55 : (((p) <= 67) ? (p) - 45 : (p) - 43)))))
404+
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
405+
#define PIN_TO_SERVO(p) (p)
406+
407+
346408
// Teensy 3.0, 3.1 and 3.2
347409
#elif defined(__MK20DX128__) || defined(__MK20DX256__)
348410
#define TOTAL_ANALOG_PINS 14
@@ -449,6 +511,22 @@ writePort(port, value, bitmask): Write an 8 bit port.
449511
#define PIN_TO_SERVO(p) ((p) - 2)
450512

451513

514+
// RedBearLab BLE Nano with factory switch settings (S1 - S10)
515+
#elif defined(BLE_NANO)
516+
#define TOTAL_ANALOG_PINS 6
517+
#define TOTAL_PINS 15 // 9 digital + 3 analog
518+
#define IS_PIN_DIGITAL(p) ((p) >= 2 && (p) <= 14)
519+
#define IS_PIN_ANALOG(p) ((p) == 8 || (p) == 9 || (p) == 10 || (p) == 11 || (p) == 12 || (p) == 14) //A0~A5
520+
#define IS_PIN_PWM(p) ((p) == 3 || (p) == 5 || (p) == 6)
521+
#define IS_PIN_SERVO(p) ((p) >= 2 && (p) <= 7)
522+
#define IS_PIN_I2C(p) ((p) == SDA || (p) == SCL)
523+
#define IS_PIN_SPI(p) ((p) == CS || (p) == MOSI || (p) == MISO || (p) == SCK)
524+
#define PIN_TO_DIGITAL(p) (p)
525+
#define PIN_TO_ANALOG(p) ((p) - 8)
526+
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
527+
#define PIN_TO_SERVO(p) (p)
528+
529+
452530
// Sanguino
453531
#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
454532
#define TOTAL_ANALOG_PINS 8
@@ -665,29 +743,48 @@ writePort(port, value, bitmask): Write an 8 bit port.
665743
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
666744
#define PIN_TO_SERVO(p) ((p) - 2)
667745

668-
// Nucleo STM32F429
669-
#elif defined(STM32)
670-
#define TOTAL_ANALOG_PINS NUM_ANALOG_INPUTS //7
671-
#define TOTAL_PINS NUM_DIGITAL_PINS //22 : All pins can be digital
672-
#define TOTAL_PORTS 3
673-
#define VERSION_BLINK_PIN LED_BUILTIN
674-
#define PIN_SERIAL_RX 9
675-
#define PIN_SERIAL_TX 8
676-
#define PIN_SERIAL1_RX 0
677-
#define PIN_SERIAL1_TX 1
678-
#define PIN_SERIAL2_RX 8
679-
#define PIN_SERIAL2_TX 9
680-
#define IS_PIN_DIGITAL(p) ((p) >= 2 && (p) < TOTAL_PINS)
681-
#define IS_PIN_ANALOG(p) ((p) >= 16 && (p) < TOTAL_PINS)
682-
#define IS_PIN_PWM(p) ((p) == 3 || (p) == 5 || (p) == 6 || (p) == 9 || (p) == 10 || (p) == 11)
683-
#define IS_PIN_SERVO(p) IS_PIN_DIGITAL((p))
684-
#define IS_PIN_I2C(p) ((p) == 14 || (p) == 15)
746+
// ESP8266
747+
// note: boot mode GPIOs 0, 2 and 15 can be used as outputs, GPIOs 6-11 are in use for flash IO
748+
#elif defined(ESP8266)
749+
#define TOTAL_ANALOG_PINS NUM_ANALOG_INPUTS
750+
#define TOTAL_PINS A0 + NUM_ANALOG_INPUTS
751+
#define PIN_SERIAL_RX 3
752+
#define PIN_SERIAL_TX 1
753+
#define IS_PIN_DIGITAL(p) (((p) >= 0 && (p) <= 5) || ((p) >= 12 && (p) < A0))
754+
#define IS_PIN_ANALOG(p) ((p) >= A0 && (p) < A0 + NUM_ANALOG_INPUTS)
755+
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
756+
#define IS_PIN_SERVO(p) (IS_PIN_DIGITAL(p) && (p) < MAX_SERVOS)
757+
#define IS_PIN_I2C(p) ((p) == SDA || (p) == SCL)
685758
#define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
686-
#define IS_PIN_SERIAL(p) ((p) == 0 || (p) == 1)
759+
#define IS_PIN_INTERRUPT(p) (digitalPinToInterrupt(p) > NOT_AN_INTERRUPT)
760+
#define IS_PIN_SERIAL(p) ((p) == PIN_SERIAL_RX || (p) == PIN_SERIAL_TX)
687761
#define PIN_TO_DIGITAL(p) (p)
688-
#define PIN_TO_ANALOG(p) ((p) - 16)
762+
#define PIN_TO_ANALOG(p) ((p) - A0)
763+
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
764+
#define PIN_TO_SERVO(p) (p)
765+
#define DEFAULT_PWM_RESOLUTION 10
766+
767+
// STM32 based boards
768+
#elif defined(ARDUINO_ARCH_STM32)
769+
#define TOTAL_ANALOG_PINS NUM_ANALOG_INPUTS
770+
#define TOTAL_PINS NUM_DIGITAL_PINS
771+
#define TOTAL_PORTS MAX_NB_PORT
772+
#define VERSION_BLINK_PIN LED_BUILTIN
773+
// PIN_SERIALY_RX/TX defined in the variant.h
774+
#define IS_PIN_DIGITAL(p) ((p != PIN_SERIAL_RX) && (p != PIN_SERIAL_TX) &&\
775+
(p >= 0) && (p < TOTAL_PINS))
776+
#define IS_PIN_ANALOG(p) ((p) >= A0 && (p) < AEND)
777+
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
778+
#define IS_PIN_SERVO(p) IS_PIN_DIGITAL(p)
779+
#define IS_PIN_I2C(p) digitalPinHasI2C(p)
780+
#define IS_PIN_SPI(p) digitalPinHasSPI(p)
781+
#define IS_PIN_INTERRUPT(p) (digitalPinToInterrupt(p) > NOT_AN_INTERRUPT)
782+
#define IS_PIN_SERIAL(p) digitalPinHasSerial(p)
783+
#define PIN_TO_DIGITAL(p) (p)
784+
#define PIN_TO_ANALOG(p) (p-A0)
689785
#define PIN_TO_PWM(p) (p)
690786
#define PIN_TO_SERVO(p) (p)
787+
#define DEFAULT_PWM_RESOLUTION PWM_RESOLUTION
691788

692789
// anything else
693790
#else
@@ -703,6 +800,9 @@ writePort(port, value, bitmask): Write an 8 bit port.
703800
#define IS_PIN_SERIAL(p) 0
704801
#endif
705802

803+
#ifndef DEFAULT_PWM_RESOLUTION
804+
#define DEFAULT_PWM_RESOLUTION 8
805+
#endif
706806

707807
/*==============================================================================
708808
* readPort() - Read an 8 bit port

0 commit comments

Comments
 (0)