Skip to content

Commit f863f17

Browse files
Merge pull request firmata#395 from resin-os/teensy-3.6-uart
Fully support Teensy 3.5 & 3.6 UARTs
2 parents 3028ba8 + c669cc3 commit f863f17

File tree

3 files changed

+57
-5
lines changed

3 files changed

+57
-5
lines changed

Boards.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -434,17 +434,18 @@ writePort(port, value, bitmask): Write an 8 bit port.
434434
#define PIN_SERIAL2_TX 10
435435
#define PIN_SERIAL3_RX 7
436436
#define PIN_SERIAL3_TX 8
437-
// The following 2 UARTs are not yet available via SerialFirmata
438437
#define PIN_SERIAL4_RX 31
439-
#define PIN_SERIAL5_TX 32
440-
#define PIN_SERIAL6_RX 34
441-
#define PIN_SERIAL6_TX 33
438+
#define PIN_SERIAL4_TX 32
439+
#define PIN_SERIAL5_RX 34
440+
#define PIN_SERIAL5_TX 33
441+
#define PIN_SERIAL6_RX 47
442+
#define PIN_SERIAL6_TX 48
442443
#define IS_PIN_DIGITAL(p) ((p) >= 0 && (p) <= 63)
443444
#define IS_PIN_ANALOG(p) (((p) >= 14 && (p) <= 23) || ((p) >= 31 && (p) <= 39) || ((p) >= 49 && (p) <= 50) || ((p) >= 64 && (p) <= 69))
444445
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
445446
#define IS_PIN_SERVO(p) ((p) >= 0 && (p) < MAX_SERVOS)
446447
#define IS_PIN_I2C(p) ((p) == 18 || (p) == 19)
447-
#define IS_PIN_SERIAL(p) (((p) > 6 && (p) < 11) || ((p) == 0 || (p) == 1))
448+
#define IS_PIN_SERIAL(p) (((p) > 6 && (p) < 11) || ((p) == 0 || (p) == 1) || ((p) > 30 && (p) < 35) || ((p) == 47 || (p) == 48))
448449
#define PIN_TO_DIGITAL(p) (p)
449450
// A0-A9 = D14-D23; A12-A20 = D31-D39; A23-A24 = D49-D50; A10-A11 = D64-D65; A21-A22 = D66-D67; A25-A26 = D68-D69
450451
#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)))))

utility/SerialFirmata.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,18 @@ Stream* SerialFirmata::getPortFromId(byte portId)
252252
case HW_SERIAL3:
253253
return &Serial3;
254254
#endif
255+
#if defined(PIN_SERIAL4_RX)
256+
case HW_SERIAL4:
257+
return &Serial4;
258+
#endif
259+
#if defined(PIN_SERIAL5_RX)
260+
case HW_SERIAL5:
261+
return &Serial5;
262+
#endif
263+
#if defined(PIN_SERIAL6_RX)
264+
case HW_SERIAL6:
265+
return &Serial6;
266+
#endif
255267
#if defined(SoftwareSerial_h)
256268
case SW_SERIAL0:
257269
if (swSerial0 != NULL) {

utility/SerialFirmata.h

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@
3737
#define HW_SERIAL1 0x01
3838
#define HW_SERIAL2 0x02
3939
#define HW_SERIAL3 0x03
40+
#define HW_SERIAL4 0x04
41+
#define HW_SERIAL5 0x05
42+
#define HW_SERIAL6 0x06
4043
// extensible up to 0x07
4144

4245
#define SW_SERIAL0 0x08
@@ -56,6 +59,12 @@
5659
#define RES_TX2 0x05
5760
#define RES_RX3 0x06
5861
#define RES_TX3 0x07
62+
#define RES_RX4 0x08
63+
#define RES_TX4 0x09
64+
#define RES_RX5 0x0a
65+
#define RES_TX5 0x0b
66+
#define RES_RX6 0x0c
67+
#define RES_TX6 0x0d
5968

6069
// Serial command bytes
6170
#define SERIAL_CONFIG 0x10
@@ -96,6 +105,18 @@ namespace {
96105
#if defined(PIN_SERIAL3_RX)
97106
if (pin == PIN_SERIAL3_RX) return RES_RX3;
98107
if (pin == PIN_SERIAL3_TX) return RES_TX3;
108+
#endif
109+
#if defined(PIN_SERIAL4_RX)
110+
if (pin == PIN_SERIAL4_RX) return RES_RX4;
111+
if (pin == PIN_SERIAL4_TX) return RES_TX4;
112+
#endif
113+
#if defined(PIN_SERIAL5_RX)
114+
if (pin == PIN_SERIAL5_RX) return RES_RX5;
115+
if (pin == PIN_SERIAL5_TX) return RES_TX5;
116+
#endif
117+
#if defined(PIN_SERIAL6_RX)
118+
if (pin == PIN_SERIAL6_RX) return RES_RX6;
119+
if (pin == PIN_SERIAL6_TX) return RES_TX6;
99120
#endif
100121
return 0;
101122
}
@@ -128,6 +149,24 @@ namespace {
128149
pins.rx = PIN_SERIAL3_RX;
129150
pins.tx = PIN_SERIAL3_TX;
130151
break;
152+
#endif
153+
#if defined(PIN_SERIAL4_RX)
154+
case HW_SERIAL4:
155+
pins.rx = PIN_SERIAL4_RX;
156+
pins.tx = PIN_SERIAL4_TX;
157+
break;
158+
#endif
159+
#if defined(PIN_SERIAL5_RX)
160+
case HW_SERIAL5:
161+
pins.rx = PIN_SERIAL5_RX;
162+
pins.tx = PIN_SERIAL5_TX;
163+
break;
164+
#endif
165+
#if defined(PIN_SERIAL6_RX)
166+
case HW_SERIAL6:
167+
pins.rx = PIN_SERIAL6_RX;
168+
pins.tx = PIN_SERIAL6_TX;
169+
break;
131170
#endif
132171
default:
133172
pins.rx = 0;

0 commit comments

Comments
 (0)