Rework private defs, fix compile problem on ESP32

fixes #52, fixes #53
This commit is contained in:
PaulStoffregen
2018-03-15 07:56:04 -07:00
parent 84a4ac06a3
commit 9e08f4e43e
4 changed files with 67 additions and 27 deletions
+1
View File
@@ -139,6 +139,7 @@ sample code bearing this copyright.
//--------------------------------------------------------------------------
*/
#include <Arduino.h>
#include "OneWire.h"
#include "util/OneWire_direct_gpio.h"
+9 -19
View File
@@ -1,14 +1,16 @@
#ifndef OneWire_h
#define OneWire_h
#include <inttypes.h>
#ifdef __cplusplus
#include <stdint.h>
#if defined(__AVR__)
#include <util/crc16.h>
#endif
#if ARDUINO >= 100
#include "Arduino.h" // for delayMicroseconds, digitalPinToBitMask, etc
#include <Arduino.h> // for delayMicroseconds, digitalPinToBitMask, etc
#else
#include "WProgram.h" // for delayMicroseconds
#include "pins_arduino.h" // for digitalPinToBitMask, etc
@@ -57,7 +59,7 @@
#endif
// Board-specific macros for direct GPIO
#include "util/OneWire_direct_gpio.h"
#include "util/OneWire_direct_regtype.h"
class OneWire
{
@@ -176,22 +178,10 @@ class OneWire
#endif
};
// Undefine macros from OneWire_direct_gpio.h
// Do not allow these to "leak" into Arduino sketches and other libraries
#undef OneWire_Direct_GPIO_h
#undef PIN_TO_BASEREG
#undef PIN_TO_BITMASK
// Prevent this name from leaking into Arduino sketches
#ifdef IO_REG_TYPE
#undef IO_REG_TYPE
#undef IO_REG_BASE_ATTR
#undef IO_REG_MASK_ATTR
#undef DIRECT_READ
#undef DIRECT_MODE_INPUT
#undef DIRECT_MODE_OUTPUT
#undef DIRECT_WRITE_LOW
#undef DIRECT_WRITE_HIGH
#ifdef ARDUINO_ARCH_ESP32
#undef noInterrupts()
#undef interrupts()
#endif
#endif
#endif // __cplusplus
#endif // OneWire_h
+11 -8
View File
@@ -1,14 +1,11 @@
#ifndef OneWire_Direct_GPIO_h
#define OneWire_Direct_GPIO_h
#include <inttypes.h>
// This header should ONLY be included by OneWire.cpp. These defines are
// meant to be private, used within OneWire.cpp, but not exposed to Arduino
// sketches or other libraries which may include OneWire.h.
#if ARDUINO >= 100
#include "Arduino.h" // for delayMicroseconds, digitalPinToBitMask, etc
#else
#include "WProgram.h" // for delayMicroseconds
#include "pins_arduino.h" // for digitalPinToBitMask, etc
#endif
#include <stdint.h>
// Platform specific I/O definitions
@@ -199,9 +196,15 @@ void directModeOutput(IO_REG_TYPE pin)
#define DIRECT_MODE_OUTPUT(base, pin) directModeOutput(pin)
// https://github.com/PaulStoffregen/OneWire/pull/47
// https://github.com/stickbreaker/OneWire/commit/6eb7fc1c11a15b6ac8c60e5671cf36eb6829f82c
#ifdef interrupts
#undef interrupts
#endif
#ifdef noInterrupts
#undef noInterrupts
#endif
#define noInterrupts() {portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;portENTER_CRITICAL(&mux)
#define interrupts() portEXIT_CRITICAL(&mux);}
#warning "ESP32 OneWire testing"
//#warning "ESP32 OneWire testing"
#elif defined(__SAMD21G18A__)
#define PIN_TO_BASEREG(pin) portModeRegister(digitalPinToPort(pin))
+46
View File
@@ -0,0 +1,46 @@
#ifndef OneWire_Direct_RegType_h
#define OneWire_Direct_RegType_h
#include <stdint.h>
// Platform specific I/O register type
#if defined(__AVR__)
#define IO_REG_TYPE uint8_t
#elif defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK66FX1M0__) || defined(__MK64FX512__)
#define IO_REG_TYPE uint8_t
#elif defined(__MKL26Z64__)
#define IO_REG_TYPE uint8_t
#elif defined(__SAM3X8E__) || defined(__SAM3A8C__) || defined(__SAM3A4C__)
#define IO_REG_TYPE uint32_t
#elif defined(__PIC32MX__)
#define IO_REG_TYPE uint32_t
#elif defined(ARDUINO_ARCH_ESP8266)
#define IO_REG_TYPE uint32_t
#elif defined(ARDUINO_ARCH_ESP32)
#define IO_REG_TYPE uint32_t
#define IO_REG_MASK_ATTR
#elif defined(__SAMD21G18A__)
#define IO_REG_TYPE uint32_t
#elif defined(RBL_NRF51822)
#define IO_REG_TYPE uint32_t
#elif defined(__arc__) /* Arduino101/Genuino101 specifics */
#define IO_REG_TYPE uint32_t
#elif defined(__riscv)
#define IO_REG_TYPE uint32_t
#else
#define IO_REG_TYPE unsigned int
#endif
#endif