Skip to content

Commit

Permalink
Merge pull request #395 from resin-os/teensy-3.6-uart
Browse files Browse the repository at this point in the history
Fully support Teensy 3.5 & 3.6 UARTs
  • Loading branch information
soundanalogous committed Apr 15, 2018
2 parents 3028ba8 + c669cc3 commit f863f17
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 5 deletions.
11 changes: 6 additions & 5 deletions Boards.h
Original file line number Diff line number Diff line change
Expand Up @@ -434,17 +434,18 @@ writePort(port, value, bitmask): Write an 8 bit port.
#define PIN_SERIAL2_TX 10
#define PIN_SERIAL3_RX 7
#define PIN_SERIAL3_TX 8
// The following 2 UARTs are not yet available via SerialFirmata
#define PIN_SERIAL4_RX 31
#define PIN_SERIAL5_TX 32
#define PIN_SERIAL6_RX 34
#define PIN_SERIAL6_TX 33
#define PIN_SERIAL4_TX 32
#define PIN_SERIAL5_RX 34
#define PIN_SERIAL5_TX 33
#define PIN_SERIAL6_RX 47
#define PIN_SERIAL6_TX 48
#define IS_PIN_DIGITAL(p) ((p) >= 0 && (p) <= 63)
#define IS_PIN_ANALOG(p) (((p) >= 14 && (p) <= 23) || ((p) >= 31 && (p) <= 39) || ((p) >= 49 && (p) <= 50) || ((p) >= 64 && (p) <= 69))
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
#define IS_PIN_SERVO(p) ((p) >= 0 && (p) < MAX_SERVOS)
#define IS_PIN_I2C(p) ((p) == 18 || (p) == 19)
#define IS_PIN_SERIAL(p) (((p) > 6 && (p) < 11) || ((p) == 0 || (p) == 1))
#define IS_PIN_SERIAL(p) (((p) > 6 && (p) < 11) || ((p) == 0 || (p) == 1) || ((p) > 30 && (p) < 35) || ((p) == 47 || (p) == 48))
#define PIN_TO_DIGITAL(p) (p)
// A0-A9 = D14-D23; A12-A20 = D31-D39; A23-A24 = D49-D50; A10-A11 = D64-D65; A21-A22 = D66-D67; A25-A26 = D68-D69
#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)))))
Expand Down
12 changes: 12 additions & 0 deletions utility/SerialFirmata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,18 @@ Stream* SerialFirmata::getPortFromId(byte portId)
case HW_SERIAL3:
return &Serial3;
#endif
#if defined(PIN_SERIAL4_RX)
case HW_SERIAL4:
return &Serial4;
#endif
#if defined(PIN_SERIAL5_RX)
case HW_SERIAL5:
return &Serial5;
#endif
#if defined(PIN_SERIAL6_RX)
case HW_SERIAL6:
return &Serial6;
#endif
#if defined(SoftwareSerial_h)
case SW_SERIAL0:
if (swSerial0 != NULL) {
Expand Down
39 changes: 39 additions & 0 deletions utility/SerialFirmata.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@
#define HW_SERIAL1 0x01
#define HW_SERIAL2 0x02
#define HW_SERIAL3 0x03
#define HW_SERIAL4 0x04
#define HW_SERIAL5 0x05
#define HW_SERIAL6 0x06
// extensible up to 0x07

#define SW_SERIAL0 0x08
Expand All @@ -56,6 +59,12 @@
#define RES_TX2 0x05
#define RES_RX3 0x06
#define RES_TX3 0x07
#define RES_RX4 0x08
#define RES_TX4 0x09
#define RES_RX5 0x0a
#define RES_TX5 0x0b
#define RES_RX6 0x0c
#define RES_TX6 0x0d

// Serial command bytes
#define SERIAL_CONFIG 0x10
Expand Down Expand Up @@ -96,6 +105,18 @@ namespace {
#if defined(PIN_SERIAL3_RX)
if (pin == PIN_SERIAL3_RX) return RES_RX3;
if (pin == PIN_SERIAL3_TX) return RES_TX3;
#endif
#if defined(PIN_SERIAL4_RX)
if (pin == PIN_SERIAL4_RX) return RES_RX4;
if (pin == PIN_SERIAL4_TX) return RES_TX4;
#endif
#if defined(PIN_SERIAL5_RX)
if (pin == PIN_SERIAL5_RX) return RES_RX5;
if (pin == PIN_SERIAL5_TX) return RES_TX5;
#endif
#if defined(PIN_SERIAL6_RX)
if (pin == PIN_SERIAL6_RX) return RES_RX6;
if (pin == PIN_SERIAL6_TX) return RES_TX6;
#endif
return 0;
}
Expand Down Expand Up @@ -128,6 +149,24 @@ namespace {
pins.rx = PIN_SERIAL3_RX;
pins.tx = PIN_SERIAL3_TX;
break;
#endif
#if defined(PIN_SERIAL4_RX)
case HW_SERIAL4:
pins.rx = PIN_SERIAL4_RX;
pins.tx = PIN_SERIAL4_TX;
break;
#endif
#if defined(PIN_SERIAL5_RX)
case HW_SERIAL5:
pins.rx = PIN_SERIAL5_RX;
pins.tx = PIN_SERIAL5_TX;
break;
#endif
#if defined(PIN_SERIAL6_RX)
case HW_SERIAL6:
pins.rx = PIN_SERIAL6_RX;
pins.tx = PIN_SERIAL6_TX;
break;
#endif
default:
pins.rx = 0;
Expand Down

0 comments on commit f863f17

Please sign in to comment.