Skip to content

Commit 470a83c

Browse files
Merge pull request firmata#179 from firmata/configurable_dev
merge configurable_dev into configurable
2 parents dce3814 + 6750ab5 commit 470a83c

31 files changed

+530
-398
lines changed

Boards.h

Lines changed: 61 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include <inttypes.h>
77

88
#if defined(ARDUINO) && ARDUINO >= 100
9-
#include "Arduino.h" // for digitalRead, digitalWrite, etc
9+
#include "Arduino.h" // for digitalRead, digitalWrite, etc
1010
#else
1111
#include "WProgram.h"
1212
#endif
@@ -23,7 +23,7 @@
2323
Firmata Hardware Abstraction Layer
2424
2525
Firmata is built on top of the hardware abstraction functions of Arduino,
26-
specifically digitalWrite, digitalRead, analogWrite, analogRead, and
26+
specifically digitalWrite, digitalRead, analogWrite, analogRead, and
2727
pinMode. While these functions offer simple integer pin numbers, Firmata
2828
needs more information than is provided by Arduino. This file provides
2929
all other hardware specific details. To make Firmata support a new board,
@@ -165,7 +165,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
165165
#define PIN_TO_DIGITAL(p) (p)
166166
#define PIN_TO_ANALOG(p) ((p) - FIRST_ANALOG_PIN)
167167
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
168-
#define PIN_TO_SERVO(p) (p)
168+
#define PIN_TO_SERVO(p) (p)
169169

170170

171171
// old Arduinos
@@ -214,7 +214,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
214214
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
215215
#define IS_PIN_SERVO(p) ((p) >= 2 && (p) - 2 < MAX_SERVOS)
216216
#define IS_PIN_I2C(p) ((p) == 20 || (p) == 21) // 70 71
217-
#define IS_PIN_INTERRUPT(p) IS_PIN_DIGITAL(p)
217+
#define IS_PIN_INTERRUPT(p) IS_PIN_DIGITAL(p)
218218
#define PIN_TO_DIGITAL(p) (p)
219219
#define PIN_TO_ANALOG(p) ((p) - 54)
220220
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
@@ -271,7 +271,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
271271
#define PIN_TO_DIGITAL(p) (p)
272272
#define PIN_TO_ANALOG(p) (((p)<=23)?(p)-14:(p)-24)
273273
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
274-
#define PIN_TO_SERVO(p) (p)
274+
#define PIN_TO_SERVO(p) (p)
275275

276276

277277
// Teensy++ 1.0 and 2.0
@@ -307,7 +307,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
307307
#define PIN_TO_DIGITAL(p) (p)
308308
#define PIN_TO_ANALOG(p) (p) - 18
309309
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
310-
#define PIN_TO_SERVO(p) (p)
310+
#define PIN_TO_SERVO(p) (p)
311311

312312

313313
// Intel Galileo Board
@@ -320,7 +320,7 @@ writePort(port, value, bitmask): Write an 8 bit port.
320320
#define IS_PIN_PWM(p) digitalPinHasPWM(p)
321321
#define IS_PIN_SERVO(p) (IS_PIN_DIGITAL(p) && (p) - 2 < MAX_SERVOS)
322322
#define IS_PIN_I2C(p) ((p) == SDA || (p) == SCL)
323-
#define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
323+
#define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK)
324324
#define PIN_TO_DIGITAL(p) (p)
325325
#define PIN_TO_ANALOG(p) ((p) - 14)
326326
#define PIN_TO_PWM(p) PIN_TO_DIGITAL(p)
@@ -379,21 +379,21 @@ static inline unsigned char readPort(byte, byte) __attribute__((always_inline, u
379379
static inline unsigned char readPort(byte port, byte bitmask)
380380
{
381381
#if defined(ARDUINO_PINOUT_OPTIMIZE)
382-
if (port == 0) return (PIND & 0xFC) & bitmask; // ignore Rx/Tx 0/1
383-
if (port == 1) return ((PINB & 0x3F) | ((PINC & 0x03) << 6)) & bitmask;
384-
if (port == 2) return ((PINC & 0x3C) >> 2) & bitmask;
385-
return 0;
382+
if (port == 0) return (PIND & 0xFC) & bitmask; // ignore Rx/Tx 0/1
383+
if (port == 1) return ((PINB & 0x3F) | ((PINC & 0x03) << 6)) & bitmask;
384+
if (port == 2) return ((PINC & 0x3C) >> 2) & bitmask;
385+
return 0;
386386
#else
387-
unsigned char out=0, pin=port*8;
388-
if (IS_PIN_DIGITAL(pin+0) && (bitmask & 0x01) && digitalRead(PIN_TO_DIGITAL(pin+0))) out |= 0x01;
389-
if (IS_PIN_DIGITAL(pin+1) && (bitmask & 0x02) && digitalRead(PIN_TO_DIGITAL(pin+1))) out |= 0x02;
390-
if (IS_PIN_DIGITAL(pin+2) && (bitmask & 0x04) && digitalRead(PIN_TO_DIGITAL(pin+2))) out |= 0x04;
391-
if (IS_PIN_DIGITAL(pin+3) && (bitmask & 0x08) && digitalRead(PIN_TO_DIGITAL(pin+3))) out |= 0x08;
392-
if (IS_PIN_DIGITAL(pin+4) && (bitmask & 0x10) && digitalRead(PIN_TO_DIGITAL(pin+4))) out |= 0x10;
393-
if (IS_PIN_DIGITAL(pin+5) && (bitmask & 0x20) && digitalRead(PIN_TO_DIGITAL(pin+5))) out |= 0x20;
394-
if (IS_PIN_DIGITAL(pin+6) && (bitmask & 0x40) && digitalRead(PIN_TO_DIGITAL(pin+6))) out |= 0x40;
395-
if (IS_PIN_DIGITAL(pin+7) && (bitmask & 0x80) && digitalRead(PIN_TO_DIGITAL(pin+7))) out |= 0x80;
396-
return out;
387+
unsigned char out = 0, pin = port * 8;
388+
if (IS_PIN_DIGITAL(pin + 0) && (bitmask & 0x01) && digitalRead(PIN_TO_DIGITAL(pin + 0))) out |= 0x01;
389+
if (IS_PIN_DIGITAL(pin + 1) && (bitmask & 0x02) && digitalRead(PIN_TO_DIGITAL(pin + 1))) out |= 0x02;
390+
if (IS_PIN_DIGITAL(pin + 2) && (bitmask & 0x04) && digitalRead(PIN_TO_DIGITAL(pin + 2))) out |= 0x04;
391+
if (IS_PIN_DIGITAL(pin + 3) && (bitmask & 0x08) && digitalRead(PIN_TO_DIGITAL(pin + 3))) out |= 0x08;
392+
if (IS_PIN_DIGITAL(pin + 4) && (bitmask & 0x10) && digitalRead(PIN_TO_DIGITAL(pin + 4))) out |= 0x10;
393+
if (IS_PIN_DIGITAL(pin + 5) && (bitmask & 0x20) && digitalRead(PIN_TO_DIGITAL(pin + 5))) out |= 0x20;
394+
if (IS_PIN_DIGITAL(pin + 6) && (bitmask & 0x40) && digitalRead(PIN_TO_DIGITAL(pin + 6))) out |= 0x40;
395+
if (IS_PIN_DIGITAL(pin + 7) && (bitmask & 0x80) && digitalRead(PIN_TO_DIGITAL(pin + 7))) out |= 0x80;
396+
return out;
397397
#endif
398398
}
399399

@@ -405,42 +405,47 @@ static inline unsigned char writePort(byte, byte, byte) __attribute__((always_in
405405
static inline unsigned char writePort(byte port, byte value, byte bitmask)
406406
{
407407
#if defined(ARDUINO_PINOUT_OPTIMIZE)
408-
if (port == 0) {
409-
bitmask = bitmask & 0xFC; // do not touch Tx & Rx pins
410-
byte valD = value & bitmask;
411-
byte maskD = ~bitmask;
412-
cli();
413-
PORTD = (PORTD & maskD) | valD;
414-
sei();
415-
} else if (port == 1) {
416-
byte valB = (value & bitmask) & 0x3F;
417-
byte valC = (value & bitmask) >> 6;
418-
byte maskB = ~(bitmask & 0x3F);
419-
byte maskC = ~((bitmask & 0xC0) >> 6);
420-
cli();
421-
PORTB = (PORTB & maskB) | valB;
422-
PORTC = (PORTC & maskC) | valC;
423-
sei();
424-
} else if (port == 2) {
425-
bitmask = bitmask & 0x0F;
426-
byte valC = (value & bitmask) << 2;
427-
byte maskC = ~(bitmask << 2);
428-
cli();
429-
PORTC = (PORTC & maskC) | valC;
430-
sei();
431-
}
432-
return 1;
408+
if (port == 0)
409+
{
410+
bitmask = bitmask & 0xFC; // do not touch Tx & Rx pins
411+
byte valD = value & bitmask;
412+
byte maskD = ~bitmask;
413+
cli();
414+
PORTD = (PORTD & maskD) | valD;
415+
sei();
416+
}
417+
else if (port == 1)
418+
{
419+
byte valB = (value & bitmask) & 0x3F;
420+
byte valC = (value & bitmask) >> 6;
421+
byte maskB = ~(bitmask & 0x3F);
422+
byte maskC = ~((bitmask & 0xC0) >> 6);
423+
cli();
424+
PORTB = (PORTB & maskB) | valB;
425+
PORTC = (PORTC & maskC) | valC;
426+
sei();
427+
}
428+
else if (port == 2)
429+
{
430+
bitmask = bitmask & 0x0F;
431+
byte valC = (value & bitmask) << 2;
432+
byte maskC = ~(bitmask << 2);
433+
cli();
434+
PORTC = (PORTC & maskC) | valC;
435+
sei();
436+
}
437+
return 1;
433438
#else
434-
byte pin=port*8;
435-
if ((bitmask & 0x01)) digitalWrite(PIN_TO_DIGITAL(pin+0), (value & 0x01));
436-
if ((bitmask & 0x02)) digitalWrite(PIN_TO_DIGITAL(pin+1), (value & 0x02));
437-
if ((bitmask & 0x04)) digitalWrite(PIN_TO_DIGITAL(pin+2), (value & 0x04));
438-
if ((bitmask & 0x08)) digitalWrite(PIN_TO_DIGITAL(pin+3), (value & 0x08));
439-
if ((bitmask & 0x10)) digitalWrite(PIN_TO_DIGITAL(pin+4), (value & 0x10));
440-
if ((bitmask & 0x20)) digitalWrite(PIN_TO_DIGITAL(pin+5), (value & 0x20));
441-
if ((bitmask & 0x40)) digitalWrite(PIN_TO_DIGITAL(pin+6), (value & 0x40));
442-
if ((bitmask & 0x80)) digitalWrite(PIN_TO_DIGITAL(pin+7), (value & 0x80));
443-
return 1;
439+
byte pin = port * 8;
440+
if ((bitmask & 0x01)) digitalWrite(PIN_TO_DIGITAL(pin + 0), (value & 0x01));
441+
if ((bitmask & 0x02)) digitalWrite(PIN_TO_DIGITAL(pin + 1), (value & 0x02));
442+
if ((bitmask & 0x04)) digitalWrite(PIN_TO_DIGITAL(pin + 2), (value & 0x04));
443+
if ((bitmask & 0x08)) digitalWrite(PIN_TO_DIGITAL(pin + 3), (value & 0x08));
444+
if ((bitmask & 0x10)) digitalWrite(PIN_TO_DIGITAL(pin + 4), (value & 0x10));
445+
if ((bitmask & 0x20)) digitalWrite(PIN_TO_DIGITAL(pin + 5), (value & 0x20));
446+
if ((bitmask & 0x40)) digitalWrite(PIN_TO_DIGITAL(pin + 6), (value & 0x40));
447+
if ((bitmask & 0x80)) digitalWrite(PIN_TO_DIGITAL(pin + 7), (value & 0x80));
448+
return 1;
444449
#endif
445450
}
446451

0 commit comments

Comments
 (0)