Skip to content

Commit b5ce865

Browse files
committed
Various platform classes improvements
* __READ_GPIO() added, * GPIO pin number checked during initialization.
1 parent 655f729 commit b5ce865

3 files changed

Lines changed: 28 additions & 5 deletions

File tree

src/OneWireNg_ArduinoAVR.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,13 @@
1313
#ifndef __OWNG_ARDUINO_AVR__
1414
#define __OWNG_ARDUINO_AVR__
1515

16+
#include <assert.h>
1617
#include "Arduino.h"
1718
#include "OneWireNg_BitBang.h"
1819

20+
#define __READ_GPIO(gs) \
21+
((*gs.inReg & gs.bmsk) != 0)
22+
1923
#define __WRITE_GPIO(gs, st) \
2024
if (st) *gs.outReg |= gs.bmsk; \
2125
else *gs.outReg &= ~gs.bmsk
@@ -74,7 +78,7 @@ class OneWireNg_ArduinoAVR: public OneWireNg_BitBang
7478
virtual int readGpioIn(GpioType gpio)
7579
{
7680
UNUSED(gpio);
77-
return ((*_dtaGpio.inReg & _dtaGpio.bmsk) != 0);
81+
return __READ_GPIO(_dtaGpio);
7882
}
7983

8084
virtual void writeGpioOut(GpioType gpio, int state)
@@ -106,6 +110,8 @@ class OneWireNg_ArduinoAVR: public OneWireNg_BitBang
106110
void initDtaGpio(unsigned pin, bool pullUp)
107111
{
108112
uint8_t port = digitalPinToPort(pin);
113+
assert(port != NOT_A_PIN);
114+
109115
_dtaGpio.bmsk = digitalPinToBitMask(pin);
110116
_dtaGpio.inReg = portInputRegister(port);
111117
_dtaGpio.outReg = portOutputRegister(port);
@@ -127,6 +133,8 @@ class OneWireNg_ArduinoAVR: public OneWireNg_BitBang
127133
void initPwrCtrlGpio(unsigned pin)
128134
{
129135
uint8_t port = digitalPinToPort(pin);
136+
assert(port != NOT_A_PIN);
137+
130138
_pwrCtrlGpio.bmsk = digitalPinToBitMask(pin);
131139
_pwrCtrlGpio.outReg = portOutputRegister(port);
132140
_pwrCtrlGpio.modReg = portModeRegister(port);
@@ -151,5 +159,6 @@ class OneWireNg_ArduinoAVR: public OneWireNg_BitBang
151159
#undef __GPIO_AS_OUTPUT
152160
#undef __GPIO_AS_INPUT
153161
#undef __WRITE_GPIO
162+
#undef __READ_GPIO
154163

155164
#endif /* __OWNG_ARDUINO_AVR__ */

src/OneWireNg_ArduinoESP8266.h

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,13 @@
1313
#ifndef __OWNG_ARDUINO_ESP8266__
1414
#define __OWNG_ARDUINO_ESP8266__
1515

16+
#include <assert.h>
1617
#include "Arduino.h"
1718
#include "OneWireNg_BitBang.h"
1819

20+
#define __READ_GPIO(pin) \
21+
(pin < 16 ? GPIP(pin) : pin == 16 ? (GP16I & 0x01) : 1)
22+
1923
#define __WRITE_GPIO(pin, st) \
2024
if (pin < 16) { \
2125
if (st) GPOS = (1 << pin); else GPOC = (1 << pin); \
@@ -59,6 +63,9 @@ class OneWireNg_ArduinoESP8266: public OneWireNg_BitBang
5963
OneWireNg_ArduinoESP8266(unsigned pin, bool pullUp):
6064
OneWireNg_BitBang(false)
6165
{
66+
assert(pin >= 0 && pin <= 16);
67+
assert(pullup && pin < 16);
68+
6269
_dtaPin = pin;
6370
initDtaGpio(pullUp);
6471
}
@@ -81,6 +88,9 @@ class OneWireNg_ArduinoESP8266: public OneWireNg_BitBang
8188
OneWireNg_ArduinoESP8266(unsigned pin, unsigned pwrCtrlPin, bool pullUp):
8289
OneWireNg_BitBang(true)
8390
{
91+
assert(pin >= 0 && pin <= 16 && pwrCtrlPin >= 0 && pwrCtrlPin <= 16);
92+
assert(pullup && pin < 16);
93+
8494
_dtaPin = pin;
8595
_pwrCtrlPin = pwrCtrlPin;
8696

@@ -92,8 +102,7 @@ class OneWireNg_ArduinoESP8266: public OneWireNg_BitBang
92102
virtual int readGpioIn(GpioType gpio)
93103
{
94104
UNUSED(gpio);
95-
return (_dtaPin < 16 ? GPIP(_dtaPin) :
96-
_dtaPin == 16 ? (GP16I & 0x01) : 1);
105+
return __READ_GPIO(pin);
97106
}
98107

99108
virtual void writeGpioOut(GpioType gpio, int state)
@@ -130,7 +139,7 @@ class OneWireNg_ArduinoESP8266: public OneWireNg_BitBang
130139

131140
void initPwrCtrlGpio(void)
132141
{
133-
pinMode(_pwrCtrlPin, OUTPUT_OPEN_DRAIN);
142+
pinMode(_pwrCtrlPin, OUTPUT);
134143
setupPwrCtrlGpio(true);
135144
}
136145

@@ -142,5 +151,6 @@ class OneWireNg_ArduinoESP8266: public OneWireNg_BitBang
142151
#undef __GPIO_AS_OUTPUT
143152
#undef __GPIO_AS_INPUT
144153
#undef __WRITE_GPIO
154+
#undef __READ_GPIO
145155

146156
#endif /* __OWNG_ARDUINO_ESP8266__ */

src/OneWireNg_ArduinoMegaAVR.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
#include "Arduino.h"
1818
#include "OneWireNg_BitBang.h"
1919

20+
#define __READ_GPIO(gs) \
21+
((gs.port->IN & gs.bmsk) != 0)
22+
2023
#define __WRITE_GPIO(gs, st) \
2124
if (st) gs.port->OUTSET = gs.bmsk; \
2225
else gs.port->OUTCLR = gs.bmsk
@@ -76,7 +79,7 @@ class OneWireNg_ArduinoMegaAVR: public OneWireNg_BitBang
7679
virtual int readGpioIn(GpioType gpio)
7780
{
7881
UNUSED(gpio);
79-
return ((_dtaGpio.port->IN & _dtaGpio.bmsk) != 0);
82+
return __READ_GPIO(_dtaGpio);
8083
}
8184

8285
virtual void writeGpioOut(GpioType gpio, int state)
@@ -157,5 +160,6 @@ class OneWireNg_ArduinoMegaAVR: public OneWireNg_BitBang
157160
#undef __GPIO_AS_OUTPUT
158161
#undef __GPIO_AS_INPUT
159162
#undef __WRITE_GPIO
163+
#undef __READ_GPIO
160164

161165
#endif /* __OWNG_ARDUINO_MEGAAVR__ */

0 commit comments

Comments
 (0)