Skip to content

Commit 958b9a9

Browse files
temporary fix for digitalWriteCallback Zero issue firmata#231
1 parent 12a6104 commit 958b9a9

File tree

6 files changed

+42
-18
lines changed

6 files changed

+42
-18
lines changed

examples/StandardFirmata/StandardFirmata.ino

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ void analogWriteCallback(byte pin, int value)
344344

345345
void digitalWriteCallback(byte port, int value)
346346
{
347-
byte pin, lastPin, mask = 1, pinWriteMask = 0;
347+
byte pin, lastPin, pinValue, mask = 1, pinWriteMask = 0;
348348

349349
if (port < TOTAL_PORTS) {
350350
// create a mask of the pins on this port that are writable.
@@ -356,8 +356,12 @@ void digitalWriteCallback(byte port, int value)
356356
// only write to OUTPUT and INPUT (enables pullup)
357357
// do not touch pins in PWM, ANALOG, SERVO or other modes
358358
if (pinConfig[pin] == OUTPUT || pinConfig[pin] == INPUT) {
359-
pinWriteMask |= mask;
360-
pinState[pin] = ((byte)value & mask) ? 1 : 0;
359+
pinValue = ((byte)value & mask) ? 1 : 0;
360+
// temporary fix until INPUT_PULLUP is added
361+
if (pinConfig[pin] == OUTPUT || (pinConfig[pin] == INPUT && pinValue == 1)) {
362+
pinWriteMask |= mask;
363+
}
364+
pinState[pin] = pinValue;
361365
}
362366
}
363367
mask = mask << 1;

examples/StandardFirmataChipKIT/StandardFirmataChipKIT.ino

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ void analogWriteCallback(byte pin, int value)
355355

356356
void digitalWriteCallback(byte port, int value)
357357
{
358-
byte pin, lastPin, mask = 1, pinWriteMask = 0;
358+
byte pin, lastPin, pinValue, mask = 1, pinWriteMask = 0;
359359

360360
if (port < TOTAL_PORTS) {
361361
// create a mask of the pins on this port that are writable.
@@ -367,8 +367,12 @@ void digitalWriteCallback(byte port, int value)
367367
// only write to OUTPUT and INPUT (enables pullup)
368368
// do not touch pins in PWM, ANALOG, SERVO or other modes
369369
if (pinConfig[pin] == OUTPUT || pinConfig[pin] == INPUT) {
370-
pinWriteMask |= mask;
371-
pinState[pin] = ((byte)value & mask) ? 1 : 0;
370+
pinValue = ((byte)value & mask) ? 1 : 0;
371+
// temporary fix until INPUT_PULLUP is added
372+
if (pinConfig[pin] == OUTPUT || (pinConfig[pin] == INPUT && pinValue == 1)) {
373+
pinWriteMask |= mask;
374+
}
375+
pinState[pin] = pinValue;
372376
}
373377
}
374378
mask = mask << 1;

examples/StandardFirmataEthernet/StandardFirmataEthernet.ino

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ void analogWriteCallback(byte pin, int value)
460460

461461
void digitalWriteCallback(byte port, int value)
462462
{
463-
byte pin, lastPin, mask = 1, pinWriteMask = 0;
463+
byte pin, lastPin, pinValue, mask = 1, pinWriteMask = 0;
464464

465465
if (port < TOTAL_PORTS) {
466466
// create a mask of the pins on this port that are writable.
@@ -472,8 +472,12 @@ void digitalWriteCallback(byte port, int value)
472472
// only write to OUTPUT and INPUT (enables pullup)
473473
// do not touch pins in PWM, ANALOG, SERVO or other modes
474474
if (pinConfig[pin] == OUTPUT || pinConfig[pin] == INPUT) {
475-
pinWriteMask |= mask;
476-
pinState[pin] = ((byte)value & mask) ? 1 : 0;
475+
pinValue = ((byte)value & mask) ? 1 : 0;
476+
// temporary fix until INPUT_PULLUP is added
477+
if (pinConfig[pin] == OUTPUT || (pinConfig[pin] == INPUT && pinValue == 1)) {
478+
pinWriteMask |= mask;
479+
}
480+
pinState[pin] = pinValue;
477481
}
478482
}
479483
mask = mask << 1;

examples/StandardFirmataEthernetPlus/StandardFirmataEthernetPlus.ino

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ void analogWriteCallback(byte pin, int value)
550550

551551
void digitalWriteCallback(byte port, int value)
552552
{
553-
byte pin, lastPin, mask = 1, pinWriteMask = 0;
553+
byte pin, lastPin, pinValue, mask = 1, pinWriteMask = 0;
554554

555555
if (port < TOTAL_PORTS) {
556556
// create a mask of the pins on this port that are writable.
@@ -562,8 +562,12 @@ void digitalWriteCallback(byte port, int value)
562562
// only write to OUTPUT and INPUT (enables pullup)
563563
// do not touch pins in PWM, ANALOG, SERVO or other modes
564564
if (pinConfig[pin] == OUTPUT || pinConfig[pin] == INPUT) {
565-
pinWriteMask |= mask;
566-
pinState[pin] = ((byte)value & mask) ? 1 : 0;
565+
pinValue = ((byte)value & mask) ? 1 : 0;
566+
// temporary fix until INPUT_PULLUP is added
567+
if (pinConfig[pin] == OUTPUT || (pinConfig[pin] == INPUT && pinValue == 1)) {
568+
pinWriteMask |= mask;
569+
}
570+
pinState[pin] = pinValue;
567571
}
568572
}
569573
mask = mask << 1;

examples/StandardFirmataPlus/StandardFirmataPlus.ino

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ void analogWriteCallback(byte pin, int value)
482482

483483
void digitalWriteCallback(byte port, int value)
484484
{
485-
byte pin, lastPin, mask = 1, pinWriteMask = 0;
485+
byte pin, lastPin, pinValue, mask = 1, pinWriteMask = 0;
486486

487487
if (port < TOTAL_PORTS) {
488488
// create a mask of the pins on this port that are writable.
@@ -494,8 +494,12 @@ void digitalWriteCallback(byte port, int value)
494494
// only write to OUTPUT and INPUT (enables pullup)
495495
// do not touch pins in PWM, ANALOG, SERVO or other modes
496496
if (pinConfig[pin] == OUTPUT || pinConfig[pin] == INPUT) {
497-
pinWriteMask |= mask;
498-
pinState[pin] = ((byte)value & mask) ? 1 : 0;
497+
pinValue = ((byte)value & mask) ? 1 : 0;
498+
// temporary fix until INPUT_PULLUP is added
499+
if (pinConfig[pin] == OUTPUT || (pinConfig[pin] == INPUT && pinValue == 1)) {
500+
pinWriteMask |= mask;
501+
}
502+
pinState[pin] = pinValue;
499503
}
500504
}
501505
mask = mask << 1;

examples/StandardFirmataYun/StandardFirmataYun.ino

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ void analogWriteCallback(byte pin, int value)
356356

357357
void digitalWriteCallback(byte port, int value)
358358
{
359-
byte pin, lastPin, mask = 1, pinWriteMask = 0;
359+
byte pin, lastPin, pinValue, mask = 1, pinWriteMask = 0;
360360

361361
if (port < TOTAL_PORTS) {
362362
// create a mask of the pins on this port that are writable.
@@ -368,8 +368,12 @@ void digitalWriteCallback(byte port, int value)
368368
// only write to OUTPUT and INPUT (enables pullup)
369369
// do not touch pins in PWM, ANALOG, SERVO or other modes
370370
if (pinConfig[pin] == OUTPUT || pinConfig[pin] == INPUT) {
371-
pinWriteMask |= mask;
372-
pinState[pin] = ((byte)value & mask) ? 1 : 0;
371+
pinValue = ((byte)value & mask) ? 1 : 0;
372+
// temporary fix until INPUT_PULLUP is added
373+
if (pinConfig[pin] == OUTPUT || (pinConfig[pin] == INPUT && pinValue == 1)) {
374+
pinWriteMask |= mask;
375+
}
376+
pinState[pin] = pinValue;
373377
}
374378
}
375379
mask = mask << 1;

0 commit comments

Comments
 (0)