diff --git a/cores/esp32/Arduino.h b/cores/esp32/Arduino.h index 372e70eca922546b0e18b972589d7a7505fc9eb8..d241bd9d24d7f5651d8b78f7e48a859b0ccc337e 100644 --- a/cores/esp32/Arduino.h +++ b/cores/esp32/Arduino.h @@ -24,12 +24,6 @@ extern "C" { #endif -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/semphr.h" -#include "esp32-hal.h" -#include "pins_arduino.h" - #include #include #include @@ -39,15 +33,104 @@ extern "C" { #include #include -typedef bool boolean; -typedef uint8_t byte; +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/semphr.h" +#include "esp32-hal.h" +#include "soc/gpio_reg.h" #include "binary.h" +#define PI 3.1415926535897932384626433832795 +#define HALF_PI 1.5707963267948966192313216916398 +#define TWO_PI 6.283185307179586476925286766559 +#define DEG_TO_RAD 0.017453292519943295769236907684886 +#define RAD_TO_DEG 57.295779513082320876798154814105 +#define EULER 2.718281828459045235360287471352 + +#define SERIAL 0x0 +#define DISPLAY 0x1 + +#define LSBFIRST 0 +#define MSBFIRST 1 + +//Interrupt Modes +#define RISING 0x01 +#define FALLING 0x02 +#define CHANGE 0x03 +#define ONLOW 0x04 +#define ONHIGH 0x05 +#define ONLOW_WE 0x0C +#define ONHIGH_WE 0x0D + +#define DEFAULT 1 +#define EXTERNAL 0 + +#ifndef __STRINGIFY +#define __STRINGIFY(a) #a +#endif + +// undefine stdlib's abs if encountered +#ifdef abs +#undef abs +#endif + +#define abs(x) ((x)>0?(x):-(x)) +#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) +#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5)) +#define radians(deg) ((deg)*DEG_TO_RAD) +#define degrees(rad) ((rad)*RAD_TO_DEG) +#define sq(x) ((x)*(x)) + +#define sei() +#define cli() +#define interrupts() sei() +#define noInterrupts() cli() + +#define clockCyclesPerMicrosecond() ( F_CPU / 1000000L ) +#define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() ) +#define microsecondsToClockCycles(a) ( (a) * clockCyclesPerMicrosecond() ) + +#define lowByte(w) ((uint8_t) ((w) & 0xff)) +#define highByte(w) ((uint8_t) ((w) >> 8)) + +#define bitRead(value, bit) (((value) >> (bit)) & 0x01) +#define bitSet(value, bit) ((value) |= (1UL << (bit))) +#define bitClear(value, bit) ((value) &= ~(1UL << (bit))) +#define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit)) + +#define bit(b) (1UL << (b)) +#define _BV(b) (1UL << (b)) + +#define digitalPinToPort(pin) (((pin)>31)?1:0) +#define digitalPinToBitMask(pin) (1UL << (pin)) +#define digitalPinToTimer(pin) (0) +#define portOutputRegister(port) ((volatile uint32_t*)((port)?GPIO_OUT1_REG:GPIO_OUT_REG)) +#define portInputRegister(port) ((volatile uint32_t*)((port)?GPIO_IN1_REG:GPIO_IN_REG)) +#define portModeRegister(port) ((volatile uint32_t*)((port)?GPIO_ENABLE1_REG:GPIO_ENABLE_REG)) + +#define NOT_A_PIN -1 +#define NOT_A_PORT -1 +#define NOT_AN_INTERRUPT -1 +#define NOT_ON_TIMER 0 + +typedef bool boolean; +typedef uint8_t byte; +typedef unsigned int word; + #ifdef __cplusplus } #endif +#ifndef _GLIBCXX_VECTOR +// arduino is not compatible with std::vector +#define min(a,b) ((a)<(b)?(a):(b)) +#define max(a,b) ((a)>(b)?(a):(b)) +#endif + +#define _min(a,b) ((a)<(b)?(a):(b)) +#define _max(a,b) ((a)>(b)?(a):(b)) + #include "WCharacter.h" #include "WString.h" #include "Stream.h" @@ -60,4 +143,6 @@ typedef uint8_t byte; #include "HardwareSerial.h" #include "Esp.h" +#include "pins_arduino.h" + #endif /* _ESP32_CORE_ARDUINO_H_ */ diff --git a/variants/esp32/pins_arduino.h b/variants/esp32/pins_arduino.h index d734b1b39962ddab99c87110f092ada089a15373..7b29ac2e0262b7427caf32e3d382491256d316d3 100644 --- a/variants/esp32/pins_arduino.h +++ b/variants/esp32/pins_arduino.h @@ -1,26 +1,13 @@ #ifndef Pins_Arduino_h #define Pins_Arduino_h - -#define digitalPinToPort(pin) (0) -#define digitalPinToBitMask(pin) (1UL << (pin)) -#define digitalPinToTimer(pin) (0) -#define portOutputRegister(port) -#define portInputRegister(port) -#define portModeRegister(port) - -#define NOT_A_PIN -1 -#define NOT_A_PORT -1 -#define NOT_AN_INTERRUPT -1 -#define NOT_ON_TIMER 0 - #define EXTERNAL_NUM_INTERRUPTS 16 #define NUM_DIGITAL_PINS 40 #define NUM_ANALOG_INPUTS 18 #define analogInputToDigitalPin(p) -#define digitalPinToInterrupt(p) -#define digitalPinHasPWM(p) +#define digitalPinToInterrupt(p) (((p)<40)?(p):-1) +#define digitalPinHasPWM(p) (p < 34) static const uint8_t SDA = 21; static const uint8_t SCL = 22; diff --git a/variants/esp320/pins_arduino.h b/variants/esp320/pins_arduino.h index ee7663657ab0d687b9bd548b020633c5e475371c..1c76a59f2ba9ca9197afcbff9fe586828f2f8923 100644 --- a/variants/esp320/pins_arduino.h +++ b/variants/esp320/pins_arduino.h @@ -1,26 +1,13 @@ #ifndef Pins_Arduino_h #define Pins_Arduino_h - -#define digitalPinToPort(pin) (0) -#define digitalPinToBitMask(pin) (1UL << (pin)) -#define digitalPinToTimer(pin) (0) -#define portOutputRegister(port) -#define portInputRegister(port) -#define portModeRegister(port) - -#define NOT_A_PIN -1 -#define NOT_A_PORT -1 -#define NOT_AN_INTERRUPT -1 -#define NOT_ON_TIMER 0 - #define EXTERNAL_NUM_INTERRUPTS 11 #define NUM_DIGITAL_PINS 12 #define NUM_ANALOG_INPUTS 5 #define analogInputToDigitalPin(p) -#define digitalPinToInterrupt(p) -#define digitalPinHasPWM(p) +#define digitalPinToInterrupt(p) (((p)<40)?(p):-1) +#define digitalPinHasPWM(p) (p < 34) static const uint8_t SDA = 2; static const uint8_t SCL = 14; diff --git a/variants/nano32/pins_arduino.h b/variants/nano32/pins_arduino.h index 0c2dbc0d8acb37e2dfcf5a03c9876f7bc36a6dd8..09a959df73fa4e22f30e60af180da3fa3c8a4962 100644 --- a/variants/nano32/pins_arduino.h +++ b/variants/nano32/pins_arduino.h @@ -1,26 +1,13 @@ #ifndef Pins_Arduino_h #define Pins_Arduino_h - -#define digitalPinToPort(pin) (0) -#define digitalPinToBitMask(pin) (1UL << (pin)) -#define digitalPinToTimer(pin) (0) -#define portOutputRegister(port) -#define portInputRegister(port) -#define portModeRegister(port) - -#define NOT_A_PIN -1 -#define NOT_A_PORT -1 -#define NOT_AN_INTERRUPT -1 -#define NOT_ON_TIMER 0 - #define EXTERNAL_NUM_INTERRUPTS 16 #define NUM_DIGITAL_PINS 38 #define NUM_ANALOG_INPUTS 18 #define analogInputToDigitalPin(p) -#define digitalPinToInterrupt(p) -#define digitalPinHasPWM(p) +#define digitalPinToInterrupt(p) (((p)<40)?(p):-1) +#define digitalPinHasPWM(p) (p < 34) #define LED_BUILTIN 16